ddnet/src/game/client/ui.hpp

95 lines
2.8 KiB
C++
Raw Normal View History

2007-11-25 19:42:40 +00:00
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
2008-08-30 21:31:01 +00:00
#ifndef FILE_GAME_CLIENT_UI_H
#define FILE_GAME_CLIENT_UI_H
2009-10-27 14:38:53 +00:00
class CUIRect
2008-01-12 12:27:55 +00:00
{
2009-10-27 14:38:53 +00:00
// TODO: Refactor: Redo UI scaling
float Scale() const { return 1.0f; }
public:
2008-01-12 12:27:55 +00:00
float x, y, w, h;
2009-10-27 14:38:53 +00:00
void HSplitTop(float Cut, CUIRect *pTop, CUIRect *pBottom) const;
void HSplitBottom(float Cut, CUIRect *pTop, CUIRect *pBottom) const;
void VSplitMid(CUIRect *pLeft, CUIRect *pRight) const;
void VSplitLeft(float Cut, CUIRect *pLeft, CUIRect *pRight) const;
void VSplitRight(float Cut, CUIRect *pLeft, CUIRect *pRight) const;
void Margin(float Cut, CUIRect *pOtherRect) const;
void VMargin(float Cut, CUIRect *pOtherRect) const;
void HMargin(float Cut, CUIRect *pOtherRect) const;
};
2008-01-12 12:27:55 +00:00
2009-10-27 14:38:53 +00:00
class CUI
2008-01-12 12:27:55 +00:00
{
2009-10-27 14:38:53 +00:00
const void *m_pHotItem;
const void *m_pActiveItem;
const void *m_pLastActiveItem;
const void *m_pBecommingHotItem;
float m_MouseX, m_MouseY; /* in gui space */
float m_MouseWorldX, m_MouseWorldY; /* in world space */
unsigned m_MouseButtons;
unsigned m_LastMouseButtons;
2008-01-12 12:27:55 +00:00
2009-10-27 14:38:53 +00:00
CUIRect m_Screen;
class IGraphics *m_pGraphics;
2008-01-12 12:27:55 +00:00
2009-10-27 14:38:53 +00:00
public:
// TODO: Refactor: Fill this in
void SetGraphics(class IGraphics *pGraphics) { m_pGraphics = pGraphics; }
class IGraphics *Graphics() { return m_pGraphics; }
2008-01-12 12:27:55 +00:00
2009-10-27 14:38:53 +00:00
CUI();
2007-05-22 15:03:32 +00:00
2009-10-27 14:38:53 +00:00
enum
{
CORNER_TL=1,
CORNER_TR=2,
CORNER_BL=4,
CORNER_BR=8,
CORNER_T=CORNER_TL|CORNER_TR,
CORNER_B=CORNER_BL|CORNER_BR,
CORNER_R=CORNER_TR|CORNER_BR,
CORNER_L=CORNER_TL|CORNER_BL,
CORNER_ALL=CORNER_T|CORNER_B
};
2007-05-22 15:03:32 +00:00
2009-10-27 14:38:53 +00:00
int Update(float mx, float my, float mwx, float mwy, int buttons);
2007-05-22 15:03:32 +00:00
2009-10-27 14:38:53 +00:00
float MouseX() const { return m_MouseX; }
float MouseY() const { return m_MouseY; }
float MouseWorldX() const { return m_MouseWorldX; }
float MouseWorldY() const { return m_MouseWorldY; }
int MouseButton(int Index) const { return (m_MouseButtons>>Index)&1; }
int MouseButtonClicked(int Index) { return MouseButton(Index) && !((m_LastMouseButtons>>Index)&1) ; }
2008-01-12 12:27:55 +00:00
2009-10-27 14:38:53 +00:00
void SetHotItem(const void *pID) { m_pBecommingHotItem = pID; }
void SetActiveItem(const void *pID) { m_pActiveItem = pID; if (pID) m_pLastActiveItem = pID; }
void ClearLastActiveItem() { m_pLastActiveItem = 0; }
const void *HotItem() const { return m_pHotItem; }
const void *NextHotItem() const { return m_pBecommingHotItem; }
const void *ActiveItem() const { return m_pActiveItem; }
const void *LastActiveItem() const { return m_pLastActiveItem; }
2008-01-12 12:27:55 +00:00
2009-10-27 14:38:53 +00:00
int MouseInside(const CUIRect *r);
2008-01-12 12:27:55 +00:00
2009-10-27 14:38:53 +00:00
CUIRect *Screen();
void ClipEnable(const CUIRect *r);
void ClipDisable();
// TODO: Refactor: Redo UI scaling
void SetScale(float s);
float Scale() const { return 1.0f; }
2007-05-22 15:03:32 +00:00
2009-10-27 14:38:53 +00:00
int DoButtonLogic(const void *pID, const char *pText /* TODO: Refactor: Remove */, int Checked, const CUIRect *pRect);
// TODO: Refactor: Remove this?
void DoLabel(const CUIRect *r, const char *text, float size, int align, int max_width = -1);
};
2007-05-22 15:03:32 +00:00
#endif