diff options
Diffstat (limited to 'pango')
-rw-r--r-- | pango/pango-attributes.h | 7 | ||||
-rw-r--r-- | pango/pango-color.c | 89 | ||||
-rw-r--r-- | pango/pango-layout.c | 1 | ||||
-rw-r--r-- | pango/pango-markup.c | 6 | ||||
-rw-r--r-- | pango/pango-ot-private.h | 2 | ||||
-rw-r--r-- | pango/pango-ot-tag.c | 4 | ||||
-rw-r--r-- | pango/pango-utils-internal.h | 4 | ||||
-rw-r--r-- | pango/pangofc-shape.c | 4 |
8 files changed, 70 insertions, 47 deletions
diff --git a/pango/pango-attributes.h b/pango/pango-attributes.h index 6f6622ab..dd38aee2 100644 --- a/pango/pango-attributes.h +++ b/pango/pango-attributes.h @@ -65,7 +65,12 @@ PANGO_AVAILABLE_IN_ALL void pango_color_free (PangoColor *color); PANGO_AVAILABLE_IN_ALL gboolean pango_color_parse (PangoColor *color, - const char *spec); + const char *spec); +PANGO_AVAILABLE_IN_1_46 +gboolean pango_color_parse_with_alpha + (PangoColor *color, + guint16 *alpha, + const char *spec); PANGO_AVAILABLE_IN_1_16 gchar *pango_color_to_string(const PangoColor *color); diff --git a/pango/pango-color.c b/pango/pango-color.c index 3c37c3d0..9c044810 100644 --- a/pango/pango-color.c +++ b/pango/pango-color.c @@ -207,20 +207,40 @@ hex (const char *spec, } -/* Like pango_color_parse, but allow strings of the form +/** + * pango_color_parse_with_alpha: + * @color: (nullable): a #PangoColor structure in which to store the + * result, or %NULL + * @alpha: (nullable): return location for alpha, or %NULL + * @spec: a string specifying the new color + * + * Fill in the fields of a color from a string specification. The + * string can either one of a large set of standard names. (Taken + * from the CSS <ulink url="http://dev.w3.org/csswg/css-color/#named-colors">specification</ulink>), or it can be a hexadecimal + * value in the + * form '#rgb' '#rrggbb' '#rrrgggbbb' or '#rrrrggggbbbb' where + * 'r', 'g' and 'b' are hex digits of the red, green, and blue + * components of the color, respectively. (White in the four + * forms is '#fff' '#ffffff' '#fffffffff' and '#ffffffffffff') + * + * Additionally, parse strings of the form * '#rgba', '#rrggbbaa', '#rrrrggggbbbbaaaa', - * if alpha is not NULL. If no alpha component is found - * in the string, *alpha is set to 0. + * if @alpha is not %NULL, and set @alpha to the value specified + * by the hex digits for 'a'. If no alpha component is found + * in @spec, @alpha is set to 0xffff (for a solid color). + * + * Return value: %TRUE if parsing of the specifier succeeded, + * otherwise false. */ gboolean -_pango_color_parse_with_alpha (PangoColor *color, - guint16 *alpha, - const char *spec) +pango_color_parse_with_alpha (PangoColor *color, + guint16 *alpha, + const char *spec) { g_return_val_if_fail (spec != NULL, FALSE); if (alpha) - *alpha = 0; + *alpha = 0xffff; if (spec[0] == '#') { @@ -248,52 +268,53 @@ _pango_color_parse_with_alpha (PangoColor *color, has_alpha = TRUE; break; default: - return FALSE; + return FALSE; } if (!hex (spec, len, &r) || - !hex (spec + len, len, &g) || - !hex (spec + len * 2, len, &b) || + !hex (spec + len, len, &g) || + !hex (spec + len * 2, len, &b) || (has_alpha && !hex (spec + len * 3, len, &a))) - return FALSE; + return FALSE; if (color) - { - int bits = len * 4; - r <<= 16 - bits; - g <<= 16 - bits; - b <<= 16 - bits; - while (bits < 16) - { - r |= (r >> bits); - g |= (g >> bits); - b |= (b >> bits); - bits *= 2; - } - color->red = r; - color->green = g; - color->blue = b; - } + { + int bits = len * 4; + r <<= 16 - bits; + g <<= 16 - bits; + b <<= 16 - bits; + while (bits < 16) + { + r |= (r >> bits); + g |= (g >> bits); + b |= (b >> bits); + bits *= 2; + } + color->red = r; + color->green = g; + color->blue = b; + } if (alpha && has_alpha) { - int bits = len * 4; + int bits = len * 4; a <<= 16 - bits; - while (bits < 16) - { + while (bits < 16) + { a |= (a >> bits); - bits *= 2; - } + bits *= 2; + } *alpha = a; } } else { if (!find_color (spec, color)) - return FALSE; + return FALSE; } return TRUE; } + /** * pango_color_parse: * @color: (nullable): a #PangoColor structure in which to store the @@ -316,5 +337,5 @@ gboolean pango_color_parse (PangoColor *color, const char *spec) { - return _pango_color_parse_with_alpha (color, NULL, spec); + return pango_color_parse_with_alpha (color, NULL, spec); } diff --git a/pango/pango-layout.c b/pango/pango-layout.c index b07c8487..92d858b2 100644 --- a/pango/pango-layout.c +++ b/pango/pango-layout.c @@ -1173,6 +1173,7 @@ pango_layout_set_text (PangoLayout *layout, g_warning ("Invalid UTF-8 string passed to pango_layout_set_text()"); layout->n_chars = pango_utf8_strlen (layout->text, -1); + layout->length = strlen (layout->text); layout_changed (layout); diff --git a/pango/pango-markup.c b/pango/pango-markup.c index a67e10fd..b74c1ad4 100644 --- a/pango/pango-markup.c +++ b/pango/pango-markup.c @@ -1199,7 +1199,7 @@ span_parse_color (const char *attr_name, int line_number, GError **error) { - if (!_pango_color_parse_with_alpha (color, alpha, attr_val)) + if (!pango_color_parse_with_alpha (color, alpha, attr_val)) { g_set_error (error, G_MARKUP_ERROR, @@ -1622,7 +1622,7 @@ span_parse_func (MarkupData *md G_GNUC_UNUSED, goto error; add_attribute (tag, pango_attr_foreground_new (color.red, color.green, color.blue)); - if (alpha != 0) + if (alpha != 0xffff) add_attribute (tag, pango_attr_foreground_alpha_new (alpha)); } @@ -1635,7 +1635,7 @@ span_parse_func (MarkupData *md G_GNUC_UNUSED, goto error; add_attribute (tag, pango_attr_background_new (color.red, color.green, color.blue)); - if (alpha != 0) + if (alpha != 0xffff) add_attribute (tag, pango_attr_background_alpha_new (alpha)); } diff --git a/pango/pango-ot-private.h b/pango/pango-ot-private.h index 0d803ec1..d9d86644 100644 --- a/pango/pango-ot-private.h +++ b/pango/pango-ot-private.h @@ -22,12 +22,12 @@ #ifndef __PANGO_OT_PRIVATE_H__ #define __PANGO_OT_PRIVATE_H__ +#include <glib.h> #include <glib-object.h> #include <pango/pango-ot.h> #include <hb-ot.h> #include <hb-ft.h> -#include <hb-glib.h> #include "pangofc-private.h" diff --git a/pango/pango-ot-tag.c b/pango/pango-ot-tag.c index c4f337e8..5f50b77c 100644 --- a/pango/pango-ot-tag.c +++ b/pango/pango-ot-tag.c @@ -49,7 +49,7 @@ pango_ot_tag_from_script (PangoScript script) unsigned int count = 1; hb_tag_t tags[1]; - hb_ot_tags_from_script_and_language (hb_glib_script_to_script ((GUnicodeScript)script), + hb_ot_tags_from_script_and_language ((hb_script_t) g_unicode_script_to_iso15924 ((GUnicodeScript) script), HB_LANGUAGE_INVALID, &count, tags, @@ -84,7 +84,7 @@ pango_ot_tag_from_script (PangoScript script) PangoScript pango_ot_tag_to_script (PangoOTTag script_tag) { - return (PangoScript) hb_glib_script_from_script (hb_ot_tag_to_script ((hb_tag_t) script_tag)); + return (PangoScript) g_unicode_script_from_iso15924 (hb_ot_tag_to_script ((hb_tag_t) script_tag)); } diff --git a/pango/pango-utils-internal.h b/pango/pango-utils-internal.h index 56340215..0bc355e0 100644 --- a/pango/pango-utils-internal.h +++ b/pango/pango-utils-internal.h @@ -43,10 +43,6 @@ gboolean pango_parse_flags (GType type, char *_pango_trim_string (const char *str); -gboolean _pango_color_parse_with_alpha (PangoColor *color, - guint16 *alpha, - const char *spec); - G_END_DECLS diff --git a/pango/pangofc-shape.c b/pango/pangofc-shape.c index 9fe193f6..b6f74ca1 100644 --- a/pango/pangofc-shape.c +++ b/pango/pangofc-shape.c @@ -29,7 +29,7 @@ #include "pangohb-private.h" #include "pango-impl-utils.h" -#include <hb-glib.h> +#include <glib.h> /* cache a single hb_buffer_t */ static hb_buffer_t *cached_buffer = NULL; /* MT-safe */ @@ -359,7 +359,7 @@ pango_hb_shape (PangoFont *font, /* setup buffer */ hb_buffer_set_direction (hb_buffer, hb_direction); - hb_buffer_set_script (hb_buffer, hb_glib_script_to_script (analysis->script)); + hb_buffer_set_script (hb_buffer, (hb_script_t) g_unicode_script_to_iso15924 (analysis->script)); hb_buffer_set_language (hb_buffer, hb_language_from_string (pango_language_to_string (analysis->language), -1)); hb_buffer_set_cluster_level (hb_buffer, HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS); hb_buffer_set_flags (hb_buffer, hb_buffer_flags); |