From 02115912aa780222d4ae21c3b9d769cdfab9de02 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 19 Apr 2024 20:52:57 -0400 Subject: [PATCH 1/2] Cosmetics --- gtk/gskpango.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gtk/gskpango.c b/gtk/gskpango.c index 1c296e23da..f557c78582 100644 --- a/gtk/gskpango.c +++ b/gtk/gskpango.c @@ -343,20 +343,20 @@ gsk_pango_renderer_prepare_run (PangoRenderer *renderer, GTK_IS_TEXT_VIEW (crenderer->widget)) { GtkCssNode *node; - GtkCssValue *value; + GtkCssStyle *style; node = gtk_text_view_get_selection_node ((GtkTextView *)crenderer->widget); - value = gtk_css_node_get_style (node)->core->color; - fg_rgba = gtk_css_color_value_get_rgba (value); + style = gtk_css_node_get_style (node); + fg_rgba = gtk_css_color_value_get_rgba (style->core->color); } else if (crenderer->state == GSK_PANGO_RENDERER_CURSOR && gtk_widget_has_focus (crenderer->widget)) { GtkCssNode *node; - GtkCssValue *value; + GtkCssStyle *style; node = gtk_widget_get_css_node (crenderer->widget); - value = gtk_css_node_get_style (node)->background->background_color; - fg_rgba = gtk_css_color_value_get_rgba (value); + style = gtk_css_node_get_style (node); + fg_rgba = gtk_css_color_value_get_rgba (style->background->background_color); } else fg_rgba = appearance->fg_rgba; From 7ff4cba6249ab3ef02c04dd78399780a4292cf55 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 19 Apr 2024 20:54:01 -0400 Subject: [PATCH 2/2] Apply css text shadows in text views For now, this just applies the shadow from the widget's style, there is no way to apply different shadows to text ranges (except for the selection, which already has its own css style). --- gtk/gskpango.c | 19 +++++++++++++++++++ gtk/gskpangoprivate.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/gtk/gskpango.c b/gtk/gskpango.c index f557c78582..2359d407a8 100644 --- a/gtk/gskpango.c +++ b/gtk/gskpango.c @@ -28,6 +28,7 @@ #include "gtkwidgetprivate.h" #include "gtkcsscolorvalueprivate.h" #include "gdk/gdkrgbaprivate.h" +#include "gtkcssshadowvalueprivate.h" #include @@ -97,6 +98,11 @@ gsk_pango_renderer_draw_glyph_item (PangoRenderer *renderer, { GskPangoRenderer *crenderer = (GskPangoRenderer *) (renderer); GdkRGBA color; + gboolean has_shadow = FALSE; + + if (crenderer->shadow_style) + has_shadow = gtk_css_shadow_value_push_snapshot (crenderer->shadow_style->font->text_shadow, + crenderer->snapshot); get_color (crenderer, PANGO_RENDER_PART_FOREGROUND, &color); @@ -106,6 +112,9 @@ gsk_pango_renderer_draw_glyph_item (PangoRenderer *renderer, &color, (float) x / PANGO_SCALE, (float) y / PANGO_SCALE); + + if (has_shadow) + gtk_snapshot_pop (crenderer->snapshot); } static void @@ -382,6 +391,15 @@ gsk_pango_renderer_prepare_run (PangoRenderer *renderer, } else text_renderer_set_rgba (crenderer, PANGO_RENDER_PART_UNDERLINE, fg_rgba); + + crenderer->shadow_style = NULL; + if (GTK_IS_TEXT_VIEW (crenderer->widget)) + { + if (crenderer->state == GSK_PANGO_RENDERER_SELECTED) + crenderer->shadow_style = gtk_css_node_get_style (gtk_text_view_get_selection_node ((GtkTextView *)crenderer->widget)); + else if (crenderer->state != GSK_PANGO_RENDERER_CURSOR) + crenderer->shadow_style = gtk_css_node_get_style (gtk_widget_get_css_node (crenderer->widget)); + } } static void @@ -439,6 +457,7 @@ gsk_pango_renderer_release (GskPangoRenderer *renderer) { renderer->widget = NULL; renderer->snapshot = NULL; + renderer->shadow_style = NULL; if (renderer->error_color) { diff --git a/gtk/gskpangoprivate.h b/gtk/gskpangoprivate.h index 63e3dad683..6b8e2d7618 100644 --- a/gtk/gskpangoprivate.h +++ b/gtk/gskpangoprivate.h @@ -20,6 +20,7 @@ #include #include "gtk/gtksnapshot.h" +#include "gtk/gtkcssstyleprivate.h" G_BEGIN_DECLS @@ -58,6 +59,7 @@ struct _GskPangoRenderer GtkWidget *widget; GtkSnapshot *snapshot; const GdkRGBA *fg_color; + GtkCssStyle *shadow_style; /* Error underline color for this widget */ GdkRGBA *error_color;