Rev 6806 | Rev 7160 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6806 | Rev 6808 | ||
---|---|---|---|
Line -... | Line 1... | ||
- | 1 | // Сам шрифт представляет. |
|
- | 2 | ||
- | 3 | // Голова: |
|
- | 4 | // [2 байта символы:KF] |
|
- | 5 | // [4 байта:указатель на название шрифта] |
|
- | 6 | // [1 байт:размер массива указателей на размеры шрифтов, указатель 4 байта, т.е. размер = размер массива*4] |
|
- | 7 | // [размер массива*4 байт:указатели..] |
|
- | 8 | ||
- | 9 | // Тело файла: |
|
- | 10 | // [4 байта:масштаб ширина][4 байта:масштаб высота][255*4 байт:указатели на символы][масштаб ширина*масштаб высота байт: данные символов..] |
|
- | 11 | ||
- | 12 | // Конец: |
|
- | 13 | // [Название шрифта:"Times New Roman"] |
|
- | 14 | ||
- | 15 | ||
1 | #ifndef INCLUDE_LABEL_H |
16 | #ifndef INCLUDE_LABEL_H |
2 | #define INCLUDE_LABEL_H |
17 | #define INCLUDE_LABEL_H |
Line 3... | Line 18... | ||
3 | 18 | ||
4 | #ifndef INCLUDE_MATH_H |
19 | #ifndef INCLUDE_MATH_H |
Line 12... | Line 27... | ||
12 | #include "../lib/patterns/rgb.h" |
27 | #include "../lib/patterns/rgb.h" |
Line 13... | Line 28... | ||
13 | 28 | ||
Line -... | Line 29... | ||
- | 29 | ||
- | 30 | #define DEFAULT_FONT "/sys/fonts/Tahoma.kf" |
|
- | 31 | ||
- | 32 | #ifndef KFONT_BPP |
|
14 | 33 | #define KFONT_BPP 4 |
|
15 | #define DEFAULT_FONT "/sys/fonts/Tahoma.kf" |
34 | #endif |
16 | 35 | ||
17 | :struct __SIZE |
36 | :struct __SIZE |
18 | { |
37 | { |
Line 28... | Line 47... | ||
28 | dword color, background; |
47 | dword color, background; |
29 | dword font,font_begin; |
48 | dword font,font_begin; |
30 | word block; |
49 | word block; |
31 | dword raw; |
50 | dword raw; |
32 | dword raw_size; |
51 | dword raw_size; |
- | 52 | //dword palette[256]; |
|
Line 33... | Line 53... | ||
33 | 53 | ||
34 | bool init(); |
54 | bool init(); |
35 | bool changeSIZE(); |
55 | bool changeSIZE(); |
36 | byte symbol(); |
56 | byte symbol(); |
Line 40... | Line 60... | ||
40 | void ApplySmooth(); |
60 | void ApplySmooth(); |
41 | int WriteIntoWindow(); |
61 | int WriteIntoWindow(); |
42 | int WriteIntoWindowCenter(); |
62 | int WriteIntoWindowCenter(); |
43 | void WriteIntoBuffer(); |
63 | void WriteIntoBuffer(); |
44 | void ShowBuffer(); |
64 | void ShowBuffer(); |
- | 65 | void ShowBufferPart(); |
|
45 | } kfont; |
66 | } kfont; |
Line -... | Line 67... | ||
- | 67 | ||
- | 68 | :bool LABEL::init(dword font_path) |
|
- | 69 | { |
|
- | 70 | IO label_io; |
|
- | 71 | if(font)free(font); |
|
- | 72 | label_io.read(font_path); |
|
- | 73 | if(!EAX) { |
|
- | 74 | debugln(font_path); |
|
- | 75 | label_io.run("/sys/@notify", "'Error: KFONT is not loaded.' -E"); |
|
- | 76 | return false; |
|
- | 77 | } |
|
- | 78 | font_begin = label_io.buffer_data; |
|
- | 79 | changeSIZE(); |
|
- | 80 | smooth = true; |
|
- | 81 | return true; |
|
- | 82 | } |
|
46 | 83 | ||
47 | :bool LABEL::changeSIZE() |
84 | :bool LABEL::changeSIZE() |
48 | { |
85 | { |
49 | dword file_size; |
86 | dword file_size; |
50 | dword ofs; |
87 | dword ofs; |
Line 98... | Line 135... | ||
98 | if(s==9)return width; |
135 | if(s==9)return width; |
99 | s = Cp866ToAnsi(s); |
136 | s = Cp866ToAnsi(s); |
100 | tmp = block*s << 2 + font; |
137 | tmp = block*s << 2 + font; |
101 | for(yi=0; yi |
138 | for(yi=0; yi |
102 | { |
139 | { |
103 | EDI = size.offset_y + yi + y * size.width * 3 + image_raw; |
140 | EDI = size.offset_y + yi + y * size.width * KFONT_BPP + image_raw; |
104 | for(xi=0; xi |
141 | for(xi=0; xi |
105 | { |
142 | { |
106 | if(iii%32) _ >>= 1; |
143 | if(iii%32) _ >>= 1; |
107 | else |
144 | else |
108 | { |
145 | { |
Line 110... | Line 147... | ||
110 | _ = DSDWORD[tmp]; |
147 | _ = DSDWORD[tmp]; |
111 | } |
148 | } |
112 | if(_&1) //check does the pixel set |
149 | if(_&1) //check does the pixel set |
113 | { |
150 | { |
114 | if(xi>chaw_width)chaw_width=xi; |
151 | if(xi>chaw_width)chaw_width=xi; |
- | 152 | //in case of image_raw!=0 draw font into bug |
|
- | 153 | //in case of image_raw==0 calculate size |
|
115 | if (image_raw) |
154 | if (image_raw) |
116 | { |
155 | { |
117 | offs = x + xi *3 + EDI; |
156 | offs = x + xi * KFONT_BPP + EDI; |
118 | DSDWORD[offs] = DSDWORD[offs] & 0xFF000000 | color; |
157 | DSDWORD[offs] = color; |
119 | if(bold) DSDWORD[offs+3] = DSDWORD[offs+3] & 0xFF000000 | color; |
158 | if(bold) DSDWORD[offs+KFONT_BPP] = color; |
120 | } |
159 | } |
121 | else |
160 | else |
122 | { |
161 | { |
123 | if(size.height |
162 | if(size.height |
124 | if(size.offset_y<0)size.offset_y = yi; else if(yi |
163 | if(size.offset_y<0)size.offset_y = yi; else if(yi |
Line 142... | Line 181... | ||
142 | if (AL==244) return 'I'; //I ukr (yi) |
181 | if (AL==244) return 'I'; //I ukr (yi) |
143 | if (AL==245) return 191; //i ukr (yi) |
182 | if (AL==245) return 191; //i ukr (yi) |
144 | return AL; |
183 | return AL; |
145 | } |
184 | } |
Line 146... | Line -... | ||
146 | - | ||
147 | :bool LABEL::init(dword font_path) |
- | |
148 | { |
- | |
149 | IO label_io; |
- | |
150 | if(font)free(font); |
- | |
151 | label_io.read(font_path); |
- | |
152 | if(!EAX) { |
- | |
153 | debugln(font_path); |
- | |
154 | label_io.run("/sys/@notify", "'Error: KFONT is not loaded.' -E"); |
- | |
155 | return false; |
- | |
156 | } |
- | |
157 | font_begin = label_io.buffer_data; |
- | |
158 | changeSIZE(); |
- | |
159 | smooth = true; |
- | |
160 | return true; |
- | |
161 | } |
- | |
162 | - | ||
163 | 185 | ||
164 | /*===================================================================================== |
186 | /*===================================================================================== |
165 | =========================== =========================== |
187 | =========================== =========================== |
166 | =========================== RAW =========================== |
188 | =========================== RAW =========================== |
167 | =========================== =========================== |
189 | =========================== =========================== |
Line 168... | Line -... | ||
168 | =====================================================================================*/ |
- | |
169 | 190 | =====================================================================================*/ |
|
170 | 191 | ||
171 | inline fastcall dword b24(EAX) { return DSDWORD[EAX] & 0x00FFFFFF; } |
192 | inline fastcall dword b32(EAX) { return DSDWORD[EAX]; } |
172 | :void LABEL::ApplySmooth() |
193 | :void LABEL::ApplySmooth() |
173 | { |
194 | { |
174 | dword i,line_w,to,dark_background; |
195 | dword i,line_w,to,dark_background; |
175 | line_w = size.width * 3; |
196 | line_w = size.width * KFONT_BPP; |
176 | to = size.height - 1 * line_w + raw - 3; |
197 | to = size.height - 1 * line_w + raw - KFONT_BPP; |
177 | for(i=raw; i < to; i+=3) |
198 | for(i=raw; i < to; i+=KFONT_BPP) |
178 | { |
199 | { |
179 | if(i-raw%line_w +3 == line_w) continue; |
200 | if(i-raw%line_w +KFONT_BPP == line_w) continue; |
180 | // pixels position, where b - black, w - write |
201 | // pixels position, where b - black, w - write |
- | 202 | // bw |
|
- | 203 | // wb |
|
181 | // bw |
204 | if(b32(i)!=background) { |
182 | // wb |
205 | if (b32(i+KFONT_BPP)==background) |
183 | if(b24(i)!=background) && (b24(i+3)==background) && (b24(i+line_w)==background) && (b24(i+3+line_w)!=background) |
206 | && (b32(i+line_w)==background) && (b32(i+KFONT_BPP+line_w)!=background) |
184 | { |
207 | { |
185 | dark_background = MixColors(background,b24(i),200); |
208 | dark_background = MixColors(background,b32(i),200); |
- | 209 | DSDWORD[i+KFONT_BPP] = dark_background; |
|
186 | DSDWORD[i+3] = DSDWORD[i+3] & 0xFF000000 | dark_background; |
210 | DSDWORD[i+line_w] = dark_background; |
187 | DSDWORD[i+line_w] = DSDWORD[i+line_w] & 0xFF000000 | dark_background; |
211 | } |
188 | } |
212 | } |
- | 213 | // wb |
|
189 | // wb |
214 | // bw |
190 | // bw |
215 | else if (b32(i+KFONT_BPP)!=background) |
191 | else if(b24(i)==background) && (b24(i+3)!=background) && (b24(i+line_w)!=background) && (b24(i+3+line_w)==background) |
216 | && (b32(i+line_w)!=background) && (b32(i+KFONT_BPP+line_w)==background) |
192 | { |
217 | { |
193 | dark_background = MixColors(background,b24(i+3),200); |
218 | dark_background = MixColors(background,b32(i+KFONT_BPP),200); |
194 | DSDWORD[i] = DSDWORD[i] & 0xFF000000 | dark_background; |
219 | DSDWORD[i] = dark_background; |
195 | DSDWORD[i+3+line_w] = DSDWORD[i+3+line_w] & 0xFF000000 | dark_background; |
220 | DSDWORD[i+KFONT_BPP+line_w] = dark_background; |
196 | } |
221 | } |
Line 197... | Line 222... | ||
197 | } |
222 | } |
Line 211... | Line 236... | ||
211 | background = _background; |
236 | background = _background; |
Line 212... | Line 237... | ||
212 | 237 | ||
213 | size.width = w; |
238 | size.width = w; |
Line 214... | Line 239... | ||
214 | size.height = h; |
239 | size.height = h; |
215 | 240 | ||
216 | new_raw_size = w*h*3; |
241 | new_raw_size = w*h*KFONT_BPP; |
217 | if(raw_size != new_raw_size) |
242 | if(raw_size != new_raw_size) |
218 | { |
243 | { |
219 | raw_size = new_raw_size; |
244 | raw_size = new_raw_size; |
220 | free(raw); |
245 | free(raw); |
221 | raw = malloc(raw_size); |
246 | raw = malloc(raw_size); |
222 | // Fill background color |
247 | // Fill background color |
223 | EBX = background; |
248 | EBX = background; |
224 | EAX = raw_size+raw; |
249 | EAX = raw_size+raw; |
225 | for (EDI=raw; EDI |
250 | for (EDI=raw; EDI |
226 | } |
251 | } |
227 | WHILE(DSBYTE[text1]) |
252 | WHILE(DSBYTE[text1]) |
228 | { |
253 | { |
Line 249... | Line 274... | ||
249 | { |
274 | { |
250 | getsize(fontSizePoints, text1); |
275 | getsize(fontSizePoints, text1); |
251 | return WriteIntoWindow(w-size.width/2+x,y, _background, _color, fontSizePoints, text1); |
276 | return WriteIntoWindow(w-size.width/2+x,y, _background, _color, fontSizePoints, text1); |
252 | } |
277 | } |
Line 253... | Line 278... | ||
253 | 278 | ||
- | 279 | :void LABEL::ShowBuffer(dword _x, _y) |
|
254 | :void LABEL::ShowBuffer(dword x, y){ |
280 | { |
- | 281 | if (4==KFONT_BPP) PutPaletteImage(raw, size.width, size.height, _x, _y, 32, 0); |
|
255 | _PutImage(x, y, size.width, size.height, raw); |
282 | //if (1==KFONT_BPP) PutPaletteImage(raw, size.width, size.height, _x, _y, 8, #palette); |
Line -... | Line 283... | ||
- | 283 | } |
|
- | 284 | ||
- | 285 | :void LABEL::ShowBufferPart(dword _x, _y, _w, _h, _buf_offset) |
|
- | 286 | { |
|
- | 287 | if (4==KFONT_BPP) PutPaletteImage(_buf_offset * KFONT_BPP + raw, _w, _h, _x, _y, 32, 0); |
|
Line 256... | Line 288... | ||
256 | } |
288 | //if (1==KFONT_BPP) PutPaletteImage(_buf_offset * KFONT_BPP + raw, _w, _h, _x, _y, 8, #palette); |
257 | 289 | } |