public WidthDimensionContainer(CssContextNode node, float maxWidth, IRenderer renderer, float additionalWidthFix ) { String width = node.GetStyles().Get(CssConstants.WIDTH); if (width != null && !width.Equals(CssConstants.AUTO)) { dimension = ParseDimension(node, width, maxWidth, additionalWidthFix); } minDimension = GetMinWidth(node, maxWidth, additionalWidthFix); maxDimension = GetMaxWidth(node, maxWidth, additionalWidthFix); if (!IsAutoDimension()) { maxContentDimension = dimension; maxContentDimension = dimension; } else { if (renderer is BlockRenderer) { MinMaxWidth minMaxWidth = ((BlockRenderer)renderer).GetMinMaxWidth(); maxContentDimension = minMaxWidth.GetMaxWidth(); minContentDimension = minMaxWidth.GetMinWidth(); } } }
public WidthDimensionContainer(CssContextNode node, float maxWidth, IRenderer renderer, float additionalWidthFix ) { String width = node.GetStyles().Get(CssConstants.WIDTH); if (width != null && !CssConstants.AUTO.Equals(width)) { dimension = ParseDimension(node, width, maxWidth, additionalWidthFix); } minDimension = GetMinWidth(node, maxWidth, additionalWidthFix); maxDimension = GetMaxWidth(node, maxWidth, additionalWidthFix); if (!IsAutoDimension()) { // According to point 3 of paragraph "5.3.2.3. Handling min-width and max-width" of the specification // maxContentDimension and minContentDimension will always be equal maxContentDimension = dimension; minContentDimension = dimension; } else { if (renderer is BlockRenderer) { MinMaxWidth minMaxWidth = ((BlockRenderer)renderer).GetMinMaxWidth(); maxContentDimension = minMaxWidth.GetMaxWidth(); minContentDimension = minMaxWidth.GetMinWidth(); } } }
internal HeightDimensionContainer(CssContextNode pmbcNode, float width, float maxHeight, IRenderer renderer , float additionalWidthFix) { String height = pmbcNode.GetStyles().Get(CssConstants.HEIGHT); if (height != null && !CssConstants.AUTO.Equals(height)) { dimension = ParseDimension(pmbcNode, height, maxHeight, additionalWidthFix); } minDimension = GetMinHeight(pmbcNode, maxHeight, additionalWidthFix); maxDimension = GetMaxHeight(pmbcNode, maxHeight, additionalWidthFix); if (!IsAutoDimension()) { maxContentDimension = dimension; maxContentDimension = dimension; } else { LayoutArea layoutArea = new LayoutArea(1, new Rectangle(0, 0, width, infHeight)); LayoutContext minimalContext = new LayoutContext(layoutArea); LayoutResult quickLayout = renderer.Layout(minimalContext); if (quickLayout.GetStatus() != LayoutResult.NOTHING) { maxContentDimension = quickLayout.GetOccupiedArea().GetBBox().GetHeight(); minContentDimension = maxContentDimension; } } }
private float GetMinWidth(CssContextNode node, float maxAvailableWidth, float additionalWidthFix) { String content = node.GetStyles().Get(CssConstants.MIN_WIDTH); if (content == null) { return(0); } return(ParseDimension(node, content, maxAvailableWidth, additionalWidthFix)); }
private float GetMaxWidth(CssContextNode node, float maxAvailableWidth, float additionalWidthFix) { String content = node.GetStyles().Get(CssConstants.MAX_WIDTH); if (content == null) { return(float.MaxValue); } float dim = ParseDimension(node, content, maxAvailableWidth, additionalWidthFix); if (dim == 0) { return(float.MaxValue); } return(dim); }
internal virtual float ParseDimension(CssContextNode node, String content, float maxAvailableDimension, float additionalWidthFix) { float fontSize = FontStyleApplierUtil.ParseAbsoluteFontSize(node.GetStyles().Get(CssConstants.FONT_SIZE)); UnitValue unitValue = CssUtils.ParseLengthValueToPt(content, fontSize, 0); if (unitValue == null) { return(0); } if (unitValue.IsPointValue()) { return(unitValue.GetValue() + additionalWidthFix); } return(maxAvailableDimension * unitValue.GetValue() / 100f); }