summaryrefslogtreecommitdiff
path: root/gtk/gtkcenterbox.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2017-06-01 17:56:32 -0700
committerMatthias Clasen <mclasen@redhat.com>2017-06-04 21:20:27 -0400
commite936a35d66ce663d9632aa239b0f805c004ad5af (patch)
tree185d0a6d432dab4916931fa45351b76661a657d9 /gtk/gtkcenterbox.c
parente32f15be4f9ae4ed716300b7cb5de69bbaa19ca1 (diff)
downloadgtk+-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.c139
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)
{