diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/styleengine.cc | 36 | ||||
-rw-r--r-- | src/styleengine.hh | 6 |
2 files changed, 24 insertions, 18 deletions
diff --git a/src/styleengine.cc b/src/styleengine.cc index bd8d440b..fec34eb3 100644 --- a/src/styleengine.cc +++ b/src/styleengine.cc @@ -329,7 +329,7 @@ void StyleEngine::apply (StyleAttrs *attrs, CssPropertyList *props) { /** * \brief Resolve relative lengths to absolute values. */ -void StyleEngine::computeValue (int *dest, CssLength value, Font *font) { +bool StyleEngine::computeValue (int *dest, CssLength value, Font *font) { static float dpmm; if (dpmm == 0.0) @@ -338,39 +338,45 @@ void StyleEngine::computeValue (int *dest, CssLength value, Font *font) { switch (CSS_LENGTH_TYPE (value)) { case CSS_LENGTH_TYPE_PX: *dest = (int) CSS_LENGTH_VALUE (value); - break; + return true; case CSS_LENGTH_TYPE_MM: *dest = (int) (CSS_LENGTH_VALUE (value) * dpmm); - break; + return true; case CSS_LENGTH_TYPE_EM: *dest = (int) (CSS_LENGTH_VALUE (value) * font->size); - break; + return true; case CSS_LENGTH_TYPE_EX: *dest = (int) (CSS_LENGTH_VALUE(value) * font->xHeight); - break; + return true; default: break; } + + return false; } -void StyleEngine::computeValue (int *dest, CssLength value, Font *font, +bool StyleEngine::computeValue (int *dest, CssLength value, Font *font, int percentageBase) { - if (CSS_LENGTH_TYPE (value) == CSS_LENGTH_TYPE_PERCENTAGE) + if (CSS_LENGTH_TYPE (value) == CSS_LENGTH_TYPE_PERCENTAGE) { *dest = (int) (CSS_LENGTH_VALUE (value) * percentageBase); - else - computeValue (dest, value, font); + return true; + } else + return computeValue (dest, value, font); } -void StyleEngine::computeLength (dw::core::style::Length *dest, +bool StyleEngine::computeLength (dw::core::style::Length *dest, CssLength value, Font *font) { int v; - if (CSS_LENGTH_TYPE (value) == CSS_LENGTH_TYPE_PERCENTAGE) + if (CSS_LENGTH_TYPE (value) == CSS_LENGTH_TYPE_PERCENTAGE) { *dest = createPerLength (CSS_LENGTH_VALUE (value)); - else { - computeValue (&v, value, font); - *dest = createAbsLength (v); - } + return true; + } else if (computeValue (&v, value, font)) { + *dest = createAbsLength (v); + return true; + } + + return false; } /** diff --git a/src/styleengine.hh b/src/styleengine.hh index c22631e7..d063fb27 100644 --- a/src/styleengine.hh +++ b/src/styleengine.hh @@ -23,10 +23,10 @@ class StyleEngine : public Doctree { dw::core::style::Style *style0 (CssPropertyList *nonCssHints = NULL); dw::core::style::Style *wordStyle0 (CssPropertyList *nonCssHints = NULL); void apply (dw::core::style::StyleAttrs *attrs, CssPropertyList *props); - void computeValue (int *dest, CssLength value, dw::core::style::Font *font); - void computeValue (int *dest, CssLength value, dw::core::style::Font *font, + bool computeValue (int *dest, CssLength value, dw::core::style::Font *font); + bool computeValue (int *dest, CssLength value, dw::core::style::Font *font, int percentageBase); - void computeLength (dw::core::style::Length *dest, CssLength value, dw::core::style::Font *font); + bool computeLength (dw::core::style::Length *dest, CssLength value, dw::core::style::Font *font); public: StyleEngine (dw::core::Layout *layout); |