X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3e09bcfd02bdb2c1dcc561c8975b870806e69775..f7732fa59a48ada168c88ccd004eca3c848d8a05:/src/gtk/win_gtk.c diff --git a/src/gtk/win_gtk.c b/src/gtk/win_gtk.c index f057e25f95..6eb8b4e1e2 100644 --- a/src/gtk/win_gtk.c +++ b/src/gtk/win_gtk.c @@ -22,7 +22,6 @@ extern "C" { typedef struct _GtkPizzaChild GtkPizzaChild; typedef struct _GtkPizzaClass GtkPizzaClass; -typedef struct _GtkPizzaAdjData GtkPizzaAdjData; struct _GtkPizzaClass { @@ -40,12 +39,6 @@ struct _GtkPizzaChild gint y; }; -struct _GtkPizzaAdjData -{ - gint dx; - gint dy; -}; - static void gtk_pizza_class_init (GtkPizzaClass *klass); static void gtk_pizza_init (GtkPizza *pizza); @@ -71,8 +64,6 @@ static void gtk_pizza_forall (GtkContainer *container, static void gtk_pizza_allocate_child (GtkPizza *pizza, GtkPizzaChild *child); -static void gtk_pizza_adjust_allocations_recurse (GtkWidget *widget, - gpointer cb_data); static GtkType gtk_pizza_child_type (GtkContainer *container); @@ -255,7 +246,7 @@ void gtk_pizza_set_xoffset (GtkPizza *pizza, gint xoffset) g_return_if_fail (GTK_IS_PIZZA (pizza)); pizza->m_xoffset = xoffset; - // do something + /* do something */ } void gtk_pizza_set_yoffset (GtkPizza *pizza, gint yoffset) @@ -264,7 +255,7 @@ void gtk_pizza_set_yoffset (GtkPizza *pizza, gint yoffset) g_return_if_fail (GTK_IS_PIZZA (pizza)); pizza->m_xoffset = yoffset; - // do something + /* do something */ } gint gtk_pizza_get_rtl_offset (GtkPizza *pizza) @@ -318,8 +309,6 @@ 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); } void @@ -408,6 +397,7 @@ gtk_pizza_realize (GtkWidget *widget) GtkPizzaChild *child; GList *children; int border; + int w, h; g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_PIZZA (widget)); @@ -422,16 +412,24 @@ gtk_pizza_realize (GtkWidget *widget) attributes.width = widget->allocation.width; attributes.height = widget->allocation.height; - border = pizza->container.border_width; - attributes.x += border; - attributes.y += border; - attributes.width -= 2 * border; - attributes.height -= 2 * border; - /* minimal size */ if (attributes.width < 2) attributes.width = 2; if (attributes.height < 2) attributes.height = 2; + border = pizza->container.border_width; + w = attributes.width - 2 * border; + h = attributes.height - 2 * border; + if (w < 2) w = 2; + if (h < 2) h = 2; + + if (!pizza->m_noscroll) + { + attributes.x += border; + attributes.y += border; + attributes.width = w; + attributes.height = h; + } + attributes.wclass = GDK_INPUT_OUTPUT; attributes.visual = gtk_widget_get_visual (widget); attributes.colormap = gtk_widget_get_colormap (widget); @@ -444,6 +442,13 @@ gtk_pizza_realize (GtkWidget *widget) attributes.x = 0; attributes.y = 0; + if (pizza->m_noscroll) + { + attributes.x = border; + attributes.y = border; + attributes.width = w; + attributes.height = h; + } attributes.event_mask = gtk_widget_get_events (widget); attributes.event_mask |= GDK_EXPOSURE_MASK | @@ -558,38 +563,38 @@ gtk_pizza_size_allocate (GtkWidget *widget, (widget->allocation.y == allocation->y)); widget->allocation = *allocation; - border = pizza->container.border_width; - - x = allocation->x + border; - y = allocation->y + border; - w = allocation->width - border*2; - h = allocation->height - border*2; - if (w < 0) - w = 0; - if (h < 0) - h = 0; - - if (!GTK_WIDGET_REALIZED (widget)) - return; - - if (pizza->m_noscroll) + if (GTK_WIDGET_REALIZED(widget)) { - if (only_resize) - gdk_window_resize( widget->window, allocation->width, allocation->height ); - else - gdk_window_move_resize( widget->window, allocation->x, allocation->y, - allocation->width, allocation->height ); + border = pizza->container.border_width; - gdk_window_move_resize( pizza->bin_window, border, border, w, h ); - } - else - { - if (only_resize) - gdk_window_resize( widget->window, w, h ); + x = allocation->x + border; + y = allocation->y + border; + w = allocation->width - border*2; + h = allocation->height - border*2; + if (w < 0) + w = 0; + if (h < 0) + h = 0; + + if (pizza->m_noscroll) + { + if (only_resize) + gdk_window_resize( widget->window, allocation->width, allocation->height ); + else + gdk_window_move_resize( widget->window, allocation->x, allocation->y, + allocation->width, allocation->height ); + + gdk_window_move_resize( pizza->bin_window, border, border, w, h ); + } else - gdk_window_move_resize( widget->window, x, y, w, h ); + { + if (only_resize) + gdk_window_resize( widget->window, w, h ); + else + gdk_window_move_resize( widget->window, x, y, w, h ); - gdk_window_resize( pizza->bin_window, w, h ); + gdk_window_resize( pizza->bin_window, w, h ); + } } children = pizza->children; @@ -719,63 +724,22 @@ gtk_pizza_allocate_child (GtkPizza *pizza, gtk_widget_size_allocate (child->widget, &allocation); } -static void -gtk_pizza_adjust_allocations_recurse (GtkWidget *widget, - gpointer cb_data) -{ - GtkPizzaAdjData *data = cb_data; - - widget->allocation.x += data->dx; - widget->allocation.y += data->dy; - - if (GTK_WIDGET_NO_WINDOW (widget) && GTK_IS_CONTAINER (widget)) - { - gtk_container_forall (GTK_CONTAINER (widget), - gtk_pizza_adjust_allocations_recurse, - cb_data); - } -} - -static void -gtk_pizza_adjust_allocations (GtkPizza *pizza, - gint dx, - gint dy) -{ - GList *tmp_list; - GtkPizzaAdjData data; - - data.dx = dx; - data.dy = dy; - - tmp_list = pizza->children; - while (tmp_list) - { - GtkPizzaChild *child = tmp_list->data; - tmp_list = tmp_list->next; - - child->widget->allocation.x += dx; - child->widget->allocation.y += dy; - - if (GTK_WIDGET_NO_WINDOW (child->widget) && - GTK_IS_CONTAINER (child->widget)) - { - gtk_container_forall (GTK_CONTAINER (child->widget), - gtk_pizza_adjust_allocations_recurse, - &data); - } - } -} - void gtk_pizza_scroll (GtkPizza *pizza, gint dx, gint dy) { + GList *tmp_list; + pizza->m_xoffset += dx; pizza->m_yoffset += dy; - gtk_pizza_adjust_allocations (pizza, -dx, -dy); - if (pizza->bin_window) gdk_window_scroll( pizza->bin_window, -dx, -dy ); + + for (tmp_list = pizza->children; tmp_list; tmp_list = tmp_list->next) + { + GtkPizzaChild *child = tmp_list->data; + gtk_widget_queue_resize(child->widget); + } } #ifdef __cplusplus