})
.build();
final Circle colorRectIndicator = CircleBuilder.create().centerX(60).centerY(60).radius(5).stroke(Color.WHITE).fill(null).effect(new DropShadow(2, 0, 1, Color.BLACK)).build();
colorRectIndicator.centerXProperty().bind(new DoubleBinding() {
{ bind(sat); }
@Override protected double computeValue() {
return (PICKER_PADDING + 10) + (RECT_SIZE * (sat.get() / 100));
}
});
colorRectIndicator.centerYProperty().bind(new DoubleBinding() {
{ bind(bright); }
@Override protected double computeValue() {
return (PICKER_PADDING + ARROW_SIZE + 10) + (RECT_SIZE * (1 - (bright.get() / 100)));
}
});
final Rectangle colorRect = RectangleBuilder.create()
.x(PICKER_PADDING + 10)
.y(PICKER_PADDING + ARROW_SIZE + 10)
.width(RECT_SIZE)
.height(RECT_SIZE)
.build();
colorRect.fillProperty().bind(new ObjectBinding<Paint>() {
{ bind(color); }
@Override protected Paint computeValue() {
return Color.hsb(hue.getValue(), 1, 1);
}
});
Rectangle colorRectOverlayOne = RectangleBuilder.create()
.x(PICKER_PADDING + 10)
.y(PICKER_PADDING + ARROW_SIZE + 10)
.width(RECT_SIZE)
.height(RECT_SIZE)
.fill(new LinearGradient(0, 0, 1, 0, true, CycleMethod.NO_CYCLE, new Stop(0, Color.rgb(255, 255, 255, 1)), new Stop(1, Color.rgb(255, 255, 255, 0)))).build();
EventHandler<MouseEvent> rectMouseHandler = new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent event) {
final double x = event.getX() - colorRect.getX();
final double y = event.getY() - colorRect.getY();
sat.set(clamp(x / RECT_SIZE) * 100);
bright.set(100 - (clamp(y / RECT_SIZE) * 100));
}
};
Rectangle colorRectOverlayTwo = RectangleBuilder.create()
.x(PICKER_PADDING + 10)
.y(PICKER_PADDING + ARROW_SIZE + 10)
.width(RECT_SIZE)
.height(RECT_SIZE)
.fill(new LinearGradient(0, 0, 0, 1, true, CycleMethod.NO_CYCLE, new Stop(0, Color.rgb(0, 0, 0, 0)), new Stop(1, Color.rgb(0, 0, 0, 1))))
.onMouseDragged(rectMouseHandler)
.onMouseClicked(rectMouseHandler)
.build();
final Rectangle colorBar = RectangleBuilder.create()
.x(PICKER_PADDING + PICKER_WIDTH - 30)
.y(PICKER_PADDING + ARROW_SIZE + 10)
.width(20)
.height(RECT_SIZE)
.fill(createHueGradient())
.build();
final Rectangle colorBarIndicator = RectangleBuilder.create()
.x(PICKER_PADDING + PICKER_WIDTH - 32)
.y(PICKER_PADDING + ARROW_SIZE + 15)
.width(24)
.height(10)
.arcWidth(4)
.arcHeight(4)
.stroke(Color.WHITE)
.fill(null)
.effect(new DropShadow(2, 0, 1, Color.BLACK))
.build();
colorBarIndicator.yProperty().bind(new DoubleBinding() {
{ bind(hue); }
@Override protected double computeValue() {
return (PICKER_PADDING + ARROW_SIZE + 5) + (RECT_SIZE * (hue.get() / 360));
}
});