Browse Source

Add mouseDragged handler and add code for freehand drawing and erasing

master
jan 3 years ago
parent
commit
9658e99e39
5 changed files with 105 additions and 4 deletions
  1. +1
    -2
      README.md
  2. +47
    -0
      src/DragGetter.java
  3. +18
    -1
      src/EuglenaApplet.java
  4. +27
    -0
      src/Freehand.java
  5. +12
    -1
      src/Menu.java

+ 1
- 2
README.md View File

@@ -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
- 0
src/DragGetter.java View 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());

+ 18
- 1
src/EuglenaApplet.java View File

@@ -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
- 0
src/Freehand.java View 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;
};
}
}

+ 12
- 1
src/Menu.java View File

@@ -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…
Cancel
Save