[gtk+/wip/matthiasc/gskpango: 12/15] Use GL to render underlines
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/matthiasc/gskpango: 12/15] Use GL to render underlines
- Date: Thu, 31 Aug 2017 02:10:29 +0000 (UTC)
commit 0c2158d6baffe1db844ef4fe53e92b1353e218a0
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 and translate
draw_rectangle, draw_trapezoid and draw_error_underline to
cairo nodes.
gtk/gskpango.c | 95 ++++++++++++++++++++++++++++---------------------------
1 files changed, 48 insertions(+), 47 deletions(-)
---
diff --git a/gtk/gskpango.c b/gtk/gskpango.c
index ef8aab3..c96d3bb 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,30 @@ 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;
+}
+
+static void
+set_color (GskPangoRenderer *crenderer,
+ PangoRenderPart part,
+ cairo_t *cr)
+{
+ GdkRGBA rgba = { 0, 0, 0, 1 };
+
+ if (get_color (crenderer, part, &rgba))
+ gdk_cairo_set_source_rgba (cr, &rgba);
+ else
+ gdk_cairo_set_source_rgba (cr, crenderer->fg_color);
}
#if 0
@@ -286,12 +292,9 @@ gsk_pango_renderer_show_text_glyphs (PangoRenderer *renderer,
double base_x = crenderer->x_offset + (double)x / PANGO_SCALE;
double base_y = crenderer->y_offset + (double)y / PANGO_SCALE;
-
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);
+ set_color (crenderer, PANGO_RENDER_PART_FOREGROUND, cr);
if (!_pango_cairo_font_install (font, cr))
{
@@ -451,20 +454,19 @@ gsk_pango_renderer_draw_rectangle (PangoRenderer *renderer,
int width,
int height)
{
-#if 0
GskPangoRenderer *crenderer = (GskPangoRenderer *) (renderer);
+ GdkRGBA rgba;
+ graphene_rect_t bounds;
- cairo_save (crenderer->cr);
- set_color (crenderer, part);
+ if (!get_color (crenderer, part, &rgba))
+ rgba = *crenderer->fg_color;
- cairo_rectangle (crenderer->cr,
- crenderer->x_offset + (double)x / PANGO_SCALE,
- crenderer->y_offset + (double)y / PANGO_SCALE,
- (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
+ 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);
- cairo_fill (crenderer->cr);
- cairo_restore (crenderer->cr);
-#endif
+ gtk_snapshot_append_color (crenderer->snapshot, &rgba, &bounds, "DrawRectangle");
}
static void
@@ -477,16 +479,14 @@ gsk_pango_renderer_draw_trapezoid (PangoRenderer *renderer,
double x12,
double x22)
{
-#if 0
GskPangoRenderer *crenderer = (GskPangoRenderer *) (renderer);
cairo_t *cr;
- double x, y;
+ GdkRGBA rgba = { 0, 0, 0, 1 };
+ gdouble x, y;
- cr = crenderer->cr;
+ cr = gtk_snapshot_append_cairo (crenderer->snapshot, &crenderer->bounds, "DrawTrapezoid");
- cairo_save (cr);
-
- set_color (crenderer, part);
+ set_color (crenderer, part, cr);
x = crenderer->x_offset,
y = crenderer->y_offset;
@@ -502,8 +502,7 @@ gsk_pango_renderer_draw_trapezoid (PangoRenderer *renderer,
cairo_fill (cr);
- cairo_restore (cr);
-#endif
+ cairo_destroy (cr);
}
/* Draws an error underline that looks like one of:
@@ -586,13 +585,16 @@ gsk_pango_renderer_draw_error_underline (PangoRenderer *renderer,
int width,
int height)
{
-#if 0
GskPangoRenderer *crenderer = (GskPangoRenderer *) (renderer);
- cairo_t *cr = crenderer->cr;
+ cairo_t *cr;
+ GdkRGBA rgba = { 0, 0, 0, 1 };
- cairo_save (cr);
+ cr = gtk_snapshot_append_cairo (crenderer->snapshot, &crenderer->bounds, "DrawTrapezoid");
- set_color (crenderer, PANGO_RENDER_PART_UNDERLINE);
+ if (get_color (crenderer, PANGO_RENDER_PART_UNDERLINE, &rgba))
+ gdk_cairo_set_source_rgba (cr, &rgba);
+ else
+ gdk_cairo_set_source_rgba (cr, crenderer->fg_color);
cairo_new_path (cr);
@@ -603,8 +605,7 @@ gsk_pango_renderer_draw_error_underline (PangoRenderer *renderer,
cairo_fill (cr);
- cairo_restore (cr);
-#endif
+ cairo_destroy (cr);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]