com.openhtmltopdf.css.style.derived.RectPropertySet Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of openhtmltopdf-core Show documentation
Show all versions of openhtmltopdf-core Show documentation
Open HTML to PDF is a CSS 2.1 renderer written in Java. This artifact contains the core rendering and layout code.
package com.openhtmltopdf.css.style.derived;
import com.openhtmltopdf.css.constants.CSSName;
import com.openhtmltopdf.css.style.CalculatedStyle;
import com.openhtmltopdf.css.style.CssContext;
/**
* Represents a set of CSS properties that together define
* some rectangular area, and per-side thickness.
*/
public class RectPropertySet {
// HACK
public static final RectPropertySet ALL_ZEROS = new RectPropertySet(CSSName.MARGIN_SHORTHAND, 0, 0, 0, 0);
protected float _top;
protected float _right;
protected float _bottom;
protected float _left;
protected RectPropertySet() {
_top = _right = _bottom = _left = 0f;
}
public RectPropertySet(
CSSName cssName,
float top,
float right,
float bottom,
float left
) {
this();
this._top = top;
this._right = right;
this._bottom = bottom;
this._left = left;
}
public static RectPropertySet newInstance(
CalculatedStyle style,
CSSName shortHandProperty,
CSSName.CSSSideProperties sideProperties,
float cbWidth,
CssContext ctx
) {
// HACK isLengthValue is part of margin auto hack
RectPropertySet rect =
new RectPropertySet(
shortHandProperty,
! style.isLengthOrNumber(sideProperties.top) ? 0 : style.getFloatPropertyProportionalHeight(sideProperties.top, cbWidth, ctx),
! style.isLengthOrNumber(sideProperties.right) ? 0 : style.getFloatPropertyProportionalWidth(sideProperties.right, cbWidth, ctx),
! style.isLengthOrNumber(sideProperties.bottom) ? 0 : style.getFloatPropertyProportionalHeight(sideProperties.bottom, cbWidth, ctx),
! style.isLengthOrNumber(sideProperties.left) ? 0 : style.getFloatPropertyProportionalWidth(sideProperties.left, cbWidth, ctx)
);
return rect;
}
@Override
public String toString() {
return "RectPropertySet[top=" + _top + ",right=" + _right + ",bottom=" + _bottom + ",left=" + _left + "]";
}
public float top() {
return _top;
}
public float right() {
return _right;
}
public float bottom() {
return _bottom;
}
public float left() {
return _left;
}
public float getLeftRightDiff() {
return _left - _right;
}
public float height() {
return _top + _bottom;
}
public float width() {
return _left + _right;
}
public void setTop(float _top) {
this._top = _top;
}
public void setRight(float _right) {
this._right = _right;
}
public void setBottom(float _bottom) {
this._bottom = _bottom;
}
public void setLeft(float _left) {
this._left = _left;
}
public RectPropertySet copyOf() {
RectPropertySet newRect = new RectPropertySet();
newRect._top = _top;
newRect._right = _right;
newRect._bottom = _bottom;
newRect._left = _left;
return newRect;
}
public boolean isAllZeros() {
return _top == 0.0f && _right == 0.0f && _bottom == 0.0f && _left == 0.0f;
}
public boolean hasNegativeValues() {
return _top < 0 || _right < 0 || _bottom < 0 || _left < 0;
}
public void resetNegativeValues() {
if (top() < 0) {
setTop(0);
}
if (right() < 0) {
setRight(0);
}
if (bottom() < 0) {
setBottom(0);
}
if (left() < 0) {
setLeft(0);
}
}
}