fixed double borders (how far to draw line 2 if no vs a border), dashdot looks good
PR: Obtained from: Submitted by: Reviewed by: git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@352755 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
031c11afa2
commit
f287ddbeac
@ -53,11 +53,12 @@ public class SVBorder extends AbstractBorder {
|
|||||||
Color oldColor = g.getColor();
|
Color oldColor = g.getColor();
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
// System.err.println("northBorder="+northBorderType);
|
||||||
paintNormalBorders(g, x, y, width, height);
|
paintNormalBorders(g, x, y, width, height);
|
||||||
paintDottedBorders(g, x, y, width, height);
|
paintDottedBorders(g, x, y, width, height);
|
||||||
paintDashedBorders(g, x, y, width, height);
|
paintDashedBorders(g, x, y, width, height);
|
||||||
paintDoubleBorders(g, x, y, width, height);
|
paintDoubleBorders(g, x, y, width, height);
|
||||||
|
paintDashDotDotBorders(g, x, y, width, height);
|
||||||
|
|
||||||
|
|
||||||
g.setColor(oldColor);
|
g.setColor(oldColor);
|
||||||
@ -290,8 +291,19 @@ public class SVBorder extends AbstractBorder {
|
|||||||
|
|
||||||
g.setColor(northColor);
|
g.setColor(northColor);
|
||||||
|
|
||||||
|
int leftx=x;
|
||||||
|
int rightx=width;
|
||||||
|
|
||||||
|
// if there are borders on the west or east then
|
||||||
|
// the second line shouldn't cross them
|
||||||
|
if (westBorder)
|
||||||
|
leftx = x+3;
|
||||||
|
|
||||||
|
if (eastBorder)
|
||||||
|
rightx = width-3;
|
||||||
|
|
||||||
g.drawLine(x,y,width,y);
|
g.drawLine(x,y,width,y);
|
||||||
g.drawLine(x+3,y+2,width-3,y+2);
|
g.drawLine(leftx,y+2,rightx,y+2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eastBorder &&
|
if (eastBorder &&
|
||||||
@ -303,8 +315,17 @@ public class SVBorder extends AbstractBorder {
|
|||||||
|
|
||||||
g.setColor(eastColor);
|
g.setColor(eastColor);
|
||||||
|
|
||||||
|
int topy=y;
|
||||||
|
int bottomy=height;
|
||||||
|
|
||||||
|
if (northBorder)
|
||||||
|
topy=y+3;
|
||||||
|
|
||||||
|
if (southBorder)
|
||||||
|
bottomy=height-3;
|
||||||
|
|
||||||
g.drawLine(width-1,y,width-1,height);
|
g.drawLine(width-1,y,width-1,height);
|
||||||
g.drawLine(width-3,y+3,width-3,height-3);
|
g.drawLine(width-3,topy,width-3,bottomy);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (southBorder &&
|
if (southBorder &&
|
||||||
@ -313,9 +334,18 @@ public class SVBorder extends AbstractBorder {
|
|||||||
|
|
||||||
g.setColor(southColor);
|
g.setColor(southColor);
|
||||||
|
|
||||||
|
int leftx=y;
|
||||||
|
int rightx=width;
|
||||||
|
|
||||||
|
if (westBorder)
|
||||||
|
leftx=x+3;
|
||||||
|
|
||||||
|
if (eastBorder)
|
||||||
|
rightx=width-3;
|
||||||
|
|
||||||
|
|
||||||
g.drawLine(x,height - 1,width,height - 1);
|
g.drawLine(x,height - 1,width,height - 1);
|
||||||
g.drawLine(x+3,height - 3,width-3,height - 3);
|
g.drawLine(leftx,height - 3,rightx,height - 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (westBorder &&
|
if (westBorder &&
|
||||||
@ -327,11 +357,122 @@ public class SVBorder extends AbstractBorder {
|
|||||||
|
|
||||||
g.setColor(westColor);
|
g.setColor(westColor);
|
||||||
|
|
||||||
|
int topy=y;
|
||||||
|
int bottomy=height-3;
|
||||||
|
|
||||||
|
if (northBorder)
|
||||||
|
topy=y+2;
|
||||||
|
|
||||||
|
if (southBorder)
|
||||||
|
bottomy=height-3;
|
||||||
|
|
||||||
g.drawLine(x,y,x,height);
|
g.drawLine(x,y,x,height);
|
||||||
g.drawLine(x+2,y+2,x+2,height-3);
|
g.drawLine(x+2,topy,x+2,bottomy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void paintDashDotDotBorders(Graphics g, int x, int y, int width,
|
||||||
|
int height) {
|
||||||
|
if (northBorder &&
|
||||||
|
((northBorderType == HSSFCellStyle.BORDER_DASH_DOT_DOT) ||
|
||||||
|
(northBorderType == HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT))
|
||||||
|
) {
|
||||||
|
int thickness = getThickness(northBorderType);
|
||||||
|
|
||||||
|
g.setColor(northColor);
|
||||||
|
for (int l=x; l < width;) {
|
||||||
|
l=l+drawDashDotDot(g, l, y, thickness, true, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eastBorder &&
|
||||||
|
((eastBorderType == HSSFCellStyle.BORDER_DASH_DOT_DOT) ||
|
||||||
|
(eastBorderType == HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT))
|
||||||
|
) {
|
||||||
|
|
||||||
|
int thickness = getThickness(eastBorderType);
|
||||||
|
|
||||||
|
g.setColor(eastColor);
|
||||||
|
|
||||||
|
for (int l=y;l < height;) {
|
||||||
|
//System.err.println("drawing east");
|
||||||
|
l=l+drawDashDotDot(g,width-1,l,thickness,false,false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (southBorder &&
|
||||||
|
((southBorderType == HSSFCellStyle.BORDER_DASH_DOT_DOT) ||
|
||||||
|
(southBorderType == HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT))
|
||||||
|
) {
|
||||||
|
|
||||||
|
int thickness = getThickness(southBorderType);
|
||||||
|
|
||||||
|
g.setColor(southColor);
|
||||||
|
|
||||||
|
for (int l=x; l < width;) {
|
||||||
|
//System.err.println("drawing south");
|
||||||
|
l=l+drawDashDotDot(g, l, height-1, thickness, true, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (westBorder &&
|
||||||
|
((westBorderType == HSSFCellStyle.BORDER_DASH_DOT_DOT) ||
|
||||||
|
(westBorderType == HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT))
|
||||||
|
) {
|
||||||
|
|
||||||
|
int thickness = getThickness(westBorderType);
|
||||||
|
|
||||||
|
g.setColor(westColor);
|
||||||
|
|
||||||
|
for (int l=y;l < height;) {
|
||||||
|
//System.err.println("drawing west");
|
||||||
|
l=l+drawDashDotDot(g,x,l,thickness,false,true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Draws one dash dot dot horizontally or vertically with thickness drawn
|
||||||
|
* incrementally to either the right or left.
|
||||||
|
*
|
||||||
|
* @param g graphics object for drawing with
|
||||||
|
* @param x the x origin of the line
|
||||||
|
* @param y the y origin of the line
|
||||||
|
* @param thickness the thickness of the line
|
||||||
|
* @param horizontal or vertical (true for horizontal)
|
||||||
|
* @param right/bottom or left/top thickness (true for right or top),
|
||||||
|
* if true then the x or y origin will be incremented to provide
|
||||||
|
* thickness, if false, they'll be decremented. For vertical
|
||||||
|
* borders, x is incremented or decremented, for horizontal its y.
|
||||||
|
* Just set to true for north and west, and false for east and
|
||||||
|
* south.
|
||||||
|
* @returns length - returns the length of the line.
|
||||||
|
*/
|
||||||
|
private int drawDashDotDot(Graphics g,int x, int y, int thickness,
|
||||||
|
boolean horizontal,
|
||||||
|
boolean rightBottom) {
|
||||||
|
|
||||||
|
for (int t=0; t < thickness; t++) {
|
||||||
|
if (!rightBottom) {
|
||||||
|
t = 0 - t; //add negative thickness so we go the other way
|
||||||
|
//then we'll decrement instead of increment.
|
||||||
|
}
|
||||||
|
if (horizontal) {
|
||||||
|
g.drawLine(x,y+t,x+5,y+t);
|
||||||
|
g.drawLine(x+8,y+t,x+10,y+t);
|
||||||
|
g.drawLine(x+13,y+t,x+15,y+t);
|
||||||
|
} else {
|
||||||
|
g.drawLine(x+t,y,x+t,y+5);
|
||||||
|
g.drawLine(x+t,y+8,x+t,y+10);
|
||||||
|
g.drawLine(x+t,y+13,x+t,y+15);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 18;
|
||||||
|
}
|
||||||
|
|
||||||
private int getThickness(int thickness) {
|
private int getThickness(int thickness) {
|
||||||
int retval=1;
|
int retval=1;
|
||||||
switch (thickness) {
|
switch (thickness) {
|
||||||
@ -347,6 +488,12 @@ public class SVBorder extends AbstractBorder {
|
|||||||
case HSSFCellStyle.BORDER_DASHED:
|
case HSSFCellStyle.BORDER_DASHED:
|
||||||
retval=1;
|
retval=1;
|
||||||
break;
|
break;
|
||||||
|
case HSSFCellStyle.BORDER_DASH_DOT_DOT:
|
||||||
|
retval=1;
|
||||||
|
break;
|
||||||
|
case HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT:
|
||||||
|
retval=3;
|
||||||
|
break;
|
||||||
case HSSFCellStyle.BORDER_HAIR:
|
case HSSFCellStyle.BORDER_HAIR:
|
||||||
retval=1;
|
retval=1;
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user