MiniEngine/MiniEngine_Widget.h

159 lines
2.7 KiB
C
Raw Normal View History

2017-03-02 12:18:59 +08:00
#pragma once
#include "MiniEngine.h"
2017-04-06 12:32:07 +08:00
#include "MiniEngine_Event.h"
#include <string>
#include <list>
2017-03-02 12:18:59 +08:00
2017-03-02 13:13:05 +08:00
namespace MiniEngine
{
namespace Widget
{
class PosInfo
2017-03-02 12:18:59 +08:00
{
public:
double x,y;
double w,h;
Rect getRect(Rect Area);
};
class PointInfo
{
public:
double x,y;
};
/// Forward Declaration
class Frame;
class Board;
2017-03-02 12:18:59 +08:00
class Brush : public Renderer
{
public:
int copy(Texture t, Rect src, PosInfo dst);
int copyTo(Texture t, PosInfo dst);
int copyTo(Texture t, PointInfo lupoint);
2017-03-02 13:13:05 +08:00
int copyFill(Texture t,Rect src);
int copyFullFill(Texture t);
Rect getArea();
void setArea(Rect Area);
2017-03-02 21:00:53 +08:00
protected:
Brush(Renderer Rnd);
private:
Rect area;
friend class Frame;
};
class BoardBase : public EventHandlerBase
{
public:
virtual void draw(const Brush&)=0;
};
class Frame
{
public:
Frame(Renderer,Rect);
void run();
void stop();
void needUpdate();
void add(Board*);
int remove(Board*);
private:
bool running;
bool update;
SDL_Event e;
std::list<Board*> _lst;
Brush brush;
};
class WidgetBase : public BoardBase
{
public:
Board* getBoard();
PosInfo info;
private:
Board* _parent;
friend class Board;
};
class Board : public BoardBase
{
public:
void add(Board*);
void add(WidgetBase*);
int remove(Board*);
int remove(WidgetBase*);
virtual void draw(const Brush&);
virtual bool event(const EventBase& ev) override;
Board* getParent();
Frame* getFrame();
PosInfo getPosInfo();
2017-03-02 12:18:59 +08:00
private:
std::list<Board*> _blst;
std::list<WidgetBase*> _wlst;
PosInfo info;
Board* _parent;
Frame* _frame;
friend class Frame;
2017-03-02 12:18:59 +08:00
};
2017-03-02 12:18:59 +08:00
class ButtonBase : public WidgetBase
2017-03-02 12:18:59 +08:00
{
2017-04-06 12:32:07 +08:00
protected:
ButtonBase();
void onPressed();
void onClick();
void onMouseOver();
void onMouseOut();
private:
/// Overrides, called by EventHandler::event()
virtual bool onMouseDown(const MouseButtonEvent&) override;
virtual bool onMouseUp(const MouseButtonEvent&) override;
virtual bool onMouseMotion(const MouseMotionEvent&) override;
int _status;
};
class TextButton : public ButtonBase
{
public:
void setText(std::string Text);
std::string getText();
virtual void draw(const Brush&) override;
2017-03-02 21:59:29 +08:00
private:
std::string _word;
Texture _text;
2017-03-02 21:59:29 +08:00
};
class ColorButton : public ButtonBase
{
public:
RGBA normal,active,clicked;
virtual void draw(const Brush&) override;
protected:
void onPressed();
void onClick();
void onMouseOver();
void onMouseOut();
private:
int _colorstatus;
};
2017-04-23 22:00:59 +08:00
class ProcessBarBase : public WidgetBase
{
public:
int currentVal,maxVal;
ProcessBarBase();
virtual void draw(const Brush&) override;
};
2017-03-02 13:13:05 +08:00
}/// End of namespace MiniEngine::Widget
}/// End of namespace MiniEngine