mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-01 16:30:15 +00:00
expander: Let gadget render focus
This lets us drop lots of allocation fiddling, and reduces the code that is consulting the style properties we want to get rid of.
This commit is contained in:
parent
d81f8c1025
commit
53787d29ad
@ -208,8 +208,6 @@ static void gtk_expander_forall (GtkContainer *container,
|
||||
|
||||
static void gtk_expander_activate (GtkExpander *expander);
|
||||
|
||||
static void get_expander_bounds (GtkExpander *expander,
|
||||
GdkRectangle *rect);
|
||||
|
||||
/* GtkBuildable */
|
||||
static void gtk_expander_buildable_init (GtkBuildableIface *iface);
|
||||
@ -695,60 +693,6 @@ gtk_expander_unrealize (GtkWidget *widget)
|
||||
GTK_WIDGET_CLASS (gtk_expander_parent_class)->unrealize (widget);
|
||||
}
|
||||
|
||||
static void
|
||||
get_expander_bounds (GtkExpander *expander,
|
||||
GdkRectangle *rect)
|
||||
{
|
||||
GtkAllocation allocation;
|
||||
GtkWidget *widget;
|
||||
GtkExpanderPrivate *priv;
|
||||
gint border_width;
|
||||
gint expander_size;
|
||||
gint expander_spacing;
|
||||
gboolean ltr;
|
||||
|
||||
widget = GTK_WIDGET (expander);
|
||||
priv = expander->priv;
|
||||
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
|
||||
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
|
||||
|
||||
gtk_widget_style_get (widget,
|
||||
"expander-size", &expander_size,
|
||||
"expander-spacing", &expander_spacing,
|
||||
NULL);
|
||||
|
||||
ltr = gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL;
|
||||
|
||||
rect->x = border_width;
|
||||
rect->y = border_width;
|
||||
|
||||
if (ltr)
|
||||
rect->x += expander_spacing;
|
||||
else
|
||||
rect->x += allocation.width - border_width -
|
||||
expander_spacing - expander_size;
|
||||
|
||||
if (priv->label_widget && gtk_widget_get_visible (priv->label_widget))
|
||||
{
|
||||
GtkAllocation label_allocation;
|
||||
|
||||
gtk_widget_get_allocation (priv->label_widget, &label_allocation);
|
||||
|
||||
if (expander_size < label_allocation.height)
|
||||
rect->y += (label_allocation.height - expander_size) / 2;
|
||||
else
|
||||
rect->y += expander_spacing;
|
||||
}
|
||||
else
|
||||
{
|
||||
rect->y += expander_spacing;
|
||||
}
|
||||
|
||||
rect->width = rect->height = expander_size;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_expander_size_allocate (GtkWidget *widget,
|
||||
GtkAllocation *allocation)
|
||||
@ -975,75 +919,7 @@ gtk_expander_render_title (GtkCssGadget *gadget,
|
||||
|
||||
gtk_css_gadget_draw (priv->arrow_gadget, cr);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_expander_paint_focus (GtkExpander *expander,
|
||||
cairo_t *cr)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
GtkExpanderPrivate *priv;
|
||||
GdkRectangle rect;
|
||||
GtkStyleContext *context;
|
||||
gint x, y, width, height;
|
||||
gint border_width;
|
||||
gint expander_size;
|
||||
gint expander_spacing;
|
||||
gboolean ltr;
|
||||
GtkAllocation allocation;
|
||||
|
||||
widget = GTK_WIDGET (expander);
|
||||
priv = expander->priv;
|
||||
|
||||
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
|
||||
gtk_widget_style_get (widget,
|
||||
"expander-size", &expander_size,
|
||||
"expander-spacing", &expander_spacing,
|
||||
NULL);
|
||||
|
||||
ltr = gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL;
|
||||
|
||||
width = height = 0;
|
||||
|
||||
if (priv->label_widget)
|
||||
{
|
||||
if (gtk_widget_get_visible (priv->label_widget))
|
||||
{
|
||||
GtkAllocation label_allocation;
|
||||
|
||||
gtk_widget_get_allocation (priv->label_widget, &label_allocation);
|
||||
width = label_allocation.width;
|
||||
height = label_allocation.height;
|
||||
}
|
||||
|
||||
x = border_width;
|
||||
y = border_width;
|
||||
|
||||
if (ltr)
|
||||
{
|
||||
x += expander_spacing * 2 + expander_size;
|
||||
}
|
||||
else
|
||||
{
|
||||
x += allocation.width - 2 * border_width
|
||||
- expander_spacing * 2 - expander_size - width;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
get_expander_bounds (expander, &rect);
|
||||
|
||||
x = rect.x;
|
||||
y = rect.y;
|
||||
width = rect.width;
|
||||
height = rect.height;
|
||||
}
|
||||
|
||||
context = gtk_widget_get_style_context (widget);
|
||||
gtk_render_focus (context, cr, x, y, width, height);
|
||||
return gtk_widget_has_visible_focus (widget);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -1071,9 +947,6 @@ gtk_expander_render (GtkCssGadget *gadget,
|
||||
|
||||
GTK_WIDGET_CLASS (gtk_expander_parent_class)->draw (widget, cr);
|
||||
|
||||
if (gtk_widget_has_visible_focus (widget))
|
||||
gtk_expander_paint_focus (expander, cr);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user