Verified Commit f1de9111 authored by Zander's avatar Zander 💥

Working rendering of the canvas

parent 03ac6bea
......@@ -199,8 +199,6 @@ copy_display(DDisplay *orig_ddisp)
ddisp->aa_renderer = orig_ddisp->aa_renderer;
ddisp->update_areas = orig_ddisp->update_areas;
ddisp->display_areas = orig_ddisp->display_areas;
ddisp->update_id = 0;
ddisp->clicked_position.x = ddisp->clicked_position.y = 0.0;
......@@ -258,8 +256,6 @@ new_display(Diagram *dia)
ddisp->aa_renderer = (preset > 0 ? TRUE : FALSE);
ddisp->update_areas = NULL;
ddisp->display_areas = NULL;
ddisp->update_id = 0;
ddisp->clicked_position.x = ddisp->clicked_position.y = 0.0;
......@@ -362,20 +358,6 @@ ddisplay_add_update_pixels(DDisplay *ddisp, Point *point,
ddisplay_add_update(ddisp, &rect);
}
/** Free display_areas list */
static void
ddisplay_free_display_areas(DDisplay *ddisp)
{
GSList *l;
l = ddisp->display_areas;
while(l!=NULL) {
g_free(l->data);
l = g_slist_next(l);
}
g_slist_free(ddisp->display_areas);
ddisp->display_areas = NULL;
}
/** Free update_areas list */
static void
ddisplay_free_update_areas(DDisplay *ddisp)
......@@ -399,9 +381,6 @@ ddisplay_add_update_all(DDisplay *ddisp)
if (ddisp->update_areas != NULL) {
ddisplay_free_update_areas(ddisp);
}
if (ddisp->display_areas != NULL) {
ddisplay_free_display_areas(ddisp);
}
ddisplay_add_update(ddisp, &ddisp->visible);
}
......@@ -426,8 +405,6 @@ void
ddisplay_add_update(DDisplay *ddisp, const Rectangle *rect)
{
Rectangle *r;
int top,bottom,left,right;
Rectangle *visible;
int width, height;
if (!ddisp->renderer)
......@@ -450,122 +427,7 @@ ddisplay_add_update(DDisplay *ddisp, const Rectangle *rect)
rectangle_intersection(r, &ddisp->visible);
}
visible = &ddisp->visible;
left = floor( (r->left - visible->left) * (real)width /
(visible->right - visible->left) ) - 1;
top = floor( (r->top - visible->top) * (real)height /
(visible->bottom - visible->top) ) - 1;
right = ceil( (r->right - visible->left) * (real)width /
(visible->right - visible->left) ) + 1;
bottom = ceil( (r->bottom - visible->top) * (real)height /
(visible->bottom - visible->top) ) + 1;
ddisplay_add_display_area(ddisp,
left, top,
right, bottom);
}
void
ddisplay_add_display_area(DDisplay *ddisp,
int left, int top,
int right, int bottom)
{
IRectangle *r;
if (!ddisp->renderer)
return; /* if we don't have a renderer yet prefer ignoring over crashing */
if (left < 0)
left = 0;
if (top < 0)
top = 0;
if (right > dia_renderer_get_width_pixels (ddisp->renderer))
right = dia_renderer_get_width_pixels (ddisp->renderer);
if (bottom > dia_renderer_get_height_pixels (ddisp->renderer))
bottom = dia_renderer_get_height_pixels (ddisp->renderer);
/* draw some rectangles to show where updates are...*/
/*
gdk_draw_rectangle(gtk_widget_get_window(ddisp->canvas),
gtk_widget_get_style(ddisp->canvas)->black_gc, TRUE,
left, top, right-left,bottom-top);
*/
/* Temporarily just do a union of all Irectangles: */
if (ddisp->display_areas==NULL) {
r = g_new(IRectangle,1);
r->top = top; r->bottom = bottom;
r->left = left; r->right = right;
ddisp->display_areas = g_slist_prepend(ddisp->display_areas, r);
} else {
r = (IRectangle *) ddisp->display_areas->data;
r->top = MIN( r->top, top );
r->bottom = MAX( r->bottom, bottom );
r->left = MIN( r->left, left );
r->right = MAX( r->right, right );
}
}
static gboolean
ddisplay_update_handler(DDisplay *ddisp)
{
GSList *l;
IRectangle *ir;
Rectangle *r, totrect;
DiaInteractiveRendererInterface *renderer;
g_return_val_if_fail (ddisp->renderer != NULL, FALSE);
/* Renders updates to pixmap + copies display_areas to canvas(screen) */
renderer = DIA_GET_INTERACTIVE_RENDERER_INTERFACE (ddisp->renderer);
/* Only update if update_areas exist */
l = ddisp->update_areas;
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 (ddisp->renderer);
while(l!=NULL) {
r = (Rectangle *) l->data;
rectangle_union(&totrect, r);
renderer->clip_region_add_rect (ddisp->renderer, r);
l = g_slist_next(l);
}
/* Free update_areas list: */
ddisplay_free_update_areas(ddisp);
totrect.left -= 0.1;
totrect.right += 0.1;
totrect.top -= 0.1;
totrect.bottom += 0.1;
ddisplay_render_pixmap(ddisp, &totrect);
}
l = ddisp->display_areas;
while(l!=NULL) {
ir = (IRectangle *) l->data;
g_return_val_if_fail (renderer->copy_to_window, FALSE);
renderer->copy_to_window(ddisp->renderer,
gtk_widget_get_window(ddisp->canvas),
ir->left, ir->top,
ir->right - ir->left, ir->bottom - ir->top);
l = g_slist_next(l);
}
ddisplay_free_display_areas(ddisp);
ddisp->update_id = 0;
return FALSE;
gtk_widget_queue_draw (ddisp->canvas);
}
void
......@@ -579,12 +441,7 @@ ddisplay_flush(DDisplay *ddisp)
* GTK_PRIORITY_RESIZE = (G_PRIORITY_HIGH_IDLE + 10)
* Dia's canvas rendering is in between
*/
if (!ddisp->update_id)
ddisp->update_id = g_idle_add_full (G_PRIORITY_HIGH_IDLE+15, (GSourceFunc)ddisplay_update_handler, ddisp, NULL);
if (ddisp->display_areas) {
IRectangle *r = (IRectangle *)ddisp->display_areas->data;
dia_log_message ("DispUpdt: %4d,%3d - %4d,%3d\n", r->left, r->top, r->right, r->bottom);
}
gtk_widget_queue_draw (ddisp->canvas);
}
static void
......@@ -1097,12 +954,6 @@ ddisplay_set_renderer(DDisplay *ddisp, int aa_renderer)
int width, height;
GdkWindow *window = gtk_widget_get_window(ddisp->canvas);
/* dont mix new renderer with old updates */
if (ddisp->update_id) {
g_source_remove (ddisp->update_id);
ddisp->update_id = 0;
}
if (ddisp->renderer)
g_object_unref (ddisp->renderer);
......@@ -1213,10 +1064,6 @@ are_you_sure_close_dialog_respond(GtkWidget *widget, /* the dialog */
if (close_ddisp) /* saving succeeded */
recent_file_history_add(ddisp->diagram->filename);
if (ddisp->update_id && close_ddisp) {
g_source_remove (ddisp->update_id);
ddisp->update_id = 0;
}
/* fall through */
case GTK_RESPONSE_NO :
if (close_ddisp)
......@@ -1351,12 +1198,6 @@ ddisplay_really_destroy(DDisplay *ddisp)
if (active_display == ddisp)
display_set_active(NULL);
/* last chance to avoid crashing in the idle update */
if (ddisp->update_id) {
g_source_remove (ddisp->update_id);
ddisp->update_id = 0;
}
if (ddisp->diagram) {
diagram_remove_ddisplay(ddisp->diagram, ddisp);
/* if we are the last user of the diagram it will be unref'ed */
......@@ -1369,8 +1210,6 @@ ddisplay_really_destroy(DDisplay *ddisp)
/* Free update_areas list: */
ddisplay_free_update_areas(ddisp);
/* Free display_areas list */
ddisplay_free_display_areas(ddisp);
g_free(ddisp);
}
......
......@@ -83,8 +83,6 @@ struct _DDisplay {
DiaRenderer *renderer;
GSList *update_areas; /* Update areas list */
GSList *display_areas; /* Display areas list */
guint update_id; /* idle handler ID for redraws */
GtkIMContext *im_context;
......@@ -135,9 +133,6 @@ void ddisplay_add_update_all(DDisplay *ddisp);
void ddisplay_add_update_with_border(DDisplay *ddisp, const Rectangle *rect,
int pixel_border);
void ddisplay_add_update(DDisplay *ddisp, const Rectangle *rect);
void ddisplay_add_display_area(DDisplay *ddisp,
int left, int top,
int right, int bottom);
void ddisplay_flush(DDisplay *ddisp);
void ddisplay_update_scrollbars(DDisplay *ddisp);
void ddisplay_set_origo(DDisplay *ddisp,
......
......@@ -385,20 +385,61 @@ canvas_configure_event (GtkWidget *widget,
return new_size;
}
/* Got when an area previously obscured need to be redrawn.
* Needs GDK_EXPOSURE_MASK.
* Gone with gtk+-3.0 or better replaced by "draw".
*/
static gboolean
canvas_expose_event (GtkWidget *widget,
GdkEventExpose *event,
DDisplay *ddisp)
{
ddisplay_add_display_area (ddisp,
event->area.x, event->area.y,
event->area.x + event->area.width,
event->area.y + event->area.height);
ddisplay_flush(ddisp);
GSList *l;
Rectangle *r, totrect;
DiaInteractiveRendererInterface *renderer;
g_return_val_if_fail (ddisp->renderer != NULL, FALSE);
/* Renders updates to pixmap + copies display_areas to canvas(screen) */
renderer = DIA_GET_INTERACTIVE_RENDERER_INTERFACE (ddisp->renderer);
/* Only update if update_areas exist */
l = ddisp->update_areas;
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 (ddisp->renderer);
while(l!=NULL) {
r = (Rectangle *) l->data;
rectangle_union(&totrect, r);
renderer->clip_region_add_rect (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);
}
g_slist_free(ddisp->update_areas);
ddisp->update_areas = NULL;
totrect.left -= 0.1;
totrect.right += 0.1;
totrect.top -= 0.1;
totrect.bottom += 0.1;
ddisplay_render_pixmap(ddisp, &totrect);
}
dia_interactive_renderer_paint (ddisp->renderer,
ctx,
gtk_widget_get_allocated_width (widget),
gtk_widget_get_allocated_height (widget));
return FALSE;
}
......
......@@ -31,7 +31,7 @@ dia_interactive_renderer_iface_init (DiaInteractiveRendererInterface *iface)
iface->draw_pixel_line = NULL;
iface->draw_pixel_rect = NULL;
iface->fill_pixel_rect = NULL;
iface->copy_to_window = NULL;
iface->paint = NULL;
iface->set_size = NULL;
iface->draw_object_highlighted = NULL;
}
......@@ -78,3 +78,17 @@ dia_renderer_set_size (DiaRenderer* renderer, gpointer window,
irenderer->set_size (renderer, window, width, height);
}
void
dia_interactive_renderer_paint (DiaRenderer *renderer,
cairo_t *ctx,
int width,
int height)
{
DiaInteractiveRendererInterface *irenderer =
DIA_GET_INTERACTIVE_RENDERER_INTERFACE (renderer);
g_return_if_fail (irenderer != NULL);
g_return_if_fail (irenderer->paint != NULL);
irenderer->paint (renderer, ctx, width, height);
}
\ No newline at end of file
......@@ -90,7 +90,7 @@ struct _DiaRendererClass
int (*get_height_pixels) (DiaRenderer*);
/*! \brief Render all the visible object in the layer */
void (*draw_layer) (DiaRenderer*, Layer *, gboolean, Rectangle *);
/*! Calls the objects draw function, which calls the renderer again
/*! Calls the objects draw function, which calls the renderer again
* Affine transformation is mostly done on the renderer side for matrix!=NULL */
void (*draw_object) (DiaRenderer*, DiaObject*, DiaMatrix*);
/*! Returns the EXACT width of text in cm, using the current font.
......@@ -102,8 +102,8 @@ struct _DiaRendererClass
const gchar *text, int length);
/*
* Function which MUST be implemented by any DiaRenderer
/*
* Function which MUST be implemented by any DiaRenderer
*/
/*! Called before rendering begins.
Can be used to do various pre-rendering setup. */
......@@ -165,9 +165,9 @@ struct _DiaRendererClass
real width, real height,
DiaImage *image);
/*
/*
* Functions which SHOULD be implemented by specific renderer, but
* have a default implementation based on the above functions
* have a default implementation based on the above functions
*/
/*! Draw a bezier curve, given it's control points. */
void (*draw_bezier) (DiaRenderer *renderer,
......@@ -197,7 +197,7 @@ struct _DiaRendererClass
Color *fill, Color *stroke);
/*
* Highest level functions, probably only to be implemented by
* Highest level functions, probably only to be implemented by
* special 'high level' renderers
*/
/*! Draw a rounded rectangle, given its upper-left and lower-right corners */
......@@ -211,14 +211,14 @@ struct _DiaRendererClass
Color *color, real radius );
/*! Highest level function doing specific arrow positioning */
void (*draw_line_with_arrows) (DiaRenderer *renderer,
Point *start, Point *end,
void (*draw_line_with_arrows) (DiaRenderer *renderer,
Point *start, Point *end,
real line_width,
Color *line_color,
Arrow *start_arrow,
Arrow *end_arrow);
/*! Highest level function doing specific arrow positioning */
void (*draw_arc_with_arrows) (DiaRenderer *renderer,
void (*draw_arc_with_arrows) (DiaRenderer *renderer,
Point *start, Point *end,
Point *midpoint,
real line_width,
......@@ -226,13 +226,13 @@ struct _DiaRendererClass
Arrow *start_arrow,
Arrow *end_arrow);
/*! Highest level function doing specific arrow positioning */
void (*draw_polyline_with_arrows) (DiaRenderer *renderer,
void (*draw_polyline_with_arrows) (DiaRenderer *renderer,
Point *points, int num_points,
real line_width,
Color *color,
Arrow *start_arrow,
Arrow *end_arrow);
void (*draw_rounded_polyline_with_arrows) (DiaRenderer *renderer,
void (*draw_rounded_polyline_with_arrows) (DiaRenderer *renderer,
Point *points, int num_points,
real line_width,
Color *color,
......@@ -240,7 +240,7 @@ struct _DiaRendererClass
Arrow *end_arrow,
real radius);
void (*draw_bezier_with_arrows) (DiaRenderer *renderer,
void (*draw_bezier_with_arrows) (DiaRenderer *renderer,
BezPoint *points,
int num_points,
real line_width,
......@@ -303,10 +303,11 @@ struct _DiaInteractiveRendererInterface
void (*fill_pixel_rect) (DiaRenderer *renderer,
int x, int y, int width, int height,
Color *color);
/*! Copy already rendered content to the given window */
void (*copy_to_window) (DiaRenderer *renderer,
gpointer window,
int x, int y, int width, int height);
/*! Copy already rendered content to the given context */
void (*paint) (DiaRenderer *renderer,
cairo_t *ctx,
int width,
int height);
/*! Support for drawing selected objects highlighted */
void (*draw_object_highlighted) (DiaRenderer *renderer,
DiaObject *object,
......@@ -314,6 +315,12 @@ struct _DiaInteractiveRendererInterface
};
GType dia_interactive_renderer_interface_get_type (void) G_GNUC_CONST;
void dia_interactive_renderer_paint (DiaRenderer *renderer,
cairo_t *ctx,
int width,
int height);
/*!
* \brief Size adjustment to the given window
* \memberof DiaInteractiveRendererInterface
......
......@@ -80,12 +80,13 @@ static void fill_pixel_rect(DiaRenderer *renderer,
int x, int y,
int width, int height,
Color *color);
static void set_size (DiaRenderer *renderer,
static void set_size (DiaRenderer *renderer,
gpointer window,
int width, int height);
static void copy_to_window (DiaRenderer *renderer,
gpointer window,
int x, int y, int width, int height);
static void paint (DiaRenderer *renderer,
cairo_t *ctx,
int width,
int height);
static void cairo_interactive_renderer_get_property (GObject *object,
guint prop_id,
......@@ -105,14 +106,14 @@ enum {
static int
get_width_pixels (DiaRenderer *object)
{
{
DiaCairoInteractiveRenderer *renderer = DIA_CAIRO_INTERACTIVE_RENDERER (object);
return renderer->width;
}
static int
get_height_pixels (DiaRenderer *object)
{
{
DiaCairoInteractiveRenderer *renderer = DIA_CAIRO_INTERACTIVE_RENDERER (object);
return renderer->height;
}
......@@ -128,9 +129,9 @@ cairo_interactive_renderer_init (DiaCairoInteractiveRenderer *object, void *p)
{
DiaCairoInteractiveRenderer *renderer = DIA_CAIRO_INTERACTIVE_RENDERER (object);
DiaRenderer *dia_renderer = DIA_RENDERER(object);
dia_renderer->is_interactive = 1;
renderer->pixmap = NULL;
renderer->highlight_color = NULL;
......@@ -189,7 +190,7 @@ calculate_relative_luminance (const Color *c)
return 0.2126 * R + 0.7152 * G + 0.0722 * B;
}
static void
static void
draw_text_line (DiaRenderer *self, TextLine *text_line,
Point *pos, Alignment alignment, Color *color)
{
......@@ -209,7 +210,7 @@ draw_text_line (DiaRenderer *self, TextLine *text_line,
real x = pos->x;
real y = pos->y;
y -= text_line_get_ascent(text_line);
y -= text_line_get_ascent(text_line);
x -= text_line_get_alignment_adjustment (text_line, alignment);
rl = calculate_relative_luminance (color) + 0.05;
......@@ -218,17 +219,17 @@ draw_text_line (DiaRenderer *self, TextLine *text_line,
cr2 = calculate_relative_luminance (&alternate_color) + 0.05;
cr2 = (cr2 > rl) ? cr2 / rl : rl / cr2;
/* use color giving the better contrast ratio, if necessary
/* use color giving the better contrast ratio, if necessary
* http://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast
*/
if (cr1 > cr2)
cairo_set_source_rgba (renderer->cr,
cairo_set_source_rgba (renderer->cr,
interactive->highlight_color->red,
interactive->highlight_color->green,
interactive->highlight_color->blue,
1.0);
else
cairo_set_source_rgba (renderer->cr,
cairo_set_source_rgba (renderer->cr,
alternate_color.red,
alternate_color.green,
alternate_color.blue,
......@@ -240,7 +241,7 @@ draw_text_line (DiaRenderer *self, TextLine *text_line,
DIA_RENDERER_CLASS (parent_class)->draw_text_line (self, text_line, pos, alignment, color);
}
static void
draw_object_highlighted (DiaRenderer *self,
draw_object_highlighted (DiaRenderer *self,
DiaObject *object,
DiaHighlightType type)
{
......@@ -263,7 +264,7 @@ draw_object_highlighted (DiaRenderer *self,
/* always reset when done with this object */
interactive->highlight_color = NULL;
}
static void
static void
dia_cairo_interactive_renderer_iface_init (DiaInteractiveRendererInterface* iface)
{
iface->clip_region_clear = clip_region_clear;
......@@ -271,7 +272,7 @@ dia_cairo_interactive_renderer_iface_init (DiaInteractiveRendererInterface* ifac
iface->draw_pixel_line = draw_pixel_line;
iface->draw_pixel_rect = draw_pixel_rect;
iface->fill_pixel_rect = fill_pixel_rect;
iface->copy_to_window = copy_to_window;
iface->paint = paint;
iface->set_size = set_size;
iface->draw_object_highlighted = draw_object_highlighted;
}
......@@ -296,7 +297,7 @@ dia_cairo_interactive_renderer_get_type (void)
(GInstanceInitFunc) cairo_interactive_renderer_init /* init */
};
static const GInterfaceInfo irenderer_iface_info =
static const GInterfaceInfo irenderer_iface_info =
{
(GInterfaceInitFunc) dia_cairo_interactive_renderer_iface_init,
NULL, /* iface_finalize */
......@@ -313,7 +314,7 @@ dia_cairo_interactive_renderer_get_type (void)
&irenderer_iface_info);
}
return object_type;
}
......@@ -329,7 +330,7 @@ begin_render(DiaRenderer *self, const Rectangle *update)
/* Setup clipping for this sequence of render operations */
/* Must be done before the scaling because the clip is in pixel coords */
gdk_cairo_region (base_renderer->cr, renderer->clip_region);
cairo_clip(base_renderer->cr);
cairo_clip(base_renderer->cr);
cairo_scale (base_renderer->cr, *renderer->zoom_factor, *renderer->zoom_factor);
cairo_translate (base_renderer->cr, -renderer->visible->left, -renderer->visible->top);
......@@ -389,7 +390,7 @@ cairo_interactive_renderer_class_init (DiaCairoInteractiveRendererClass *klass)
_("Visible rect pointer"),
_("Visible rect pointer"),
G_PARAM_READWRITE));
/* renderer members */
renderer_class->get_width_pixels = get_width_pixels;
renderer_class->get_height_pixels = get_height_pixels;
......@@ -430,7 +431,7 @@ cairo_interactive_renderer_get_property (GObject *object,
GParamSpec *pspec)
{
DiaCairoInteractiveRenderer *renderer = DIA_CAIRO_INTERACTIVE_RENDERER (object);
switch (prop_id) {
case PROP_ZOOM:
g_value_set_pointer (value, renderer->zoom_factor);
......@@ -462,18 +463,19 @@ set_size(DiaRenderer *object, gpointer window,
}
static void
copy_to_window (DiaRenderer *object, gpointer window,
int x, int y, int width, int height)
paint (DiaRenderer *object,
cairo_t *ctx,
int width,
int height)
{
DiaCairoInteractiveRenderer *renderer = DIA_CAIRO_INTERACTIVE_RENDERER (object);
cairo_t *cr;
cr = gdk_cairo_create (GDK_WINDOW(window));
cairo_set_source_surface (cr, renderer->pixmap, 0.0, 0.0);
cairo_rectangle (cr, x, y, width > 0 ? width : -width, height > 0 ? height : -height);
cairo_clip (cr);
cairo_paint (cr);
cairo_destroy (cr);
cairo_save (ctx);
cairo_set_source_surface (ctx, renderer->pixmap, 0.0, 0.0);
cairo_rectangle (ctx, 0, 0, width > 0 ? width : -width, height > 0 ? height : -height);
cairo_clip (ctx);
cairo_paint (ctx);
cairo_restore (ctx);
}
static void
......@@ -502,7 +504,7 @@ clip_region_add_rect(DiaRenderer *object,
dia_transform_coords(transform, rect->left, rect->top, &x1, &y1);
dia_transform_coords(transform, rect->right, rect->bottom, &x2, &y2);
g_object_unref(transform);
clip_rect.x = x1;
clip_rect.y = y1;
clip_rect.width = x2 - x1 + 1;
......@@ -521,7 +523,7 @@ draw_pixel_line(DiaRenderer *object,
double x1u = x1 + .5, y1u = y1 + .5, x2u = x2 + .5, y2u = y2 + .5;
double lw[2];
lw[0] = 1; lw[1] = 0;
cairo_device_to_user_distance (renderer->cr, &lw[0], &lw[1]);
cairo_set_line_width (renderer->cr, lw[0]);
......@@ -544,7 +546,7 @@ draw_pixel_rect(DiaRenderer *object,
double x1u = x + .5, y1u = y + .5, x2u = x + width + .5, y2u = y + height + .5;
double lw[2];
lw[0] = 1; lw[1] = 0;
cairo_device_to_user_distance (renderer->cr, &lw[0], &lw[1]);
cairo_set_line_width (renderer->cr, lw[0]);
......@@ -566,7 +568,7 @@ fill_pixel_rect(DiaRenderer *object,
double x1u = x + .5, y1u = y + .5, x2u = x + width + .5, y2u = y + height + .5;
double lw[2];
lw[0] = 1; lw[1] = 0;
cairo_device_to_user_distance (renderer->cr, &lw[0], &lw[1]);
cairo_set_line_width (renderer->cr, lw[0]);
......@@ -582,4 +584,4 @@ DiaRenderer *
dia_cairo_interactive_renderer_new ()
{
return g_object_new (DIA_TYPE_CAIRO_INTERACTIVE_RENDERER, NULL);
}
\ No newline at end of file
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment