X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkhbox.c;h=cade45446fec81aa0a2911613c3010780241a412;hb=4cbbe565b932db1855a844ae5c7ba221243ff8cf;hp=e3e88d79f3d324e8b27b84a60dca30097f1f2a31;hpb=3612aee5857360cf6dcde2be79a6d60bebf4f8bb;p=~andy%2Fgtk diff --git a/gtk/gtkhbox.c b/gtk/gtkhbox.c index e3e88d79f..cade45446 100644 --- a/gtk/gtkhbox.c +++ b/gtk/gtkhbox.c @@ -21,314 +21,66 @@ * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS * file for a list of people on the GTK+ Team. See the ChangeLog * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. + * GTK+ at ftp://ftp.gtk.org/pub/gtk/. */ -#include -#include "gtkalias.h" -#include "gtkhbox.h" - - -static void gtk_hbox_class_init (GtkHBoxClass *klass); -static void gtk_hbox_init (GtkHBox *box); -static void gtk_hbox_size_request (GtkWidget *widget, - GtkRequisition *requisition); -static void gtk_hbox_size_allocate (GtkWidget *widget, - GtkAllocation *allocation); +#include "config.h" +#undef GTK_DISABLE_DEPRECATED +#include "gtkhbox.h" +#include "gtkorientable.h" -GType -gtk_hbox_get_type (void) -{ - static GType hbox_type = 0; - if (!hbox_type) - { - static const GTypeInfo hbox_info = - { - sizeof (GtkHBoxClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) gtk_hbox_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (GtkHBox), - 0, /* n_preallocs */ - (GInstanceInitFunc) gtk_hbox_init, - }; +/** + * SECTION:gtkhbox + * @Short_description: A horizontal container box + * @Title: GtkHBox + * @See_also: #GtkVBox + * + * #GtkHBox is a container that organizes child widgets into a single row. + * + * Use the #GtkBox packing interface to determine the arrangement, + * spacing, width, and alignment of #GtkHBox children. + * + * All children are allocated the same height. + * + * GtkHBox has been deprecated, use #GtkBox instead. + */ - hbox_type = g_type_register_static (GTK_TYPE_BOX, "GtkHBox", - &hbox_info, 0); - } - return hbox_type; -} +G_DEFINE_TYPE (GtkHBox, gtk_hbox, GTK_TYPE_BOX) static void gtk_hbox_class_init (GtkHBoxClass *class) { - GtkWidgetClass *widget_class; - - widget_class = (GtkWidgetClass*) class; - - widget_class->size_request = gtk_hbox_size_request; - widget_class->size_allocate = gtk_hbox_size_allocate; } static void gtk_hbox_init (GtkHBox *hbox) { -} - -GtkWidget* -gtk_hbox_new (gboolean homogeneous, - gint spacing) -{ - GtkHBox *hbox; + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); - hbox = g_object_new (GTK_TYPE_HBOX, NULL); - - GTK_BOX (hbox)->spacing = spacing; - GTK_BOX (hbox)->homogeneous = homogeneous ? TRUE : FALSE; - - return GTK_WIDGET (hbox); + _gtk_box_set_old_defaults (GTK_BOX (hbox)); } - -static void -gtk_hbox_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - GtkBox *box; - GtkBoxChild *child; - GList *children; - gint nvis_children; - gint width; - - box = GTK_BOX (widget); - requisition->width = 0; - requisition->height = 0; - nvis_children = 0; - - children = box->children; - while (children) - { - child = children->data; - children = children->next; - - if (GTK_WIDGET_VISIBLE (child->widget)) - { - GtkRequisition child_requisition; - - gtk_widget_size_request (child->widget, &child_requisition); - - if (box->homogeneous) - { - width = child_requisition.width + child->padding * 2; - requisition->width = MAX (requisition->width, width); - } - else - { - requisition->width += child_requisition.width + child->padding * 2; - } - - requisition->height = MAX (requisition->height, child_requisition.height); - - nvis_children += 1; - } - } - - if (nvis_children > 0) - { - if (box->homogeneous) - requisition->width *= nvis_children; - requisition->width += (nvis_children - 1) * box->spacing; - } - - requisition->width += GTK_CONTAINER (box)->border_width * 2; - requisition->height += GTK_CONTAINER (box)->border_width * 2; -} - -static void -gtk_hbox_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) +/** + * gtk_hbox_new: + * @homogeneous: %TRUE if all children are to be given equal space allotments. + * @spacing: the number of pixels to place by default between children. + * + * Creates a new #GtkHBox. + * + * Returns: a new #GtkHBox. + * + * Deprecated: 3.2: Use gtk_box_new() with %GTK_ORIENTATION_HORIZONTAL instead + */ +GtkWidget * +gtk_hbox_new (gboolean homogeneous, + gint spacing) { - GtkBox *box; - GtkBoxChild *child; - GList *children; - GtkAllocation child_allocation; - gint nvis_children; - gint nexpand_children; - gint child_width; - gint width; - gint extra; - gint x; - GtkTextDirection direction; - - box = GTK_BOX (widget); - widget->allocation = *allocation; - - direction = gtk_widget_get_direction (widget); - - nvis_children = 0; - nexpand_children = 0; - children = box->children; - - while (children) - { - child = children->data; - children = children->next; - - if (GTK_WIDGET_VISIBLE (child->widget)) - { - nvis_children += 1; - if (child->expand) - nexpand_children += 1; - } - } - - if (nvis_children > 0) - { - if (box->homogeneous) - { - width = (allocation->width - - GTK_CONTAINER (box)->border_width * 2 - - (nvis_children - 1) * box->spacing); - extra = width / nvis_children; - } - else if (nexpand_children > 0) - { - width = (gint) allocation->width - (gint) widget->requisition.width; - extra = width / nexpand_children; - } - else - { - width = 0; - extra = 0; - } - - x = allocation->x + GTK_CONTAINER (box)->border_width; - child_allocation.y = allocation->y + GTK_CONTAINER (box)->border_width; - child_allocation.height = MAX (1, (gint) allocation->height - (gint) GTK_CONTAINER (box)->border_width * 2); - - children = box->children; - while (children) - { - child = children->data; - children = children->next; - - if ((child->pack == GTK_PACK_START) && GTK_WIDGET_VISIBLE (child->widget)) - { - if (box->homogeneous) - { - if (nvis_children == 1) - child_width = width; - else - child_width = extra; - - nvis_children -= 1; - width -= extra; - } - else - { - GtkRequisition child_requisition; - - gtk_widget_get_child_requisition (child->widget, &child_requisition); - - child_width = child_requisition.width + child->padding * 2; - - if (child->expand) - { - if (nexpand_children == 1) - child_width += width; - else - child_width += extra; - - nexpand_children -= 1; - width -= extra; - } - } - - if (child->fill) - { - child_allocation.width = MAX (1, (gint) child_width - (gint) child->padding * 2); - child_allocation.x = x + child->padding; - } - else - { - GtkRequisition child_requisition; - - gtk_widget_get_child_requisition (child->widget, &child_requisition); - child_allocation.width = child_requisition.width; - child_allocation.x = x + (child_width - child_allocation.width) / 2; - } - - if (direction == GTK_TEXT_DIR_RTL) - child_allocation.x = allocation->x + allocation->width - (child_allocation.x - allocation->x) - child_allocation.width; - - gtk_widget_size_allocate (child->widget, &child_allocation); - - x += child_width + box->spacing; - } - } - - x = allocation->x + allocation->width - GTK_CONTAINER (box)->border_width; - - children = box->children; - while (children) - { - child = children->data; - children = children->next; - - if ((child->pack == GTK_PACK_END) && GTK_WIDGET_VISIBLE (child->widget)) - { - GtkRequisition child_requisition; - gtk_widget_get_child_requisition (child->widget, &child_requisition); - - if (box->homogeneous) - { - if (nvis_children == 1) - child_width = width; - else - child_width = extra; - - nvis_children -= 1; - width -= extra; - } - else - { - child_width = child_requisition.width + child->padding * 2; - - if (child->expand) - { - if (nexpand_children == 1) - child_width += width; - else - child_width += extra; - - nexpand_children -= 1; - width -= extra; - } - } - - if (child->fill) - { - child_allocation.width = MAX (1, (gint)child_width - (gint)child->padding * 2); - child_allocation.x = x + child->padding - child_width; - } - else - { - child_allocation.width = child_requisition.width; - child_allocation.x = x + (child_width - child_allocation.width) / 2 - child_width; - } - - if (direction == GTK_TEXT_DIR_RTL) - child_allocation.x = allocation->x + allocation->width - (child_allocation.x - allocation->x) - child_allocation.width; - - gtk_widget_size_allocate (child->widget, &child_allocation); - - x -= (child_width + box->spacing); - } - } - } + return g_object_new (GTK_TYPE_HBOX, + "spacing", spacing, + "homogeneous", homogeneous ? TRUE : FALSE, + NULL); }