summaryrefslogtreecommitdiff
path: root/css
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@netsurf-browser.org>2006-03-09 19:04:13 +0000
committerDaniel Silverstone <dsilvers@netsurf-browser.org>2006-03-09 19:04:13 +0000
commit05b214a5d5f8ce4a3058f178e3cf9a5a9b56c770 (patch)
tree30c6fd8bbc8e73387d07a9021875843d2c1e52f7 /css
parent4b3d4f97a8955ee72077623662ab4b5e045f6647 (diff)
downloadnetsurf-05b214a5d5f8ce4a3058f178e3cf9a5a9b56c770.tar.gz
netsurf-05b214a5d5f8ce4a3058f178e3cf9a5a9b56c770.tar.bz2
[project @ 2006-03-09 19:04:13 by dsilvers]
css.[ch]: Add css_len2pt to convert a CSS length to points for use on systems which actually recognise that DPI might not be 90 all the time. svn path=/import/netsurf/; revision=2114
Diffstat (limited to 'css')
-rw-r--r--css/css.c28
-rw-r--r--css/css.h2
2 files changed, 30 insertions, 0 deletions
diff --git a/css/css.c b/css/css.c
index d881a8ed2..8a120eb46 100644
--- a/css/css.c
+++ b/css/css.c
@@ -2976,6 +2976,8 @@ unsigned int css_hash(const char *s, int length)
/**
* Convert a struct css_length to pixels.
+ *
+ * Note: This assumes 90dpi (if converting from points)
*/
float css_len2px(const struct css_length *length,
@@ -2999,6 +3001,32 @@ float css_len2px(const struct css_length *length,
return 0;
}
+/**
+ * Convert a struct css_length to points.
+ *
+ * Note: This assumes 90dpi (if converting a pixel size)
+ */
+
+float css_len2pt(const struct css_length *length,
+ const struct css_style *style)
+{
+ assert(!((length->unit == CSS_UNIT_EM || length->unit == CSS_UNIT_EX) && style == 0));
+ switch (length->unit) {
+ case CSS_UNIT_EM: return length->value * css_len2pt(&style->font_size.value.length, 0);
+ case CSS_UNIT_EX: return length->value * css_len2pt(&style->font_size.value.length, 0) * 0.6;
+ /* RISC OS assumes 90dpi */
+ case CSS_UNIT_PX: return length->value / 1.25;
+ /* 1pt = 1in/72 */
+ case CSS_UNIT_IN: return length->value * 72;
+ case CSS_UNIT_CM: return length->value * 28.452756;
+ case CSS_UNIT_MM: return length->value * 2.8452756;
+ case CSS_UNIT_PT: return length->value;
+ /* 1pc = 1pt * 12 */
+ case CSS_UNIT_PC: return length->value * 12.0;
+ default: break;
+ }
+ return 0;
+}
/**
* Return the most 'eyecatching' border.
diff --git a/css/css.h b/css/css.h
index b420c11f6..a5bd81acf 100644
--- a/css/css.h
+++ b/css/css.h
@@ -656,6 +656,8 @@ void css_dump_stylesheet(const struct css_stylesheet * stylesheet);
float css_len2px(const struct css_length *length,
const struct css_style *style);
+float css_len2pt(const struct css_length *length,
+ const struct css_style *style);
struct css_border *css_eyecatching_border(struct css_border *test1,
struct css_style *style1, struct css_border *test2,
struct css_style *style2);