dl
dl_ui_background.h
浏览该文件的文档.
1
13#pragma once
14
15#ifndef DL_DISABLE_RENDER
16#include "render/dl_sprite.h"
17#include "render/dl_sprite9.h"
19
20namespace dl::UI
21{
23class Background
24{
25public:
26 using CbCustomRender = std::function<void(Background*)>;
27
28 enum class Type
29 {
33 };
34
35 static Background* Create()
36 {
37 Background* ret = new Background;
38 ret->_coor = Coor::Create();
39 return ret;
40 }
41
42 Background* Clone();
43
44 void Set(gcSprite spr);
45 void Set(Sprite9* spr9);
46
47 void Clear();
51 void SetOffset(const Position& offset);
55 void SetSize(const Position& size);
59 void SetColor(const Color& col);
63 void SetSizeExtra(const Position& size);
64
66 {
67 _cbRender = cb;
68 }
69
70 // todo 不会即时生效
71 Cpt::ElementData& GetElementData() { return _cptElemData; }
72
82
84 {
85 return _coor;
86 }
87 float GetOrder();
88 float GetOrder(int offset)
89 {
90 return Math::OffsetOrder(GetOrder(), 0, 0, offset);
91 }
92
93 // TODO 刷新
94 void SetWindowW(bool fixed) { _bWindowW = fixed; }
95 void SetWindowH(bool fixed) { _bWindowH = fixed; }
96
97 bool IsWindowW() { return _bWindowW; }
98 bool IsWindowH() { return _bWindowH; }
99
100 bool IsPickup();
101
102 void Render();
103
104 void SetOrder(float order);
105
106 void SetUI(bool ui, bool change_sampler = true);
107
109
112
113 Components* GetCpt() { return &_cpt; }
114
116 {
117 delete _ui._spr9;
118 delete _coor;
119 }
120private:
121 Background() :
122 _sizeExtra{},
123 _bWindowW{ false },
124 _bWindowH{ false },
125 _cpt{ this }
126 {
127 _init_cpt();
128 }
129
130 struct UI
131 {
133 gcSprite _spr;
134 Sprite9* _spr9 = nullptr;
135 };
136
137 Coor* _coor;
138 Position _sizeExtra;
139 bool _bWindowW; // 填充窗口宽度
140 bool _bWindowH; // 填充窗口高度
141 UI _ui;
142 CbCustomRender _cbRender;
143
144 Components _cpt;
145 Cpt::DeleteThis _cptDeleteThis;
146 Cpt::SetOrder _cptSetOrder;
147 Cpt::Render _cptRender;
148 Cpt::IsPickup _cptIsPickup;
149 Cpt::GetCoor _cptGetCoor;
150 Cpt::SetSize _cptSetSize;
151 Cpt::RenderDebug _cptRenderDebug;
152 Cpt::ElementData _cptElemData;
153
154 void _delete_this() { delete this; }
155
156 void _init_cpt()
157 {
158 _cptDeleteThis = std::bind(&Background::_delete_this, this);
159 _cptSetOrder = std::bind(&Background::SetOrder, this, std::placeholders::_1);
160 _cptIsPickup = std::bind(&Background::IsPickup, this);
161 _cptRender = std::bind(&Background::Render, this);
162 _cptGetCoor = std::bind(&Background::GetCoor, this);
163 _cptSetSize = std::bind(&Background::SetSize, this, std::placeholders::_1);
164 _cptRenderDebug = std::bind(&Background::RenderDebug, this);
165
166 _cpt.PushBack(&_cptDeleteThis);
167 _cpt.PushBack(&_cptSetOrder);
168 _cpt.PushBack(&_cptIsPickup);
169 _cpt.PushBack(&_cptRender);
170 _cpt.PushBack(&_cptGetCoor);
171 _cpt.PushBack(&_cptSetSize);
172 _cpt.PushBack(&_cptRenderDebug);
173
174 _cpt.PushBack(&_cptElemData);
175 }
176
177};
178
179
180}
181
182
183#endif
2d坐标系
static Coor * Create(Coor *parent=nullptr)
元素通用属性(默认左上对齐,便于理解)
九图精灵
void Set(Sprite9 *spr9)
void SetUI(bool ui, bool change_sampler=true)
void SetWindowW(bool fixed)
float GetOrder(int offset)
Background * Clone()
static Background * Create()
void SetSizeExtra(const Position &size)
设置额外大小
void SetCustomRender(CbCustomRender cb)
void SetColor(const Color &col)
设置颜色
Position GetSize()
返回设置的大小(不包含额外大小)
void RefreshSize()
ui缩放变更后会调用
Position GetSizeReal()
返回显示的实际大小
void SetSize(const Position &size)
设置大小
void SetOrder(float order)
Position GetOffset()
Cpt::ElementData & GetElementData()
void Set(gcSprite spr)
std::function< void(Background *)> CbCustomRender
void SetWindowH(bool fixed)
void SetOffset(const Position &offset)
设置偏移
组件实例
九图精灵
2d绘图元素
Function< std::function< void(float)>, str_uid("SetOrder")> SetOrder
设置order
Function< std::function< void()>, str_uid("RenderD")> RenderDebug
调试绘图
Function< std::function< dl::Coor *()>, str_uid("GetCoor")> GetCoor
返回坐标系
Function< std::function< bool()>, str_uid("IsPickup")> IsPickup
---------------------------—具体组件----------------------------------—
Function< std::function< void(const Position &size)>, str_uid("SetSize")> SetSize
设置大小
Function< std::function< void()>, str_uid("Render")> Render
绘制
Function< std::function< void()>, str_uid("DeleteThis")> DeleteThis
删除自身
constexpr float OffsetOrder(float order, int u=1, int v=0, int w=0)
偏移order
Position2 Position
GC< Sprite > gcSprite
Array< float, 4 > Color