| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- // $Id: Flu_GL_Window.cpp,v 1.24 2004/12/08 20:18:57 jbryan Exp $
- /***************************************************************
- * FLU - FLTK Utility Widgets
- * Copyright (C) 2002 Ohio Supercomputer Center, Ohio State University
- *
- * This file and its content is protected by a software license.
- * You should have received a copy of this license with this file.
- * If not, please contact the Ohio Supercomputer Center immediately:
- * Attn: Jason Bryan Re: FLU 1224 Kinnear Rd, Columbus, Ohio 43212
- *
- ***************************************************************/
- #include "FLU/Flu_GL_Window.H"
- Flu_GL_Window::AllInitProto Flu_GL_Window::allInitCB = 0;
- void* Flu_GL_Window::allInitCBD = 0;
- Flu_GL_Window :: Flu_GL_Window( int x, int y, int w, int h, const char *label )
- : Fl_Gl_Window( x, y, w, h, label )
- {
- _lastContext = 0;
- cartesianInput( true );
- _drawCB = NULL; _drawCBD = NULL;
- _resizeCB = NULL; _resizeCBD = NULL;
- _initCB = NULL; _initCBD = NULL;
- _mouseWheelCB = NULL; _mouseWheelCBD = NULL;
- _mouseDownCB = NULL; _mouseDownCBD = NULL;
- _mouseUpCB = NULL; _mouseUpCBD = NULL;
- _mouseDragCB = NULL; _mouseDragCBD = NULL;
- _mouseMoveCB = NULL; _mouseMoveCBD = NULL;
- _keyboardCB = NULL; _keyboardCBD = NULL;
- _enterCB = NULL; _enterCBD = NULL;
- _exitCB = NULL; _exitCBD = NULL;
- //_firstDraw = true;
- end();
- }
- Flu_GL_Window :: Flu_GL_Window( int w, int h, const char *label )
- : Fl_Gl_Window( w, h, label )
- {
- _lastContext = 0;
- cartesianInput( true );
- _drawCB = NULL; _drawCBD = NULL;
- _resizeCB = NULL; _resizeCBD = NULL;
- _initCB = NULL; _initCBD = NULL;
- _mouseWheelCB = NULL; _mouseWheelCBD = NULL;
- _mouseDownCB = NULL; _mouseDownCBD = NULL;
- _mouseUpCB = NULL; _mouseUpCBD = NULL;
- _mouseDragCB = NULL; _mouseDragCBD = NULL;
- _mouseMoveCB = NULL; _mouseMoveCBD = NULL;
- _keyboardCB = NULL; _keyboardCBD = NULL;
- _enterCB = NULL; _enterCBD = NULL;
- _exitCB = NULL; _exitCBD = NULL;
- //_firstDraw = true;
- end();
- }
- Flu_GL_Window :: ~Flu_GL_Window()
- {
- }
- void Flu_GL_Window :: redraw()
- {
- Fl_Gl_Window::redraw();
- }
- int Flu_GL_Window :: handle( int event )
- {
- //if( !context() )
- //_firstDraw = true;
- if( !context() || !visible() )
- return Fl_Gl_Window::handle( event );
- int x = Fl::event_x(), y = Fl::event_y();
- if( _cartesian )
- y = h() - 1 - y;
- switch( event )
- {
- case FL_MOVE:
- {
- // make sure the GL context is current in case the callback needs it
- Fl_Group *current = Fl_Group::current();
- make_current();
- if( _mouseMoveCB )
- _mouseMoveCB( x, y, _mouseMoveCBD );
- Fl_Group::current( current );
- return 1;
- }
- case FL_DRAG:
- {
- // make sure the GL context is current in case the callback needs it
- Fl_Group *current = Fl_Group::current();
- make_current();
- if( _mouseDragCB )
- _mouseDragCB( x, y, _mouseDragCBD );
- Fl_Group::current( current );
- return 1;
- }
- case FL_PUSH:
- {
- // make sure the GL context is current in case the callback needs it
- Fl_Group *current = Fl_Group::current();
- make_current();
- if( _mouseDownCB )
- _mouseDownCB( Fl::event_button(), x, y, _mouseDownCBD );
- Fl_Group::current( current );
- return 1;
- }
- case FL_RELEASE:
- {
- // make sure the GL context is current in case the callback needs it
- Fl_Group *current = Fl_Group::current();
- make_current();
- if( _mouseUpCB )
- _mouseUpCB( Fl::event_button(), x, y, _mouseUpCBD );
- Fl_Group::current( current );
- return 1;
- }
- case FL_MOUSEWHEEL:
- {
- // make sure the GL context is current in case the callback needs it
- Fl_Group *current = Fl_Group::current();
- make_current();
- if( _mouseWheelCB )
- _mouseWheelCB( Fl::event_dx(), Fl::event_dy(), x, y, _mouseWheelCBD );
- Fl_Group::current( current );
- return 1;
- }
- case FL_FOCUS :
- case FL_UNFOCUS :
- return 1;
- case FL_ENTER:
- {
- // make sure the GL context is current in case the callback needs it
- Fl_Group *current = Fl_Group::current();
- make_current();
- if( _enterCB )
- _enterCB( _enterCBD );
- Fl_Group::current( current );
- return 1;
- }
- case FL_LEAVE:
- {
- // make sure the GL context is current in case the callback needs it
- Fl_Group *current = Fl_Group::current();
- make_current();
- if( _exitCB )
- _exitCB( _exitCBD );
- Fl_Group::current( current );
- return 1;
- }
- case FL_KEYUP:
- // make sure the GL context is current in case the callback needs it
- //make_current();
- if( _keyboardCB )
- _keyboardCB( Fl::event_key(), x, y, _keyboardCBD );
- return Fl_Gl_Window::handle( event );
- default:
- // pass other events to the base class...
- return Fl_Gl_Window::handle( event );
- }
- }
- void Flu_GL_Window :: draw()
- {
- if( !context() )
- return;
- //if( _firstDraw )
- if( _lastContext != context() )
- {
- //_firstDraw = false;
- if( allInitCB )
- allInitCB( allInitCBD );
- if( _initCB )
- _initCB( _initCBD );
- _lastContext = context();
- }
- if( !valid() )
- {
- if( _resizeCB )
- _resizeCB( w(), h(), _resizeCBD );
- }
- if( _drawCB )
- _drawCB( _drawCBD );
- }
|