Revision: 1174
Author: heuermh
Date: Fri Aug 31 13:06:40 2012
Log: Issue 207 ; ignore mouse pressed and released events with button
MouseEvent.NOBUTTON instead of throwing an exception
http://code.google.com/p/piccolo2d/source/detail?r=1174
Modified:
/piccolo2d.java/branches/release-1.3.1/core/src/main/java/edu/umd/cs/piccolo/PCanvas.java
/piccolo2d.java/branches/release-1.3.1/core/src/test/java/edu/umd/cs/piccolo/PCanvasTest.java
=======================================
---
/piccolo2d.java/branches/release-1.3.1/core/src/main/java/edu/umd/cs/piccolo/PCanvas.java
Sun Nov 13 11:00:58 2011
+++
/piccolo2d.java/branches/release-1.3.1/core/src/main/java/edu/umd/cs/piccolo/PCanvas.java
Fri Aug 31 13:06:40 2012
@@ -789,6 +789,7 @@
requestFocus();
boolean shouldBalanceEvent = false;
+ boolean shouldSendEvent = false;
final MouseEvent event = copyButtonsFromModifiers(rawEvent,
MouseEvent.MOUSE_PRESSED);
@@ -798,6 +799,7 @@
shouldBalanceEvent = true;
}
isButton1Pressed = true;
+ shouldSendEvent = true;
break;
case MouseEvent.BUTTON2:
@@ -805,6 +807,7 @@
shouldBalanceEvent = true;
}
isButton2Pressed = true;
+ shouldSendEvent = true;
break;
case MouseEvent.BUTTON3:
@@ -812,22 +815,26 @@
shouldBalanceEvent = true;
}
isButton3Pressed = true;
+ shouldSendEvent = true;
break;
- default:
- throw new RuntimeException("mousePressed without
buttons specified");
+ default:
+ break;
}
if (shouldBalanceEvent) {
sendRetypedMouseEventToInputManager(event,
MouseEvent.MOUSE_RELEASED);
}
- sendInputEventToInputManager(event, MouseEvent.MOUSE_PRESSED);
+ if (shouldSendEvent) {
+ sendInputEventToInputManager(event,
MouseEvent.MOUSE_PRESSED);
+ }
}
/** {@inheritDoc} */
public void mouseReleased(final MouseEvent rawEvent) {
boolean shouldBalanceEvent = false;
+ boolean shouldSendEvent = false;
final MouseEvent event = copyButtonsFromModifiers(rawEvent,
MouseEvent.MOUSE_RELEASED);
@@ -837,6 +844,7 @@
shouldBalanceEvent = true;
}
isButton1Pressed = false;
+ shouldSendEvent = true;
break;
case MouseEvent.BUTTON2:
@@ -844,6 +852,7 @@
shouldBalanceEvent = true;
}
isButton2Pressed = false;
+ shouldSendEvent = true;
break;
case MouseEvent.BUTTON3:
@@ -851,16 +860,21 @@
shouldBalanceEvent = true;
}
isButton3Pressed = false;
+ shouldSendEvent = true;
break;
+
default:
- throw new RuntimeException("mouseReleased without
buttons specified");
+ shouldBalanceEvent = false;
+ shouldSendEvent = false;
}
if (shouldBalanceEvent) {
sendRetypedMouseEventToInputManager(event,
MouseEvent.MOUSE_PRESSED);
}
- sendInputEventToInputManager(event, MouseEvent.MOUSE_RELEASED);
+ if (shouldSendEvent) {
+ sendInputEventToInputManager(event,
MouseEvent.MOUSE_RELEASED);
+ }
}
private MouseEvent copyButtonsFromModifiers(final MouseEvent
rawEvent, final int eventType) {
=======================================
---
/piccolo2d.java/branches/release-1.3.1/core/src/test/java/edu/umd/cs/piccolo/PCanvasTest.java
Sun Nov 13 11:00:58 2011
+++
/piccolo2d.java/branches/release-1.3.1/core/src/test/java/edu/umd/cs/piccolo/PCanvasTest.java
Fri Aug 31 13:06:40 2012
@@ -36,6 +36,11 @@
import java.awt.Cursor;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.JPanel;
+
/**
* Unit test for PCanvas.
*/
@@ -163,4 +168,109 @@
assertNotNull(listeners);
assertEquals(2, listeners.length); // zoom + pan + mockListener
}
+
+ public void testMouseNoButtonPressed() {
+ JPanel panel = new JPanel();
+ panel.add("Center", canvas);
+ canvas.addInputEventListener(mockListener);
+ MouseEvent mouseEvent = new MouseEvent(canvas, 0,
System.currentTimeMillis(), 0, 10, 10, 1, false, MouseEvent.NOBUTTON);
+ for (int i = 0, size = canvas.getMouseListeners().length; i <
size; i++) {
+ MouseListener mouseListener = canvas.getMouseListeners()[i];
+ mouseListener.mousePressed(mouseEvent);
+ }
+ assertEquals(0, mockListener.getNotificationCount());
+ }
+
+ public void testMouseButton1Pressed() {
+ JPanel panel = new JPanel();
+ panel.add("Center", canvas);
+ canvas.addInputEventListener(mockListener);
+ MouseEvent mouseEvent = new MouseEvent(canvas, 0,
System.currentTimeMillis(), 0, 10, 10, 1, false, MouseEvent.BUTTON1);
+ for (int i = 0, size = canvas.getMouseListeners().length; i <
size; i++) {
+ MouseListener mouseListener = canvas.getMouseListeners()[i];
+ mouseListener.mousePressed(mouseEvent);
+ }
+ assertEquals(1, mockListener.getNotificationCount());
+ }
+
+ public void testMouseButton2Pressed() {
+ JPanel panel = new JPanel();
+ panel.add("Center", canvas);
+ canvas.addInputEventListener(mockListener);
+ MouseEvent mouseEvent = new MouseEvent(canvas, 0,
System.currentTimeMillis(), 0, 10, 10, 1, false, MouseEvent.BUTTON2);
+ for (int i = 0, size = canvas.getMouseListeners().length; i <
size; i++) {
+ MouseListener mouseListener = canvas.getMouseListeners()[i];
+ mouseListener.mousePressed(mouseEvent);
+ }
+ assertEquals(1, mockListener.getNotificationCount());
+ }
+
+ public void testMouseButton3Pressed() {
+ JPanel panel = new JPanel();
+ panel.add("Center", canvas);
+ canvas.addInputEventListener(mockListener);
+ MouseEvent mouseEvent = new MouseEvent(canvas, 0,
System.currentTimeMillis(), 0, 10, 10, 1, false, MouseEvent.BUTTON3);
+ for (int i = 0, size = canvas.getMouseListeners().length; i <
size; i++) {
+ MouseListener mouseListener = canvas.getMouseListeners()[i];
+ mouseListener.mousePressed(mouseEvent);
+ }
+ assertEquals(1, mockListener.getNotificationCount());
+ }
+
+ public void testMouseNoButtonReleased() {
+ JPanel panel = new JPanel();
+ panel.add("Center", canvas);
+ canvas.addInputEventListener(mockListener);
+ MouseEvent mouseEvent = new MouseEvent(canvas, 0,
System.currentTimeMillis(), 0, 10, 10, 1, false, MouseEvent.NOBUTTON);
+ for (int i = 0, size = canvas.getMouseListeners().length; i <
size; i++) {
+ MouseListener mouseListener = canvas.getMouseListeners()[i];
+ mouseListener.mouseReleased(mouseEvent);
+ }
+ assertEquals(0, mockListener.getNotificationCount());
+ }
+
+ public void testMouseButton1Released() {
+ JPanel panel = new JPanel();
+ panel.add("Center", canvas);
+ canvas.addInputEventListener(mockListener);
+ MouseEvent mouseEvent = new MouseEvent(canvas, 0,
System.currentTimeMillis(), 0, 10, 10, 1, false, MouseEvent.BUTTON1);
+ for (int i = 0, size = canvas.getMouseListeners().length; i <
size; i++) {
+ MouseListener mouseListener = canvas.getMouseListeners()[i];
+ mouseListener.mouseReleased(mouseEvent);
+ }
+ assertEquals(3, mockListener.getNotificationCount());
+ for (int i = 0; i < 3; i++) {
+ assertEquals(MouseEvent.BUTTON1,
mockListener.getNotification(i).event.getButton());
+ }
+ }
+
+ public void testMouseButton2Released() {
+ JPanel panel = new JPanel();
+ panel.add("Center", canvas);
+ canvas.addInputEventListener(mockListener);
+ MouseEvent mouseEvent = new MouseEvent(canvas, 0,
System.currentTimeMillis(), 0, 10, 10, 1, false, MouseEvent.BUTTON2);
+ for (int i = 0, size = canvas.getMouseListeners().length; i <
size; i++) {
+ MouseListener mouseListener = canvas.getMouseListeners()[i];
+ mouseListener.mouseReleased(mouseEvent);
+ }
+ assertEquals(3, mockListener.getNotificationCount());
+ for (int i = 0; i < 3; i++) {
+ assertEquals(MouseEvent.BUTTON2,
mockListener.getNotification(i).event.getButton());
+ }
+ }
+
+ public void testMouseButton3Released() {
+ JPanel panel = new JPanel();
+ panel.add("Center", canvas);
+ canvas.addInputEventListener(mockListener);
+ MouseEvent mouseEvent = new MouseEvent(canvas, 0,
System.currentTimeMillis(), 0, 10, 10, 1, false, MouseEvent.BUTTON3);
+ for (int i = 0, size = canvas.getMouseListeners().length; i <
size; i++) {
+ MouseListener mouseListener = canvas.getMouseListeners()[i];
+ mouseListener.mouseReleased(mouseEvent);
+ }
+ assertEquals(3, mockListener.getNotificationCount());
+ for (int i = 0; i < 3; i++) {
+ assertEquals(MouseEvent.BUTTON3,
mockListener.getNotification(i).event.getButton());
+ }
+ }
}
--
Piccolo2D Developers Group: http://groups.google.com/group/piccolo2d-dev?hl=en