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

Reply via email to