diff options
author | Matthias Clasen <mclasen@redhat.com> | 2017-06-01 17:56:32 -0700 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2017-06-04 21:20:27 -0400 |
commit | e936a35d66ce663d9632aa239b0f805c004ad5af (patch) | |
tree | 185d0a6d432dab4916931fa45351b76661a657d9 /gtk/gtkcenterbox.c | |
parent | e32f15be4f9ae4ed716300b7cb5de69bbaa19ca1 (diff) | |
download | gtk+-e936a35d66ce663d9632aa239b0f805c004ad5af.tar.gz |
Make GtkCenterBox public
It provides functionality that GtkBox used to have,
and is generally useful.
Diffstat (limited to 'gtk/gtkcenterbox.c')
-rw-r--r-- | gtk/gtkcenterbox.c | 139 |
1 files changed, 134 insertions, 5 deletions
diff --git a/gtk/gtkcenterbox.c b/gtk/gtkcenterbox.c index 316126c2ac..7970baaa9f 100644 --- a/gtk/gtkcenterbox.c +++ b/gtk/gtkcenterbox.c @@ -1,5 +1,67 @@ +/* + * Copyright (c) 2017 Timm Bäder <mail@baedert.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Author: Timm Bäder <mail@baedert.org> + */ + +/** + * SECTION:gtkcenterbox + * @Short_description: A centering container + * @Title: GtkCenterBox + * @See_also: #GtkBox + * + * The GtkCenterBox widget arranges three children in a horizontal + * or vertical arrangement, keeping the middle child centered as well + * as possible. + * + * To add children to GtkCenterBox, use gtk_center_box_set_start_widget(), + * gtk_center_box_set_center_widget() and gtk_center_box_set_end_widget(). + * + * # CSS nodes + * + * GtkCenterBox uses a single CSS node with name box. + * + * In horizontal orientation, the nodes of the children are always arranged + * from left to right. So :first-child will always select the leftmost child, + * regardless of text direction. + * + * In vertical orientation, the are arranged from top to bottom. + */ + +#include "config.h" +#include "gtkcenterbox.h" +#include "gtkcssnodeprivate.h" +#include "gtkwidgetprivate.h" + +struct _GtkCenterBox +{ + GtkWidget parent_instance; + + GtkWidget *start_widget; + GtkWidget *center_widget; + GtkWidget *end_widget; +}; + + +struct _GtkCenterBoxClass +{ + GtkWidgetClass parent_class; +}; -#include "gtkcenterboxprivate.h" G_DEFINE_TYPE (GtkCenterBox, gtk_center_box, GTK_TYPE_WIDGET); @@ -76,8 +138,7 @@ gtk_center_box_size_allocate (GtkWidget *widget, GTK_WIDGET_CLASS (gtk_center_box_parent_class)->size_allocate (widget, allocation); - - // TODO: Allocate natural sizes if possible? + /* TODO: Allocate natural sizes if possible? */ /* Start Box */ gtk_widget_measure (self->start_widget, GTK_ORIENTATION_HORIZONTAL, @@ -93,7 +154,6 @@ gtk_center_box_size_allocate (GtkWidget *widget, gdk_rectangle_union (&clip, &clip, &child_clip); start_size = child_allocation.width; - /* End Box */ gtk_widget_measure (self->end_widget, GTK_ORIENTATION_HORIZONTAL, allocation->height, @@ -153,6 +213,9 @@ gtk_center_box_class_init (GtkCenterBoxClass *klass) widget_class->measure = gtk_center_box_measure; widget_class->size_allocate = gtk_center_box_size_allocate; widget_class->snapshot = gtk_center_box_snapshot; + + gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_FILLER); + gtk_widget_class_set_css_name (widget_class, "box"); } static void @@ -165,12 +228,30 @@ gtk_center_box_init (GtkCenterBox *self) self->end_widget = NULL; } +/** + * gtk_center_box_new: + * + * Creates a new #GtkCenterBox. + * + * Returns: the new #GtkCenterBox. + * + * Since: 3.92 + */ GtkWidget * gtk_center_box_new (void) { return GTK_WIDGET (g_object_new (GTK_TYPE_CENTER_BOX, NULL)); } +/** + * gtk_center_box_set_start_widget: + * @self: a #GtkCenterBox + * @child: the child + * + * Sets the start widget. + * + * Since: 3.92 + */ void gtk_center_box_set_start_widget (GtkCenterBox *self, GtkWidget *child) @@ -183,9 +264,18 @@ gtk_center_box_set_start_widget (GtkCenterBox *self, gtk_widget_set_parent (child, GTK_WIDGET (self)); } +/** + * gtk_center_box_set_center_widget: + * @self: a #GtkCenterBox + * @child: the child + * + * Sets the center widget. + * + * Since: 3.92 + */ void gtk_center_box_set_center_widget (GtkCenterBox *self, - GtkWidget *child) + GtkWidget *child) { if (self->center_widget) gtk_widget_unparent (self->center_widget); @@ -195,6 +285,15 @@ gtk_center_box_set_center_widget (GtkCenterBox *self, gtk_widget_set_parent (child, GTK_WIDGET (self)); } +/** + * gtk_center_box_set_end_widget: + * @self: a #GtkCenterBox + * @child: the child + * + * Sets the end widget. + * + * Since: 3.92 + */ void gtk_center_box_set_end_widget (GtkCenterBox *self, GtkWidget *child) @@ -207,18 +306,48 @@ gtk_center_box_set_end_widget (GtkCenterBox *self, gtk_widget_set_parent (child, GTK_WIDGET (self)); } +/** + * gtk_center_box_get_start_widget: + * @self: a #GtkCenterBox + * + * Gets the start widget. + * + * Returns: the start widget. + * + * Since: 3.92 + */ GtkWidget * gtk_center_box_get_start_widget (GtkCenterBox *self) { return self->start_widget; } +/** + * gtk_center_box_get_center_widget: + * @self: a #GtkCenterBox + * + * Gets the center widget. + * + * Returns: the center widget. + * + * Since: 3.92 + */ GtkWidget * gtk_center_box_get_center_widget (GtkCenterBox *self) { return self->center_widget; } +/** + * gtk_center_box_get_end_widget: + * @self: a #GtkCenterBox + * + * Gets the end widget. + * + * Returns: the end widget. + * + * Since: 3.92 + */ GtkWidget * gtk_center_box_get_end_widget (GtkCenterBox *self) { |