/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
*/
/**
*
*/
package org.sikuli.guide;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.geom.AffineTransform;
import java.awt.geom.GeneralPath;
import javax.swing.JLabel;
import org.sikuli.script.Region;
public class SxBracket extends Visual{
public final static int DIRECTION_EAST = 1;
public final static int DIRECTION_WEST = 2;
public final static int DIRECTION_SOUTH = 3;
public final static int DIRECTION_NORTH = 4;
int direction;
public int PADDING_X = 2;
public int PADDING_Y = 2;
public int SHADOW_SIZE = 2;
int thickness = 10;
int margin = 5;
JLabel label;
int length;
boolean entrance = false;
public SxBracket(){
super();
init();
}
private void init(){
this.length = 30;
colorFront = Color.RED;
stroke = 3;
}
@Override
public void updateComponent() {
setLocationRelativeToRegion(getTarget(), layout);
}
@Override
public Visual setLocationRelativeToRegion(Region region, Layout side) {
if (side == Layout.TOP){
setActualSize(region.w,thickness);
setDirection(DIRECTION_SOUTH);
} else if (side == Layout.BOTTOM){
setActualSize(region.w,thickness);
setDirection(DIRECTION_NORTH);
} else if (side == Layout.LEFT){
setActualSize(thickness,region.h);
setDirection(DIRECTION_EAST);
} else if (side == Layout.RIGHT){
setActualSize(thickness,region.h);
setDirection(DIRECTION_WEST);
}
if (side == Layout.LEFT || side == Layout.RIGHT){
length = region.h;
}else{
length = region.w;
}
return super.setLocationRelativeToRegion(region,side);
}
@Override
public void startAnimation(){
// TODO: move this somewhere else
// this should only be called first time animation
// is started
// Why called here? Because ...
// we want the location to be decided
if (direction == DIRECTION_EAST){
setEntranceAnimation(createSlidingAnimator(-20,0));
} else if (direction == DIRECTION_WEST){
setEntranceAnimation(createSlidingAnimator(20,0));
} else if (direction == DIRECTION_SOUTH){
setEntranceAnimation(createSlidingAnimator(0,-20));
} else if (direction == DIRECTION_NORTH){
setEntranceAnimation(createSlidingAnimator(0,20));
}
super.startAnimation();
}
public void setDirection(int direction){
this.direction = direction;
}
@Override
public void paintComponent(Graphics g){
Graphics2D g2d = (Graphics2D) g;
Stroke pen = new BasicStroke(stroke);
g2d.setStroke(pen);
g2d.setColor(colorFront);
GeneralPath polyline = new GeneralPath();
polyline.moveTo(0,0);
polyline.lineTo(5,5);
polyline.lineTo(5,length/2-6);
polyline.lineTo(8,length/2);
polyline.lineTo(5,length/2+6);
polyline.lineTo(5,length-5);
polyline.lineTo(0,length);
AffineTransform rat = new AffineTransform();
if (direction == DIRECTION_EAST){
rat.translate(thickness,length);
rat.rotate(Math.PI);
} else if (direction == DIRECTION_SOUTH){
rat.translate(0,thickness);
rat.rotate(-Math.PI/2);
} else if (direction == DIRECTION_NORTH){
rat.translate(length,0);
rat.rotate(Math.PI/2);
}
g2d.transform(rat);
g2d.draw(polyline);
super.paintComponent(g);
}
}