[gtk+/wip/matthiasc/gskpango] Use GL to render underlines
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/matthiasc/gskpango] Use GL to render underlines
- Date: Wed, 30 Aug 2017 19:07:28 +0000 (UTC)
commit 55a7caa1a6780da38b642d07dfb61109e8878423
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Aug 30 15:06:13 2017 -0400
Use GL to render underlines
Translate draw_rectangle calls to color nodes.
gtk/gskpango.c | 55 +++++++++++++++++++++++++++++++------------------------
1 files changed, 31 insertions(+), 24 deletions(-)
---
diff --git a/gtk/gskpango.c b/gtk/gskpango.c
index ef8aab3..48a1071 100644
--- a/gtk/gskpango.c
+++ b/gtk/gskpango.c
@@ -69,17 +69,17 @@ struct _GskPangoRendererClass
G_DEFINE_TYPE (GskPangoRenderer, gsk_pango_renderer, PANGO_TYPE_RENDERER)
-static void
-set_color (GskPangoRenderer *crenderer,
- cairo_t *cr,
- PangoRenderPart part)
+static gboolean
+get_color (GskPangoRenderer *crenderer,
+ PangoRenderPart part,
+ GdkRGBA *rgba)
{
PangoColor *color = pango_renderer_get_color ((PangoRenderer *) (crenderer), part);
guint16 a = pango_renderer_get_alpha ((PangoRenderer *) (crenderer), part);
gdouble red, green, blue, alpha;
if (!a && !color)
- return;
+ return FALSE;
if (color)
{
@@ -89,24 +89,17 @@ set_color (GskPangoRenderer *crenderer,
alpha = 1.;
}
else
- {
- cairo_pattern_t *pattern = cairo_get_source (cr);
-
- if (pattern && cairo_pattern_get_type (pattern) == CAIRO_PATTERN_TYPE_SOLID)
- cairo_pattern_get_rgba (pattern, &red, &green, &blue, &alpha);
- else
- {
- red = 0.;
- green = 0.;
- blue = 0.;
- alpha = 1.;
- }
- }
+ return FALSE;
if (a)
alpha = a / 65535.;
- cairo_set_source_rgba (cr, red, green, blue, alpha);
+ rgba->red = red;
+ rgba->green = green;
+ rgba->blue = blue;
+ rgba->alpha = alpha;
+
+ return TRUE;
}
#if 0
@@ -285,13 +278,14 @@ gsk_pango_renderer_show_text_glyphs (PangoRenderer *renderer,
cairo_glyph_t stack_glyphs[STACK_ARRAY_LENGTH (cairo_glyph_t)];
double base_x = crenderer->x_offset + (double)x / PANGO_SCALE;
double base_y = crenderer->y_offset + (double)y / PANGO_SCALE;
-
+ GdkRGBA rgba;
cr = gtk_snapshot_append_cairo (crenderer->snapshot, &crenderer->bounds, "Text<%dglyphs>",
glyphs->num_glyphs);
- gdk_cairo_set_source_rgba (cr, crenderer->fg_color);
-
- set_color (crenderer, cr, PANGO_RENDER_PART_FOREGROUND);
+ if (get_color (crenderer, PANGO_RENDER_PART_FOREGROUND, &rgba))
+ gdk_cairo_set_source_rgba (cr, &rgba);
+ else
+ gdk_cairo_set_source_rgba (cr, crenderer->fg_color);
if (!_pango_cairo_font_install (font, cr))
{
@@ -451,8 +445,21 @@ gsk_pango_renderer_draw_rectangle (PangoRenderer *renderer,
int width,
int height)
{
-#if 0
GskPangoRenderer *crenderer = (GskPangoRenderer *) (renderer);
+ GdkRGBA rgba;
+ graphene_rect_t bounds;
+
+//g_print ("draw rectangle %d %d %d %d\n", x, y, width, height);
+ if (!get_color (crenderer, PANGO_RENDER_PART_FOREGROUND, &rgba))
+ rgba = *crenderer->fg_color;
+
+ graphene_rect_init (&bounds,
+ crenderer->x_offset + (double)x / PANGO_SCALE,
+ crenderer->y_offset + (double)y / PANGO_SCALE,
+ (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
+
+ gtk_snapshot_append_color (crenderer->snapshot, &rgba, &bounds, "DrawRectangle");
+#if 0
cairo_save (crenderer->cr);
set_color (crenderer, part);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]