All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.itextpdf.layout.minmaxwidth.MinMaxWidthUtils Maven / Gradle / Ivy

There is a newer version: 9.0.0
Show newest version
/*
    This file is part of the iText (R) project.
    Copyright (c) 1998-2024 Apryse Group NV
    Authors: Apryse Software.

    This program is offered under a commercial and under the AGPL license.
    For commercial licensing, contact us at https://itextpdf.com/sales.  For AGPL licensing, see below.

    AGPL licensing:
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see .
 */
package com.itextpdf.layout.minmaxwidth;

import com.itextpdf.io.logs.IoLogMessageConstant;
import com.itextpdf.commons.utils.MessageFormatUtil;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.layout.IPropertyContainer;
import com.itextpdf.layout.borders.Border;
import com.itextpdf.layout.layout.LayoutArea;
import com.itextpdf.layout.layout.LayoutContext;
import com.itextpdf.layout.layout.LayoutResult;
import com.itextpdf.layout.properties.Property;
import com.itextpdf.layout.properties.UnitValue;
import com.itextpdf.layout.renderer.IRenderer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public final class MinMaxWidthUtils {

    private static final float eps = 0.01f;
    private static final float max = 32760f;

    public static float getEps() {
        return eps;
    }

    public static float getInfWidth() {
        return max;
    }

    public static float getInfHeight() { return 1e6f; }

    public static boolean isEqual(double x, double y) {
        return Math.abs(x - y) < eps;
    }

    public static MinMaxWidth countDefaultMinMaxWidth(IRenderer renderer) {
        LayoutResult result = renderer.layout(new LayoutContext(new LayoutArea(1, new Rectangle(getInfWidth(), getInfHeight()))));
        return result.getStatus() == LayoutResult.NOTHING ? new MinMaxWidth() :
                new MinMaxWidth(0, result.getOccupiedArea().getBBox().getWidth(), 0);
    }
    
    public static float getBorderWidth(IPropertyContainer element) {
        Border border = element.getProperty(Property.BORDER);
        Border rightBorder = element.getProperty(Property.BORDER_RIGHT);
        Border leftBorder = element.getProperty(Property.BORDER_LEFT);
        
        if (!element.hasOwnProperty(Property.BORDER_RIGHT)) {
            rightBorder = border;
        }
        if (!element.hasOwnProperty(Property.BORDER_LEFT)) {
            leftBorder = border;
        }
        
        float rightBorderWidth = rightBorder != null ? rightBorder.getWidth() : 0;
        float leftBorderWidth = leftBorder != null ? leftBorder.getWidth() : 0;
        return rightBorderWidth + leftBorderWidth;
    }
    
    public static float getMarginsWidth(IPropertyContainer element) {
        UnitValue rightMargin = element.getProperty(Property.MARGIN_RIGHT);
        if (null != rightMargin && !rightMargin.isPointValue()) {
            Logger logger = LoggerFactory.getLogger(MinMaxWidthUtils.class);
            logger.error(MessageFormatUtil.format(IoLogMessageConstant.PROPERTY_IN_PERCENTS_NOT_SUPPORTED,
                    Property.MARGIN_RIGHT));
        }
        UnitValue leftMargin = element.getProperty(Property.MARGIN_LEFT);
        if (null != leftMargin && !leftMargin.isPointValue()) {
            Logger logger = LoggerFactory.getLogger(MinMaxWidthUtils.class);
            logger.error(MessageFormatUtil.format(IoLogMessageConstant.PROPERTY_IN_PERCENTS_NOT_SUPPORTED,
                    Property.MARGIN_LEFT));
        }

        float rightMarginWidth = rightMargin != null ? rightMargin.getValue() : 0;
        float leftMarginWidth = leftMargin != null ? leftMargin.getValue() : 0;
        
        return  rightMarginWidth + leftMarginWidth;
    }
    
    public static float getPaddingWidth(IPropertyContainer element) {
        UnitValue rightPadding = element.getProperty(Property.PADDING_RIGHT);
        if (null != rightPadding && !rightPadding.isPointValue()) {
            Logger logger = LoggerFactory.getLogger(MinMaxWidthUtils.class);
            logger.error(MessageFormatUtil.format(IoLogMessageConstant.PROPERTY_IN_PERCENTS_NOT_SUPPORTED,
                    Property.PADDING_RIGHT));
        }
        UnitValue leftPadding = element.getProperty(Property.PADDING_LEFT);
        if (null != leftPadding && !leftPadding.isPointValue()) {
            Logger logger = LoggerFactory.getLogger(MinMaxWidthUtils.class);
            logger.error(MessageFormatUtil.format(IoLogMessageConstant.PROPERTY_IN_PERCENTS_NOT_SUPPORTED,
                    Property.PADDING_LEFT));
        }

        float rightPaddingWidth = rightPadding != null ? rightPadding.getValue() : 0;
        float leftPaddingWidth = leftPadding != null ? leftPadding.getValue() : 0;

        return  rightPaddingWidth + leftPaddingWidth;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy