#pragma once #include "MenuComponent.h" #include "DEFINES.h" #include "Crawler.h" #include "utils.h" INCLUDE_game class MenuLabel:public MenuComponent{ bool shadow=false; bool centered=true; int scale=1; public: inline MenuLabel(MenuType parent,geom2d::rectrect,std::string label,int scale=1,bool centered=true,bool shadow=false,bool outline=false,bool background=false) :MenuComponent(parent,rect,label,MenuFunc{},false),scale(scale),centered(centered),shadow(shadow){ border=outline; this->background=background; showDefaultLabel=false; } inline void SetLabel(std::string text){ label=text; } protected: virtual void inline Update(Crawler*game)override{ MenuComponent::Update(game); } virtual void inline Draw(Crawler*game,vf2d parentPos,bool focused)override{ MenuComponent::Draw(game,parentPos,focused); std::string wrappedText=util::WrapText(game,label,rect.size.x,true,{float(scale),float(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->DrawShadowStringProp(drawPos,wrappedText,focused?WHITE:WHITE*"ThemeGlobal.MenuUnfocusedColorMult"_F,BLACK,{float(scale),float(scale)}); }else{ game->DrawStringProp(drawPos,wrappedText,focused?WHITE:WHITE*"ThemeGlobal.MenuUnfocusedColorMult"_F,scale); } } };