summaryrefslogtreecommitdiff
path: root/pango/pango-attributes.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2004-12-16 03:24:07 +0000
committerOwen Taylor <otaylor@src.gnome.org>2004-12-16 03:24:07 +0000
commit7be7952f2fb1d34963a041fc9bc4d4841d8de74a (patch)
treed6417d999b1f4a7a38290eb94004934fe57d1163 /pango/pango-attributes.c
parentda045342eccab09d3d6be33b1b65ebeb5dc2b2f0 (diff)
downloadpango-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.c97
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: