#include "dl_ui_button_sprite9.h" #ifndef DL_DISABLE_RENDER #include "render/dl_factory.h" #include "render/dl_graphics.h" namespace dl::UI { UI::ButtonSprite9* ButtonSprite9::Clone() { // 注意基类Control复制的正确性 ButtonSprite9* ret = new ButtonSprite9(*this); ret->_init_cpt_1(); for (size_t i = 0; i != _spr.size(); ++i) { ret->_spr[i] = _spr[i]->Clone(); } ret->_update_coor(); return ret; } void ButtonSprite9::_init(const std::vector& mul_spr) { for (size_t i = 0; i < (size_t)State::MAX_NUM; ++i) { if(i < mul_spr.size()) _spr[i] = mul_spr[i]; } if (!_spr[State::NORMAL]) _spr[State::NORMAL] = Sprite9::Create(""); if (!_spr[State::OVER]) _spr[State::OVER] = _spr[State::NORMAL]->Clone(); if (!_spr[State::DOWN]) _spr[State::DOWN] = _spr[State::NORMAL]->Clone(); if (!_spr[State::DISABLE]) _spr[State::DISABLE] = _spr[State::NORMAL]->Clone(); if (!_spr[State::DOWN_OVER]) _spr[State::DOWN_OVER] = _spr[State::DOWN]->Clone(); if (!_spr[State::DOWN_DISABLE]) _spr[State::DOWN_DISABLE] = _spr[State::DOWN]->Clone(); for (auto& iter : _spr) iter->SetUI(true); // _update_coor(); } void ButtonSprite9::SetSpriteRect(Button::State state, const Rect& rect) { if (state < Button::State::MAX_NUM) _spr[state]->SetRect(rect); else { for (auto& spr : _spr) spr->SetRect(rect); } _refresh_element_data(); } void ButtonSprite9::SetSpriteColor(Button::State state, const Color& color) { if (state < Button::State::MAX_NUM) _spr[state]->SetColor(color); else { for (auto& spr : _spr) spr->SetColor(color); } } void ButtonSprite9::RenderDebug() { Button::RenderDebug(); { Position p0 = {}; Position p1 = toPosition(GetSpriteCurrent()->GetSize()); g_gfx->SetCoor(GetSpriteCurrent()->GetCoor()); g_gfx->SetColor(createColor(ColorDef::PURPLE, 1.0f)); g_gfx->Rectangle2D(p0, p1); } } } #endif