From f51956947411288735f6c495d5e64610d3b75551 Mon Sep 17 00:00:00 2001 From: Rob Kendrick Date: Sun, 19 Mar 2006 23:56:52 +0000 Subject: [project @ 2006-03-19 23:56:52 by rjek] Cairo area clipping, and misc fixups in GTK plotters svn path=/import/netsurf/; revision=2141 --- gtk/gtk_plotters.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'gtk') diff --git a/gtk/gtk_plotters.c b/gtk/gtk_plotters.c index 0be4b4ed2..607a80e05 100644 --- a/gtk/gtk_plotters.c +++ b/gtk/gtk_plotters.c @@ -71,6 +71,9 @@ bool nsgtk_plot_rectangle(int x0, int y0, int width, int height, { nsgtk_set_colour(c); #ifdef CAIRO_VERSION + if (line_width == 0) + line_width = 1; + cairo_set_line_width(current_cr, line_width); cairo_rectangle(current_cr, x0, y0, width, height); cairo_stroke(current_cr); @@ -88,7 +91,8 @@ bool nsgtk_plot_line(int x0, int y0, int x1, int y1, int width, nsgtk_set_colour(c); #ifdef CAIRO_VERSION if (width == 0) - width = 1; + width = 1; + cairo_set_line_width(current_cr, width); cairo_move_to(current_cr, x0, y0); cairo_line_to(current_cr, x1, y1); @@ -109,7 +113,7 @@ bool nsgtk_plot_polygon(int *p, unsigned int n, colour fill) cairo_set_line_width(current_cr, 0); cairo_move_to(current_cr, p[0], p[1]); for (i = 1; i != n; i++) { - cairo_line_to(current_cr, p[i * 2], p[i * 2 + 1]); + cairo_line_to(current_cr, p[i * 2], p[i * 2 + 1]); } cairo_fill(current_cr); cairo_stroke(current_cr); @@ -146,7 +150,13 @@ bool nsgtk_plot_fill(int x0, int y0, int x1, int y1, colour c) bool nsgtk_plot_clip(int clip_x0, int clip_y0, int clip_x1, int clip_y1) { - cliprect.x = clip_x0; +#ifdef CAIRO_VERSION + cairo_reset_clip(current_cr); + cairo_rectangle(current_cr, clip_x0 - 1, clip_y0 - 1, + clip_x1 - clip_x0 + 1, clip_y1 - clip_y0 + 1); + cairo_clip(current_cr); +#endif + cliprect.x = clip_x0; cliprect.y = clip_y0; cliprect.width = clip_x1 - clip_x0 + 1; cliprect.height = clip_y1 - clip_y0 + 1; @@ -166,10 +176,16 @@ bool nsgtk_plot_disc(int x, int y, int radius, colour c, bool filled) { nsgtk_set_colour(c); #ifdef CAIRO_VERSION - cairo_set_line_width(current_cr, 1); + if (filled) + cairo_set_line_width(current_cr, 0); + else + cairo_set_line_width(current_cr, 1); + cairo_arc(current_cr, x, y, radius, 0, M_PI * 2); + if (filled) - cairo_fill(current_cr); + cairo_fill(current_cr); + cairo_stroke(current_cr); #else gdk_draw_arc(current_drawable, current_gc, -- cgit v1.2.3