[gtk+/wip/baedert/drawing: 61/348] modelbutton: Stop using the button's gadget
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/baedert/drawing: 61/348] modelbutton: Stop using the button's gadget
- Date: Sat, 8 Jul 2017 10:35:56 +0000 (UTC)
commit 70dae09c8b928358e368c36548c56148e78f6d6c
Author: Timm Bäder <mail baedert org>
Date: Thu May 4 15:35:47 2017 +0200
modelbutton: Stop using the button's gadget
gtk/gtkmodelbutton.c | 420 ++++++++++++++++++++++----------------------------
1 files changed, 185 insertions(+), 235 deletions(-)
---
diff --git a/gtk/gtkmodelbutton.c b/gtk/gtkmodelbutton.c
index 28489b0..9f939e1 100644
--- a/gtk/gtkmodelbutton.c
+++ b/gtk/gtkmodelbutton.c
@@ -203,8 +203,6 @@ gtk_model_button_update_state (GtkModelButton *button)
state = gtk_widget_get_state_flags (GTK_WIDGET (button));
indicator_state = state;
- gtk_css_gadget_set_state (button->gadget, state);
-
if (button->role == GTK_BUTTON_ROLE_CHECK)
{
if (button->active && !button->menu_name)
@@ -240,10 +238,10 @@ gtk_model_button_update_state (GtkModelButton *button)
gtk_builtin_icon_set_image (GTK_BUILTIN_ICON (button->indicator_gadget), image_type);
- if (button->iconic)
- gtk_css_gadget_set_state (button->gadget, indicator_state);
- else
- gtk_css_gadget_set_state (button->gadget, state);
+ /*if (button->iconic)*/
+ /*gtk_css_gadget_set_state (button->gadget, indicator_state);*/
+ /*else*/
+ /*gtk_css_gadget_set_state (button->gadget, state);*/
gtk_css_gadget_set_state (button->indicator_gadget, indicator_state);
}
@@ -467,16 +465,16 @@ gtk_model_button_set_iconic (GtkModelButton *button,
if (iconic)
{
gtk_css_node_set_name (widget_node, I_("button"));
- gtk_css_gadget_add_class (button->gadget, "model");
- gtk_css_gadget_add_class (button->gadget, "image-button");
+ /*gtk_css_gadget_add_class (button->gadget, "model");*/
+ /*gtk_css_gadget_add_class (button->gadget, "image-button");*/
gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NORMAL);
gtk_css_node_set_visible (indicator_node, FALSE);
}
else
{
gtk_css_node_set_name (widget_node, I_("modelbutton"));
- gtk_css_gadget_remove_class (button->gadget, "model");
- gtk_css_gadget_remove_class (button->gadget, "image-button");
+ /*gtk_css_gadget_remove_class (button->gadget, "model");*/
+ /*gtk_css_gadget_remove_class (button->gadget, "image-button");*/
gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
gtk_css_node_set_visible (indicator_node,
button->role != GTK_BUTTON_ROLE_NORMAL ||
@@ -632,146 +630,129 @@ needs_indicator (GtkModelButton *button)
}
static void
-gtk_model_button_measure_ (GtkWidget *widget,
- GtkOrientation orientation,
- int for_size,
- int *minimum,
- int *natural,
- int *minimum_baseline,
- int *natural_baseline)
-{
- GtkCssGadget *gadget;
-
- if (GTK_MODEL_BUTTON (widget)->iconic)
- gadget = GTK_BUTTON (widget)->priv->gadget;
- else
- gadget = GTK_MODEL_BUTTON (widget)->gadget;
-
- gtk_css_gadget_get_preferred_size (gadget,
- orientation,
- for_size,
- minimum, natural,
- minimum_baseline, natural_baseline);
-}
-
-static void
-gtk_model_button_measure (GtkCssGadget *gadget,
+gtk_model_button_measure (GtkWidget *widget,
GtkOrientation orientation,
int for_size,
int *minimum,
int *natural,
int *minimum_baseline,
- int *natural_baseline,
- gpointer data)
+ int *natural_baseline)
{
- GtkWidget *widget;
- GtkModelButton *button;
- GtkWidget *child;
-
- widget = gtk_css_gadget_get_owner (gadget);
- button = GTK_MODEL_BUTTON (widget);
- child = gtk_bin_get_child (GTK_BIN (widget));
-
- if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ if (GTK_MODEL_BUTTON (widget)->iconic)
{
- gint check_min, check_nat;
-
- gtk_css_gadget_get_preferred_size (button->indicator_gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- &check_min, &check_nat,
- NULL, NULL);
-
- if (child && gtk_widget_get_visible (child))
- {
- gtk_widget_measure (child,
- orientation,
- for_size,
- minimum, natural,
- minimum_baseline, natural_baseline);
- }
- else
- {
- *minimum = 0;
- *natural = 0;
- }
-
- if (button->centered)
- {
- *minimum += 2 * check_min;
- *natural += 2 * check_nat;
- }
- else if (needs_indicator (button))
- {
- *minimum += check_min;
- *natural += check_nat;
- }
+ GTK_WIDGET_CLASS (gtk_model_button_parent_class)->measure (widget, orientation, for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
}
else
{
- gint check_min, check_nat;
+ GtkModelButton *button;
+ GtkWidget *child;
- gtk_css_gadget_get_preferred_size (button->indicator_gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- &check_min, &check_nat,
- NULL, NULL);
+ button = GTK_MODEL_BUTTON (widget);
+ child = gtk_bin_get_child (GTK_BIN (widget));
- if (child && gtk_widget_get_visible (child))
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
{
- gint child_min, child_nat;
- gint child_min_baseline = -1, child_nat_baseline = -1;
+ gint check_min, check_nat;
+
+ gtk_css_gadget_get_preferred_size (button->indicator_gadget,
+ GTK_ORIENTATION_HORIZONTAL,
+ -1,
+ &check_min, &check_nat,
+ NULL, NULL);
- if (for_size > -1)
+ if (child && gtk_widget_get_visible (child))
{
- if (button->centered)
- for_size -= 2 * check_nat;
- else if (needs_indicator (button))
- for_size -= check_nat;
+ gtk_widget_measure (child,
+ orientation,
+ for_size,
+ minimum, natural,
+ minimum_baseline, natural_baseline);
+ }
+ else
+ {
+ *minimum = 0;
+ *natural = 0;
}
-
- gtk_widget_measure (child, GTK_ORIENTATION_VERTICAL,
- for_size,
- &child_min, &child_nat,
- &child_min_baseline, &child_nat_baseline);
if (button->centered)
{
- *minimum = MAX (2 * check_min, child_min);
- *natural = MAX (2 * check_nat, child_nat);
+ *minimum += 2 * check_min;
+ *natural += 2 * check_nat;
}
else if (needs_indicator (button))
{
- *minimum = MAX (check_min, child_min);
- *natural = MAX (check_nat, child_nat);
+ *minimum += check_min;
+ *natural += check_nat;
}
- else
- {
- *minimum = child_min;
- *natural = child_nat;
- }
-
- if (minimum_baseline && child_min_baseline >= 0)
- *minimum_baseline = child_min_baseline + (*minimum - child_min) / 2;
- if (natural_baseline && child_nat_baseline >= 0)
- *natural_baseline = child_nat_baseline + (*natural - child_nat) / 2;
}
else
{
- if (button->centered)
- {
- *minimum = 2 * check_min;
- *natural = 2 * check_nat;
- }
- else if (needs_indicator (button))
+ gint check_min, check_nat;
+
+ gtk_css_gadget_get_preferred_size (button->indicator_gadget,
+ GTK_ORIENTATION_VERTICAL,
+ -1,
+ &check_min, &check_nat,
+ NULL, NULL);
+
+ if (child && gtk_widget_get_visible (child))
{
- *minimum = check_min;
- *natural = check_nat;
+ gint child_min, child_nat;
+ gint child_min_baseline = -1, child_nat_baseline = -1;
+
+ if (for_size > -1)
+ {
+ if (button->centered)
+ for_size -= 2 * check_nat;
+ else if (needs_indicator (button))
+ for_size -= check_nat;
+ }
+
+ gtk_widget_measure (child, GTK_ORIENTATION_VERTICAL,
+ for_size,
+ &child_min, &child_nat,
+ &child_min_baseline, &child_nat_baseline);
+
+ if (button->centered)
+ {
+ *minimum = MAX (2 * check_min, child_min);
+ *natural = MAX (2 * check_nat, child_nat);
+ }
+ else if (needs_indicator (button))
+ {
+ *minimum = MAX (check_min, child_min);
+ *natural = MAX (check_nat, child_nat);
+ }
+ else
+ {
+ *minimum = child_min;
+ *natural = child_nat;
+ }
+
+ if (minimum_baseline && child_min_baseline >= 0)
+ *minimum_baseline = child_min_baseline + (*minimum - child_min) / 2;
+ if (natural_baseline && child_nat_baseline >= 0)
+ *natural_baseline = child_nat_baseline + (*natural - child_nat) / 2;
}
else
{
- *minimum = 0;
- *natural = 0;
+ if (button->centered)
+ {
+ *minimum = 2 * check_min;
+ *natural = 2 * check_nat;
+ }
+ else if (needs_indicator (button))
+ {
+ *minimum = check_min;
+ *natural = check_nat;
+ }
+ else
+ {
+ *minimum = 0;
+ *natural = 0;
+ }
}
}
}
@@ -781,139 +762,108 @@ static void
gtk_model_button_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
- GtkCssGadget *gadget;
- GdkRectangle clip;
-
if (GTK_MODEL_BUTTON (widget)->iconic)
- gadget = GTK_BUTTON (widget)->priv->gadget;
+ {
+ GTK_WIDGET_CLASS (gtk_model_button_parent_class)->size_allocate (widget, allocation);
+ }
else
- gadget = GTK_MODEL_BUTTON (widget)->gadget;
+ {
+ GtkAllocation clip = *allocation;
+ GtkAllocation child_clip = *allocation;
+ GtkModelButton *button;
+ GtkAllocation child_allocation;
+ GtkWidget *child;
+ gint check_min_width, check_nat_width;
+ gint check_min_height, check_nat_height;
+ GdkRectangle check_clip;
+ int baseline;
- gtk_widget_set_allocation (widget, allocation);
- gtk_css_gadget_allocate (gadget,
- allocation,
- gtk_widget_get_allocated_baseline (widget),
- &clip);
+ button = GTK_MODEL_BUTTON (widget);
+ child = gtk_bin_get_child (GTK_BIN (widget));
- gtk_widget_set_clip (widget, &clip);
-}
-static void
-gtk_model_button_allocate (GtkCssGadget *gadget,
- const GtkAllocation *allocation,
- int baseline,
- GtkAllocation *out_clip,
- gpointer unused)
-{
- GtkWidget *widget;
- GtkModelButton *button;
- GtkAllocation child_allocation;
- GtkWidget *child;
- gint check_min_width, check_nat_width;
- gint check_min_height, check_nat_height;
- GdkRectangle check_clip;
-
- widget = gtk_css_gadget_get_owner (gadget);
- button = GTK_MODEL_BUTTON (widget);
- child = gtk_bin_get_child (GTK_BIN (widget));
-
-
-
- gtk_css_gadget_get_preferred_size (button->indicator_gadget,
- GTK_ORIENTATION_HORIZONTAL,
- -1,
- &check_min_width, &check_nat_width,
- NULL, NULL);
- gtk_css_gadget_get_preferred_size (button->indicator_gadget,
- GTK_ORIENTATION_VERTICAL,
- -1,
- &check_min_height, &check_nat_height,
- NULL, NULL);
-
- if (indicator_is_left (widget))
- child_allocation.x = allocation->x;
- else
- child_allocation.x = allocation->x + allocation->width - check_nat_width;
- child_allocation.y = allocation->y + (allocation->height - check_nat_height) / 2;
- child_allocation.width = check_nat_width;
- child_allocation.height = check_nat_height;
- gtk_css_gadget_allocate (button->indicator_gadget,
- &child_allocation,
- baseline,
- &check_clip);
+ gtk_css_gadget_get_preferred_size (button->indicator_gadget,
+ GTK_ORIENTATION_HORIZONTAL,
+ -1,
+ &check_min_width, &check_nat_width,
+ NULL, NULL);
+ gtk_css_gadget_get_preferred_size (button->indicator_gadget,
+ GTK_ORIENTATION_VERTICAL,
+ -1,
+ &check_min_height, &check_nat_height,
+ NULL, NULL);
- if (child && gtk_widget_get_visible (child))
- {
- GtkBorder border = { 0, };
+ if (indicator_is_left (widget))
+ child_allocation.x = allocation->x;
+ else
+ child_allocation.x = allocation->x + allocation->width - check_nat_width;
+ child_allocation.y = allocation->y + (allocation->height - check_nat_height) / 2;
+ child_allocation.width = check_nat_width;
+ child_allocation.height = check_nat_height;
- if (button->centered)
- {
- border.left = check_nat_width;
- border.right = check_nat_width;
- }
- else if (needs_indicator (button))
+ gtk_css_gadget_allocate (button->indicator_gadget,
+ &child_allocation,
+ gtk_widget_get_allocated_baseline (widget),
+ &check_clip);
+
+ if (child && gtk_widget_get_visible (child))
{
- if (indicator_is_left (widget))
- border.left += check_nat_width;
- else
- border.right += check_nat_width;
- }
+ GtkBorder border = { 0, };
+
+ if (button->centered)
+ {
+ border.left = check_nat_width;
+ border.right = check_nat_width;
+ }
+ else if (needs_indicator (button))
+ {
+ if (indicator_is_left (widget))
+ border.left += check_nat_width;
+ else
+ border.right += check_nat_width;
+ }
- child_allocation.x = allocation->x + border.left;
- child_allocation.y = allocation->y + border.top;
- child_allocation.width = allocation->width - border.left - border.right;
- child_allocation.height = allocation->height - border.top - border.bottom;
+ child_allocation.x = allocation->x + border.left;
+ child_allocation.y = allocation->y + border.top;
+ child_allocation.width = allocation->width - border.left - border.right;
+ child_allocation.height = allocation->height - border.top - border.bottom;
- baseline = gtk_widget_get_allocated_baseline (widget);
- if (baseline != -1)
- baseline -= border.top;
+ baseline = gtk_widget_get_allocated_baseline (widget);
+ if (baseline != -1)
+ baseline -= border.top;
- gtk_widget_size_allocate_with_baseline (child, &child_allocation, baseline);
- }
+ gtk_widget_size_allocate_with_baseline (child, &child_allocation, baseline);
+ }
- gtk_container_get_children_clip (GTK_CONTAINER (widget), out_clip);
- gdk_rectangle_union (out_clip, &check_clip, out_clip);
+ gtk_container_get_children_clip (GTK_CONTAINER (widget), &child_clip);
+ gdk_rectangle_union (&clip, &check_clip, &clip);
+
+ gtk_widget_set_clip (widget, &clip);
+ }
}
static void
gtk_model_button_snapshot (GtkWidget *widget,
GtkSnapshot *snapshot)
{
- GtkCssGadget *gadget;
-
if (GTK_MODEL_BUTTON (widget)->iconic)
- gadget = GTK_BUTTON (widget)->priv->gadget;
+ {
+ GTK_WIDGET_CLASS (gtk_model_button_parent_class)->snapshot (widget, snapshot);
+ }
else
- gadget = GTK_MODEL_BUTTON (widget)->gadget;
-
- gtk_css_gadget_snapshot (gadget, snapshot);
-}
-
-static gboolean
-gtk_model_button_render (GtkCssGadget *gadget,
- GtkSnapshot *snapshot,
- int x,
- int y,
- int width,
- int height,
- gpointer data)
-{
- GtkWidget *widget;
- GtkModelButton *button;
- GtkWidget *child;
-
- widget = gtk_css_gadget_get_owner (gadget);
- button = GTK_MODEL_BUTTON (widget);
+ {
+ GtkWidget *child;
+ GtkModelButton *button = GTK_MODEL_BUTTON (widget);
- if (gtk_css_node_get_visible (gtk_css_gadget_get_node (button->indicator_gadget)))
- gtk_css_gadget_snapshot (button->indicator_gadget, snapshot);
+ if (gtk_css_node_get_visible (gtk_css_gadget_get_node (button->indicator_gadget)))
+ gtk_css_gadget_snapshot (button->indicator_gadget, snapshot);
- child = gtk_bin_get_child (GTK_BIN (widget));
- if (child)
- gtk_widget_snapshot_child (widget, child, snapshot);
+ child = gtk_bin_get_child (GTK_BIN (widget));
+ if (child)
+ gtk_widget_snapshot_child (widget, child, snapshot);
+ }
- return gtk_widget_has_visible_focus (widget);
}
static void
@@ -955,7 +905,7 @@ gtk_model_button_finalize (GObject *object)
GtkModelButton *button = GTK_MODEL_BUTTON (object);
g_clear_object (&button->indicator_gadget);
- g_clear_object (&button->gadget);
+ /*g_clear_object (&button->gadget);*/
G_OBJECT_CLASS (gtk_model_button_parent_class)->finalize (object);
}
@@ -971,7 +921,7 @@ gtk_model_button_class_init (GtkModelButtonClass *class)
object_class->get_property = gtk_model_button_get_property;
object_class->set_property = gtk_model_button_set_property;
- widget_class->measure = gtk_model_button_measure_;
+ widget_class->measure = gtk_model_button_measure;
widget_class->size_allocate = gtk_model_button_size_allocate;
widget_class->snapshot = gtk_model_button_snapshot;
widget_class->destroy = gtk_model_button_destroy;
@@ -1128,14 +1078,14 @@ gtk_model_button_init (GtkModelButton *button)
widget_node = gtk_widget_get_css_node (GTK_WIDGET (button));
button->gadget = gtk_css_custom_gadget_new_for_node (widget_node,
GTK_WIDGET (button),
- gtk_model_button_measure,
- gtk_model_button_allocate,
- gtk_model_button_render,
+ NULL,
+ NULL,
+ NULL,
NULL,
NULL);
button->indicator_gadget = gtk_builtin_icon_new ("check",
GTK_WIDGET (button),
- button->gadget,
+ NULL,
NULL);
gtk_builtin_icon_set_default_size (GTK_BUILTIN_ICON (button->indicator_gadget), 16);
update_node_ordering (button);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]