* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
+#include <config.h>
#include "gtkhpaned.h"
+#include "gtkintl.h"
+#include "gtkalias.h"
-static void gtk_hpaned_class_init (GtkHPanedClass *klass);
-static void gtk_hpaned_init (GtkHPaned *hpaned);
static void gtk_hpaned_size_request (GtkWidget *widget,
GtkRequisition *requisition);
static void gtk_hpaned_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
-static gpointer parent_class;
-
-GtkType
-gtk_hpaned_get_type (void)
-{
- static GtkType hpaned_type = 0;
-
- if (!hpaned_type)
- {
- static const GtkTypeInfo hpaned_info =
- {
- "GtkHPaned",
- sizeof (GtkHPaned),
- sizeof (GtkHPanedClass),
- (GtkClassInitFunc) gtk_hpaned_class_init,
- (GtkObjectInitFunc) gtk_hpaned_init,
- /* reserved_1 */ NULL,
- /* reserved_2 */ NULL,
- (GtkClassInitFunc) NULL,
- };
-
- hpaned_type = gtk_type_unique (GTK_TYPE_PANED, &hpaned_info);
- }
-
- return hpaned_type;
-}
+G_DEFINE_TYPE (GtkHPaned, gtk_hpaned, GTK_TYPE_PANED)
static void
gtk_hpaned_class_init (GtkHPanedClass *class)
{
GtkWidgetClass *widget_class;
- parent_class = gtk_type_class (GTK_TYPE_PANED);
-
widget_class = (GtkWidgetClass *) class;
widget_class->size_request = gtk_hpaned_size_request;
static void
gtk_hpaned_init (GtkHPaned *hpaned)
{
- GtkPaned *paned;
+ GtkPaned *paned = GTK_PANED (hpaned);
- g_return_if_fail (GTK_IS_PANED (hpaned));
-
- paned = GTK_PANED (hpaned);
-
paned->cursor_type = GDK_SB_H_DOUBLE_ARROW;
paned->orientation = GTK_ORIENTATION_VERTICAL;
}
{
GtkHPaned *hpaned;
- hpaned = gtk_type_new (GTK_TYPE_HPANED);
+ hpaned = g_object_new (GTK_TYPE_HPANED, NULL);
return GTK_WIDGET (hpaned);
}
{
gint handle_size;
- gtk_widget_style_get (widget, "handle_size", &handle_size, NULL);
+ gtk_widget_style_get (widget, "handle-size", &handle_size, NULL);
requisition->width += handle_size;
}
}
+static void
+flip_child (GtkWidget *widget, GtkAllocation *child_pos)
+{
+ gint x = widget->allocation.x;
+ gint width = widget->allocation.width;
+
+ child_pos->x = 2 * x + width - child_pos->x - child_pos->width;
+}
+
static void
gtk_hpaned_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
GtkRequisition child2_requisition;
gint handle_size;
- gtk_widget_style_get (widget, "handle_size", &handle_size, NULL);
+ gtk_widget_style_get (widget, "handle-size", &handle_size, NULL);
gtk_widget_get_child_requisition (paned->child1, &child1_requisition);
gtk_widget_get_child_requisition (paned->child2, &child2_requisition);
paned->handle_pos.y = widget->allocation.y + border_width;
paned->handle_pos.width = handle_size;
paned->handle_pos.height = MAX (1, widget->allocation.height - 2 * border_width);
+
+ child1_allocation.height = child2_allocation.height = MAX (1, (gint) allocation->height - border_width * 2);
+ child1_allocation.width = MAX (1, paned->child1_size);
+ child1_allocation.x = widget->allocation.x + border_width;
+ child1_allocation.y = child2_allocation.y = widget->allocation.y + border_width;
+
+ child2_allocation.x = child1_allocation.x + paned->child1_size + paned->handle_pos.width;
+ child2_allocation.width = MAX (1, widget->allocation.x + widget->allocation.width - child2_allocation.x - border_width);
+
+ if (gtk_widget_get_direction (GTK_WIDGET (widget)) == GTK_TEXT_DIR_RTL)
+ {
+ flip_child (widget, &(child2_allocation));
+ flip_child (widget, &(child1_allocation));
+ flip_child (widget, &(paned->handle_pos));
+ }
if (GTK_WIDGET_REALIZED (widget))
{
paned->handle_pos.height);
}
- child1_allocation.height = child2_allocation.height = MAX (1, (gint) allocation->height - border_width * 2);
- child1_allocation.width = MAX (1, paned->child1_size);
- child1_allocation.x = widget->allocation.x + border_width;
- child1_allocation.y = child2_allocation.y = widget->allocation.y + border_width;
-
- child2_allocation.x = child1_allocation.x + paned->child1_size + paned->handle_pos.width;
- child2_allocation.width = MAX (1, widget->allocation.x + widget->allocation.width - child2_allocation.x - border_width);
-
/* Now allocate the childen, making sure, when resizing not to
* overlap the windows
*/
if (GTK_WIDGET_REALIZED (widget))
gdk_window_hide (paned->handle);
-
- gtk_widget_set_child_visible (paned->child1, TRUE);
- gtk_widget_set_child_visible (paned->child2, TRUE);
+
+ if (paned->child1)
+ gtk_widget_set_child_visible (paned->child1, TRUE);
+ if (paned->child2)
+ gtk_widget_set_child_visible (paned->child2, TRUE);
child_allocation.x = widget->allocation.x + border_width;
child_allocation.y = widget->allocation.y + border_width;
gtk_widget_size_allocate (paned->child2, &child_allocation);
}
}
+
+#define __GTK_HPANED_C__
+#include "gtkaliasdef.c"