From 3b63d9fa3114f0292561484f299d9d45ec451c17 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 15 Mar 2014 22:35:18 +0000 Subject: Clean up public canvas interface. Eliminate thin C wrappers around C++ methods (move actual implementation into C). git-svn-id: http://svn.drobilla.net/lad/trunk/ganv@5338 a436a847-0d15-0410-975c-d299462d15a1 --- src/widget.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'src/widget.c') diff --git a/src/widget.c b/src/widget.c index 63c1dfd..1442237 100644 --- a/src/widget.c +++ b/src/widget.c @@ -25,6 +25,7 @@ #include "ganv/widget.h" #include "./gettext.h" +#include "./ganv-private.h" G_DEFINE_TYPE(GanvWidget, ganv_widget, GANV_TYPE_ITEM) @@ -130,10 +131,12 @@ recalc_bounds(GanvWidget* witem) item->x2 = witem->cx + witem->cwidth; item->y2 = witem->cy + witem->cheight; + int zoom_xofs, zoom_yofs; + ganv_canvas_get_zoom_offsets(item->canvas, &zoom_xofs, &zoom_yofs); if (witem->widget) { gtk_layout_move(GTK_LAYOUT(item->canvas), witem->widget, - witem->cx + item->canvas->zoom_xofs, - witem->cy + item->canvas->zoom_yofs); + witem->cx + zoom_xofs, + witem->cy + zoom_yofs); } } @@ -171,9 +174,12 @@ ganv_widget_set_property(GObject* object, witem->destroy_id = g_signal_connect(obj, "destroy", G_CALLBACK(do_destroy), witem); + int zoom_xofs, zoom_yofs; + ganv_canvas_get_zoom_offsets(item->canvas, &zoom_xofs, &zoom_yofs); + gtk_layout_put(GTK_LAYOUT(item->canvas), witem->widget, - witem->cx + item->canvas->zoom_xofs, - witem->cy + item->canvas->zoom_yofs); + witem->cx + zoom_xofs, + witem->cy + zoom_yofs); } update = TRUE; @@ -291,12 +297,13 @@ ganv_widget_update(GanvItem* item, int flags) } if (witem->widget) { + const double pixels_per_unit = ganv_canvas_get_zoom(item->canvas); if (witem->size_pixels) { witem->cwidth = (int)(witem->width + 0.5); witem->cheight = (int)(witem->height + 0.5); } else { - witem->cwidth = (int)(witem->width * item->canvas->pixels_per_unit + 0.5); - witem->cheight = (int)(witem->height * item->canvas->pixels_per_unit + 0.5); + witem->cwidth = (int)(witem->width * pixels_per_unit + 0.5); + witem->cheight = (int)(witem->height * pixels_per_unit + 0.5); } gtk_widget_set_size_request(witem->widget, witem->cwidth, witem->cheight); @@ -332,8 +339,10 @@ ganv_widget_point(GanvItem* item, double x, double y, double x1, y1; ganv_canvas_c2w(item->canvas, witem->cx, witem->cy, &x1, &y1); - double x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit; - double y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit; + const double pixels_per_unit = ganv_canvas_get_zoom(item->canvas); + + double x2 = x1 + (witem->cwidth - 1) / pixels_per_unit; + double y2 = y1 + (witem->cheight - 1) / pixels_per_unit; /* Is point inside widget bounds? */ -- cgit v1.2.1