From 3680d163650c1d79869952520aba2eae281da95e Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 14 Dec 2011 05:29:47 +0000 Subject: Draw directly to window cairo context instead of gdk pixmap. git-svn-id: http://svn.drobilla.net/lad/trunk/ganv@3875 a436a847-0d15-0410-975c-d299462d15a1 --- src/Canvas.cpp | 37 +++++++++---------------------------- 1 file changed, 9 insertions(+), 28 deletions(-) (limited to 'src/Canvas.cpp') diff --git a/src/Canvas.cpp b/src/Canvas.cpp index e901eaa..38cb4ad 100644 --- a/src/Canvas.cpp +++ b/src/Canvas.cpp @@ -131,15 +131,6 @@ struct GanvCanvasImpl { , _layout(GTK_LAYOUT(_gcanvas)) , _connect_port(NULL) , _last_selected_port(NULL) - , _base_rect(ganv_item_new( - GANV_ITEM(ganv_canvas_base_root(GANV_CANVAS_BASE(_gcanvas))), - ganv_box_get_type(), - "x1", 0.0, - "y1", 0.0, - "x2", 1.0, - "y2", 1.0, - "fill-color", 0x000000FF, - NULL)) , _select_rect(NULL) , _zoom(1.0) , _font_size(0.0) @@ -246,8 +237,7 @@ struct GanvCanvasImpl { GanvPort* _connect_port; ///< Port for which a edge is being made GanvPort* _last_selected_port; - GanvItem* _base_rect; ///< Background - GanvBox* _select_rect; ///< Rectangle for drag selection + GanvBox* _select_rect; ///< Rectangle for drag selection double _zoom; ///< Current zoom level double _font_size; ///< Current font size in points @@ -373,7 +363,7 @@ void GanvCanvasImpl::add_item(GanvNode* n) { GanvItem* item = GANV_ITEM(n); - if (item != _base_rect && item->parent == GANV_ITEM(root())) { + if (item->parent == GANV_ITEM(root())) { _items.insert(n); } } @@ -827,7 +817,7 @@ GanvCanvasImpl::scroll_drag_handler(GdkEvent* event) if (event->type == GDK_BUTTON_PRESS && event->button.button == 2) { ganv_item_grab( - GANV_ITEM(_base_rect), + GANV_ITEM(root()), GDK_POINTER_MOTION_MASK|GDK_BUTTON_RELEASE_MASK, NULL, event->button.time); ganv_canvas_base_get_scroll_offsets(GANV_CANVAS_BASE(_gcanvas), &original_scroll_x, &original_scroll_y); @@ -857,7 +847,7 @@ GanvCanvasImpl::scroll_drag_handler(GdkEvent* event) last_x = x; last_y = y; } else if (event->type == GDK_BUTTON_RELEASE && _drag_state == SCROLL) { - ganv_item_ungrab(GANV_ITEM(_base_rect), event->button.time); + ganv_item_ungrab(GANV_ITEM(root()), event->button.time); _drag_state = NOT_DRAGGING; } else { handled = false; @@ -902,9 +892,8 @@ GanvCanvasImpl::select_drag_handler(GdkEvent* event) "border-color", SELECT_RECT_BORDER_COLOUR, NULL)); ganv_item_lower_to_bottom(GANV_ITEM(_select_rect)); - ganv_item_lower_to_bottom(GANV_ITEM(_base_rect)); ganv_item_grab( - GANV_ITEM(_base_rect), GDK_POINTER_MOTION_MASK|GDK_BUTTON_RELEASE_MASK, + GANV_ITEM(root()), GDK_POINTER_MOTION_MASK|GDK_BUTTON_RELEASE_MASK, NULL, event->button.time); return true; } else if (event->type == GDK_MOTION_NOTIFY && _drag_state == SELECT) { @@ -951,7 +940,7 @@ GanvCanvasImpl::select_drag_handler(GdkEvent* event) } } - ganv_item_ungrab(GANV_ITEM(_base_rect), event->button.time); + ganv_item_ungrab(GANV_ITEM(root()), event->button.time); gtk_object_destroy(GTK_OBJECT(_select_rect)); _select_rect = NULL; @@ -975,7 +964,6 @@ GanvCanvasImpl::connect_drag_handler(GdkEvent* event) if (event->type == GDK_MOTION_NOTIFY) { double x, y; get_motion_coords(&event->motion, &x, &y); - ganv_item_i2w(GANV_ITEM(_base_rect), &x, &y); if (!drag_edge) { // Create drag edge @@ -1023,11 +1011,10 @@ GanvCanvasImpl::connect_drag_handler(GdkEvent* event) return true; } else if (event->type == GDK_BUTTON_RELEASE) { - ganv_item_ungrab(GANV_ITEM(_base_rect), event->button.time); + ganv_item_ungrab(GANV_ITEM(root()), event->button.time); double x = event->button.x; double y = event->button.y; - ganv_item_i2w(GANV_ITEM(_base_rect), &x, &y); GanvNode* joinee = get_node_at(x, y); @@ -1175,7 +1162,7 @@ GanvCanvasImpl::port_event(GdkEvent* event, GanvPort* port) _connect_port = port; port_dragging = false; ganv_item_grab( - GANV_ITEM(_base_rect), + GANV_ITEM(root()), GDK_BUTTON_PRESS_MASK|GDK_POINTER_MOTION_MASK|GDK_BUTTON_RELEASE_MASK, NULL, event->crossing.time); return true; @@ -1329,8 +1316,6 @@ void GanvCanvasImpl::resize(double width, double height) { if (width != _gcanvas->width || height != _gcanvas->height) { - ganv_box_set_width(GANV_BOX(_base_rect), width); - ganv_box_set_height(GANV_BOX(_base_rect), height); _gcanvas->width = width; _gcanvas->height = height; ganv_canvas_base_set_scroll_region(GANV_CANVAS_BASE(_gcanvas), @@ -1771,12 +1756,8 @@ ganv_canvas_set_property(GObject* object, case PROP_LOCKED: { const gboolean tmp = g_value_get_boolean(value); if (canvas->locked != tmp) { - GanvItem* base = GANV_ITEM(canvas->impl->_base_rect); - ganv_item_set(base, - "fill-color", tmp ? 0x131415FF : 0x000000FF, - NULL); + // TODO: change background color canvas->locked = tmp; - ganv_item_request_update(base); } break; } -- cgit v1.2.1