Skip to content
Snippets Groups Projects
Commit 74a5c5dc authored by MANSOUR Chadi's avatar MANSOUR Chadi
Browse files

Tp end

parent 3175d350
Branches
No related tags found
No related merge requests found
......@@ -22,7 +22,7 @@ public class Circle implements Shape {
graphicsContext.setStroke(Color.BLACK);
graphicsContext.setLineWidth(2);
if (isFinished) {
graphicsContext.setFill(Color.GREEN);
graphicsContext.setFill(Color.GREEN.deriveColor(0,1,1,0.5));
graphicsContext.fillOval(x - radius, y - radius, 2 * radius, 2 * radius);
}
graphicsContext.strokeOval(x - radius, y - radius, 2 * radius, 2 * radius);
......@@ -70,4 +70,10 @@ public class Circle implements Shape {
return y;
}
public void setDimensions(double x, double y, double width, double height){
this.x = x;
this.y = y;
this.radius = width/2;
}
}
......@@ -23,7 +23,7 @@ public class Rectangle implements Shape{
graphicsContext.setStroke(Color.BLACK);
graphicsContext.setLineWidth(2);
if(isFinished){
graphicsContext.setFill(Color.RED);
graphicsContext.setFill(Color.RED.deriveColor(0,1,1,0.5));
graphicsContext.fillRect(x, y, width, height);
}
graphicsContext.strokeRect(x, y, width, height);
......@@ -68,4 +68,21 @@ public class Rectangle implements Shape{
public void setFillColor(Color fillColor) {
this.fillColor = fillColor;
}
public double getX() {
return x;
}
public double getY() {
return y;
}
public void setDimensions(double x, double y, double width, double height) {
this.x = x;
this.y = y;
this.width = Math.abs(width);
this.height = Math.abs(height);
if(width < 0 ){ this.x += width;}
if(height < 0){ this.y += height;}
}
}
......@@ -18,10 +18,22 @@ public class Drawer extends Canvas {
setOnMouseReleased(event->context.mouseReleased(event));
setOnMouseMoved(event->context.mouseMoved(event));
setOnMouseDragged(event->context.mouseMoved(event));
//setOnKeyPressed(event -> context.keyPressed(event));
setOnKeyPressed(event -> context.keyPressed(event));
}
public void repaint(){
this.getGraphicsContext2D().clearRect(0,0,this.getWidth(),this.getHeight());
for(Shape shape : shapes){
shape.paint(this.getGraphicsContext2D());
}
}
public void addShape(Shape shape){
shapes.add(shape);
}
public Shape shapeContains(double x, double y){
for(Shape shape : shapes){
if(shape.contains(x,y)) return shape;
}
return null;
}
}
package state;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
......@@ -11,6 +12,10 @@ public class DrawerContext {
public DrawerContext(Drawer drawer) {
this.drawer = drawer;
this.currentState = new NullDrawerState();
}
public void paint(GraphicsContext graphicsContext) {
drawer.repaint();
}
void mousePressed(MouseEvent event){
......@@ -22,12 +27,34 @@ public class DrawerContext {
currentState.mouseReleased(this,event.getX(),event.getY());
}
void mouseMoved(MouseEvent event){}
void mouseMoved(MouseEvent event){
currentState.mouseMoved(this,event.getX(),event.getY());
}
public void keyPressed(KeyEvent event) {
switch (event.getText()) {
case "c":
currentState = new StateCircle0();
setState(new StateCircle0());
break;
case "r":
setState(new StateRectangle0());
break;
case "m":
setState(new StateMoveShape());
break;
default:
setState(new NullDrawerState());
}
}
public Drawer drawer(){
return drawer;
}
public Drawer getDrawer() {
return drawer;
}
public void setState(DrawerState state) {
this.currentState = state;
}
}
......@@ -3,4 +3,6 @@ package state;
public interface DrawerState {
void mousePressed(DrawerContext context, double x, double y);
void mouseReleased(DrawerContext context, double x, double y);
void mouseMoved(DrawerContext context, double x, double y);
public void paint(DrawerContext context);
}
package state;
public class NullDrawerState implements DrawerState {
@Override
public void mousePressed(DrawerContext context, double x, double y) {}
@Override
public void mouseReleased(DrawerContext context, double x, double y) {}
@Override
public void mouseMoved(DrawerContext context, double x, double y) {}
@Override
public void paint(DrawerContext context) {
}
}
package state;
public enum Shapes {
RECTANGLE,
CIRCLE,
}
......@@ -10,4 +10,14 @@ public class StateCircle0 implements DrawerState {
public void mouseReleased(DrawerContext context, double x, double y) {
}
@Override
public void mouseMoved(DrawerContext context, double x, double y) {
}
@Override
public void paint(DrawerContext context) {
}
}
package state;
import shape.Circle;
public class StateCircle1 implements DrawerState{
private Circle circle;
public StateCircle1(Circle circle) {
this.circle = circle;
}
@Override
public void mousePressed(DrawerContext context, double x, double y) {}
@Override
public void mouseReleased(DrawerContext context, double x, double y) {
circle.setFinished(true);
context.paint(context.getDrawer().getGraphicsContext2D());
context.setState(new StateCircle0());
}
@Override
public void mouseMoved(DrawerContext context, double x, double y) {
double radius = Math.sqrt(Math.pow(x - circle.getX(), 2) + Math.pow(y - circle.getY(), 2));
circle.setDimensions(circle.getX(), circle.getY(), radius*2, radius*2);
context.paint(context.getDrawer().getGraphicsContext2D());
}
@Override
public void paint(DrawerContext context) {
}
}
package state;
import shape.Shape;
public class StateMoveShape implements DrawerState{
private Shape selectedShape;
private double previousX, previousY;
@Override
public void mousePressed(DrawerContext context, double x, double y) {
selectedShape = context.getDrawer().shapeContains(x,y);
if(selectedShape != null) {
previousX = x;
previousY = y;
}
}
@Override
public void mouseReleased(DrawerContext context, double x, double y) {
if(selectedShape != null) {
double deltaX = x - previousX;
double deltaY = y - previousY;
selectedShape.translate(deltaX, deltaY);
previousX = x;
previousY = y;
context.getDrawer().repaint();
}
}
@Override
public void mouseMoved(DrawerContext context, double x, double y) {
selectedShape = null;
}
@Override
public void paint(DrawerContext context) {
}
}
package state;
import shape.Rectangle;
public class StateRectangle0 implements DrawerState{
public StateRectangle0() { }
@Override
public void mousePressed(DrawerContext context, double x, double y) {
Rectangle rectangle = new Rectangle(x, y,0,0);
rectangle.setFinished(false);
context.getDrawer().addShape(rectangle);
context.setState(new StateRectangle1(rectangle));
}
@Override
public void mouseReleased(DrawerContext context, double x, double y) {
}
@Override
public void mouseMoved(DrawerContext context, double x, double y) {
}
@Override
public void paint(DrawerContext context) {
}
}
package state;
import shape.Rectangle;
public class StateRectangle1 implements DrawerState {
private Rectangle rectangle;
private double startX, startY;
public StateRectangle1(Rectangle rectangle) {
this.rectangle = rectangle;
this.startX = rectangle.getX();
this.startY = rectangle.getY();
}
@Override
public void mousePressed(DrawerContext context, double x, double y) {}
@Override
public void mouseReleased(DrawerContext context, double x, double y) {
rectangle.setFinished(true);
context.paint(context.getDrawer().getGraphicsContext2D());
context.setState(new StateRectangle0());
}
@Override
public void mouseMoved(DrawerContext context, double x, double y) {
double width = x - startX;
double height = y - startY;
rectangle.setDimensions(startX,startY,width,height);
context.paint(context.getDrawer().getGraphicsContext2D());
}
@Override
public void paint(DrawerContext context) {
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment