mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2024-12-25 19:31:58 +01:00
160 lines
4.4 KiB
C++
160 lines
4.4 KiB
C++
|
|
||
|
// Buttons
|
||
|
|
||
|
#ifndef __GUI_HPP
|
||
|
#define __GUI_HPP
|
||
|
|
||
|
#include <wiiuse/wpad.h>
|
||
|
#include <ogc/pad.h>
|
||
|
|
||
|
#include "video.hpp"
|
||
|
#include "FreeTypeGX.h"
|
||
|
#include "wstringEx.hpp"
|
||
|
#include "smartptr.hpp"
|
||
|
#include "text.hpp"
|
||
|
#include "gui_sound.h"
|
||
|
|
||
|
#include "safe_vector.hpp"
|
||
|
|
||
|
struct SButtonTextureSet
|
||
|
{
|
||
|
STexture left;
|
||
|
STexture right;
|
||
|
STexture center;
|
||
|
STexture leftSel;
|
||
|
STexture rightSel;
|
||
|
STexture centerSel;
|
||
|
};
|
||
|
|
||
|
class CButtonsMgr
|
||
|
{
|
||
|
public:
|
||
|
bool init(CVideo &vid);
|
||
|
void setRumble(bool enabled) { m_rumbleEnabled = enabled; }
|
||
|
void reserve(u32 capacity) { m_elts.reserve(capacity); }
|
||
|
u32 addButton(SFont font, const wstringEx &text, int x, int y, u32 width, u32 height, const CColor &color,
|
||
|
const SButtonTextureSet &texSet, const SmartGuiSound &clickSound = _noSound, const SmartGuiSound &hoverSound = _noSound);
|
||
|
u32 addLabel(SFont font, const wstringEx &text, int x, int y, u32 width, u32 height, const CColor &color, u16 style, const STexture &bg = _noTexture);
|
||
|
u32 addPicButton(const u8 *pngNormal, const u8 *pngSelected, int x, int y, u32 width, u32 height,
|
||
|
const SmartGuiSound &clickSound = _noSound, const SmartGuiSound &hoverSound = _noSound);
|
||
|
u32 addPicButton(STexture &texNormal, STexture &texSelected, int x, int y, u32 width, u32 height,
|
||
|
const SmartGuiSound &clickSound = _noSound, const SmartGuiSound &hoverSound = _noSound);
|
||
|
u32 addProgressBar(int x, int y, u32 width, u32 height, SButtonTextureSet &texSet);
|
||
|
void setText(u32 id, const wstringEx &text, bool unwrap = false);
|
||
|
void setText(u32 id, const wstringEx &text, u32 startline, bool unwrap = false);
|
||
|
void setTexture(u32 id ,STexture &bg);
|
||
|
void setTexture(u32 id, STexture &bg, int width, int height);
|
||
|
void setProgress(u32 id, float f, bool instant = false);
|
||
|
void reset(u32 id, bool instant = false);
|
||
|
void moveBy(u32 id, int x, int y, bool instant = false);
|
||
|
void getDimensions(u32 id, int &x, int &y, u32 &width, u32 &height);
|
||
|
void hide(u32 id, int dx, int dy, float scaleX, float scaleY, bool instant = false);
|
||
|
void hide(u32 id, bool instant = false);
|
||
|
void show(u32 id, bool instant = false);
|
||
|
void mouse(int chan, int x, int y);
|
||
|
void up(void);
|
||
|
void down(void);
|
||
|
void draw(void);
|
||
|
void tick(void);
|
||
|
void noClick(bool noclick = false);
|
||
|
void click(u32 id = (u32)-1);
|
||
|
bool selected(u32 button = (u32)-1);
|
||
|
void setRumble(int, bool wii = false, bool gc = false);
|
||
|
void deselect(void){ for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--) m_selected[chan] = (u32)-1; }
|
||
|
void stopSounds(void);
|
||
|
void setSoundVolume(int vol);
|
||
|
private:
|
||
|
struct SHideParam
|
||
|
{
|
||
|
int dx;
|
||
|
int dy;
|
||
|
float scaleX;
|
||
|
float scaleY;
|
||
|
public:
|
||
|
SHideParam(void) : dx(0), dy(0), scaleX(1.f), scaleY(1.f) { }
|
||
|
};
|
||
|
enum EltType {
|
||
|
GUIELT_BUTTON,
|
||
|
GUIELT_LABEL,
|
||
|
GUIELT_PROGRESS
|
||
|
};
|
||
|
struct SElement
|
||
|
{
|
||
|
SHideParam hideParam;
|
||
|
EltType t;
|
||
|
bool visible;
|
||
|
int x;
|
||
|
int y;
|
||
|
int w;
|
||
|
int h;
|
||
|
Vector3D pos;
|
||
|
Vector3D targetPos;
|
||
|
u8 alpha;
|
||
|
u8 targetAlpha;
|
||
|
float scaleX;
|
||
|
float scaleY;
|
||
|
float targetScaleX;
|
||
|
float targetScaleY;
|
||
|
int moveByX;
|
||
|
int moveByY;
|
||
|
public:
|
||
|
virtual ~SElement(void) { }
|
||
|
virtual void tick(void);
|
||
|
protected:
|
||
|
SElement(void) { }
|
||
|
};
|
||
|
struct SButton : public SElement
|
||
|
{
|
||
|
SFont font;
|
||
|
SButtonTextureSet tex;
|
||
|
wstringEx text;
|
||
|
CColor textColor;
|
||
|
float click;
|
||
|
SmartGuiSound clickSound;
|
||
|
SmartGuiSound hoverSound;
|
||
|
public:
|
||
|
SButton(void) { t = GUIELT_BUTTON; }
|
||
|
virtual void tick(void);
|
||
|
};
|
||
|
struct SLabel : public SElement
|
||
|
{
|
||
|
SFont font;
|
||
|
CText text;
|
||
|
CColor textColor;
|
||
|
u16 textStyle;
|
||
|
STexture texBg;
|
||
|
public:
|
||
|
SLabel(void) { t = GUIELT_LABEL; }
|
||
|
virtual void tick(void);
|
||
|
};
|
||
|
struct SProgressBar : public SElement
|
||
|
{
|
||
|
SButtonTextureSet tex;
|
||
|
float val;
|
||
|
float targetVal;
|
||
|
public:
|
||
|
SProgressBar(void) { t = GUIELT_PROGRESS; }
|
||
|
virtual void tick(void);
|
||
|
};
|
||
|
private:
|
||
|
safe_vector<SmartPtr<SElement> > m_elts;
|
||
|
u32 m_selected[WPAD_MAX_WIIMOTES];
|
||
|
bool m_rumbleEnabled;
|
||
|
u8 m_rumble[WPAD_MAX_WIIMOTES];
|
||
|
bool wii_rumble[WPAD_MAX_WIIMOTES];
|
||
|
bool gc_rumble[WPAD_MAX_WIIMOTES];
|
||
|
SmartGuiSound m_sndHover;
|
||
|
SmartGuiSound m_sndClick;
|
||
|
u8 m_soundVolume;
|
||
|
bool m_noclick;
|
||
|
CVideo m_vid;
|
||
|
private:
|
||
|
void _drawBtn(const SButton &b, bool selected, bool click);
|
||
|
void _drawLbl(SLabel &b);
|
||
|
void _drawPBar(const SProgressBar &b);
|
||
|
static STexture _noTexture;
|
||
|
static SmartGuiSound _noSound;
|
||
|
};
|
||
|
|
||
|
#endif // !defined(__GUI_HPP)
|