mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-26 05:31:07 +00:00
GtkLabel: Use style context for rendering.
This commit is contained in:
parent
0fce9342ef
commit
90dd2eb42b
@ -221,8 +221,7 @@ static void gtk_label_size_allocate (GtkWidget *widget,
|
||||
GtkAllocation *allocation);
|
||||
static void gtk_label_state_changed (GtkWidget *widget,
|
||||
GtkStateType state);
|
||||
static void gtk_label_style_set (GtkWidget *widget,
|
||||
GtkStyle *previous_style);
|
||||
static void gtk_label_style_updated (GtkWidget *widget);
|
||||
static void gtk_label_direction_changed (GtkWidget *widget,
|
||||
GtkTextDirection previous_dir);
|
||||
static gint gtk_label_draw (GtkWidget *widget,
|
||||
@ -407,7 +406,7 @@ gtk_label_class_init (GtkLabelClass *class)
|
||||
widget_class->destroy = gtk_label_destroy;
|
||||
widget_class->size_allocate = gtk_label_size_allocate;
|
||||
widget_class->state_changed = gtk_label_state_changed;
|
||||
widget_class->style_set = gtk_label_style_set;
|
||||
widget_class->style_updated = gtk_label_style_updated;
|
||||
widget_class->query_tooltip = gtk_label_query_tooltip;
|
||||
widget_class->direction_changed = gtk_label_direction_changed;
|
||||
widget_class->draw = gtk_label_draw;
|
||||
@ -3806,8 +3805,7 @@ gtk_label_state_changed (GtkWidget *widget,
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_label_style_set (GtkWidget *widget,
|
||||
GtkStyle *previous_style)
|
||||
gtk_label_style_updated (GtkWidget *widget)
|
||||
{
|
||||
GtkLabel *label = GTK_LABEL (widget);
|
||||
|
||||
@ -4065,7 +4063,8 @@ gtk_label_draw (GtkWidget *widget,
|
||||
GtkLabelPrivate *priv = label->priv;
|
||||
GtkLabelSelectionInfo *info = priv->select_info;
|
||||
GtkAllocation allocation;
|
||||
GtkStyle *style;
|
||||
GtkStyleContext *context;
|
||||
GtkStateFlags state;
|
||||
GdkWindow *window;
|
||||
gint x, y;
|
||||
|
||||
@ -4073,20 +4072,20 @@ gtk_label_draw (GtkWidget *widget,
|
||||
|
||||
if (priv->text && (*priv->text != '\0'))
|
||||
{
|
||||
GdkRGBA *bg_color, *fg_color;
|
||||
|
||||
get_layout_location (label, &x, &y);
|
||||
|
||||
style = gtk_widget_get_style (widget);
|
||||
context = gtk_widget_get_style_context (widget);
|
||||
window = gtk_widget_get_window (widget);
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
|
||||
cairo_translate (cr, -allocation.x, -allocation.y);
|
||||
|
||||
gtk_paint_layout (style,
|
||||
cr,
|
||||
gtk_widget_get_state (widget),
|
||||
FALSE,
|
||||
widget,
|
||||
"label",
|
||||
state = gtk_widget_get_state_flags (widget);
|
||||
gtk_style_context_set_state (context, state);
|
||||
|
||||
gtk_render_layout (context, cr,
|
||||
x, y,
|
||||
priv->layout);
|
||||
|
||||
@ -4121,19 +4120,28 @@ gtk_label_draw (GtkWidget *widget,
|
||||
gdk_cairo_region (cr, clip);
|
||||
cairo_clip (cr);
|
||||
|
||||
state = GTK_STATE_SELECTED;
|
||||
if (!gtk_widget_has_focus (widget))
|
||||
state = GTK_STATE_ACTIVE;
|
||||
state = GTK_STATE_FLAG_SELECTED;
|
||||
|
||||
gdk_cairo_set_source_color (cr, &style->base[state]);
|
||||
if (gtk_widget_has_focus (widget))
|
||||
state |= GTK_STATE_FLAG_FOCUSED;
|
||||
|
||||
gtk_style_context_get (context, state,
|
||||
"background-color", &bg_color,
|
||||
"color", &fg_color,
|
||||
NULL);
|
||||
|
||||
gdk_cairo_set_source_rgba (cr, bg_color);
|
||||
cairo_paint (cr);
|
||||
|
||||
gdk_cairo_set_source_color (cr, &style->text[state]);
|
||||
gdk_cairo_set_source_rgba (cr, fg_color);
|
||||
cairo_move_to (cr, x, y);
|
||||
_gtk_pango_fill_layout (cr, priv->layout);
|
||||
|
||||
cairo_restore (cr);
|
||||
cairo_region_destroy (clip);
|
||||
|
||||
gdk_rgba_free (bg_color);
|
||||
gdk_rgba_free (fg_color);
|
||||
}
|
||||
else if (info)
|
||||
{
|
||||
@ -4143,7 +4151,6 @@ gtk_label_draw (GtkWidget *widget,
|
||||
cairo_region_t *clip;
|
||||
GdkRectangle rect;
|
||||
GdkColor *text_color;
|
||||
GdkColor *base_color;
|
||||
GdkColor *link_color;
|
||||
GdkColor *visited_link_color;
|
||||
|
||||
@ -4156,6 +4163,8 @@ gtk_label_draw (GtkWidget *widget,
|
||||
|
||||
if (active_link)
|
||||
{
|
||||
GdkRGBA *bg_color;
|
||||
|
||||
range[0] = active_link->start;
|
||||
range[1] = active_link->end;
|
||||
|
||||
@ -4174,12 +4183,17 @@ gtk_label_draw (GtkWidget *widget,
|
||||
text_color = visited_link_color;
|
||||
else
|
||||
text_color = link_color;
|
||||
if (info->link_clicked)
|
||||
base_color = &style->base[GTK_STATE_ACTIVE];
|
||||
else
|
||||
base_color = &style->base[GTK_STATE_PRELIGHT];
|
||||
|
||||
gdk_cairo_set_source_color (cr, base_color);
|
||||
if (info->link_clicked)
|
||||
state = GTK_STATE_FLAG_ACTIVE;
|
||||
else
|
||||
state = GTK_STATE_FLAG_PRELIGHT;
|
||||
|
||||
gtk_style_context_get (context, state,
|
||||
"background-color", &bg_color,
|
||||
NULL);
|
||||
|
||||
gdk_cairo_set_source_rgba (cr, bg_color);
|
||||
cairo_paint (cr);
|
||||
|
||||
gdk_cairo_set_source_color (cr, text_color);
|
||||
@ -4188,6 +4202,7 @@ gtk_label_draw (GtkWidget *widget,
|
||||
|
||||
gdk_color_free (link_color);
|
||||
gdk_color_free (visited_link_color);
|
||||
gdk_rgba_free (bg_color);
|
||||
|
||||
cairo_restore (cr);
|
||||
}
|
||||
@ -4203,9 +4218,12 @@ gtk_label_draw (GtkWidget *widget,
|
||||
1);
|
||||
cairo_region_get_extents (clip, &rect);
|
||||
|
||||
gtk_paint_focus (style, cr, gtk_widget_get_state (widget),
|
||||
widget, "label",
|
||||
rect.x, rect.y, rect.width, rect.height);
|
||||
state = gtk_widget_get_state_flags (widget);
|
||||
gtk_style_context_set_state (context, state);
|
||||
|
||||
gtk_render_focus (context, cr,
|
||||
rect.x, rect.y,
|
||||
rect.width, rect.height);
|
||||
|
||||
cairo_region_destroy (clip);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user