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).
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
#include "gtkwidgetprivate.h"
|
||||
#include "gtkcsscolorvalueprivate.h"
|
||||
#include "gdk/gdkrgbaprivate.h"
|
||||
#include "gtkcssshadowvalueprivate.h"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
|
||||
#include <pango/pango.h>
|
||||
#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;
|
||||
|
||||
Reference in New Issue
Block a user