public void draw(GraphicsContext ctx) {
Point cp = (Point) getValue(translateName);
double x = cp.x;
double y = cp.y;
ctx.rectmode(GraphicsContext.RectMode.CENTER);
Path p = new Path();
p.setFillColor(HANDLE_COLOR);
ctx.stroke(HANDLE_COLOR);
p.setStrokeColor(null);
ctx.nofill();
drawDot(ctx, x, y);
if (dragState == DragState.NONE) {
// Horizontal and vertical direction lines.
ctx.line(x, y, x + handleLength, y);
ctx.line(x, y, x, y + handleLength);
// Vertical arrow
p.moveto(x, y + handleLength + 3);
p.lineto(x - 5, y + handleLength - 3);
p.lineto(x + 5, y + handleLength - 3);
// Horizontal arrow
p.moveto(x + handleLength + 3, y);
p.lineto(x + handleLength - 3, y - 5);
p.lineto(x + handleLength - 3, y + 5);
} else if (dragState == DragState.CENTER) {
ctx.line(px, py, x, y);
drawDot(ctx, x, y);
} else if (dragState == DragState.HORIZONTAL) {
double x0, x1;
ctx.line(px - handleLength, y, x + handleLength, y);
if (x + handleLength > px - handleLength) {
// arrow points right
x0 = x + handleLength + 3;
x1 = x + handleLength - 3;
} else {
// arrow points left
x0 = x + handleLength - 3;
x1 = x + handleLength + 3;
}
p.moveto(x0, y);
p.lineto(x1, y - 5);
p.lineto(x1, y + 5);
} else if (dragState == DragState.VERTICAL) {
double y0, y1;
ctx.line(x, py - handleLength, x, y + handleLength);
if (y + handleLength > py - handleLength) {
// arrow points down
y0 = y + handleLength + 3;
y1 = y + handleLength - 3;
} else {
// arrow points up
y0 = y + handleLength - 3;
y1 = y + handleLength + 3;
}
p.moveto(x, y0);
p.lineto(x - 5, y1);
p.lineto(x + 5, y1);
}
ctx.nostroke();
ctx.draw(p);
}