dl
dl_ui_sprite.h
浏览该文件的文档.
1
12#pragma once
13
14#ifndef DL_DISABLE_RENDER
15#include "render/dl_sprite.h"
17
18namespace dl::UI
19{
20class Panel;
22class Sprite
23{
24public:
25 enum class AutoSize
26 {
30 };
38
45 static Sprite* Create(gcSprite spr, AutoSize auto_size, FillMode fill_mode)
46 {
47 Sprite* ret = new Sprite;
48 if (!spr->IsOwnCoor())
49 {
50 Coor* coor = Coor::Create(spr->GetCoor());
51 spr->SetCoor(coor, true);
52 }
53 ret->_spr = spr;
54 ret->_spr->SetUI(true);
55 ret->SetMode(auto_size, fill_mode);
57 return ret;
58 }
59
64 static Sprite* Create(gcSprite spr)
65 {
67 }
68
69 void Render()
70 {
71 _spr->Render();
72 }
73
74 bool IsPickup()
75 {
76 return _spr->IsPickup();
77 }
78
80 void SetOrder(float order)
81 {
82 _spr->SetOrder(order);
83 }
84
89 void SetSize(const Size& size)
90 {
91 _sizeSet = size;
92 SetMode(_autoSize, _fillMode);
93 }
94
95 Coor* GetCoor() { return _spr->GetCoor(); }
96 gcSprite GetSprite() { return _spr; }
97
104
109 void SetMode(AutoSize auto_size, FillMode mode);
110
111 FillMode GetFillMode() { return _fillMode; }
112 AutoSize GetAutoSize() { return _autoSize; }
114 {
115 return _spr->GetSize();
116 }
117
118 void SetElementData(const Align::Direction2& hv, const Position& pos = {});
119 void SetEDOrderOffset(int order_offset);
120
121 void SetVisible(bool visible)
122 {
123 _cptElemData._bRunAble = visible;
124 }
125
126 Components* GetCpt() { return &_cpt; }
127private:
128 Sprite():
129 _panel{ nullptr },
130 _sizeSet{},
131 _cpt{this}
132 {
133 _init_cpt();
134 }
135
136 Panel* _panel;
137 gcSprite _spr;
138 AutoSize _autoSize;
139 FillMode _fillMode;
140 Size _sizeSet;
141
142
143 Components _cpt;
144 Cpt::DeleteThis _cptDeleteThis;
145 Cpt::SetOrder _cptSetOrder;
146 Cpt::Render _cptRender;
147 Cpt::IsPickup _cptIsPickup;
148 Cpt::GetCoor _cptGetCoor;
149 Cpt::ElementData _cptElemData;
150
151 void _delete_this() { delete this; }
152
153 void _init_cpt()
154 {
155 _cptDeleteThis = std::bind(&UI::Sprite::_delete_this, this);
156 _cptSetOrder = std::bind(&UI::Sprite::SetOrder, this, std::placeholders::_1);
157 _cptIsPickup = std::bind(&UI::Sprite::IsPickup, this);
158 _cptRender = std::bind(&UI::Sprite::Render, this);
159 _cptGetCoor = std::bind(&UI::Sprite::GetCoor, this);
160
161 _cpt.PushBack(&_cptDeleteThis);
162 _cpt.PushBack(&_cptSetOrder);
163 _cpt.PushBack(&_cptIsPickup);
164 _cpt.PushBack(&_cptRender);
165 _cpt.PushBack(&_cptGetCoor);
166 _cpt.PushBack(&_panel);
167
168 _cpt.PushBack(&_cptElemData);
169 }
170
171};
172}
173
174#endif
void PushBack(AnyType any)
添加一个任意对象
2d坐标系
static Coor * Create(Coor *parent=nullptr)
元素通用属性(默认左上对齐,便于理解)
void SetUI(bool ui, bool change_sampler=true)
设置后为ui精灵,会屏蔽order大于自己的ui精灵的pickup响应
bool IsOwnCoor()
是否拥有coor
Coor * GetCoor() const
void SetCoor(Coor *coor, bool own=false)
void SetMode(AutoSize auto_size, FillMode mode)
设置显示模式
void SetOrder(float order)
设置绘制顺序
void SetSize(const Size &size)
设置显示的大小
void SetVisible(bool visible)
Components * GetCpt()
static Sprite * Create(gcSprite spr, AutoSize auto_size, FillMode fill_mode)
创建ui精灵
@ WINDOW
以窗口大小(若是Panel成员,且Panel随窗口变化,则请勿使用)
@ NONE
以自身图形,或设置的大小
void SetEDOrderOffset(int order_offset)
@ RATIO_OUT
比例填充 图片不部分显示,会超出大小
@ RATIO_MOVIE
比例填充 图片全显示,但会留空白
static Sprite * Create(gcSprite spr)
创建ui精灵
void SetElementData(const Align::Direction2 &hv, const Position &pos={})
void SetSprite(gcSprite spr)
更换显示的精灵
组件实例
2d绘图元素
Array< Direction, 2 > Direction2
Function< std::function< void(float)>, str_uid("SetOrder")> SetOrder
设置order
Function< std::function< dl::Coor *()>, str_uid("GetCoor")> GetCoor
返回坐标系
Function< std::function< bool()>, str_uid("IsPickup")> IsPickup
---------------------------—具体组件----------------------------------—
Function< std::function< void()>, str_uid("Render")> Render
绘制
Function< std::function< void()>, str_uid("DeleteThis")> DeleteThis
删除自身
Position2 Position
constexpr float Z_DEFAULT_UI
GC< Sprite > gcSprite
PointU Size