mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-05-05 01:48:07 +02:00
Add lcd filter type to the public API and font options
New struct cairo_lcd_filter_t and new functions cairo_font_options_set_lcd_filter cairo_font_options_get_lcd_filter
This commit is contained in:
parent
4b5e0ba720
commit
0013f2c269
3 changed files with 73 additions and 1 deletions
|
|
@ -39,6 +39,7 @@
|
|||
static const cairo_font_options_t _cairo_font_options_nil = {
|
||||
CAIRO_ANTIALIAS_DEFAULT,
|
||||
CAIRO_SUBPIXEL_ORDER_DEFAULT,
|
||||
CAIRO_LCD_FILTER_DEFAULT,
|
||||
CAIRO_HINT_STYLE_DEFAULT,
|
||||
CAIRO_HINT_METRICS_DEFAULT
|
||||
};
|
||||
|
|
@ -54,6 +55,7 @@ _cairo_font_options_init_default (cairo_font_options_t *options)
|
|||
{
|
||||
options->antialias = CAIRO_ANTIALIAS_DEFAULT;
|
||||
options->subpixel_order = CAIRO_SUBPIXEL_ORDER_DEFAULT;
|
||||
options->lcd_filter = CAIRO_LCD_FILTER_DEFAULT;
|
||||
options->hint_style = CAIRO_HINT_STYLE_DEFAULT;
|
||||
options->hint_metrics = CAIRO_HINT_METRICS_DEFAULT;
|
||||
}
|
||||
|
|
@ -64,6 +66,7 @@ _cairo_font_options_init_copy (cairo_font_options_t *options,
|
|||
{
|
||||
options->antialias = other->antialias;
|
||||
options->subpixel_order = other->subpixel_order;
|
||||
options->lcd_filter = other->lcd_filter;
|
||||
options->hint_style = other->hint_style;
|
||||
options->hint_metrics = other->hint_metrics;
|
||||
}
|
||||
|
|
@ -189,6 +192,8 @@ cairo_font_options_merge (cairo_font_options_t *options,
|
|||
options->antialias = other->antialias;
|
||||
if (other->subpixel_order != CAIRO_SUBPIXEL_ORDER_DEFAULT)
|
||||
options->subpixel_order = other->subpixel_order;
|
||||
if (other->lcd_filter != CAIRO_LCD_FILTER_DEFAULT)
|
||||
options->lcd_filter = other->lcd_filter;
|
||||
if (other->hint_style != CAIRO_HINT_STYLE_DEFAULT)
|
||||
options->hint_style = other->hint_style;
|
||||
if (other->hint_metrics != CAIRO_HINT_METRICS_DEFAULT)
|
||||
|
|
@ -221,6 +226,7 @@ cairo_font_options_equal (const cairo_font_options_t *options,
|
|||
|
||||
return (options->antialias == other->antialias &&
|
||||
options->subpixel_order == other->subpixel_order &&
|
||||
options->lcd_filter == other->lcd_filter &&
|
||||
options->hint_style == other->hint_style &&
|
||||
options->hint_metrics == other->hint_metrics);
|
||||
}
|
||||
|
|
@ -246,7 +252,8 @@ cairo_font_options_hash (const cairo_font_options_t *options)
|
|||
|
||||
return ((options->antialias) |
|
||||
(options->subpixel_order << 4) |
|
||||
(options->hint_style << 8) |
|
||||
(options->lcd_filter << 8) |
|
||||
(options->hint_style << 12) |
|
||||
(options->hint_metrics << 16));
|
||||
}
|
||||
slim_hidden_def (cairo_font_options_hash);
|
||||
|
|
@ -327,6 +334,44 @@ cairo_font_options_get_subpixel_order (const cairo_font_options_t *options)
|
|||
return options->subpixel_order;
|
||||
}
|
||||
|
||||
/**
|
||||
* cairo_font_options_set_lcd_filter:
|
||||
* @options: a #cairo_font_options_t
|
||||
* @lcd_filter: the new LCD filter
|
||||
*
|
||||
* Sets the LCD filter for the font options object. The LCD filter
|
||||
* specifies how pixels are filtered when rendered with an antialiasing
|
||||
* mode of %CAIRO_ANTIALIAS_SUBPIXEL. See the documentation for
|
||||
* #cairo_lcd_filter_t for full details.
|
||||
**/
|
||||
void
|
||||
cairo_font_options_set_lcd_filter (cairo_font_options_t *options,
|
||||
cairo_lcd_filter_t lcd_filter)
|
||||
{
|
||||
if (cairo_font_options_status (options))
|
||||
return;
|
||||
|
||||
options->lcd_filter = lcd_filter;
|
||||
}
|
||||
|
||||
/**
|
||||
* cairo_font_options_get_lcd_filter:
|
||||
* @options: a #cairo_font_options_t
|
||||
*
|
||||
* Gets the LCD filter for the font options object.
|
||||
* See the documentation for #cairo_lcd_filter_t for full details.
|
||||
*
|
||||
* Return value: the LCD filter for the font options object
|
||||
**/
|
||||
cairo_lcd_filter_t
|
||||
cairo_font_options_get_lcd_filter (const cairo_font_options_t *options)
|
||||
{
|
||||
if (cairo_font_options_status ((cairo_font_options_t *) options))
|
||||
return CAIRO_LCD_FILTER_DEFAULT;
|
||||
|
||||
return options->lcd_filter;
|
||||
}
|
||||
|
||||
/**
|
||||
* cairo_font_options_set_hint_style:
|
||||
* @options: a #cairo_font_options_t
|
||||
|
|
|
|||
|
|
@ -108,6 +108,7 @@ struct _cairo_array {
|
|||
struct _cairo_font_options {
|
||||
cairo_antialias_t antialias;
|
||||
cairo_subpixel_order_t subpixel_order;
|
||||
cairo_lcd_filter_t lcd_filter;
|
||||
cairo_hint_style_t hint_style;
|
||||
cairo_hint_metrics_t hint_metrics;
|
||||
};
|
||||
|
|
|
|||
26
src/cairo.h
26
src/cairo.h
|
|
@ -967,6 +967,26 @@ typedef enum _cairo_subpixel_order {
|
|||
CAIRO_SUBPIXEL_ORDER_VBGR
|
||||
} cairo_subpixel_order_t;
|
||||
|
||||
/**
|
||||
* cairo_lcd_filter_t:
|
||||
* @CAIRO_LCD_FILTER_DEFAULT: Use the default LCD filter for
|
||||
* font backend and target device
|
||||
* @CAIRO_LCD_FILTER_NONE: Do not perform LCD filtering
|
||||
* @CAIRO_LCD_FILTER_INTRA_PIXEL: Intra-pixel filter
|
||||
* @CAIRO_LCD_FILTER_FIR3: FIR filter with a 3x3 kernel
|
||||
* @CAIRO_LCD_FILTER_FIR5: FIR filter with a 5x5 kernel
|
||||
*
|
||||
* The LCD filter specifies the low-pass filter applied to LCD-optimized
|
||||
* bitmaps generated with an antialiasing mode of %CAIRO_ANTIALIAS_SUBPIXEL.
|
||||
**/
|
||||
typedef enum _cairo_lcd_filter {
|
||||
CAIRO_LCD_FILTER_DEFAULT,
|
||||
CAIRO_LCD_FILTER_NONE,
|
||||
CAIRO_LCD_FILTER_INTRA_PIXEL,
|
||||
CAIRO_LCD_FILTER_FIR3,
|
||||
CAIRO_LCD_FILTER_FIR5
|
||||
} cairo_lcd_filter_t;
|
||||
|
||||
/**
|
||||
* cairo_hint_style_t:
|
||||
* @CAIRO_HINT_STYLE_DEFAULT: Use the default hint style for
|
||||
|
|
@ -1072,6 +1092,12 @@ cairo_font_options_set_subpixel_order (cairo_font_options_t *options,
|
|||
cairo_public cairo_subpixel_order_t
|
||||
cairo_font_options_get_subpixel_order (const cairo_font_options_t *options);
|
||||
|
||||
cairo_public void
|
||||
cairo_font_options_set_lcd_filter (cairo_font_options_t *options,
|
||||
cairo_lcd_filter_t lcd_filter);
|
||||
cairo_public cairo_lcd_filter_t
|
||||
cairo_font_options_get_lcd_filter (const cairo_font_options_t *options);
|
||||
|
||||
cairo_public void
|
||||
cairo_font_options_set_hint_style (cairo_font_options_t *options,
|
||||
cairo_hint_style_t hint_style);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue