annotate foosdk/sdk/foobar2000/shared/text_drawing.cpp @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #include "shared.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 static bool is_rect_null(const RECT * r)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 return r->right <= r->left || r->bottom <= r->top;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 UINT SHARED_EXPORT uGetTextHeight(HDC dc)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 TEXTMETRIC tm;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 POINT pt[2];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 GetTextMetrics(dc,&tm);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 pt[0].x = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 pt[0].y = tm.tmHeight;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 pt[1].x = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 pt[1].y = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 LPtoDP(dc,pt,2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 int ret = pt[0].y - pt[1].y;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 return ret > 1 ? (unsigned)ret : 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 static int get_text_width(HDC dc,const TCHAR * src,int len)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 if (len<=0) return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 SIZE goatse;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 GetTextExtentPoint32(dc,src,len,&goatse);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 return goatse.cx;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 //GetTextExtentPoint32 wrapper, removes color marks
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 static int get_text_width_color(HDC dc,const TCHAR * src,int len)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 int ptr = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 int start = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 int rv = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 if (len<0) len = (int) _tcslen(src);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 while(ptr<len)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 if (src[ptr]==3)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 rv += get_text_width(dc,src+start,ptr-start);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 ptr++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 while(ptr<len && src[ptr]!=3) ptr++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 if (ptr<len) ptr++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 start = ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 else ptr++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 rv += get_text_width(dc,src+start,ptr-start);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 return rv;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 static BOOL text_out_colors(HDC dc,const TCHAR * src,int len,int pos_x,int pos_y,const RECT * clip,bool selected,DWORD default_color)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 if (clip)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 if (is_rect_null(clip) || clip->right<=pos_x || clip->bottom<=pos_y) return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 SetTextAlign(dc,TA_LEFT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 SetBkMode(dc,TRANSPARENT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 SetTextColor(dc,selected ? 0xFFFFFF - default_color : default_color);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 int title_ptr = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 int textout_start = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 int position = pos_x;//item.left+BORDER;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 for(;;)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 if (title_ptr>=len || src[title_ptr]==3)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 if (title_ptr>textout_start)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 int width = get_text_width(dc,src+textout_start,title_ptr-textout_start);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 ExtTextOut(dc,position,pos_y,clip ? ETO_CLIPPED : 0,clip,src+textout_start,title_ptr-textout_start,0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 position += width;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 textout_start = title_ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 if (title_ptr>=len) break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 if (src[title_ptr]==3)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 DWORD new_color;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 DWORD new_inverted;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 bool have_inverted = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 if (src[title_ptr+1]==3) {new_color=default_color;title_ptr+=2;}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 title_ptr++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 new_color = _tcstoul(src+title_ptr,0,16);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 while(title_ptr<len && src[title_ptr]!=3)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 if (!have_inverted && src[title_ptr-1]=='|')
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 new_inverted = _tcstoul(src+title_ptr,0,16);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 have_inverted = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 title_ptr++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 if (title_ptr<len) title_ptr++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 if (selected) new_color = have_inverted ? new_inverted : 0xFFFFFF - new_color;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 SetTextColor(dc,new_color);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 textout_start = title_ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 title_ptr = (int)( CharNext(src+title_ptr)-src );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 static BOOL text_out_colors_tab(HDC dc,const TCHAR * display,int display_len,const RECT * item,int border,const RECT * base_clip,bool selected,DWORD default_color,bool columns)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 RECT clip;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 if (base_clip)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 IntersectRect(&clip,base_clip,item);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 else clip = *item;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 if (is_rect_null(&clip)) return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 int pos_y = item->top + (item->bottom-item->top - (int)uGetTextHeight(dc)) / 2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 int n_tabs = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 int total_width = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 int start = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 int n;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 for(n=0;n<display_len;n++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 if (display[n]=='\t')
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 if (start<n) total_width += get_text_width_color(dc,display+start,n-start) + 2*border;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 start = n+1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 n_tabs++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 if (start<display_len)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 total_width += get_text_width_color(dc,display+start,display_len-start) + 2*border;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 int tab_total = item->right - item->left;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 if (!columns) tab_total -= total_width;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 int ptr = display_len;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 int tab_ptr = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 int written = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 int clip_x = item->right;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 do
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 int ptr_end = ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 while(ptr>0 && display[ptr-1]!='\t') ptr--;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 const TCHAR * t_string = display + ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 int t_length = ptr_end - ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 if (t_length>0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 int t_width = get_text_width_color(dc,t_string,t_length) + border*2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 int pos_x;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 int pos_x_right;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 if (!columns)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 pos_x_right = item->right - MulDiv(tab_ptr,tab_total,n_tabs) - written;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 if (tab_ptr==0) pos_x_right = item->right;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 else pos_x_right = item->right - MulDiv(tab_ptr,tab_total,n_tabs) + t_width;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 if (ptr==0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 pos_x = item->left;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 pos_x = pos_x_right - t_width ;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 if (pos_x<item->left) pos_x = item->left;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 RECT t_clip = clip;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 if (t_clip.right > clip_x) t_clip.right = clip_x;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 text_out_colors(dc,t_string,t_length,pos_x+border,pos_y,&t_clip,selected,default_color);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 if (clip_x>pos_x) clip_x = pos_x;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 written += t_width;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201 if (ptr>0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 ptr--;//tab char
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 tab_ptr++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207 while(ptr>0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 extern "C" {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214 BOOL SHARED_EXPORT uTextOutColors(HDC dc,const char * p_text,UINT len,int x,int y,const RECT * clip,BOOL is_selected,DWORD default_color)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216 try {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 pfc::stringcvt::string_os_from_utf8 temp(p_text);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218 return text_out_colors(dc,temp,pfc::downcast_guarded<int>(temp.length()),x,y,clip,!!is_selected,default_color);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 } catch(...) {return FALSE;}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222 BOOL SHARED_EXPORT uTextOutColorsTabbed(HDC dc,const char * p_text,UINT len,const RECT * item,int border,const RECT * clip,BOOL selected,DWORD default_color,BOOL use_columns)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224 try {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225 pfc::stringcvt::string_os_from_utf8 temp(p_text);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226 return text_out_colors_tab(dc,temp,pfc::downcast_guarded<int>(temp.length()),item,border,clip,!!selected,default_color,!!use_columns);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 } catch(...) {return FALSE;}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
229
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
230 }