revealer: Stop calculating paddings ourselves

GtkWidget does it not for all widgets.
This commit is contained in:
Timm Bäder
2017-05-05 18:56:48 +02:00
committed by Matthias Clasen
parent 04fcb1f17f
commit cd6a8bff8f

View File

@@ -112,18 +112,6 @@ static void gtk_revealer_snapshot (GtkWidget
G_DEFINE_TYPE_WITH_PRIVATE (GtkRevealer, gtk_revealer, GTK_TYPE_BIN)
static void
gtk_revealer_get_padding (GtkRevealer *revealer,
GtkBorder *padding)
{
GtkWidget *widget = GTK_WIDGET (revealer);
GtkStyleContext *context;
context = gtk_widget_get_style_context (widget);
gtk_style_context_get_padding (context, padding);
}
static void
gtk_revealer_init (GtkRevealer *revealer)
{
@@ -317,17 +305,10 @@ gtk_revealer_get_child_allocation (GtkRevealer *revealer,
{
GtkWidget *child;
GtkRevealerTransitionType transition;
GtkBorder padding;
gint vertical_padding, horizontal_padding;
g_return_if_fail (revealer != NULL);
g_return_if_fail (allocation != NULL);
/* See explanation on gtk_revealer_real_size_allocate */
gtk_revealer_get_padding (revealer, &padding);
vertical_padding = padding.top + padding.bottom;
horizontal_padding = padding.left + padding.right;
child_allocation->x = 0;
child_allocation->y = 0;
child_allocation->width = 0;
@@ -340,16 +321,16 @@ gtk_revealer_get_child_allocation (GtkRevealer *revealer,
if (transition == GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT ||
transition == GTK_REVEALER_TRANSITION_TYPE_SLIDE_RIGHT)
gtk_widget_measure (child, GTK_ORIENTATION_HORIZONTAL,
MAX (0, allocation->height - vertical_padding),
MAX (0, allocation->height),
NULL, &child_allocation->width, NULL, NULL);
else
gtk_widget_measure (child, GTK_ORIENTATION_VERTICAL,
MAX (0, allocation->width - horizontal_padding),
MAX (0, allocation->width),
NULL, &child_allocation->height, NULL, NULL);
}
child_allocation->width = MAX (child_allocation->width, allocation->width - horizontal_padding);
child_allocation->height = MAX (child_allocation->height, allocation->height - vertical_padding);
child_allocation->width = MAX (child_allocation->width, allocation->width);
child_allocation->height = MAX (child_allocation->height, allocation->height);
}
static void
@@ -361,7 +342,6 @@ gtk_revealer_real_realize (GtkWidget *widget)
GtkAllocation child_allocation;
GtkWidget *child;
GtkRevealerTransitionType transition;
GtkBorder padding;
GTK_WIDGET_CLASS (gtk_revealer_parent_class)->realize (widget);
@@ -369,24 +349,22 @@ gtk_revealer_real_realize (GtkWidget *widget)
gtk_revealer_get_child_allocation (revealer, &allocation, &child_allocation);
gtk_revealer_get_padding (revealer, &padding);
/* See explanation on gtk_revealer_real_size_allocate */
transition = effective_transition (revealer);
if (transition == GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN)
{
child_allocation.y = allocation.height - child_allocation.height - padding.bottom;
child_allocation.x = padding.left;
child_allocation.y = allocation.height - child_allocation.height;
child_allocation.x = 0;
}
else if (transition == GTK_REVEALER_TRANSITION_TYPE_SLIDE_RIGHT)
{
child_allocation.y = padding.top;
child_allocation.x = allocation.width - child_allocation.width - padding.right;
child_allocation.y = 0;
child_allocation.x = allocation.width - child_allocation.width;
}
else
{
child_allocation.y = padding.top;
child_allocation.x = padding.left;
child_allocation.y = 0;
child_allocation.x = 0;
}
priv->bin_window =
@@ -440,7 +418,6 @@ gtk_revealer_real_size_allocate (GtkWidget *widget,
GtkWidget *child;
int bin_x, bin_y;
GtkRevealerTransitionType transition;
GtkBorder padding;
GtkAllocation clip = *allocation;
g_return_if_fail (allocation != NULL);
@@ -456,7 +433,6 @@ gtk_revealer_real_size_allocate (GtkWidget *widget,
if (gtk_widget_get_realized (widget))
{
gtk_revealer_get_padding (revealer, &padding);
bin_x = 0;
bin_y = 0;
@@ -485,19 +461,14 @@ gtk_revealer_real_size_allocate (GtkWidget *widget,
*/
if (transition == GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN)
{
bin_y = allocation->height - child_allocation.height - padding.bottom;
bin_x = padding.left;
bin_y = allocation->height - child_allocation.height;
bin_x = 0;
}
else if (transition == GTK_REVEALER_TRANSITION_TYPE_SLIDE_RIGHT)
{
bin_y = padding.top;
bin_x = allocation->width - child_allocation.width - padding.right;
bin_y = 0;
bin_x = allocation->width - child_allocation.width;
}
else
{
bin_x = padding.left;
bin_y = padding.top;
}
gdk_window_move_resize (priv->bin_window,
bin_x + allocation->x,
@@ -686,69 +657,39 @@ gtk_revealer_get_child_revealed (GtkRevealer *revealer)
*/
static void
set_height_with_paddings (GtkRevealer *revealer,
gint preferred_minimum_height,
gint preferred_natural_height,
gint *minimum_height_out,
gint *natural_height_out)
set_height (GtkRevealer *revealer,
gint *minimum_height,
gint *natural_height)
{
GtkRevealerPrivate *priv = gtk_revealer_get_instance_private (revealer);
gint minimum_height;
gint natural_height;
GtkRevealerTransitionType transition;
GtkBorder padding;
gint vertical_padding;
gtk_revealer_get_padding (revealer, &padding);
vertical_padding = padding.top + padding.bottom;
minimum_height = preferred_minimum_height + vertical_padding;
natural_height = preferred_natural_height + vertical_padding;
transition = effective_transition (revealer);
if (transition == GTK_REVEALER_TRANSITION_TYPE_NONE ||
transition == GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP ||
transition == GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN)
{
/* Padding are included in the animation */
minimum_height = round (minimum_height * priv->current_pos);
natural_height = round (natural_height * priv->current_pos);
*minimum_height = round (*minimum_height * priv->current_pos);
*natural_height = round (*natural_height * priv->current_pos);
}
*minimum_height_out = MIN (minimum_height, natural_height);
*natural_height_out = natural_height;
}
static void
set_width_with_paddings (GtkRevealer *revealer,
gint preferred_minimum_width,
gint preferred_natural_width,
gint *minimum_width_out,
gint *natural_width_out)
set_width (GtkRevealer *revealer,
gint *minimum_width,
gint *natural_width)
{
GtkRevealerPrivate *priv = gtk_revealer_get_instance_private (revealer);
gint minimum_width;
gint natural_width;
GtkRevealerTransitionType transition;
GtkBorder padding;
gint horizontal_padding;
gtk_revealer_get_padding (revealer, &padding);
horizontal_padding = padding.left + padding.right;
minimum_width = preferred_minimum_width + horizontal_padding;
natural_width = preferred_natural_width + horizontal_padding;
transition = effective_transition (revealer);
if (transition == GTK_REVEALER_TRANSITION_TYPE_NONE ||
transition == GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT ||
transition == GTK_REVEALER_TRANSITION_TYPE_SLIDE_RIGHT)
{
/* Paddings are included in the animation */
minimum_width = round (minimum_width * priv->current_pos);
natural_width = round (natural_width * priv->current_pos);
*minimum_width = round (*minimum_width * priv->current_pos);
*natural_width = round (*natural_width * priv->current_pos);
}
*minimum_width_out = MIN (minimum_width, natural_width);
*natural_width_out = natural_width;
}
static void
@@ -760,16 +701,15 @@ gtk_revealer_measure (GtkWidget *widget,
int *minimum_baseline,
int *natural_baseline)
{
int min_size, nat_size;
GTK_WIDGET_CLASS (gtk_revealer_parent_class)->measure (widget,
orientation,
for_size,
&min_size, &nat_size,
minimum, natural,
NULL, NULL);
if (orientation == GTK_ORIENTATION_HORIZONTAL)
set_width_with_paddings (GTK_REVEALER (widget), min_size, nat_size, minimum, natural);
set_width (GTK_REVEALER (widget), minimum, natural);
else
set_height_with_paddings (GTK_REVEALER (widget), min_size, nat_size, minimum, natural);
set_height (GTK_REVEALER (widget), minimum, natural);
}
static void