[dia] interactive-renderer: add the missing vfunc wrappers
- From: Zander <zbrown src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dia] interactive-renderer: add the missing vfunc wrappers
- Date: Sun, 15 Sep 2019 09:44:00 +0000 (UTC)
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]