ui_sprite改进

This commit is contained in:
2026-09-07 14:55:46 +08:00
parent dc40ac8424
commit 2aff5bf2f8
3 changed files with 33 additions and 5 deletions
+23 -4
View File
@@ -69,15 +69,16 @@ void Sprite::SetMode(AutoSize auto_size, FillMode mode)
_cptElemData._size = _spr->GetSize();
}
void Sprite::SetElementData(const Align::Direction2& hv)
void Sprite::SetElementData(const Align::Direction2& hv, const Position& pos)
{
_cptElemData._size = GetSize();
_cptElemData._anchor = {};
_cptElemData._hv = hv;
_cptElemData._pos = pos;
//在组内则更新位置
//if (_panel)
// _panel->OnChangeElementData(&_cpt);
// 在组内则更新位置
if (_panel)
_panel->OnChangeElementData(&_cpt);
}
void Sprite::SetEDOrderOffset(int order_offset)
@@ -85,6 +86,24 @@ void Sprite::SetEDOrderOffset(int order_offset)
_cptElemData._orderOffset = order_offset;
}
void Sprite::SetSprite(gcSprite spr)
{
// 复用创建时的逻辑:为新精灵创建独立Coor并设置UI标记
if (!spr->IsOwnCoor())
{
Coor* coor = Coor::Create(spr->GetCoor());
spr->SetCoor(coor, true);
}
// 沿用原有绘制层级
spr->SetOrder(_spr->GetOrder());
_spr = spr;
_spr->SetUI(true);
SetMode(_autoSize, _fillMode);
// 已加入面板时,重新定位新精灵的Coor(原Coor随旧精灵被替换,AddCpt不会再次处理)
if (_panel)
_panel->OnChangeElementData(&_cpt);
}
}
#endif
+8 -1
View File
@@ -95,6 +95,13 @@ public:
Coor* GetCoor() { return _spr->GetCoor(); }
gcSprite GetSprite() { return _spr; }
/**
* @brief 更换显示的精灵
* @param[in] spr 新的精灵
* @note 复用创建时的逻辑设置Coor与UI标记,并沿用当前的AutoSize/FillMode与绘制层级
*/
void SetSprite(gcSprite spr);
/**
* @brief 设置显示模式
* @note 注释参考Create
@@ -108,7 +115,7 @@ public:
return _spr->GetSize();
}
void SetElementData(const Align::Direction2& hv);
void SetElementData(const Align::Direction2& hv, const Position& pos = {});
void SetEDOrderOffset(int order_offset);
void SetVisible(bool visible)
+2
View File
@@ -83,6 +83,8 @@ public:
gcText GetText() { return _txt; }
void SetElementData(const Align::Direction2& hv, const Position& pos = {});
Components* GetCpt() { return &_cpt; }
private:
Text() :