From fc5c0313fe9953dbf76ee09a56ce32bbb077b949 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=C2=ADn=20Lucas=20Golini?= Date: Wed, 1 Mar 2017 05:04:42 -0300 Subject: [PATCH] Clean up. --HG-- branch : dev --- include/eepp/ui/uicomplexcontrol.hpp | 2 + include/eepp/ui/uicontrol.hpp | 8 +- include/eepp/ui/uicontrolanim.hpp | 2 + include/eepp/ui/uidefaulttheme.hpp | 4 +- include/eepp/ui/uidragable.hpp | 2 + include/eepp/ui/uigfx.hpp | 4 + include/eepp/ui/uigridcell.hpp | 2 + include/eepp/ui/uispinbox.hpp | 2 + include/eepp/ui/uisprite.hpp | 2 + include/eepp/ui/uitextedit.hpp | 4 +- include/eepp/ui/uitextinputpassword.hpp | 4 +- include/eepp/ui/uitheme.hpp | 21 +- include/eepp/ui/uithemeconfig.hpp | 21 ++ include/eepp/ui/uiwindow.hpp | 66 ++-- src/eepp/gaming/mapeditor/mapeditor.cpp | 15 +- .../gaming/mapeditor/maplayerproperties.cpp | 4 +- .../gaming/mapeditor/mapobjectproperties.cpp | 4 +- .../gaming/mapeditor/tilemapproperties.cpp | 4 +- src/eepp/gaming/mapeditor/uigotypenew.cpp | 4 +- src/eepp/gaming/mapeditor/uimaplayernew.cpp | 4 +- src/eepp/gaming/mapeditor/uimapnew.cpp | 6 +- src/eepp/ui/tools/textureatlaseditor.cpp | 12 +- src/eepp/ui/tools/textureatlasnew.cpp | 6 +- src/eepp/ui/uicommondialog.cpp | 8 +- src/eepp/ui/uicomplexcontrol.cpp | 4 + src/eepp/ui/uicontrol.cpp | 14 +- src/eepp/ui/uicontrolanim.cpp | 4 + src/eepp/ui/uidefaulttheme.cpp | 53 ++- src/eepp/ui/uidragable.cpp | 4 + src/eepp/ui/uigfx.cpp | 9 + src/eepp/ui/uigridcell.cpp | 4 + src/eepp/ui/uimanager.cpp | 8 +- src/eepp/ui/uimessagebox.cpp | 4 +- src/eepp/ui/uispinbox.cpp | 4 + src/eepp/ui/uisprite.cpp | 4 + src/eepp/ui/uitextbox.cpp | 3 +- src/eepp/ui/uitextedit.cpp | 4 + src/eepp/ui/uitextinput.cpp | 2 +- src/eepp/ui/uitextinputpassword.cpp | 13 +- src/eepp/ui/uitheme.cpp | 124 +------ src/eepp/ui/uiwindow.cpp | 319 ++++++++++-------- src/test/eetest.cpp | 77 +++-- 42 files changed, 445 insertions(+), 420 deletions(-) diff --git a/include/eepp/ui/uicomplexcontrol.hpp b/include/eepp/ui/uicomplexcontrol.hpp index df53ac207..d4fef8bce 100644 --- a/include/eepp/ui/uicomplexcontrol.hpp +++ b/include/eepp/ui/uicomplexcontrol.hpp @@ -8,6 +8,8 @@ namespace EE { namespace UI { class EE_API UIComplexControl : public UIControlAnim { public: + static UIComplexControl * New(); + class CreateParams : public UIControlAnim::CreateParams { public: inline CreateParams() : diff --git a/include/eepp/ui/uicontrol.hpp b/include/eepp/ui/uicontrol.hpp index 85b785e35..4650f4ee6 100644 --- a/include/eepp/ui/uicontrol.hpp +++ b/include/eepp/ui/uicontrol.hpp @@ -22,6 +22,8 @@ class UIManager; class EE_API UIControl { public: + static UIControl * New(); + typedef cb::Callback1 UIEventCallback; class CreateParams { @@ -150,11 +152,11 @@ class EE_API UIControl { Uint32 getHorizontalAlign() const; - void setHorizontalAlign( Uint32 halign ); + UIControl * setHorizontalAlign( Uint32 halign ); Uint32 getVerticalAlign() const; - void setVerticalAlign( Uint32 valign ); + UIControl * setVerticalAlign( Uint32 valign ); UIBackground * setBackgroundFillEnabled( bool enabled ); @@ -178,7 +180,7 @@ class EE_API UIControl { virtual UIControl * unsetFlags( const Uint32& flags ); - UIControl * resetFlags(); + UIControl * resetFlags( Uint32 newFlags = 0 ); void setBlendMode( const EE_BLEND_MODE& blend ); diff --git a/include/eepp/ui/uicontrolanim.hpp b/include/eepp/ui/uicontrolanim.hpp index 6cbacd3eb..3848cef05 100644 --- a/include/eepp/ui/uicontrolanim.hpp +++ b/include/eepp/ui/uicontrolanim.hpp @@ -9,6 +9,8 @@ namespace EE { namespace UI { class EE_API UIControlAnim : public UIDragable { public: + static UIControlAnim * New(); + UIControlAnim( const CreateParams& Params ); UIControlAnim(); diff --git a/include/eepp/ui/uidefaulttheme.hpp b/include/eepp/ui/uidefaulttheme.hpp index 847226dbb..ce7bb7550 100644 --- a/include/eepp/ui/uidefaulttheme.hpp +++ b/include/eepp/ui/uidefaulttheme.hpp @@ -15,9 +15,9 @@ class EE_API UIDefaultTheme : public UITheme { WinMenuStyleConfig getWinMenuStyleConfig(); - virtual UIPopUpMenu * createPopUpMenu(UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS | UI_AUTO_SIZE | UI_AUTO_PADDING, Recti PaddingContainer = Recti(), Uint32 MinWidth = 100, Uint32 MinSpaceForIcons = 16, Uint32 MinRightMargin = 8 ); + WindowStyleConfig getWindowStyleConfig(); - virtual UIWindow * createWindow( UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS_CENTERED, Uint32 WinFlags = UI_WIN_DEFAULT_FLAGS, Sizei MinWindowSize = Sizei(0,0), Uint8 BaseAlpha = 255 ); + virtual UIPopUpMenu * createPopUpMenu(UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS | UI_AUTO_SIZE | UI_AUTO_PADDING, Recti PaddingContainer = Recti(), Uint32 MinWidth = 100, Uint32 MinSpaceForIcons = 16, Uint32 MinRightMargin = 8 ); virtual UICommonDialog * createCommonDialog( UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS_CENTERED, Uint32 WinFlags = UI_WIN_DEFAULT_FLAGS | UI_WIN_MAXIMIZE_BUTTON, Sizei MinWindowSize = Sizei(0,0), Uint8 BaseAlpha = 255, Uint32 CDLFlags = UI_CDL_DEFAULT_FLAGS, std::string DefaultFilePattern = "*", std::string DefaultDirectory = Sys::getProcessPath() ); diff --git a/include/eepp/ui/uidragable.hpp b/include/eepp/ui/uidragable.hpp index f3c4d6ba8..d69b0c117 100644 --- a/include/eepp/ui/uidragable.hpp +++ b/include/eepp/ui/uidragable.hpp @@ -7,6 +7,8 @@ namespace EE { namespace UI { class EE_API UIDragable : public UIControl { public: + static UIDragable * New(); + UIDragable( const UIControl::CreateParams& Params ); UIDragable(); diff --git a/include/eepp/ui/uigfx.hpp b/include/eepp/ui/uigfx.hpp index b1545b805..0e331345d 100644 --- a/include/eepp/ui/uigfx.hpp +++ b/include/eepp/ui/uigfx.hpp @@ -7,6 +7,8 @@ namespace EE { namespace UI { class EE_API UIGfx : public UIComplexControl { public: + static UIGfx * New(); + class CreateParams : public UIComplexControl::CreateParams { public: inline CreateParams() : @@ -59,6 +61,8 @@ class EE_API UIGfx : public UIComplexControl { virtual void onSizeChange(); + virtual void onAlignChange(); + void autoSize(); void autoAlign(); diff --git a/include/eepp/ui/uigridcell.hpp b/include/eepp/ui/uigridcell.hpp index 2157e3efe..327a39ad8 100644 --- a/include/eepp/ui/uigridcell.hpp +++ b/include/eepp/ui/uigridcell.hpp @@ -10,6 +10,8 @@ class UIGenericGrid; class EE_API UIGridCell : public UIComplexControl { public: + static UIGridCell * New(); + UIGridCell( UIGridCell::CreateParams& Params ); UIGridCell(); diff --git a/include/eepp/ui/uispinbox.hpp b/include/eepp/ui/uispinbox.hpp index a5feda8be..6d3a2e201 100644 --- a/include/eepp/ui/uispinbox.hpp +++ b/include/eepp/ui/uispinbox.hpp @@ -8,6 +8,8 @@ namespace EE { namespace UI { class EE_API UISpinBox : public UIComplexControl { public: + static UISpinBox * New(); + class CreateParams : public UITextInput::CreateParams { public: inline CreateParams() : diff --git a/include/eepp/ui/uisprite.hpp b/include/eepp/ui/uisprite.hpp index fb33dbd17..072fdffc7 100644 --- a/include/eepp/ui/uisprite.hpp +++ b/include/eepp/ui/uisprite.hpp @@ -11,6 +11,8 @@ namespace EE { namespace UI { class EE_API UISprite : public UIComplexControl { public: + static UISprite * New(); + class CreateParams : public UIComplexControl::CreateParams { public: inline CreateParams() : diff --git a/include/eepp/ui/uitextedit.hpp b/include/eepp/ui/uitextedit.hpp index eda6d853a..50e4bdd2f 100644 --- a/include/eepp/ui/uitextedit.hpp +++ b/include/eepp/ui/uitextedit.hpp @@ -8,7 +8,9 @@ namespace EE { namespace UI { class EE_API UITextEdit : public UIComplexControl { - public: + public: + static UITextEdit * New(); + class CreateParams : public UITextBox::CreateParams { public: inline CreateParams() : UITextBox::CreateParams(), diff --git a/include/eepp/ui/uitextinputpassword.hpp b/include/eepp/ui/uitextinputpassword.hpp index 2db4be722..53683a12c 100644 --- a/include/eepp/ui/uitextinputpassword.hpp +++ b/include/eepp/ui/uitextinputpassword.hpp @@ -8,10 +8,10 @@ namespace EE { namespace UI { class UITextInputPassword : public UITextInput { public: - UITextInputPassword( const UITextInput::CreateParams& Params ); - UITextInputPassword(); + ~UITextInputPassword(); + virtual void draw(); virtual const String& getText(); diff --git a/include/eepp/ui/uitheme.hpp b/include/eepp/ui/uitheme.hpp index 5535089c3..7bdeb8770 100644 --- a/include/eepp/ui/uitheme.hpp +++ b/include/eepp/ui/uitheme.hpp @@ -83,22 +83,12 @@ class EE_API UITheme : protected ResourceManager { SubTexture * getIconByName( const std::string& name ); - virtual UIGfx * createGfx( SubTexture * SubTexture, UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS_CENTERED | UI_AUTO_SIZE, ColorA SubTextureColor = ColorA(255,255,255,255), EE_RENDER_MODE SubTextureRender = RN_NORMAL ); - - virtual UISprite * createSprite( Sprite * Sprite, UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS_CENTERED | UI_AUTO_SIZE, bool DealloSprite = true, EE_RENDER_MODE SpriteRender = RN_NORMAL ); - virtual UICheckBox * createCheckBox( UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS ); - virtual UIRadioButton * createRadioButton( UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS ); - virtual UITextBox * createTextBox( const String& Text = "", UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS | UI_AUTO_SIZE ); - virtual UITextEdit * createTextEdit( UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS | UI_AUTO_PADDING | UI_CLIP_ENABLE | UI_AUTO_SIZE | UI_TEXT_SELECTION_ENABLED, UI_SCROLLBAR_MODE HScrollBar = UI_SCROLLBAR_AUTO, UI_SCROLLBAR_MODE VScrollBar = UI_SCROLLBAR_AUTO, bool WordWrap = true ); - virtual UITextInput * createTextInput( UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS | UI_CLIP_ENABLE | UI_AUTO_PADDING | UI_TEXT_SELECTION_ENABLED, bool SupportFreeEditing = true, Uint32 MaxLength = 1024*8 ); - virtual UITextInputPassword * createTextInputPassword( UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS | UI_CLIP_ENABLE | UI_AUTO_PADDING | UI_TEXT_SELECTION_ENABLED, bool SupportFreeEditing = true, Uint32 MaxLength = 1024*8 ); - virtual UIScrollBar * createScrollBar( UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS | UI_AUTO_SIZE, bool VerticalScrollBar = false ); virtual UISlider * createSlider( UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS, bool VerticalSlider = false, bool AllowHalfSliderOut = true, bool ExpandBackground = false ); @@ -107,16 +97,12 @@ class EE_API UITheme : protected ResourceManager { virtual UIListBox * createListBox( UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS | UI_CLIP_ENABLE | UI_AUTO_PADDING, bool SmoothScroll = true, Uint32 RowHeight = 0, UI_SCROLLBAR_MODE VScrollMode = UI_SCROLLBAR_AUTO, UI_SCROLLBAR_MODE HScrollMode = UI_SCROLLBAR_AUTO, Recti PaddingContainer = Recti() ); - virtual UIMenu * createMenu( UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS | UI_AUTO_SIZE | UI_AUTO_PADDING, Recti PaddingContainer = Recti(), Uint32 MinWidth = 0, Uint32 MinSpaceForIcons = 0, Uint32 MinRightMargin = 0 ); - virtual UIPopUpMenu * createPopUpMenu(UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS | UI_AUTO_SIZE | UI_AUTO_PADDING, Recti PaddingContainer = Recti(), Uint32 MinWidth = 0, Uint32 MinSpaceForIcons = 0, Uint32 MinRightMargin = 0 ); virtual UIPushButton * createPushButton( UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS_CENTERED | UI_AUTO_SIZE, SubTexture * Icon = NULL, Int32 IconHorizontalMargin = 0, bool IconAutoMargin = true ); virtual UISelectButton * createSelectButton( UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS_CENTERED | UI_AUTO_SIZE, SubTexture * Icon = NULL, Int32 IconHorizontalMargin = 0, bool IconAutoMargin = true ); - virtual UIWindow * createWindow( UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS_CENTERED, Uint32 WinFlags = UI_WIN_DEFAULT_FLAGS, Sizei MinWindowSize = Sizei(0,0), Uint8 BaseAlpha = 255 ); - virtual UICommonDialog * createCommonDialog( UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS_CENTERED, Uint32 WinFlags = UI_WIN_DEFAULT_FLAGS | UI_WIN_MAXIMIZE_BUTTON, Sizei MinWindowSize = Sizei(0,0), Uint8 BaseAlpha = 255, Uint32 CDLFlags = UI_CDL_DEFAULT_FLAGS, std::string DefaultFilePattern = "*", std::string DefaultDirectory = Sys::getProcessPath() ); virtual UIMessageBox * createMessageBox( UI_MSGBOX_TYPE Type = MSGBOX_OKCANCEL, const String& Message = String(), Uint32 WinFlags = UI_WIN_DEFAULT_FLAGS | UI_WIN_MODAL, UIControl * Parent = NULL, const Sizei& Size = Sizei(), const Vector2i& Pos = Vector2i(), const Uint32& Flags = UI_CONTROL_DEFAULT_FLAGS_CENTERED, Sizei MinWindowSize = Sizei(0,0), Uint8 BaseAlpha = 255 ); @@ -137,10 +123,6 @@ class EE_API UITheme : protected ResourceManager { void setTooltipPadding(const Recti & tooltipPadding); - Int32 getTabSeparation() const; - - void setTabSeparation(const Int32 & tabSeparation); - FontStyleConfig getFontStyleConfig() const; void setFontStyleConfig(const FontStyleConfig & fontConfig); @@ -152,6 +134,8 @@ class EE_API UITheme : protected ResourceManager { virtual WinMenuStyleConfig getWinMenuStyleConfig(); virtual DropDownListStyleConfig getDropDownListStyleConfig(); + + virtual WindowStyleConfig getWindowStyleConfig(); protected: std::string mName; Uint32 mNameHash; @@ -162,7 +146,6 @@ class EE_API UITheme : protected ResourceManager { ColorA mMenuFontColorOver; ColorA mTooltipFontColor; Recti mTooltipPadding; - Int32 mTabSeparation; bool mUseDefaultThemeValues; std::list mUIElements; std::list mUIIcons; diff --git a/include/eepp/ui/uithemeconfig.hpp b/include/eepp/ui/uithemeconfig.hpp index 4c5cd95c2..cac8a1472 100644 --- a/include/eepp/ui/uithemeconfig.hpp +++ b/include/eepp/ui/uithemeconfig.hpp @@ -149,6 +149,27 @@ class DropDownListStyleConfig : public FontStyleConfig { bool popUpToMainControl = false; }; +class WindowStyleConfig : public FontStyleConfig { + public: + WindowStyleConfig() {} + + WindowStyleConfig( FontStyleConfig fontStyleConfig ) : + FontStyleConfig( fontStyleConfig ) + {} + + Uint32 winFlags = UI_WIN_DEFAULT_FLAGS; + Sizei decorationSize; + Sizei borderSize; + Sizei minWindowSize; + Vector2i buttonsPositionFixer; + Uint32 buttonsSeparation = 4; + Int32 minCornerDistance = 24; + ColorA titleFontColor = ColorA( 255, 255, 255, 255 ); + Uint8 baseAlpha = 255; + bool decorationAutoSize = true; + bool borderAutoSize = true; +}; + }} #endif diff --git a/include/eepp/ui/uiwindow.hpp b/include/eepp/ui/uiwindow.hpp index 01bc9be15..14c76ac97 100644 --- a/include/eepp/ui/uiwindow.hpp +++ b/include/eepp/ui/uiwindow.hpp @@ -9,33 +9,23 @@ namespace EE { namespace UI { class EE_API UIWindow : public UIComplexControl { public: + static UIWindow * New(); + class CreateParams : public UIComplexControl::CreateParams { public: inline CreateParams() : - UIComplexControl::CreateParams(), - WinFlags( UI_WIN_DEFAULT_FLAGS ), - ButtonsSeparation( 4 ), - MinCornerDistance( 24 ), - TitleFontColor( 255, 255, 255, 255 ), - BaseAlpha( 255 ), - DecorationAutoSize( true ), - BorderAutoSize( true ) + UIComplexControl::CreateParams() { + UITheme * theme = UIThemeManager::instance()->getDefaultTheme(); + + if ( NULL != theme ) { + windowStyleConfig = theme->getWindowStyleConfig(); + } } inline ~CreateParams() {} - Uint32 WinFlags; - Sizei DecorationSize; - Sizei BorderSize; - Sizei MinWindowSize; - Vector2i ButtonsPositionFixer; - Uint32 ButtonsSeparation; - Int32 MinCornerDistance; - ColorA TitleFontColor; - Uint8 BaseAlpha; - bool DecorationAutoSize; - bool BorderAutoSize; + WindowStyleConfig windowStyleConfig; }; UIWindow( const UIWindow::CreateParams& Params ); @@ -52,6 +42,10 @@ class EE_API UIWindow : public UIComplexControl { UIControl * setSize( const Int32& Width, const Int32& Height ); + UIWindow * setSizeWithDecoration( const Int32& Width, const Int32& Height ); + + UIWindow * setSizeWithDecoration( const Sizei& size ); + const Sizei& getSize(); virtual void setTheme( UITheme * Theme ); @@ -103,6 +97,16 @@ class EE_API UIWindow : public UIComplexControl { Uint32 getWinFlags() const; UIWindow * setWinFlags(const Uint32 & winFlags); + + WindowStyleConfig getStyleConfig() const; + + UIWindow * setStyleConfig(const WindowStyleConfig & styleConfig); + + UIWindow * setMinWindowSize( Sizei size ); + + UIWindow * setMinWindowSize( const Int32& width, const Int32& height ); + + const Sizei& getMinWindowSize(); protected: class KeyboardShortcut { public: @@ -137,8 +141,7 @@ class EE_API UIWindow : public UIComplexControl { RESIZE_TOPRIGHT }; - Uint32 mWinFlags; - + WindowStyleConfig mStyleConfig; UIControlAnim * mWindowDecoration; UIControlAnim * mBorderLeft; UIControlAnim * mBorderRight; @@ -148,31 +151,16 @@ class EE_API UIWindow : public UIComplexControl { UIComplexControl * mButtonClose; UIComplexControl * mButtonMinimize; UIComplexControl * mButtonMaximize; - UITextBox * mTitle; + UITextBox * mTitle; - UIControlAnim * mModalCtrl; + UIComplexControl * mModalCtrl; - Sizei mDecoSize; - Sizei mBorderSize; - Sizei mMinWindowSize; Vector2i mNonMaxPos; Sizei mNonMaxSize; - Vector2i mButtonsPositionFixer; - Uint32 mButtonsSeparation; - Int32 mMinCornerDistance; - UI_RESIZE_TYPE mResizeType; Vector2i mResizePos; - - ColorA mTitleFontColor; - KeyboardShortcuts mKbShortcuts; - Uint8 mBaseAlpha; - - bool mDecoAutoSize; - bool mBorderAutoSize; - virtual void onSizeChange(); virtual void onAlphaChange(); @@ -203,7 +191,7 @@ class EE_API UIWindow : public UIComplexControl { void internalSize( const Int32& w, const Int32& h ); - void getMinWinSize(); + void calcMinWinSize(); void fixTitleSize(); diff --git a/src/eepp/gaming/mapeditor/mapeditor.cpp b/src/eepp/gaming/mapeditor/mapeditor.cpp index e3b3b8149..902113d00 100644 --- a/src/eepp/gaming/mapeditor/mapeditor.cpp +++ b/src/eepp/gaming/mapeditor/mapeditor.cpp @@ -328,9 +328,12 @@ void MapEditor::CreateSubTextureContainer( Int32 Width ) { mSubTextureList->setSize( mSubTextureList->getSize().getWidth(), mSubTextureList->getRowHeight() * 9 + mSubTextureList->getContainerPadding().Top + mSubTextureList->getContainerPadding().Bottom ); mSubTextureList->addEventListener( UIEvent::EventOnItemSelected, cb::Make1( this, &MapEditor::OnSubTextureChange ) ); - mGfxPreview = mTheme->createGfx( NULL, mSGCont, Sizei( Width, Width ), Vector2i( 0, mSubTextureList->getPosition().y + mSubTextureList->getSize().getHeight() + 4 ), UI_VALIGN_CENTER | UI_HALIGN_CENTER | UI_ANCHOR_RIGHT | UI_ANCHOR_TOP | UI_AUTO_FIT ); - mGfxPreview->setBorderEnabled( true ); - mGfxPreview->getBorder()->setColor( ColorA( 0, 0, 0, 200 ) ); + mGfxPreview = UIGfx::New(); + mGfxPreview->resetFlags( UI_VALIGN_CENTER | UI_HALIGN_CENTER | UI_ANCHOR_RIGHT | UI_ANCHOR_TOP | UI_AUTO_FIT ) + ->setParent( mSGCont )->setSize( Width, Width ) + ->setPosition( 0, mSubTextureList->getPosition().y + mSubTextureList->getSize().getHeight() + 4 ); + + mGfxPreview->setBorderEnabled( true )->setColor( ColorA( 0, 0, 0, 200 ) ); UIComplexControl::CreateParams DIParams; DIParams.setParent( mSubTextureCont ); @@ -1014,7 +1017,11 @@ void MapEditor::MapMenuClick( const UIEvent * Event ) { const String& txt = reinterpret_cast ( Event->getControl() )->getText(); if ( "New Texture Atlas..." == txt ) { - UIWindow * tWin = mTheme->createWindow( NULL, Sizei( 1024, 768 ), Vector2i(), UI_CONTROL_DEFAULT_FLAGS_CENTERED, UI_WIN_DEFAULT_FLAGS | UI_WIN_MAXIMIZE_BUTTON | UI_WIN_DRAGABLE_CONTAINER, Sizei( 1024, 768 ) ); + UIWindow * tWin = UIWindow::New(); + tWin->setSizeWithDecoration( 1024, 768 ); + tWin->setWinFlags( UI_WIN_DEFAULT_FLAGS | UI_WIN_MAXIMIZE_BUTTON | UI_WIN_DRAGABLE_CONTAINER ); + tWin->setMinWindowSize( 1024, 768 ); + eeNew ( Tools::TextureAtlasEditor, ( tWin ) ); tWin->center(); tWin->show(); diff --git a/src/eepp/gaming/mapeditor/maplayerproperties.cpp b/src/eepp/gaming/mapeditor/maplayerproperties.cpp index 680e6341f..8e089dcfe 100644 --- a/src/eepp/gaming/mapeditor/maplayerproperties.cpp +++ b/src/eepp/gaming/mapeditor/maplayerproperties.cpp @@ -20,7 +20,9 @@ MapLayerProperties::MapLayerProperties( MapLayer * Map, RefreshLayerListCb Cb ) if ( NULL == mUITheme ) return; - mUIWindow = mUITheme->createWindow( NULL, Sizei( 500, 500 ), Vector2i(), UI_CONTROL_DEFAULT_FLAGS_CENTERED, UI_WIN_DEFAULT_FLAGS | UI_WIN_MODAL, Sizei( 500, 500 ) ); + mUIWindow = UIWindow::New(); + mUIWindow->setSizeWithDecoration( 500, 500 )->setWinFlags( UI_WIN_DEFAULT_FLAGS | UI_WIN_MODAL )->setMinWindowSize( 500, 500 ); + mUIWindow->addEventListener( UIEvent::EventOnWindowClose, cb::Make1( this, &MapLayerProperties::onWindowClose ) ); mUIWindow->setTitle( "Layer Properties" ); diff --git a/src/eepp/gaming/mapeditor/mapobjectproperties.cpp b/src/eepp/gaming/mapeditor/mapobjectproperties.cpp index 0660de928..14cbfa4fe 100644 --- a/src/eepp/gaming/mapeditor/mapobjectproperties.cpp +++ b/src/eepp/gaming/mapeditor/mapobjectproperties.cpp @@ -19,7 +19,9 @@ MapObjectProperties::MapObjectProperties( GameObjectObject * Obj ) : if ( NULL == mUITheme ) return; - mUIWindow = mUITheme->createWindow( NULL, Sizei( 500, 500 ), Vector2i(), UI_CONTROL_DEFAULT_FLAGS_CENTERED, UI_WIN_DEFAULT_FLAGS | UI_WIN_MODAL, Sizei( 500, 500 ) ); + mUIWindow = UIWindow::New(); + mUIWindow->setSizeWithDecoration( 500, 500 )->setWinFlags( UI_WIN_DEFAULT_FLAGS | UI_WIN_MODAL )->setMinWindowSize( 500, 500 ); + mUIWindow->addEventListener( UIEvent::EventOnWindowClose, cb::Make1( this, &MapObjectProperties::onWindowClose ) ); mUIWindow->setTitle( "Object Properties" ); diff --git a/src/eepp/gaming/mapeditor/tilemapproperties.cpp b/src/eepp/gaming/mapeditor/tilemapproperties.cpp index 1078c5b09..496384f7c 100644 --- a/src/eepp/gaming/mapeditor/tilemapproperties.cpp +++ b/src/eepp/gaming/mapeditor/tilemapproperties.cpp @@ -18,7 +18,9 @@ TileMapProperties::TileMapProperties( TileMap * Map ) : if ( NULL == mUITheme ) return; - mUIWindow = mUITheme->createWindow( NULL, Sizei( 500, 500 ), Vector2i(), UI_CONTROL_DEFAULT_FLAGS_CENTERED, UI_WIN_DEFAULT_FLAGS | UI_WIN_MODAL, Sizei( 500, 500 ) ); + mUIWindow = UIWindow::New(); + mUIWindow->setSizeWithDecoration( 500, 500 )->setWinFlags( UI_WIN_DEFAULT_FLAGS | UI_WIN_MODAL )->setMinWindowSize( 500, 500 ); + mUIWindow->addEventListener( UIEvent::EventOnWindowClose, cb::Make1( this, &TileMapProperties::onWindowClose ) ); mUIWindow->setTitle( "Map Properties" ); diff --git a/src/eepp/gaming/mapeditor/uigotypenew.cpp b/src/eepp/gaming/mapeditor/uigotypenew.cpp index d633d4832..1693f4f76 100644 --- a/src/eepp/gaming/mapeditor/uigotypenew.cpp +++ b/src/eepp/gaming/mapeditor/uigotypenew.cpp @@ -14,7 +14,9 @@ UIGOTypeNew::UIGOTypeNew( cb::Callback2 Cb ) : if ( NULL == mUITheme ) return; - mUIWindow = mUITheme->createWindow( NULL, Sizei( 278, 114 ), Vector2i(), UI_CONTROL_DEFAULT_FLAGS_CENTERED, UI_WIN_DEFAULT_FLAGS | UI_WIN_MODAL, Sizei( 278, 114 ) ); + mUIWindow = UIWindow::New(); + mUIWindow->setSizeWithDecoration( 278, 114 )->setWinFlags( UI_WIN_DEFAULT_FLAGS | UI_WIN_MODAL )->setMinWindowSize( 278, 114 ); + mUIWindow->addEventListener( UIEvent::EventOnWindowClose, cb::Make1( this, &UIGOTypeNew::onWindowClose ) ); mUIWindow->setTitle( "Add GameObject Type" ); diff --git a/src/eepp/gaming/mapeditor/uimaplayernew.cpp b/src/eepp/gaming/mapeditor/uimaplayernew.cpp index 4c779364e..39d7f0b56 100644 --- a/src/eepp/gaming/mapeditor/uimaplayernew.cpp +++ b/src/eepp/gaming/mapeditor/uimaplayernew.cpp @@ -16,7 +16,9 @@ UIMapLayerNew::UIMapLayerNew( UIMap * Map, EE_LAYER_TYPE Type, NewLayerCb newLay if ( NULL == mTheme ) return; - mUIWindow = mTheme->createWindow( NULL, Sizei( 278, 114 ), Vector2i(), UI_CONTROL_DEFAULT_FLAGS_CENTERED, UI_WIN_DEFAULT_FLAGS | UI_WIN_MODAL, Sizei( 278, 114 ) ); + mUIWindow = UIWindow::New(); + mUIWindow->setSizeWithDecoration( 278, 114 )->setWinFlags( UI_WIN_DEFAULT_FLAGS | UI_WIN_MODAL )->setMinWindowSize( 278, 114 ); + mUIWindow->addEventListener( UIEvent::EventOnWindowClose, cb::Make1( this, &UIMapLayerNew::onWindowClose ) ); if ( MAP_LAYER_TILED == mType ) diff --git a/src/eepp/gaming/mapeditor/uimapnew.cpp b/src/eepp/gaming/mapeditor/uimapnew.cpp index caf831d18..98e4faf39 100644 --- a/src/eepp/gaming/mapeditor/uimapnew.cpp +++ b/src/eepp/gaming/mapeditor/uimapnew.cpp @@ -17,7 +17,11 @@ UIMapNew::UIMapNew( UIMap * Map, cb::Callback0 NewMapCb, bool ResizeMap ) if ( NULL == mTheme ) return; - mUIWindow = mTheme->createWindow( NULL, Sizei( 320, 380 ), Vector2i(), UI_CONTROL_DEFAULT_FLAGS_CENTERED, UI_WIN_CLOSE_BUTTON | UI_WIN_USE_DEFAULT_BUTTONS_ACTIONS | UI_WIN_SHARE_ALPHA_WITH_CHILDS | UI_WIN_MODAL, Sizei( 320, 380 ) ); + mUIWindow = UIWindow::New(); + mUIWindow->setSizeWithDecoration( 320, 380 ) + ->setWinFlags( UI_WIN_CLOSE_BUTTON | UI_WIN_USE_DEFAULT_BUTTONS_ACTIONS | UI_WIN_SHARE_ALPHA_WITH_CHILDS | UI_WIN_MODAL ) + ->setMinWindowSize( 320, 380 ); + mUIWindow->addEventListener( UIEvent::EventOnWindowClose, cb::Make1( this, &UIMapNew::onWindowClose ) ); if ( !mResizeMap ) { diff --git a/src/eepp/ui/tools/textureatlaseditor.cpp b/src/eepp/ui/tools/textureatlaseditor.cpp index e550438c3..33ca53470 100644 --- a/src/eepp/ui/tools/textureatlaseditor.cpp +++ b/src/eepp/ui/tools/textureatlaseditor.cpp @@ -48,11 +48,12 @@ TextureAtlasEditor::TextureAtlasEditor( UIWindow * AttatchTo, const TGEditorClos InitY +=30; - mSpinOffX = eeNew( UISpinBox, () ); + mSpinOffX = UISpinBox::New(); mSpinOffX->setParent( mUIContainer )->setSize( 100, 0 )->setVisible( true )->setEnabled( true ); mSpinOffX->setMinValue( -32000 ); mSpinOffX->setMaxValue( 32000 ); mSpinOffX->setPosition( mUIContainer->getSize().getWidth() - mSpinOffX->getSize().getWidth() - 10, InitY ); + mSpinOffX->setAnchors( UI_ANCHOR_TOP | UI_ANCHOR_RIGHT ); mSpinOffX->addEventListener( UIEvent::EventOnValueChange, cb::Make1( this, &TextureAtlasEditor::onOffXChange ) ); TxtBox = createTextBox( Vector2i(), "Offset X:" ); @@ -60,31 +61,34 @@ TextureAtlasEditor::TextureAtlasEditor( UIWindow * AttatchTo, const TGEditorClos InitY +=30; - mSpinOffY = eeNew( UISpinBox, () ); + mSpinOffY = UISpinBox::New(); mSpinOffY->setParent( mUIContainer )->setSize( 100, 0 )->setVisible( true )->setEnabled( true ); mSpinOffY->setMinValue( -32000 ); mSpinOffY->setMaxValue( 32000 ); mSpinOffY->setPosition( mUIContainer->getSize().getWidth() - mSpinOffY->getSize().getWidth() - 10, InitY ); + mSpinOffY->setAnchors( UI_ANCHOR_TOP | UI_ANCHOR_RIGHT ); mSpinOffY->addEventListener( UIEvent::EventOnValueChange, cb::Make1( this, &TextureAtlasEditor::onOffYChange ) ); TxtBox = createTextBox( Vector2i(), "Offset Y:" ); TxtBox->setPosition( mSpinOffY->getPosition().x - 10 - TxtBox->getSize().getWidth(), InitY ); InitY +=30; - mSpinDestW = eeNew( UISpinBox, () ); + mSpinDestW = UISpinBox::New(); mSpinDestW->setParent( mUIContainer )->setSize( 100, 0 )->setVisible( true )->setEnabled( true ); mSpinDestW->setMaxValue( 32000 ); mSpinDestW->setPosition( mUIContainer->getSize().getWidth() - mSpinDestW->getSize().getWidth() - 10, InitY ); + mSpinDestW->setAnchors( UI_ANCHOR_TOP | UI_ANCHOR_RIGHT ); mSpinDestW->addEventListener( UIEvent::EventOnValueChange, cb::Make1( this, &TextureAtlasEditor::onDestWChange ) ); TxtBox = createTextBox( Vector2i(), "Dest. Width:" ); TxtBox->setPosition( mSpinDestW->getPosition().x - 10 - TxtBox->getSize().getWidth(), InitY ); InitY +=30; - mSpinDestH = eeNew( UISpinBox, () ); + mSpinDestH = UISpinBox::New(); mSpinDestH->setParent( mUIContainer )->setSize( 100, 0 )->setVisible( true )->setEnabled( true ); mSpinDestH->setMaxValue( 32000 ); mSpinDestH->setPosition( mUIContainer->getSize().getWidth() - mSpinDestH->getSize().getWidth() - 10, InitY ); + mSpinDestH->setAnchors( UI_ANCHOR_TOP | UI_ANCHOR_RIGHT ); mSpinDestH->addEventListener( UIEvent::EventOnValueChange, cb::Make1( this, &TextureAtlasEditor::onDestHChange ) ); TxtBox = createTextBox( Vector2i(), "Dest. Height:" ); TxtBox->setPosition( mSpinDestH->getPosition().x - 10 - TxtBox->getSize().getWidth(), InitY ); diff --git a/src/eepp/ui/tools/textureatlasnew.cpp b/src/eepp/ui/tools/textureatlasnew.cpp index 2d022e7de..f21cb4476 100644 --- a/src/eepp/ui/tools/textureatlasnew.cpp +++ b/src/eepp/ui/tools/textureatlasnew.cpp @@ -16,7 +16,9 @@ TextureAtlasNew::TextureAtlasNew( TGCreateCb NewTGCb ) : if ( NULL == mTheme ) return; - mUIWindow = mTheme->createWindow( NULL, Sizei( 378, 244 ), Vector2i(), UI_CONTROL_DEFAULT_FLAGS_CENTERED, UI_WIN_DEFAULT_FLAGS | UI_WIN_MODAL ); + mUIWindow = UIWindow::New(); + mUIWindow->setSizeWithDecoration( 378, 244 )->setWinFlags( UI_WIN_DEFAULT_FLAGS | UI_WIN_MODAL )->setMinWindowSize( 378, 244 ); + mUIWindow->addEventListener( UIEvent::EventOnWindowClose, cb::Make1( this, &TextureAtlasNew::windowClose ) ); mUIWindow->setTitle( "New Texture Atlas" ); @@ -67,7 +69,7 @@ TextureAtlasNew::TextureAtlasNew( TGCreateCb NewTGCb ) : mComboHeight->getListBox()->setSelected( "512" ); createTxtBox( Vector2i( 10, 110 ), "Space between sub textures (pixels):" ); - mPixelSpace = eeNew( UISpinBox, () ); + mPixelSpace = UISpinBox::New(); mPixelSpace->setParent( mUIWindow->getContainer() )->setSize( 100, 0 )->setPosition( PosX, 110 )->setVisible( true )->setEnabled( true ); createTxtBox( Vector2i( 10, 140 ), "Texture Atlas Folder Path:" ); diff --git a/src/eepp/ui/uicommondialog.cpp b/src/eepp/ui/uicommondialog.cpp index 7fe392e39..14706ada0 100644 --- a/src/eepp/ui/uicommondialog.cpp +++ b/src/eepp/ui/uicommondialog.cpp @@ -25,11 +25,11 @@ UICommonDialog::UICommonDialog( const UICommonDialog::CreateParams& Params ) : mRealSize.y = PixelDensity::dpToPxI( CDLG_MIN_HEIGHT ); } - if ( mMinWindowSize.getWidth() < CDLG_MIN_WIDTH ) - mMinWindowSize.setWidth( CDLG_MIN_WIDTH ); + if ( mStyleConfig.minWindowSize.getWidth() < CDLG_MIN_WIDTH ) + mStyleConfig.minWindowSize.setWidth( CDLG_MIN_WIDTH ); - if ( mMinWindowSize.getHeight() < CDLG_MIN_HEIGHT ) - mMinWindowSize.setHeight( CDLG_MIN_HEIGHT ); + if ( mStyleConfig.minWindowSize.getHeight() < CDLG_MIN_HEIGHT ) + mStyleConfig.minWindowSize.setHeight( CDLG_MIN_HEIGHT ); mContainer->setSize( mSize ); diff --git a/src/eepp/ui/uicomplexcontrol.cpp b/src/eepp/ui/uicomplexcontrol.cpp index 99931d80f..9b166b428 100644 --- a/src/eepp/ui/uicomplexcontrol.cpp +++ b/src/eepp/ui/uicomplexcontrol.cpp @@ -3,6 +3,10 @@ namespace EE { namespace UI { +UIComplexControl * UIComplexControl::New() { + return eeNew( UIComplexControl, () ); +} + UIComplexControl::UIComplexControl( const UIComplexControl::CreateParams& Params ) : UIControlAnim( Params ), mTooltip( NULL ), diff --git a/src/eepp/ui/uicontrol.cpp b/src/eepp/ui/uicontrol.cpp index 8de7c5559..290a216bc 100644 --- a/src/eepp/ui/uicontrol.cpp +++ b/src/eepp/ui/uicontrol.cpp @@ -9,6 +9,10 @@ namespace EE { namespace UI { +UIControl *UIControl::New() { + return eeNew( UIControl, () ); +} + UIControl::UIControl( const CreateParams& Params ) : mPos( Params.Pos ), mRealPos( Params.Pos.x * PixelDensity::getPixelDensity(), Params.Pos.y * PixelDensity::getPixelDensity() ), @@ -562,22 +566,24 @@ Uint32 UIControl::getHorizontalAlign() const { return mFlags & UI_HALIGN_MASK; } -void UIControl::setHorizontalAlign( Uint32 halign ) { +UIControl * UIControl::setHorizontalAlign( Uint32 halign ) { mFlags &= ~UI_HALIGN_MASK; mFlags |= halign & UI_HALIGN_MASK; onAlignChange(); + return this; } Uint32 UIControl::getVerticalAlign() const { return mFlags & UI_VALIGN_MASK; } -void UIControl::setVerticalAlign( Uint32 valign ) { +UIControl * UIControl::setVerticalAlign( Uint32 valign ) { mFlags &= ~UI_VALIGN_MASK; mFlags |= valign & UI_VALIGN_MASK; onAlignChange(); + return this; } UIBackground * UIControl::setBackgroundFillEnabled( bool enabled ) { @@ -658,8 +664,8 @@ UIControl * UIControl::unsetFlags(const Uint32 & flags) { return this; } -UIControl *UIControl::resetFlags() { - mFlags = 0; +UIControl *UIControl::resetFlags( Uint32 newFlags ) { + mFlags = newFlags; return this; } diff --git a/src/eepp/ui/uicontrolanim.cpp b/src/eepp/ui/uicontrolanim.cpp index 8d1c94a1d..a5fcd50b5 100644 --- a/src/eepp/ui/uicontrolanim.cpp +++ b/src/eepp/ui/uicontrolanim.cpp @@ -6,6 +6,10 @@ namespace EE { namespace UI { +UIControlAnim *UIControlAnim::New() { + return eeNew( UIControlAnim, () ); +} + UIControlAnim::UIControlAnim( const CreateParams& Params ) : UIDragable( Params ), mAngle(0.f), diff --git a/src/eepp/ui/uidefaulttheme.cpp b/src/eepp/ui/uidefaulttheme.cpp index dac4025e1..6455f442c 100644 --- a/src/eepp/ui/uidefaulttheme.cpp +++ b/src/eepp/ui/uidefaulttheme.cpp @@ -21,7 +21,6 @@ UIDefaultTheme::UIDefaultTheme( const std::string& name, const std::string& Abbr setMenuFontColorOver( ColorA( 255, 255, 255, 255 ) ); setTooltipFontColor( ColorA( 0, 0, 0, 255 ) ); setTooltipPadding( Recti( 4, 6, 4, 6) ); - setTabSeparation( -1 ); } TabWidgetStyleConfig UIDefaultTheme::getTabWidgetStyleConfig() { @@ -49,6 +48,14 @@ WinMenuStyleConfig UIDefaultTheme::getWinMenuStyleConfig() { return winMenuStyleConfig; } +WindowStyleConfig UIDefaultTheme::getWindowStyleConfig() { + WindowStyleConfig windowStyleConfig = UITheme::getWindowStyleConfig(); + windowStyleConfig.winFlags |= UI_WIN_DRAW_SHADOW; + windowStyleConfig.buttonsPositionFixer.x = -2; + windowStyleConfig.titleFontColor = ColorA( 230, 230, 230, 255 ); + return windowStyleConfig; +} + UIPopUpMenu * UIDefaultTheme::createPopUpMenu( UIControl * Parent, const Sizei& Size, const Vector2i& Pos, const Uint32& Flags, Recti PaddingContainer, Uint32 MinWidth, Uint32 MinSpaceForIcons, Uint32 MinRightMargin ) { UIPopUpMenu::CreateParams MenuParams; MenuParams.setParent( Parent ); @@ -70,44 +77,24 @@ UIPopUpMenu * UIDefaultTheme::createPopUpMenu( UIControl * Parent, const Sizei& return eeNew( UIPopUpMenu, ( MenuParams ) ); } -UIWindow * UIDefaultTheme::createWindow( UIControl * Parent, const Sizei& Size, const Vector2i& Pos, const Uint32& Flags, Uint32 WinFlags, Sizei MinWindowSize, Uint8 BaseAlpha ) { - UIWindow::CreateParams WinParams; - WinParams.setParent( Parent ); - WinParams.setPosition( Pos ); - WinParams.setSize( Size ); - WinParams.Flags = Flags; - WinParams.WinFlags = WinFlags; - WinParams.MinWindowSize = MinWindowSize; - WinParams.BaseAlpha = BaseAlpha; - - if ( getUseDefaultThemeValues() ) { - WinParams.Flags |= UI_DRAW_SHADOW; - WinParams.WinFlags |= UI_WIN_DRAW_SHADOW; - WinParams.ButtonsPositionFixer.x = -2; - WinParams.TitleFontColor = ColorA( 230, 230, 230, 255 ); - } - - return eeNew( UIWindow, ( WinParams ) ); -} - UICommonDialog * UIDefaultTheme::createCommonDialog( UIControl * Parent, const Sizei& Size, const Vector2i& Pos, const Uint32& Flags, Uint32 WinFlags, Sizei MinWindowSize, Uint8 BaseAlpha, Uint32 CDLFlags, std::string DefaultFilePattern, std::string DefaultDirectory ) { UICommonDialog::CreateParams DLGParams; DLGParams.setParent( Parent ); DLGParams.setPosition( Pos ); DLGParams.setSize( Size ); DLGParams.Flags = Flags; - DLGParams.WinFlags = WinFlags; - DLGParams.MinWindowSize = MinWindowSize; - DLGParams.BaseAlpha = BaseAlpha; + DLGParams.windowStyleConfig.winFlags = WinFlags; + DLGParams.windowStyleConfig.minWindowSize = MinWindowSize; + DLGParams.windowStyleConfig.baseAlpha = BaseAlpha; DLGParams.DefaultDirectory = DefaultDirectory; DLGParams.DefaultFilePattern = DefaultFilePattern; DLGParams.CDLFlags = CDLFlags; if ( getUseDefaultThemeValues() ) { DLGParams.Flags |= UI_DRAW_SHADOW; - DLGParams.WinFlags |= UI_WIN_DRAW_SHADOW; - DLGParams.ButtonsPositionFixer.x = -2; - DLGParams.TitleFontColor = ColorA( 230, 230, 230, 255 ); + DLGParams.windowStyleConfig.winFlags |= UI_WIN_DRAW_SHADOW; + DLGParams.windowStyleConfig.buttonsPositionFixer.x = -2; + DLGParams.windowStyleConfig.titleFontColor = ColorA( 230, 230, 230, 255 ); } return eeNew( UICommonDialog, ( DLGParams ) ); @@ -119,17 +106,17 @@ UIMessageBox * UIDefaultTheme::createMessageBox( UI_MSGBOX_TYPE Type, const Stri MsgBoxParams.setPosition( Pos ); MsgBoxParams.setSize( Size ); MsgBoxParams.Flags = Flags; - MsgBoxParams.WinFlags = WinFlags; - MsgBoxParams.MinWindowSize = MinWindowSize; - MsgBoxParams.BaseAlpha = BaseAlpha; + MsgBoxParams.windowStyleConfig.winFlags = WinFlags; + MsgBoxParams.windowStyleConfig.minWindowSize = MinWindowSize; + MsgBoxParams.windowStyleConfig.baseAlpha = BaseAlpha; MsgBoxParams.Type = Type; MsgBoxParams.Message = Message; if ( getUseDefaultThemeValues() ) { MsgBoxParams.Flags |= UI_DRAW_SHADOW; - MsgBoxParams.WinFlags |= UI_WIN_DRAW_SHADOW; - MsgBoxParams.ButtonsPositionFixer.x = -2; - MsgBoxParams.TitleFontColor = ColorA( 230, 230, 230, 255 ); + MsgBoxParams.windowStyleConfig.winFlags |= UI_WIN_DRAW_SHADOW; + MsgBoxParams.windowStyleConfig.buttonsPositionFixer.x = -2; + MsgBoxParams.windowStyleConfig.titleFontColor = ColorA( 230, 230, 230, 255 ); } return eeNew( UIMessageBox, ( MsgBoxParams ) ); diff --git a/src/eepp/ui/uidragable.cpp b/src/eepp/ui/uidragable.cpp index 35b50a787..0def9cda8 100644 --- a/src/eepp/ui/uidragable.cpp +++ b/src/eepp/ui/uidragable.cpp @@ -4,6 +4,10 @@ namespace EE { namespace UI { +UIDragable * UIDragable::New() { + return eeNew( UIDragable, () ); +} + UIDragable::UIDragable( const UIControl::CreateParams& Params ) : UIControl( Params ), mDragButton( EE_BUTTON_LMASK ) diff --git a/src/eepp/ui/uigfx.cpp b/src/eepp/ui/uigfx.cpp index 0a17bfee1..7edfee865 100644 --- a/src/eepp/ui/uigfx.cpp +++ b/src/eepp/ui/uigfx.cpp @@ -3,6 +3,10 @@ namespace EE { namespace UI { +UIGfx *UIGfx::New() { + return eeNew( UIGfx, () ); +} + UIGfx::UIGfx( const UIGfx::CreateParams& Params ) : UIComplexControl( Params ), mSubTexture( Params.SubTexture ), @@ -181,6 +185,11 @@ void UIGfx::onSizeChange() { UIControlAnim::onSizeChange(); } +void UIGfx::onAlignChange() { + autoSize(); + autoAlign(); +} + const Vector2i& UIGfx::getAlignOffset() const { return mAlignOffset; } diff --git a/src/eepp/ui/uigridcell.cpp b/src/eepp/ui/uigridcell.cpp index 24034e130..455eda865 100644 --- a/src/eepp/ui/uigridcell.cpp +++ b/src/eepp/ui/uigridcell.cpp @@ -4,6 +4,10 @@ namespace EE { namespace UI { +UIGridCell *UIGridCell::New() { + return eeNew( UIGridCell, () ); +} + UIGridCell::UIGridCell( UIGridCell::CreateParams& Params ) : UIComplexControl( Params ) { diff --git a/src/eepp/ui/uimanager.cpp b/src/eepp/ui/uimanager.cpp index da02bea39..07b7e36e3 100644 --- a/src/eepp/ui/uimanager.cpp +++ b/src/eepp/ui/uimanager.cpp @@ -53,10 +53,10 @@ void UIManager::init( Uint32 Flags, EE::Window::Window * window ) { Params.setPosition( 0, 0 ); Params.setSize( (Float)Engine::instance()->getWidth() / PixelDensity::getPixelDensity(), (Float)Engine::instance()->getHeight() / PixelDensity::getPixelDensity() ); Params.Flags = UI_CONTROL_DEFAULT_FLAGS | UI_REPORT_SIZE_CHANGE_TO_CHILDS; - Params.WinFlags = UI_WIN_NO_BORDER | UI_WIN_RESIZEABLE; - Params.MinWindowSize = Sizei( 0, 0 ); - Params.DecorationSize = Sizei( 0, 0 ); - Params.DecorationAutoSize = false; + Params.windowStyleConfig.winFlags = UI_WIN_NO_BORDER | UI_WIN_RESIZEABLE; + Params.windowStyleConfig.minWindowSize = Sizei( 0, 0 ); + Params.windowStyleConfig.decorationSize = Sizei( 0, 0 ); + Params.windowStyleConfig.decorationAutoSize = false; mControl = eeNew( UIWindow, ( Params ) ); mControl->setVisible( true ); diff --git a/src/eepp/ui/uimessagebox.cpp b/src/eepp/ui/uimessagebox.cpp index a8d952e37..a9fa042c3 100644 --- a/src/eepp/ui/uimessagebox.cpp +++ b/src/eepp/ui/uimessagebox.cpp @@ -145,7 +145,7 @@ UIPushButton * UIMessageBox::getButtonCancel() const { } void UIMessageBox::autoSize() { - Sizei nSize( mTextBox->getTextWidth() + 48, mTextBox->getTextHeight() + mButtonOK->getSize().getHeight() + mDecoSize.getHeight() + 8 ); + Sizei nSize( mTextBox->getTextWidth() + 48, mTextBox->getTextHeight() + mButtonOK->getSize().getHeight() + mStyleConfig.decorationSize.getHeight() + 8 ); if ( !( nSize.getWidth() > getContainer()->getSize().getWidth() ) ) { nSize.x = getContainer()->getSize().getWidth(); @@ -158,7 +158,7 @@ void UIMessageBox::autoSize() { if ( nSize.x != getContainer()->getSize().getWidth() || nSize.y != getContainer()->getSize().getHeight() ) { setSize( nSize ); - mMinWindowSize = nSize; + mStyleConfig.minWindowSize = nSize; } } diff --git a/src/eepp/ui/uispinbox.cpp b/src/eepp/ui/uispinbox.cpp index e9e2d561b..af49eb475 100644 --- a/src/eepp/ui/uispinbox.cpp +++ b/src/eepp/ui/uispinbox.cpp @@ -3,6 +3,10 @@ namespace EE { namespace UI { +UISpinBox * UISpinBox::New() { + return eeNew( UISpinBox, () ); +} + UISpinBox::UISpinBox( const UISpinBox::CreateParams& Params ) : UIComplexControl( Params ), mMinValue( 0.f ), diff --git a/src/eepp/ui/uisprite.cpp b/src/eepp/ui/uisprite.cpp index 92833d91a..86a5be430 100644 --- a/src/eepp/ui/uisprite.cpp +++ b/src/eepp/ui/uisprite.cpp @@ -3,6 +3,10 @@ namespace EE { namespace UI { +UISprite * UISprite::New() { + return eeNew( UISprite, () ); +} + UISprite::UISprite( const UISprite::CreateParams& Params ) : UIComplexControl( Params ), mSprite( Params.Sprite ), diff --git a/src/eepp/ui/uitextbox.cpp b/src/eepp/ui/uitextbox.cpp index 01e9e418c..7f43fa59f 100644 --- a/src/eepp/ui/uitextbox.cpp +++ b/src/eepp/ui/uitextbox.cpp @@ -169,11 +169,12 @@ void UITextBox::shrinkText( const Uint32& MaxWidth ) { } mTextCache->getFont()->shrinkText( mTextCache->getText(), MaxWidth ); + mTextCache->cacheWidth(); } void UITextBox::autoSize() { if ( ( mFlags & UI_AUTO_SIZE ) ) { - setPixelsSize( Sizei( (int)mTextCache->getTextWidth(), (int)mTextCache->getTextHeight() ) ); + setInternalPixelsSize( Sizei( (int)mTextCache->getTextWidth(), (int)mTextCache->getTextHeight() ) ); } } diff --git a/src/eepp/ui/uitextedit.cpp b/src/eepp/ui/uitextedit.cpp index c45b20d3b..84181509f 100644 --- a/src/eepp/ui/uitextedit.cpp +++ b/src/eepp/ui/uitextedit.cpp @@ -5,6 +5,10 @@ namespace EE { namespace UI { +UITextEdit *UITextEdit::New() { + return eeNew( UITextEdit, () ); +} + UITextEdit::UITextEdit( UITextEdit::CreateParams& Params ) : UIComplexControl( Params ), mTextInput( NULL ), diff --git a/src/eepp/ui/uitextinput.cpp b/src/eepp/ui/uitextinput.cpp index baf94e386..7c58ab97a 100644 --- a/src/eepp/ui/uitextinput.cpp +++ b/src/eepp/ui/uitextinput.cpp @@ -34,7 +34,7 @@ UITextInput::UITextInput() : mAllowEditing( true ), mShowingWait( true ) { - setFlags( UI_CLIP_ENABLE | UI_AUTO_PADDING | UI_AUTO_SIZE | UI_TEXT_SELECTION_ENABLED ); + resetFlags( UI_HALIGN_LEFT | UI_VALIGN_TOP | UI_CLIP_ENABLE | UI_AUTO_PADDING | UI_AUTO_SIZE | UI_TEXT_SELECTION_ENABLED ); mTextBuffer.start(); mTextBuffer.setActive( false ); diff --git a/src/eepp/ui/uitextinputpassword.cpp b/src/eepp/ui/uitextinputpassword.cpp index ce5b27e62..236499190 100644 --- a/src/eepp/ui/uitextinputpassword.cpp +++ b/src/eepp/ui/uitextinputpassword.cpp @@ -6,15 +6,6 @@ namespace EE { namespace UI { -UITextInputPassword::UITextInputPassword( const UITextInput::CreateParams& Params ) : - UITextInput( Params ) -{ - mPassCache = eeNew( TextCache, () ); - setFontStyleConfig( mFontStyleConfig ); - - autoAlign(); -} - UITextInputPassword::UITextInputPassword() : UITextInput() { @@ -24,6 +15,10 @@ UITextInputPassword::UITextInputPassword() : autoAlign(); } +UITextInputPassword::~UITextInputPassword() { + eeSAFE_DELETE( mPassCache ); +} + void UITextInputPassword::draw() { if ( mVisible && 0.f != mAlpha ) { UIControlAnim::draw(); diff --git a/src/eepp/ui/uitheme.cpp b/src/eepp/ui/uitheme.cpp index 006456151..6c49110d1 100644 --- a/src/eepp/ui/uitheme.cpp +++ b/src/eepp/ui/uitheme.cpp @@ -388,36 +388,6 @@ SubTexture * UITheme::getIconByName( const std::string& name ) { return NULL; } -UIGfx * UITheme::createGfx( SubTexture * SubTexture, UIControl * Parent, const Sizei& Size, const Vector2i& Pos, const Uint32& Flags, ColorA SubTextureColor, EE_RENDER_MODE SubTextureRender ) { - UIGfx::CreateParams GfxParams; - GfxParams.setParent( Parent ); - GfxParams.setPosition( Pos ); - GfxParams.setSize( Size ); - GfxParams.Flags = Flags; - GfxParams.SubTexture = SubTexture; - GfxParams.SubTextureColor = SubTextureColor; - GfxParams.SubTextureRender = SubTextureRender; - UIGfx * Gfx = eeNew( UIGfx, ( GfxParams ) ); - Gfx->setVisible( true ); - Gfx->setEnabled( true ); - return Gfx; -} - -UISprite * UITheme::createSprite( Sprite * Sprite, UIControl * Parent, const Sizei& Size, const Vector2i& Pos, const Uint32& Flags, bool DealloSprite, EE_RENDER_MODE SpriteRender ) { - UISprite::CreateParams SpriteParams; - SpriteParams.setParent( Parent ); - SpriteParams.setPosition( Pos ); - SpriteParams.setSize( Size ); - SpriteParams.Flags = Flags; - SpriteParams.Sprite = Sprite; - SpriteParams.SpriteRender = SpriteRender; - SpriteParams.DeallocSprite = DealloSprite; - UISprite * Spr = eeNew( UISprite, ( SpriteParams ) ); - Spr->setVisible( true ); - Spr->setEnabled( true ); - return Spr; -} - UICheckBox * UITheme::createCheckBox( UIControl * Parent, const Sizei& Size, const Vector2i& Pos, const Uint32& Flags ) { UICheckBox::CreateParams CheckBoxParams; CheckBoxParams.setParent( Parent ); @@ -430,18 +400,6 @@ UICheckBox * UITheme::createCheckBox( UIControl * Parent, const Sizei& Size, con return Ctrl; } -UIRadioButton * UITheme::createRadioButton( UIControl * Parent, const Sizei& Size, const Vector2i& Pos, const Uint32& Flags ) { - UIRadioButton::CreateParams RadioButtonParams; - RadioButtonParams.setParent( Parent ); - RadioButtonParams.setPosition( Pos ); - RadioButtonParams.setSize( Size ); - RadioButtonParams.Flags = Flags; - UIRadioButton * Ctrl = eeNew( UIRadioButton, ( RadioButtonParams ) ); - Ctrl->setVisible( true ); - Ctrl->setEnabled( true ); - return Ctrl; -} - UITextBox * UITheme::createTextBox( const String& Text, UIControl * Parent, const Sizei& Size, const Vector2i& Pos, const Uint32& Flags ) { UITextBox::CreateParams TextBoxParams; TextBoxParams.setParent( Parent ); @@ -455,21 +413,6 @@ UITextBox * UITheme::createTextBox( const String& Text, UIControl * Parent, cons return Ctrl; } -UITextEdit * UITheme::createTextEdit( UIControl * Parent, const Sizei& Size, const Vector2i& Pos, const Uint32& Flags, UI_SCROLLBAR_MODE HScrollBar, UI_SCROLLBAR_MODE VScrollBar, bool WordWrap ) { - UITextEdit::CreateParams TextEditParams; - TextEditParams.setParent( Parent ); - TextEditParams.setPosition( Pos ); - TextEditParams.setSize( Size ); - TextEditParams.Flags = Flags; - TextEditParams.HScrollBar = HScrollBar; - TextEditParams.VScrollBar = VScrollBar; - TextEditParams.WordWrap = WordWrap; - UITextEdit * Ctrl = eeNew( UITextEdit, ( TextEditParams ) ); - Ctrl->setVisible( true ); - Ctrl->setEnabled( true ); - return Ctrl; -} - UITextInput * UITheme::createTextInput( UIControl * Parent, const Sizei& Size, const Vector2i& Pos, const Uint32& Flags, bool SupportFreeEditing, Uint32 MaxLength ) { UITextInput::CreateParams TextInputParams; TextInputParams.setParent( Parent ); @@ -484,20 +427,6 @@ UITextInput * UITheme::createTextInput( UIControl * Parent, const Sizei& Size, c return Ctrl; } -UITextInputPassword * UITheme::createTextInputPassword( UIControl * Parent, const Sizei& Size, const Vector2i& Pos, const Uint32& Flags, bool SupportFreeEditing, Uint32 MaxLength ) { - UITextInput::CreateParams TextInputParams; - TextInputParams.setParent( Parent ); - TextInputParams.setPosition( Pos ); - TextInputParams.setSize( Size ); - TextInputParams.Flags = Flags; - TextInputParams.SupportFreeEditing = SupportFreeEditing; - TextInputParams.MaxLength = MaxLength; - UITextInputPassword * Ctrl = eeNew( UITextInputPassword, ( TextInputParams ) ); - Ctrl->setVisible( true ); - Ctrl->setEnabled( true ); - return Ctrl; -} - UISpinBox * UITheme::createSpinBox( UIControl * Parent, const Sizei& Size, const Vector2i& Pos, const Uint32& Flags, Float DefaultValue, bool AllowDotsInNumbers ) { UISpinBox::CreateParams SpinBoxParams; SpinBoxParams.setParent( Parent ); @@ -557,23 +486,6 @@ UIListBox * UITheme::createListBox( UIControl * Parent, const Sizei& Size, const return Ctrl; } -UIMenu * UITheme::createMenu( UIControl * Parent, const Sizei& Size, const Vector2i& Pos, const Uint32& Flags, Recti PaddingContainer, Uint32 MinWidth, Uint32 MinSpaceForIcons, Uint32 MinRightMargin ) { - UIMenu::CreateParams MenuParams; - MenuParams.setParent( Parent ); - MenuParams.setPosition( Pos ); - MenuParams.setSize( Size ); - MenuParams.Flags = Flags; - MenuParams.PaddingContainer = PaddingContainer; - MenuParams.MinWidth = MinWidth; - MenuParams.MinSpaceForIcons = MinSpaceForIcons; - MenuParams.MinRightMargin = MinRightMargin; - - UIMenu * Ctrl = eeNew( UIMenu, ( MenuParams ) ); - Ctrl->setVisible( true ); - Ctrl->setEnabled( true ); - return Ctrl; -} - UIPopUpMenu * UITheme::createPopUpMenu( UIControl * Parent, const Sizei& Size, const Vector2i& Pos, const Uint32& Flags, Recti PaddingContainer, Uint32 MinWidth, Uint32 MinSpaceForIcons, Uint32 MinRightMargin ) { UIPopUpMenu::CreateParams MenuParams; MenuParams.setParent( Parent ); @@ -625,27 +537,15 @@ UISelectButton * UITheme::createSelectButton( UIControl * Parent, const Sizei& S return Ctrl; } -UIWindow * UITheme::createWindow( UIControl * Parent, const Sizei& Size, const Vector2i& Pos, const Uint32& Flags, Uint32 WinFlags, Sizei MinWindowSize, Uint8 BaseAlpha ) { - UIWindow::CreateParams WinParams; - WinParams.setParent( Parent ); - WinParams.setPosition( Pos ); - WinParams.setSize( Size ); - WinParams.Flags = Flags; - WinParams.WinFlags = WinFlags; - WinParams.MinWindowSize = MinWindowSize; - WinParams.BaseAlpha = BaseAlpha; - return eeNew( UIWindow, ( WinParams ) ); -} - UICommonDialog * UITheme::createCommonDialog( UIControl * Parent, const Sizei& Size, const Vector2i& Pos, const Uint32& Flags, Uint32 WinFlags, Sizei MinWindowSize, Uint8 BaseAlpha, Uint32 CDLFlags, std::string DefaultFilePattern, std::string DefaultDirectory ) { UICommonDialog::CreateParams DLGParams; DLGParams.setParent( Parent ); DLGParams.setPosition( Pos ); DLGParams.setSize( Size ); DLGParams.Flags = Flags; - DLGParams.WinFlags = WinFlags; - DLGParams.MinWindowSize = MinWindowSize; - DLGParams.BaseAlpha = BaseAlpha; + DLGParams.windowStyleConfig.winFlags = WinFlags; + DLGParams.windowStyleConfig.minWindowSize = MinWindowSize; + DLGParams.windowStyleConfig.baseAlpha = BaseAlpha; DLGParams.DefaultDirectory = DefaultDirectory; DLGParams.DefaultFilePattern = DefaultFilePattern; DLGParams.CDLFlags = CDLFlags; @@ -658,9 +558,9 @@ UIMessageBox * UITheme::createMessageBox( UI_MSGBOX_TYPE Type, const String& Mes MsgBoxParams.setPosition( Pos ); MsgBoxParams.setSize( Size ); MsgBoxParams.Flags = Flags; - MsgBoxParams.WinFlags = WinFlags; - MsgBoxParams.MinWindowSize = MinWindowSize; - MsgBoxParams.BaseAlpha = BaseAlpha; + MsgBoxParams.windowStyleConfig.winFlags = WinFlags; + MsgBoxParams.windowStyleConfig.minWindowSize = MinWindowSize; + MsgBoxParams.windowStyleConfig.baseAlpha = BaseAlpha; MsgBoxParams.Type = Type; MsgBoxParams.Message = Message; return eeNew( UIMessageBox, ( MsgBoxParams ) ); @@ -698,14 +598,6 @@ void UITheme::setTooltipPadding(const Recti & tooltipPadding) { mTooltipPadding = tooltipPadding; } -Int32 UITheme::getTabSeparation() const { - return mTabSeparation; -} - -void UITheme::setTabSeparation(const Int32 & tabSeparation) { - mTabSeparation = tabSeparation; -} - void UITheme::setFontStyleConfig(const FontStyleConfig & fontConfig) { mFontStyleConfig = fontConfig; } @@ -726,6 +618,10 @@ DropDownListStyleConfig UITheme::getDropDownListStyleConfig() { return DropDownListStyleConfig( getFontStyleConfig() ); } +WindowStyleConfig UITheme::getWindowStyleConfig() { + return WindowStyleConfig( getFontStyleConfig() ); +} + FontStyleConfig UITheme::getFontStyleConfig() const { return mFontStyleConfig; } diff --git a/src/eepp/ui/uiwindow.cpp b/src/eepp/ui/uiwindow.cpp index aa4cc806b..54489467c 100644 --- a/src/eepp/ui/uiwindow.cpp +++ b/src/eepp/ui/uiwindow.cpp @@ -4,52 +4,13 @@ namespace EE { namespace UI { -UIWindow::UIWindow( const UIWindow::CreateParams& Params ) : - UIComplexControl( Params ), - mWinFlags( Params.WinFlags ), - mWindowDecoration( NULL ), - mBorderLeft( NULL ), - mBorderRight( NULL ), - mBorderBottom( NULL ), - mButtonClose( NULL ), - mButtonMinimize( NULL ), - mButtonMaximize( NULL ), - mTitle( NULL ), - mModalCtrl( NULL ), - mDecoSize( Params.DecorationSize ), - mBorderSize( Params.BorderSize ), - mMinWindowSize( Params.MinWindowSize ), - mButtonsPositionFixer( Params.ButtonsPositionFixer ), - mButtonsSeparation( Params.ButtonsSeparation ), - mMinCornerDistance( Params.MinCornerDistance ), - mResizeType( RESIZE_NONE ), - mTitleFontColor( Params.TitleFontColor ), - mBaseAlpha( Params.BaseAlpha ), - mDecoAutoSize( Params.DecorationAutoSize ), - mBorderAutoSize( Params.BorderAutoSize ) -{ - UIManager::instance()->windowAdd( this ); - - UIComplexControl::CreateParams tcParams; - tcParams.setParent( this ); - tcParams.Flags |= UI_REPORT_SIZE_CHANGE_TO_CHILDS; - - mContainer = eeNew( UIComplexControl, ( tcParams ) ); - mContainer->setEnabled( true ); - mContainer->setVisible( true ); - mContainer->setSize( mSize ); - mContainer->addEventListener( UIEvent::EventOnPosChange, cb::Make1( this, &UIWindow::onContainerPosChange ) ); - - updateWinFlags(); - - setAlpha( mBaseAlpha ); - - applyDefaultTheme(); +UIWindow * UIWindow::New() { + return eeNew( UIWindow, () ); } -UIWindow::UIWindow() : - UIComplexControl(), - mWinFlags( UI_WIN_DEFAULT_FLAGS ), +UIWindow::UIWindow( const UIWindow::CreateParams& Params ) : + UIComplexControl( Params ), + mStyleConfig( Params.windowStyleConfig ), mWindowDecoration( NULL ), mBorderLeft( NULL ), mBorderRight( NULL ), @@ -59,31 +20,55 @@ UIWindow::UIWindow() : mButtonMaximize( NULL ), mTitle( NULL ), mModalCtrl( NULL ), - mDecoSize(), - mBorderSize(), - mMinWindowSize(), - mButtonsPositionFixer( ), - mButtonsSeparation( 4 ), - mMinCornerDistance( 24 ), - mResizeType( RESIZE_NONE ), - mTitleFontColor( 0xFFFFFFFF ), - mBaseAlpha( 255 ), - mDecoAutoSize( true ), - mBorderAutoSize( true ) + mResizeType( RESIZE_NONE ) { UIManager::instance()->windowAdd( this ); mContainer = eeNew( UIComplexControl, () ); mContainer->setParent( this ); mContainer->setFlags( UI_REPORT_SIZE_CHANGE_TO_CHILDS ); - mContainer->setEnabled( true ); - mContainer->setVisible( true ); mContainer->setSize( mSize ); mContainer->addEventListener( UIEvent::EventOnPosChange, cb::Make1( this, &UIWindow::onContainerPosChange ) ); updateWinFlags(); - setAlpha( mBaseAlpha ); + setAlpha( mStyleConfig.baseAlpha ); + + applyDefaultTheme(); +} + +UIWindow::UIWindow() : + UIComplexControl(), + mWindowDecoration( NULL ), + mBorderLeft( NULL ), + mBorderRight( NULL ), + mBorderBottom( NULL ), + mButtonClose( NULL ), + mButtonMinimize( NULL ), + mButtonMaximize( NULL ), + mTitle( NULL ), + mModalCtrl( NULL ), + mResizeType( RESIZE_NONE ) +{ + setHorizontalAlign( UI_HALIGN_CENTER ); + + UIManager::instance()->windowAdd( this ); + + UITheme * theme = UIThemeManager::instance()->getDefaultTheme(); + + if ( NULL != theme ) { + mStyleConfig = theme->getWindowStyleConfig(); + } + + mContainer = eeNew( UIComplexControl, () ); + mContainer->setParent( this ); + mContainer->setFlags( UI_REPORT_SIZE_CHANGE_TO_CHILDS ); + mContainer->setSize( mSize ); + mContainer->addEventListener( UIEvent::EventOnPosChange, cb::Make1( this, &UIWindow::onContainerPosChange ) ); + + updateWinFlags(); + + setAlpha( mStyleConfig.baseAlpha ); applyDefaultTheme(); } @@ -97,7 +82,7 @@ UIWindow::~UIWindow() { } void UIWindow::updateWinFlags() { - if ( !( mWinFlags & UI_WIN_NO_BORDER ) ) { + if ( !( mStyleConfig.winFlags & UI_WIN_NO_BORDER ) ) { if ( NULL == mWindowDecoration ) mWindowDecoration = eeNew( UIControlAnim, () ); @@ -126,10 +111,10 @@ void UIWindow::updateWinFlags() { mBorderBottom->setEnabled( true ); mBorderBottom->setVisible( true ); - if ( mWinFlags & UI_WIN_DRAGABLE_CONTAINER ) + if ( mStyleConfig.winFlags & UI_WIN_DRAGABLE_CONTAINER ) mContainer->setDragEnabled( true ); - if ( mWinFlags & UI_WIN_CLOSE_BUTTON ) { + if ( mStyleConfig.winFlags & UI_WIN_CLOSE_BUTTON ) { if ( NULL == mButtonClose ) mButtonClose = eeNew( UIComplexControl, () ); @@ -137,12 +122,12 @@ void UIWindow::updateWinFlags() { mButtonClose->setVisible( true ); mButtonClose->setEnabled( true ); - if ( mWinFlags & UI_WIN_USE_DEFAULT_BUTTONS_ACTIONS ) { + if ( mStyleConfig.winFlags & UI_WIN_USE_DEFAULT_BUTTONS_ACTIONS ) { mButtonClose->addEventListener( UIEvent::EventMouseClick, cb::Make1( this, &UIWindow::onButtonCloseClick ) ); } } - if ( ( mWinFlags & UI_WIN_RESIZEABLE ) && ( mWinFlags & UI_WIN_MAXIMIZE_BUTTON ) ) { + if ( ( mStyleConfig.winFlags & UI_WIN_RESIZEABLE ) && ( mStyleConfig.winFlags & UI_WIN_MAXIMIZE_BUTTON ) ) { if ( NULL == mButtonMaximize ) mButtonMaximize = eeNew( UIComplexControl, () ); @@ -150,12 +135,12 @@ void UIWindow::updateWinFlags() { mButtonMaximize->setVisible( true ); mButtonMaximize->setEnabled( true ); - if ( mWinFlags & UI_WIN_USE_DEFAULT_BUTTONS_ACTIONS ) { + if ( mStyleConfig.winFlags & UI_WIN_USE_DEFAULT_BUTTONS_ACTIONS ) { mButtonMaximize->addEventListener( UIEvent::EventMouseClick, cb::Make1( this, &UIWindow::onButtonMaximizeClick ) ); } } - if ( mWinFlags & UI_WIN_MINIMIZE_BUTTON ) { + if ( mStyleConfig.winFlags & UI_WIN_MINIMIZE_BUTTON ) { if ( NULL == mButtonMinimize ) mButtonMinimize = eeNew( UIComplexControl, () ); @@ -163,7 +148,7 @@ void UIWindow::updateWinFlags() { mButtonMinimize->setVisible( true ); mButtonMinimize->setEnabled( true ); - if ( mWinFlags & UI_WIN_USE_DEFAULT_BUTTONS_ACTIONS ) { + if ( mStyleConfig.winFlags & UI_WIN_USE_DEFAULT_BUTTONS_ACTIONS ) { mButtonMinimize->addEventListener( UIEvent::EventMouseClick, cb::Make1( this, &UIWindow::onButtonMinimizeClick ) ); } } @@ -180,10 +165,13 @@ void UIWindow::createModalControl() { UIControl * Ctrl = UIManager::instance()->getMainControl(); if ( NULL == mModalCtrl ) { - mModalCtrl = eeNew( UIControlAnim, ( UIControlAnim::CreateParams( Ctrl , Vector2i(0,0), Ctrl->getSize(), UI_ANCHOR_LEFT | UI_ANCHOR_TOP | UI_ANCHOR_RIGHT | UI_ANCHOR_BOTTOM ) ) ); + mModalCtrl = UIComplexControl::New(); + mModalCtrl->setParent( Ctrl )->setPosition(0,0)->setSize( Ctrl->getSize() ); + mModalCtrl->setAnchors( UI_ANCHOR_LEFT | UI_ANCHOR_TOP | UI_ANCHOR_RIGHT | UI_ANCHOR_BOTTOM ); } else { mModalCtrl->setPosition( 0, 0 ); mModalCtrl->setSize( Ctrl->getSize() ); + mModalCtrl->updateAnchorsDistances(); } mModalCtrl->setEnabled( false ); @@ -298,7 +286,7 @@ void UIWindow::setTheme( UITheme *Theme ) { mContainer->setThemeControl ( Theme, "winback" ); - if ( !( mWinFlags & UI_WIN_NO_BORDER ) ) { + if ( !( mStyleConfig.winFlags & UI_WIN_NO_BORDER ) ) { mWindowDecoration->setThemeControl ( Theme, "windeco" ); mBorderLeft->setThemeControl ( Theme, "winborderleft" ); mBorderRight->setThemeControl ( Theme, "winborderright" ); @@ -319,18 +307,18 @@ void UIWindow::setTheme( UITheme *Theme ) { mButtonMinimize->setSize( mButtonMinimize->getSkinSize() ); } - getMinWinSize(); + calcMinWinSize(); fixChildsSize(); } } -void UIWindow::getMinWinSize() { - if ( NULL == mWindowDecoration || ( mMinWindowSize.x != 0 && mMinWindowSize.y != 0 ) ) +void UIWindow::calcMinWinSize() { + if ( NULL == mWindowDecoration || ( mStyleConfig.minWindowSize.x != 0 && mStyleConfig.minWindowSize.y != 0 ) ) return; Sizei tSize; - tSize.x = mBorderLeft->getSize().getWidth() + mBorderRight->getSize().getWidth() - mButtonsPositionFixer.x; + tSize.x = mBorderLeft->getSize().getWidth() + mBorderRight->getSize().getWidth() - mStyleConfig.buttonsPositionFixer.x; tSize.y = mWindowDecoration->getSize().getHeight() + mBorderBottom->getSize().getHeight(); if ( NULL != mButtonClose ) @@ -342,31 +330,31 @@ void UIWindow::getMinWinSize() { if ( NULL != mButtonMinimize ) tSize.x += mButtonMinimize->getSize().getWidth(); - if ( mMinWindowSize.x < tSize.x ) - mMinWindowSize.x = tSize.x; + if ( mStyleConfig.minWindowSize.x < tSize.x ) + mStyleConfig.minWindowSize.x = tSize.x; - if ( mMinWindowSize.y < tSize.y ) - mMinWindowSize.y = tSize.y; + if ( mStyleConfig.minWindowSize.y < tSize.y ) + mStyleConfig.minWindowSize.y = tSize.y; } void UIWindow::applyMinWinSize() { - if ( mSize.x < mMinWindowSize.x && mSize.y < mMinWindowSize.y ) { - setSize( mMinWindowSize ); - } else if ( mSize.x < mMinWindowSize.x ) { - setSize( Sizei( mMinWindowSize.x, mSize.y ) ); - } else if ( mSize.y < mMinWindowSize.y ) { - setSize( Sizei( mSize.x, mMinWindowSize.y ) ); + if ( mSize.x < mStyleConfig.minWindowSize.x && mSize.y < mStyleConfig.minWindowSize.y ) { + setSize( mStyleConfig.minWindowSize ); + } else if ( mSize.x < mStyleConfig.minWindowSize.x ) { + setSize( Sizei( mStyleConfig.minWindowSize.x, mSize.y ) ); + } else if ( mSize.y < mStyleConfig.minWindowSize.y ) { + setSize( Sizei( mSize.x, mStyleConfig.minWindowSize.y ) ); } } void UIWindow::onSizeChange() { - if ( mSize.x < mMinWindowSize.x || mSize.y < mMinWindowSize.y ) { - if ( mSize.x < mMinWindowSize.x && mSize.y < mMinWindowSize.y ) { - setSize( mMinWindowSize ); - } else if ( mSize.x < mMinWindowSize.x ) { - setSize( Sizei( mMinWindowSize.x, mSize.y ) ); + if ( mSize.x < mStyleConfig.minWindowSize.x || mSize.y < mStyleConfig.minWindowSize.y ) { + if ( mSize.x < mStyleConfig.minWindowSize.x && mSize.y < mStyleConfig.minWindowSize.y ) { + setSize( mStyleConfig.minWindowSize ); + } else if ( mSize.x < mStyleConfig.minWindowSize.x ) { + setSize( Sizei( mStyleConfig.minWindowSize.x, mSize.y ) ); } else { - setSize( Sizei( mSize.x, mMinWindowSize.y ) ); + setSize( Sizei( mSize.x, mStyleConfig.minWindowSize.y ) ); } } else { fixChildsSize(); @@ -395,13 +383,23 @@ UIControl * UIWindow::setSize( const Int32& Width, const Int32& Height ) { return this; } +UIWindow *UIWindow::setSizeWithDecoration(const Int32 & Width, const Int32 & Height) { + setSizeWithDecoration( Sizei( Width, Height ) ); + return this; +} + +UIWindow *UIWindow::setSizeWithDecoration(const Sizei & size) { + UIComplexControl::setSize( size ); + return this; +} + const Sizei& UIWindow::getSize() { return UIComplexControl::getSize(); } void UIWindow::fixChildsSize() { - if ( mSize.getWidth() < mMinWindowSize.getWidth() || mSize.getHeight() < mMinWindowSize.getHeight() ) { - internalSize( eemin( mSize.getWidth(), mMinWindowSize.getWidth() ), eemin( mSize.getHeight(), mMinWindowSize.getHeight() ) ); + if ( mSize.getWidth() < mStyleConfig.minWindowSize.getWidth() || mSize.getHeight() < mStyleConfig.minWindowSize.getHeight() ) { + internalSize( eemin( mSize.getWidth(), mStyleConfig.minWindowSize.getWidth() ), eemin( mSize.getHeight(), mStyleConfig.minWindowSize.getHeight() ) ); } if ( NULL == mWindowDecoration ) { @@ -409,28 +407,28 @@ void UIWindow::fixChildsSize() { return; } - Sizei decoSize = mDecoSize; + Sizei decoSize = mStyleConfig.decorationSize; - if ( mDecoAutoSize ) { - decoSize = mDecoSize = Sizei( mSize.getWidth(), mWindowDecoration->getSkinSize().getHeight() ); + if ( mStyleConfig.decorationAutoSize ) { + decoSize = mStyleConfig.decorationSize = Sizei( mSize.getWidth(), mWindowDecoration->getSkinSize().getHeight() ); } - mWindowDecoration->setSize( mDecoSize ); + mWindowDecoration->setSize( mStyleConfig.decorationSize ); - if ( mBorderAutoSize ) { + if ( mStyleConfig.borderAutoSize ) { mBorderBottom->setSize( Sizei( mSize.getWidth(), mBorderBottom->getSkinSize().getHeight() ) ); } else { - mBorderBottom->setSize( mSize.getWidth(), mBorderSize.getHeight() ); + mBorderBottom->setSize( mSize.getWidth(), mStyleConfig.borderSize.getHeight() ); } Uint32 BorderHeight = mSize.getHeight() - decoSize.getHeight() - mBorderBottom->getSize().getHeight(); - if ( mBorderAutoSize ) { + if ( mStyleConfig.borderAutoSize ) { mBorderLeft->setSize( Sizei( mBorderLeft->getSkinSize().getWidth(), BorderHeight ) ); mBorderRight->setSize( Sizei( mBorderRight->getSkinSize().getWidth(), BorderHeight ) ); } else { - mBorderLeft->setSize( mBorderSize.getWidth(), BorderHeight ); - mBorderRight->setSize( mBorderSize.getWidth(), BorderHeight ); + mBorderLeft->setSize( mStyleConfig.borderSize.getWidth(), BorderHeight ); + mBorderRight->setSize( mStyleConfig.borderSize.getWidth(), BorderHeight ); } mBorderLeft->setPosition( 0, mWindowDecoration->getSize().getHeight() ); @@ -443,31 +441,31 @@ void UIWindow::fixChildsSize() { Uint32 yPos; if ( NULL != mButtonClose ) { - yPos = mWindowDecoration->getSize().getHeight() / 2 - mButtonClose->getSize().getHeight() / 2 + mButtonsPositionFixer.y; + yPos = mWindowDecoration->getSize().getHeight() / 2 - mButtonClose->getSize().getHeight() / 2 + mStyleConfig.buttonsPositionFixer.y; - mButtonClose->setPosition( mWindowDecoration->getSize().getWidth() - mBorderRight->getSize().getWidth() - mButtonClose->getSize().getWidth() + mButtonsPositionFixer.x, yPos ); + mButtonClose->setPosition( mWindowDecoration->getSize().getWidth() - mBorderRight->getSize().getWidth() - mButtonClose->getSize().getWidth() + mStyleConfig.buttonsPositionFixer.x, yPos ); } if ( NULL != mButtonMaximize ) { - yPos = mWindowDecoration->getSize().getHeight() / 2 - mButtonMaximize->getSize().getHeight() / 2 + mButtonsPositionFixer.y; + yPos = mWindowDecoration->getSize().getHeight() / 2 - mButtonMaximize->getSize().getHeight() / 2 + mStyleConfig.buttonsPositionFixer.y; if ( NULL != mButtonClose ) { - mButtonMaximize->setPosition( mButtonClose->getPosition().x - mButtonsSeparation - mButtonMaximize->getSize().getWidth(), yPos ); + mButtonMaximize->setPosition( mButtonClose->getPosition().x - mStyleConfig.buttonsSeparation - mButtonMaximize->getSize().getWidth(), yPos ); } else { - mButtonMaximize->setPosition( mWindowDecoration->getSize().getWidth() - mBorderRight->getSize().getWidth() - mButtonMaximize->getSize().getWidth() + mButtonsPositionFixer.x, yPos ); + mButtonMaximize->setPosition( mWindowDecoration->getSize().getWidth() - mBorderRight->getSize().getWidth() - mButtonMaximize->getSize().getWidth() + mStyleConfig.buttonsPositionFixer.x, yPos ); } } if ( NULL != mButtonMinimize ) { - yPos = mWindowDecoration->getSize().getHeight() / 2 - mButtonMinimize->getSize().getHeight() / 2 + mButtonsPositionFixer.y; + yPos = mWindowDecoration->getSize().getHeight() / 2 - mButtonMinimize->getSize().getHeight() / 2 + mStyleConfig.buttonsPositionFixer.y; if ( NULL != mButtonMaximize ) { - mButtonMinimize->setPosition( mButtonMaximize->getPosition().x - mButtonsSeparation - mButtonMinimize->getSize().getWidth(), yPos ); + mButtonMinimize->setPosition( mButtonMaximize->getPosition().x - mStyleConfig.buttonsSeparation - mButtonMinimize->getSize().getWidth(), yPos ); } else { if ( NULL != mButtonClose ) { - mButtonMinimize->setPosition( mButtonClose->getPosition().x - mButtonsSeparation - mButtonMinimize->getSize().getWidth(), yPos ); + mButtonMinimize->setPosition( mButtonClose->getPosition().x - mStyleConfig.buttonsSeparation - mButtonMinimize->getSize().getWidth(), yPos ); } else { - mButtonMinimize->setPosition( mWindowDecoration->getSize().getWidth() - mBorderRight->getSize().getWidth() - mButtonMinimize->getSize().getWidth() + mButtonsPositionFixer.x, yPos ); + mButtonMinimize->setPosition( mWindowDecoration->getSize().getWidth() - mBorderRight->getSize().getWidth() - mButtonMinimize->getSize().getWidth() + mStyleConfig.buttonsPositionFixer.x, yPos ); } } } @@ -519,7 +517,7 @@ void UIWindow::doResize ( const UIMessage * Msg ) { if ( NULL == mWindowDecoration ) return; - if ( !( mWinFlags & UI_WIN_RESIZEABLE ) || + if ( !( mStyleConfig.winFlags & UI_WIN_RESIZEABLE ) || !( Msg->getFlags() & EE_BUTTON_LMASK ) || RESIZE_NONE != mResizeType || ( UIManager::instance()->getLastPressTrigger() & EE_BUTTON_LMASK ) @@ -540,30 +538,30 @@ void UIWindow::decideResizeType( UIControl * Control ) { } else if ( Pos.x >= ( mSize.getWidth() - mBorderRight->getSize().getWidth() ) ) { tryResize( RESIZE_TOPRIGHT ); } else if ( Pos.y <= mBorderBottom->getSize().getHeight() ) { - if ( Pos.x < mMinCornerDistance ) { + if ( Pos.x < mStyleConfig.minCornerDistance ) { tryResize( RESIZE_TOPLEFT ); - } else if ( Pos.x > mSize.getWidth() - mMinCornerDistance ) { + } else if ( Pos.x > mSize.getWidth() - mStyleConfig.minCornerDistance ) { tryResize( RESIZE_TOPRIGHT ); } else { tryResize( RESIZE_TOP ); } } } else if ( Control == mBorderBottom ) { - if ( Pos.x < mMinCornerDistance ) { + if ( Pos.x < mStyleConfig.minCornerDistance ) { tryResize( RESIZE_LEFTBOTTOM ); - } else if ( Pos.x > mSize.getWidth() - mMinCornerDistance ) { + } else if ( Pos.x > mSize.getWidth() - mStyleConfig.minCornerDistance ) { tryResize( RESIZE_RIGHTBOTTOM ); } else { tryResize( RESIZE_BOTTOM ); } } else if ( Control == mBorderLeft ) { - if ( Pos.y >= mSize.getHeight() - mMinCornerDistance ) { + if ( Pos.y >= mSize.getHeight() - mStyleConfig.minCornerDistance ) { tryResize( RESIZE_LEFTBOTTOM ); } else { tryResize( RESIZE_LEFT ); } } else if ( Control == mBorderRight ) { - if ( Pos.y >= mSize.getHeight() - mMinCornerDistance ) { + if ( Pos.y >= mSize.getHeight() - mStyleConfig.minCornerDistance ) { tryResize( RESIZE_RIGHTBOTTOM ); } else { tryResize( RESIZE_RIGHT ); @@ -722,7 +720,7 @@ void UIWindow::internalSize( const Int32& w, const Int32& h ) { } void UIWindow::internalSize( Sizei Size ) { - Sizei realMin = PixelDensity::dpToPxI( mMinWindowSize ); + Sizei realMin = PixelDensity::dpToPxI( mStyleConfig.minWindowSize ); Size.x = eemax( realMin.x, Size.x ); Size.y = eemax( realMin.y, Size.y ); @@ -736,7 +734,7 @@ void UIWindow::internalSize( Sizei Size ) { void UIWindow::draw() { UIComplexControl::draw(); - if ( mWinFlags & UI_WIN_DRAW_SHADOW ) { + if ( mStyleConfig.winFlags & UI_WIN_DRAW_SHADOW ) { Primitives P; P.setForceDraw( false ); @@ -799,7 +797,7 @@ bool UIWindow::show() { setFocus(); - startAlphaAnim( mBaseAlpha == getAlpha() ? 0.f : mAlpha, mBaseAlpha, UIThemeManager::instance()->getControlsFadeInTime() ); + startAlphaAnim( mStyleConfig.baseAlpha == getAlpha() ? 0.f : mAlpha, mStyleConfig.baseAlpha, UIThemeManager::instance()->getControlsFadeInTime() ); if ( isModal() ) { createModalControl(); @@ -840,7 +838,7 @@ bool UIWindow::hide() { } void UIWindow::onAlphaChange() { - if ( mWinFlags & UI_WIN_SHARE_ALPHA_WITH_CHILDS ) { + if ( mStyleConfig.winFlags & UI_WIN_SHARE_ALPHA_WITH_CHILDS ) { UIControlAnim * AnimChild; UIControl * CurChild = mChild; @@ -858,38 +856,35 @@ void UIWindow::onAlphaChange() { } void UIWindow::setBaseAlpha( const Uint8& Alpha ) { - if ( mAlpha == mBaseAlpha ) { + if ( mAlpha == mStyleConfig.baseAlpha ) { UIControlAnim::setAlpha( Alpha ); } - mBaseAlpha = Alpha; + mStyleConfig.baseAlpha = Alpha; } const Uint8& UIWindow::getBaseAlpha() const { - return mBaseAlpha; + return mStyleConfig.baseAlpha; } void UIWindow::setTitle( const String& Text ) { if ( NULL == mTitle ) { - UITextBox::CreateParams Params; - Params.setParent( this ); - Params.Flags = UI_CLIP_ENABLE | UI_VALIGN_CENTER; - Params.fontStyleConfig.fontColor = mTitleFontColor; - - if ( mFlags & UI_HALIGN_CENTER ) - Params.Flags |= UI_HALIGN_CENTER; + mTitle = eeNew( UITextBox, () ); + mTitle->setParent( this ); + mTitle->setHorizontalAlign( getHorizontalAlign() ); + mTitle->setVerticalAlign( getVerticalAlign() ); + mTitle->setFontColor( mStyleConfig.titleFontColor ); if ( mFlags & UI_DRAW_SHADOW ) - Params.Flags |= UI_DRAW_SHADOW; + mTitle->setFlags( UI_DRAW_SHADOW ); - mTitle = eeNew( UITextBox, ( Params ) ); mTitle->setEnabled( false ); mTitle->setVisible( true ); } - mTitle->setText( Text ); - fixTitleSize(); + + mTitle->setText( Text ); } void UIWindow::fixTitleSize() { @@ -926,7 +921,7 @@ void UIWindow::maximize() { } Uint32 UIWindow::onMouseDoubleClick( const Vector2i &Pos, const Uint32 Flags ) { - if ( ( mWinFlags & UI_WIN_RESIZEABLE ) && ( NULL != mButtonMaximize ) && ( Flags & EE_BUTTON_LMASK ) ) { + if ( ( mStyleConfig.winFlags & UI_WIN_RESIZEABLE ) && ( NULL != mButtonMaximize ) && ( Flags & EE_BUTTON_LMASK ) ) { onButtonMaximizeClick( NULL ); } @@ -982,23 +977,57 @@ bool UIWindow::removeShortcut( const Uint32& KeyCode, const Uint32& Mod ) { } bool UIWindow::isMaximizable() { - return 0 != ( ( mWinFlags & UI_WIN_RESIZEABLE ) && ( mWinFlags & UI_WIN_MAXIMIZE_BUTTON ) ); + return 0 != ( ( mStyleConfig.winFlags & UI_WIN_RESIZEABLE ) && ( mStyleConfig.winFlags & UI_WIN_MAXIMIZE_BUTTON ) ); } Uint32 UIWindow::getWinFlags() const { - return mWinFlags; + return mStyleConfig.winFlags; } UIWindow * UIWindow::setWinFlags(const Uint32 & winFlags) { - mWinFlags = winFlags; + mStyleConfig.winFlags = winFlags; updateWinFlags(); return this; } +WindowStyleConfig UIWindow::getStyleConfig() const { + return mStyleConfig; +} + +UIWindow * UIWindow::setStyleConfig(const WindowStyleConfig & styleConfig) { + mStyleConfig = styleConfig; + + updateWinFlags(); + + setAlpha( mStyleConfig.baseAlpha ); + + applyDefaultTheme(); + + applyMinWinSize(); + + return this; +} + +UIWindow * UIWindow::setMinWindowSize( const Int32& width, const Int32& height ) { + return setMinWindowSize( Sizei( width, height ) ); +} + +UIWindow * UIWindow::setMinWindowSize( Sizei size ) { + mStyleConfig.minWindowSize = size; + + applyMinWinSize(); + + return this; +} + +const Sizei& UIWindow::getMinWindowSize() { + return mStyleConfig.minWindowSize; +} + bool UIWindow::isModal() { - return 0 != ( mWinFlags & UI_WIN_MODAL ); + return 0 != ( mStyleConfig.winFlags & UI_WIN_MODAL ); } UIControlAnim * UIWindow::getModalControl() const { @@ -1008,7 +1037,7 @@ UIControlAnim * UIWindow::getModalControl() const { void UIWindow::resizeCursor() { UIManager * Man = UIManager::instance(); - if ( !isMouseOverMeOrChilds() || !Man->getUseGlobalCursors() || ( mWinFlags & UI_WIN_NO_BORDER ) || !( mWinFlags & UI_WIN_RESIZEABLE ) ) + if ( !isMouseOverMeOrChilds() || !Man->getUseGlobalCursors() || ( mStyleConfig.winFlags & UI_WIN_NO_BORDER ) || !( mStyleConfig.winFlags & UI_WIN_RESIZEABLE ) ) return; Vector2i Pos = Man->getMousePos(); @@ -1023,9 +1052,9 @@ void UIWindow::resizeCursor() { } else if ( Pos.x >= ( mSize.getWidth() - mBorderRight->getSize().getWidth() ) ) { Man->setCursor( EE_CURSOR_SIZENESW ); // RESIZE_TOPRIGHT } else if ( Pos.y <= mBorderBottom->getSize().getHeight() ) { - if ( Pos.x < mMinCornerDistance ) { + if ( Pos.x < mStyleConfig.minCornerDistance ) { Man->setCursor( EE_CURSOR_SIZENWSE ); // RESIZE_TOPLEFT - } else if ( Pos.x > mSize.getWidth() - mMinCornerDistance ) { + } else if ( Pos.x > mSize.getWidth() - mStyleConfig.minCornerDistance ) { Man->setCursor( EE_CURSOR_SIZENESW ); // RESIZE_TOPRIGHT } else { Man->setCursor( EE_CURSOR_SIZENS ); // RESIZE_TOP @@ -1034,21 +1063,21 @@ void UIWindow::resizeCursor() { Man->setCursor( EE_CURSOR_ARROW ); } } else if ( Control == mBorderBottom ) { - if ( Pos.x < mMinCornerDistance ) { + if ( Pos.x < mStyleConfig.minCornerDistance ) { Man->setCursor( EE_CURSOR_SIZENESW ); // RESIZE_LEFTBOTTOM - } else if ( Pos.x > mSize.getWidth() - mMinCornerDistance ) { + } else if ( Pos.x > mSize.getWidth() - mStyleConfig.minCornerDistance ) { Man->setCursor( EE_CURSOR_SIZENWSE ); // RESIZE_RIGHTBOTTOM } else { Man->setCursor( EE_CURSOR_SIZENS ); // RESIZE_BOTTOM } } else if ( Control == mBorderLeft ) { - if ( Pos.y >= mSize.getHeight() - mMinCornerDistance ) { + if ( Pos.y >= mSize.getHeight() - mStyleConfig.minCornerDistance ) { Man->setCursor( EE_CURSOR_SIZENESW ); // RESIZE_LEFTBOTTOM } else { Man->setCursor( EE_CURSOR_SIZEWE ); // RESIZE_LEFT } } else if ( Control == mBorderRight ) { - if ( Pos.y >= mSize.getHeight() - mMinCornerDistance ) { + if ( Pos.y >= mSize.getHeight() - mStyleConfig.minCornerDistance ) { Man->setCursor( EE_CURSOR_SIZENWSE ); // RESIZE_RIGHTBOTTOM } else { Man->setCursor( EE_CURSOR_SIZEWE ); // RESIZE_RIGHT diff --git a/src/test/eetest.cpp b/src/test/eetest.cpp index a9fe8ebfc..71db4dc1c 100644 --- a/src/test/eetest.cpp +++ b/src/test/eetest.cpp @@ -277,7 +277,7 @@ void EETest::createUI() { eePRINTL( "Texture Atlas Loading Time: %4.3f ms.", TE.getElapsed().asMilliseconds() ); - UIManager::instance()->init(); // UI_MANAGER_DRAW_BOXES | UI_MANAGER_HIGHLIGHT_FOCUS | UI_MANAGER_HIGHLIGHT_OVER + UIManager::instance()->init(UI_MANAGER_DRAW_BOXES); // UI_MANAGER_DRAW_BOXES | UI_MANAGER_HIGHLIGHT_FOCUS | UI_MANAGER_HIGHLIGHT_OVER //mTheme = UITheme::loadFromPath( eeNew( UIdefaultTheme, ( mThemeName, mThemeName ) ), MyPath + mThemeName + "/" ); @@ -299,7 +299,14 @@ void EETest::createUI() { Params.Border.setColor( 0x979797CC ); Params.Background.setColors( ColorA( 0xEDEDED66 ), ColorA( 0xEDEDEDCC ), ColorA( 0xEDEDEDCC ), ColorA( 0xEDEDED66 ) ); - UIWindow * tWin = mTheme->createWindow( NULL, Sizei( 530, 405 ), Vector2i( 320, 240 ), UI_CONTROL_DEFAULT_FLAGS_CENTERED, UI_WIN_DRAGABLE_CONTAINER , Sizei( 530, 405 ), 200 ); + UIWindow * tWin = UIWindow::New(); + tWin->setSize( 530, 405 )->setPosition( 320, 240 ); + WindowStyleConfig windowStyleConfig = tWin->getStyleConfig(); + windowStyleConfig.winFlags = UI_WIN_DRAGABLE_CONTAINER; + windowStyleConfig.minWindowSize = Sizei( 530, 405 ); + windowStyleConfig.baseAlpha = 200; + tWin->setStyleConfig( windowStyleConfig ); + C = tWin->getContainer(); tWin->setVisible( false )->setEnabled( false ); @@ -330,7 +337,12 @@ void EETest::createUI() { Child2->startRotation( 0.f, 360.f, Milliseconds( 5000.f ) ); Child2->getRotationInterpolation()->setLoop( true ); - mTheme->createSprite( eeNew( Sprite, ( "gn" ) ), C, Sizei(), Vector2i( 160, 100 ) ); + UISprite * sprite = UISprite::New(); + sprite->setFlags( UI_AUTO_SIZE ); + sprite->setSprite( eeNew( Sprite, ( "gn" ) ) ); + sprite->setDeallocSprite( true ); + sprite->setParent( C ); + sprite->setPosition( 160, 100 ); UITextBox::CreateParams TextParams; TextParams.setParent( C ); @@ -638,7 +650,7 @@ void EETest::createNewUI() { pushButton->setText( "PushButton" ); pushButton->setIcon( mTheme->getIconByName( "ok" ) ); - UISprite * sprite = eeNew( UISprite, () ); + UISprite * sprite = UISprite::New(); sprite->setPosition( 50, 600 ); sprite->setSprite( &SP ); @@ -665,7 +677,7 @@ void EETest::createNewUI() { textEdit->setPosition( 350, 4 )->setSize( 200, 200 ); textEdit->setText( mBuda ); - UISpinBox * spinBox = eeNew( UISpinBox, () ); + UISpinBox * spinBox = UISpinBox::New(); spinBox->setPosition( 350, 210 )->setSize( 200, 0 ); UIGenericGrid * genGrid = eeNew( UIGenericGrid, () ); @@ -678,17 +690,20 @@ void EETest::createNewUI() { for ( Uint32 i = 0; i < 15; i++ ) { UIGridCell * Cell = eeNew( UIGridCell, () ); - UITextBox * TxtBox = eeNew( UITextBox, () ); - UITextInput * TxtInput = eeNew( UITextInput, () ); - UIGfx * TxtGfx = eeNew( UIGfx, () ); + UITextBox * TxtBox = UITextBox::New(); + UITextInput * TxtInput = UITextInput::New(); + UIGfx * TxtGfx = UIGfx::New(); + TxtGfx->unsetFlags( UI_AUTO_SIZE ); Cell->setParent( genGrid->getContainer() ); - TxtGfx->setSubTexture( mTheme->getIconByName( "ok" ) ); - TxtBox->setText( "Test " + String::toStr( i+1 ) ); Cell->setCell( 0, TxtBox ); Cell->setCell( 1, TxtGfx ); Cell->setCell( 2, TxtInput ); + + TxtGfx->setSubTexture( mTheme->getIconByName( "ok" ) ); + TxtBox->setText( "Test " + String::toStr( i+1 ) ); + genGrid->add( Cell ); } @@ -716,9 +731,9 @@ void EETest::createNewUI() { UITabWidget * TabWidget = eeNew( UITabWidget, () ); TabWidget->setPosition( 350, 530 )->setSize( 200, 64 ); - TabWidget->add( "Tab 1", (eeNew( UIComplexControl, () ))->setThemeControl( "winback" ), mTheme->getIconByName( "ok" ) ); - TabWidget->add( "Tab 2", (eeNew( UIComplexControl, () ))->setThemeControl( "winback" ), mTheme->getIconByName( "go-up" ) ); - TabWidget->add( "Tab 3", (eeNew( UIComplexControl, () ))->setThemeControl( "winback" ), mTheme->getIconByName( "add" ) ); + TabWidget->add( "Tab 1", UIComplexControl::New()->setThemeControl( "winback" ), mTheme->getIconByName( "ok" ) ); + TabWidget->add( "Tab 2", UIComplexControl::New()->setThemeControl( "winback" ), mTheme->getIconByName( "go-up" ) ); + TabWidget->add( "Tab 3", UIComplexControl::New()->setThemeControl( "winback" ), mTheme->getIconByName( "add" ) ); /**/ } @@ -727,7 +742,13 @@ void EETest::createMapEditor() { if ( NULL != mMapEditor ) return; - UIWindow * tWin = mTheme->createWindow( NULL, Sizei( 1024, 768 ), Vector2i(), UI_CONTROL_DEFAULT_FLAGS_CENTERED, UI_WIN_DEFAULT_FLAGS | UI_WIN_MAXIMIZE_BUTTON | UI_WIN_DRAGABLE_CONTAINER, Sizei( 1024, 768 ) ); + UIWindow * tWin = UIWindow::New(); + tWin->setSizeWithDecoration( 1024, 768 )->setPosition( 0, 0 ); + WindowStyleConfig windowStyleConfig = tWin->getStyleConfig(); + windowStyleConfig.winFlags = UI_WIN_DEFAULT_FLAGS | UI_WIN_MAXIMIZE_BUTTON | UI_WIN_DRAGABLE_CONTAINER; + windowStyleConfig.minWindowSize = Sizei( 1024, 768 ); + tWin->setStyleConfig( windowStyleConfig ); + mMapEditor = eeNew( MapEditor, ( tWin, cb::Make0( this, &EETest::onMapEditorClose ) ) ); tWin->center(); tWin->show(); @@ -738,7 +759,13 @@ void EETest::onMapEditorClose() { } void EETest::createETGEditor() { - UIWindow * tWin = mTheme->createWindow( NULL, Sizei( 1024, 768 ), Vector2i(), UI_CONTROL_DEFAULT_FLAGS_CENTERED, UI_WIN_DEFAULT_FLAGS | UI_WIN_MAXIMIZE_BUTTON | UI_WIN_DRAGABLE_CONTAINER, Sizei( 1024, 768 ) ); + UIWindow * tWin = UIWindow::New(); + tWin->setSizeWithDecoration( 1024, 768 )->setPosition( 0, 0 ); + WindowStyleConfig windowStyleConfig = tWin->getStyleConfig(); + windowStyleConfig.winFlags = UI_WIN_DEFAULT_FLAGS | UI_WIN_MAXIMIZE_BUTTON | UI_WIN_DRAGABLE_CONTAINER; + windowStyleConfig.minWindowSize = Sizei( 1024, 768 ); + tWin->setStyleConfig( windowStyleConfig ); + mETGEditor = eeNew ( Tools::TextureAtlasEditor, ( tWin, cb::Make0( this, &EETest::onETGEditorClose ) ) ); tWin->center(); tWin->show(); @@ -776,7 +803,9 @@ void EETest::createWinMenu() { } void EETest::createDecoratedWindow() { - mUIWindow = mTheme->createWindow( NULL, Sizei( 530, 350 ), Vector2i( 200, 50 ), UI_CONTROL_DEFAULT_FLAGS_CENTERED, UI_WIN_DEFAULT_FLAGS | UI_WIN_MAXIMIZE_BUTTON, Sizei( 100, 200 ) ); + mUIWindow = UIWindow::New(); + mUIWindow->setWinFlags( UI_WIN_DEFAULT_FLAGS | UI_WIN_MAXIMIZE_BUTTON ) + ->setMinWindowSize( 530, 350 )->setPosition( 200, 50 ); mUIWindow->addEventListener( UIEvent::EventOnWindowCloseClick, cb::Make1( this, &EETest::onCloseClick ) ); mUIWindow->setTitle( "Test Window" ); @@ -792,17 +821,23 @@ void EETest::createDecoratedWindow() { TabWidget->setParent( mUIWindow->getContainer() )->setSize( 510, 250 )->setPosition( 10, 55 )-> setFlags( UI_HALIGN_CENTER | UI_VALIGN_CENTER | UI_ANCHOR_RIGHT | UI_ANCHOR_BOTTOM | UI_ANCHOR_LEFT | UI_ANCHOR_TOP ); - //mTheme->createTabWidget( mUIWindow->getContainer(), Sizei( 510, 250 ), Vector2i( 10, 55 ), UI_HALIGN_CENTER | UI_VALIGN_CENTER | UI_ANCHOR_RIGHT | UI_ANCHOR_BOTTOM | UI_ANCHOR_LEFT | UI_ANCHOR_TOP ); - - UITextEdit * TEdit = mTheme->createTextEdit( TabWidget, Sizei(), Vector2i() ); + UITextEdit * TEdit = UITextEdit::New(); + TEdit->setParent( TabWidget ); TEdit->setText( mBuda ); TabWidget->add( "TextEdit", TEdit ); - UITextInput * Txt = mTheme->createTextInput( TabWidget, Sizei(), Vector2i(), UI_AUTO_PADDING | UI_WORD_WRAP | UI_TEXT_SELECTION_ENABLED ); + UITextInput * Txt = UITextInput::New(); + Txt->setFlags( UI_WORD_WRAP ); + Txt->setParent( TabWidget ); Txt->setText( mBuda ); TabWidget->add( "TextInput", Txt ); - TabWidget->add( "TextBox", mTheme->createTextBox( mBuda, TabWidget, Sizei(), Vector2i(), UI_AUTO_PADDING | UI_WORD_WRAP | UI_TEXT_SELECTION_ENABLED ) ); + UITextBox * txtBox = UITextBox::New(); + txtBox->resetFlags( UI_HALIGN_LEFT | UI_VALIGN_TOP | UI_AUTO_PADDING | UI_WORD_WRAP | UI_TEXT_SELECTION_ENABLED ); + txtBox->setParent( TabWidget ); + txtBox->setText( mBuda ); + + TabWidget->add( "TextBox", txtBox ); createWinMenu(); }