mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-04 01:31:13 +00:00
expander: Port to draw vfunc
This commit is contained in:
parent
e63d6dd379
commit
67299ed106
@ -87,8 +87,8 @@ static void gtk_expander_size_allocate (GtkWidget *widget,
|
||||
GtkAllocation *allocation);
|
||||
static void gtk_expander_map (GtkWidget *widget);
|
||||
static void gtk_expander_unmap (GtkWidget *widget);
|
||||
static gboolean gtk_expander_expose (GtkWidget *widget,
|
||||
GdkEventExpose *event);
|
||||
static gboolean gtk_expander_draw (GtkWidget *widget,
|
||||
cairo_t *cr);
|
||||
static gboolean gtk_expander_button_press (GtkWidget *widget,
|
||||
GdkEventButton *event);
|
||||
static gboolean gtk_expander_button_release (GtkWidget *widget,
|
||||
@ -180,7 +180,7 @@ gtk_expander_class_init (GtkExpanderClass *klass)
|
||||
widget_class->size_allocate = gtk_expander_size_allocate;
|
||||
widget_class->map = gtk_expander_map;
|
||||
widget_class->unmap = gtk_expander_unmap;
|
||||
widget_class->expose_event = gtk_expander_expose;
|
||||
widget_class->draw = gtk_expander_draw;
|
||||
widget_class->button_press_event = gtk_expander_button_press;
|
||||
widget_class->button_release_event = gtk_expander_button_release;
|
||||
widget_class->enter_notify_event = gtk_expander_enter_notify;
|
||||
@ -720,7 +720,7 @@ gtk_expander_unmap (GtkWidget *widget)
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_expander_paint_prelight (GtkExpander *expander)
|
||||
gtk_expander_paint_prelight (GtkExpander *expander, cairo_t *cr)
|
||||
{
|
||||
GtkAllocation allocation;
|
||||
GtkWidget *widget;
|
||||
@ -749,8 +749,8 @@ gtk_expander_paint_prelight (GtkExpander *expander)
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
|
||||
border_width = gtk_container_get_border_width (container);
|
||||
area.x = allocation.x + border_width;
|
||||
area.y = allocation.y + border_width;
|
||||
area.x = border_width;
|
||||
area.y = border_width;
|
||||
area.width = allocation.width - (2 * border_width);
|
||||
|
||||
if (priv->label_widget && gtk_widget_get_visible (priv->label_widget))
|
||||
@ -767,48 +767,49 @@ gtk_expander_paint_prelight (GtkExpander *expander)
|
||||
area.height = MAX (area.height, expander_size + 2 * expander_spacing);
|
||||
area.height += !interior_focus ? (focus_width + focus_pad) * 2 : 0;
|
||||
|
||||
gtk_paint_flat_box (gtk_widget_get_style (widget),
|
||||
gtk_widget_get_window (widget),
|
||||
gtk_cairo_paint_flat_box (gtk_widget_get_style (widget),
|
||||
cr,
|
||||
GTK_STATE_PRELIGHT,
|
||||
GTK_SHADOW_ETCHED_OUT,
|
||||
&area, widget, "expander",
|
||||
widget, "expander",
|
||||
area.x, area.y,
|
||||
area.width, area.height);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_expander_paint (GtkExpander *expander)
|
||||
gtk_expander_paint (GtkExpander *expander, cairo_t *cr)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
GdkRectangle clip;
|
||||
GtkAllocation allocation;
|
||||
GtkStateType state;
|
||||
|
||||
widget = GTK_WIDGET (expander);
|
||||
|
||||
get_expander_bounds (expander, &clip);
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
|
||||
state = gtk_widget_get_state (widget);
|
||||
if (expander->priv->prelight)
|
||||
{
|
||||
state = GTK_STATE_PRELIGHT;
|
||||
|
||||
gtk_expander_paint_prelight (expander);
|
||||
gtk_expander_paint_prelight (expander, cr);
|
||||
}
|
||||
|
||||
gtk_paint_expander (gtk_widget_get_style (widget),
|
||||
gtk_widget_get_window (widget),
|
||||
gtk_cairo_paint_expander (gtk_widget_get_style (widget),
|
||||
cr,
|
||||
state,
|
||||
&clip,
|
||||
widget,
|
||||
"expander",
|
||||
clip.x + clip.width / 2,
|
||||
clip.y + clip.height / 2,
|
||||
clip.x + clip.width / 2 - allocation.x,
|
||||
clip.y + clip.height / 2 - allocation.y,
|
||||
expander->priv->expander_style);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_expander_paint_focus (GtkExpander *expander,
|
||||
GdkRectangle *area)
|
||||
gtk_expander_paint_focus (GtkExpander *expander,
|
||||
cairo_t *cr)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
GtkExpanderPrivate *priv;
|
||||
@ -821,11 +822,13 @@ gtk_expander_paint_focus (GtkExpander *expander,
|
||||
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,
|
||||
"interior-focus", &interior_focus,
|
||||
@ -841,10 +844,6 @@ gtk_expander_paint_focus (GtkExpander *expander,
|
||||
|
||||
if (priv->label_widget)
|
||||
{
|
||||
GtkAllocation allocation;
|
||||
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
|
||||
if (gtk_widget_get_visible (priv->label_widget))
|
||||
{
|
||||
GtkAllocation label_allocation;
|
||||
@ -857,8 +856,8 @@ gtk_expander_paint_focus (GtkExpander *expander,
|
||||
width += 2 * focus_pad + 2 * focus_width;
|
||||
height += 2 * focus_pad + 2 * focus_width;
|
||||
|
||||
x = allocation.x + border_width;
|
||||
y = allocation.y + border_width;
|
||||
x = border_width;
|
||||
y = border_width;
|
||||
|
||||
if (ltr)
|
||||
{
|
||||
@ -881,34 +880,31 @@ gtk_expander_paint_focus (GtkExpander *expander,
|
||||
{
|
||||
get_expander_bounds (expander, &rect);
|
||||
|
||||
x = rect.x - focus_pad;
|
||||
y = rect.y - focus_pad;
|
||||
x = rect.x - allocation.x - focus_pad;
|
||||
y = rect.y - allocation.y - focus_pad;
|
||||
width = rect.width + 2 * focus_pad;
|
||||
height = rect.height + 2 * focus_pad;
|
||||
}
|
||||
|
||||
gtk_paint_focus (gtk_widget_get_style (widget),
|
||||
gtk_widget_get_window (widget),
|
||||
gtk_cairo_paint_focus (gtk_widget_get_style (widget),
|
||||
cr,
|
||||
gtk_widget_get_state (widget),
|
||||
area, widget, "expander",
|
||||
widget, "expander",
|
||||
x, y, width, height);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_expander_expose (GtkWidget *widget,
|
||||
GdkEventExpose *event)
|
||||
gtk_expander_draw (GtkWidget *widget,
|
||||
cairo_t *cr)
|
||||
{
|
||||
if (gtk_widget_is_drawable (widget))
|
||||
{
|
||||
GtkExpander *expander = GTK_EXPANDER (widget);
|
||||
GtkExpander *expander = GTK_EXPANDER (widget);
|
||||
|
||||
gtk_expander_paint (expander);
|
||||
gtk_expander_paint (expander, cr);
|
||||
|
||||
if (gtk_widget_has_focus (widget))
|
||||
gtk_expander_paint_focus (expander, &event->area);
|
||||
if (gtk_widget_has_focus (widget))
|
||||
gtk_expander_paint_focus (expander, cr);
|
||||
|
||||
GTK_WIDGET_CLASS (gtk_expander_parent_class)->expose_event (widget, event);
|
||||
}
|
||||
GTK_WIDGET_CLASS (gtk_expander_parent_class)->draw (widget, cr);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user