aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/styleengine.cc36
-rw-r--r--src/styleengine.hh6
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);