X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a31bb9442581e64799025a86153a0af9aec5317c..9c7669d7a4ecf5fee714dccc0718165b871beca1:/src/gtk/win_gtk.c?ds=sidebyside diff --git a/src/gtk/win_gtk.c b/src/gtk/win_gtk.c index 8d31fb8675..6115bc3a33 100644 --- a/src/gtk/win_gtk.c +++ b/src/gtk/win_gtk.c @@ -64,8 +64,7 @@ static void gtk_pizza_scroll_set_adjustments (GtkPizza *pizza, GtkAdjustment *hadj, GtkAdjustment *vadj); -/* static */ -GtkContainerClass *pizza_parent_class = NULL; +static GtkWidgetClass* pizza_parent_class; GtkType gtk_pizza_get_type () @@ -189,15 +188,12 @@ gtk_pizza_init (GtkPizza *pizza) pizza->children = NULL; - pizza->m_width = 20; - pizza->m_height = 20; - pizza->bin_window = NULL; pizza->m_xoffset = 0; pizza->m_yoffset = 0; - - pizza->external_expose = FALSE; + + pizza->m_width = -1; } GtkWidget* @@ -210,22 +206,6 @@ gtk_pizza_new () return GTK_WIDGET (pizza); } -gint gtk_pizza_get_width (GtkPizza *pizza) -{ - g_return_val_if_fail ( (pizza != NULL), -1 ); - g_return_val_if_fail ( (GTK_IS_PIZZA (pizza)), -1 ); - - return pizza->m_width; -} - -gint gtk_pizza_get_height (GtkPizza *pizza) -{ - g_return_val_if_fail ( (pizza != NULL), -1 ); - g_return_val_if_fail ( (GTK_IS_PIZZA (pizza)), -1 ); - - return pizza->m_height; -} - gint gtk_pizza_get_xoffset (GtkPizza *pizza) { g_return_val_if_fail ( (pizza != NULL), -1 ); @@ -260,6 +240,21 @@ void gtk_pizza_set_yoffset (GtkPizza *pizza, gint yoffset) // do something } +gint gtk_pizza_get_rtl_offset (GtkPizza *pizza) +{ + gint width; + + g_return_val_if_fail ( (pizza != NULL), 0 ); + g_return_val_if_fail ( (GTK_IS_PIZZA (pizza)), 0 ); + + if (!pizza->bin_window) return 0; + + gdk_window_get_geometry( pizza->bin_window, NULL, NULL, &width, NULL, NULL ); + + return width; +} + + static void gtk_pizza_scroll_set_adjustments (GtkPizza *pizza, GtkAdjustment *hadj, @@ -287,16 +282,6 @@ gtk_pizza_set_shadow_type (GtkPizza *pizza, } } -void -gtk_pizza_set_external (GtkPizza *pizza, - gboolean expose) -{ - g_return_if_fail (pizza != NULL); - g_return_if_fail (GTK_IS_PIZZA (pizza)); - - pizza->external_expose = expose; -} - void gtk_pizza_put (GtkPizza *pizza, GtkWidget *widget, @@ -311,6 +296,12 @@ gtk_pizza_put (GtkPizza *pizza, g_return_if_fail (GTK_IS_PIZZA (pizza)); g_return_if_fail (widget != NULL); + if (gtk_widget_get_direction( GTK_WIDGET(pizza) ) == GTK_TEXT_DIR_RTL) + { + // reverse horizontal placement + x = pizza->m_width - x - width; + } + child_info = g_new (GtkPizzaChild, 1); child_info->widget = widget; @@ -319,6 +310,9 @@ gtk_pizza_put (GtkPizza *pizza, child_info->width = width; child_info->height = height; + if (GTK_IS_PIZZA(widget)) + GTK_PIZZA(widget)->m_width = width; + pizza->children = g_list_append (pizza->children, child_info); if (GTK_WIDGET_REALIZED (pizza)) @@ -362,15 +356,25 @@ gtk_pizza_set_size (GtkPizza *pizza, if (child->widget == widget) { - if ((child->x == x) && + gint new_x = x; + if (gtk_widget_get_direction( GTK_WIDGET(pizza) ) == GTK_TEXT_DIR_RTL) + { + // reverse horizontal placement + new_x = pizza->m_width - new_x - width; + } + + if ((child->x == new_x) && (child->y == y) && (child->width == width) && (child->height == height)) return; - child->x = x; + child->x = new_x; child->y = y; child->width = width; child->height = height; + + if (GTK_IS_PIZZA(widget)) + GTK_PIZZA(widget)->m_width = width; gtk_widget_set_size_request (widget, width, height); @@ -527,8 +531,8 @@ gtk_pizza_unrealize (GtkWidget *widget) gdk_window_destroy (pizza->bin_window); pizza->bin_window = NULL; - if (GTK_WIDGET_CLASS (pizza_parent_class)->unrealize) - (* GTK_WIDGET_CLASS (pizza_parent_class)->unrealize) (widget); + if (pizza_parent_class->unrealize) + pizza_parent_class->unrealize(widget); } static void @@ -625,16 +629,12 @@ gtk_pizza_expose (GtkWidget *widget, g_return_val_if_fail (GTK_IS_PIZZA (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); - pizza = GTK_PIZZA (widget); + pizza = (GtkPizza*)widget; if (event->window != pizza->bin_window) return FALSE; - /* We handle all expose events in window.cpp now. */ - if (pizza->external_expose) - return FALSE; - - (* GTK_WIDGET_CLASS (pizza_parent_class)->expose_event) (widget, event); + pizza_parent_class->expose_event(widget, event); return FALSE; } @@ -648,7 +648,7 @@ gtk_pizza_style_set(GtkWidget *widget, GtkStyle *previous_style) gtk_style_set_background(widget->style, GTK_PIZZA(widget)->bin_window, GTK_STATE_NORMAL ); } - (* GTK_WIDGET_CLASS (pizza_parent_class)->style_set) (widget, previous_style); + pizza_parent_class->style_set(widget, previous_style); } static void