Add mouseDragged handler and add code for freehand drawing and erasing
This commit is contained in:
parent
99388a2786
commit
9658e99e39
@ -17,8 +17,7 @@ I (Jan) haven't tested the below commands on windows, but they should
|
||||
* Multiple windows (so that moving the control window around doesn't move what's
|
||||
on the projector.
|
||||
* Drawing using primitive shapes (lines, ellipses) and arbitrary colors.
|
||||
* Does NOT currently support freeform drawing... should be pretty easy to add though.
|
||||
|
||||
* Freehand drawing and erasing
|
||||
|
||||
|
||||
## Compiling
|
||||
|
47
src/DragGetter.java
Normal file
47
src/DragGetter.java
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
Interface for handling mouse drags
|
||||
*/
|
||||
|
||||
public interface DragGetter {
|
||||
boolean drag(int x1, int y1, int x2, int y2);
|
||||
}
|
||||
|
||||
|
||||
//public interface Shape {
|
||||
// public int numVertices();
|
||||
//}
|
||||
//
|
||||
//
|
||||
//class Circle2 implements Shape {
|
||||
// Circle2() {
|
||||
// blah;
|
||||
// }
|
||||
//
|
||||
// int numVertices() {
|
||||
// return 0;
|
||||
// }
|
||||
//
|
||||
// void expand() {
|
||||
// blah2;
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//class Square implements Shape {
|
||||
// int numVertices() {
|
||||
// return 4;
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//
|
||||
//Shape g = new Circle2();
|
||||
////g.expand(); // bad
|
||||
//println(g.numVertices()); //good
|
||||
//g = new Square();
|
||||
//println(g.numVertices());
|
||||
//
|
||||
//void printNumberOfVertices(Shape s) {
|
||||
// println(s.numVertices());
|
||||
//}
|
||||
//
|
||||
//printNumberOfVertices(new Circle2());
|
||||
//printNumberOfVertices(new Square());
|
@ -22,6 +22,7 @@ public class EuglenaApplet extends PApplet {
|
||||
Menu menu;
|
||||
Calibrator calibrator;
|
||||
ClickGetter clickGetter;
|
||||
DragGetter dragGetter;
|
||||
|
||||
//Pen
|
||||
int penColor = color(200);
|
||||
@ -77,7 +78,7 @@ public class EuglenaApplet extends PApplet {
|
||||
|
||||
|
||||
@Override
|
||||
public void mouseClicked(){
|
||||
public void mouseClicked() {
|
||||
// Ignore mouse clicks in menu area
|
||||
if (mouseX > width - menu.width) {
|
||||
return;
|
||||
@ -92,6 +93,22 @@ public class EuglenaApplet extends PApplet {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseDragged() {
|
||||
// Ignore mouse drags from menu area
|
||||
if (pmouseX > width - menu.width) {
|
||||
return;
|
||||
}
|
||||
|
||||
// If we have a clickGetter, use that to handle the mouse click
|
||||
if (dragGetter != null) {
|
||||
boolean done = dragGetter.drag(pmouseX, pmouseY, mouseX, mouseY);
|
||||
if (done) {
|
||||
dragGetter = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyPressed() {
|
||||
/*
|
||||
|
27
src/Freehand.java
Normal file
27
src/Freehand.java
Normal file
@ -0,0 +1,27 @@
|
||||
class Freehand {
|
||||
/*
|
||||
Class for freehand drawing
|
||||
*/
|
||||
|
||||
int color, brushSize;
|
||||
|
||||
Freehand(int color, int penWidth) {
|
||||
this.color = color;
|
||||
this.brushSize = penWidth;
|
||||
}
|
||||
|
||||
DragGetter makeDragGetter(ProjectorApplet p) {
|
||||
/*
|
||||
Create a DragGetter which can accept incoming mouse drags
|
||||
and use them to draw lines
|
||||
*/
|
||||
|
||||
return (int x1, int y1, int x2, int y2) -> {
|
||||
Line line = new Line(x1, y1, x2, y2, this.color, this.brushSize);
|
||||
p.commandQueue.add(line.makeProjectorCommand());
|
||||
|
||||
// Keep using this DragGetter, don't stop
|
||||
return false;
|
||||
};
|
||||
}
|
||||
}
|
@ -200,6 +200,7 @@ class Menu {
|
||||
|
||||
//println(theEvent);
|
||||
if (theEvent.isFrom(shapesList)) {
|
||||
parent.dragGetter = null;
|
||||
switch((int) shapesList.getValue()) {
|
||||
case 0:
|
||||
parent.clickGetter = new Ellipse(parent.penColor, parent.penWidth)
|
||||
@ -215,6 +216,7 @@ class Menu {
|
||||
break;
|
||||
}
|
||||
} else if (theEvent.isFrom(animateList)){
|
||||
parent.dragGetter = null;
|
||||
switch((int) animateList.getValue()) {
|
||||
case 0:
|
||||
parent.clickGetter = new Shrink(parent.operationSpeed)
|
||||
@ -275,11 +277,20 @@ class Menu {
|
||||
parent.projectorApplet.calibrator.toggle();
|
||||
break;
|
||||
|
||||
case "Freehand":
|
||||
parent.clickGetter = null;
|
||||
parent.dragGetter = new Freehand(parent.penColor, parent.penWidth)
|
||||
.makeDragGetter(parent.projectorApplet);
|
||||
break;
|
||||
|
||||
case "Eraser":
|
||||
parent.penColor = parent.color(0, 0, 0);
|
||||
parent.clickGetter = null;
|
||||
parent.dragGetter = new Freehand(parent.projectorApplet.bgColor, parent.penWidth)
|
||||
.makeDragGetter(parent.projectorApplet);
|
||||
break;
|
||||
|
||||
case "Line":
|
||||
parent.dragGetter = null;
|
||||
parent.clickGetter = new Line(parent.penColor, parent.penWidth)
|
||||
.makeClickGetter(parent.projectorApplet);
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user