Rev 6805 | Rev 6808 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6805 | Rev 6806 | ||
---|---|---|---|
Line 29... | Line 29... | ||
29 | dword font,font_begin; |
29 | dword font,font_begin; |
30 | word block; |
30 | word block; |
31 | dword raw; |
31 | dword raw; |
32 | dword raw_size; |
32 | dword raw_size; |
Line 33... | Line 33... | ||
33 | 33 | ||
34 | byte init(); |
34 | bool init(); |
35 | bool changeSIZE(); |
35 | bool changeSIZE(); |
36 | byte symbol(); |
36 | byte symbol(); |
37 | byte symbol_size(); |
37 | byte symbol_size(); |
Line 38... | Line 38... | ||
38 | dword getsize(); |
38 | dword getsize(); |
39 | 39 | ||
40 | void ApplySmooth(); |
40 | void ApplySmooth(); |
41 | int WriteIntoWindow(); |
41 | int WriteIntoWindow(); |
42 | int WriteIntoWindowCenter(); |
42 | int WriteIntoWindowCenter(); |
43 | void WriteIntoBuffer(); |
43 | void WriteIntoBuffer(); |
Line 44... | Line 44... | ||
44 | void ShowBuffer(); |
44 | void ShowBuffer(); |
45 | } label; |
45 | } kfont; |
46 | 46 | ||
47 | :bool LABEL::changeSIZE() |
47 | :bool LABEL::changeSIZE() |
Line 57... | Line 57... | ||
57 | height = DSBYTE[calc(font+file_size) - 1]; |
57 | height = DSBYTE[calc(font+file_size) - 1]; |
58 | width = DSBYTE[calc(font+file_size) - 2]; |
58 | width = DSBYTE[calc(font+file_size) - 2]; |
59 | block = math.ceil(height*width/32); |
59 | block = math.ceil(height*width/32); |
60 | return true; |
60 | return true; |
61 | } |
61 | } |
- | 62 | ||
62 | :dword LABEL::getsize(byte fontSizePoints, dword text1) |
63 | :dword LABEL::getsize(byte fontSizePoints, dword text1) |
63 | { |
64 | { |
64 | size.height = size.width = 0; |
65 | size.height = size.width = 0; |
65 | size.offset_x = size.offset_y = -1; |
66 | size.offset_x = size.offset_y = -1; |
66 | size.pt = fontSizePoints; |
67 | size.pt = fontSizePoints; |
67 | if(size.pt)if(!changeSIZE())return 0; |
68 | if(size.pt)if(!changeSIZE())return 0; |
68 | WHILE(DSBYTE[text1]) |
69 | WHILE(DSBYTE[text1]) |
69 | { |
70 | { |
70 | symbol_size(DSBYTE[text1]); |
71 | size.width += symbol_size(DSBYTE[text1]); |
71 | text1++; |
72 | text1++; |
72 | } |
73 | } |
73 | $neg size.offset_y |
74 | $neg size.offset_y |
74 | $neg size.offset_x |
75 | $neg size.offset_x |
75 | size.height += size.offset_y+1; |
76 | size.height += size.offset_y+1; |
76 | size.width += size.offset_x+1; |
77 | size.width += size.offset_x+1; |
77 | return size.width; |
78 | return size.width; |
78 | } |
79 | } |
- | 80 | ||
79 | :byte LABEL::symbol_size(byte s) |
81 | :byte LABEL::symbol_size(byte s) |
80 | { |
82 | { |
81 | //return symbol_size(s); |
- | |
82 | dword xi,yi; |
83 | int chaw_width; |
83 | dword tmp,_; |
- | |
84 | dword iii = 0; |
84 | chaw_width = symbol(0,0, s, 0); |
85 | byte rw=0; |
- | |
86 | byte X; |
- | |
87 | if(bold) size.width+=math.ceil(size.pt/17); |
85 | if(bold) chaw_width += math.ceil(size.pt/17); |
88 | if(s==32) |
- | |
89 | { |
- | |
90 | size.width += width/4; |
- | |
91 | return; |
- | |
92 | } |
- | |
93 | if(s==9) |
- | |
94 | { |
- | |
95 | size.width += width; |
86 | return chaw_width; |
96 | return; |
- | |
97 | } |
- | |
98 | s = Cp866ToAnsi(s); |
- | |
99 | tmp = block*s << 2 + font; |
- | |
100 | for(yi=0; yi |
- | |
101 | { |
- | |
102 | for(xi=0; xi |
- | |
103 | { |
- | |
104 | if(iii%32) _ >>= 1; |
- | |
105 | else |
- | |
106 | { |
- | |
107 | tmp += 4; |
- | |
108 | _ = DSDWORD[tmp]; |
- | |
109 | } |
- | |
110 | if(_&1) |
- | |
111 | { |
- | |
112 | if(xi>rw)rw=xi; |
- | |
113 | if(size.height |
- | |
114 | if(size.offset_y<0)size.offset_y = yi; |
- | |
115 | else if(yi |
- | |
116 | if(!X) X = xi; |
- | |
117 | else if(X>xi)X = xi; |
- | |
118 | } |
- | |
119 | iii++; |
- | |
120 | } |
- | |
121 | } |
- | |
122 | size.width += rw; |
- | |
123 | if(size.offset_x<0)size.offset_x = X; |
- | |
124 | } |
87 | } |
- | 88 | ||
125 | :byte LABEL::symbol(signed x,y; byte s; dword image_raw) |
89 | :byte LABEL::symbol(signed x,y; byte s; dword image_raw) |
126 | { |
90 | { |
127 | dword xi,yi; |
91 | dword xi,yi; |
128 | dword iii = 0; |
92 | dword iii = 0; |
129 | dword offs; |
93 | dword offs; |
- | 94 | dword tmp, _; |
|
130 | byte rw=0; |
95 | byte X; |
- | 96 | byte chaw_width=0; |
|
131 | if(s==32)return width/4; |
97 | if(s==32)return width/4; |
132 | if(s==9)return width; |
98 | if(s==9)return width; |
133 | s = Cp866ToAnsi(s); |
99 | s = Cp866ToAnsi(s); |
134 | EBX = block*s << 2 + font; |
100 | tmp = block*s << 2 + font; |
135 | for(yi=0; yi |
101 | for(yi=0; yi |
136 | { |
102 | { |
137 | EDI = size.offset_y + yi + y * size.width * 3 + image_raw; |
103 | EDI = size.offset_y + yi + y * size.width * 3 + image_raw; |
138 | for(xi=0; xi |
104 | for(xi=0; xi |
139 | { |
105 | { |
140 | if(iii%32) $shr ecx,1 |
106 | if(iii%32) _ >>= 1; |
141 | else |
107 | else |
142 | { |
108 | { |
143 | EBX += 4; |
109 | tmp += 4; |
144 | ECX = DSDWORD[EBX]; |
110 | _ = DSDWORD[tmp]; |
145 | } |
111 | } |
- | 112 | if(_&1) //check does the pixel set |
|
- | 113 | { |
|
- | 114 | if(xi>chaw_width)chaw_width=xi; |
|
146 | if(ECX&true) |
115 | if (image_raw) |
147 | { |
116 | { |
148 | if(xi>rw)rw=xi; |
- | |
149 | offs = x + xi *3 + EDI; |
117 | offs = x + xi *3 + EDI; |
150 | DSDWORD[offs] = DSDWORD[offs] & 0xFF000000 | color; |
118 | DSDWORD[offs] = DSDWORD[offs] & 0xFF000000 | color; |
151 | if(bold) DSDWORD[offs+3] = DSDWORD[offs+3] & 0xFF000000 | color; |
119 | if(bold) DSDWORD[offs+3] = DSDWORD[offs+3] & 0xFF000000 | color; |
152 | } |
120 | } |
- | 121 | else |
|
- | 122 | { |
|
- | 123 | if(size.height |
|
- | 124 | if(size.offset_y<0)size.offset_y = yi; else if(yi |
|
- | 125 | if(!X) X = xi; else if(X>xi)X = xi; |
|
- | 126 | if(size.offset_x<0)size.offset_x = X; |
|
- | 127 | } |
|
- | 128 | } |
|
153 | iii++; |
129 | iii++; |
154 | } |
130 | } |
155 | } |
131 | } |
156 | return rw; |
132 | return chaw_width; |
157 | } |
133 | } |
Line 158... | Line 134... | ||
158 | 134 | ||
159 | inline fastcall Cp866ToAnsi(AL) { |
135 | inline fastcall Cp866ToAnsi(AL) { |
160 | if (AL>=128)&&(AL<=175) return AL+64; |
136 | if (AL>=128)&&(AL<=175) return AL+64; |
Line 166... | Line 142... | ||
166 | if (AL==244) return 'I'; //I ukr (yi) |
142 | if (AL==244) return 'I'; //I ukr (yi) |
167 | if (AL==245) return 191; //i ukr (yi) |
143 | if (AL==245) return 191; //i ukr (yi) |
168 | return AL; |
144 | return AL; |
169 | } |
145 | } |
Line 170... | Line 146... | ||
170 | 146 | ||
171 | :byte LABEL::init(dword font_path) |
147 | :bool LABEL::init(dword font_path) |
172 | { |
148 | { |
173 | IO label_io; |
149 | IO label_io; |
174 | if(font)free(font); |
150 | if(font)free(font); |
175 | label_io.read(font_path); |
151 | label_io.read(font_path); |
Line 204... | Line 180... | ||
204 | // pixels position, where b - black, w - write |
180 | // pixels position, where b - black, w - write |
205 | // bw |
181 | // bw |
206 | // wb |
182 | // wb |
207 | if(b24(i)!=background) && (b24(i+3)==background) && (b24(i+line_w)==background) && (b24(i+3+line_w)!=background) |
183 | if(b24(i)!=background) && (b24(i+3)==background) && (b24(i+line_w)==background) && (b24(i+3+line_w)!=background) |
208 | { |
184 | { |
209 | dark_background = MixColors(background,b24(i),210); |
185 | dark_background = MixColors(background,b24(i),200); |
210 | DSDWORD[i+3] = DSDWORD[i+3] & 0xFF000000 | dark_background; |
186 | DSDWORD[i+3] = DSDWORD[i+3] & 0xFF000000 | dark_background; |
211 | DSDWORD[i+line_w] = DSDWORD[i+line_w] & 0xFF000000 | dark_background; |
187 | DSDWORD[i+line_w] = DSDWORD[i+line_w] & 0xFF000000 | dark_background; |
212 | } |
188 | } |
213 | // wb |
189 | // wb |
214 | // bw |
190 | // bw |
215 | else if(b24(i)==background) && (b24(i+3)!=background) && (b24(i+line_w)!=background) && (b24(i+3+line_w)==background) |
191 | else if(b24(i)==background) && (b24(i+3)!=background) && (b24(i+line_w)!=background) && (b24(i+3+line_w)==background) |
216 | { |
192 | { |
217 | dark_background = MixColors(background,b24(i+3),210); |
193 | dark_background = MixColors(background,b24(i+3),200); |
218 | DSDWORD[i] = DSDWORD[i] & 0xFF000000 | dark_background; |
194 | DSDWORD[i] = DSDWORD[i] & 0xFF000000 | dark_background; |
219 | DSDWORD[i+3+line_w] = DSDWORD[i+3+line_w] & 0xFF000000 | dark_background; |
195 | DSDWORD[i+3+line_w] = DSDWORD[i+3+line_w] & 0xFF000000 | dark_background; |
220 | } |
196 | } |
221 | } |
197 | } |
222 | } |
198 | } |
Line 278... | Line 254... | ||
278 | :void LABEL::ShowBuffer(dword x, y){ |
254 | :void LABEL::ShowBuffer(dword x, y){ |
279 | _PutImage(x, y, size.width, size.height, raw); |
255 | _PutImage(x, y, size.width, size.height, raw); |
280 | } |
256 | } |
Line 281... | Line -... | ||
281 | - | ||
282 | 257 | ||
283 | 258 |