From: <ai...@us...> - 2009-05-05 00:04:55
|
Revision: 9898 http://plplot.svn.sourceforge.net/plplot/?rev=9898&view=rev Author: airwin Date: 2009-05-05 00:04:51 +0000 (Tue, 05 May 2009) Log Message: ----------- AWI for Hezekiah M. Carty. Add convenience functions to the Cairo driver for getting/setting line drawing styles. Set the style of line ends and joins when rendering both individual line segments and polylines. At high resolution this change gets rid of some nasty looking dents and gaps in pscairo line results (e.g., 4th page of example 16 viewed with gv at 8x magnification). Modified Paths: -------------- trunk/drivers/cairo.c Modified: trunk/drivers/cairo.c =================================================================== --- trunk/drivers/cairo.c 2009-05-04 19:40:47 UTC (rev 9897) +++ trunk/drivers/cairo.c 2009-05-05 00:04:51 UTC (rev 9898) @@ -255,17 +255,41 @@ Draw a line in the current color from (x1,y1) to (x2,y2). ----------------------------------------------------------------------*/ +/*--------------------------------------------------------------------- + (get|set)_line_properties + + (Get|Set) the current Cairo line drawing properties. + ---------------------------------------------------------------------*/ +void get_line_properties(PLCairo *aStream, cairo_line_join_t *join, cairo_line_cap_t *cap) +{ + *join = cairo_get_line_join(aStream->cairoContext); + *cap = cairo_get_line_cap(aStream->cairoContext); +} + +void set_line_properties(PLCairo *aStream, cairo_line_join_t join, cairo_line_cap_t cap) +{ + cairo_set_line_join(aStream->cairoContext, join); + cairo_set_line_cap(aStream->cairoContext, cap); +} + void plD_line_cairo(PLStream *pls, short x1a, short y1a, short x2a, short y2a) { PLCairo *aStream; + cairo_line_join_t old_join; + cairo_line_cap_t old_cap; aStream = (PLCairo *)pls->dev; set_current_context(pls); + get_line_properties(aStream, &old_join, &old_cap); + set_line_properties(aStream, old_join, CAIRO_LINE_CAP_ROUND); + cairo_move_to(aStream->cairoContext, aStream->downscale * (double) x1a, aStream->downscale * (double) y1a); cairo_line_to(aStream->cairoContext, aStream->downscale * (double) x2a, aStream->downscale * (double) y2a); cairo_stroke(aStream->cairoContext); + + set_line_properties(aStream, old_join, old_cap); } /*--------------------------------------------------------------------- @@ -277,11 +301,18 @@ void plD_polyline_cairo(PLStream *pls, short *xa, short *ya, PLINT npts) { PLCairo *aStream; + cairo_line_join_t old_join; + cairo_line_cap_t old_cap; aStream = (PLCairo *)pls->dev; + get_line_properties(aStream, &old_join, &old_cap); + set_line_properties(aStream, CAIRO_LINE_JOIN_BEVEL, CAIRO_LINE_CAP_BUTT); + poly_line(pls, xa, ya, npts); cairo_stroke(aStream->cairoContext); + + set_line_properties(aStream, old_join, old_cap); } /*--------------------------------------------------------------------- @@ -994,11 +1025,11 @@ aStream = (PLCairo *)pls->dev; /* Save the previous line drawing style */ - old_line_cap = cairo_get_line_cap(aStream->cairoContext); - old_line_join = cairo_get_line_join(aStream->cairoContext); - cairo_set_line_cap(aStream->cairoContext, CAIRO_LINE_CAP_BUTT); - cairo_set_line_join(aStream->cairoContext, CAIRO_LINE_JOIN_BEVEL); + get_line_properties(aStream, &old_line_join, &old_line_cap); + /* These line properties make for a nicer looking polygon mesh */ + set_line_properties(aStream, CAIRO_LINE_JOIN_BEVEL, CAIRO_LINE_CAP_BUTT); + /* Draw the polygons */ cairo_move_to(aStream->cairoContext, aStream->downscale * (double) xa[0], aStream->downscale * (double) ya[0]); for(i=1;i<npts;i++) @@ -1016,8 +1047,7 @@ cairo_fill(aStream->cairoContext); /* Restore the previous line drawing style */ - cairo_set_line_cap(aStream->cairoContext, old_line_cap); - cairo_set_line_join(aStream->cairoContext, old_line_join); + set_line_properties(aStream, old_line_join, old_line_cap); } /*--------------------------------------------------------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |