diff --git a/code/studio/src/plugins/gui_editor/nel3d_widget.cpp b/code/studio/src/plugins/gui_editor/nel3d_widget.cpp index 682645421..8ebc393ba 100644 --- a/code/studio/src/plugins/gui_editor/nel3d_widget.cpp +++ b/code/studio/src/plugins/gui_editor/nel3d_widget.cpp @@ -27,152 +27,145 @@ #include #endif - - -namespace GUIEditor +Nel3DWidget::Nel3DWidget( QWidget *parent ) : +QWidget( parent ) { - Nel3DWidget::Nel3DWidget( QWidget *parent ) : - QWidget( parent ) + driver = NULL; + textContext = NULL; + + // Need to set this attribute with a NULL paintengine returned to Qt + // so that we can render the widget normally ourselves, without the image + // disappearing when a widget is resized or shown on top of us + setAttribute( Qt::WA_PaintOnScreen, true ); + setAttribute( Qt::WA_OpaquePaintEvent, true ); + setAttribute( Qt::WA_NoSystemBackground, true ); +} + +Nel3DWidget::~Nel3DWidget() +{ + if( driver != NULL ) { - driver = NULL; - textContext = NULL; - - // Need to set this attribute with a NULL paintengine returned to Qt - // so that we can render the widget normally ourselves, without the image - // disappearing when a widget is resized or shown on top of us - setAttribute( Qt::WA_PaintOnScreen, true ); - setAttribute( Qt::WA_OpaquePaintEvent, true ); - setAttribute( Qt::WA_NoSystemBackground, true ); - } - - Nel3DWidget::~Nel3DWidget() - { - if( driver != NULL ) - { - if( textContext != NULL ) - { - driver->deleteTextContext( textContext ); - textContext = NULL; - } - - driver->release(); - delete driver; - driver = NULL; - } - } - - void Nel3DWidget::init() - { - nlassert( driver == NULL ); - - driver = NL3D::UDriver::createDriver( 0, false, 0 ); - driver->setMatrixMode2D11(); - driver->setDisplay( winId(), NL3D::UDriver::CMode( width(), height(), 32, true ) ); - } - - void Nel3DWidget::createTextContext( std::string fontFile ) - { - if( driver == NULL ) - return; - - std::string font; - - try - { - font = NLMISC::CPath::lookup( fontFile ); - } - catch( ... ) - { - nlinfo( "Font %s cannot be found, cannot create textcontext!", fontFile.c_str() ); - exit( EXIT_FAILURE ); - } - if( textContext != NULL ) { driver->deleteTextContext( textContext ); textContext = NULL; } - textContext = driver->createTextContext( font ); + driver->release(); + delete driver; + driver = NULL; } +} - void Nel3DWidget::clear() +void Nel3DWidget::init() +{ + nlassert( driver == NULL ); + + driver = NL3D::UDriver::createDriver( 0, false, 0 ); + driver->setMatrixMode2D11(); + driver->setDisplay( winId(), NL3D::UDriver::CMode( width(), height(), 32, true ) ); +} + +void Nel3DWidget::createTextContext( std::string fontFile ) +{ + if( driver == NULL ) + return; + + std::string font; + + try { - if( driver == NULL ) - return; - driver->clearBuffers( NLMISC::CRGBA::Black ); - driver->swapBuffers(); + font = NLMISC::CPath::lookup( fontFile ); } - - void Nel3DWidget::showEvent( QShowEvent *evnt ) + catch( ... ) { - QWidget::showEvent( evnt ); - - if( driver != NULL ) - driver->activate(); + nlinfo( "Font %s cannot be found, cannot create textcontext!", fontFile.c_str() ); + exit( EXIT_FAILURE ); } + if( textContext != NULL ) + { + driver->deleteTextContext( textContext ); + textContext = NULL; + } + + textContext = driver->createTextContext( font ); +} + +void Nel3DWidget::clear() +{ + if( driver == NULL ) + return; + driver->clearBuffers( NLMISC::CRGBA::Black ); + driver->swapBuffers(); +} + +void Nel3DWidget::showEvent( QShowEvent *evnt ) +{ + QWidget::showEvent( evnt ); + + if( driver != NULL ) + driver->activate(); +} + #if defined ( NL_OS_WINDOWS ) - typedef bool ( *winProc )( NL3D::IDriver *driver, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ); +typedef bool ( *winProc )( NL3D::IDriver *driver, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ); - bool Nel3DWidget::winEvent( MSG *message, long *result ) +bool Nel3DWidget::winEvent( MSG *message, long *result ) +{ + if( driver != NULL ) { - if( driver != NULL ) + NL3D::IDriver *iDriver = dynamic_cast< NL3D::CDriverUser* >( driver )->getDriver(); + if( iDriver != NULL ) { - NL3D::IDriver *iDriver = dynamic_cast< NL3D::CDriverUser* >( driver )->getDriver(); - if( iDriver != NULL ) - { - winProc proc = (winProc)iDriver->getWindowProc(); - return proc( iDriver, message->hwnd, message->message, message->wParam, message->lParam ); - } + winProc proc = (winProc)iDriver->getWindowProc(); + return proc( iDriver, message->hwnd, message->message, message->wParam, message->lParam ); } - - return false; } + return false; +} + #elif defined( NL_OS_MAC ) - typedef bool ( *cocoaProc )( NL3D::IDriver *, const void *e ); +typedef bool ( *cocoaProc )( NL3D::IDriver *, const void *e ); - bool Nel3DWidget::macEvent( EventHandlerCallRef caller, EventRef event ) +bool Nel3DWidget::macEvent( EventHandlerCallRef caller, EventRef event ) +{ + if( caller ) + nlerror( "You are using QtCarbon! Only QtCocoa supported, please upgrade Qt" ); + + if( driver != NULL ) { - if( caller ) - nlerror( "You are using QtCarbon! Only QtCocoa supported, please upgrade Qt" ); - - if( driver != NULL ) + NL3D::IDriver *iDriver = dynamic_cast< NL3D::CDriverUser* >( driver )->getDriver(); + if( iDriver != NULL ) { - NL3D::IDriver *iDriver = dynamic_cast< NL3D::CDriverUser* >( driver )->getDriver(); - if( iDriver != NULL ) - { - cocoaProc proc = ( cocoaProc )iDriver->getWindowProc(); - return proc( iDriver, event ); - } + cocoaProc proc = ( cocoaProc )iDriver->getWindowProc(); + return proc( iDriver, event ); } - - return false; } + return false; +} + #elif defined( NL_OS_UNIX ) - typedef bool ( *x11Proc )( NL3D::IDriver *drv, XEvent *e ); +typedef bool ( *x11Proc )( NL3D::IDriver *drv, XEvent *e ); - bool Nel3DWidget::x11Event( XEvent *event ) +bool Nel3DWidget::x11Event( XEvent *event ) +{ + if( driver != NULL ) { + NL3D::IDriver *iDriver = dynamic_cast< NL3D::CDriverUser* >( driver )->getDriver(); if( driver != NULL ) { - NL3D::IDriver *iDriver = dynamic_cast< NL3D::CDriverUser* >( driver )->getDriver(); - if( driver != NULL ) - { - x11Proc proc = ( x11Proc )iDriver->getWindowProc(); - return proc( iDriver, event ); - } + x11Proc proc = ( x11Proc )iDriver->getWindowProc(); + return proc( iDriver, event ); } - - return false; } + + return false; +} #endif -} - - diff --git a/code/studio/src/plugins/gui_editor/nel3d_widget.h b/code/studio/src/plugins/gui_editor/nel3d_widget.h index e2d5f00b6..672fc3fde 100644 --- a/code/studio/src/plugins/gui_editor/nel3d_widget.h +++ b/code/studio/src/plugins/gui_editor/nel3d_widget.h @@ -28,48 +28,46 @@ namespace NL3D class UTextContext; } -namespace GUIEditor +/// Nel 3D interface to Qt +class Nel3DWidget : public QWidget { - /// Nel 3D interface to Qt - class Nel3DWidget : public QWidget - { - Q_OBJECT - public: - Nel3DWidget( QWidget *parent = NULL ); - virtual ~Nel3DWidget(); + Q_OBJECT +public: + Nel3DWidget( QWidget *parent = NULL ); + virtual ~Nel3DWidget(); - virtual void init(); - void createTextContext( std::string fontFile ); + void init(); + void createTextContext( std::string fontFile ); - NL3D::UDriver* getDriver() const{ return driver; } - NL3D::UTextContext* getTextContext() const{ return textContext; } + NL3D::UDriver* getDriver() const{ return driver; } + NL3D::UTextContext* getTextContext() const{ return textContext; } - // Need to return NULL paintengine to Qt so that we can - // render the widget normally ourselves, without the image - // disappearing when a widget is resized or shown on top of us - QPaintEngine* paintEngine() const{ return NULL; } + // Need to return NULL paintengine to Qt so that we can + // render the widget normally ourselves, without the image + // disappearing when a widget is resized or shown on top of us + QPaintEngine* paintEngine() const{ return NULL; } - public Q_SLOTS: - void clear(); +public Q_SLOTS: + void clear(); - protected: +protected: - void showEvent( QShowEvent *evnt ); + void showEvent( QShowEvent *evnt ); #if defined(NL_OS_WINDOWS) - virtual bool winEvent( MSG *message, long *result ); + bool winEvent( MSG *message, long *result ); #elif defined(NL_OS_MAC) - virtual bool macEvent( EventHandlerCallRef caller, EventRef event ); + bool macEvent( EventHandlerCallRef caller, EventRef event ); #elif defined(NL_OS_UNIX) - virtual bool x11Event( XEvent *event ); + bool x11Event( XEvent *event ); #endif - private: - NL3D::UDriver *driver; - NL3D::UTextContext *textContext; - }; -} +private: + NL3D::UDriver *driver; + NL3D::UTextContext *textContext; + +}; #endif diff --git a/code/studio/src/plugins/gui_editor/nelgui_ctrl.h b/code/studio/src/plugins/gui_editor/nelgui_ctrl.h index f13a57b9b..b3c68ff32 100644 --- a/code/studio/src/plugins/gui_editor/nelgui_ctrl.h +++ b/code/studio/src/plugins/gui_editor/nelgui_ctrl.h @@ -22,6 +22,7 @@ #include "project_files.h" class QWidget; +class Nel3DWidget; namespace NLGUI { @@ -31,7 +32,6 @@ namespace NLGUI namespace GUIEditor { class CEditorSelectionWatcher; - class Nel3DWidget; /// Qt viewport controller for the Nel GUI library class NelGUICtrl : public QObject