static void add_strikethrough (PangoRenderer *renderer, LineState *state, PangoFontMetrics *metrics, int base_x, int base_y, PangoRectangle *ink_rect, PangoRectangle *logical_rect) { PangoRectangle *current_rect = &state->strikethrough_rect; PangoRectangle new_rect; int strikethrough_thickness = pango_font_metrics_get_strikethrough_thickness (metrics); int strikethrough_position = pango_font_metrics_get_strikethrough_position (metrics); new_rect.x = base_x + logical_rect->x; new_rect.width = logical_rect->width; new_rect.y = base_y - strikethrough_position; new_rect.height = strikethrough_thickness; if (state->strikethrough && new_rect.y == current_rect->y && new_rect.height == current_rect->height) { current_rect->width = new_rect.x + new_rect.width - current_rect->x; } else { draw_strikethrough (renderer, state); *current_rect = new_rect; state->strikethrough = TRUE; } }
/* Helper function to draw a strikethrough for one layout run */ static void draw_strikethrough (GnomePrintContext *gpc, PangoFontMetrics *metrics, gint x, gint width) { gint strikethrough_thickness = pango_font_metrics_get_strikethrough_thickness (metrics); gint strikethrough_position = pango_font_metrics_get_strikethrough_position (metrics); rect_filled (gpc, x, strikethrough_position - strikethrough_thickness, width, strikethrough_thickness); }
static int get_pango_vertical_offset (PangoLayout *layout) { const PangoFontDescription *desc; PangoContext *context; PangoLanguage *language; PangoFontMetrics *metrics; int baseline; int strikethrough; int thickness; context = pango_layout_get_context (layout); language = pango_language_get_default (); desc = pango_layout_get_font_description (layout); metrics = pango_context_get_metrics (context, desc, language); baseline = pango_layout_get_baseline (layout); strikethrough = pango_font_metrics_get_strikethrough_position (metrics); thickness = pango_font_metrics_get_underline_thickness (metrics); return PANGO_PIXELS (baseline - strikethrough - thickness / 2); }
} static void add_strikethrough (PangoRenderer *renderer, LineState *state, PangoFontMetrics *metrics, int base_x, int base_y, PangoRectangle *ink_rect G_GNUC_UNUSED, PangoRectangle *logical_rect) { PangoRectangle *current_rect = &state->strikethrough_rect; PangoRectangle new_rect; int strikethrough_thickness = pango_font_metrics_get_strikethrough_thickness (metrics); int strikethrough_position = pango_font_metrics_get_strikethrough_position (metrics); new_rect.x = base_x + logical_rect->x; new_rect.width = logical_rect->width; new_rect.y = base_y - strikethrough_position; new_rect.height = strikethrough_thickness; if (state->strikethrough && new_rect.y == current_rect->y && new_rect.height == current_rect->height) { current_rect->width = new_rect.x + new_rect.width - current_rect->x; } else { draw_strikethrough (renderer, state);