mirror of
https://github.com/smartcmd/MinecraftConsoles.git
synced 2026-10-22 19:22:04 +00:00
When removeControl() removes a Flash element (e.g. the Reinstall button in Help & Options, or the Debug button when disabled), the C++ control object stays in the m_controls vector. On Vita this was handled by calling setHidden(true) and checking getHidden() in the touch hit-test, but on Windows64 none of that was happening. The result: removed buttons kept phantom bounds that the hover code would match against, stealing focus from the buttons that shifted into their visual position. In the Help & Options menu with debug enabled, the removed Reinstall button (Button6) had ghost bounds overlapping where the Debug button (Button7) moved to after the removal, making Debug un-hoverable and snapping focus to Button1. The fix has three parts: - removeControl() now calls setHidden(true) on all platforms, not just Vita. The m_bHidden member was already declared on all platforms, only the accessors were ifdef'd behind __PSVITA__. - Removed the __PSVITA__ ifdef from setHidden/getHidden in UIControl.h so they're available everywhere. - Added getHidden() checks in both the hover and click hit-test loops, matching what the Vita touch code already does. The check is a simple bool read (no Flash/Iggy call), placed before the getVisible() query which hits Flash and can return stale values for removed elements.
94 lines
1.9 KiB
C++
94 lines
1.9 KiB
C++
#pragma once
|
|
|
|
// This class for any name object in the flash scene
|
|
class UIControl
|
|
{
|
|
|
|
public:
|
|
enum eUIControlType
|
|
{
|
|
eNoControl,
|
|
eButton,
|
|
eButtonList,
|
|
eCheckBox,
|
|
eCursor,
|
|
eDLCList,
|
|
eDynamicLabel,
|
|
eEnchantmentBook,
|
|
eEnchantmentButton,
|
|
eHTMLLabel,
|
|
eLabel,
|
|
eLeaderboardList,
|
|
eMinecraftPlayer,
|
|
eMinecraftHorse,
|
|
ePlayerList,
|
|
ePlayerSkinPreview,
|
|
eProgress,
|
|
eSaveList,
|
|
eSlider,
|
|
eSlotList,
|
|
eTextInput,
|
|
eTexturePackList,
|
|
eBitmapIcon,
|
|
eTouchControl,
|
|
};
|
|
protected:
|
|
eUIControlType m_eControlType;
|
|
int m_id;
|
|
bool m_bHidden; // set by the Remove call
|
|
|
|
public:
|
|
UIControl *m_pParentPanel; // set by UI_MAP_ELEMENT macro during mapElementsAndNames
|
|
|
|
void setControlType(eUIControlType eType) {m_eControlType=eType;}
|
|
eUIControlType getControlType() {return m_eControlType;}
|
|
void setId(int iID) { m_id=iID; }
|
|
int getId() { return m_id; }
|
|
UIScene * getParentScene() {return m_parentScene;}
|
|
UIControl* getParentPanel() { return m_pParentPanel; }
|
|
|
|
protected:
|
|
IggyValuePath m_iggyPath;
|
|
UIScene *m_parentScene;
|
|
string m_controlName;
|
|
|
|
IggyName m_nameXPos, m_nameYPos, m_nameWidth, m_nameHeight;
|
|
IggyName m_funcSetAlpha, m_nameVisible;
|
|
|
|
S32 m_x,m_y,m_width,m_height;
|
|
float m_lastOpacity;
|
|
bool m_isVisible;
|
|
|
|
public:
|
|
UIControl();
|
|
|
|
virtual bool setupControl(UIScene *scene, IggyValuePath *parent, const string &controlName);
|
|
void UpdateControl();
|
|
void setHidden(bool bHidden) {m_bHidden=bHidden;}
|
|
bool getHidden(void) {return m_bHidden;}
|
|
|
|
IggyValuePath *getIggyValuePath();
|
|
|
|
string getControlName() { return m_controlName; }
|
|
|
|
virtual void tick() {}
|
|
virtual void ReInit();
|
|
|
|
virtual void setFocus(bool focus) {}
|
|
|
|
S32 getXPos();
|
|
S32 getYPos();
|
|
S32 getWidth();
|
|
S32 getHeight();
|
|
|
|
void setOpacity(float percent);
|
|
void setVisible(bool visible);
|
|
bool getVisible();
|
|
bool isVisible() { return m_isVisible; }
|
|
|
|
virtual bool hasFocus() { return false; }
|
|
|
|
protected:
|
|
IggyName registerFastName(const wstring &name);
|
|
};
|