[pango/line-breaker: 16/18] wip: serializer: adapt




commit fb0b9116fe5a10dc02cfff18873c017a1fe800d9
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Jan 15 08:38:18 2022 -0500

    wip: serializer: adapt

 pango/serializer.c    | 31 +++++++++++++++++++++++--------
 tests/testserialize.c | 10 +++++-----
 2 files changed, 28 insertions(+), 13 deletions(-)
---
diff --git a/pango/serializer.c b/pango/serializer.c
index cc3bcde3..90bf0440 100644
--- a/pango/serializer.c
+++ b/pango/serializer.c
@@ -27,6 +27,7 @@
 #include <pango/pango-enum-types.h>
 #include <pango/pango-font-private.h>
 #include <pango/pango-line-private.h>
+#include <pango/pango-lines.h>
 
 #include <hb-ot.h>
 #include "pango/json/gtkjsonparserprivate.h"
@@ -830,10 +831,19 @@ layout_to_json (GtkJsonPrinter            *printer,
 
 static void
 line_to_json (GtkJsonPrinter *printer,
-              PangoLine      *line)
+              PangoLine      *line,
+              int             x,
+              int             y)
 {
   gtk_json_printer_start_object (printer, NULL);
 
+  gtk_json_printer_start_array (printer, "position");
+  gtk_json_printer_add_number (printer, NULL, x);
+  gtk_json_printer_add_number (printer, NULL, y);
+  gtk_json_printer_end (printer);
+
+  gtk_json_printer_start_object (printer, "line");
+
   gtk_json_printer_add_integer (printer, "start-index", line->start_index);
   gtk_json_printer_add_integer (printer, "length", line->length);
   gtk_json_printer_add_boolean (printer, "paragraph-start", line->starts_paragraph);
@@ -852,17 +862,23 @@ line_to_json (GtkJsonPrinter *printer,
   gtk_json_printer_end (printer);
 
   gtk_json_printer_end (printer);
+
+  gtk_json_printer_end (printer);
 }
 
 static void
 lines_to_json (GtkJsonPrinter  *printer,
-               PangoLine      **lines,
-               unsigned int     n_lines)
+               PangoLines      *lines)
 {
   gtk_json_printer_start_array (printer, NULL);
 
-  for (int i = 0; i < n_lines; i++)
-    line_to_json (printer, lines[i]);
+  for (int i = 0; i < pango_lines_get_n_lines (lines); i++)
+    {
+      PangoLine *line;
+      int x, y;
+      pango_lines_get_line (lines, i, &line, &x, &y);
+      line_to_json (printer, line, x, y);
+    }
 
   gtk_json_printer_end (printer);
 }
@@ -1839,8 +1855,7 @@ pango_font_deserialize (PangoContext  *context,
 }
 
 GBytes *
-pango_lines_serialize (PangoLine    **lines,
-                       unsigned int   n_lines)
+pango_lines_serialize (PangoLines *lines)
 {
   GString *str;
   GtkJsonPrinter *printer;
@@ -1851,7 +1866,7 @@ pango_lines_serialize (PangoLine    **lines,
 
   printer = gtk_json_printer_new (gstring_write, str, NULL);
   gtk_json_printer_set_flags (printer, GTK_JSON_PRINTER_PRETTY);
-  lines_to_json (printer, lines, n_lines);
+  lines_to_json (printer, lines);
   gtk_json_printer_free (printer);
 
   g_string_append_c (str, '\n');
diff --git a/tests/testserialize.c b/tests/testserialize.c
index 757d5b9e..f09b958d 100644
--- a/tests/testserialize.c
+++ b/tests/testserialize.c
@@ -474,7 +474,7 @@ test_serialize_linebreaker (void)
     "This is a long paragraph that should get "
     "broken over at least two lines, if not more.";
   int x, y, width;
-  GPtrArray *lines;
+  PangoLines *lines;
   GBytes *bytes;
 
   context = pango_font_map_create_context (pango_cairo_font_map_get_default ());
@@ -483,7 +483,7 @@ test_serialize_linebreaker (void)
 
   pango_line_breaker_add_text (breaker, text, -1, NULL);
 
-  lines = g_ptr_array_new_with_free_func (g_object_unref);
+  lines = pango_lines_new ();
 
   x = y = 0;
   width = 200;
@@ -493,13 +493,13 @@ test_serialize_linebreaker (void)
                                                       PANGO_WRAP_WORD,
                                                       PANGO_ELLIPSIZE_NONE,
                                                       PANGO_ALIGNMENT_LEFT);
-      g_ptr_array_add (lines, line);
+      pango_lines_add_line (lines, line, 0, 0);
     }
 
-  bytes = pango_lines_serialize ((PangoLine **)lines->pdata, lines->len);
+  bytes = pango_lines_serialize (lines);
   g_print ("%s\n", (char *)g_bytes_get_data (bytes, NULL));
 
-  g_ptr_array_unref (lines);
+  g_object_unref (lines);
 
   g_object_unref (context);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]