use of com.servoy.j2db.util.gui.CustomEtchedBorder in project servoy-client by Servoy.
the class FixedStyleSheet method getBorder.
public Border getBorder(AttributeSet a) {
Border b = null;
// Initial values.
Object borderStyle = null;
Object borderColor = null;
float top = getLength(null);
float right = getLength(null);
float bottom = getLength(null);
float left = getLength(null);
// Try to use the unexpanded "border" attribute, if any.
Object unexpandedBorder = a.getAttribute(CSS.Attribute.BORDER);
if (unexpandedBorder != null) {
StringTokenizer st = new StringTokenizer(unexpandedBorder.toString());
// general case.
while (st.hasMoreTokens()) {
String tok = st.nextToken();
// If we got digits in the token, then it refers to border size.
if (// $NON-NLS-1$
tok.matches("^[0-9]+.*")) {
top = right = bottom = left = getLength(tok);
} else // If it is a border style keyword, use it accordingly.
if (Arrays.asList(IStyleSheet.BORDER_STYLES).contains(tok)) {
borderStyle = tok;
} else // If "transparent" then transparent.
if (tok.equals(IStyleSheet.COLOR_TRANSPARENT)) {
borderColor = IStyleSheet.COLOR_TRANSPARENT;
} else // Otherwise assume it is a color.
{
Color c = PersistHelper.createColor(tok);
if (c != null)
borderColor = tok;
}
}
}
// extracted from the unexpanded "border" attribute.
if (a.isDefined(CSS.Attribute.BORDER_STYLE))
borderStyle = a.getAttribute(CSS.Attribute.BORDER_STYLE);
if (a.isDefined(CSS.Attribute.BORDER_COLOR))
borderColor = a.getAttribute(CSS.Attribute.BORDER_COLOR);
if (a.isDefined(CSS.Attribute.BORDER_TOP_WIDTH))
top = getLength(a.getAttribute(CSS.Attribute.BORDER_TOP_WIDTH));
if (a.isDefined(CSS.Attribute.BORDER_RIGHT_WIDTH))
right = getLength(a.getAttribute(CSS.Attribute.BORDER_RIGHT_WIDTH));
if (a.isDefined(CSS.Attribute.BORDER_BOTTOM_WIDTH))
bottom = getLength(a.getAttribute(CSS.Attribute.BORDER_BOTTOM_WIDTH));
if (a.isDefined(CSS.Attribute.BORDER_LEFT_WIDTH))
left = getLength(a.getAttribute(CSS.Attribute.BORDER_LEFT_WIDTH));
if (borderStyle == null) {
// TODO this should be fixed when we compile against java 7.
// java 7 expands the complete border:
Enumeration<?> attributes = a.getAttributeNames();
while (attributes.hasMoreElements()) {
Object element = attributes.nextElement();
if (element != null && element.toString().startsWith("border-top-style")) {
borderStyle = a.getAttribute(element);
break;
}
}
}
if (borderStyle == null && (borderColor != null || top >= 0 || right >= 0 || bottom >= 0 || left >= 0)) {
borderStyle = IStyleSheet.BORDER_STYLE_SOLID;
}
if (borderStyle != null) {
Color[] colors = getBorderColor(borderColor, a);
String bstyle = borderStyle.toString();
if (a.isDefined(CSSName.BORDER_TOP_LEFT_RADIUS.toString())) {
top = makeSizeSave(top);
right = makeSizeSave(right);
bottom = makeSizeSave(bottom);
left = makeSizeSave(left);
colors = expandColors(colors);
b = new RoundedBorder(top, left, bottom, right, colors[0], colors[3], colors[2], colors[1]);
float[] radius = new float[8];
parseCornerBorderRadius(a, radius, 0, CSSName.BORDER_TOP_LEFT_RADIUS.toString());
parseCornerBorderRadius(a, radius, 1, CSSName.BORDER_TOP_RIGHT_RADIUS.toString());
parseCornerBorderRadius(a, radius, 2, CSSName.BORDER_BOTTOM_RIGHT_RADIUS.toString());
parseCornerBorderRadius(a, radius, 3, CSSName.BORDER_BOTTOM_LEFT_RADIUS.toString());
((RoundedBorder) b).setRoundingRadius(radius);
((RoundedBorder) b).setBorderStyles(new String[] { (String) a.getAttribute(CSSName.BORDER_TOP_STYLE.toString()), (String) a.getAttribute(CSSName.BORDER_LEFT_STYLE.toString()), (String) a.getAttribute(CSSName.BORDER_BOTTOM_STYLE.toString()), (String) a.getAttribute(CSSName.BORDER_RIGHT_STYLE.toString()) });
} else if (bstyle.equals(IStyleSheet.BORDER_STYLE_INSET) || bstyle.equals(IStyleSheet.BORDER_STYLE_OUTSET)) {
int style = BevelBorder.LOWERED;
if (bstyle.equals(IStyleSheet.BORDER_STYLE_OUTSET))
style = BevelBorder.RAISED;
Insets customBorderInsets = null;
if (top != -1.0 || right != -1.0 || bottom != -1.0 || left != -1.0) {
top = makeSizeSave(top);
right = makeSizeSave(right);
bottom = makeSizeSave(bottom);
left = makeSizeSave(left);
customBorderInsets = new Insets((int) top, (int) left, (int) bottom, (int) right);
}
if (colors != null && colors.length > 0) {
if (colors.length == 1 || (colors.length == 4 && Utils.equalObjects(colors[0], colors[1]) && Utils.equalObjects(colors[0], colors[2]) && Utils.equalObjects(colors[0], colors[3]))) {
// this tries to do the same thing as the web does..
b = new CustomBevelBorder(style, colors[0], customBorderInsets);
} else if (colors.length == 2) {
b = new CustomBevelBorder(style, colors[0], colors[1], customBorderInsets);
} else if (colors.length > 3) {
b = new CustomBevelBorder(style, colors[0], colors[1], colors[2], colors[3], customBorderInsets);
}
} else {
b = new CustomBevelBorder(style, customBorderInsets);
}
} else if (bstyle.equals(IStyleSheet.BORDER_STYLE_NONE)) {
b = BorderFactory.createEmptyBorder();
} else if (bstyle.equals(IStyleSheet.BORDER_STYLE_DOUBLE)) {
top = makeSizeSave(top);
right = makeSizeSave(right);
bottom = makeSizeSave(bottom);
left = makeSizeSave(left);
b = BorderFactory.createEmptyBorder((int) top, (int) left, (int) bottom, (int) right);
} else if (bstyle.equals(IStyleSheet.BORDER_STYLE_GROOVE) || bstyle.equals(IStyleSheet.BORDER_STYLE_RIDGE)) {
int style = EtchedBorder.LOWERED;
if (bstyle.equals(IStyleSheet.BORDER_STYLE_RIDGE))
style = EtchedBorder.RAISED;
Insets customBorderInsets = null;
if (top != -1.0 || right != -1.0 || bottom != -1.0 || left != -1.0) {
top = makeSizeSave(top);
right = makeSizeSave(right);
bottom = makeSizeSave(bottom);
left = makeSizeSave(left);
customBorderInsets = new Insets((int) top, (int) left, (int) bottom, (int) right);
}
if (colors != null && colors.length > 0) {
if (colors.length == 1 || (colors.length == 4 && Utils.equalObjects(colors[0], colors[1]) && Utils.equalObjects(colors[0], colors[2]) && Utils.equalObjects(colors[0], colors[3]))) {
// this tries to do the same thing as the web does..
b = new CustomEtchedBorder(style, colors[0], customBorderInsets);
} else if (colors.length >= 2) {
b = new CustomEtchedBorder(style, colors[0], colors[1], customBorderInsets);
}
} else {
b = new CustomEtchedBorder(style, customBorderInsets);
}
} else if (bstyle.equals(IStyleSheet.BORDER_STYLE_SOLID) || bstyle.equals(IStyleSheet.BORDER_STYLE_DOTTED) || bstyle.equals(IStyleSheet.BORDER_STYLE_DASHED)) {
// int bw = (int) getLength(CSS.Attribute.BORDER_WIDTH, a);
// int colorCount = (colors == null ? 0 : colors.length);
colors = expandColors(colors);
// Object obj = a.getAttribute(CSS.Attribute.BORDER_WIDTH);
if (bstyle.equals(IStyleSheet.BORDER_STYLE_SOLID)) {
if (borderColor != null && IStyleSheet.COLOR_TRANSPARENT.equals(borderColor.toString())) {
top = makeSizeSave(top);
right = makeSizeSave(right);
bottom = makeSizeSave(bottom);
left = makeSizeSave(left);
b = BorderFactory.createEmptyBorder((int) top, (int) left, (int) bottom, (int) right);
} else if (colors != null) {
if (// is undefined, make 1 px
top == -1f && right == -1f && bottom == -1f && left == -1f) {
b = BorderFactory.createLineBorder(colors[0]);
} else if (// is contradiction solid but width 0 make empty border
top == 0f && right == 0f && bottom == 0f && left == 0f) {
b = BorderFactory.createEmptyBorder();
} else {
top = makeSizeSave(top);
right = makeSizeSave(right);
bottom = makeSizeSave(bottom);
left = makeSizeSave(left);
b = new SpecialMatteBorder(top, left, bottom, right, colors[0], colors[3], colors[2], colors[1]);
}
}
} else if (bstyle.equals(IStyleSheet.BORDER_STYLE_DASHED)) {
if (top <= 0 && left <= 0 && bottom <= 0 && right <= 0) {
top = left = bottom = right = 1;
}
b = new SpecialMatteBorder(top, left, bottom, right, colors[0], colors[3], colors[2], colors[1]);
((SpecialMatteBorder) b).setDashPattern(new float[] { 3, 3 });
} else if (bstyle.equals(IStyleSheet.BORDER_STYLE_DOTTED)) {
if (top <= 0 && left <= 0 && bottom <= 0 && right <= 0) {
top = left = bottom = right = 1;
}
b = new SpecialMatteBorder(top, left, bottom, right, colors[0], colors[3], colors[2], colors[1]);
((SpecialMatteBorder) b).setDashPattern(new float[] { 1, 1 });
}
}
}
return b;
}
Aggregations