From a6ffa4dd013241d3d9812901226428283b0bfe7b Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Tue, 2 Nov 2004 01:44:32 +0000 Subject: [PATCH] Added card enter/exit event notifications. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3196 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../parlor/card/client/CardPanel.java | 155 ++++++++++++------ .../card/client/CardSpriteObserver.java | 20 ++- 2 files changed, 121 insertions(+), 54 deletions(-) diff --git a/src/java/com/threerings/parlor/card/client/CardPanel.java b/src/java/com/threerings/parlor/card/client/CardPanel.java index 7b2dddc3f..938b5ca5a 100644 --- a/src/java/com/threerings/parlor/card/client/CardPanel.java +++ b/src/java/com/threerings/parlor/card/client/CardPanel.java @@ -1,5 +1,5 @@ // -// $Id: CardPanel.java,v 1.5 2004/10/29 00:41:50 andrzej Exp $ +// $Id: CardPanel.java,v 1.6 2004/11/02 01:44:32 andrzej Exp $ // // Narya library - tools for developing networked games // Copyright (C) 2002-2004 Three Rings Design, Inc., All Rights Reserved @@ -73,6 +73,44 @@ public abstract class CardPanel extends VirtualMediaPanel protected MouseEvent _me; } + /** Calls CardSpriteObserver.cardSpriteEntered. */ + protected static class CardSpriteEnteredOp implements ObserverList.ObserverOp + { + public CardSpriteEnteredOp (CardSprite sprite, MouseEvent me) + { + _sprite = sprite; + _me = me; + } + + public boolean apply (Object observer) + { + ((CardSpriteObserver)observer).cardSpriteEntered(_sprite, _me); + return true; + } + + protected CardSprite _sprite; + protected MouseEvent _me; + } + + /** Calls CardSpriteObserver.cardSpriteExited. */ + protected static class CardSpriteExitedOp implements ObserverList.ObserverOp + { + public CardSpriteExitedOp (CardSprite sprite, MouseEvent me) + { + _sprite = sprite; + _me = me; + } + + public boolean apply (Object observer) + { + ((CardSpriteObserver)observer).cardSpriteExited(_sprite, _me); + return true; + } + + protected CardSprite _sprite; + protected MouseEvent _me; + } + /** Calls CardSpriteObserver.cardSpriteDragged. */ protected static class CardSpriteDraggedOp implements ObserverList.ObserverOp { @@ -122,6 +160,51 @@ public abstract class CardPanel extends VirtualMediaPanel MouseAdapter ma = new MouseAdapter() { public void mousePressed (MouseEvent me) { + if(_activeSprite instanceof CardSprite) { + _handleX = _activeSprite.getX() - me.getX(); + _handleY = _activeSprite.getY() - me.getY(); + + _hasBeenDragged = false; + } else if (_activeSprite instanceof ButtonSprite) { + ButtonSprite bs = (ButtonSprite)_activeSprite; + if(bs.isEnabled()) { + bs.setPressed(true); + } + } + } + public void mouseReleased (MouseEvent me) { + if (_activeSprite instanceof CardSprite && _hasBeenDragged) { + _activeSprite.queueNotification( + new CardSpriteDraggedOp((CardSprite)_activeSprite, me) + ); + } else if(_activeSprite instanceof ButtonSprite) { + ButtonSprite bs = (ButtonSprite)_activeSprite; + if (bs.isPressed()) { + CommandEvent ce = new CommandEvent(CardPanel.this, bs.getActionCommand(), + bs.getCommandArgument(), me.getWhen(), me.getModifiers()); + bs.queueNotification( + new ButtonSpriteClickedOp(bs, ce)); + Controller.postAction(ce); + bs.setPressed(false); + } + } + } + public void mouseClicked (MouseEvent me) { + if (_activeSprite instanceof CardSprite) { + _activeSprite.queueNotification( + new CardSpriteClickedOp((CardSprite)_activeSprite, me) + ); + } + } + }; + + addMouseListener(ma); + + MouseMotionAdapter mma = new MouseMotionAdapter() { + public void mouseMoved (MouseEvent me) + { + Sprite newActiveSprite = null; + ArrayList al = new ArrayList(); _spritemgr.getHitSprites(al, me.getX(), me.getY()); @@ -140,70 +223,36 @@ public abstract class CardPanel extends VirtualMediaPanel } } - _activeSprite = highestSprite; - - if (_activeSprite != null) { - if(_activeSprite instanceof CardSprite) { - _handleX = _activeSprite.getX() - me.getX(); - _handleY = _activeSprite.getY() - me.getY(); - - _hasBeenDragged = false; - } else if (_activeSprite instanceof ButtonSprite) { - ButtonSprite bs = (ButtonSprite)_activeSprite; - if(bs.isEnabled()) { - bs.setPressed(true); - } - } - } + newActiveSprite = highestSprite; } - else { - _activeSprite = null; - } - } - public void mouseReleased (MouseEvent me) { - if (_activeSprite instanceof CardSprite && _hasBeenDragged) { - _activeSprite.queueNotification( - new CardSpriteDraggedOp((CardSprite)_activeSprite, me) - ); - } else if(_activeSprite instanceof ButtonSprite) { - ButtonSprite bs = (ButtonSprite)_activeSprite; - if (bs.isEnabled()) { - CommandEvent ce = new CommandEvent(CardPanel.this, bs.getActionCommand(), - bs.getCommandArgument(), me.getWhen(), me.getModifiers()); - bs.queueNotification( - new ButtonSpriteClickedOp(bs, ce)); - Controller.postAction(ce); + + if (newActiveSprite != _activeSprite) { + if (_activeSprite instanceof CardSprite) { + _activeSprite.queueNotification( + new CardSpriteExitedOp((CardSprite)_activeSprite, me) + ); + } else if (_activeSprite instanceof ButtonSprite) { + ((ButtonSprite)_activeSprite).setPressed(false); } - bs.setPressed(false); - _activeSprite = null; + if (newActiveSprite instanceof CardSprite) { + newActiveSprite.queueNotification( + new CardSpriteEnteredOp((CardSprite)newActiveSprite, me) + ); + } + _activeSprite = newActiveSprite; } } - public void mouseClicked (MouseEvent me) { - if (_activeSprite instanceof CardSprite) { - _activeSprite.queueNotification( - new CardSpriteClickedOp((CardSprite)_activeSprite, me) - ); - } - } - }; - - addMouseListener(ma); - - MouseMotionAdapter mma = new MouseMotionAdapter() { public void mouseDragged (MouseEvent me) { + mouseMoved(me); + if (_activeSprite instanceof CardSprite && ((CardSprite)_activeSprite).isDraggable()) { _activeSprite.setLocation( me.getX() + _handleX, me.getY() + _handleY - ); - + ); _hasBeenDragged = true; - } else if (_activeSprite instanceof ButtonSprite && - !_activeSprite.contains(me.getX(), me.getY())) { - ((ButtonSprite)_activeSprite).setPressed(false); - _activeSprite = null; } } }; diff --git a/src/java/com/threerings/parlor/card/client/CardSpriteObserver.java b/src/java/com/threerings/parlor/card/client/CardSpriteObserver.java index 490680dcf..4d94c2ad1 100644 --- a/src/java/com/threerings/parlor/card/client/CardSpriteObserver.java +++ b/src/java/com/threerings/parlor/card/client/CardSpriteObserver.java @@ -1,5 +1,5 @@ // -// $Id: CardSpriteObserver.java,v 1.2 2004/10/15 00:14:23 andrzej Exp $ +// $Id: CardSpriteObserver.java,v 1.3 2004/11/02 01:44:32 andrzej Exp $ // // Narya library - tools for developing networked games // Copyright (C) 2002-2004 Three Rings Design, Inc., All Rights Reserved @@ -36,6 +36,24 @@ public interface CardSpriteObserver */ public void cardSpriteClicked (CardSprite sprite, MouseEvent me); + /** + * Notifies the observer that the user moved the mouse pointer onto + * a card sprite. + * + * @param sprite the entered sprite + * @param me the mouse event associated with the entrance + */ + public void cardSpriteEntered (CardSprite sprite, MouseEvent me); + + /** + * Notifies the observer that the user moved the mouse pointer off of + * a card sprite. + * + * @param sprite the exited the sprite + * @param me the mouse event associated with the exit + */ + public void cardSpriteExited (CardSprite sprite, MouseEvent me); + /** * Notifies the observer that the user dragged a card sprite to a new * location.