[gtk+/wip/matthiasc/gskpango: 13/15] wip: hex box



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]