diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-11-22 11:22:21 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-11-24 19:57:58 -0500 |
commit | 8d680a695083dc2ed2a84db024e07480ffdb0ac5 (patch) | |
tree | dd020f740bd895dcc06fb76cc1790c79334bcbca /pango/serializer.c | |
parent | 4d296ae799efb452f1b2a5e767ba2bf315ff883c (diff) | |
download | pango-8d680a695083dc2ed2a84db024e07480ffdb0ac5.tar.gz |
More context serialization work
Diffstat (limited to 'pango/serializer.c')
-rw-r--r-- | pango/serializer.c | 64 |
1 files changed, 61 insertions, 3 deletions
diff --git a/pango/serializer.c b/pango/serializer.c index 62addc36..fdaba728 100644 --- a/pango/serializer.c +++ b/pango/serializer.c @@ -229,6 +229,10 @@ static void add_context (JsonBuilder *builder, PangoContext *context) { + char *str; + const PangoMatrix *matrix; + PangoMatrix identity = PANGO_MATRIX_INIT; + json_builder_begin_object (builder); /* Note: since we don't create the context when deserializing, @@ -236,6 +240,11 @@ add_context (JsonBuilder *builder, * context gets updated as expected. */ + str = pango_font_description_to_string (context->font_desc); + json_builder_set_member_name (builder, "font"); + json_builder_add_string_value (builder, str); + g_free (str); + if (context->set_language) { json_builder_set_member_name (builder, "language"); @@ -254,7 +263,19 @@ add_context (JsonBuilder *builder, json_builder_set_member_name (builder, "round-glyph-positions"); json_builder_add_boolean_value (builder, context->round_glyph_positions); - /* FIXME transform */ + json_builder_set_member_name (builder, "transform"); + matrix = pango_context_get_matrix (context); + if (!matrix) + matrix = &identity; + + json_builder_begin_array (builder); + json_builder_add_double_value (builder, matrix->xx); + json_builder_add_double_value (builder, matrix->xy); + json_builder_add_double_value (builder, matrix->yx); + json_builder_add_double_value (builder, matrix->yy); + json_builder_add_double_value (builder, matrix->x0); + json_builder_add_double_value (builder, matrix->y0); + json_builder_end_array (builder); json_builder_end_object (builder); } @@ -636,6 +657,8 @@ json_to_attr_list (JsonReader *reader, { PangoAttrList *attributes; + attributes = pango_attr_list_new (); + if (!json_reader_is_array (reader)) { g_set_error (error, @@ -645,8 +668,6 @@ json_to_attr_list (JsonReader *reader, goto fail; } - attributes = pango_attr_list_new (); - for (int i = 0; i < json_reader_count_elements (reader); i++) { PangoAttribute *attr; @@ -726,6 +747,16 @@ apply_json_to_context (JsonReader *reader, } json_reader_end_member (reader); + if (json_reader_read_member (reader, "font")) + { + PangoFontDescription *desc; + + desc = pango_font_description_from_string (json_reader_get_string_value (reader)); + pango_context_set_font_description (context, desc); + pango_font_description_free (desc); + } + json_reader_end_member (reader); + if (json_reader_read_member (reader, "base-gravity")) { PangoGravity gravity = get_enum_value (PANGO_TYPE_GRAVITY, @@ -771,6 +802,33 @@ apply_json_to_context (JsonReader *reader, } json_reader_end_member (reader); + if (json_reader_read_member (reader, "transform")) + { + PangoMatrix m; + + json_reader_read_element (reader, 0); + m.xx = json_reader_get_double_value (reader); + json_reader_end_element (reader); + json_reader_read_element (reader, 1); + m.xy = json_reader_get_double_value (reader); + json_reader_end_element (reader); + json_reader_read_element (reader, 2); + m.yx = json_reader_get_double_value (reader); + json_reader_end_element (reader); + json_reader_read_element (reader, 3); + m.yy = json_reader_get_double_value (reader); + json_reader_end_element (reader); + json_reader_read_element (reader, 4); + m.x0 = json_reader_get_double_value (reader); + json_reader_end_element (reader); + json_reader_read_element (reader, 5); + m.y0 = json_reader_get_double_value (reader); + json_reader_end_element (reader); + + pango_context_set_matrix (context, &m); + } + json_reader_end_member (reader); + return TRUE; } |