[gtk+/wip/matthiasc/gskpango: 13/15] wip: hex box
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/matthiasc/gskpango: 13/15] wip: hex box
- Date: Thu, 31 Aug 2017 02:10:34 +0000 (UTC)
commit 50c27a75a2848afa20f41874f4c32af5afade9b0
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Aug 30 21:34:16 2017 -0400
wip: hex box
gtk/gskpango.c | 67 ++++++++++++++++++++++++++++---------------------------
gtk/gskpango.h | 1 +
2 files changed, 35 insertions(+), 33 deletions(-)
---
diff --git a/gtk/gskpango.c b/gtk/gskpango.c
index c96d3bb..7fcac85 100644
--- a/gtk/gskpango.c
+++ b/gtk/gskpango.c
@@ -27,6 +27,9 @@
#include <pango/pango.h>
#include <cairo/cairo.h>
+#define PANGO_UNKNOWN_GLYPH_WIDTH 10
+#define PANGO_UNKNOWN_GLYPH_HEIGHT 14
+
typedef struct _PangoCairoFontHexBoxInfo PangoCairoFontHexBoxInfo;
struct _PangoCairoFontHexBoxInfo
@@ -115,19 +118,16 @@ set_color (GskPangoRenderer *crenderer,
gdk_cairo_set_source_rgba (cr, crenderer->fg_color);
}
-#if 0
-/* note: modifies crenderer->cr without doing cairo_save/restore() */
+/* note: modifies cr without doing cairo_save/restore() */
static void
-gsk_pango_renderer_draw_frame (GskPangoRenderer *crenderer,
- double x,
- double y,
- double width,
- double height,
- double line_width,
- gboolean invalid)
+gsk_pango_renderer_draw_frame (cairo_t *cr,
+ double x,
+ double y,
+ double width,
+ double height,
+ double line_width,
+ gboolean invalid)
{
- cairo_t *cr = crenderer->cr;
-
cairo_rectangle (cr, x, y, width, height);
if (invalid)
@@ -152,25 +152,24 @@ gsk_pango_renderer_draw_frame (GskPangoRenderer *crenderer,
}
static void
-gsk_pango_renderer_draw_box_glyph (GskPangoRenderer *crenderer,
+gsk_pango_renderer_draw_box_glyph (cairo_t *cr,
PangoGlyphInfo *gi,
double cx,
double cy,
gboolean invalid)
{
- cairo_save (crenderer->cr);
+ cairo_save (cr);
- gsk_pango_renderer_draw_frame (crenderer,
- cx + 1.5,
- cy + 1.5 - PANGO_UNKNOWN_GLYPH_HEIGHT,
- (double)gi->geometry.width / PANGO_SCALE - 3.0,
- PANGO_UNKNOWN_GLYPH_HEIGHT - 3.0,
- 1.0,
- invalid);
+ gsk_pango_renderer_draw_frame (cr,
+ cx + 1.5,
+ cy + 1.5 - PANGO_UNKNOWN_GLYPH_HEIGHT,
+ (double)gi->geometry.width / PANGO_SCALE - 3.0,
+ PANGO_UNKNOWN_GLYPH_HEIGHT - 3.0,
+ 1.0,
+ invalid);
- cairo_restore (crenderer->cr);
+ cairo_restore (cr);
}
-#endif
static gboolean
_pango_cairo_font_install (PangoFont *font,
@@ -193,7 +192,6 @@ gsk_pango_renderer_draw_unknown_glyph (GskPangoRenderer *crenderer,
double cx,
double cy)
{
-#if 0
char buf[7];
double x0, y0;
int row, col;
@@ -203,16 +201,20 @@ gsk_pango_renderer_draw_unknown_glyph (GskPangoRenderer *crenderer,
PangoCairoFontHexBoxInfo *hbi;
gunichar ch;
gboolean invalid_input;
+ cairo_t *cr;
+
+ cr = gtk_snapshot_append_cairo (crenderer->snapshot, &crenderer->bounds, "DrawUnknownGlyph<%u>",
gi->glyph);
- cairo_save (crenderer->cr);
+ gdk_cairo_set_source_rgba (cr, crenderer->fg_color);
ch = gi->glyph & ~PANGO_GLYPH_UNKNOWN_FLAG;
invalid_input = G_UNLIKELY (gi->glyph == PANGO_GLYPH_INVALID_INPUT || ch > 0x10FFFF);
- hbi = pango_cairo_font_get_hex_box_info ((PangoCairoFont *)font);
- if (!hbi || !_pango_cairo_font_install ((PangoFont *)(hbi->font), crenderer->cr))
+ //hbi = pango_cairo_font_get_hex_box_info ((PangoCairoFont *)font);
+ hbi = NULL; // FIXME
+ if (!hbi || !_pango_cairo_font_install ((PangoFont *)(hbi->font), cr))
{
- gsk_pango_renderer_draw_box_glyph (crenderer, gi, cx, cy, invalid_input);
+ gsk_pango_renderer_draw_box_glyph (cr, gi, cx, cy, invalid_input);
goto done;
}
@@ -231,7 +233,7 @@ gsk_pango_renderer_draw_unknown_glyph (GskPangoRenderer *crenderer,
lsb = ((double)gi->geometry.width / PANGO_SCALE - width) * .5;
lsb = floor (lsb / hbi->pad_x) * hbi->pad_x;
- gsk_pango_renderer_draw_frame (crenderer,
+ gsk_pango_renderer_draw_frame (cr,
cx + lsb + .5 * hbi->pad_x,
cy + hbi->box_descent - hbi->box_height + hbi->pad_y * 0.5,
width - hbi->pad_x,
@@ -252,16 +254,16 @@ gsk_pango_renderer_draw_unknown_glyph (GskPangoRenderer *crenderer,
{
double x = x0 + col * (hbi->digit_width + hbi->pad_x);
- cairo_move_to (crenderer->cr, x, y);
+ cairo_move_to (cr, x, y);
hexbox_string[0] = buf[row * cols + col];
- cairo_show_text (crenderer->cr, hexbox_string);
+ cairo_show_text (cr, hexbox_string);
+ }
}
done:
- cairo_restore (crenderer->cr);
-#endif
+ cairo_destroy (cr);
}
#ifndef STACK_BUFFER_SIZE
@@ -481,7 +483,6 @@ gsk_pango_renderer_draw_trapezoid (PangoRenderer *renderer,
{
GskPangoRenderer *crenderer = (GskPangoRenderer *) (renderer);
cairo_t *cr;
- GdkRGBA rgba = { 0, 0, 0, 1 };
gdouble x, y;
cr = gtk_snapshot_append_cairo (crenderer->snapshot, &crenderer->bounds, "DrawTrapezoid");
diff --git a/gtk/gskpango.h b/gtk/gskpango.h
index 1fe7a6c..f8703d2 100644
--- a/gtk/gskpango.h
+++ b/gtk/gskpango.h
@@ -19,6 +19,7 @@
#ifndef __GSK_PANGO_H__
#define __GSK_PANGO_H__
+#include <pango/pango.h>
#include "gtk/gtksnapshot.h"
G_BEGIN_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]