1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225
|
/**
* ===========================================
* LibLayout : a free Java layouting library
* ===========================================
*
* Project Info: http://reporting.pentaho.org/liblayout/
*
* (C) Copyright 2006-2007, by Pentaho Corporation and Contributors.
*
* This library is free software; you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Foundation;
* either version 2.1 of the License, or (at your option) any later version.
*
* This library 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307, USA.
*
* [Java is a trademark or registered trademark of Sun Microsystems, Inc.
* in the United States and other countries.]
*
* ------------
* $Id: Border.java 2739 2007-04-02 11:41:22Z taqua $
* ------------
* (C) Copyright 2006-2007, by Pentaho Corporation.
*/
package org.jfree.layouting.renderer.border;
/**
* A border is a split-supporting component that contains five border edges
* (top,left, bottom, right, split). The split-border is not used for rendering,
* it is meant to replace the other borders on inner split-edges.
* <p/>
* The border object itself is immutable. During a split operation, new borders
* have to be created.
* <p/>
* The border-radius defines the corner-rounding that might take place. This
* defines the applicable background area of the content box. (Round rects never
* cause the background to overlap the border, the corner space that lies
* outside the rounded corners will not receive the background.)
* <p/>
* The radius *must* be normalized; the sum of the radius sizes for a single
* edge must not exceed the edge's total size. (Ex: height >=
* (topLeftRadius.getHeight() + bottomLeftRadius.getHeight()). If the height is
* smaller as the radius, reduce the radius until both sizes fit.
*
* @author Thomas Morgner
*/
public class Border implements Cloneable
{
private static Border emptyBorder;
private BorderEdge top;
private BorderEdge left;
private BorderEdge bottom;
private BorderEdge right;
private BorderEdge splittingEdge;
private BorderCorner topLeft;
private BorderCorner topRight;
private BorderCorner bottomLeft;
private BorderCorner bottomRight;
private Boolean empty;
public Border(final BorderEdge top,
final BorderEdge left,
final BorderEdge bottom,
final BorderEdge right,
final BorderEdge splittingEdge,
final BorderCorner topLeft,
final BorderCorner topRight,
final BorderCorner bottomLeft,
final BorderCorner bottomRight)
{
this.top = top;
this.left = left;
this.bottom = bottom;
this.right = right;
this.splittingEdge = splittingEdge;
this.topLeft = topLeft;
this.topRight = topRight;
this.bottomLeft = bottomLeft;
this.bottomRight = bottomRight;
}
public BorderEdge getTop()
{
return top;
}
public BorderEdge getLeft()
{
return left;
}
public BorderEdge getBottom()
{
return bottom;
}
public BorderEdge getRight()
{
return right;
}
public BorderEdge getSplittingEdge()
{
return splittingEdge;
}
public BorderCorner getTopLeft()
{
return topLeft;
}
public BorderCorner getTopRight()
{
return topRight;
}
public BorderCorner getBottomLeft()
{
return bottomLeft;
}
public BorderCorner getBottomRight()
{
return bottomRight;
}
public Border[] splitVertically(Border[] borders)
{
if (borders == null || borders.length < 2)
{
borders = new Border[2];
}
borders[0] = (Border) clone();
borders[0].empty = null;
borders[0].right = borders[0].splittingEdge;
borders[1] = (Border) clone();
borders[1].empty = null;
borders[1].left = borders[1].splittingEdge;
return borders;
}
public Border[] splitHorizontally(Border[] borders)
{
if (borders == null || borders.length < 2)
{
borders = new Border[2];
}
borders[0] = (Border) clone();
borders[0].empty = null;
borders[0].bottom = borders[0].splittingEdge;
borders[1] = (Border) clone();
borders[1].empty = null;
borders[1].top = borders[1].splittingEdge;
return borders;
}
public Object clone()
{
try
{
return super.clone();
}
catch (CloneNotSupportedException e)
{
throw new IllegalStateException("Borders not supporting clone is evil!");
}
}
public static synchronized Border createEmptyBorder()
{
if (emptyBorder == null)
{
final BorderEdge edge = EmptyBorderEdge.getInstance();
final BorderCorner corner = EmptyBorderCorner.getInstance();
emptyBorder = new Border(edge, edge, edge, edge, edge,
corner, corner, corner, corner);
}
return emptyBorder;
}
public boolean isEmpty()
{
if (empty != null)
{
return empty.booleanValue();
}
if (top.getWidth().getValue() != 0)
{
empty = Boolean.FALSE;
return false;
}
if (left.getWidth().getValue() != 0)
{
empty = Boolean.FALSE;
return false;
}
if (bottom.getWidth().getValue() != 0)
{
empty = Boolean.FALSE;
return false;
}
if (right.getWidth().getValue() != 0)
{
empty = Boolean.FALSE;
return false;
}
empty = Boolean.TRUE;
return true;
}
}
|