1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-11-24 08:32:34 +02:00

using CHeroArea

This commit is contained in:
Laserlicht 2023-12-22 01:30:41 +01:00 committed by GitHub
parent f75ccc308b
commit c20f0bdc3e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 8 deletions

View File

@ -121,9 +121,10 @@ void LRClickableAreaWTextComp::showPopupWindow(const Point & cursorPosition)
}
CHeroArea::CHeroArea(int x, int y, const CGHeroInstance * hero)
: CIntObject(LCLICK | HOVER),
: CIntObject(LCLICK | SHOW_POPUP | HOVER),
hero(hero),
clickFunctor(nullptr)
clickFunctor(nullptr),
clickRFunctor(nullptr)
{
OBJECT_CONSTRUCTION_CAPTURING(255-DISPOSE);
@ -147,12 +148,23 @@ void CHeroArea::addClickCallback(ClickFunctor callback)
clickFunctor = callback;
}
void CHeroArea::addRClickCallback(ClickFunctor callback)
{
clickRFunctor = callback;
}
void CHeroArea::clickPressed(const Point & cursorPosition)
{
if(clickFunctor)
clickFunctor();
}
void CHeroArea::showPopupWindow(const Point & cursorPosition)
{
if(clickRFunctor)
clickRFunctor();
}
void CHeroArea::hover(bool on)
{
if (on && hero)

View File

@ -190,12 +190,15 @@ public:
CHeroArea(int x, int y, const CGHeroInstance * hero);
void addClickCallback(ClickFunctor callback);
void addRClickCallback(ClickFunctor callback);
void clickPressed(const Point & cursorPosition) override;
void showPopupWindow(const Point & cursorPosition) override;
void hover(bool on) override;
private:
const CGHeroInstance * hero;
std::shared_ptr<CAnimImage> portrait;
ClickFunctor clickFunctor;
ClickFunctor clickRFunctor;
ClickFunctor showPopupHandler;
};

View File

@ -33,7 +33,6 @@
#include "../widgets/Slider.h"
#include "../widgets/TextControls.h"
#include "../widgets/ObjectLists.h"
#include "../widgets/MiscWidgets.h"
#include "../render/Canvas.h"
#include "../render/CAnimation.h"
@ -410,8 +409,9 @@ CLevelWindow::CLevelWindow(const CGHeroInstance * hero, PrimarySkill pskill, std
box = std::make_shared<CComponentBox>(comps, Rect(75, 300, pos.w - 150, 100));
}
portrait = std::make_shared<CAnimImage>(AnimationPath::builtin("PortraitsLarge"), hero->getIconIndex(), 0, 170, 66);
portraitArea = std::make_shared<LRClickableArea>(Rect(170, 66, 58, 64), nullptr, [hero](){ GH.windows().createAndPushWindow<CRClickPopupInt>(std::make_shared<CHeroWindow>(hero)); });
portrait = std::make_shared<CHeroArea>(170, 66, hero);
portrait->addClickCallback(nullptr);
portrait->addRClickCallback([hero](){ GH.windows().createAndPushWindow<CRClickPopupInt>(std::make_shared<CHeroWindow>(hero)); });
ok = std::make_shared<CButton>(Point(297, 413), AnimationPath::builtin("IOKAY"), CButton::tooltip(), std::bind(&CLevelWindow::close, this), EShortcut::GLOBAL_ACCEPT);
//%s has gained a level.

View File

@ -35,7 +35,7 @@ class CGStatusBar;
class CTextBox;
class CGarrisonInt;
class CGarrisonSlot;
class LRClickableArea;
class CHeroArea;
enum class EUserEvent;
@ -130,8 +130,7 @@ public:
/// Raised up level window where you can select one out of two skills
class CLevelWindow : public CWindowObject
{
std::shared_ptr<CAnimImage> portrait;
std::shared_ptr<LRClickableArea> portraitArea;
std::shared_ptr<CHeroArea> portrait;
std::shared_ptr<CButton> ok;
std::shared_ptr<CLabel> mainTitle;
std::shared_ptr<CLabel> levelTitle;