Added a popup menu label class and require menu label defines for InventoryScrollableWindowComponents
parent
3ff558d44e
commit
8af7afadae
@ -0,0 +1,78 @@ |
||||
#pragma region License |
||||
/*
|
||||
License (OLC-3) |
||||
~~~~~~~~~~~~~~~ |
||||
|
||||
Copyright 2018 - 2023 OneLoneCoder.com |
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, |
||||
are permitted provided that the following conditions are met: |
||||
|
||||
1. Redistributions or derivations of source code must retain the above copyright |
||||
notice, this list of conditions and the following disclaimer. |
||||
|
||||
2. Redistributions or derivative works in binary form must reproduce the above |
||||
copyright notice. This list of conditions and the following disclaimer must be |
||||
reproduced in the documentation and/or other materials provided with the distribution. |
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors may |
||||
be used to endorse or promote products derived from this software without specific |
||||
prior written permission. |
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY |
||||
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT |
||||
SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED |
||||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR |
||||
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
||||
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
||||
SUCH DAMAGE. |
||||
*/ |
||||
#pragma endregion |
||||
#pragma once |
||||
#include "MenuLabel.h" |
||||
#include "DEFINES.h" |
||||
#include "Crawler.h" |
||||
#include "util.h" |
||||
|
||||
INCLUDE_game |
||||
|
||||
class PopupMenuLabel:public MenuLabel{ |
||||
private: |
||||
float scale; |
||||
public: |
||||
inline PopupMenuLabel(MenuType parent,geom2d::rect<float>rect,std::string label,float scale=1,ComponentAttr attributes=ComponentAttr::NONE) |
||||
:MenuLabel(parent,rect,label,scale,attributes),scale(scale){ |
||||
} |
||||
protected: |
||||
virtual void inline Update(Crawler*game)override{ |
||||
MenuLabel::Update(game); |
||||
} |
||||
virtual void inline Draw(Crawler*game,vf2d parentPos)override{} |
||||
virtual void inline DrawDecal(Crawler*game,vf2d parentPos,bool focused)override{ |
||||
if(label.length()>0){ |
||||
MenuLabel::DrawDecal(game,parentPos,focused); |
||||
std::string wrappedText=util::WrapText(game,label,rect.size.x,true,{scale,scale}); |
||||
vf2d drawPos=parentPos+rect.middle()-vf2d{game->GetTextSizeProp(wrappedText)}*float(scale)/2; //Assume centered.
|
||||
if(!centered){ |
||||
drawPos=vf2d{rect.pos.x+2,rect.middle().y-game->GetTextSizeProp(wrappedText).y/2}+parentPos; //We should at least vertically align here.
|
||||
} |
||||
if(shadow){ |
||||
game->DrawShadowStringPropDecal(drawPos,wrappedText,WHITE,BLACK,{scale,scale}); |
||||
}else{ |
||||
game->DrawStringPropDecal(drawPos,wrappedText,WHITE,{scale,scale}); |
||||
} |
||||
if(background){ |
||||
game->FillRectDecal(rect.pos+parentPos,rect.size,PixelLerp(Menu::themes[Menu::themeSelection].GetButtonCol(),Menu::themes[Menu::themeSelection].GetHighlightCol(),hoverEffect/"ThemeGlobal.HighlightTime"_F)); |
||||
} |
||||
if(border){ |
||||
game->DrawRectDecal(rect.pos+parentPos,rect.size); |
||||
} |
||||
if(showDefaultLabel){ |
||||
game->DrawStringPropDecal(rect.pos+parentPos+rect.size/2-game->GetTextSizeProp(label)/2,label); |
||||
} |
||||
} |
||||
} |
||||
}; |
Loading…
Reference in new issue