From e07b688a3b8ec257a14087b696b3a02090f289ab Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Fri, 11 Jun 2010 13:09:11 +0200 Subject: [PATCH 019/249] [eel] GSEAL eel-canvas. --- eel/eel-canvas.c | 273 ++++++++++++++++++++++++++++++------------------------ eel/eel-canvas.h | 3 + 2 files changed, 155 insertions(+), 121 deletions(-) diff --git a/eel/eel-canvas.c b/eel/eel-canvas.c index 3778b68..0bdf451 100644 --- a/eel/eel-canvas.c +++ b/eel/eel-canvas.c @@ -148,7 +148,7 @@ eel_canvas_item_get_type (void) static void eel_canvas_item_init (EelCanvasItem *item) { - item->object.flags |= EEL_CANVAS_ITEM_VISIBLE; + item->flags |= EEL_CANVAS_ITEM_VISIBLE; } /** @@ -246,7 +246,7 @@ eel_canvas_item_get_property (GObject *gobject, guint param_id, switch (param_id) { case ITEM_PROP_VISIBLE: - g_value_set_boolean (value, item->object.flags & EEL_CANVAS_ITEM_VISIBLE); + g_value_set_boolean (value, item->flags & EEL_CANVAS_ITEM_VISIBLE); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, param_id, pspec); @@ -282,7 +282,7 @@ eel_canvas_item_construct (EelCanvasItem *item, EelCanvasGroup *parent, static void redraw_and_repick_if_mapped (EelCanvasItem *item) { - if (item->object.flags & EEL_CANVAS_ITEM_MAPPED) { + if (item->flags & EEL_CANVAS_ITEM_MAPPED) { eel_canvas_item_request_redraw (item); item->canvas->need_repick = TRUE; } @@ -324,10 +324,10 @@ eel_canvas_item_dispose (GObject *object) /* Normal destroy stuff */ - if (item->object.flags & EEL_CANVAS_ITEM_MAPPED) + if (item->flags & EEL_CANVAS_ITEM_MAPPED) (* EEL_CANVAS_ITEM_GET_CLASS (item)->unmap) (item); - if (item->object.flags & EEL_CANVAS_ITEM_REALIZED) + if (item->flags & EEL_CANVAS_ITEM_REALIZED) (* EEL_CANVAS_ITEM_GET_CLASS (item)->unrealize) (item); if (item->parent) @@ -344,13 +344,13 @@ eel_canvas_item_dispose (GObject *object) static void eel_canvas_item_realize (EelCanvasItem *item) { - if (item->parent && !(item->parent->object.flags & EEL_CANVAS_ITEM_REALIZED)) + if (item->parent && !(item->parent->flags & EEL_CANVAS_ITEM_REALIZED)) (* EEL_CANVAS_ITEM_GET_CLASS (item->parent)->realize) (item->parent); if (item->parent == NULL && !gtk_widget_get_realized (GTK_WIDGET (item->canvas))) gtk_widget_realize (GTK_WIDGET (item->canvas)); - - GTK_OBJECT_SET_FLAGS (item, EEL_CANVAS_ITEM_REALIZED); + + item->flags |= EEL_CANVAS_ITEM_REALIZED; eel_canvas_item_request_update (item); } @@ -359,32 +359,32 @@ eel_canvas_item_realize (EelCanvasItem *item) static void eel_canvas_item_unrealize (EelCanvasItem *item) { - if (item->object.flags & EEL_CANVAS_ITEM_MAPPED) + if (item->flags & EEL_CANVAS_ITEM_MAPPED) (* EEL_CANVAS_ITEM_GET_CLASS (item)->unmap) (item); - - GTK_OBJECT_UNSET_FLAGS (item, EEL_CANVAS_ITEM_REALIZED); + + item->flags &= ~(EEL_CANVAS_ITEM_REALIZED); } /* Map handler for canvas items */ static void eel_canvas_item_map (EelCanvasItem *item) { - GTK_OBJECT_SET_FLAGS (item, EEL_CANVAS_ITEM_MAPPED); + item->flags |= EEL_CANVAS_ITEM_MAPPED; } /* Unmap handler for canvas items */ static void eel_canvas_item_unmap (EelCanvasItem *item) { - GTK_OBJECT_UNSET_FLAGS (item, EEL_CANVAS_ITEM_MAPPED); + item->flags &= ~(EEL_CANVAS_ITEM_MAPPED); } /* Update handler for canvas items */ static void eel_canvas_item_update (EelCanvasItem *item, double i2w_dx, double i2w_dy, int flags) { - GTK_OBJECT_UNSET_FLAGS (item, EEL_CANVAS_ITEM_NEED_UPDATE); - GTK_OBJECT_UNSET_FLAGS (item, EEL_CANVAS_ITEM_NEED_DEEP_UPDATE); + item->flags &= ~(EEL_CANVAS_ITEM_NEED_UPDATE); + item->flags &= ~(EEL_CANVAS_ITEM_NEED_DEEP_UPDATE); } /* @@ -413,10 +413,10 @@ eel_canvas_item_invoke_update (EelCanvasItem *item, /* apply object flags to child flags */ child_flags &= ~EEL_CANVAS_UPDATE_REQUESTED; - if (item->object.flags & EEL_CANVAS_ITEM_NEED_UPDATE) + if (item->flags & EEL_CANVAS_ITEM_NEED_UPDATE) child_flags |= EEL_CANVAS_UPDATE_REQUESTED; - if (item->object.flags & EEL_CANVAS_ITEM_NEED_DEEP_UPDATE) + if (item->flags & EEL_CANVAS_ITEM_NEED_DEEP_UPDATE) child_flags |= EEL_CANVAS_UPDATE_DEEP; if (child_flags & GCI_UPDATE_MASK) { @@ -426,7 +426,7 @@ eel_canvas_item_invoke_update (EelCanvasItem *item, /* If this fail you probably forgot to chain up to * EelCanvasItem::update from a derived class */ - g_return_if_fail (!(item->object.flags & EEL_CANVAS_ITEM_NEED_UPDATE)); + g_return_if_fail (!(item->flags & EEL_CANVAS_ITEM_NEED_UPDATE)); } /* @@ -515,11 +515,11 @@ eel_canvas_item_move (EelCanvasItem *item, double dx, double dy) (* EEL_CANVAS_ITEM_GET_CLASS (item)->translate) (item, dx, dy); - if (item->object.flags & EEL_CANVAS_ITEM_MAPPED) + if (item->flags & EEL_CANVAS_ITEM_MAPPED) item->canvas->need_repick = TRUE; - if (!(item->object.flags & EEL_CANVAS_ITEM_NEED_DEEP_UPDATE)) { - item->object.flags |= EEL_CANVAS_ITEM_NEED_DEEP_UPDATE; + if (!(item->flags & EEL_CANVAS_ITEM_NEED_DEEP_UPDATE)) { + item->flags |= EEL_CANVAS_ITEM_NEED_DEEP_UPDATE; if (item->parent != NULL) eel_canvas_item_request_update (item->parent); else @@ -767,18 +767,18 @@ eel_canvas_item_show (EelCanvasItem *item) { g_return_if_fail (EEL_IS_CANVAS_ITEM (item)); - if (!(item->object.flags & EEL_CANVAS_ITEM_VISIBLE)) { - item->object.flags |= EEL_CANVAS_ITEM_VISIBLE; + if (!(item->flags & EEL_CANVAS_ITEM_VISIBLE)) { + item->flags |= EEL_CANVAS_ITEM_VISIBLE; - if (!(item->object.flags & EEL_CANVAS_ITEM_REALIZED)) + if (!(item->flags & EEL_CANVAS_ITEM_REALIZED)) (* EEL_CANVAS_ITEM_GET_CLASS (item)->realize) (item); if (item->parent != NULL) { - if (!(item->object.flags & EEL_CANVAS_ITEM_MAPPED) && - item->parent->object.flags & EEL_CANVAS_ITEM_MAPPED) + if (!(item->flags & EEL_CANVAS_ITEM_MAPPED) && + item->parent->flags & EEL_CANVAS_ITEM_MAPPED) (* EEL_CANVAS_ITEM_GET_CLASS (item)->map) (item); } else { - if (!(item->object.flags & EEL_CANVAS_ITEM_MAPPED) && + if (!(item->flags & EEL_CANVAS_ITEM_MAPPED) && gtk_widget_get_mapped (GTK_WIDGET (item->canvas))) (* EEL_CANVAS_ITEM_GET_CLASS (item)->map) (item); } @@ -800,12 +800,12 @@ eel_canvas_item_hide (EelCanvasItem *item) { g_return_if_fail (EEL_IS_CANVAS_ITEM (item)); - if (item->object.flags & EEL_CANVAS_ITEM_VISIBLE) { - item->object.flags &= ~EEL_CANVAS_ITEM_VISIBLE; + if (item->flags & EEL_CANVAS_ITEM_VISIBLE) { + item->flags &= ~EEL_CANVAS_ITEM_VISIBLE; redraw_and_repick_if_mapped (item); - if (item->object.flags & EEL_CANVAS_ITEM_MAPPED) + if (item->flags & EEL_CANVAS_ITEM_MAPPED) (* EEL_CANVAS_ITEM_GET_CLASS (item)->unmap) (item); /* No need to unrealize when we just want to hide */ @@ -843,10 +843,10 @@ eel_canvas_item_grab (EelCanvasItem *item, guint event_mask, GdkCursor *cursor, if (item->canvas->grabbed_item) return GDK_GRAB_ALREADY_GRABBED; - if (!(item->object.flags & EEL_CANVAS_ITEM_MAPPED)) + if (!(item->flags & EEL_CANVAS_ITEM_MAPPED)) return GDK_GRAB_NOT_VIEWABLE; - retval = gdk_pointer_grab (item->canvas->layout.bin_window, + retval = gdk_pointer_grab (gtk_layout_get_bin_window (&item->canvas->layout), FALSE, event_mask, NULL, @@ -1016,7 +1016,7 @@ eel_canvas_item_grab_focus (EelCanvasItem *item) if (focused_item) { ev.focus_change.type = GDK_FOCUS_CHANGE; - ev.focus_change.window = GTK_LAYOUT (item->canvas)->bin_window; + ev.focus_change.window = gtk_layout_get_bin_window (GTK_LAYOUT (item->canvas)); ev.focus_change.send_event = FALSE; ev.focus_change.in = FALSE; @@ -1028,7 +1028,7 @@ eel_canvas_item_grab_focus (EelCanvasItem *item) if (focused_item) { ev.focus_change.type = GDK_FOCUS_CHANGE; - ev.focus_change.window = GTK_LAYOUT (item->canvas)->bin_window; + ev.focus_change.window = gtk_layout_get_bin_window (GTK_LAYOUT (item->canvas)); ev.focus_change.send_event = FALSE; ev.focus_change.in = TRUE; @@ -1093,10 +1093,10 @@ eel_canvas_item_request_update (EelCanvasItem *item) g_return_if_fail (!item->canvas->doing_update); - if (item->object.flags & EEL_CANVAS_ITEM_NEED_UPDATE) + if (item->flags & EEL_CANVAS_ITEM_NEED_UPDATE) return; - item->object.flags |= EEL_CANVAS_ITEM_NEED_UPDATE; + item->flags |= EEL_CANVAS_ITEM_NEED_UPDATE; if (item->parent != NULL) { /* Recurse up the tree */ @@ -1117,7 +1117,7 @@ eel_canvas_item_request_update (EelCanvasItem *item) void eel_canvas_item_request_redraw (EelCanvasItem *item) { - if (item->object.flags & EEL_CANVAS_ITEM_MAPPED) + if (item->flags & EEL_CANVAS_ITEM_MAPPED) eel_canvas_request_redraw (item->canvas, item->x1, item->y1, item->x2 + 1, item->y2 + 1); @@ -1294,7 +1294,7 @@ eel_canvas_group_set_property (GObject *gobject, guint param_id, } if (moved) { - item->object.flags |= EEL_CANVAS_ITEM_NEED_DEEP_UPDATE; + item->flags |= EEL_CANVAS_ITEM_NEED_DEEP_UPDATE; if (item->parent != NULL) eel_canvas_item_request_update (item->parent); else @@ -1408,13 +1408,13 @@ eel_canvas_group_unrealize (EelCanvasItem *item) group = EEL_CANVAS_GROUP (item); /* Unmap group before children to avoid flash */ - if (item->object.flags & EEL_CANVAS_ITEM_MAPPED) + if (item->flags & EEL_CANVAS_ITEM_MAPPED) (* EEL_CANVAS_ITEM_GET_CLASS (item)->unmap) (item); for (list = group->item_list; list; list = list->next) { i = list->data; - if (i->object.flags & EEL_CANVAS_ITEM_REALIZED) + if (i->flags & EEL_CANVAS_ITEM_REALIZED) (* EEL_CANVAS_ITEM_GET_CLASS (i)->unrealize) (i); } @@ -1434,9 +1434,9 @@ eel_canvas_group_map (EelCanvasItem *item) for (list = group->item_list; list; list = list->next) { i = list->data; - if (i->object.flags & EEL_CANVAS_ITEM_VISIBLE && - !(i->object.flags & EEL_CANVAS_ITEM_MAPPED)) { - if (!(i->object.flags & EEL_CANVAS_ITEM_REALIZED)) + if (i->flags & EEL_CANVAS_ITEM_VISIBLE && + !(i->flags & EEL_CANVAS_ITEM_MAPPED)) { + if (!(i->flags & EEL_CANVAS_ITEM_REALIZED)) (* EEL_CANVAS_ITEM_GET_CLASS (i)->realize) (i); (* EEL_CANVAS_ITEM_GET_CLASS (i)->map) (i); @@ -1459,7 +1459,7 @@ eel_canvas_group_unmap (EelCanvasItem *item) for (list = group->item_list; list; list = list->next) { i = list->data; - if (i->object.flags & EEL_CANVAS_ITEM_MAPPED) + if (i->flags & EEL_CANVAS_ITEM_MAPPED) (* EEL_CANVAS_ITEM_GET_CLASS (i)->unmap) (i); } @@ -1480,7 +1480,7 @@ eel_canvas_group_draw (EelCanvasItem *item, GdkDrawable *drawable, for (list = group->item_list; list; list = list->next) { child = list->data; - if ((child->object.flags & EEL_CANVAS_ITEM_MAPPED) && + if ((child->flags & EEL_CANVAS_ITEM_MAPPED) && (EEL_CANVAS_ITEM_GET_CLASS (child)->draw)) { GdkRectangle child_rect; @@ -1531,7 +1531,7 @@ eel_canvas_group_point (EelCanvasItem *item, double x, double y, int cx, int cy, point_item = NULL; /* cater for incomplete item implementations */ - if ((child->object.flags & EEL_CANVAS_ITEM_MAPPED) + if ((child->flags & EEL_CANVAS_ITEM_MAPPED) && EEL_CANVAS_ITEM_GET_CLASS (child)->point) { dist = eel_canvas_item_invoke_point (child, gx, gy, cx, cy, &point_item); has_point = TRUE; @@ -1583,7 +1583,7 @@ eel_canvas_group_bounds (EelCanvasItem *item, double *x1, double *y1, double *x2 for (list = group->item_list; list; list = list->next) { child = list->data; - if (child->object.flags & EEL_CANVAS_ITEM_MAPPED) { + if (child->flags & EEL_CANVAS_ITEM_MAPPED) { set = TRUE; eel_canvas_item_get_bounds (child, &minx, &miny, &maxx, &maxy); break; @@ -1604,7 +1604,7 @@ eel_canvas_group_bounds (EelCanvasItem *item, double *x1, double *y1, double *x2 for (; list; list = list->next) { child = list->data; - if (!(child->object.flags & EEL_CANVAS_ITEM_MAPPED)) + if (!(child->flags & EEL_CANVAS_ITEM_MAPPED)) continue; eel_canvas_item_get_bounds (child, &tx1, &ty1, &tx2, &ty2); @@ -1654,12 +1654,12 @@ group_add (EelCanvasGroup *group, EelCanvasItem *item) } else group->item_list_end = g_list_append (group->item_list_end, item)->next; - if (item->object.flags & EEL_CANVAS_ITEM_VISIBLE && - group->item.object.flags & EEL_CANVAS_ITEM_MAPPED) { - if (!(item->object.flags & EEL_CANVAS_ITEM_REALIZED)) + if (item->flags & EEL_CANVAS_ITEM_VISIBLE && + group->item.flags & EEL_CANVAS_ITEM_MAPPED) { + if (!(item->flags & EEL_CANVAS_ITEM_REALIZED)) (* EEL_CANVAS_ITEM_GET_CLASS (item)->realize) (item); - if (!(item->object.flags & EEL_CANVAS_ITEM_MAPPED)) + if (!(item->flags & EEL_CANVAS_ITEM_MAPPED)) (* EEL_CANVAS_ITEM_GET_CLASS (item)->map) (item); } } @@ -1675,10 +1675,10 @@ group_remove (EelCanvasGroup *group, EelCanvasItem *item) for (children = group->item_list; children; children = children->next) if (children->data == item) { - if (item->object.flags & EEL_CANVAS_ITEM_MAPPED) + if (item->flags & EEL_CANVAS_ITEM_MAPPED) (* EEL_CANVAS_ITEM_GET_CLASS (item)->unmap) (item); - if (item->object.flags & EEL_CANVAS_ITEM_REALIZED) + if (item->flags & EEL_CANVAS_ITEM_REALIZED) (* EEL_CANVAS_ITEM_GET_CLASS (item)->unrealize) (item); /* Unparent the child */ @@ -1825,11 +1825,11 @@ eel_canvas_accessible_initialize (AtkObject *obj, ATK_OBJECT_CLASS (accessible_parent_class)->initialize (obj, data); canvas = EEL_CANVAS (data); - g_signal_connect (canvas->layout.hadjustment, + g_signal_connect (gtk_layout_get_hadjustment (&canvas->layout), "value_changed", G_CALLBACK (eel_canvas_accessible_adjustment_changed), obj); - g_signal_connect (canvas->layout.vadjustment, + g_signal_connect (gtk_layout_get_vadjustment (&canvas->layout), "value_changed", G_CALLBACK (eel_canvas_accessible_adjustment_changed), obj); @@ -1846,7 +1846,7 @@ eel_canvas_accessible_get_n_children (AtkObject* obj) EelCanvasGroup *root_group; accessible = GTK_ACCESSIBLE (obj); - widget = accessible->widget; + widget = gtk_accessible_get_widget (accessible); if (widget == NULL) { /* State is defunct */ return 0; @@ -1876,7 +1876,7 @@ eel_canvas_accessible_ref_child (AtkObject *obj, } accessible = GTK_ACCESSIBLE (obj); - widget = accessible->widget; + widget = gtk_accessible_get_widget (accessible); if (widget == NULL) { /* State is defunct */ return NULL; @@ -2072,14 +2072,17 @@ panic_root_destroyed (GtkObject *object, gpointer data) static void eel_canvas_init (EelCanvas *canvas) { - GTK_WIDGET_SET_FLAGS (canvas, GTK_CAN_FOCUS); + guint width, height; + gtk_widget_set_can_focus (GTK_WIDGET (canvas), TRUE); gtk_widget_set_redraw_on_allocate (GTK_WIDGET (canvas), FALSE); canvas->scroll_x1 = 0.0; canvas->scroll_y1 = 0.0; - canvas->scroll_x2 = canvas->layout.width; - canvas->scroll_y2 = canvas->layout.height; + gtk_layout_get_size (&canvas->layout, + &width, &height); + canvas->scroll_x2 = width; + canvas->scroll_y2 = height; canvas->pixels_per_unit = 1.0; @@ -2205,8 +2208,8 @@ eel_canvas_map (GtkWidget *widget) /* Map items */ - if (canvas->root->object.flags & EEL_CANVAS_ITEM_VISIBLE && - !(canvas->root->object.flags & EEL_CANVAS_ITEM_MAPPED) && + if (canvas->root->flags & EEL_CANVAS_ITEM_VISIBLE && + !(canvas->root->flags & EEL_CANVAS_ITEM_MAPPED) && EEL_CANVAS_ITEM_GET_CLASS (canvas->root)->map) (* EEL_CANVAS_ITEM_GET_CLASS (canvas->root)->map) (canvas->root); } @@ -2249,8 +2252,8 @@ eel_canvas_realize (GtkWidget *widget) canvas = EEL_CANVAS (widget); - gdk_window_set_events (canvas->layout.bin_window, - (gdk_window_get_events (canvas->layout.bin_window) + gdk_window_set_events (gtk_layout_get_bin_window (&canvas->layout), + (gdk_window_get_events (gtk_layout_get_bin_window (&canvas->layout)) | GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK @@ -2263,7 +2266,7 @@ eel_canvas_realize (GtkWidget *widget) /* Create our own temporary pixmap gc and realize all the items */ - canvas->pixmap_gc = gdk_gc_new (canvas->layout.bin_window); + canvas->pixmap_gc = gdk_gc_new (gtk_layout_get_bin_window (&canvas->layout)); (* EEL_CANVAS_ITEM_GET_CLASS (canvas->root)->realize) (canvas->root); } @@ -2302,9 +2305,13 @@ scroll_to (EelCanvas *canvas, int cx, int cy) int old_zoom_xofs, old_zoom_yofs; int changed_x = FALSE, changed_y = FALSE; int canvas_width, canvas_height; + GtkAllocation allocation; + GtkAdjustment *vadjustment, *hadjustment; + guint width, height; - canvas_width = GTK_WIDGET (canvas)->allocation.width; - canvas_height = GTK_WIDGET (canvas)->allocation.height; + gtk_widget_get_allocation (GTK_WIDGET (canvas), &allocation); + canvas_width = allocation.width; + canvas_height = allocation.height; scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit + 0.5); scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit + 0.5); @@ -2353,32 +2360,36 @@ scroll_to (EelCanvas *canvas, int cx, int cy) /* This can only occur, if either canvas size or widget size changes */ /* So I think we can request full redraw here */ /* More stuff - we have to mark root as needing fresh affine (Lauris) */ - if (!(canvas->root->object.flags & EEL_CANVAS_ITEM_NEED_DEEP_UPDATE)) { - canvas->root->object.flags |= EEL_CANVAS_ITEM_NEED_DEEP_UPDATE; + if (!(canvas->root->flags & EEL_CANVAS_ITEM_NEED_DEEP_UPDATE)) { + canvas->root->flags |= EEL_CANVAS_ITEM_NEED_DEEP_UPDATE; eel_canvas_request_update (canvas); } gtk_widget_queue_draw (GTK_WIDGET (canvas)); } - if (((int) canvas->layout.hadjustment->value) != cx) { - canvas->layout.hadjustment->value = cx; + hadjustment = gtk_layout_get_hadjustment (&canvas->layout); + vadjustment = gtk_layout_get_vadjustment (&canvas->layout); + + if (((int) gtk_adjustment_get_value (hadjustment)) != cx) { + gtk_adjustment_set_value (hadjustment, cx); changed_x = TRUE; } - if (((int) canvas->layout.vadjustment->value) != cy) { - canvas->layout.vadjustment->value = cy; + if (((int) gtk_adjustment_get_value (vadjustment)) != cy) { + gtk_adjustment_set_value (vadjustment, cy); changed_y = TRUE; } - if ((scroll_width != (int) canvas->layout.width) || (scroll_height != (int) canvas->layout.height)) { + gtk_layout_get_size (&canvas->layout, &width, &height); + if ((scroll_width != (int) width )|| (scroll_height != (int) height)) { gtk_layout_set_size (GTK_LAYOUT (canvas), scroll_width, scroll_height); } /* Signal GtkLayout that it should do a redraw. */ if (changed_x) - g_signal_emit_by_name (G_OBJECT (canvas->layout.hadjustment), "value_changed"); + g_signal_emit_by_name (hadjustment, "value_changed"); if (changed_y) - g_signal_emit_by_name (G_OBJECT (canvas->layout.vadjustment), "value_changed"); + g_signal_emit_by_name (vadjustment, "value_changed"); } /* Size allocation handler for the canvas */ @@ -2386,6 +2397,7 @@ static void eel_canvas_size_allocate (GtkWidget *widget, GtkAllocation *allocation) { EelCanvas *canvas; + GtkAdjustment *vadjustment, *hadjustment; g_return_if_fail (EEL_IS_CANVAS (widget)); g_return_if_fail (allocation != NULL); @@ -2397,18 +2409,21 @@ eel_canvas_size_allocate (GtkWidget *widget, GtkAllocation *allocation) /* Recenter the view, if appropriate */ - canvas->layout.hadjustment->page_size = allocation->width; - canvas->layout.hadjustment->page_increment = allocation->width / 2; + hadjustment = gtk_layout_get_hadjustment (&canvas->layout); + vadjustment = gtk_layout_get_vadjustment (&canvas->layout); + + gtk_adjustment_set_page_size (hadjustment, allocation->width); + gtk_adjustment_set_page_increment (hadjustment, allocation->width / 2); - canvas->layout.vadjustment->page_size = allocation->height; - canvas->layout.vadjustment->page_increment = allocation->height / 2; + gtk_adjustment_set_page_size (vadjustment, allocation->height); + gtk_adjustment_set_page_increment (vadjustment, allocation->height / 2); scroll_to (canvas, - canvas->layout.hadjustment->value, - canvas->layout.vadjustment->value); + gtk_adjustment_get_value (hadjustment), + gtk_adjustment_get_value (vadjustment)); - g_signal_emit_by_name (G_OBJECT (canvas->layout.hadjustment), "changed"); - g_signal_emit_by_name (G_OBJECT (canvas->layout.vadjustment), "changed"); + g_signal_emit_by_name (hadjustment, "changed"); + g_signal_emit_by_name (vadjustment, "changed"); } /* Emits an event for an item in the canvas, be it the current item, grabbed @@ -2634,7 +2649,7 @@ pick_current_item (EelCanvas *canvas, GdkEvent *event) eel_canvas_c2w (canvas, cx, cy, &x, &y); /* find the closest item */ - if (canvas->root->object.flags & EEL_CANVAS_ITEM_MAPPED) + if (canvas->root->flags & EEL_CANVAS_ITEM_MAPPED) eel_canvas_item_invoke_point (canvas->root, x, y, cx, cy, &canvas->new_current_item); else @@ -2709,7 +2724,7 @@ eel_canvas_button (GtkWidget *widget, GdkEventButton *event) * dispatch normally regardless of the event's window if an item has * has a pointer grab in effect */ - if (!canvas->grabbed_item && event->window != canvas->layout.bin_window) + if (!canvas->grabbed_item && event->window != gtk_layout_get_bin_window (&canvas->layout)) return retval; switch (event->button) { @@ -2775,7 +2790,7 @@ eel_canvas_motion (GtkWidget *widget, GdkEventMotion *event) canvas = EEL_CANVAS (widget); - if (event->window != canvas->layout.bin_window) + if (event->window != gtk_layout_get_bin_window (&canvas->layout)) return FALSE; canvas->state = event->state; @@ -2814,7 +2829,7 @@ eel_canvas_crossing (GtkWidget *widget, GdkEventCrossing *event) canvas = EEL_CANVAS (widget); - if (event->window != canvas->layout.bin_window) + if (event->window != gtk_layout_get_bin_window (&canvas->layout)) return FALSE; canvas->state = event->state; @@ -2827,8 +2842,6 @@ eel_canvas_focus_in (GtkWidget *widget, GdkEventFocus *event) { EelCanvas *canvas; - GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS); - canvas = EEL_CANVAS (widget); if (canvas->focused_item) @@ -2843,8 +2856,6 @@ eel_canvas_focus_out (GtkWidget *widget, GdkEventFocus *event) { EelCanvas *canvas; - GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS); - canvas = EEL_CANVAS (widget); if (canvas->focused_item) @@ -2861,7 +2872,7 @@ eel_canvas_expose (GtkWidget *widget, GdkEventExpose *event) canvas = EEL_CANVAS (widget); - if (!gtk_widget_is_drawable (widget) || (event->window != canvas->layout.bin_window)) return FALSE; + if (!gtk_widget_is_drawable (widget) || (event->window != gtk_layout_get_bin_window (&canvas->layout))) return FALSE; #ifdef VERBOSE g_print ("Expose\n"); @@ -2892,9 +2903,9 @@ eel_canvas_expose (GtkWidget *widget, GdkEventExpose *event) event->area.x, event->area.y, event->area.width, event->area.height); - if (canvas->root->object.flags & EEL_CANVAS_ITEM_MAPPED) + if (canvas->root->flags & EEL_CANVAS_ITEM_MAPPED) (* EEL_CANVAS_ITEM_GET_CLASS (canvas->root)->draw) (canvas->root, - canvas->layout.bin_window, + gtk_layout_get_bin_window (&canvas->layout), event); @@ -2911,8 +2922,8 @@ eel_canvas_draw_background (EelCanvas *canvas, { /* By default, we use the style background. */ gdk_gc_set_foreground (canvas->pixmap_gc, - >K_WIDGET (canvas)->style->bg[GTK_STATE_NORMAL]); - gdk_draw_rectangle (canvas->layout.bin_window, + >k_widget_get_style (GTK_WIDGET (canvas))->bg[GTK_STATE_NORMAL]); + gdk_draw_rectangle (gtk_layout_get_bin_window (&canvas->layout), canvas->pixmap_gc, TRUE, x, y, @@ -3023,6 +3034,7 @@ eel_canvas_set_scroll_region (EelCanvas *canvas, double x1, double y1, double x2 { double wxofs, wyofs; int xofs, yofs; + GtkAdjustment *vadjustment, *hadjustment; g_return_if_fail (EEL_IS_CANVAS (canvas)); @@ -3035,10 +3047,12 @@ eel_canvas_set_scroll_region (EelCanvas *canvas, double x1, double y1, double x2 * Set the new scrolling region. If possible, do not move the visible contents of the * canvas. */ + hadjustment = gtk_layout_get_hadjustment (GTK_LAYOUT (canvas)); + vadjustment = gtk_layout_get_vadjustment (GTK_LAYOUT (canvas)); eel_canvas_c2w (canvas, - GTK_LAYOUT (canvas)->hadjustment->value + canvas->zoom_xofs, - GTK_LAYOUT (canvas)->vadjustment->value + canvas->zoom_yofs, + gtk_adjustment_get_value (hadjustment) + canvas->zoom_xofs, + gtk_adjustment_get_value (vadjustment) + canvas->zoom_yofs, /*canvas->zoom_xofs, canvas->zoom_yofs,*/ &wxofs, &wyofs); @@ -3054,8 +3068,8 @@ eel_canvas_set_scroll_region (EelCanvas *canvas, double x1, double y1, double x2 canvas->need_repick = TRUE; - if (!(canvas->root->object.flags & EEL_CANVAS_ITEM_NEED_DEEP_UPDATE)) { - canvas->root->object.flags |= EEL_CANVAS_ITEM_NEED_DEEP_UPDATE; + if (!(canvas->root->flags & EEL_CANVAS_ITEM_NEED_DEEP_UPDATE)) { + canvas->root->flags |= EEL_CANVAS_ITEM_NEED_DEEP_UPDATE; eel_canvas_request_update (canvas); } } @@ -3093,13 +3107,18 @@ void eel_canvas_set_center_scroll_region (EelCanvas *canvas, gboolean center_scroll_region) { + GtkAdjustment *vadjustment, *hadjustment; + g_return_if_fail (EEL_IS_CANVAS (canvas)); canvas->center_scroll_region = center_scroll_region != 0; + hadjustment = gtk_layout_get_hadjustment (&canvas->layout); + vadjustment = gtk_layout_get_vadjustment (&canvas->layout); + scroll_to (canvas, - canvas->layout.hadjustment->value, - canvas->layout.vadjustment->value); + gtk_adjustment_get_value (hadjustment), + gtk_adjustment_get_value (vadjustment)); } @@ -3121,18 +3140,23 @@ eel_canvas_set_pixels_per_unit (EelCanvas *canvas, double n) GdkWindow *window; GdkWindowAttr attributes; gint attributes_mask; + GtkAllocation allocation; + GtkAdjustment *vadjustment, *hadjustment; g_return_if_fail (EEL_IS_CANVAS (canvas)); g_return_if_fail (n > EEL_CANVAS_EPSILON); widget = GTK_WIDGET (canvas); - center_x = widget->allocation.width / 2; - center_y = widget->allocation.height / 2; + gtk_widget_get_allocation (widget, &allocation); + center_x = allocation.width / 2; + center_y = allocation.height / 2; /* Find the coordinates of the screen center in units. */ - cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit + canvas->scroll_x1 + canvas->zoom_xofs; - cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit + canvas->scroll_y1 + canvas->zoom_yofs; + hadjustment = gtk_layout_get_hadjustment (&canvas->layout); + vadjustment = gtk_layout_get_vadjustment (&canvas->layout); + cx = (gtk_adjustment_get_value (hadjustment) + center_x) / canvas->pixels_per_unit + canvas->scroll_x1 + canvas->zoom_xofs; + cy = (gtk_adjustment_get_value (vadjustment) + center_y) / canvas->pixels_per_unit + canvas->scroll_y1 + canvas->zoom_yofs; /* Now calculate the new offset of the upper left corner. (round not truncate) */ x1 = ((cx - canvas->scroll_x1) * n) - center_x + .5; @@ -3140,8 +3164,8 @@ eel_canvas_set_pixels_per_unit (EelCanvas *canvas, double n) canvas->pixels_per_unit = n; - if (!(canvas->root->object.flags & EEL_CANVAS_ITEM_NEED_DEEP_UPDATE)) { - canvas->root->object.flags |= EEL_CANVAS_ITEM_NEED_DEEP_UPDATE; + if (!(canvas->root->flags & EEL_CANVAS_ITEM_NEED_DEEP_UPDATE)) { + canvas->root->flags |= EEL_CANVAS_ITEM_NEED_DEEP_UPDATE; eel_canvas_request_update (canvas); } @@ -3150,11 +3174,13 @@ eel_canvas_set_pixels_per_unit (EelCanvas *canvas, double n) */ window = NULL; if (gtk_widget_get_mapped (widget)) { + GtkAllocation allocation; attributes.window_type = GDK_WINDOW_CHILD; - attributes.x = widget->allocation.x; - attributes.y = widget->allocation.y; - attributes.width = widget->allocation.width; - attributes.height = widget->allocation.height; + gtk_widget_get_allocation (widget, &allocation); + attributes.x = allocation.x; + attributes.y = allocation.y; + attributes.width = allocation.width; + attributes.height = allocation.height; attributes.wclass = GDK_INPUT_OUTPUT; attributes.visual = gtk_widget_get_visual (widget); attributes.colormap = gtk_widget_get_colormap (widget); @@ -3219,13 +3245,18 @@ eel_canvas_scroll_to (EelCanvas *canvas, int cx, int cy) void eel_canvas_get_scroll_offsets (EelCanvas *canvas, int *cx, int *cy) { + GtkAdjustment *vadjustment, *hadjustment; + g_return_if_fail (EEL_IS_CANVAS (canvas)); + hadjustment = gtk_layout_get_hadjustment (&canvas->layout); + vadjustment = gtk_layout_get_vadjustment (&canvas->layout); + if (cx) - *cx = canvas->layout.hadjustment->value; + *cx = gtk_adjustment_get_value (hadjustment); if (cy) - *cy = canvas->layout.vadjustment->value; + *cy = gtk_adjustment_get_value (vadjustment); } /** @@ -3319,7 +3350,7 @@ eel_canvas_request_redraw (EelCanvas *canvas, int x1, int y1, int x2, int y2) bbox.width = x2 - x1; bbox.height = y2 - y1; - gdk_window_invalidate_rect (canvas->layout.bin_window, + gdk_window_invalidate_rect (gtk_layout_get_bin_window (&canvas->layout), &bbox, FALSE); } @@ -3637,10 +3668,10 @@ eel_canvas_item_accessible_is_item_in_window (EelCanvasItem *item, gboolean retval; widget = GTK_WIDGET (item->canvas); - if (widget->window) { + if (gtk_widget_get_window (widget)) { int window_width, window_height; - gdk_window_get_geometry (widget->window, NULL, NULL, + gdk_window_get_geometry (gtk_widget_get_window (widget), NULL, NULL, &window_width, &window_height, NULL); /* * Check whether rectangles intersect @@ -3706,7 +3737,7 @@ eel_canvas_item_accessible_get_extents (AtkComponent *component, *x = rect.x + window_x; *y = rect.y + window_y; if (coord_type == ATK_XY_WINDOW) { - window = gdk_window_get_toplevel (canvas->window); + window = gdk_window_get_toplevel (gtk_widget_get_window (canvas)); gdk_window_get_origin (window, &toplevel_x, &toplevel_y); *x -= toplevel_x; *y -= toplevel_y; @@ -3816,7 +3847,7 @@ eel_canvas_item_accessible_ref_state_set (AtkObject *accessible) if (item == NULL) { atk_state_set_add_state (state_set, ATK_STATE_DEFUNCT); } else { - if (item->object.flags & EEL_CANVAS_ITEM_VISIBLE) { + if (item->flags & EEL_CANVAS_ITEM_VISIBLE) { atk_state_set_add_state (state_set, ATK_STATE_VISIBLE); if (eel_canvas_item_accessible_is_item_on_screen (item)) { diff --git a/eel/eel-canvas.h b/eel/eel-canvas.h index d440014..75fae93 100644 --- a/eel/eel-canvas.h +++ b/eel/eel-canvas.h @@ -120,6 +120,9 @@ struct _EelCanvasItem { /* Bounding box for this item (in canvas coordinates) */ double x1, y1, x2, y2; + + /* Object flags */ + guint flags; }; struct _EelCanvasItemClass { -- 1.7.2