[dia] interactive-renderer: add the missing vfunc wrappers



commit f095541adab5849f7bd8a8ff2a6411d6e4bdd482
Author: Zander Brown <zbrown gnome org>
Date:   Sun Sep 15 10:43:22 2019 +0100

    interactive-renderer: add the missing vfunc wrappers

 app/connectionpoint_ops.c    |  63 +++++------
 app/display.c                |  37 ++++---
 app/grid.c                   | 141 +++++++++++-------------
 app/handle_ops.c             |  46 ++++----
 app/interface.c              |  24 ++--
 lib/diainteractiverenderer.c | 255 +++++++++++++++++++++++++++++++++----------
 lib/diainteractiverenderer.h |  58 +++++++---
 7 files changed, 390 insertions(+), 234 deletions(-)
---
diff --git a/app/connectionpoint_ops.c b/app/connectionpoint_ops.c
index 44e4d69c..186de064 100644
--- a/app/connectionpoint_ops.c
+++ b/app/connectionpoint_ops.c
@@ -34,36 +34,33 @@ static Color connectionpoint_color = { 0.4, 0.4, 1.0, 1.0 };
 #define CP_SZ (CONNECTIONPOINT_SIZE/2)
 
 static void
-connectionpoint_draw (ConnectionPoint                 *conpoint,
-                      DDisplay                        *ddisp,
-                      DiaRenderer                     *renderer,
-                      DiaInteractiveRendererInterface *irenderer,
-                      Color                           *color)
+connectionpoint_draw (ConnectionPoint *conpoint,
+                      DDisplay        *ddisp,
+                      DiaRenderer     *renderer,
+                      Color           *color)
 {
   int x,y;
   Point *point = &conpoint->pos;
 
   ddisplay_transform_coords (ddisp, point->x, point->y, &x, &y);
 
-  irenderer->draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
-                              x-CP_SZ,y-CP_SZ,
-                              x+CP_SZ,y+CP_SZ,
-                              color);
+  dia_interactive_renderer_draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
+                                            x - CP_SZ, y - CP_SZ,
+                                            x + CP_SZ, y + CP_SZ,
+                                            color);
 
-  irenderer->draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
-                              x+CP_SZ,y-CP_SZ,
-                              x-CP_SZ,y+CP_SZ,
-                              color);
+  dia_interactive_renderer_draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
+                                            x + CP_SZ, y - CP_SZ,
+                                            x - CP_SZ, y + CP_SZ,
+                                            color);
 }
 
 void
-object_draw_connectionpoints(DiaObject *obj, DDisplay *ddisp)
+object_draw_connectionpoints (DiaObject *obj, DDisplay *ddisp)
 {
   int i;
   static Color midpoint_color = { 1.0, 0.0, 0.0, 1.0 };
   DiaRenderer *renderer = ddisp->renderer;
-  DiaInteractiveRendererInterface *irenderer =
-    DIA_INTERACTIVE_RENDERER_GET_IFACE (ddisp->renderer);
 
   /* this does not change for any of the points */
   dia_renderer_set_linewidth (renderer, 0.0);
@@ -73,42 +70,46 @@ object_draw_connectionpoints(DiaObject *obj, DDisplay *ddisp)
    * of the object (bounding box) is bigger than the summed size of the
    * connection points - or some variation thereof ;)
    */
-  if (dia_object_get_num_connections(obj) > 1)
-  {
+  if (dia_object_get_num_connections (obj) > 1) {
     const Rectangle *bbox = dia_object_get_bounding_box (obj);
     real w = ddisplay_transform_length (ddisp, bbox->right - bbox->left);
     real h = ddisplay_transform_length (ddisp, bbox->bottom - bbox->top);
-    int n = dia_object_get_num_connections(obj);
+    int n = dia_object_get_num_connections (obj);
 
     /* just comparing the sizes is still drawing more CPs than useful - try 50% */
     if (w * h < n * CONNECTIONPOINT_SIZE * CONNECTIONPOINT_SIZE * 2) {
-      if (ddisp->mainpoint_magnetism)
+      if (ddisp->mainpoint_magnetism) {
         return;
+      }
       /* just draw the main point */
       for (i = 0; i < n; ++i) {
-        if (obj->connections[i]->flags & CP_FLAG_ANYPLACE)
-          connectionpoint_draw(obj->connections[i], ddisp, renderer, irenderer, &midpoint_color);
+        if (obj->connections[i]->flags & CP_FLAG_ANYPLACE) {
+          connectionpoint_draw (obj->connections[i], ddisp, renderer, &midpoint_color);
+        }
       }
       return;
     }
   }
 
-  for (i=0;i<dia_object_get_num_connections(obj);i++) {
-    if ((obj->connections[i]->flags & CP_FLAG_ANYPLACE) == 0)
-      connectionpoint_draw(obj->connections[i], ddisp, renderer, irenderer, &connectionpoint_color);
-    else if (!ddisp->mainpoint_magnetism)
+  for (i = 0; i < dia_object_get_num_connections (obj); i++) {
+    if ((obj->connections[i]->flags & CP_FLAG_ANYPLACE) == 0) {
+      connectionpoint_draw (obj->connections[i], ddisp, renderer, &connectionpoint_color);
+    } else if (!ddisp->mainpoint_magnetism) {
       /* draw the "whole object"/center connpoints, but only when we don't
        * have snap-to-grid */
-      connectionpoint_draw(obj->connections[i], ddisp, renderer, irenderer, &midpoint_color);
+      connectionpoint_draw (obj->connections[i], ddisp, renderer, &midpoint_color);
+    }
   }
 }
 
 void
-connectionpoint_add_update(ConnectionPoint *conpoint,
-                          Diagram *dia)
+connectionpoint_add_update (ConnectionPoint *conpoint,
+                            Diagram         *dia)
 {
-  diagram_add_update_pixels(dia, &conpoint->pos,
-                           CONNECTIONPOINT_SIZE, CONNECTIONPOINT_SIZE);
+  diagram_add_update_pixels (dia,
+                             &conpoint->pos,
+                             CONNECTIONPOINT_SIZE,
+                             CONNECTIONPOINT_SIZE);
 }
 
 /* run diagram_update_connections_object on all selected objects. */
diff --git a/app/display.c b/app/display.c
index 0d85e4b2..cfc1c782 100644
--- a/app/display.c
+++ b/app/display.c
@@ -455,13 +455,13 @@ ddisplay_obj_render (DiaObject   *obj,
                      gpointer     data)
 {
   DDisplay *ddisp = (DDisplay *) data;
-  DiaInteractiveRendererInterface *irenderer =
-    DIA_INTERACTIVE_RENDERER_GET_IFACE (renderer);
   DiaHighlightType hltype = data_object_get_highlight (DIA_DIAGRAM_DATA (ddisp->diagram), obj);
 
-  if (hltype != DIA_HIGHLIGHT_NONE && irenderer->draw_object_highlighted != NULL) {
-    irenderer->draw_object_highlighted (DIA_INTERACTIVE_RENDERER (renderer), obj, hltype);
-  } else  {
+  if (hltype != DIA_HIGHLIGHT_NONE) {
+    dia_interactive_renderer_draw_object_highlighted (DIA_INTERACTIVE_RENDERER (renderer),
+                                                      obj,
+                                                      hltype);
+  } else {
     /* maybe the renderer does not support highlighting */
     dia_renderer_draw_object (renderer, obj, NULL);
   }
@@ -479,7 +479,6 @@ ddisplay_render_pixmap (DDisplay  *ddisp,
   GList *list;
   DiaObject *obj;
   int i;
-  DiaInteractiveRendererInterface *renderer;
 #ifdef TRACES
   GTimer *timer;
 #endif
@@ -489,8 +488,6 @@ ddisplay_render_pixmap (DDisplay  *ddisp,
     return;
   }
 
-  renderer = DIA_INTERACTIVE_RENDERER_GET_IFACE (ddisp->renderer);
-
   /* Erase background */
   dia_renderer_begin_render (ddisp->renderer, update);
   if (update) {
@@ -498,20 +495,24 @@ ddisplay_render_pixmap (DDisplay  *ddisp,
 
     ddisplay_transform_coords (ddisp, update->left, update->top, &x0, &y0);
     ddisplay_transform_coords (ddisp, update->right, update->bottom, &x1, &y1);
-    renderer->fill_pixel_rect (DIA_INTERACTIVE_RENDERER (ddisp->renderer),
-                               x0, y0, x1-x0, y1-y0,
-                               &ddisp->diagram->data->bg_color);
+    dia_interactive_renderer_fill_pixel_rect (DIA_INTERACTIVE_RENDERER (ddisp->renderer),
+                                              x0,
+                                              y0,
+                                              x1 - x0,
+                                              y1 - y0,
+                                              &ddisp->diagram->data->bg_color);
   } else {
-    renderer->fill_pixel_rect (DIA_INTERACTIVE_RENDERER (ddisp->renderer),
-                               0, 0,
-                               dia_interactive_renderer_get_width_pixels (DIA_INTERACTIVE_RENDERER 
(ddisp->renderer)),
-                               dia_interactive_renderer_get_height_pixels (DIA_INTERACTIVE_RENDERER 
(ddisp->renderer)),
-                               &ddisp->diagram->data->bg_color);
+    dia_interactive_renderer_fill_pixel_rect (DIA_INTERACTIVE_RENDERER (ddisp->renderer),
+                                              0,
+                                              0,
+                                              dia_interactive_renderer_get_width_pixels 
(DIA_INTERACTIVE_RENDERER (ddisp->renderer)),
+                                              dia_interactive_renderer_get_height_pixels 
(DIA_INTERACTIVE_RENDERER (ddisp->renderer)),
+                                              &ddisp->diagram->data->bg_color);
   }
 
   /* Draw grid */
-  grid_draw(ddisp, update);
-  pagebreak_draw(ddisp, update);
+  grid_draw (ddisp, update);
+  pagebreak_draw (ddisp, update);
 
 #ifdef TRACES
   timer = g_timer_new();
diff --git a/app/grid.c b/app/grid.c
index 70df0280..64375b4d 100644
--- a/app/grid.c
+++ b/app/grid.c
@@ -88,14 +88,11 @@ grid_draw_horizontal_lines(DDisplay *ddisp, Rectangle *update, real length)
   int height, width;
   guint major_lines = ddisp->diagram->grid.major_lines;
   DiaRenderer *renderer = ddisp->renderer;
-  DiaInteractiveRendererInterface *irenderer;
   int major_count = 0;
 
-  irenderer = DIA_INTERACTIVE_RENDERER_GET_IFACE (renderer);
-
-  pos = ceil( update->top / length ) * length;
-  ddisplay_transform_coords(ddisp, update->left, pos, &x, &y);
-  ddisplay_transform_coords(ddisp, update->right, update->bottom, &width, &height);
+  pos = ceil ( update->top / length ) * length;
+  ddisplay_transform_coords (ddisp, update->left, pos, &x, &y);
+  ddisplay_transform_coords (ddisp, update->right, update->bottom, &width, &height);
 
   /*
     Explanatory note from Lawrence Withers (lwithers users sf net):
@@ -123,32 +120,29 @@ grid_draw_horizontal_lines(DDisplay *ddisp, Rectangle *update, real length)
       }
       major_count = (major_count + 1) % major_lines;
     }
-    irenderer->draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
-                                x,
-                                y,
-                                width,
-                                y,
-                                &ddisp->diagram->grid.colour);
+    dia_interactive_renderer_draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
+                                              x,
+                                              y,
+                                              width,
+                                              y,
+                                              &ddisp->diagram->grid.colour);
     pos += length;
     ddisplay_transform_coords (ddisp, update->left, pos, &x, &y);
   }
 }
 
 static void
-grid_draw_vertical_lines(DDisplay *ddisp, Rectangle *update, real length)
+grid_draw_vertical_lines (DDisplay *ddisp, Rectangle *update, real length)
 {
   int x = 0, y = 0;
   real pos;
   int height, width;
   guint major_lines = ddisp->diagram->grid.major_lines;
   DiaRenderer *renderer = ddisp->renderer;
-  DiaInteractiveRendererInterface *irenderer;
   int major_count = 0;
 
-  irenderer = DIA_INTERACTIVE_RENDERER_GET_IFACE (renderer);
-
-  pos = ceil( update->left / length ) * length;
-  ddisplay_transform_coords(ddisp, update->right, update->bottom, &width, &height);
+  pos = ceil ( update->left / length ) * length;
+  ddisplay_transform_coords (ddisp, update->right, update->bottom, &width, &height);
 
   if (major_lines) {
     major_count = ROUND (pos/length);
@@ -170,25 +164,22 @@ grid_draw_vertical_lines(DDisplay *ddisp, Rectangle *update, real length)
       }
       major_count = (major_count + 1) % major_lines;
     }
-    irenderer->draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
-                                x,
-                                y,
-                                x,
-                                height,
-                                &ddisp->diagram->grid.colour);
+    dia_interactive_renderer_draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
+                                              x,
+                                              y,
+                                              x,
+                                              height,
+                                              &ddisp->diagram->grid.colour);
     pos += length;
   }
 }
 
 static void
-grid_draw_hex(DDisplay *ddisp, Rectangle *update, real length)
+grid_draw_hex (DDisplay *ddisp, Rectangle *update, real length)
 {
   real horiz_pos, vert_pos;
   int to_x, to_y, x, y;
   DiaRenderer *renderer = ddisp->renderer;
-  DiaInteractiveRendererInterface *irenderer;
-
-  irenderer = DIA_INTERACTIVE_RENDERER_GET_IFACE (renderer);
 
   /* First horizontal lines: */
   vert_pos = ceil( update->top / (length * sqrt(3)) ) * length * sqrt(3);
@@ -198,12 +189,12 @@ grid_draw_hex(DDisplay *ddisp, Rectangle *update, real length)
       ddisplay_transform_coords (ddisp, horiz_pos, vert_pos, &x, &y);
       ddisplay_transform_coords (ddisp, horiz_pos + length, vert_pos, &to_x, &y);
 
-      irenderer->draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
-                                  x,
-                                  y,
-                                  to_x,
-                                  y,
-                                  &ddisp->diagram->grid.colour);
+      dia_interactive_renderer_draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
+                                                x,
+                                                y,
+                                                to_x,
+                                                y,
+                                                &ddisp->diagram->grid.colour);
       horiz_pos += 3 * length;
     }
 
@@ -215,15 +206,15 @@ grid_draw_hex(DDisplay *ddisp, Rectangle *update, real length)
   while (vert_pos <= update->bottom) {
     horiz_pos = ceil( (update->left) / (3 * length) ) * length * 3 - length;
     while (horiz_pos <= update->right) {
-      ddisplay_transform_coords(ddisp, horiz_pos, vert_pos, &x, &y);
-      ddisplay_transform_coords(ddisp, horiz_pos+length, vert_pos, &to_x, &y);
-
-      irenderer->draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
-                                  x,
-                                  y,
-                                  to_x,
-                                  y,
-                                  &ddisp->diagram->grid.colour);
+      ddisplay_transform_coords (ddisp, horiz_pos, vert_pos, &x, &y);
+      ddisplay_transform_coords (ddisp, horiz_pos+length, vert_pos, &to_x, &y);
+
+      dia_interactive_renderer_draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
+                                                x,
+                                                y,
+                                                to_x,
+                                                y,
+                                                &ddisp->diagram->grid.colour);
       horiz_pos += 3 * length;
     }
 
@@ -238,23 +229,23 @@ grid_draw_hex(DDisplay *ddisp, Rectangle *update, real length)
       ddisplay_transform_coords (ddisp, horiz_pos + length, vert_pos, &x, &y);
       ddisplay_transform_coords (ddisp, horiz_pos + 1.5 * length, vert_pos + length * sqrt(3) * 0.5, &to_x, 
&to_y);
 
-      irenderer->draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
-                                  x,
-                                  y,
-                                  to_x,
-                                  to_y,
-                                  &ddisp->diagram->grid.colour);
+      dia_interactive_renderer_draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
+                                                x,
+                                                y,
+                                                to_x,
+                                                to_y,
+                                                &ddisp->diagram->grid.colour);
 
       ddisplay_transform_coords (ddisp, horiz_pos, vert_pos, &x, &y);
       ddisplay_transform_coords (ddisp, horiz_pos - 0.5 * length, vert_pos + length * sqrt(3) * 0.5, &to_x, 
&to_y);
 
-      irenderer->draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
-                                  x,
-                                  y,
-                                  to_x,
-                                  to_y,
-                                  &ddisp->diagram->grid.colour);
-                                  horiz_pos += 3 * length;
+      dia_interactive_renderer_draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
+                                                x,
+                                                y,
+                                                to_x,
+                                                to_y,
+                                                &ddisp->diagram->grid.colour);
+                                                horiz_pos += 3 * length;
     }
 
     vert_pos += sqrt(3) * length;
@@ -268,22 +259,22 @@ grid_draw_hex(DDisplay *ddisp, Rectangle *update, real length)
       ddisplay_transform_coords (ddisp, horiz_pos, vert_pos, &x, &y);
       ddisplay_transform_coords (ddisp, horiz_pos - 0.5 * length, vert_pos + 0.5 * sqrt(3) * length, &to_x, 
&to_y);
 
-      irenderer->draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
-                                  x,
-                                  y,
-                                  to_x,
-                                  to_y,
-                                  &ddisp->diagram->grid.colour);
+      dia_interactive_renderer_draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
+                                                x,
+                                                y,
+                                                to_x,
+                                                to_y,
+                                                &ddisp->diagram->grid.colour);
 
       ddisplay_transform_coords (ddisp, horiz_pos + length, vert_pos, &x, &y);
       ddisplay_transform_coords (ddisp, horiz_pos + 1.5 * length, vert_pos + 0.5 * sqrt(3) * length, &to_x, 
&to_y);
 
-      irenderer->draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
-                                  x,
-                                  y,
-                                  to_x,
-                                  to_y,
-                                  &ddisp->diagram->grid.colour);
+      dia_interactive_renderer_draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
+                                                x,
+                                                y,
+                                                to_x,
+                                                to_y,
+                                                &ddisp->diagram->grid.colour);
       horiz_pos += 3 * length;
     }
 
@@ -332,12 +323,10 @@ void
 pagebreak_draw (DDisplay *ddisp, Rectangle *update)
 {
   DiaRenderer *renderer = ddisp->renderer;
-  DiaInteractiveRendererInterface *irenderer;
 
   int width = dia_interactive_renderer_get_width_pixels (DIA_INTERACTIVE_RENDERER (ddisp->renderer));
   int height = dia_interactive_renderer_get_height_pixels (DIA_INTERACTIVE_RENDERER (ddisp->renderer));
 
-  irenderer = DIA_INTERACTIVE_RENDERER_GET_IFACE (renderer);
   if (prefs.pagebreak.visible) {
     Diagram *dia = ddisp->diagram;
     real origx = 0, origy = 0, pos;
@@ -362,18 +351,18 @@ pagebreak_draw (DDisplay *ddisp, Rectangle *update)
     pos = origx + ceil ((update->left - origx) / pwidth) * pwidth;
     while (pos <= update->right) {
       ddisplay_transform_coords (ddisp, pos, 0, &x, &y);
-      irenderer->draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
-                                  x, 0, x, height,
-                                  &dia->pagebreak_color);
+      dia_interactive_renderer_draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
+                                                x, 0, x, height,
+                                                &dia->pagebreak_color);
       pos += pwidth;
     }
     /* Horizontal lines: */
     pos = origy + ceil ((update->top - origy) / pheight) * pheight;
     while (pos <= update->bottom) {
       ddisplay_transform_coords (ddisp, 0,pos,&x,&y);
-      irenderer->draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
-                                  0, y, width, y,
-                                  &dia->pagebreak_color);
+      dia_interactive_renderer_draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
+                                                0, y, width, y,
+                                                &dia->pagebreak_color);
       pos += pheight;
     }
   }
diff --git a/app/handle_ops.c b/app/handle_ops.c
index 46c20b64..5c12e086 100644
--- a/app/handle_ops.c
+++ b/app/handle_ops.c
@@ -53,8 +53,6 @@ handle_draw (Handle *handle, DDisplay *ddisp)
   gboolean some_selected;
   int x,y;
   DiaRenderer *renderer = ddisp->renderer;
-  DiaInteractiveRendererInterface *irenderer =
-    DIA_INTERACTIVE_RENDERER_GET_IFACE (ddisp->renderer);
   const Color *color;
 
   ddisplay_transform_coords (ddisp, handle->pos.x, handle->pos.y, &x, &y);
@@ -74,28 +72,34 @@ handle_draw (Handle *handle, DDisplay *ddisp)
   dia_renderer_set_fillstyle (renderer, FILLSTYLE_SOLID);
 
 
-  irenderer->fill_pixel_rect (DIA_INTERACTIVE_RENDERER (renderer),
-                              x - HANDLE_SIZE/2 + 1,
-                              y - HANDLE_SIZE/2 + 1,
-                              HANDLE_SIZE-2, HANDLE_SIZE-2,
-                              /* it does not change the color, but does not reflect taht in the signature */
-                              (Color *) color);
+  dia_interactive_renderer_fill_pixel_rect (DIA_INTERACTIVE_RENDERER (renderer),
+                                            x - HANDLE_SIZE/2 + 1,
+                                            y - HANDLE_SIZE/2 + 1,
+                                            HANDLE_SIZE-2,
+                                            HANDLE_SIZE-2,
+                                            /* it does not change the color, but does not reflect taht in 
the signature */
+                                            (Color *) color);
 
-  irenderer->draw_pixel_rect (DIA_INTERACTIVE_RENDERER (renderer),
-                              x - HANDLE_SIZE/2,
-                              y - HANDLE_SIZE/2,
-                              HANDLE_SIZE-1, HANDLE_SIZE-1,
-                              &color_black);
+  dia_interactive_renderer_draw_pixel_rect (DIA_INTERACTIVE_RENDERER (renderer),
+                                            x - HANDLE_SIZE/2,
+                                            y - HANDLE_SIZE/2,
+                                            HANDLE_SIZE-1,
+                                            HANDLE_SIZE-1,
+                                            &color_black);
 
   if (handle->connect_type != HANDLE_NONCONNECTABLE) {
-    irenderer->draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
-                                x - HANDLE_SIZE/2, y - HANDLE_SIZE/2,
-                                x + HANDLE_SIZE/2, y + HANDLE_SIZE/2,
-                                &color_black);
-    irenderer->draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
-                                x - HANDLE_SIZE/2, y + HANDLE_SIZE/2,
-                                x + HANDLE_SIZE/2, y - HANDLE_SIZE/2,
-                                &color_black);
+    dia_interactive_renderer_draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
+                                              x - HANDLE_SIZE/2,
+                                              y - HANDLE_SIZE/2,
+                                              x + HANDLE_SIZE/2,
+                                              y + HANDLE_SIZE/2,
+                                              &color_black);
+    dia_interactive_renderer_draw_pixel_line (DIA_INTERACTIVE_RENDERER (renderer),
+                                              x - HANDLE_SIZE/2,
+                                              y + HANDLE_SIZE/2,
+                                              x + HANDLE_SIZE/2,
+                                              y - HANDLE_SIZE/2,
+                                              &color_black);
   }
 }
 
diff --git a/app/interface.c b/app/interface.c
index 751bb029..e328a707 100644
--- a/app/interface.c
+++ b/app/interface.c
@@ -401,7 +401,6 @@ canvas_expose_event (GtkWidget      *widget,
 {
   GSList *l;
   Rectangle *r, totrect;
-  DiaInteractiveRendererInterface *renderer;
   GtkAllocation alloc;
   cairo_t *ctx;
 
@@ -409,35 +408,28 @@ canvas_expose_event (GtkWidget      *widget,
 
   g_return_val_if_fail (ddisp->renderer != NULL, FALSE);
 
-  /* Renders updates to pixmap + copies display_areas to canvas(screen) */
-  renderer = DIA_INTERACTIVE_RENDERER_GET_IFACE (ddisp->renderer);
-
   /* Only update if update_areas exist */
   l = ddisp->update_areas;
-  if (l != NULL)
-  {
+  if (l != NULL) {
     totrect = *(Rectangle *) l->data;
 
-    g_return_val_if_fail (   renderer->clip_region_clear != NULL
-                          && renderer->clip_region_add_rect != NULL, FALSE);
-
-    renderer->clip_region_clear (DIA_INTERACTIVE_RENDERER (ddisp->renderer));
+    dia_interactive_renderer_clip_region_clear (DIA_INTERACTIVE_RENDERER (ddisp->renderer));
 
     while ( l!= NULL) {
       r = (Rectangle *) l->data;
 
       rectangle_union (&totrect, r);
-      renderer->clip_region_add_rect (DIA_INTERACTIVE_RENDERER (ddisp->renderer), r);
+      dia_interactive_renderer_clip_region_add_rect (DIA_INTERACTIVE_RENDERER (ddisp->renderer), r);
 
       l = g_slist_next (l);
     }
     /* Free update_areas list: */
     l = ddisp->update_areas;
-    while(l!=NULL) {
-      g_free(l->data);
-      l = g_slist_next(l);
+    while (l!=NULL) {
+      g_free (l->data);
+      l = g_slist_next (l);
     }
-    g_slist_free(ddisp->update_areas);
+    g_slist_free (ddisp->update_areas);
     ddisp->update_areas = NULL;
 
     totrect.left -= 0.1;
@@ -445,7 +437,7 @@ canvas_expose_event (GtkWidget      *widget,
     totrect.top -= 0.1;
     totrect.bottom += 0.1;
 
-    ddisplay_render_pixmap(ddisp, &totrect);
+    ddisplay_render_pixmap (ddisp, &totrect);
   }
 
   gtk_widget_get_allocation (widget, &alloc);
diff --git a/lib/diainteractiverenderer.c b/lib/diainteractiverenderer.c
index 980af53b..9c661d42 100644
--- a/lib/diainteractiverenderer.c
+++ b/lib/diainteractiverenderer.c
@@ -23,6 +23,8 @@
 #include "diarenderer.h"
 #include "diainteractiverenderer.h"
 
+G_DEFINE_INTERFACE (DiaInteractiveRenderer, dia_interactive_renderer, DIA_TYPE_RENDERER)
+
 /**
  * SECTION:dia-interactive-renderer
  * @title: DiaInteractiveRenderer
@@ -57,7 +59,7 @@ get_height_pixels (DiaInteractiveRenderer *self)
 }
 
 static void
-dia_interactive_renderer_iface_init (DiaInteractiveRendererInterface *iface)
+dia_interactive_renderer_default_init (DiaInteractiveRendererInterface *iface)
 {
   /* NULL initialization probably already done by GObject */
   iface->get_width_pixels = get_width_pixels;
@@ -72,32 +74,53 @@ dia_interactive_renderer_iface_init (DiaInteractiveRendererInterface *iface)
   iface->draw_object_highlighted = NULL;
 }
 
-GType
-dia_interactive_renderer_get_type (void)
+
+/**
+ * dia_interactive_renderer_get_width_pixels:
+ * @self: the #DiaInteractiveRenderer
+ *
+ * Get the width in pixels of the drawing area (if any)
+ *
+ * Returns: the width
+ *
+ * Since: 0.98
+ */
+int
+dia_interactive_renderer_get_width_pixels (DiaInteractiveRenderer *self)
 {
-  static GType iface_type = 0;
-
-  if (!iface_type)
-    {
-      static const GTypeInfo iface_info =
-      {
-        sizeof (DiaInteractiveRendererInterface),
-       (GBaseInitFunc)     dia_interactive_renderer_iface_init,
-       (GBaseFinalizeFunc) NULL,
-      };
-
-      iface_type = g_type_register_static (G_TYPE_INTERFACE,
-                                           "DiaInteractiveRendererInterface",
-                                           &iface_info,
-                                           0);
-
-      g_type_interface_add_prerequisite (iface_type,
-                                         DIA_TYPE_RENDERER);
-    }
-
-  return iface_type;
+  DiaInteractiveRendererInterface *irenderer =
+    DIA_INTERACTIVE_RENDERER_GET_IFACE (self);
+
+  g_return_val_if_fail (irenderer != NULL, 0);
+  g_return_val_if_fail (irenderer->get_width_pixels != NULL, 0);
+
+  return irenderer->get_width_pixels (self);
 }
 
+
+/**
+ * dia_interactive_renderer_get_height_pixels:
+ * @self: the #DiaInteractiveRenderer
+ *
+ * Get the height in pixels of the drawing area (if any)
+ *
+ * Returns: the height
+ *
+ * Since: 0.98
+ */
+int
+dia_interactive_renderer_get_height_pixels (DiaInteractiveRenderer *self)
+{
+  DiaInteractiveRendererInterface *irenderer =
+    DIA_INTERACTIVE_RENDERER_GET_IFACE (self);
+
+  g_return_val_if_fail (irenderer != NULL, 0);
+  g_return_val_if_fail (irenderer->get_height_pixels != NULL, 0);
+
+  return irenderer->get_height_pixels (self);
+}
+
+
 /**
  * dia_interactive_renderer_set_size:
  * @self: the #DiaInteractiveRenderer
@@ -124,6 +147,134 @@ dia_interactive_renderer_set_size (DiaInteractiveRenderer *self,
   irenderer->set_size (self, window, width, height);
 }
 
+
+/**
+ * dia_interactive_renderer_clip_region_clear:
+ * @self: the #DiaInteractiveRenderer
+ *
+ * Since: 0.98
+ */
+void
+dia_interactive_renderer_clip_region_clear (DiaInteractiveRenderer *self)
+{
+  DiaInteractiveRendererInterface *irenderer =
+    DIA_INTERACTIVE_RENDERER_GET_IFACE (self);
+
+  g_return_if_fail (irenderer != NULL);
+  g_return_if_fail (irenderer->clip_region_clear != NULL);
+
+  irenderer->clip_region_clear (self);
+}
+
+
+/**
+ * dia_interactive_renderer_clip_region_add_rect:
+ * @self: the #DiaInteractiveRenderer
+ * @rect: the #Rectangle to add
+ *
+ * Since: 0.98
+ */
+void
+dia_interactive_renderer_clip_region_add_rect (DiaInteractiveRenderer *self,
+                                               Rectangle              *rect)
+{
+  DiaInteractiveRendererInterface *irenderer =
+    DIA_INTERACTIVE_RENDERER_GET_IFACE (self);
+
+  g_return_if_fail (irenderer != NULL);
+  g_return_if_fail (irenderer->clip_region_add_rect != NULL);
+
+  irenderer->clip_region_add_rect (self, rect);
+}
+
+
+/**
+ * dia_interactive_renderer_draw_pixel_line:
+ * @self: the #DiaInteractiveRenderer
+ * @x1: starting horizontal position
+ * @y1: starting vertical position
+ * @x2: ending horizontal position
+ * @y2: ending vertical position
+ * @color: #Color to draw with
+ *
+ * Since: 0.98
+ */
+void
+dia_interactive_renderer_draw_pixel_line (DiaInteractiveRenderer *self,
+                                          int                     x1,
+                                          int                     y1,
+                                          int                     x2,
+                                          int                     y2,
+                                          Color                  *color)
+{
+  DiaInteractiveRendererInterface *irenderer =
+    DIA_INTERACTIVE_RENDERER_GET_IFACE (self);
+
+  g_return_if_fail (irenderer != NULL);
+  g_return_if_fail (irenderer->draw_pixel_line != NULL);
+
+  irenderer->draw_pixel_line (self, x1, y1, x2, y2, color);
+}
+
+
+/**
+ * dia_interactive_renderer_draw_pixel_rect:
+ * @self: the #DiaInteractiveRenderer
+ * @x: horizontal position
+ * @y: vertical position
+ * @width: width of the rectangle
+ * @height: height of the rectangle
+ * @color: #Color to outline with
+ *
+ * Since: 0.98
+ */
+void
+dia_interactive_renderer_draw_pixel_rect (DiaInteractiveRenderer *self,
+                                          int                     x,
+                                          int                     y,
+                                          int                     width,
+                                          int                     height,
+                                          Color                  *color)
+{
+  DiaInteractiveRendererInterface *irenderer =
+    DIA_INTERACTIVE_RENDERER_GET_IFACE (self);
+
+  g_return_if_fail (irenderer != NULL);
+  g_return_if_fail (irenderer->draw_pixel_rect != NULL);
+
+  irenderer->draw_pixel_rect (self, x, y, width, height, color);
+}
+
+
+/**
+ * dia_interactive_renderer_fill_pixel_rect:
+ * @self: the #DiaInteractiveRenderer
+ * @x: horizontal position
+ * @y: vertical position
+ * @width: width of the rectangle
+ * @height: height of the rectangle
+ * @color: #Color to fill with
+ *
+ * Since: 0.98
+ */
+void
+dia_interactive_renderer_fill_pixel_rect (DiaInteractiveRenderer *self,
+                                          int                     x,
+                                          int                     y,
+                                          int                     width,
+                                          int                     height,
+                                          Color                  *color)
+{
+  DiaInteractiveRendererInterface *irenderer =
+    DIA_INTERACTIVE_RENDERER_GET_IFACE (self);
+
+  g_return_if_fail (irenderer != NULL);
+  g_return_if_fail (irenderer->fill_pixel_rect != NULL);
+
+  irenderer->fill_pixel_rect (self, x, y, width, height, color);
+}
+
+
 /**
  * dia_interactive_renderer_paint:
  * @self: the #DiaInteractiveRenderer
@@ -150,6 +301,30 @@ dia_interactive_renderer_paint (DiaInteractiveRenderer *self,
   irenderer->paint (self, ctx, width, height);
 }
 
+
+/**
+ * dia_interactive_renderer_draw_object_highlighted:
+ * @self: the #DiaInteractiveRenderer
+ * @object: the #DiaObject to draw
+ * @type: the #DiaHighlightType style
+ *
+ * Since: 0.98
+ */
+void
+dia_interactive_renderer_draw_object_highlighted (DiaInteractiveRenderer *self,
+                                                  DiaObject              *object,
+                                                  DiaHighlightType        type)
+{
+  DiaInteractiveRendererInterface *irenderer =
+    DIA_INTERACTIVE_RENDERER_GET_IFACE (self);
+
+  g_return_if_fail (irenderer != NULL);
+  g_return_if_fail (irenderer->draw_object_highlighted != NULL);
+
+  irenderer->draw_object_highlighted (self, object, type);
+}
+
+
 /**
  * dia_interactive_renderer_set_selection:
  * @self: the #DiaInteractiveRenderer
@@ -177,35 +352,3 @@ dia_interactive_renderer_set_selection (DiaInteractiveRenderer *self,
 
   irenderer->set_selection (self, has_selection, x, y, width, height);
 }
-
-/**
- * dia_interactive_renderer_get_width_pixels:
- * @self: the #DiaInteractiveRenderer
- *
- * Get the width in pixels of the drawing area (if any)
- *
- * Returns: the width
- *
- * Since: 0.98
- */
-int
-dia_interactive_renderer_get_width_pixels (DiaInteractiveRenderer *self)
-{
-  return DIA_INTERACTIVE_RENDERER_GET_IFACE (self)->get_width_pixels (self);
-}
-
-/**
- * dia_interactive_renderer_get_height_pixels:
- * @self: the #DiaInteractiveRenderer
- *
- * Get the height in pixels of the drawing area (if any)
- *
- * Returns: the height
- *
- * Since: 0.98
- */
-int
-dia_interactive_renderer_get_height_pixels (DiaInteractiveRenderer *self)
-{
-  return DIA_INTERACTIVE_RENDERER_GET_IFACE (self)->get_height_pixels (self);
-}
diff --git a/lib/diainteractiverenderer.h b/lib/diainteractiverenderer.h
index 3df5bb81..c5d8eae9 100644
--- a/lib/diainteractiverenderer.h
+++ b/lib/diainteractiverenderer.h
@@ -98,21 +98,47 @@ struct _DiaInteractiveRendererInterface
                                    double                  height);
 };
 
-void dia_interactive_renderer_paint              (DiaInteractiveRenderer *self,
-                                                  cairo_t                *ctx,
-                                                  int                     width,
-                                                  int                     height);
-void dia_interactive_renderer_set_selection      (DiaInteractiveRenderer *self,
-                                                  gboolean                has_selection,
-                                                  double                  x,
-                                                  double                  y,
-                                                  double                  width,
-                                                  double                  height);
-void dia_interactive_renderer_set_size           (DiaInteractiveRenderer *self,
-                                                  gpointer                window,
-                                                  int                     width,
-                                                  int                     height);
-int  dia_interactive_renderer_get_width_pixels   (DiaInteractiveRenderer *self);
-int  dia_interactive_renderer_get_height_pixels  (DiaInteractiveRenderer *self);
+
+int  dia_interactive_renderer_get_width_pixels        (DiaInteractiveRenderer *self);
+int  dia_interactive_renderer_get_height_pixels       (DiaInteractiveRenderer *self);
+void dia_interactive_renderer_set_size                (DiaInteractiveRenderer *self,
+                                                       gpointer                window,
+                                                       int                     width,
+                                                       int                     height);
+void dia_interactive_renderer_clip_region_clear       (DiaInteractiveRenderer *self);
+void dia_interactive_renderer_clip_region_add_rect    (DiaInteractiveRenderer *self,
+                                                       Rectangle              *rect);
+void dia_interactive_renderer_draw_pixel_line         (DiaInteractiveRenderer *self,
+                                                       int                     x1,
+                                                       int                     y1,
+                                                       int                     x2,
+                                                       int                     y2,
+                                                       Color                  *color);
+void dia_interactive_renderer_draw_pixel_rect         (DiaInteractiveRenderer *self,
+                                                       int                     x,
+                                                       int                     y,
+                                                       int                     width,
+                                                       int                     height,
+                                                       Color                  *color);
+void dia_interactive_renderer_fill_pixel_rect         (DiaInteractiveRenderer *self,
+                                                       int                     x,
+                                                       int                     y,
+                                                       int                     width,
+                                                       int                     height,
+                                                       Color                  *color);
+void dia_interactive_renderer_paint                   (DiaInteractiveRenderer *self,
+                                                       cairo_t                *ctx,
+                                                       int                     width,
+                                                       int                     height);
+void dia_interactive_renderer_draw_object_highlighted (DiaInteractiveRenderer *self,
+                                                       DiaObject              *object,
+                                                       DiaHighlightType        type);
+void dia_interactive_renderer_set_selection           (DiaInteractiveRenderer *self,
+                                                       gboolean                has_selection,
+                                                       double                  x,
+                                                       double                  y,
+                                                       double                  width,
+                                                       double                  height);
+
 
 G_END_DECLS



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]