public void resolve(final LayoutProcess process,
final LayoutElement currentNode,
final StyleKey key)
{
final LayoutContext layoutContext = currentNode.getLayoutContext();
final CSSValue value = layoutContext.getValue(key);
if (value instanceof CSSConstant == false)
{
// fine, we're done here ...
return;
}
final CSSConstant constant = (CSSConstant) value;
final LayoutElement parent = currentNode.getParent();
if (parent != null)
{
final double parentFontSize =
parent.getLayoutContext().getFontSpecification().getFontSize();
if (RelativeFontSize.LARGER.equals(value))
{
final double scaleFactor = getScaleLargerFactor(parentFontSize);
layoutContext.setValue(key, CSSNumericValue.createValue(CSSNumericType.PERCENTAGE, scaleFactor));
return;
}
if (RelativeFontSize.SMALLER.equals(value))
{
final double scaleFactor = getScaleSmallerFactor(parentFontSize);
layoutContext.setValue(key, CSSNumericValue.createValue(CSSNumericType.PERCENTAGE, scaleFactor));
return;
}
}
else
{
// we might not have a parent, but that won't stop us ..
if (RelativeFontSize.LARGER.equals(value))
{
layoutContext.setValue(key, CSSNumericValue.createValue(CSSNumericType.PERCENTAGE, 120));
return ;
}
if (RelativeFontSize.SMALLER.equals(value))
{
layoutContext.setValue(key, CSSNumericValue.createValue(CSSNumericType.PERCENTAGE, 85));
return;
}
}
final CSSValue resolvedValue = lookupValue(constant);
if (resolvedValue != null)
{
layoutContext.setValue(key, resolvedValue);
return;
}