Mercurial > dwindows
comparison gtk3/dw.c @ 1634:c3e08322b8f6
Fixed issues drawing arcs on GTK3 and GTK2 for printing.
This issue was seen in the test program with the failure
to draw the bottom right arc. GTK2 printing may require
some other updates after looking at this change.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Thu, 29 Mar 2012 05:16:26 +0000 |
parents | ed09531b7f0e |
children | c8a0daa53e49 |
comparison
equal
deleted
inserted
replaced
1633:c441c85baa57 | 1634:c3e08322b8f6 |
---|---|
7025 else if(pixmap) | 7025 else if(pixmap) |
7026 cr = cairo_create(pixmap->image); | 7026 cr = cairo_create(pixmap->image); |
7027 if(cr) | 7027 if(cr) |
7028 { | 7028 { |
7029 GdkRGBA *foreground = pthread_getspecific(_dw_fg_color_key); | 7029 GdkRGBA *foreground = pthread_getspecific(_dw_fg_color_key); |
7030 double dx = xorigin - x1; | 7030 int width = abs(x2-x1); |
7031 double dy = yorigin - y1; | 7031 float scale = fabs((float)(y2-y1))/(float)width; |
7032 double r = sqrt(dx*dx + dy*dy); | |
7033 double a1 = atan2((y1-yorigin), (x1-xorigin)); | |
7034 double a2 = atan2((y2-yorigin), (x2-xorigin)); | |
7035 int width = x2-x1; | |
7036 float scale = (float)(y2-y1)/(float)width; | |
7037 | 7032 |
7038 if(flags & DW_DRAW_NOAA) | 7033 if(flags & DW_DRAW_NOAA) |
7039 cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE); | 7034 cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE); |
7040 | 7035 |
7041 gdk_cairo_set_source_rgba(cr, foreground); | 7036 gdk_cairo_set_source_rgba(cr, foreground); |
7042 cairo_set_line_width(cr, 1); | 7037 cairo_set_line_width(cr, 1); |
7043 if(scale != 1.0) | 7038 if(scale != 1.0) |
7044 cairo_scale(cr, 1.0, scale); | 7039 cairo_scale(cr, 1.0, scale); |
7045 if(flags & DW_DRAW_FULL) | 7040 if(flags & DW_DRAW_FULL) |
7046 cairo_arc(cr, xorigin, yorigin / scale, (x2-x1)/2, 0, M_PI*2); | 7041 cairo_arc(cr, xorigin, yorigin / scale, width/2, 0, M_PI*2); |
7047 else | 7042 else |
7043 { | |
7044 double dx = xorigin - x1; | |
7045 double dy = yorigin - y1; | |
7046 double r = sqrt(dx*dx + dy*dy); | |
7047 double a1 = atan2((y1-yorigin), (x1-xorigin)); | |
7048 double a2 = atan2((y2-yorigin), (x2-xorigin)); | |
7049 | |
7048 cairo_arc(cr, xorigin, yorigin, r, a1, a2); | 7050 cairo_arc(cr, xorigin, yorigin, r, a1, a2); |
7051 } | |
7049 if(flags & DW_DRAW_FILL) | 7052 if(flags & DW_DRAW_FILL) |
7050 cairo_fill(cr); | 7053 cairo_fill(cr); |
7051 cairo_stroke(cr); | 7054 cairo_stroke(cr); |
7052 cairo_destroy(cr); | 7055 cairo_destroy(cr); |
7053 } | 7056 } |