/** * go_styled_object_fill : * @so: #GOStyledObject * @cr: #cairo_t * @preserve: whether the current path should be preserved * * fills the current path according to the * item style and canvas scale. * **/ void go_styled_object_fill (GOStyledObject const *so, cairo_t *cr, gboolean preserve) { GOStyle const *style; g_return_if_fail (GO_IS_STYLED_OBJECT (so)); style = go_styled_object_get_style (GO_STYLED_OBJECT (so)); go_style_fill (style, cr, preserve); }
static void gnm_so_path_draw_cairo (SheetObject const *so, cairo_t *cr, double width, double height) { GnmSOPath *sop = GNM_SO_PATH (so); GOStyle const *style = sop->style; cairo_new_path (cr); cairo_save (cr); cairo_move_to (cr, -sop->x_offset, -sop->y_offset); cairo_scale (cr, width / sop->width, height / sop->height); go_path_to_cairo (sop->path, GO_PATH_DIRECTION_FORWARD, cr); cairo_restore (cr); /* Fill the shape */ cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD); /* might be an option */ go_style_fill (style, cr, TRUE); /* Draw the line */ if (go_style_set_cairo_line (style, cr)) cairo_stroke (cr); else cairo_new_path (cr); /* Draw the text. */ if (sop->text != NULL && *(sop->text) != '\0') { PangoLayout *pl = pango_cairo_create_layout (cr); double const scale_h = 72. / gnm_app_display_dpi_get (TRUE); double const scale_v = 72. / gnm_app_display_dpi_get (FALSE); double pl_height = (height - sop->margin_pts.top - sop->margin_pts.bottom) * PANGO_SCALE / scale_v; double pl_width = (width - sop->margin_pts.left - sop->margin_pts.right) * PANGO_SCALE / scale_h; /* set a font, a very bad solution, but will do until we move to GOString */ PangoFontDescription *desc = pango_font_description_from_string ("Sans 10"); PangoRectangle r; pango_layout_set_font_description (pl, desc); pango_layout_set_text (pl, sop->text, -1); pango_layout_set_attributes (pl, sop->markup); pango_layout_set_width (pl, pl_width); pango_layout_set_height (pl, pl_height); cairo_save (cr); pango_layout_get_extents (pl, NULL, &r); cairo_move_to (cr, (width - r.width / PANGO_SCALE * scale_h) / 2., (height - r.height / PANGO_SCALE * scale_v) / 2.); cairo_scale (cr, scale_h, scale_v); cairo_set_source_rgba (cr, GO_COLOR_TO_CAIRO (style->font.color)); pango_cairo_show_layout (cr, pl); cairo_new_path (cr); cairo_restore (cr); g_object_unref (pl); } }