예제 #1
0
        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;
                }
            }
        }
예제 #4
0
        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));
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }