Example #1
0
/*!
 * \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);
}
Example #2
0
File: ellipse.c Project: mpuels/dia
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, 
				&center,
				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,
				&center,
				elem->width, elem->height,
				NULL, &ellipse->border_color);
  }
}