diff options
| author | Matthias Clasen <mclasen@redhat.com> | 2017-06-02 00:56:32 (GMT) |
|---|---|---|
| committer | Matthias Clasen <mclasen@redhat.com> | 2017-06-05 01:20:27 (GMT) |
| commit | e936a35d66ce663d9632aa239b0f805c004ad5af (patch) | |
| tree | 185d0a6d432dab4916931fa45351b76661a657d9 | |
| parent | e32f15be4f9ae4ed716300b7cb5de69bbaa19ca1 (diff) | |
| download | gtk+-e936a35d66ce663d9632aa239b0f805c004ad5af.zip gtk+-e936a35d66ce663d9632aa239b0f805c004ad5af.tar.xz | |
Make GtkCenterBox public
It provides functionality that GtkBox used to have,
and is generally useful.
| -rw-r--r-- | docs/reference/gtk/gtk4-docs.xml | 1 | ||||
| -rw-r--r-- | docs/reference/gtk/gtk4-sections.txt | 20 | ||||
| -rw-r--r-- | gtk/gtk.h | 1 | ||||
| -rw-r--r-- | gtk/gtkactionbar.c | 2 | ||||
| -rw-r--r-- | gtk/gtkcenterbox.c | 139 | ||||
| -rw-r--r-- | gtk/gtkcenterbox.h | 60 | ||||
| -rw-r--r-- | gtk/gtkcenterboxprivate.h | 43 |
7 files changed, 217 insertions, 49 deletions
diff --git a/docs/reference/gtk/gtk4-docs.xml b/docs/reference/gtk/gtk4-docs.xml index ff1bc9c..c2f5245 100644 --- a/docs/reference/gtk/gtk4-docs.xml +++ b/docs/reference/gtk/gtk4-docs.xml @@ -68,6 +68,7 @@ <chapter id="LayoutContainers"> <title>Layout Containers</title> <xi:include href="xml/gtkbox.xml" /> + <xi:include href="xml/gtkcenterbox.xml" /> <xi:include href="xml/gtkgrid.xml" /> <xi:include href="xml/gtkrevealer.xml" /> <xi:include href="xml/gtklistbox.xml" /> diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt index 28ce710..e4bffc2 100644 --- a/docs/reference/gtk/gtk4-sections.txt +++ b/docs/reference/gtk/gtk4-sections.txt @@ -342,6 +342,26 @@ gtk_box_get_type </SECTION> <SECTION> +<FILE>gtkcenterbox</FILE> +<TITLE>GtkCenterBox</TITLE> +GtkCenterBox +gtk_center_box_new +gtk_center_box_set_start_widget +gtk_center_box_set_center_widget +gtk_center_box_set_end_widget +gtk_center_box_get_start_widget +gtk_center_box_get_center_widget +gtk_center_box_get_end_widget +<PRIVATE> +GTK_TYPE_CENTER_BOX +GTK_CENTER_BOX +GTK_CENTER_BOX_CLASS +GTK_IS_CENTER_BOX +GTK_IS_CENTER_BOX_CLASS +GTK_CENTER_BOX_GET_CLASS +</SECTION> + +<SECTION> <FILE>gtklistbox</FILE> <TITLE>GtkListBox</TITLE> GtkListBox @@ -68,6 +68,7 @@ #include <gtk/gtkcellrenderertext.h> #include <gtk/gtkcellrenderertoggle.h> #include <gtk/gtkcellview.h> +#include <gtk/gtkcenterbox.h> #include <gtk/gtkcheckbutton.h> #include <gtk/gtkcheckmenuitem.h> #include <gtk/gtkclipboard.h> diff --git a/gtk/gtkactionbar.c b/gtk/gtkactionbar.c index 986f51e..bf598b7 100644 --- a/gtk/gtkactionbar.c +++ b/gtk/gtkactionbar.c @@ -30,7 +30,7 @@ #include "gtkwidgetprivate.h" #include "gtkcontainerprivate.h" #include "gtkprivate.h" -#include "gtkcenterboxprivate.h" +#include "gtkcenterbox.h" #include <string.h> diff --git a/gtk/gtkcenterbox.c b/gtk/gtkcenterbox.c index 316126c..7970baa 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) { diff --git a/gtk/gtkcenterbox.h b/gtk/gtkcenterbox.h new file mode 100644 index 0000000..709ac60 --- /dev/null +++ b/gtk/gtkcenterbox.h @@ -0,0 +1,60 @@ +/* + * 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> + * + */ + +#ifndef __GTK_CENTER_BOX_H__ +#define __GTK_CENTER_BOX_H__ + +#include "gtkwidget.h" + +#define GTK_TYPE_CENTER_BOX (gtk_center_box_get_type ()) +#define GTK_CENTER_BOX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CENTER_BOX, GtkCenterBox)) +#define GTK_CENTER_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_CENTER_BOX, GtkCenterBoxClass)) +#define GTK_IS_CENTER_BOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CENTER_BOX)) +#define GTK_IS_CENTER_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CENTER_BOX)) +#define GTK_CENTER_BOX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CENTER_BOX, GtkCenterBoxClass)) + +typedef struct _GtkCenterBox GtkCenterBox; +typedef struct _GtkCenterBoxClass GtkCenterBoxClass; + +GDK_AVAILABLE_IN_3_92 +GType gtk_center_box_get_type (void) G_GNUC_CONST; + +GDK_AVAILABLE_IN_3_92 +GtkWidget *gtk_center_box_new (void); +GDK_AVAILABLE_IN_3_92 +void gtk_center_box_set_start_widget (GtkCenterBox *self, + GtkWidget *child); +GDK_AVAILABLE_IN_3_92 +void gtk_center_box_set_center_widget (GtkCenterBox *self, + GtkWidget *child); +GDK_AVAILABLE_IN_3_92 +void gtk_center_box_set_end_widget (GtkCenterBox *self, + GtkWidget *child); + +GDK_AVAILABLE_IN_3_92 +GtkWidget * gtk_center_box_get_start_widget (GtkCenterBox *self); +GDK_AVAILABLE_IN_3_92 +GtkWidget * gtk_center_box_get_center_widget (GtkCenterBox *self); +GDK_AVAILABLE_IN_3_92 +GtkWidget * gtk_center_box_get_end_widget (GtkCenterBox *self); + + +#endif diff --git a/gtk/gtkcenterboxprivate.h b/gtk/gtkcenterboxprivate.h deleted file mode 100644 index 445d462..0000000 --- a/gtk/gtkcenterboxprivate.h +++ /dev/null @@ -1,43 +0,0 @@ - -#ifndef __GTK_CENTER_BOX_H__ -#define __GTK_CENTER_BOX_H__ - -#include "gtkwidget.h" - -#define GTK_TYPE_CENTER_BOX (gtk_center_box_get_type ()) -#define GTK_CENTER_BOX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CENTER_BOX, GtkCenterBox)) -#define GTK_CENTER_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_CENTER_BOX, GtkCenterBoxClass)) -#define GTK_IS_CENTER_BOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CENTER_BOX)) -#define GTK_IS_CENTER_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CENTER_BOX)) -#define GTK_CENTER_BOX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CENTER_BOX, GtkCenterBoxClass)) - -typedef struct _GtkCenterBox GtkCenterBox; -typedef struct _GtkCenterBoxClass GtkCenterBoxClass; - -struct _GtkCenterBox -{ - GtkWidget parent_instance; - - GtkWidget *start_widget; - GtkWidget *center_widget; - GtkWidget *end_widget; -}; - -struct _GtkCenterBoxClass -{ - GtkWidgetClass parent_class; -}; - -GType gtk_center_box_get_type (void) G_GNUC_CONST; - -GtkWidget *gtk_center_box_new (void); -void gtk_center_box_set_start_widget (GtkCenterBox *self, GtkWidget *child); -void gtk_center_box_set_center_widget (GtkCenterBox *self, GtkWidget *child); -void gtk_center_box_set_end_widget (GtkCenterBox *self, GtkWidget *child); - -GtkWidget * gtk_center_box_get_start_widget (GtkCenterBox *self); -GtkWidget * gtk_center_box_get_center_widget (GtkCenterBox *self); -GtkWidget * gtk_center_box_get_end_widget (GtkCenterBox *self); - - -#endif |
