зеркало из https://github.com/microsoft/cocos2d-x.git
Merge pull request #7834 from andyque/improveUI
add click event listener to all Widget classes
This commit is contained in:
Коммит
aba973b1ea
|
@ -807,6 +807,10 @@ void Widget::releaseUpEvent()
|
|||
{
|
||||
(_touchEventListener->*_touchEventSelector)(this,TOUCH_EVENT_ENDED);
|
||||
}
|
||||
|
||||
if (_clickEventListener) {
|
||||
_clickEventListener(this);
|
||||
}
|
||||
this->release();
|
||||
}
|
||||
|
||||
|
@ -831,11 +835,16 @@ void Widget::addTouchEventListener(Ref *target, SEL_TouchEvent selector)
|
|||
_touchEventSelector = selector;
|
||||
}
|
||||
|
||||
void Widget::addTouchEventListener(Widget::ccWidgetTouchCallback callback)
|
||||
void Widget::addTouchEventListener(const ccWidgetTouchCallback& callback)
|
||||
{
|
||||
this->_touchEventCallback = callback;
|
||||
}
|
||||
|
||||
void Widget::addClickEventListener(const ccWidgetClickCallback &callback)
|
||||
{
|
||||
this->_clickEventListener = callback;
|
||||
}
|
||||
|
||||
bool Widget::hitTest(const Vec2 &pt)
|
||||
{
|
||||
Vec2 nsp = convertToNodeSpace(pt);
|
||||
|
@ -1083,6 +1092,7 @@ void Widget::copyProperties(Widget *widget)
|
|||
_touchEventCallback = widget->_touchEventCallback;
|
||||
_touchEventListener = widget->_touchEventListener;
|
||||
_touchEventSelector = widget->_touchEventSelector;
|
||||
_clickEventListener = widget->_clickEventListener;
|
||||
_focused = widget->_focused;
|
||||
_focusEnabled = widget->_focusEnabled;
|
||||
_propagateTouchEvents = widget->_propagateTouchEvents;
|
||||
|
|
|
@ -108,6 +108,7 @@ public:
|
|||
|
||||
|
||||
typedef std::function<void(Ref*,Widget::TouchEventType)> ccWidgetTouchCallback;
|
||||
typedef std::function<void(Ref*)> ccWidgetClickCallback;
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
|
@ -232,11 +233,14 @@ public:
|
|||
virtual void visit(cocos2d::Renderer *renderer, const Mat4 &parentTransform, uint32_t parentFlags) override;
|
||||
|
||||
/**
|
||||
* Sets the touch event target/selector of the menu item
|
||||
* Sets the touch event target/selector to the widget
|
||||
*/
|
||||
CC_DEPRECATED_ATTRIBUTE void addTouchEventListener(Ref* target,SEL_TouchEvent selector);
|
||||
void addTouchEventListener(ccWidgetTouchCallback callback);
|
||||
|
||||
void addTouchEventListener(const ccWidgetTouchCallback& callback);
|
||||
/**
|
||||
* Set a click event handler to the widget
|
||||
*/
|
||||
void addClickEventListener(const ccWidgetClickCallback& callback);
|
||||
|
||||
/**
|
||||
* Changes the position (x,y) of the widget in OpenGL coordinates
|
||||
|
@ -709,6 +713,7 @@ protected:
|
|||
#pragma warning (pop)
|
||||
#endif
|
||||
ccWidgetTouchCallback _touchEventCallback;
|
||||
ccWidgetClickCallback _clickEventListener;
|
||||
private:
|
||||
class FocusNavigationController;
|
||||
static FocusNavigationController* _focusNavigationController;
|
||||
|
|
|
@ -301,7 +301,6 @@ bool UIButtonTest_Title::init()
|
|||
button->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f));
|
||||
button->setTitleColor(Color3B::YELLOW);
|
||||
CCASSERT(button->getTitleColor() == Color3B::YELLOW, "Button setTitleColotr & getTitleColor not match!");
|
||||
// button->addTouchEventListener(this, toucheventselector(UIButtonTest_Title::touchEvent));
|
||||
button->addTouchEventListener(CC_CALLBACK_2(UIButtonTest_Title::touchEvent, this));
|
||||
_uiLayer->addChild(button);
|
||||
|
||||
|
@ -559,6 +558,11 @@ bool UIButtonTestZoomScale::init()
|
|||
"cocosui/animationbuttonpressed.png");
|
||||
button->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f + 20));
|
||||
button->setPressedActionEnabled(true);
|
||||
button->addClickEventListener([=](Ref* sender){
|
||||
CCLOG("Button clicked, position = (%f, %f)", button->getPosition().x,
|
||||
button->getPosition().y);
|
||||
|
||||
});
|
||||
button->setName("button");
|
||||
_uiLayer->addChild(button);
|
||||
button->setZoomScale(-0.5);
|
||||
|
|
Загрузка…
Ссылка в новой задаче