diff --git a/Easy2D/Node/EButton.cpp b/Easy2D/Node/EButton.cpp index 80605aff..e80cde92 100644 --- a/Easy2D/Node/EButton.cpp +++ b/Easy2D/Node/EButton.cpp @@ -71,6 +71,7 @@ void e2d::EButton::setNormal(ENode * normal) if (normal) { this->addChild(normal); + normal->setPivot(m_fPivotX, m_fPivotY); } m_pNormal = normal; @@ -91,6 +92,7 @@ void e2d::EButton::setMouseOver(ENode * mouseover) if (mouseover) { this->addChild(mouseover); + mouseover->setPivot(m_fPivotX, m_fPivotY); } m_pMouseover = mouseover; _updateVisiable(); @@ -110,6 +112,7 @@ void e2d::EButton::setSelected(ENode * selected) if (selected) { this->addChild(selected); + selected->setPivot(m_fPivotX, m_fPivotY); } m_pSelected = selected; _updateVisiable(); @@ -129,6 +132,7 @@ void e2d::EButton::setDisabled(ENode * disabled) if (disabled) { this->addChild(disabled); + disabled->setPivot(m_fPivotX, m_fPivotY); } m_pDisabled = disabled; _updateVisiable(); @@ -152,6 +156,33 @@ void e2d::EButton::setCallback(const BUTTON_CLICK_CALLBACK & callback) m_Callback = callback; } +void e2d::EButton::setPivotX(float pivotX) +{ + ENode::setPivotX(pivotX); + if (m_pNormal) m_pNormal->setPivotX(pivotX); + if (m_pMouseover) m_pMouseover->setPivotX(pivotX); + if (m_pSelected) m_pSelected->setPivotX(pivotX); + if (m_pDisabled) m_pDisabled->setPivotX(pivotX); +} + +void e2d::EButton::setPivotY(float pivotY) +{ + ENode::setPivotY(pivotY); + if (m_pNormal) m_pNormal->setPivotY(pivotY); + if (m_pMouseover) m_pMouseover->setPivotY(pivotY); + if (m_pSelected) m_pSelected->setPivotY(pivotY); + if (m_pDisabled) m_pDisabled->setPivotY(pivotY); +} + +void e2d::EButton::setPivot(float pivotX, float pivotY) +{ + ENode::setPivot(pivotX, pivotY); + if (m_pNormal) m_pNormal->setPivot(pivotX, pivotY); + if (m_pMouseover) m_pMouseover->setPivot(pivotX, pivotY); + if (m_pSelected) m_pSelected->setPivot(pivotX, pivotY); + if (m_pDisabled) m_pDisabled->setPivot(pivotX, pivotY); +} + void e2d::EButton::_setStatus(STATUS status) { if (m_eStatus != status) diff --git a/Easy2D/enodes.h b/Easy2D/enodes.h index be56405d..515c0361 100644 --- a/Easy2D/enodes.h +++ b/Easy2D/enodes.h @@ -647,6 +647,25 @@ public: const BUTTON_CLICK_CALLBACK & callback ); + // 设置中心点的横向位置 + // 默认为 0, 范围 [0, 1] + virtual void setPivotX( + float pivotX + ) override; + + // 设置中心点的纵向位置 + // 默认为 0, 范围 [0, 1] + virtual void setPivotY( + float pivotY + ) override; + + // 设置中心点位置 + // 默认为 (0, 0), 范围 [0, 1] + virtual void setPivot( + float pivotX, + float pivotY + ) override; + protected: enum STATUS { NORMAL, MOUSEOVER, SELECTED };