summaryrefslogtreecommitdiff
path: root/gtk/gtkcheckbutton.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-05-02 10:29:59 -0400
committerMatthias Clasen <mclasen@redhat.com>2020-05-04 22:53:07 -0400
commit183431c91821186fd7c35e4502efdaf96a516e5d (patch)
treeb5d48fbc62965cb51915c5df144f4e274c67b53b /gtk/gtkcheckbutton.c
parentaf6e0ee2b38e08dffadfee64c4731ae510df6bf7 (diff)
downloadgtk+-183431c91821186fd7c35e4502efdaf96a516e5d.tar.gz
checkbutton: Modernize
Stop implementing GtkContainer, and just use a box layout instead of doing our own thing manually.
Diffstat (limited to 'gtk/gtkcheckbutton.c')
-rw-r--r--gtk/gtkcheckbutton.c147
1 files changed, 3 insertions, 144 deletions
diff --git a/gtk/gtkcheckbutton.c b/gtk/gtkcheckbutton.c
index 5411ef5d9c..0704a8fdfa 100644
--- a/gtk/gtkcheckbutton.c
+++ b/gtk/gtkcheckbutton.c
@@ -37,6 +37,7 @@
#include "gtkcssnumbervalueprivate.h"
#include "gtkradiobutton.h"
#include "gtkbuiltiniconprivate.h"
+#include "gtkboxlayout.h"
/**
@@ -110,7 +111,7 @@ gtk_check_button_update_node_state (GtkWidget *widget)
static void
gtk_check_button_state_flags_changed (GtkWidget *widget,
- GtkStateFlags previous_state_flags)
+ GtkStateFlags previous_state_flags)
{
gtk_check_button_update_node_state (widget);
@@ -128,121 +129,6 @@ gtk_check_button_finalize (GObject *object)
}
static void
-gtk_check_button_add (GtkContainer *container,
- GtkWidget *widget)
-{
- _gtk_bin_set_child (GTK_BIN (container), widget);
-
- if (gtk_widget_get_direction (GTK_WIDGET (container)) == GTK_TEXT_DIR_RTL)
- gtk_widget_insert_after (widget, GTK_WIDGET (container), NULL);
- else
- gtk_widget_set_parent (widget, GTK_WIDGET (container));
-}
-
-static void
-gtk_check_button_remove (GtkContainer *container,
- GtkWidget *widget)
-{
- _gtk_bin_set_child (GTK_BIN (container), NULL);
- gtk_widget_unparent (widget);
-}
-
-static void
-gtk_check_button_measure (GtkWidget *widget,
- GtkOrientation orientation,
- int for_size,
- int *minimum,
- int *natural,
- int *minimum_baseline,
- int *natural_baseline)
-{
- GtkCheckButtonPrivate *priv = gtk_check_button_get_instance_private (GTK_CHECK_BUTTON (widget));
- GtkWidget *child;
- int indicator_min = 0;
- int indicator_nat = 0;
- int child_min = 0;
- int child_nat = 0;
-
-
- *minimum = 0;
- *natural = 0;
-
- if (priv->draw_indicator)
- {
- gtk_widget_measure (priv->indicator_widget, orientation, for_size,
- &indicator_min, &indicator_nat, NULL, NULL);
- }
-
- child = gtk_bin_get_child (GTK_BIN (widget));
-
- if (child)
- {
- gtk_widget_measure (child, orientation, for_size,
- &child_min, &child_nat, minimum_baseline, natural_baseline);
- }
-
- if (orientation == GTK_ORIENTATION_HORIZONTAL)
- {
- *minimum = indicator_min + child_min;
- *natural = indicator_nat + child_nat;
- }
- else /* VERTICAL */
- {
- *minimum = MAX (indicator_min, child_min);
- *natural = MAX (indicator_nat, child_nat);
-
- }
-}
-
-static void
-gtk_check_button_size_allocate (GtkWidget *widget,
- int width,
- int height,
- int baseline)
-{
- GtkCheckButtonPrivate *priv = gtk_check_button_get_instance_private (GTK_CHECK_BUTTON (widget));
- GtkAllocation child_alloc = { 0 };
- GtkWidget *child;
- gboolean is_rtl = _gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
- int x = 0;
-
- if (priv->draw_indicator)
- {
- child_alloc.y = 0;
- child_alloc.height = height;
-
- gtk_widget_measure (priv->indicator_widget, GTK_ORIENTATION_HORIZONTAL, -1,
- &child_alloc.width, NULL, NULL, NULL);
-
- if (is_rtl)
- {
- x = 0;
- child_alloc.x = width - child_alloc.width;
- }
- else
- {
- x = child_alloc.width;
- child_alloc.x = 0;
- }
-
- gtk_widget_size_allocate (priv->indicator_widget, &child_alloc, baseline);
- }
-
- child = gtk_bin_get_child (GTK_BIN (widget));
- if (child)
- {
- child_alloc.x = x;
- child_alloc.y = 0;
- child_alloc.width = width - child_alloc.width; /* Indicator width */
- child_alloc.height = height;
-
- gtk_widget_size_allocate (child, &child_alloc, baseline);
- }
-}
-
-
-
-static void
gtk_check_button_set_property (GObject *object,
guint prop_id,
const GValue *value,
@@ -286,44 +172,16 @@ gtk_check_button_get_property (GObject *object,
}
static void
-gtk_check_button_direction_changed (GtkWidget *widget,
- GtkTextDirection previous_direction)
-{
- GtkCheckButtonPrivate *priv = gtk_check_button_get_instance_private (GTK_CHECK_BUTTON (widget));
-
- if (!priv->indicator_widget)
- return;
-
- if (previous_direction == GTK_TEXT_DIR_LTR)
- {
- /* Now RTL -> Move the indicator to the right */
- gtk_widget_insert_before (priv->indicator_widget, widget, NULL);
- }
- else
- {
- /* Now LTR -> Move the indicator to the left */
- gtk_widget_insert_after (priv->indicator_widget, widget, NULL);
- }
-}
-
-static void
gtk_check_button_class_init (GtkCheckButtonClass *class)
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
- GtkContainerClass *container_class = GTK_CONTAINER_CLASS (class);
object_class->finalize = gtk_check_button_finalize;
object_class->set_property = gtk_check_button_set_property;
object_class->get_property = gtk_check_button_get_property;
- widget_class->measure = gtk_check_button_measure;
- widget_class->size_allocate = gtk_check_button_size_allocate;
widget_class->state_flags_changed = gtk_check_button_state_flags_changed;
- widget_class->direction_changed = gtk_check_button_direction_changed;
-
- container_class->add = gtk_check_button_add;
- container_class->remove = gtk_check_button_remove;
props[PROP_DRAW_INDICATOR] =
g_param_spec_boolean ("draw-indicator",
@@ -341,6 +199,7 @@ gtk_check_button_class_init (GtkCheckButtonClass *class)
g_object_class_install_properties (object_class, NUM_PROPERTIES, props);
+ gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT);
gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_CHECK_BOX);
gtk_widget_class_set_css_name (widget_class, I_("checkbutton"));
}