mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-05-05 16:58:01 +02:00
Implement cairo_get_scaled_font()
This commit is contained in:
parent
d64b194a45
commit
ed75e24898
8 changed files with 70 additions and 8 deletions
2
TODO
2
TODO
|
|
@ -81,8 +81,6 @@ Other changes (this text used to be in RODMAP)
|
|||
http://lists.freedesktop.org/archives/cairo/2007-January/009372.html
|
||||
cairo_font_metrics_t
|
||||
http://lists.freedesktop.org/archives/cairo/2007-January/009373.html
|
||||
cairo_get_scaled_font()
|
||||
http://lists.freedesktop.org/archives/cairo/2007-January/009374.html
|
||||
User-font API---a couple of threads of interest:
|
||||
http://lists.freedesktop.org/archives/cairo/2007-February/009539.html
|
||||
http://lists.freedesktop.org/archives/cairo/2006-May/006893.html
|
||||
|
|
|
|||
|
|
@ -322,12 +322,13 @@ cairo_set_font_matrix
|
|||
cairo_get_font_matrix
|
||||
cairo_set_font_options
|
||||
cairo_get_font_options
|
||||
cairo_set_font_face
|
||||
cairo_get_font_face
|
||||
cairo_set_scaled_font
|
||||
cairo_get_scaled_font
|
||||
cairo_show_text
|
||||
cairo_show_glyphs
|
||||
cairo_get_font_face
|
||||
cairo_font_extents
|
||||
cairo_set_font_face
|
||||
cairo_set_scaled_font
|
||||
cairo_text_extents
|
||||
cairo_glyph_extents
|
||||
</SECTION>
|
||||
|
|
|
|||
|
|
@ -1271,6 +1271,21 @@ _cairo_gstate_get_font_face (cairo_gstate_t *gstate,
|
|||
return CAIRO_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
cairo_status_t
|
||||
_cairo_gstate_get_scaled_font (cairo_gstate_t *gstate,
|
||||
cairo_scaled_font_t **scaled_font)
|
||||
{
|
||||
cairo_status_t status;
|
||||
|
||||
status = _cairo_gstate_ensure_scaled_font (gstate);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
*scaled_font = gstate->scaled_font;
|
||||
|
||||
return CAIRO_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* Like everything else in this file, fonts involve Too Many Coordinate Spaces;
|
||||
* it is easy to get confused about what's going on.
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ _cairo_scaled_glyph_destroy (void *abstract_glyph)
|
|||
free (scaled_glyph);
|
||||
}
|
||||
|
||||
static const cairo_scaled_font_t _cairo_scaled_font_nil = {
|
||||
const cairo_scaled_font_t _cairo_scaled_font_nil = {
|
||||
{ 0 }, /* hash_entry */
|
||||
CAIRO_STATUS_NO_MEMORY, /* status */
|
||||
CAIRO_REF_COUNT_INVALID, /* ref_count */
|
||||
|
|
|
|||
30
src/cairo.c
30
src/cairo.c
|
|
@ -2594,6 +2594,36 @@ BAIL:
|
|||
_cairo_set_error (cr, cr->status);
|
||||
}
|
||||
|
||||
/**
|
||||
* cairo_get_scaled_font:
|
||||
* @cr: a #cairo_t
|
||||
*
|
||||
* Gets the current font face for a #cairo_t.
|
||||
*
|
||||
* Return value: the current font object. Can return %NULL
|
||||
* on out-of-memory or if the context is already in
|
||||
* an error state. This object is owned by cairo. To keep
|
||||
* a reference to it, you must call cairo_font_face_reference().
|
||||
*
|
||||
* Since: 1.4
|
||||
**/
|
||||
cairo_scaled_font_t *
|
||||
cairo_get_scaled_font (cairo_t *cr)
|
||||
{
|
||||
cairo_scaled_font_t *scaled_font;
|
||||
|
||||
if (cr->status)
|
||||
return (cairo_scaled_font_t *)&_cairo_scaled_font_nil;
|
||||
|
||||
cr->status = _cairo_gstate_get_scaled_font (cr->gstate, &scaled_font);
|
||||
if (cr->status) {
|
||||
_cairo_set_error (cr, cr->status);
|
||||
return (cairo_scaled_font_t *)&_cairo_scaled_font_nil;
|
||||
}
|
||||
|
||||
return scaled_font;
|
||||
}
|
||||
|
||||
/**
|
||||
* cairo_text_extents:
|
||||
* @cr: a #cairo_t
|
||||
|
|
|
|||
|
|
@ -950,6 +950,9 @@ cairo_public void
|
|||
cairo_set_scaled_font (cairo_t *cr,
|
||||
const cairo_scaled_font_t *scaled_font);
|
||||
|
||||
cairo_public cairo_scaled_font_t *
|
||||
cairo_get_scaled_font (cairo_t *cr);
|
||||
|
||||
cairo_public void
|
||||
cairo_show_text (cairo_t *cr, const char *utf8);
|
||||
|
||||
|
|
|
|||
|
|
@ -1498,6 +1498,10 @@ cairo_private cairo_status_t
|
|||
_cairo_gstate_get_font_face (cairo_gstate_t *gstate,
|
||||
cairo_font_face_t **font_face);
|
||||
|
||||
cairo_private cairo_status_t
|
||||
_cairo_gstate_get_scaled_font (cairo_gstate_t *gstate,
|
||||
cairo_scaled_font_t **scaled_font);
|
||||
|
||||
cairo_private cairo_status_t
|
||||
_cairo_gstate_get_font_extents (cairo_gstate_t *gstate,
|
||||
cairo_font_extents_t *extents);
|
||||
|
|
@ -1592,6 +1596,7 @@ _cairo_scaled_font_set_error (cairo_scaled_font_t *scaled_font,
|
|||
cairo_status_t status);
|
||||
|
||||
extern const cairo_private cairo_font_face_t _cairo_font_face_nil;
|
||||
extern const cairo_private cairo_scaled_font_t _cairo_scaled_font_nil;
|
||||
|
||||
cairo_private void
|
||||
_cairo_font_face_init (cairo_font_face_t *font_face,
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ main (void)
|
|||
cairo_surface_t *surface;
|
||||
cairo_t *cr;
|
||||
cairo_font_face_t *font_face;
|
||||
cairo_scaled_font_t *scaled_font;
|
||||
|
||||
cairo_test_init ("font-face-get-type");
|
||||
|
||||
|
|
@ -43,16 +44,25 @@ main (void)
|
|||
CAIRO_FONT_SLANT_NORMAL,
|
||||
CAIRO_FONT_WEIGHT_NORMAL);
|
||||
|
||||
font_face = cairo_get_font_face (cr);
|
||||
|
||||
cairo_test_log ("Testing return value of cairo_font_face_get_type\n");
|
||||
|
||||
font_face = cairo_get_font_face (cr);
|
||||
|
||||
if (cairo_font_face_get_type (font_face) != CAIRO_FONT_TYPE_TOY) {
|
||||
cairo_test_log ("Unexpected value %d from cairo_font_face_get_type (expected %d)\n",
|
||||
cairo_font_face_get_type (font_face), CAIRO_FONT_TYPE_TOY);
|
||||
return CAIRO_TEST_FAILURE;
|
||||
}
|
||||
|
||||
cairo_test_log ("Testing return value of cairo_get_scaled_font\n");
|
||||
|
||||
scaled_font = cairo_get_scaled_font (cr);
|
||||
|
||||
if (cairo_scaled_font_get_font_face (scaled_font) != font_face) {
|
||||
cairo_test_log ("Font face returned from the scaled font is different from that returned by the context\n");
|
||||
return CAIRO_TEST_FAILURE;
|
||||
}
|
||||
|
||||
cairo_destroy (cr);
|
||||
cairo_surface_destroy (surface);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue