summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Hofmann <Johannes.Hofmann@gmx.de>2009-02-06 21:44:50 +0100
committerJohannes Hofmann <Johannes.Hofmann@gmx.de>2009-02-06 21:44:50 +0100
commit481f624e2592fc0967e94b84f1ce1d0f9e6ac9ce (patch)
tree3857258e4d3db797b829c32c31c143363c99f54a
parent17c9dc7f581ca55e931ce2987cb34bc505bf75d3 (diff)
support font-size enum values
-rw-r--r--src/css.hh13
-rw-r--r--src/cssparser.cc6
-rw-r--r--src/styleengine.cc38
3 files changed, 54 insertions, 3 deletions
diff --git a/src/css.hh b/src/css.hh
index 56995e62..c3b5c45f 100644
--- a/src/css.hh
+++ b/src/css.hh
@@ -175,6 +175,19 @@ typedef enum {
CSS_FONT_WEIGHT_NORMAL,
} CssFontWeightExtensions;
+typedef enum {
+ CSS_FONT_SIZE_LARGE,
+ CSS_FONT_SIZE_LARGER,
+ CSS_FONT_SIZE_MEDIUM,
+ CSS_FONT_SIZE_SMALL,
+ CSS_FONT_SIZE_SMALLER,
+ CSS_FONT_SIZE_XX_LARGE,
+ CSS_FONT_SIZE_XX_SMALL,
+ CSS_FONT_SIZE_X_LARGE,
+ CSS_FONT_SIZE_X_SMALL,
+} CssFontSizeExtensions;
+
+
/**
* \brief This class holds a CSS property and value pair.
*/
diff --git a/src/cssparser.cc b/src/cssparser.cc
index 73182d09..81e289a2 100644
--- a/src/cssparser.cc
+++ b/src/cssparser.cc
@@ -56,6 +56,10 @@ static const char *const Css_display_enum_vals[DISPLAY_LAST + 1] = {
"table-cell", NULL
};
+static const char *const Css_font_size_enum_vals[] = {
+ "large", "larger", "medium", "small", "smaller", "xx-large", "xx-small", "x-large", "x-small", NULL
+};
+
static const char *const Css_font_style_enum_vals[] = {
"normal", "italic", "oblique", NULL
};
@@ -122,7 +126,7 @@ const CssPropertyInfo Css_property_info[CSS_PROPERTY_LAST] = {
{"empty-cells", {CSS_TYPE_UNUSED}, NULL},
{"float", {CSS_TYPE_UNUSED}, NULL},
{"font-family", {CSS_TYPE_SYMBOL, CSS_TYPE_UNUSED}, NULL},
- {"font-size", {CSS_TYPE_LENGTH_PERCENTAGE, CSS_TYPE_UNUSED}, NULL},
+ {"font-size", {CSS_TYPE_ENUM, CSS_TYPE_LENGTH_PERCENTAGE, CSS_TYPE_UNUSED}, Css_font_size_enum_vals},
{"font-size-adjust", {CSS_TYPE_UNUSED}, NULL},
{"font-stretch", {CSS_TYPE_UNUSED}, NULL},
{"font-style", {CSS_TYPE_ENUM, CSS_TYPE_UNUSED}, Css_font_style_enum_vals},
diff --git a/src/styleengine.cc b/src/styleengine.cc
index badacbae..92fe8179 100644
--- a/src/styleengine.cc
+++ b/src/styleengine.cc
@@ -186,8 +186,42 @@ void StyleEngine::apply (StyleAttrs *attrs, CssPropertyList *props) {
break;
case CSS_PROPERTY_FONT_SIZE:
parentFont = stack->get (stack->size () - 2).style->font;
- computeValue (&fontAttrs.size, p->value.intVal, parentFont,
- parentFont->size);
+ if (p->type == CSS_TYPE_ENUM) {
+ switch (p->value.intVal) {
+ case CSS_FONT_SIZE_XX_SMALL:
+ fontAttrs.size = (int) (11.0 * prefs.font_factor + 0.5);
+ break;
+ case CSS_FONT_SIZE_X_SMALL:
+ fontAttrs.size = (int) (12.0 * prefs.font_factor + 0.5);
+ break;
+ case CSS_FONT_SIZE_SMALL:
+ fontAttrs.size = (int) (13.0 * prefs.font_factor + 0.5);
+ break;
+ case CSS_FONT_SIZE_MEDIUM:
+ fontAttrs.size = (int) (14.0 * prefs.font_factor + 0.5);
+ break;
+ case CSS_FONT_SIZE_LARGE:
+ fontAttrs.size = (int) (15.0 * prefs.font_factor + 0.5);
+ break;
+ case CSS_FONT_SIZE_X_LARGE:
+ fontAttrs.size = (int) (16.0 * prefs.font_factor + 0.5);
+ break;
+ case CSS_FONT_SIZE_XX_LARGE:
+ fontAttrs.size = (int) (17.0 * prefs.font_factor + 0.5);
+ break;
+ case CSS_FONT_SIZE_SMALLER:
+ fontAttrs.size -= (int) (1.0 * prefs.font_factor + 0.5);
+ break;
+ case CSS_FONT_SIZE_LARGER:
+ fontAttrs.size += (int) (1.0 * prefs.font_factor + 0.5);
+ break;
+ default:
+ assert(false); // invalid font-size enum
+ }
+ } else {
+ computeValue (&fontAttrs.size, p->value.intVal, parentFont,
+ parentFont->size);
+ }
break;
case CSS_PROPERTY_FONT_STYLE:
fontAttrs.style = (FontStyle) p->value.intVal;