X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e47c778924ef4f0456edd5912cf7a2131ecb634f..764471557e06c8816b8cc8eb9924a1e3c78509d8:/src/gtk/win_gtk.c?ds=sidebyside diff --git a/src/gtk/win_gtk.c b/src/gtk/win_gtk.c index 232fb54653..2b6944fb3e 100644 --- a/src/gtk/win_gtk.c +++ b/src/gtk/win_gtk.c @@ -20,8 +20,26 @@ extern "C" { #endif /* __cplusplus */ +typedef struct _GtkPizzaChild GtkPizzaChild; +typedef struct _GtkPizzaClass GtkPizzaClass; typedef struct _GtkPizzaAdjData GtkPizzaAdjData; +struct _GtkPizzaClass +{ + GtkContainerClass parent_class; + + void (*set_scroll_adjustments) (GtkPizza *pizza, + GtkAdjustment *hadjustment, + GtkAdjustment *vadjustment); +}; + +struct _GtkPizzaChild +{ + GtkWidget *widget; + gint x; + gint y; +}; + struct _GtkPizzaAdjData { gint dx; @@ -71,7 +89,7 @@ gtk_pizza_get_type () if (!pizza_type) { - static const GTypeInfo pizza_info = + const GTypeInfo pizza_info = { sizeof (GtkPizzaClass), NULL, /* base_init */ @@ -240,11 +258,11 @@ gint gtk_pizza_get_rtl_offset (GtkPizza *pizza) g_return_val_if_fail ( (pizza != NULL), 0 ); g_return_val_if_fail ( (GTK_IS_PIZZA (pizza)), 0 ); - + if (!pizza->bin_window) return 0; - + border = pizza->container.border_width; - + return GTK_WIDGET(pizza)->allocation.width - border*2; } @@ -276,8 +294,6 @@ gtk_pizza_put (GtkPizza *pizza, child_info->widget = widget; child_info->x = x; child_info->y = y; - child_info->width = width; - child_info->height = height; pizza->children = g_list_append (pizza->children, child_info); @@ -286,6 +302,7 @@ gtk_pizza_put (GtkPizza *pizza, gtk_widget_set_parent (widget, GTK_WIDGET (pizza)); + gtk_widget_set_size_request( widget, width, height ); if (GTK_WIDGET_REALIZED (pizza)) gtk_pizza_allocate_child (pizza, child_info); } @@ -323,16 +340,13 @@ gtk_pizza_set_size (GtkPizza *pizza, if (child->widget == widget) { - if ((child->x == x) && - (child->y == y) && - (child->width == width) && - (child->height == height)) return; - - child->x = x; - child->y = y; - child->width = width; - child->height = height; - + if (child->x != x || child->y != y) + { + child->x = x; + child->y = y; + gtk_widget_queue_resize(widget); + } + gtk_widget_set_size_request (widget, width, height); return; @@ -530,7 +544,7 @@ gtk_pizza_size_allocate (GtkWidget *widget, widget->allocation = *allocation; border = pizza->container.border_width; - + x = allocation->x + border; y = allocation->y + border; w = allocation->width - border*2; @@ -665,15 +679,15 @@ gtk_pizza_allocate_child (GtkPizza *pizza, if (gtk_widget_get_direction( GTK_WIDGET(pizza) ) == GTK_TEXT_DIR_RTL) { /* reverse horizontal placement */ - gint offset,border; - + gint offset,border; + offset = GTK_WIDGET(pizza)->allocation.width; border = pizza->container.border_width; offset -= border*2; - - allocation.x = offset - child->x - allocation.width + pizza->m_xoffset; + + allocation.x = offset - child->x - allocation.width + pizza->m_xoffset; } - + gtk_widget_size_allocate (child->widget, &allocation); }