Java-Gaming.org    
Featured games (81)
games approved by the League of Dukes
Games in Showcase (487)
Games in Android Showcase (110)
games submitted by our members
Games in WIP (552)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  How to tell if a UIWindowMgr is handling an event  (Read 653 times)
0 Members and 1 Guest are viewing this topic.
Offline jkc6n

Senior Newbie




Java games rock!


« Posted 2004-03-22 17:48:30 »

I've taken some code from the demoes for handling events:

UIEventAdapter eventAdapter = new UIEventAdapter(windowMgr);
           canvas.get3DPeer().getComponent().addKeyListener(eventAdapter);
           canvas.get3DPeer().getComponent().addMouseListener(eventAdapter);
           canvas.get3DPeer().getComponent().addMouseMotionListener(eventAdapter);
           canvas.get3DPeer().getComponent().setFocusable(true);
           
           Toolkit.getDefaultToolkit().addAWTEventListener(
                 new EventListener(),   AWTEvent.KEY_EVENT_MASK
                                                | AWTEvent.MOUSE_EVENT_MASK
                                                | AWTEvent.MOUSE_MOTION_EVENT_MASK);
           
In the
public void mouseDragged(MouseEvent e)
{
}
method how would you determine if the UIWindowManager of a UIWindow is processing the event?

Thanks,

Jason
Offline jkc6n

Senior Newbie




Java games rock!


« Reply #1 - Posted 2004-03-23 15:45:33 »

So, I've got 1 object in the scene that I want to be able to rotate with my mouse, but I also want to manipulate the object in other ways with some JSliders.  

The following code:
Toolkit.getDefaultToolkit().addAWTEventListener(
new EventListener(),   AWTEvent.KEY_EVENT_MASK
| AWTEvent.MOUSE_EVENT_MASK
| AWTEvent.MOUSE_MOTION_EVENT_MASK);
....
and
class EventListener implements AWTEventListener{
 public void eventDispatched(AWTEvent event)
 {
    if(event instanceof MouseEvent)
   {
      MouseEvent e = (MouseEvent) event;
      switch(e.getID())
     {
         case MouseEvent.MOUSE_DRAGGED: mouseDragged(e); break;
....
and
public void mouseDragged(MouseEvent e){
...
handles mouse drags and rotates the object, but if a UIWindow is also in the scene:

UIEventAdapter eventAdapter = new UIEventAdapter(windowMgr);
canvas.get3DPeer().getComponent().addMouseMotionListener(eventAdapter);
...


Then the mouseDragged method will get called twice.  With one of the calls, e.getPoint() gives you a point relative to the canvas, and with the other call, e.getPoint() gives you a point relative to the UIWindow, and this can really mess up rotating the object!

Here's an idea for the Xith3D API that would really help out:

Create a UIWindowMouseEvent class that extends the MouseEvent class.

Add a UIWindow field, and when the MouseEvent is created, set the UIWindow of the window that is currently handling the event.

That way in the mouseDragged(MouseEvent e)
method you can test if the mouseEvent is generated by a UIWindow

if( e instanceof UIWindowMouseEvent)
{

}

and you can also determine which UIWindow the event goes to in case you're interested.  Is this a good idea for an enhancement?


But I do have a hack that I think works for the meantime, so please help me if you have less of an ugly hack that works better.

Basically you store the previous mouse drag event and test to see if the new event's component is the same as the previous event, and if it isn't then you know the mouse is being dragged over a UIWindow and you can set a boolean.  But if it is the same component and the mouseOverUIWindow variable hasn't been set then you can forward the event to rotate the object.

protected MouseEvent m_previousMouseDragEvent = null;
protected boolean m_mouseOverUIWindow = false;
public void mouseDragged(MouseEvent e)
{
 if(m_previousMouseDragEvent != null)
 {
    if(e.getComponent() ==   m_previousMouseDragEvent.getComponent())
    {
        if(!m_mouseOverUIWindow)
       {
           switch(e.getModifiers())
          {
             case MouseEvent.BUTTON1_MASK:    leftMouseButtonDrag(e); break;
             case MouseEvent.BUTTON2_MASK: middleMouseButtonDrag(e); break;
             case MouseEvent.BUTTON3_MASK: rightMouseButtonDrag(e); break;
           }
         }
         m_mouseOverUIWindow = false;
     }
     else
     {
        m_mouseOverUIWindow = true;
     }
 }
 m_previousMouseDragEvent = e;
}


Another strategy is to see if the new event occured at the same time as the previous event.  If it did then there's a good chance that the mouse is being dragged over a UIWindow, but it still doesn't guarantee it, so that doesn't work.


Jason  
Offline jkc6n

Senior Newbie




Java games rock!


« Reply #2 - Posted 2004-03-23 15:54:44 »

One last thing to add to make it work correctly:

private void mouseReleased(MouseEvent e)
{
 m_mouseOverUIWindow = true;
}

This prevents the object from rotating briefly if the user is using the JSliders.

Jason
Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

CopyableCougar4 (23 views)
2014-08-22 19:31:30

atombrot (34 views)
2014-08-19 09:29:53

Tekkerue (30 views)
2014-08-16 06:45:27

Tekkerue (28 views)
2014-08-16 06:22:17

Tekkerue (18 views)
2014-08-16 06:20:21

Tekkerue (27 views)
2014-08-16 06:12:11

Rayexar (65 views)
2014-08-11 02:49:23

BurntPizza (41 views)
2014-08-09 21:09:32

BurntPizza (31 views)
2014-08-08 02:01:56

Norakomi (41 views)
2014-08-06 19:49:38
List of Learning Resources
by Longor1996
2014-08-16 10:40:00

List of Learning Resources
by SilverTiger
2014-08-05 19:33:27

Resources for WIP games
by CogWheelz
2014-08-01 16:20:17

Resources for WIP games
by CogWheelz
2014-08-01 16:19:50

List of Learning Resources
by SilverTiger
2014-07-31 16:29:50

List of Learning Resources
by SilverTiger
2014-07-31 16:26:06

List of Learning Resources
by SilverTiger
2014-07-31 11:54:12

HotSpot Options
by dleskov
2014-07-08 01:59:08
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!