From 7b5316825c5b9fe3be4ff64ffa38d35b08d812f0 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Wed, 29 Sep 2010 23:40:45 +0200 Subject: [PATCH] app: turn GimpCanvasItem's stroke() and fill() into virtual functions --- app/display/gimpcanvasitem.c | 54 +++++++++++++++++++++++++++--------- app/display/gimpcanvasitem.h | 7 +++++ 2 files changed, 48 insertions(+), 13 deletions(-) diff --git a/app/display/gimpcanvasitem.c b/app/display/gimpcanvasitem.c index dc868a6166..b23d6d14b2 100644 --- a/app/display/gimpcanvasitem.c +++ b/app/display/gimpcanvasitem.c @@ -72,6 +72,12 @@ static void gimp_canvas_item_real_draw (GimpCanvasItem *item, cairo_t *cr); static GdkRegion * gimp_canvas_item_real_get_extents (GimpCanvasItem *item, GimpDisplayShell *shell); +static void gimp_canvas_item_real_stroke (GimpCanvasItem *item, + GimpDisplayShell *shell, + cairo_t *cr); +static void gimp_canvas_item_real_fill (GimpCanvasItem *item, + GimpDisplayShell *shell, + cairo_t *cr); G_DEFINE_TYPE (GimpCanvasItem, gimp_canvas_item, @@ -90,6 +96,8 @@ gimp_canvas_item_class_init (GimpCanvasItemClass *klass) klass->draw = gimp_canvas_item_real_draw; klass->get_extents = gimp_canvas_item_real_get_extents; + klass->stroke = gimp_canvas_item_real_stroke; + klass->fill = gimp_canvas_item_real_fill; g_object_class_install_property (object_class, PROP_LINE_CAP, g_param_spec_int ("line-cap", @@ -180,6 +188,37 @@ gimp_canvas_item_real_get_extents (GimpCanvasItem *item, return NULL; } +static void +gimp_canvas_item_real_stroke (GimpCanvasItem *item, + GimpDisplayShell *shell, + cairo_t *cr) +{ + GimpCanvasItemPrivate *private = GET_PRIVATE (item); + + cairo_set_line_cap (cr, private->line_cap); + + gimp_display_shell_set_tool_bg_style (shell, cr); + cairo_stroke_preserve (cr); + + gimp_display_shell_set_tool_fg_style (shell, cr, private->highlight); + cairo_stroke (cr); +} + +static void +gimp_canvas_item_real_fill (GimpCanvasItem *item, + GimpDisplayShell *shell, + cairo_t *cr) +{ + GimpCanvasItemPrivate *private = GET_PRIVATE (item); + + gimp_display_shell_set_tool_bg_style (shell, cr); + cairo_set_line_width (cr, 2.0); + cairo_stroke_preserve (cr); + + gimp_display_shell_set_tool_fg_style (shell, cr, private->highlight); + cairo_fill (cr); +} + /* public functions */ @@ -298,13 +337,7 @@ _gimp_canvas_item_stroke (GimpCanvasItem *item, if (private->suspend_stroking == 0) { - cairo_set_line_cap (cr, private->line_cap); - - gimp_display_shell_set_tool_bg_style (shell, cr); - cairo_stroke_preserve (cr); - - gimp_display_shell_set_tool_fg_style (shell, cr, private->highlight); - cairo_stroke (cr); + GIMP_CANVAS_ITEM_GET_CLASS (item)->stroke (item, shell, cr); } else { @@ -324,12 +357,7 @@ _gimp_canvas_item_fill (GimpCanvasItem *item, if (private->suspend_filling == 0) { - gimp_display_shell_set_tool_bg_style (shell, cr); - cairo_set_line_width (cr, 2.0); - cairo_stroke_preserve (cr); - - gimp_display_shell_set_tool_fg_style (shell, cr, private->highlight); - cairo_fill (cr); + GIMP_CANVAS_ITEM_GET_CLASS (item)->fill (item, shell, cr); } else { diff --git a/app/display/gimpcanvasitem.h b/app/display/gimpcanvasitem.h index af7598ec6e..d864be688a 100644 --- a/app/display/gimpcanvasitem.h +++ b/app/display/gimpcanvasitem.h @@ -49,6 +49,13 @@ struct _GimpCanvasItemClass cairo_t *cr); GdkRegion * (* get_extents) (GimpCanvasItem *item, GimpDisplayShell *shell); + + void (* stroke) (GimpCanvasItem *item, + GimpDisplayShell *shell, + cairo_t *cr); + void (* fill) (GimpCanvasItem *item, + GimpDisplayShell *shell, + cairo_t *cr); };