home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-07-20 | 3.1 KB | 155 lines | [TEXT/CWIE] |
- //Copyright (c) 1997 Aidan Cully
- //All rights reserved
-
- #include "CLMouseHandler.h"
- #include "CLBaseWindow.h"
- #include "CLActionHandler.h"
- #include "CLApplication.h"
- #include "CLWindowLayer.h"
- #include "CLMouseListener.h"
-
- TMouseHandler *TMouseHandler::sCurMouse= 0;
-
- TMouseHandler::TMouseHandler()
- {
- mMouseMoveRgn= ::NewRgn();
- sCurMouse= this;
- mCurListener= 0;
- }
-
- TMouseHandler::~TMouseHandler()
- {
- ::DisposeRgn( mMouseMoveRgn );
- }
-
- void TMouseHandler::NewDispatcher()
- {
- }
-
- void TMouseHandler::OldDispatcher()
- {
- CalcMouseMoveRgn();
- }
-
- void TMouseHandler::DispatchEvent( const EventRecord &ev )
- {
- BuildEvent( ev );
- }
-
- void TMouseHandler::BuildEvent( const EventRecord &ev )
- {
- TMouseButtonEvent mev;
- mev.when= ev.when;
- mev.where= ev.where;
- short partCode;
- WindowRef theWindow;
-
- switch( ev.what ) {
- case mouseDown:
- case mouseUp:
- partCode = FindWindow( ev.where, &theWindow );
- mev.button= ev.what==mouseDown;
- switch( partCode ) {
- case inMenuBar:
- if( ev.what == mouseDown ) {
- if( MActionHandler::sCurHandler )
- MActionHandler::sCurHandler->HandleAction( MenuSelect( ev.where ) );
- break;
- }
- default:
- if( ev.what==mouseUp )
- if( theWindow!=mCurWindow ) {
- mCurWindow= theWindow;
- return;
- }
- //if( theWindow&&!mCurListener )
- //((TBaseWindow*)GetWRefCon(theWindow))->HandleMouse( &mev );
- if( mCurListener )
- mCurListener->HandleMouse( &mev );
- mCurWindow= theWindow;
- break;
- }
- break;
- case osEvt:
- if( (ev.message>>24)==mouseMovedMessage ) {
- SetListener( 0 );
- CalcMouseMoveRgn();
- }
- default:
- break;
- }
- }
-
- void TMouseHandler::CalcMouseMoveRgn()
- {
- Point where;
- EventRecord ev;
- GWorldPtr oldWorld, world;
- GDHandle oldDev, dev;
- TApplication::SCurApp()->GetGlobalWorld( world, dev );
- ::GetGWorld( &oldWorld, &oldDev );
- ::SetGWorld( world, dev );
- GrafPtr oldPort;
- ::GetPort( &oldPort );
- ::SetPort( TApplication::SCurApp()->GetGlobalPort() );
- ::WaitNextEvent( 1, &ev, 0, 0 );
- ::SetPort( oldPort );
- ::SetGWorld( oldWorld, oldDev );
- TMouseEvent mev;
- mev.when= ev.when;
- where= ev.where;
- mev.where= where;
- MMouseListener *oldLis= mCurListener;
-
- if( mMouseMoveRgn ) {
- TWindowLayer::FrontLayer()->CalcMouseMove( where, mMouseMoveRgn );
- if( oldLis!=mCurListener ) {
- if( oldLis )
- oldLis->HandleMouseMoved( &mev, false );
- if( mCurListener )
- mCurListener->HandleMouseMoved( &mev, true );
- }
- }
- }
-
- RgnHandle TMouseHandler::MouseMoveRgn()
- {
- return( mMouseMoveRgn );
- }
-
- void TMouseHandler::SetListener( MMouseListener *listener )
- {
- EventRecord ev;
- ::WaitNextEvent( 1, &ev, 0, 0 );
- TMouseEvent mev;
- mev.when= ev.when;
- mev.where= ev.where;
- if( listener!=mCurListener ) {
- if( mCurListener )
- mCurListener->HandleMouseMoved( &mev, false );
- if( listener )
- listener->HandleMouseMoved( &mev, true );
- else
- ::SetCursor( &qd.arrow );
- mCurListener= listener;
- }
- }
-
- MMouseListener *TMouseHandler::GetListener()
- {
- return( mCurListener );
- }
-
- void TMouseHandler::GetPosition( Point &pt )
- {
- EventRecord ev;
- ::WaitNextEvent( 1, &ev, 0, 0 );
- pt= ev.where;
- }
-
- Boolean TMouseHandler::GetButton()
- {
- EventRecord ev;
- ::WaitNextEvent( 1, &ev, 0, 0 );
- return( Button() );
- }