Revision: 556
Author: allain.lalonde
Date: Fri Jul 24 07:16:41 2009
Log: Refactored PCanvas code into more manageable private methods. Hooray  
for cleaner code.
http://code.google.com/p/piccolo2d/source/detail?r=556

Modified:
  /piccolo2d.java/trunk/core/src/main/java/edu/umd/cs/piccolo/PCanvas.java

=======================================
---  
/piccolo2d.java/trunk/core/src/main/java/edu/umd/cs/piccolo/PCanvas.java        
 
Thu Jul 23 18:04:01 2009
+++  
/piccolo2d.java/trunk/core/src/main/java/edu/umd/cs/piccolo/PCanvas.java        
 
Fri Jul 24 07:16:41 2009
@@ -72,7 +72,8 @@
  public class PCanvas extends JComponent implements PComponent {

      /**
-     * @deprecated this is a typo and clients should change their code to  
reflect the correct spelling
+     * @deprecated this is a typo and clients should change their code to
+     *             reflect the correct spelling
       */
      public static final String INTERATING_CHANGED_NOTIFICATION  
= "INTERATING_CHANGED_NOTIFICATION";
      public static final String INTERACTING_CHANGED_NOTIFICATION  
= "INTERACTING_CHANGED_NOTIFICATION";
@@ -385,68 +386,48 @@
      protected void installInputSources() {
          if (mouseListener == null) {
              mouseListener = new MouseListener() {
+                /** {...@inheritdoc} */
                  public void mouseClicked(MouseEvent e) {
                      sendInputEventToInputManager(e,  
MouseEvent.MOUSE_CLICKED);
                  }

+                /** {...@inheritdoc} */
                  public void mouseEntered(MouseEvent e) {
                      MouseEvent simulated = null;

-                    if ((e.getModifiersEx() &  
(InputEvent.BUTTON1_DOWN_MASK | InputEvent.BUTTON2_DOWN_MASK |  
InputEvent.BUTTON3_DOWN_MASK)) != 0) {
-                        simulated = new MouseEvent((Component)  
e.getSource(), MouseEvent.MOUSE_DRAGGED, e.getWhen(), e
-                                .getModifiers(), e.getX(), e.getY(),  
e.getClickCount(), e.isPopupTrigger(), e
-                                .getButton());
+                    if (isAnyButtonDown(e)) {
+                        simulated = buildRetypedMouseEvent(e,  
MouseEvent.MOUSE_DRAGGED);
                      }
                      else {
-                        simulated = new MouseEvent((Component)  
e.getSource(), MouseEvent.MOUSE_MOVED, e.getWhen(), e
-                                .getModifiers(), e.getX(), e.getY(),  
e.getClickCount(), e.isPopupTrigger(), e
-                                .getButton());
+                        simulated = buildRetypedMouseEvent(e,  
MouseEvent.MOUSE_MOVED);
                      }

                      sendInputEventToInputManager(e,  
MouseEvent.MOUSE_ENTERED);
                      sendInputEventToInputManager(simulated,  
simulated.getID());
                  }

+                /** {...@inheritdoc} */
                  public void mouseExited(MouseEvent e) {
                      MouseEvent simulated = null;

-                    if ((e.getModifiersEx() &  
(InputEvent.BUTTON1_DOWN_MASK | InputEvent.BUTTON2_DOWN_MASK |  
InputEvent.BUTTON3_DOWN_MASK)) != 0) {
-                        simulated = new MouseEvent((Component)  
e.getSource(), MouseEvent.MOUSE_DRAGGED, e.getWhen(), e
-                                .getModifiers(), e.getX(), e.getY(),  
e.getClickCount(), e.isPopupTrigger(), e
-                                .getButton());
+                    if (isAnyButtonDown(e)) {
+                        simulated = buildRetypedMouseEvent(e,  
MouseEvent.MOUSE_DRAGGED);
                      }
                      else {
-                        simulated = new MouseEvent((Component)  
e.getSource(), MouseEvent.MOUSE_MOVED, e.getWhen(), e
-                                .getModifiers(), e.getX(), e.getY(),  
e.getClickCount(), e.isPopupTrigger(), e
-                                .getButton());
+                        simulated = buildRetypedMouseEvent(e,  
MouseEvent.MOUSE_MOVED);
                      }

                      sendInputEventToInputManager(simulated,  
simulated.getID());
                      sendInputEventToInputManager(e,  
MouseEvent.MOUSE_EXITED);
                  }

+                /** {...@inheritdoc} */
                  public void mousePressed(MouseEvent e) {
                      requestFocus();

                      boolean shouldBalanceEvent = false;

-                    if (e.getButton() == MouseEvent.NOBUTTON) {
-                        if ((e.getModifiers() & MouseEvent.BUTTON1_MASK)  
== MouseEvent.BUTTON1_MASK) {
-                            e = new MouseEvent((Component) e.getSource(),  
MouseEvent.MOUSE_PRESSED, e.getWhen(), e
-                                    .getModifiers(), e.getX(), e.getY(),  
e.getClickCount(), e.isPopupTrigger(),
-                                    MouseEvent.BUTTON1);
-                        }
-                        else if ((e.getModifiers() &  
MouseEvent.BUTTON2_MASK) == MouseEvent.BUTTON2_MASK) {
-                            e = new MouseEvent((Component) e.getSource(),  
MouseEvent.MOUSE_PRESSED, e.getWhen(), e
-                                    .getModifiers(), e.getX(), e.getY(),  
e.getClickCount(), e.isPopupTrigger(),
-                                    MouseEvent.BUTTON2);
-                        }
-                        else if ((e.getModifiers() &  
MouseEvent.BUTTON3_MASK) == MouseEvent.BUTTON3_MASK) {
-                            e = new MouseEvent((Component) e.getSource(),  
MouseEvent.MOUSE_PRESSED, e.getWhen(), e
-                                    .getModifiers(), e.getX(), e.getY(),  
e.getClickCount(), e.isPopupTrigger(),
-                                    MouseEvent.BUTTON3);
-                        }
-                    }
+                    e = copyButtonsFromModifiers(e,  
MouseEvent.MOUSE_PRESSED);

                      switch (e.getButton()) {
                          case MouseEvent.BUTTON1:
@@ -472,36 +453,19 @@
                      }

                      if (shouldBalanceEvent) {
-                        MouseEvent balanceEvent = new  
MouseEvent((Component) e.getSource(), MouseEvent.MOUSE_RELEASED,
-                                e.getWhen(), e.getModifiers(), e.getX(),  
e.getY(), e.getClickCount(), e
-                                        .isPopupTrigger(), e.getButton());
+                        MouseEvent balanceEvent =  
buildRetypedMouseEvent(e, MouseEvent.MOUSE_RELEASED);
                          sendInputEventToInputManager(balanceEvent,  
MouseEvent.MOUSE_RELEASED);
                      }

                      sendInputEventToInputManager(e,  
MouseEvent.MOUSE_PRESSED);
                  }

+                /** {...@inheritdoc} */
                  public void mouseReleased(MouseEvent e) {
                      boolean shouldBalanceEvent = false;

-                    if (e.getButton() == MouseEvent.NOBUTTON) {
-                        if ((e.getModifiers() & MouseEvent.BUTTON1_MASK)  
== MouseEvent.BUTTON1_MASK) {
-                            e = new MouseEvent((Component) e.getSource(),  
MouseEvent.MOUSE_RELEASED, e.getWhen(), e
-                                    .getModifiers(), e.getX(), e.getY(),  
e.getClickCount(), e.isPopupTrigger(),
-                                    MouseEvent.BUTTON1);
-                        }
-                        else if ((e.getModifiers() &  
MouseEvent.BUTTON2_MASK) == MouseEvent.BUTTON2_MASK) {
-                            e = new MouseEvent((Component) e.getSource(),  
MouseEvent.MOUSE_RELEASED, e.getWhen(), e
-                                    .getModifiers(), e.getX(), e.getY(),  
e.getClickCount(), e.isPopupTrigger(),
-                                    MouseEvent.BUTTON2);
-                        }
-                        else if ((e.getModifiers() &  
MouseEvent.BUTTON3_MASK) == MouseEvent.BUTTON3_MASK) {
-                            e = new MouseEvent((Component) e.getSource(),  
MouseEvent.MOUSE_RELEASED, e.getWhen(), e
-                                    .getModifiers(), e.getX(), e.getY(),  
e.getClickCount(), e.isPopupTrigger(),
-                                    MouseEvent.BUTTON3);
-                        }
-                    }
-
+                    e = copyButtonsFromModifiers(e,  
MouseEvent.MOUSE_PRESSED);
+
                      switch (e.getButton()) {
                          case MouseEvent.BUTTON1:
                              if (!isButton1Pressed) {
@@ -526,35 +490,48 @@
                      }

                      if (shouldBalanceEvent) {
-                        MouseEvent balanceEvent = new  
MouseEvent((Component) e.getSource(), MouseEvent.MOUSE_PRESSED, e
-                                .getWhen(), e.getModifiers(), e.getX(),  
e.getY(), e.getClickCount(),
-                                e.isPopupTrigger(), e.getButton());
+                        MouseEvent balanceEvent =  
buildRetypedMouseEvent(e, MouseEvent.MOUSE_PRESSED);
                          sendInputEventToInputManager(balanceEvent,  
MouseEvent.MOUSE_PRESSED);
                      }

                      sendInputEventToInputManager(e,  
MouseEvent.MOUSE_RELEASED);
                  }
+
+                private boolean isAnyButtonDown(MouseEvent e) {
+                    return (e.getModifiersEx() &  
(InputEvent.BUTTON1_DOWN_MASK | InputEvent.BUTTON2_DOWN_MASK |  
InputEvent.BUTTON3_DOWN_MASK)) != 0;
+                }

                  private MouseEvent copyButtonsFromModifiers(final  
MouseEvent rawEvent, int eventType) {
                      if (rawEvent.getButton() != MouseEvent.NOBUTTON) {
-                        if ((rawEvent.getModifiers() &  
MouseEvent.BUTTON1_MASK) == MouseEvent.BUTTON1_MASK) {
-                            return new MouseEvent((Component)  
rawEvent.getSource(), eventType, rawEvent.getWhen(),
-                                    rawEvent.getModifiers(),  
rawEvent.getX(), rawEvent.getY(),
-                                    rawEvent.getClickCount(),  
rawEvent.isPopupTrigger(), MouseEvent.BUTTON1);
-                        }
-                        else if ((rawEvent.getModifiers() &  
MouseEvent.BUTTON2_MASK) == MouseEvent.BUTTON2_MASK) {
-                            return new MouseEvent((Component)  
rawEvent.getSource(), eventType, rawEvent.getWhen(),
-                                    rawEvent.getModifiers(),  
rawEvent.getX(), rawEvent.getY(),
-                                    rawEvent.getClickCount(),  
rawEvent.isPopupTrigger(), MouseEvent.BUTTON2);
-                        }
-                        else if ((rawEvent.getModifiers() &  
MouseEvent.BUTTON3_MASK) == MouseEvent.BUTTON3_MASK) {
-                            return new MouseEvent((Component)  
rawEvent.getSource(), eventType, rawEvent.getWhen(),
-                                    rawEvent.getModifiers(),  
rawEvent.getX(), rawEvent.getY(),
-                                    rawEvent.getClickCount(),  
rawEvent.isPopupTrigger(), MouseEvent.BUTTON3);
-                        }
+                        return rawEvent;
                      }

-                    return rawEvent;
+                    int newButton = 0;
+
+                    if (hasButtonModifier(rawEvent,  
MouseEvent.BUTTON1_MASK)) {
+                        newButton = MouseEvent.BUTTON1;
+                    }
+                    else if (hasButtonModifier(rawEvent,  
MouseEvent.BUTTON2_MASK)) {
+                        newButton = MouseEvent.BUTTON2;
+                    }
+                    else if (hasButtonModifier(rawEvent,  
MouseEvent.BUTTON3_MASK)) {
+                        newButton = MouseEvent.BUTTON3;
+                    }
+
+                    return (newButton == 0) ? rawEvent :  
buildModifiedMouseEvent(rawEvent, eventType, newButton);
+                }
+
+                private boolean hasButtonModifier(final MouseEvent event,  
int buttonMask) {
+                    return (event.getModifiers() & buttonMask) ==  
buttonMask;
+                }
+
+                public MouseEvent buildRetypedMouseEvent(MouseEvent e, int  
newType) {
+                    return buildModifiedMouseEvent(e, newType,  
e.getButton());
+                }
+
+                public MouseEvent buildModifiedMouseEvent(MouseEvent e,  
int newType, int newButton) {
+                    return new MouseEvent((Component) e.getSource(),  
newType, e.getWhen(), e.getModifiers(), e.getX(),
+                            e.getY(), e.getClickCount(),  
e.isPopupTrigger(), newButton);
                  }

              };
@@ -563,10 +540,12 @@

          if (mouseMotionListener == null) {
              mouseMotionListener = new MouseMotionListener() {
+                /** {...@inheritdoc} */
                  public void mouseDragged(MouseEvent e) {
                      sendInputEventToInputManager(e,  
MouseEvent.MOUSE_DRAGGED);
                  }

+                /** {...@inheritdoc} */
                  public void mouseMoved(MouseEvent e) {
                      sendInputEventToInputManager(e,  
MouseEvent.MOUSE_MOVED);
                  }
@@ -576,6 +555,7 @@

          if (mouseWheelListener == null) {
              mouseWheelListener = new MouseWheelListener() {
+                /** {...@inheritdoc} */
                  public void mouseWheelMoved(MouseWheelEvent e) {
                      sendInputEventToInputManager(e, e.getScrollType());
                      if (!e.isConsumed() && getParent() != null) {
@@ -610,12 +590,15 @@
       * those events to piccolo.
       */
      protected void removeInputSources() {
-        if (mouseListener != null)
+        if (mouseListener != null) {
              removeMouseListener(mouseListener);
-        if (mouseMotionListener != null)
+        }
+        if (mouseMotionListener != null) {
              removeMouseMotionListener(mouseMotionListener);
-        if (mouseWheelListener != null)
+        }
+        if (mouseWheelListener != null) {
              removeMouseWheelListener(mouseWheelListener);
+        }
          if (keyEventPostProcessor != null) {
               
FocusManager.getCurrentKeyboardFocusManager().removeKeyEventPostProcessor(keyEventPostProcessor);
          }

--~--~---------~--~----~------------~-------~--~----~
Piccolo2D Developers Group: http://groups.google.com/group/piccolo2d-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to