diff -ur smc-1.9/configure.ac smc-1.9-b/configure.ac --- smc-1.9/configure.ac 2009-08-17 15:59:00.000000000 +0200 +++ smc-1.9-b/configure.ac 2011-01-19 00:43:37.809884881 +0100 @@ -53,7 +53,7 @@ AC_MSG_ERROR([SDL_ttf library not found])) # Check for the CEGUI library -PKG_CHECK_MODULES(CEGUI, CEGUI-OPENGL >= 0.5.0) +PKG_CHECK_MODULES(CEGUI, CEGUI-OPENGL >= 0.7.0) CPPFLAGS="$CPPFLAGS $CEGUI_CFLAGS" LIBS="$LIBS $CEGUI_LIBS" diff -ur smc-1.9/src/core/editor.cpp smc-1.9-b/src/core/editor.cpp --- smc-1.9/src/core/editor.cpp 2009-08-13 17:11:42.000000000 +0200 +++ smc-1.9-b/src/core/editor.cpp 2011-01-19 00:44:46.734328121 +0100 @@ -118,16 +118,10 @@ return tmp; } -void cEditor_Item_Object :: draw( const CEGUI::Vector3 &position, float alpha, const CEGUI::Rect &clipper ) const +void cEditor_Item_Object :: draw( CEGUI::GeometryBuffer &buffer, const CEGUI::Rect &targetRect, float alpha, const CEGUI::Rect *clipper ) const { // draw text - list_text->draw( position, alpha, clipper ); -} - -void cEditor_Item_Object :: draw( CEGUI::RenderCache &cache, const CEGUI::Rect &targetRect, float zBase, float alpha, const CEGUI::Rect *clipper ) const -{ - // draw text - list_text->draw( cache, targetRect, zBase, alpha, clipper ); + list_text->draw( buffer, targetRect, alpha, clipper ); } void cEditor_Item_Object :: Draw_Image( void ) @@ -533,12 +527,12 @@ if( editor_window->getXPosition().asRelative( 1 ) >= 0 ) { // Listbox dimension - float list_posy = listbox_items->getUnclippedPixelRect().d_top * global_downscaley; - float list_height = listbox_items->getUnclippedPixelRect().getHeight() * global_downscaley; + float list_posy = listbox_items->getUnclippedOuterRect().d_top * global_downscaley; + float list_height = listbox_items->getUnclippedOuterRect().getHeight() * global_downscaley; // Vertical ScrollBar Position float scroll_pos = listbox_items->getVertScrollbar()->getScrollPosition() * global_downscaley; // font height - float font_height = CEGUI::FontManager::getSingleton().getFont( "bluebold_medium" )->getFontHeight() * global_downscaley; + float font_height = CEGUI::FontManager::getSingleton().get( "bluebold_medium" ).getFontHeight() * global_downscaley; // draw items for( unsigned int i = 0; i < listbox_items->getItemCount(); i++ ) diff -ur smc-1.9/src/core/editor.h smc-1.9-b/src/core/editor.h --- smc-1.9/src/core/editor.h 2009-02-18 05:21:30.000000000 +0100 +++ smc-1.9-b/src/core/editor.h 2011-01-19 00:43:37.809884881 +0100 @@ -62,8 +62,7 @@ */ virtual CEGUI::Size getPixelSize( void ) const; // draw - void draw( const CEGUI::Vector3 &position, float alpha, const CEGUI::Rect &clipper ) const; - void draw( CEGUI::RenderCache &cache, const CEGUI::Rect &targetRect, float zBase, float alpha, const CEGUI::Rect *clipper) const; + void draw(CEGUI::GeometryBuffer& buffer, const CEGUI::Rect& targetRect, float alpha, const CEGUI::Rect* clipper) const; // draw image void Draw_Image( void ); diff -ur smc-1.9/src/core/game_core.cpp smc-1.9-b/src/core/game_core.cpp --- smc-1.9/src/core/game_core.cpp 2009-08-16 18:44:42.000000000 +0200 +++ smc-1.9-b/src/core/game_core.cpp 2011-01-19 00:59:02.668958883 +0100 @@ -265,7 +265,7 @@ // align text - CEGUI::Font *font = CEGUI::FontManager::getSingleton().getFont( "bluebold_medium" ); + CEGUI::Font *font = &CEGUI::FontManager::getSingleton().get( "bluebold_medium" ); // fixme : Can't handle multiple lines of text float text_width = font->getTextExtent( text ) * global_downscalex; @@ -1182,7 +1182,7 @@ text_default->setText( gui_text ); // align text - CEGUI::Font *font = CEGUI::FontManager::getSingleton().getFont( "bluebold_medium" ); + CEGUI::Font *font = &CEGUI::FontManager::getSingleton().get( "bluebold_medium" ); float text_width = font->getTextExtent( gui_text ) * global_downscalex; text_default->setWidth( CEGUI::UDim( 0, ( text_width + 15 ) * global_upscalex ) ); @@ -1190,7 +1190,7 @@ text_default->moveToFront(); // set window height - text_default->setHeight( CEGUI::UDim( 0, font->getFontHeight() * font->getFormattedLineCount( gui_text, text_default->getUnclippedInnerRect(), CEGUI::LeftAligned ) + ( 12 * global_upscaley ) ) ); + text_default->setHeight( CEGUI::UDim( 0, font->getFontHeight() + ( 12 * global_upscaley ) ) ); while( draw ) { diff -ur smc-1.9/src/core/main.cpp smc-1.9-b/src/core/main.cpp --- smc-1.9/src/core/main.cpp 2009-05-12 10:36:04.000000000 +0200 +++ smc-1.9-b/src/core/main.cpp 2011-01-19 00:43:37.809884881 +0100 @@ -444,13 +444,15 @@ if( pGuiSystem ) { - delete pGuiSystem; + CEGUI::ResourceProvider* rp = pGuiSystem->getResourceProvider(); + pGuiSystem->destroy(); pGuiSystem = NULL; + delete rp; } if( pGuiRenderer ) { - delete pGuiRenderer; + pGuiRenderer->destroy( *pGuiRenderer ); pGuiRenderer = NULL; } @@ -507,7 +509,7 @@ } case SDL_VIDEORESIZE: { - pGuiRenderer->setDisplaySize( CEGUI::Size( static_cast(ev->resize.w), static_cast(ev->resize.h) ) ); + pGuiSystem->notifyDisplaySizeChanged( CEGUI::Size( static_cast(ev->resize.w), static_cast(ev->resize.h) ) ); break; } case SDL_KEYDOWN: diff -ur smc-1.9/src/gui/hud.cpp smc-1.9-b/src/gui/hud.cpp --- smc-1.9/src/gui/hud.cpp 2009-05-01 15:00:16.000000000 +0200 +++ smc-1.9-b/src/gui/hud.cpp 2011-01-19 00:43:37.816550365 +0100 @@ -946,7 +946,7 @@ m_text_debug_text->setVisible( 1 ); // update position - CEGUI::Font *font = CEGUI::FontManager::getSingleton().getFont( "bluebold_medium" ); + CEGUI::Font *font = &CEGUI::FontManager::getSingleton().get( "bluebold_medium" ); float text_width = font->getTextExtent( gui_text ) * global_downscalex; if( text_width > 800.0f ) diff -ur smc-1.9/src/input/mouse.cpp smc-1.9-b/src/input/mouse.cpp --- smc-1.9/src/input/mouse.cpp 2009-04-24 21:16:58.000000000 +0200 +++ smc-1.9-b/src/input/mouse.cpp 2011-01-19 00:43:37.813217623 +0100 @@ -432,17 +432,12 @@ void cMouseCursor :: Render( void ) const { - if( !m_active ) - { + CEGUI::MouseCursor *mouse = CEGUI::MouseCursor::getSingletonPtr(); + + if ( m_active == mouse->isVisible() ) return; - } - // Render CEGUI Mouse - pGuiRenderer->setQueueingEnabled( 0 ); - CEGUI::MouseCursor *mouse = CEGUI::MouseCursor::getSingletonPtr(); - mouse->setVisible( 1 ); - mouse->draw(); - mouse->setVisible( 0 ); + mouse->setVisible( m_active ); } void cMouseCursor :: Update_Position( void ) diff -ur smc-1.9/src/level/level_settings.cpp smc-1.9-b/src/level/level_settings.cpp --- smc-1.9/src/level/level_settings.cpp 2009-08-07 03:04:28.000000000 +0200 +++ smc-1.9-b/src/level/level_settings.cpp 2011-01-19 01:06:59.064259070 +0100 @@ -163,8 +163,8 @@ editbox->setText( int_to_string( bg_color_2.blue ).c_str() ); // preview window CEGUI::Window *window_background_preview = CEGUI::WindowManager::getSingleton().getWindow( "window_background_preview" ); - background_preview->Set_Pos_X( window_background_preview->getUnclippedPixelRect().d_left * global_downscalex, 1 ); - background_preview->Set_Pos_Y( window_background_preview->getUnclippedPixelRect().d_top * global_downscaley, 1 ); + background_preview->Set_Pos_X( window_background_preview->getUnclippedOuterRect().d_left * global_downscalex, 1 ); + background_preview->Set_Pos_Y( window_background_preview->getUnclippedOuterRect().d_top * global_downscaley, 1 ); Update_BG_Colors( CEGUI::EventArgs() ); @@ -555,8 +555,8 @@ // set default rect CEGUI::Window *window_background_preview = CEGUI::WindowManager::getSingleton().getWindow( "window_background_preview" ); - background_preview->m_rect.m_w = window_background_preview->getUnclippedPixelRect().getWidth() * global_downscalex; - background_preview->m_rect.m_h = window_background_preview->getUnclippedPixelRect().getHeight() * global_downscaley; + background_preview->m_rect.m_w = window_background_preview->getUnclippedOuterRect().getWidth() * global_downscalex; + background_preview->m_rect.m_h = window_background_preview->getUnclippedOuterRect().getHeight() * global_downscaley; if( !File_Exists( filename ) ) { diff -ur smc-1.9/src/objects/sprite.cpp smc-1.9-b/src/objects/sprite.cpp --- smc-1.9/src/objects/sprite.cpp 2009-04-18 09:55:06.000000000 +0200 +++ smc-1.9-b/src/objects/sprite.cpp 2011-01-19 00:43:37.813217623 +0100 @@ -1663,7 +1663,7 @@ window_name->setText( name ); window_name->setTooltipText( tooltip ); // get text width - CEGUI::Font *font = CEGUI::FontManager::getSingleton().getFont( "bluebold_medium" ); + CEGUI::Font *font = &CEGUI::FontManager::getSingleton().get( "bluebold_medium" ); float text_width = 12 + font->getTextExtent( name ) * global_downscalex; // all names should have the same width if( text_width > m_editor_window_name_width ) diff -ur smc-1.9/src/video/video.cpp smc-1.9-b/src/video/video.cpp --- smc-1.9/src/video/video.cpp 2009-07-04 11:46:56.000000000 +0200 +++ smc-1.9-b/src/video/video.cpp 2011-01-19 01:22:45.338524592 +0100 @@ -103,15 +103,15 @@ /* *** *** *** *** *** *** *** CEGUI renderer fake class *** *** *** *** *** *** *** *** *** *** */ -cFake_Renderer :: cFake_Renderer( void ) -{ - d_identifierString = "Fake Renderer"; -} +//cFake_Renderer :: cFake_Renderer( void ) +//{ +// d_identifierString = "Fake Renderer"; +//} -cFake_Renderer :: ~cFake_Renderer( void ) -{ +//cFake_Renderer :: ~cFake_Renderer( void ) +//{ -} +//} /* *** *** *** *** *** *** *** Video class *** *** *** *** *** *** *** *** *** *** */ @@ -158,7 +158,7 @@ std::string log_dump_dir = "/dev/null"; #endif // create fake system and renderer - pGuiSystem = new CEGUI::System( new cFake_Renderer(), rp, NULL, NULL, "", log_dump_dir ); + pGuiSystem = &CEGUI::System::create( *new cFake_Renderer(), rp, NULL, NULL, NULL, "", log_dump_dir ); } void cVideo :: Delete_CEGUI_Fake( void ) const @@ -166,7 +166,7 @@ CEGUI::ResourceProvider *rp = pGuiSystem->getResourceProvider(); CEGUI::Renderer *renderer = pGuiSystem->getRenderer(); - delete pGuiSystem; + pGuiSystem->destroy(); pGuiSystem = NULL; delete renderer; delete rp; @@ -177,7 +177,7 @@ // create renderer try { - pGuiRenderer = new CEGUI::OpenGLRenderer( 0, screen->w, screen->h ); + pGuiRenderer = &CEGUI::OpenGLRenderer::create( CEGUI::Size( screen->w, screen->h ) ); } // catch CEGUI Exceptions catch( CEGUI::Exception &ex ) @@ -186,10 +186,10 @@ exit( EXIT_FAILURE ); } - /* create Resource Provider - * no need to destroy it later since it is handled by the CEGUI renderer - */ - CEGUI::DefaultResourceProvider *rp = static_cast(pGuiRenderer->createResourceProvider()); + pGuiRenderer->enableExtraStateSettings(true); + + // create Resource Provider + CEGUI::DefaultResourceProvider *rp = new CEGUI::DefaultResourceProvider; // set Resource Provider directories rp->setResourceGroupDirectory( "schemes", DATA_DIR "/" GUI_SCHEME_DIR "/" ); @@ -215,7 +215,7 @@ // create system try { - pGuiSystem = new CEGUI::System( pGuiRenderer, rp, NULL, NULL, "", pResource_Manager->user_data_dir + "cegui.log" ); + pGuiSystem = &CEGUI::System::create( *pGuiRenderer, rp, NULL, NULL, NULL, "", pResource_Manager->user_data_dir + "cegui.log" ); } // catch CEGUI Exceptions catch( CEGUI::Exception &ex ) @@ -242,7 +242,7 @@ // load the scheme file, which auto-loads the imageset try { - CEGUI::SchemeManager::getSingleton().loadScheme( "TaharezLook.scheme" ); + CEGUI::SchemeManager::getSingleton().create( "TaharezLook.scheme" ); } // catch CEGUI Exceptions catch( CEGUI::Exception &ex ) @@ -254,9 +254,7 @@ // default mouse cursor pGuiSystem->setDefaultMouseCursor( "TaharezLook", "MouseArrow" ); // force new mouse image - CEGUI::MouseCursor::getSingleton().setImage( &CEGUI::ImagesetManager::getSingleton().getImageset( "TaharezLook" )->getImage( "MouseArrow" ) ); - // hide CEGUI mouse always because we render it manually - CEGUI::MouseCursor::getSingleton().hide(); + CEGUI::MouseCursor::getSingleton().setImage( &CEGUI::ImagesetManager::getSingleton().get( "TaharezLook" ).getImage( "MouseArrow" ) ); // default tooltip pGuiSystem->setDefaultTooltip( "TaharezLook/Tooltip" ); // create default root window @@ -553,7 +551,7 @@ pFont->Restore_Textures(); // send new size to CEGUI - pGuiRenderer->setDisplaySize( CEGUI::Size( static_cast(screen_w), static_cast(screen_h) ) ); + pGuiSystem->notifyDisplaySizeChanged( CEGUI::Size( static_cast(screen_w), static_cast(screen_h) ) ); // check if CEGUI is initialized bool cegui_initialized = pGuiSystem->getGUISheet() != NULL; diff -ur smc-1.9/src/video/video.h smc-1.9-b/src/video/video.h --- smc-1.9/src/video/video.h 2009-07-04 10:49:50.000000000 +0200 +++ smc-1.9-b/src/video/video.h 2011-01-19 01:16:42.791283379 +0100 @@ -23,7 +23,7 @@ #include "SDL_opengl.h" // CEGUI #include "CEGUI.h" -#include "RendererModules/OpenGLGUIRenderer/openglrenderer.h" +#include namespace SMC { @@ -129,31 +129,100 @@ EFFECT_IN_AMOUNT }; -/* *** *** *** *** *** *** *** CEGUI renderer fake class *** *** *** *** *** *** *** *** *** *** */ +/* *** *** *** *** *** *** *** CEGUI renderer fake classes *** *** *** *** *** *** *** *** *** *** */ +// CEGUI 0.7.x requires more 'fake' classes than the 0.6.x version did... +class cFake_GeometryBuffer : public CEGUI::GeometryBuffer +{ + void draw() const {} + void setTranslation(const CEGUI::Vector3&) {} + void setRotation(const CEGUI::Vector3&) {} + void setPivot(const CEGUI::Vector3&) {} + void setClippingRegion(const CEGUI::Rect&) {} + void appendVertex(const CEGUI::Vertex&) {} + void appendGeometry(const CEGUI::Vertex* const, CEGUI::uint) {} + void setActiveTexture(CEGUI::Texture*) {} + void reset() {} + CEGUI::Texture* getActiveTexture() const { return 0; } + CEGUI::uint getVertexCount() const { return 0; } + CEGUI::uint getBatchCount() const { return 0; } + void setRenderEffect(CEGUI::RenderEffect*) {} + CEGUI::RenderEffect* getRenderEffect() { return 0; } +}; -class cFake_Renderer : public CEGUI::Renderer +class cFake_Texture : public CEGUI::Texture +{ +public: + cFake_Texture() : + m_size(1, 1), + m_scaling(1, 1) {} + + const CEGUI::Size& getSize() const { return m_size; } + const CEGUI::Size& getOriginalDataSize() const { return m_size; } + const CEGUI::Vector2& getTexelScaling() const { return m_scaling; } + void loadFromFile(const CEGUI::String&, const CEGUI::String&) {} + void loadFromMemory(const void*, const CEGUI::Size&, CEGUI::Texture::PixelFormat) {} + void saveToMemory(void*) {} + +private: + CEGUI::Size m_size; + CEGUI::Vector2 m_scaling; +}; + +class cFake_RenderTarget : public CEGUI::RenderTarget { public: - cFake_Renderer( void ); - virtual ~cFake_Renderer( void ); + cFake_RenderTarget() : m_area(0, 0, 0, 0) {} + void draw(const CEGUI::GeometryBuffer&) {} + void draw(const CEGUI::RenderQueue&) {} + void setArea(const CEGUI::Rect&) {} + const CEGUI::Rect& getArea() const { return m_area; } + bool isImageryCache() const { return false; } + void activate() {} + void deactivate() {} + void unprojectPoint(const CEGUI::GeometryBuffer&, const CEGUI::Vector2&, CEGUI::Vector2&) const {} + +private: + CEGUI::Rect m_area; +}; - virtual void addQuad(const CEGUI::Rect& dest_rect, float z, const CEGUI::Texture* tex, const CEGUI::Rect& texture_rect, const CEGUI::ColourRect& colours, CEGUI::QuadSplitMode quad_split_mode) {}; - virtual void doRender(void) {}; - virtual void clearRenderList(void) {}; - virtual void setQueueingEnabled(bool setting) {}; - virtual CEGUI::Texture *createTexture(void) { return NULL; }; - virtual CEGUI::Texture *createTexture(const CEGUI::String& filename, const CEGUI::String& resourceGroup) { return NULL; }; - virtual CEGUI::Texture *createTexture(float size) { return NULL; }; - virtual void destroyTexture(CEGUI::Texture* texture) {}; - virtual void destroyAllTextures(void) {}; - virtual bool isQueueingEnabled(void) const { return 0; }; - virtual float getWidth(void) const { return 0; }; - virtual float getHeight(void) const { return 0; }; - virtual CEGUI::Size getSize(void) const { return CEGUI::Size();}; - virtual CEGUI::Rect getRect(void) const { return CEGUI::Rect();}; - virtual unsigned int getMaxTextureSize(void) const { return 0; }; - virtual unsigned int getHorzScreenDPI(void) const { return 0; }; - virtual unsigned int getVertScreenDPI(void) const { return 0; }; +class cFake_Renderer : public CEGUI::Renderer +{ +public: + cFake_Renderer( void ) : + m_size(0, 0), + m_dpi(0, 0), + m_identifierString("Fake Renderer"), + m_root(m_target) {} + ~cFake_Renderer( void ) {} + + CEGUI::RenderingRoot& getDefaultRenderingRoot() { return m_root; } + CEGUI::GeometryBuffer& createGeometryBuffer() { return m_geometry; } + void destroyGeometryBuffer(const CEGUI::GeometryBuffer&) {} + void destroyAllGeometryBuffers() {} + CEGUI::TextureTarget* createTextureTarget() { return 0; } + void destroyTextureTarget(CEGUI::TextureTarget*) {} + void destroyAllTextureTargets() {} + CEGUI::Texture& createTexture() { return m_texture; } + CEGUI::Texture& createTexture(const CEGUI::String&, const CEGUI::String&) { return m_texture; } + CEGUI::Texture& createTexture(const CEGUI::Size&) { return m_texture; } + void destroyTexture(CEGUI::Texture&) {} + void destroyAllTextures() {} + void beginRendering() {} + void endRendering() {} + void setDisplaySize(const CEGUI::Size&) {} + const CEGUI::Size& getDisplaySize() const { return m_size; } + const CEGUI::Vector2& getDisplayDPI() const {return m_dpi; } + CEGUI::uint getMaxTextureSize() const { return 0; } + const CEGUI::String& getIdentifierString() const { return m_identifierString; } + +private: + CEGUI::Size m_size; + CEGUI::Vector2 m_dpi; + CEGUI::String m_identifierString; + cFake_GeometryBuffer m_geometry; + cFake_Texture m_texture; + cFake_RenderTarget m_target; + CEGUI::RenderingRoot m_root; }; /* *** *** *** *** *** *** *** Video class *** *** *** *** *** *** *** *** *** *** */