/* * Copyright 2000 Red Hat Software * * SPDX-License-Identifier: LGPL-2.1-or-later * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, see . */ #pragma once #include #include #include #include #ifdef HAVE_CAIRO #include #endif struct _Pango2Font { GObject parent_instance; Pango2FontFace *face; hb_font_t *hb_font; int size; /* point size, scaled by PANGO2_SCALE */ float dpi; Pango2Gravity gravity; Pango2Matrix ctm; #ifdef HAVE_CAIRO cairo_font_options_t *options; #endif }; typedef struct _Pango2FontClass Pango2FontClass; struct _Pango2FontClass { GObjectClass parent_class; Pango2FontDescription * (* describe) (Pango2Font *font); void (* get_glyph_extents) (Pango2Font *font, Pango2Glyph glyph, Pango2Rectangle *ink_rect, Pango2Rectangle *logical_rect); Pango2FontMetrics * (* get_metrics) (Pango2Font *font, Pango2Language *language); hb_font_t * (* create_hb_font) (Pango2Font *font); gboolean (* is_hinted) (Pango2Font *font); void (* get_scale_factors) (Pango2Font *font, double *x_scale, double *y_scale); void (* get_transform) (Pango2Font *font, Pango2Matrix *matrix); }; #define PANGO2_FONT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO2_TYPE_FONT, Pango2FontClass)) #define PANGO2_FONT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO2_TYPE_FONT, Pango2FontClass)) static inline void pango2_font_set_face (Pango2Font *font, Pango2FontFace *face) { font->face = (Pango2FontFace *) g_object_ref (face); } static inline void pango2_font_set_size (Pango2Font *font, int size) { font->size = size; } static inline void pango2_font_set_dpi (Pango2Font *font, float dpi) { font->dpi = dpi; } static inline void pango2_font_set_gravity (Pango2Font *font, Pango2Gravity gravity) { font->gravity = gravity; } static inline void pango2_font_set_ctm (Pango2Font *font, const Pango2Matrix *ctm) { const Pango2Matrix matrix_init = PANGO2_MATRIX_INIT; font->ctm = ctm ? *ctm : matrix_init; } gboolean pango2_font_is_hinted (Pango2Font *font); void pango2_font_get_scale_factors (Pango2Font *font, double *x_scale, double *y_scale); void pango2_font_get_transform (Pango2Font *font, Pango2Matrix *matrix); gboolean pango2_font_description_is_similar (const Pango2FontDescription *a, const Pango2FontDescription *b); int pango2_font_description_compute_distance (const Pango2FontDescription *a, const Pango2FontDescription *b); /* We use these values in a few places as a fallback size for an * unknown glyph, if we have no better information. */ #define PANGO2_UNKNOWN_GLYPH_WIDTH 10 #define PANGO2_UNKNOWN_GLYPH_HEIGHT 14