/** * pango_cairo_font_map_get_font_type: * @fontmap: a #PangoCairoFontMap * * Gets the type of Cairo font backend that @fontmap uses. * * Return value: the #cairo_font_type_t cairo font backend type * * Since: 1.18 **/ cairo_font_type_t pango_cairo_font_map_get_font_type (PangoCairoFontMap *fontmap) { g_return_val_if_fail (PANGO_IS_CAIRO_FONT_MAP (fontmap), CAIRO_FONT_TYPE_TOY); return (* PANGO_CAIRO_FONT_MAP_GET_IFACE (fontmap)->get_font_type) (fontmap); }
/** * pango_cairo_font_map_create_context: (skip): * @fontmap: a #PangoCairoFontMap * * Create a #PangoContext for the given fontmap. * * Return value: the newly created context; free with g_object_unref(). * * Since: 1.10 * * Deprecated: 1.22: Use pango_font_map_create_context() instead. **/ PangoContext * pango_cairo_font_map_create_context (PangoCairoFontMap *fontmap) { g_return_val_if_fail (PANGO_IS_CAIRO_FONT_MAP (fontmap), NULL); return pango_font_map_create_context (PANGO_FONT_MAP (fontmap)); }
/** * pango_cairo_font_map_get_resolution: * @fontmap: a #PangoCairoFontMap * * Gets the resolution for the fontmap. See pango_cairo_font_map_set_resolution() * * Return value: the resolution in "dots per inch" * * Since: 1.10 **/ double pango_cairo_font_map_get_resolution (PangoCairoFontMap *fontmap) { g_return_val_if_fail (PANGO_IS_CAIRO_FONT_MAP (fontmap), 96.); return (* PANGO_CAIRO_FONT_MAP_GET_IFACE (fontmap)->get_resolution) (fontmap); }
/** * pango_cairo_font_map_set_resolution: * @fontmap: a #PangoCairoFontMap * @dpi: the resolution in "dots per inch". (Physical inches aren't actually * involved; the terminology is conventional.) * * Sets the resolution for the fontmap. This is a scale factor between * points specified in a #PangoFontDescription and Cairo units. The * default value is 96, meaning that a 10 point font will be 13 * units high. (10 * 96. / 72. = 13.3). * * Since: 1.10 **/ void pango_cairo_font_map_set_resolution (PangoCairoFontMap *fontmap, double dpi) { g_return_if_fail (PANGO_IS_CAIRO_FONT_MAP (fontmap)); (* PANGO_CAIRO_FONT_MAP_GET_IFACE (fontmap)->set_resolution) (fontmap, dpi); }
/** * pango_cairo_font_map_set_default: * @fontmap: The new default font map, or %NULL * * Sets a default #PangoCairoFontMap to use with Cairo. * * This can be used to change the Cairo font backend that the * default fontmap uses for example. The old default font map * is unreffed and the new font map referenced. * * A value of %NULL for @fontmap will cause the current default * font map to be released and a new default font * map to be created on demand, using pango_cairo_font_map_new(). * * Since: 1.22 **/ void pango_cairo_font_map_set_default (PangoCairoFontMap *fontmap) { g_return_if_fail (fontmap == NULL || PANGO_IS_CAIRO_FONT_MAP (fontmap)); if ((PangoFontMap *) fontmap == default_font_map) return; if (default_font_map) g_object_unref (default_font_map); if (fontmap) g_object_ref (fontmap); default_font_map = (PangoFontMap *) fontmap; }
gboolean text_to_path (const Text *text, GArray *points) { cairo_t *cr; cairo_surface_t *surface; PangoLayout *layout; PangoRectangle ink_rect; char *str; gboolean ret = FALSE; if (!PANGO_IS_CAIRO_FONT_MAP (pango_context_get_font_map (dia_font_get_context()))) return FALSE; layout = pango_layout_new(dia_font_get_context()); pango_layout_set_font_description (layout, dia_font_get_description (text->font)); pango_layout_set_indent (layout, 0); pango_layout_set_justify (layout, FALSE); pango_layout_set_alignment (layout, text->alignment == ALIGN_LEFT ? PANGO_ALIGN_LEFT : text->alignment == ALIGN_RIGHT ? PANGO_ALIGN_RIGHT : PANGO_ALIGN_CENTER); str = text_get_string_copy (text); pango_layout_set_text (layout, str, -1); g_free (str); pango_layout_get_extents (layout, &ink_rect, NULL); /* any surface should do - this one is always available */ surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, ink_rect.width / PANGO_SCALE, ink_rect.height / PANGO_SCALE); cr = cairo_create (surface); cairo_surface_destroy (surface); pango_cairo_layout_path (cr, layout); /* convert the path */ if (cairo_status (cr) == CAIRO_STATUS_SUCCESS) { cairo_path_t *path; int i; path = cairo_copy_path (cr); for (i=0; i < path->num_data; i += path->data[i].header.length) { cairo_path_data_t *data = &path->data[i]; BezPoint bp; switch (data->header.type) { case CAIRO_PATH_MOVE_TO : bp.type = BEZ_MOVE_TO; bp.p1.x = data[1].point.x; bp.p1.y = data[1].point.y; break; case CAIRO_PATH_LINE_TO : bp.type = BEZ_LINE_TO; bp.p1.x = data[1].point.x; bp.p1.y = data[1].point.y; break; case CAIRO_PATH_CURVE_TO : bp.type = BEZ_CURVE_TO; bp.p1.x = data[1].point.x; bp.p1.y = data[1].point.y; bp.p2.x = data[2].point.x; bp.p2.y = data[2].point.y; bp.p3.x = data[3].point.x; bp.p3.y = data[3].point.y; break; case CAIRO_PATH_CLOSE_PATH : /* can't do anything */ default : continue; } g_array_append_val (points, bp); } ret = (path->status == CAIRO_STATUS_SUCCESS); cairo_path_destroy (path); } /* finally scale it ? */ /* clean up */ g_object_unref (layout); cairo_destroy (cr); return ret; }