diff options
author | Owen Taylor <otaylor@redhat.com> | 2004-12-16 03:24:07 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2004-12-16 03:24:07 +0000 |
commit | 7be7952f2fb1d34963a041fc9bc4d4841d8de74a (patch) | |
tree | d6417d999b1f4a7a38290eb94004934fe57d1163 /pango/pango-attributes.c | |
parent | da045342eccab09d3d6be33b1b65ebeb5dc2b2f0 (diff) | |
download | pango-7be7952f2fb1d34963a041fc9bc4d4841d8de74a.tar.gz |
Add pixel sizes for fonts (#119081, patch from Chris Lahey)
Wed Dec 15 22:09:42 2004 Owen Taylor <otaylor@redhat.com>
Add pixel sizes for fonts (#119081, patch from Chris Lahey)
* pango/fonts.c pango/pango-font.h:
Add pango_font_description_set_absolute_size(),
pango_font_description_get_size_is_absolute()
* pango/pango-attributes.[ch]: Add pango_attr_size_new_absolute(),
change PANGO_ATTR_SIZE from PangoAttrInt to PangoAttrSize
(preserves compat because first component is identical)
* pango/pangowin32-fontmap.c (pango_win32_font_map_load_font):
For absolute sizes, convert pixels to points, before
calling pango_win32_font_new().
* pango/pangofc-fontmap.c pango/pangoft2.c pango/pangoxft-font.c:
Handle absolute sizes.
Diffstat (limited to 'pango/pango-attributes.c')
-rw-r--r-- | pango/pango-attributes.c | 97 |
1 files changed, 78 insertions, 19 deletions
diff --git a/pango/pango-attributes.c b/pango/pango-attributes.c index f4b9b5e2..ca085c3c 100644 --- a/pango/pango-attributes.c +++ b/pango/pango-attributes.c @@ -40,16 +40,18 @@ struct _PangoAttrIterator int end_index; }; -static PangoAttribute *pango_attr_color_new (const PangoAttrClass *klass, - guint16 red, - guint16 green, - guint16 blue); -static PangoAttribute *pango_attr_string_new (const PangoAttrClass *klass, - const char *str); -static PangoAttribute *pango_attr_int_new (const PangoAttrClass *klass, - int value); -static PangoAttribute *pango_attr_float_new (const PangoAttrClass *klass, - double value); +static PangoAttribute *pango_attr_color_new (const PangoAttrClass *klass, + guint16 red, + guint16 green, + guint16 blue); +static PangoAttribute *pango_attr_string_new (const PangoAttrClass *klass, + const char *str); +static PangoAttribute *pango_attr_int_new (const PangoAttrClass *klass, + int value); +static PangoAttribute *pango_attr_float_new (const PangoAttrClass *klass, + double value); +static PangoAttribute *pango_attr_size_new_internal (int size, + gboolean absolute); /** @@ -396,25 +398,79 @@ pango_attr_float_new (const PangoAttrClass *klass, return (PangoAttribute *)result; } +static PangoAttribute * +pango_attr_size_copy (const PangoAttribute *attr) +{ + const PangoAttrSize *size_attr = (PangoAttrSize *)attr; + + return pango_attr_size_new_internal (size_attr->size, size_attr->absolute); +} + +static void +pango_attr_size_destroy (PangoAttribute *attr) +{ + g_free (attr); +} + +static gboolean +pango_attr_size_equal (const PangoAttribute *attr1, + const PangoAttribute *attr2) +{ + const PangoAttrSize *size_attr1 = (const PangoAttrSize *)attr1; + const PangoAttrSize *size_attr2 = (const PangoAttrSize *)attr2; + + return (size_attr1->size == size_attr2->size && + size_attr1->absolute == size_attr2->absolute); +} + +static PangoAttribute * +pango_attr_size_new_internal (int size, + gboolean absolute) +{ + PangoAttrSize *result; + static const PangoAttrClass klass = { + PANGO_ATTR_SIZE, + pango_attr_size_copy, + pango_attr_size_destroy, + pango_attr_size_equal + }; + + result = g_new (PangoAttrSize, 1); + result->attr.klass = &klass; + result->size = size; + result->absolute = absolute; + + return (PangoAttribute *)result; +} + /** * pango_attr_size_new: * @size: the font size, in #PANGO_SCALE<!-- -->ths of a point. * - * Create a new font-size attribute. + * Create a new font-size attribute in fractional points. * * Return value: the new #PangoAttribute. **/ PangoAttribute * pango_attr_size_new (int size) { - static const PangoAttrClass klass = { - PANGO_ATTR_SIZE, - pango_attr_int_copy, - pango_attr_int_destroy, - pango_attr_int_equal - }; + return pango_attr_size_new_internal (size, FALSE); +} - return pango_attr_int_new (&klass, size); +/** + * pango_attr_size_absolute_new: + * @size: the font size, in #PANGO_SCALE<!-- -->ths of a device units. + * + * Create a new font-size attribute in device units. + * + * Return value: the new #PangoAttribute. + * + * Since: 1.8 + **/ +PangoAttribute * +pango_attr_size_new_absolute (int size) +{ + return pango_attr_size_new_internal (size, TRUE); } /** @@ -1620,7 +1676,10 @@ pango_attr_iterator_get_font (PangoAttrIterator *iterator, if (!(mask & PANGO_FONT_MASK_SIZE)) { mask |= PANGO_FONT_MASK_SIZE; - pango_font_description_set_size (desc, ((PangoAttrInt *)attr)->value); + if (((PangoAttrSize *)attr)->absolute) + pango_font_description_set_size (desc, ((PangoAttrSize *)attr)->size); + else + pango_font_description_set_absolute_size (desc, ((PangoAttrSize *)attr)->size); } break; case PANGO_ATTR_SCALE: |