/*! * \brief Object drawing to the given renderer * * \memberof _StdPath */ static void stdpath_draw(StdPath *stdpath, DiaRenderer *renderer) { DIA_RENDERER_GET_CLASS (renderer)->set_linewidth (renderer, stdpath->line_width); DIA_RENDERER_GET_CLASS (renderer)->set_linestyle (renderer, stdpath->line_style, stdpath->dashlength); DIA_RENDERER_GET_CLASS (renderer)->set_linejoin(renderer, stdpath->line_join); DIA_RENDERER_GET_CLASS (renderer)->set_linecaps(renderer, stdpath->line_caps); if (DIA_RENDERER_GET_CLASS (renderer)->is_capable_to(renderer, RENDER_HOLES)) { if (stdpath->stroke_or_fill & PDO_FILL) { Color fill = stdpath->fill_color; if (stdpath->pattern) { dia_pattern_get_fallback_color (stdpath->pattern, &fill); if (DIA_RENDERER_GET_CLASS (renderer)->is_capable_to(renderer, RENDER_PATTERN)) DIA_RENDERER_GET_CLASS (renderer)->set_pattern (renderer, stdpath->pattern); } if (stdpath->stroke_or_fill & PDO_STROKE) /* also stroke -> combine */ DIA_RENDERER_GET_CLASS (renderer)->draw_beziergon(renderer, stdpath->points, stdpath->num_points, &fill, &stdpath->line_color); else DIA_RENDERER_GET_CLASS (renderer)->draw_beziergon(renderer, stdpath->points, stdpath->num_points, &fill, NULL); if (DIA_RENDERER_GET_CLASS (renderer)->is_capable_to(renderer, RENDER_PATTERN)) DIA_RENDERER_GET_CLASS (renderer)->set_pattern (renderer, NULL); } if (stdpath->stroke_or_fill == PDO_STROKE) /* stroke only */ DIA_RENDERER_GET_CLASS (renderer)->draw_bezier(renderer, stdpath->points, stdpath->num_points, &stdpath->line_color); } else { /* step-wise approach */ /* if it wouldn't RENDER_HOLES it presumably also wouldn't RENDER_PATTERN ... */ if (stdpath->stroke_or_fill & PDO_FILL) { Color fill = stdpath->fill_color; if (stdpath->pattern) dia_pattern_get_fallback_color (stdpath->pattern, &fill); bezier_render_fill (renderer, stdpath->points, stdpath->num_points, &fill); } if (stdpath->stroke_or_fill & PDO_STROKE) bezier_render_stroke (renderer, stdpath->points, stdpath->num_points, &stdpath->line_color); } if (stdpath->show_control_lines) bezier_draw_control_lines (stdpath->num_points, stdpath->points, renderer); }
static void ellipse_draw(Ellipse *ellipse, DiaRenderer *renderer) { DiaRendererClass *renderer_ops = DIA_RENDERER_GET_CLASS (renderer); Point center; Element *elem; assert(ellipse != NULL); assert(renderer != NULL); elem = &ellipse->element; center.x = elem->corner.x + elem->width/2; center.y = elem->corner.y + elem->height/2; renderer_ops->set_linewidth(renderer, ellipse->border_width); renderer_ops->set_linestyle(renderer, ellipse->line_style, ellipse->dashlength); if (ellipse->show_background) { Color fill = ellipse->inner_color; renderer_ops->set_fillstyle(renderer, FILLSTYLE_SOLID); if (ellipse->pattern) { dia_pattern_get_fallback_color (ellipse->pattern, &fill); if (renderer_ops->is_capable_to(renderer, RENDER_PATTERN)) renderer_ops->set_pattern (renderer, ellipse->pattern); } renderer_ops->draw_ellipse (renderer, ¢er, elem->width, elem->height, &fill, &ellipse->border_color); if (renderer_ops->is_capable_to(renderer, RENDER_PATTERN)) renderer_ops->set_pattern (renderer, NULL); } else { renderer_ops->draw_ellipse (renderer, ¢er, elem->width, elem->height, NULL, &ellipse->border_color); } }