[cairo] Add [sg]et_scale_factor
This commit is contained in:
parent
186bfa99f5
commit
4e3e879c1c
|
@ -869,5 +869,7 @@ hb_cairo_font_face_get_face
|
|||
hb_cairo_font_face_create_for_font
|
||||
hb_cairo_font_face_get_font
|
||||
hb_cairo_scaled_font_get_font
|
||||
hb_cairo_font_face_set_scale_factor
|
||||
hb_cairo_font_face_get_scale_factor
|
||||
hb_cairo_glyphs_from_buffer
|
||||
</SECTION>
|
||||
|
|
|
@ -353,6 +353,7 @@ hb_cairo_render_color_glyph (cairo_scaled_font_t *scaled_font,
|
|||
|
||||
static const cairo_user_data_key_t hb_cairo_face_user_data_key = {0};
|
||||
static const cairo_user_data_key_t hb_cairo_font_user_data_key = {0};
|
||||
static const cairo_user_data_key_t hb_cairo_scale_factor_user_data_key = {0};
|
||||
|
||||
static void hb_cairo_face_destroy (void *p) { hb_face_destroy ((hb_face_t *) p); }
|
||||
static void hb_cairo_font_destroy (void *p) { hb_font_destroy ((hb_font_t *) p); }
|
||||
|
@ -362,12 +363,14 @@ hb_cairo_init_scaled_font (cairo_scaled_font_t *scaled_font,
|
|||
cairo_t *cr HB_UNUSED,
|
||||
cairo_font_extents_t *extents)
|
||||
{
|
||||
hb_font_t *font = (hb_font_t *) cairo_font_face_get_user_data (cairo_scaled_font_get_font_face (scaled_font),
|
||||
cairo_font_face_t *font_face = cairo_scaled_font_get_font_face (scaled_font);
|
||||
|
||||
hb_font_t *font = (hb_font_t *) cairo_font_face_get_user_data (font_face,
|
||||
&hb_cairo_font_user_data_key);
|
||||
|
||||
if (!font)
|
||||
{
|
||||
hb_face_t *face = (hb_face_t *) cairo_font_face_get_user_data (cairo_scaled_font_get_font_face (scaled_font),
|
||||
hb_face_t *face = (hb_face_t *) cairo_font_face_get_user_data (font_face,
|
||||
&hb_cairo_face_user_data_key);
|
||||
font = hb_font_create (face);
|
||||
|
||||
|
@ -390,7 +393,16 @@ hb_cairo_init_scaled_font (cairo_scaled_font_t *scaled_font,
|
|||
|
||||
cairo_font_options_destroy (font_options);
|
||||
|
||||
// TODO Set (what?) scale; Note, should NOT set slant.
|
||||
// Set scale; Note: should NOT set slant, or we'll double-slant.
|
||||
unsigned scale_factor = hb_cairo_font_face_get_scale_factor (font_face);
|
||||
if (scale_factor)
|
||||
{
|
||||
cairo_matrix_t font_matrix;
|
||||
cairo_scaled_font_get_scale_matrix (scaled_font, &font_matrix);
|
||||
hb_font_set_scale (font,
|
||||
round (font_matrix.xx * scale_factor),
|
||||
round (font_matrix.yy * scale_factor));
|
||||
}
|
||||
|
||||
hb_font_make_immutable (font);
|
||||
}
|
||||
|
@ -589,6 +601,46 @@ hb_cairo_scaled_font_get_font (cairo_scaled_font_t *scaled_font)
|
|||
return (hb_font_t *) cairo_scaled_font_get_user_data (scaled_font, &hb_cairo_font_user_data_key);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* hb_cairo_font_face_set_scale_factor:
|
||||
* @font_face: a `cairo_font_face_t`
|
||||
*
|
||||
* Sets the scale factor of the @font_face. Default scale
|
||||
* factor is zero.
|
||||
*
|
||||
* Since: REPLACEME
|
||||
*/
|
||||
void
|
||||
hb_cairo_font_face_set_scale_factor (cairo_font_face_t *font_face,
|
||||
unsigned int scale_factor)
|
||||
{
|
||||
cairo_font_face_set_user_data (font_face,
|
||||
&hb_cairo_scale_factor_user_data_key,
|
||||
(void *) (uintptr_t) scale_factor,
|
||||
nullptr);
|
||||
}
|
||||
|
||||
/**
|
||||
* hb_cairo_font_face_get_scale_factor:
|
||||
* @font_face: a `cairo_font_face_t`
|
||||
*
|
||||
* Gets the scale factor set on the @font_face. Defaults to zero.
|
||||
* See hb_cairo_font_face_set_scale_factor() for details.
|
||||
*
|
||||
* Returns: the scale factor of @font_face
|
||||
*
|
||||
* Since: REPLACEME
|
||||
*/
|
||||
unsigned int
|
||||
hb_cairo_font_face_get_scale_factor (cairo_font_face_t *font_face)
|
||||
{
|
||||
return (unsigned int) (uintptr_t)
|
||||
cairo_font_face_get_user_data (font_face,
|
||||
&hb_cairo_scale_factor_user_data_key);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* hb_cairo_glyphs_from_buffer:
|
||||
* @buffer: a `hb_buffer_t` containing glyphs
|
||||
|
|
|
@ -48,6 +48,13 @@ hb_cairo_font_face_get_font (cairo_font_face_t *font_face);
|
|||
HB_EXTERN hb_font_t *
|
||||
hb_cairo_scaled_font_get_font (cairo_scaled_font_t *scaled_font);
|
||||
|
||||
HB_EXTERN void
|
||||
hb_cairo_font_face_set_scale_factor (cairo_font_face_t *font_face,
|
||||
unsigned int scale_factor);
|
||||
|
||||
HB_EXTERN unsigned int
|
||||
hb_cairo_font_face_get_scale_factor (cairo_font_face_t *font_face);
|
||||
|
||||
HB_EXTERN void
|
||||
hb_cairo_glyphs_from_buffer (hb_buffer_t *buffer,
|
||||
const char *text,
|
||||
|
|
Loading…
Reference in New Issue