]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Change plot routine to take a drawing_area as argument
authorDirk Hohndel <dirk@hohndel.org>
Tue, 4 Oct 2011 19:14:26 +0000 (12:14 -0700)
committerDirk Hohndel <dirk@hohndel.org>
Tue, 4 Oct 2011 19:14:26 +0000 (12:14 -0700)
Previously we passed in width and height and the routine itself decided to
keep 5% margin around each edge - oddly doing this with double precision,
even though this is all integer coordinates.

Instead we are now passing in a drawing_area. We are kind of abusing the
cairo_rectangle_int_t data type here - but it seemed silly to redefine a
new data type for this.
Width and height give the size of the TOTAL drawing area (as before).
x and y give the offset from the edges - so the EFFECTIVE drawing area is
width-2x and height-2y
This is in preparation for adding tooltips - those need to know the
coordinate offsets from the edges - so having this hard coded inside the
plot function didn't make sense anymore.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
display.h
gtk-gui.c
print.c
profile.c

index 9cd401a893da34928212b797110a146fe46107a5..c441a7dd2410c5401e083a686fb1a5aea495b6de 100644 (file)
--- a/display.h
+++ b/display.h
@@ -22,7 +22,7 @@ struct graphics_context {
        double topy, bottomy;
 };
 
-extern void plot(struct graphics_context *gc, int w, int h, struct dive *dive);
+extern void plot(struct graphics_context *gc, cairo_rectangle_int_t *drawing_area, struct dive *dive);
 extern void set_source_rgb(struct graphics_context *gc, double r, double g, double b);
 
 #endif
index ee3ad2ef11583109f80254007757833970e34fe5..a5728e2c8e5149e54d30c79cd95df02e40f6665e 100644 (file)
--- a/gtk-gui.c
+++ b/gtk-gui.c
@@ -674,18 +674,21 @@ static gboolean expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer
 {
        struct dive *dive = current_dive;
        struct graphics_context gc = { .printer = 0 };
-       int w,h;
+       static cairo_rectangle_int_t drawing_area;
 
-       w = widget->allocation.width;
-       h = widget->allocation.height;
+       /* the drawing area gives TOTAL width * height - x,y is used as the topx/topy offset
+        * so effective drawing area is width-2x * height-2y */
+       drawing_area.width = widget->allocation.width;
+       drawing_area.height = widget->allocation.height;
+       drawing_area.x = drawing_area.width / 20.0;
+       drawing_area.y = drawing_area.height / 20.0;
 
        gc.cr = gdk_cairo_create(widget->window);
        set_source_rgb(&gc, 0, 0, 0);
        cairo_paint(gc.cr);
 
        if (dive)
-               plot(&gc, w, h, dive);
-
+               plot(&gc, &drawing_area, dive);
        cairo_destroy(gc.cr);
 
        return FALSE;
diff --git a/print.c b/print.c
index 36ceca67e46a1456e3773ba83a40902826a60a48..bdebcfe15634fcf0bdda5fbe51e211ab42130495 100644 (file)
--- a/print.c
+++ b/print.c
@@ -127,12 +127,13 @@ static void show_dive_text(struct dive *dive, cairo_t *cr, double w, double h, P
 
 static void show_dive_profile(struct dive *dive, cairo_t *cr, double w, double h)
 {
+       cairo_rectangle_int_t drawing_area = { w/20.0, h/20.0, w, h};
        struct graphics_context gc = {
                .printer = 1,
                .cr = cr
        };
        cairo_save(cr);
-       plot(&gc, w, h, dive);
+       plot(&gc, &drawing_area, dive);
        cairo_restore(cr);
 }
 
index ca383a53dc865e024a27334ecdeff89a38603f6f..6f19902026e48bef55fcfec7c14b6e16cb759ce9 100644 (file)
--- a/profile.c
+++ b/profile.c
@@ -722,14 +722,11 @@ static struct plot_info *create_plot_info(struct dive *dive)
        return analyze_plot_info(pi);
 }
 
-void plot(struct graphics_context *gc, int w, int h, struct dive *dive)
+void plot(struct graphics_context *gc, cairo_rectangle_int_t *drawing_area, struct dive *dive)
 {
-       double topx, topy;
        struct plot_info *pi = create_plot_info(dive);
 
-       topx = w / 20.0;
-       topy = h / 20.0;
-       cairo_translate(gc->cr, topx, topy);
+       cairo_translate(gc->cr, drawing_area->x, drawing_area->y);
        cairo_set_line_width(gc->cr, 2);
        cairo_set_line_cap(gc->cr, CAIRO_LINE_CAP_ROUND);
        cairo_set_line_join(gc->cr, CAIRO_LINE_JOIN_ROUND);
@@ -741,8 +738,8 @@ void plot(struct graphics_context *gc, int w, int h, struct dive *dive)
         *
         * Snif. What a pity.
         */
-       gc->maxx = (w - 2*topx);
-       gc->maxy = (h - 2*topy);
+       gc->maxx = (drawing_area->width - 2*drawing_area->x);
+       gc->maxy = (drawing_area->height - 2*drawing_area->y);
 
        /* Temperature profile */
        plot_temperature_profile(gc, pi);