diff --git a/src/main/java/cit/PureATN/MultiNote/MultiNote.java b/src/main/java/cit/PureATN/MultiNote/MultiNote.java index 8142641..91c11ff 100644 --- a/src/main/java/cit/PureATN/MultiNote/MultiNote.java +++ b/src/main/java/cit/PureATN/MultiNote/MultiNote.java @@ -2,6 +2,7 @@ import java.awt.BasicStroke; import java.awt.Color; +import java.awt.geom.Point2D; import java.util.ArrayList; import java.util.Enumeration; import java.util.Iterator; @@ -23,6 +24,7 @@ import cit.PureATN.Note; import cit.PureATN.PenUser; import cit.PureATN.ShortStroke; +import cit.PureATN.SquiggleEventHandler; public class MultiNote extends Note { @@ -74,6 +76,10 @@ // getCanvas().getLayer().addChild(PPath.createRectangle(100, 100, 700, 990)); } + public SquiggleEventHandler createSquiggleEvent() { // may be overridden + return new SquiggleEventHandler_MultiNote(this); + } + public static void main(final String[] args) { new MultiNote(); } @@ -142,15 +148,17 @@ } - boolean expandMode = false; //初期状態は「たたんでいる」 + boolean expandMode = false; // 初期状態は「たたんでいる」 public void vlayout() { setExpandMode(!expandMode); } - public void setExpandMode(boolean b){ + + public void setExpandMode(boolean b) { expandMode = b; vlayout(expandMode); } + public void vlayout(boolean doexpand) { PTransformActivity ta = null; if (doexpand) { @@ -180,4 +188,26 @@ } } + + // マウスドラッグのとき、どれか1つの枠内で開始された筆記であれば、その下敷きのUserIDに切り替える + public void switchPenIDbyPoint(Point2D p) { + int matchCount = 0; + int lastMatchID = 0; + double originx = (double) p.getX(); + double originy = (double) p.getY(); + for (int i = 1; i < 11; i++) { + double localx = originx - shitajikiNodes[i].getOffset().getX(); + double localy = originy - shitajikiNodes[i].getOffset().getY(); + + if (shitajikiNodes[i].getBounds().contains(localx, localy)) { + matchCount++; + lastMatchID = i; + } + } + // if (matchCount==1 && lastMatchID > 0){ + if (lastMatchID > 0) { + setMousePenID(lastMatchID); + System.out.println("switch to " + lastMatchID); + } + } } diff --git a/src/main/java/cit/PureATN/MultiNote/SquiggleEventHandler_MultiNote.java b/src/main/java/cit/PureATN/MultiNote/SquiggleEventHandler_MultiNote.java new file mode 100644 index 0000000..9051b0a --- /dev/null +++ b/src/main/java/cit/PureATN/MultiNote/SquiggleEventHandler_MultiNote.java @@ -0,0 +1,28 @@ +package cit.PureATN.MultiNote; + +import java.awt.geom.Point2D; +import cit.PureATN.Note; +import cit.PureATN.SquiggleEventHandler; + +public class SquiggleEventHandler_MultiNote extends SquiggleEventHandler { + + MultiNote mnote; + + public SquiggleEventHandler_MultiNote(Note note) { + super(note); + if (note instanceof MultiNote) + mnote = (MultiNote) note; + } + + public String getPenIDStr() { + // ここで、マウス描画の場合、領域判定する + if (lastEv == startEv) { + final Point2D p = startEv.getPosition(); + // System.out.println(p.toString()); + mnote.switchPenIDbyPoint(p); + } + String mousePenIDStr = super.getPenIDStr(); + return mousePenIDStr; + } + +} diff --git a/src/main/java/cit/PureATN/Note.java b/src/main/java/cit/PureATN/Note.java index 04e3111..a09c72a 100644 --- a/src/main/java/cit/PureATN/Note.java +++ b/src/main/java/cit/PureATN/Note.java @@ -51,7 +51,8 @@ // らくがき用マウスイベント // final PBasicInputEventHandler squiggleEventHandler = // createSSSquiggleEventHandler(); - final PBasicInputEventHandler squiggleEventHandler = createSquiggleEventHandler(); + final PBasicInputEventHandler squiggleEventHandler = this.createSquiggleEvent();// may be overridden by multinote + System.out.println(squiggleEventHandler.getClass().getName()); squiggleEventHandler.setEventFilter(new PInputEventFilter(InputEvent.BUTTON1_MASK)); getCanvas().removeInputEventListener(getCanvas().getPanEventHandler()); getCanvas().addInputEventListener(squiggleEventHandler); @@ -75,6 +76,10 @@ getCanvas().setInteractingRenderQuality(PPaintContext.HIGH_QUALITY_RENDERING); } + public SquiggleEventHandler createSquiggleEvent(){ // may be overridden + return new SquiggleEventHandler(this); + } + /** * マウスで描くときのPenIDをどうするか (1〜10) * @@ -87,58 +92,8 @@ public int mousePenID = 1; // マウスで描くときのPenID - public PBasicInputEventHandler createSquiggleEventHandler() { - return new PDragSequenceEventHandler() { - - PNode pressPN; - - public void startDrag(final PInputEvent e) { - super.startDrag(e); - pressPN = e.getPickedNode(); - // System.out.println(pressPN.getClass().getName()); - - if (pressPN instanceof PCamera) { - - String mousePenIDStr = "pen0" + mousePenID; - PenUser.press(mousePenIDStr, 1, false); - - final Point2D p = e.getPosition(); - // squiggle = new ShortStroke(); - // layer.addChild(squiggle); - // squiggle.startDrag_on_draw(p.getX(), p.getY()); - PenUser.add(mousePenIDStr, (int) p.getX(), (int) p.getY()); - // // squiggle.setStroke(new BasicStroke((float) (3 / - // // e.getCamera().getViewScale()))); - // layer.repaint(); - } else { - } - } - - public void drag(final PInputEvent e) { - super.drag(e); - if (pressPN instanceof PCamera) - updateSquiggle(e); - } - - public void endDrag(final PInputEvent e) { - super.endDrag(e); - if (pressPN instanceof PCamera) { - updateSquiggle(e); - - String mousePenIDStr = "pen0" + mousePenID; - PenUser.press(mousePenIDStr, 0, false); - } - } - - public void updateSquiggle(final PInputEvent aEvent) { - final Point2D p = aEvent.getPosition(); - // squiggle.drag_on_draw(p.getX(), p.getY()); - // layer.repaint(); - String mousePenIDStr = "pen0" + mousePenID; - PenUser.add(mousePenIDStr, (int) p.getX(), (int) p.getY()); - - } - }; + public int getMousePenID() { + return mousePenID; } } diff --git a/src/main/java/cit/PureATN/SquiggleEventHandler.java b/src/main/java/cit/PureATN/SquiggleEventHandler.java new file mode 100644 index 0000000..f209e60 --- /dev/null +++ b/src/main/java/cit/PureATN/SquiggleEventHandler.java @@ -0,0 +1,73 @@ +package cit.PureATN; + +import java.awt.geom.Point2D; + +import org.piccolo2d.PCamera; +import org.piccolo2d.PNode; +import org.piccolo2d.event.PDragSequenceEventHandler; +import org.piccolo2d.event.PInputEvent; + +public class SquiggleEventHandler extends PDragSequenceEventHandler { + protected PNode pressPN; + protected PInputEvent startEv; + protected PInputEvent lastEv; + Note note; + + public SquiggleEventHandler(Note note) { + this.note = note; + } + + public String getPenIDStr() { + String mousePenIDStr = "pen0" + note.getMousePenID(); + return mousePenIDStr; + } + + public void startDrag(final PInputEvent e) { + super.startDrag(e); + startEv = lastEv = e; + pressPN = e.getPickedNode(); + // System.out.println(pressPN.getClass().getName()); + + if (pressPN instanceof PCamera) { + + String mousePenIDStr = getPenIDStr(); + PenUser.press(mousePenIDStr, 1, false); + + final Point2D p = e.getPosition(); + // squiggle = new ShortStroke(); + // layer.addChild(squiggle); + // squiggle.startDrag_on_draw(p.getX(), p.getY()); + PenUser.add(mousePenIDStr, (int) p.getX(), (int) p.getY()); + // // squiggle.setStroke(new BasicStroke((float) (3 / + // // e.getCamera().getViewScale()))); + // layer.repaint(); + } else { + } + } + + public void drag(final PInputEvent e) { + super.drag(e); + if (pressPN instanceof PCamera) + updateSquiggle(e); + } + + public void endDrag(final PInputEvent e) { + super.endDrag(e); + if (pressPN instanceof PCamera) { + updateSquiggle(e); + + String mousePenIDStr = getPenIDStr(); + PenUser.press(mousePenIDStr, 0, false); + } + startEv = null; + } + + public void updateSquiggle(final PInputEvent aEvent) { + lastEv = aEvent; + String mousePenIDStr = getPenIDStr(); + final Point2D p = aEvent.getPosition(); + PenUser.add(mousePenIDStr, (int) p.getX(), (int) p.getY()); + + } + +}