Alexei Podtelezhnikov pushed to branch master at FreeType / FreeType Demo Programs
Commits:
-
50de6cec
by Alexei Podtelezhnikov at 2022-09-15T17:36:06+00:00
3 changed files:
Changes:
... | ... | @@ -244,55 +244,69 @@ gblender_blit_init( GBlenderBlit blit, |
244 | 244 | grSurface* surface,
|
245 | 245 | grBitmap* glyph )
|
246 | 246 | {
|
247 | - int src_x = 0;
|
|
248 | - int src_y = 0;
|
|
249 | - int delta;
|
|
250 | - |
|
251 | - grBitmap* target = (grBitmap*)surface;
|
|
252 | - |
|
253 | - GBlenderSourceFormat src_format;
|
|
254 | - const unsigned char* src_buffer = glyph->buffer;
|
|
255 | - int src_pitch = glyph->pitch;
|
|
256 | - int src_width = glyph->width;
|
|
257 | - int src_height = glyph->rows;
|
|
258 | - unsigned char* dst_buffer = target->buffer;
|
|
259 | - const int dst_pitch = target->pitch;
|
|
260 | - const int dst_width = target->width;
|
|
261 | - const int dst_height = target->rows;
|
|
247 | + grBitmap* target = &surface->bitmap;
|
|
248 | + GBlender blender = surface->gblender;
|
|
249 | + |
|
250 | + GBlenderSourceFormat src_format;
|
|
251 | + int src_x = 0;
|
|
252 | + int src_y = 0;
|
|
253 | + int delta;
|
|
254 | + const unsigned char* src_buffer = glyph->buffer;
|
|
255 | + int src_pitch = glyph->pitch;
|
|
256 | + int src_width = glyph->width;
|
|
257 | + int src_height = glyph->rows;
|
|
258 | + unsigned char* dst_buffer = target->buffer;
|
|
259 | + const int dst_pitch = target->pitch;
|
|
260 | + const int dst_width = target->width;
|
|
261 | + const int dst_height = target->rows;
|
|
262 | 262 | |
263 | 263 | |
264 | 264 | switch ( glyph->mode )
|
265 | 265 | {
|
266 | - case gr_pixel_mode_gray: src_format = GBLENDER_SOURCE_GRAY8;
|
|
267 | - gblender_use_channels( surface->gblender, 0 );
|
|
266 | + case gr_pixel_mode_gray:
|
|
267 | + src_format = GBLENDER_SOURCE_GRAY8;
|
|
268 | + if ( blender->channels )
|
|
269 | + gblender_clear( blender );
|
|
268 | 270 | break;
|
269 | - case gr_pixel_mode_lcd: src_format = GBLENDER_SOURCE_HRGB;
|
|
271 | + case gr_pixel_mode_lcd:
|
|
272 | + src_format = GBLENDER_SOURCE_HRGB;
|
|
270 | 273 | src_width /= 3;
|
271 | - gblender_use_channels( surface->gblender, 1 );
|
|
274 | + if ( !blender->channels )
|
|
275 | + gblender_clear_channels( blender );
|
|
272 | 276 | break;
|
273 | - case gr_pixel_mode_lcd2: src_format = GBLENDER_SOURCE_HBGR;
|
|
277 | + case gr_pixel_mode_lcd2:
|
|
278 | + src_format = GBLENDER_SOURCE_HBGR;
|
|
274 | 279 | src_width /= 3;
|
275 | - gblender_use_channels( surface->gblender, 1 );
|
|
280 | + if ( !blender->channels )
|
|
281 | + gblender_clear_channels( blender );
|
|
276 | 282 | break;
|
277 | - case gr_pixel_mode_lcdv: src_format = GBLENDER_SOURCE_VRGB;
|
|
283 | + case gr_pixel_mode_lcdv:
|
|
284 | + src_format = GBLENDER_SOURCE_VRGB;
|
|
278 | 285 | src_height /= 3;
|
279 | 286 | src_pitch *= 3;
|
280 | - gblender_use_channels( surface->gblender, 1 );
|
|
287 | + if ( !blender->channels )
|
|
288 | + gblender_clear_channels( blender );
|
|
281 | 289 | break;
|
282 | - case gr_pixel_mode_lcdv2: src_format = GBLENDER_SOURCE_VBGR;
|
|
290 | + case gr_pixel_mode_lcdv2:
|
|
291 | + src_format = GBLENDER_SOURCE_VBGR;
|
|
283 | 292 | src_height /= 3;
|
284 | 293 | src_pitch *= 3;
|
285 | - gblender_use_channels( surface->gblender, 1 );
|
|
294 | + if ( !blender->channels )
|
|
295 | + gblender_clear_channels( blender );
|
|
286 | 296 | break;
|
287 | - case gr_pixel_mode_bgra: src_format = GBLENDER_SOURCE_BGRA;
|
|
297 | + case gr_pixel_mode_bgra:
|
|
298 | + src_format = GBLENDER_SOURCE_BGRA;
|
|
288 | 299 | break;
|
289 | - case gr_pixel_mode_mono: src_format = GBLENDER_SOURCE_MONO;
|
|
300 | + case gr_pixel_mode_mono:
|
|
301 | + src_format = GBLENDER_SOURCE_MONO;
|
|
290 | 302 | break;
|
291 | 303 | default:
|
292 | 304 | grError = gr_err_bad_source_depth;
|
293 | 305 | return -2;
|
294 | 306 | }
|
295 | 307 | |
308 | + blit->blender = blender;
|
|
309 | + |
|
296 | 310 | switch ( target->mode )
|
297 | 311 | {
|
298 | 312 | case gr_pixel_mode_gray:
|
... | ... | @@ -315,8 +329,6 @@ gblender_blit_init( GBlenderBlit blit, |
315 | 329 | return -2;
|
316 | 330 | }
|
317 | 331 | |
318 | - blit->blender = surface->gblender;
|
|
319 | - |
|
320 | 332 | if ( dst_x < 0 )
|
321 | 333 | {
|
322 | 334 | src_width += dst_x;
|
... | ... | @@ -378,6 +390,7 @@ grSetTargetPenBrush( grSurface* surface, |
378 | 390 | grColor color )
|
379 | 391 | {
|
380 | 392 | grBitmap* target = &surface->bitmap;
|
393 | + GBlender blender = surface->gblender;
|
|
381 | 394 | |
382 | 395 | |
383 | 396 | surface->origin = target->buffer;
|
... | ... | @@ -415,7 +428,8 @@ grSetTargetPenBrush( grSurface* surface, |
415 | 428 | |
416 | 429 | surface->color = color;
|
417 | 430 | |
418 | - gblender_use_channels( surface->gblender, 0 );
|
|
431 | + if ( blender->channels )
|
|
432 | + gblender_clear( blender );
|
|
419 | 433 | }
|
420 | 434 | |
421 | 435 | |
... | ... | @@ -426,7 +440,7 @@ grBlitGlyphToSurface( grSurface* surface, |
426 | 440 | grPos y,
|
427 | 441 | grColor color )
|
428 | 442 | {
|
429 | - GBlenderBlitRec gblit[1];
|
|
443 | + GBlenderBlitRec gblit[1];
|
|
430 | 444 | |
431 | 445 | |
432 | 446 | /* check arguments */
|
... | ... | @@ -116,49 +116,54 @@ gblender_set_gamma_table( double gamma_value, |
116 | 116 | |
117 | 117 | /* clear the cache
|
118 | 118 | */
|
119 | -static void
|
|
120 | -gblender_clear( GBlender blender )
|
|
119 | +GBLENDER_APIDEF( void )
|
|
120 | +gblender_clear_channels( GBlender blender )
|
|
121 | 121 | {
|
122 | + GBlenderChanKey chan_keys = (GBlenderChanKey)blender->keys;
|
|
122 | 123 | int nn;
|
123 | 124 | |
124 | - if ( blender->channels )
|
|
125 | - {
|
|
126 | - GBlenderChanKey chan_keys = (GBlenderChanKey) blender->keys;
|
|
127 | 125 | |
128 | - for ( nn = 0; nn < GBLENDER_KEY_COUNT * 3; nn++ )
|
|
129 | - chan_keys[nn].index = 0xFFFF;
|
|
126 | + for ( nn = 0; nn < GBLENDER_KEY_COUNT * 3; nn++ )
|
|
127 | + chan_keys[nn].index = 0xFFFF;
|
|
130 | 128 | |
131 | - blender->cache_r_back = 0;
|
|
132 | - blender->cache_r_fore = ~0U;
|
|
133 | - blender->cache_r_cells = NULL;
|
|
129 | + blender->cache_r_back = 0;
|
|
130 | + blender->cache_r_fore = ~0U;
|
|
131 | + blender->cache_r_cells = NULL;
|
|
134 | 132 | |
135 | - blender->cache_g_back = 0;
|
|
136 | - blender->cache_g_fore = ~0U;
|
|
137 | - blender->cache_g_cells = NULL;
|
|
133 | + blender->cache_g_back = 0;
|
|
134 | + blender->cache_g_fore = ~0U;
|
|
135 | + blender->cache_g_cells = NULL;
|
|
138 | 136 | |
139 | - blender->cache_b_back = 0;
|
|
140 | - blender->cache_b_fore = ~0U;
|
|
141 | - blender->cache_b_cells = NULL;
|
|
142 | - }
|
|
143 | - else
|
|
144 | - {
|
|
145 | - GBlenderKey keys = blender->keys;
|
|
137 | + blender->cache_b_back = 0;
|
|
138 | + blender->cache_b_fore = ~0U;
|
|
139 | + blender->cache_b_cells = NULL;
|
|
146 | 140 | |
147 | - for ( nn = 0; nn < GBLENDER_KEY_COUNT; nn++ )
|
|
148 | - keys[nn].cells = NULL;
|
|
141 | + blender->channels = 1;
|
|
142 | +}
|
|
149 | 143 | |
150 | - blender->cache_back = 0;
|
|
151 | - blender->cache_fore = ~0U;
|
|
152 | - blender->cache_cells = NULL;
|
|
153 | - }
|
|
144 | + |
|
145 | +GBLENDER_APIDEF( void )
|
|
146 | +gblender_clear( GBlender blender )
|
|
147 | +{
|
|
148 | + GBlenderKey keys = blender->keys;
|
|
149 | + int nn;
|
|
150 | + |
|
151 | + |
|
152 | + for ( nn = 0; nn < GBLENDER_KEY_COUNT; nn++ )
|
|
153 | + keys[nn].cells = NULL;
|
|
154 | + |
|
155 | + blender->cache_back = 0;
|
|
156 | + blender->cache_fore = ~0U;
|
|
157 | + blender->cache_cells = NULL;
|
|
158 | + |
|
159 | + blender->channels = 0;
|
|
154 | 160 | }
|
155 | 161 | |
162 | + |
|
156 | 163 | GBLENDER_APIDEF( void )
|
157 | 164 | gblender_init( GBlender blender,
|
158 | 165 | double gamma_value )
|
159 | 166 | {
|
160 | - blender->channels = 0;
|
|
161 | - |
|
162 | 167 | gblender_set_gamma_table( gamma_value,
|
163 | 168 | blender->gamma_ramp,
|
164 | 169 | blender->gamma_ramp_inv );
|
... | ... | @@ -174,21 +179,6 @@ gblender_init( GBlender blender, |
174 | 179 | }
|
175 | 180 | |
176 | 181 | |
177 | -GBLENDER_APIDEF( void )
|
|
178 | -gblender_use_channels( GBlender blender,
|
|
179 | - int channels )
|
|
180 | -{
|
|
181 | - channels = (channels != 0);
|
|
182 | - |
|
183 | - if ( blender->channels != channels )
|
|
184 | - {
|
|
185 | - blender->channels = channels;
|
|
186 | - gblender_clear( blender );
|
|
187 | - }
|
|
188 | -}
|
|
189 | - |
|
190 | - |
|
191 | - |
|
192 | 182 | /* recompute the grade levels of a given key
|
193 | 183 | */
|
194 | 184 | static void
|
... | ... | @@ -122,12 +122,11 @@ |
122 | 122 | |
123 | 123 | /* clear blender, and reset stats */
|
124 | 124 | GBLENDER_API( void )
|
125 | - gblender_reset( GBlender blender );
|
|
126 | - |
|
125 | + gblender_clear( GBlender blender );
|
|
127 | 126 | |
128 | 127 | GBLENDER_API( void )
|
129 | - gblender_use_channels( GBlender blender,
|
|
130 | - int channels );
|
|
128 | + gblender_clear_channels( GBlender blender );
|
|
129 | + |
|
131 | 130 | |
132 | 131 | /* lookup a cell range for a given (background,foreground) pair
|
133 | 132 | */
|