dl
dl_ui_button_sprite9.h
浏览该文件的文档.
1
12#pragma once
13
14#ifndef DL_DISABLE_RENDER
16#include "render/dl_sprite9.h"
17#include "render/dl_text.h"
18
19namespace dl::UI
20{
21
23class ButtonSprite9 : public Button
24{
25public:
33 static ButtonSprite9* Create(const std::vector<Sprite9*>& mul_spr)
34 {
35 ButtonSprite9* ret = new ButtonSprite9;
36 ret->_init(mul_spr);
39 return ret;
40 }
41
42 virtual ButtonSprite9* Clone() override;
43
44 void SetSize(const Position& size)
45 {
47 }
48
54 void SetSpriteRect(Button::State state, const Rect& rect);
61 void SetSpriteColor(Button::State state, const Color& color);
62
63 Sprite9* GetSpriteCurrent() { return _spr[GetState()]; }
64
65 virtual bool IsPickup() override
66 {
67 return _spr[GetState()]->IsPickup();
68 }
69 virtual void SetOrder(float order) override
70 {
71 for (auto& spr : _spr)
72 spr->SetOrder(Math::OffsetOrder(order, 0, 0, 0));
73 UpdateTextOrder(order);
74 }
75 virtual float GetOrder() override
76 {
77 return _spr[0]->GetOrder();
78 }
79 virtual Position GetSize() override { return toPosition(_spr[GetState()]->GetSize()); }
80 virtual Position GetAnchor() override { return _spr[GetState()]->GetAnchor(); }
81 virtual void RenderDebug() override;
82
84 {
85 for (auto& iter : _spr)
86 delete iter;
87 }
88private:
90 _spr{}
91 {
92 _init_cpt_1();
93 }
94
95 void _init_cpt_1()
96 {
97 _cptSetSize = std::bind(&ButtonSprite9::SetSize, this, std::placeholders::_1);
98 GetCpt()->PushBack(&_cptSetSize);
99 }
100
101 void _init(const std::vector<Sprite9*>& mul_spr);
102
103 ArrayEnum<Sprite9*, Button::State::MAX_NUM> _spr;
104
105 Cpt::SetSize _cptSetSize;
106
107 virtual void UpdateChild(State state_pre, State state) override
108 {
109 Button::UpdateChild(state_pre, state);
110 }
111 virtual void RenderChild(State state_pre, State state) override
112 {
113 Button::RenderChild(state_pre, state);
114 _spr[state]->Render();
115 }
116 virtual void OnTextSizeChange(const Position& size) override
117 {
119 createRect(size));
120 }
121
122 void _update_coor()
123 {
124 for (auto& iter : _spr)
125 {
126 iter->GetCoor()->SetParent(_coor);
127 }
128 }
129};
130
131}
132
133#endif
void PushBack(AnyType any)
添加一个任意对象
九图精灵
virtual void UpdateChild(State state_pre, State state)
重载此函数,制定控件行为
void UpdateTextOrder(float order)
order变化时需要调用
virtual void RenderChild(State state_pre, State state)
static ButtonSprite9 * Create(const std::vector< Sprite9 * > &mul_spr)
精灵组成的按钮
virtual void RenderDebug() override
void SetSpriteRect(Button::State state, const Rect &rect)
设置精灵quad
virtual bool IsPickup() override
virtual Position GetSize() override
virtual ButtonSprite9 * Clone() override
必须实现的函数
void SetSize(const Position &size)
virtual float GetOrder() override
virtual Position GetAnchor() override
virtual void SetOrder(float order) override
void SetSpriteColor(Button::State state, const Color &color)
设置精灵颜色
九图精灵
文本绘制
UI系统之按钮基类
Function< std::function< void(const Position &size)>, str_uid("SetSize")> SetSize
设置大小
constexpr float OffsetOrder(float order, int u=1, int v=0, int w=0)
偏移order
Position2 Position
constexpr Array< Position::value_type, N > toPosition(const Array< T, N > &a)
转换到Position,已知长度
constexpr float Z_DEFAULT_UI
constexpr Rect createRect(const Size &size)
创建一个Rect,依据大小
Array< float, 4 > Color
Point4 Rect