diff options
author | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2009-02-06 21:44:50 +0100 |
---|---|---|
committer | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2009-02-06 21:44:50 +0100 |
commit | 481f624e2592fc0967e94b84f1ce1d0f9e6ac9ce (patch) | |
tree | 3857258e4d3db797b829c32c31c143363c99f54a | |
parent | 17c9dc7f581ca55e931ce2987cb34bc505bf75d3 (diff) |
support font-size enum values
-rw-r--r-- | src/css.hh | 13 | ||||
-rw-r--r-- | src/cssparser.cc | 6 | ||||
-rw-r--r-- | src/styleengine.cc | 38 |
3 files changed, 54 insertions, 3 deletions
@@ -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; |