12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007 |
- #ifndef __UIWIDGET_H__
- #define __UIWIDGET_H__
- #include "2d/CCProtectedNode.h"
- #include "ui/UILayoutParameter.h"
- #include "ui/GUIDefine.h"
- #include "ui/GUIExport.h"
- #include "ui/UIWidget.h"
- #include "base/CCMap.h"
- NS_CC_BEGIN
- class EventListenerTouchOneByOne;
- class Camera;
- namespace ui {
- class LayoutComponent;
- typedef enum
- {
- TOUCH_EVENT_BEGAN,
- TOUCH_EVENT_MOVED,
- TOUCH_EVENT_ENDED,
- TOUCH_EVENT_CANCELED
- }TouchEventType;
-
- typedef void (Ref::*SEL_TouchEvent)(Ref*,TouchEventType);
- #define toucheventselector(_SELECTOR) (SEL_TouchEvent)(&_SELECTOR)
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
- #ifdef ABSOLUTE
- #undef ABSOLUTE
- #endif
- #endif
- class CC_GUI_DLL Widget : public ProtectedNode, public LayoutParameterProtocol
- {
- public:
-
- enum class FocusDirection
- {
- LEFT,
- RIGHT,
- UP,
- DOWN
- };
-
-
- enum class PositionType
- {
- ABSOLUTE,
- PERCENT
- };
-
-
- enum class SizeType
- {
- ABSOLUTE,
- PERCENT
- };
-
-
- enum class TouchEventType
- {
- BEGAN,
- MOVED,
- ENDED,
- CANCELED
- };
-
-
- enum class TextureResType
- {
- LOCAL = 0,
- PLIST = 1
- };
-
-
- enum class BrightStyle
- {
- NONE = -1,
- NORMAL,
- HIGHLIGHT
- };
-
-
- typedef std::function<void(Ref*,Widget::TouchEventType)> ccWidgetTouchCallback;
-
- typedef std::function<void(Ref*)> ccWidgetClickCallback;
-
- typedef std::function<void(Ref*, int)> ccWidgetEventCallback;
-
- Widget(void);
-
-
- virtual ~Widget();
-
- static Widget* create();
-
- virtual void setEnabled(bool enabled);
-
- bool isEnabled() const;
-
- void setBright(bool bright);
-
- bool isBright() const;
-
- virtual void setTouchEnabled(bool enabled);
-
- void setBrightStyle(BrightStyle style);
-
- bool isTouchEnabled() const;
-
- bool isHighlighted() const;
-
- void setHighlighted(bool highlight);
-
- CC_DEPRECATED_ATTRIBUTE float getLeftInParent(){return this->getLeftBoundary();}
-
- float getLeftBoundary() const;
-
- CC_DEPRECATED_ATTRIBUTE float getBottomInParent(){return this->getBottomBoundary();}
-
- float getBottomBoundary() const;
-
- CC_DEPRECATED_ATTRIBUTE float getRightInParent(){return this->getRightBoundary();}
-
- float getRightBoundary() const;
-
- CC_DEPRECATED_ATTRIBUTE float getTopInParent(){return this->getTopBoundary();}
-
- float getTopBoundary() const;
-
- virtual void visit(cocos2d::Renderer *renderer, const Mat4 &parentTransform, uint32_t parentFlags) override;
-
- CC_DEPRECATED_ATTRIBUTE void addTouchEventListener(Ref* target,SEL_TouchEvent selector);
-
- void addTouchEventListener(const ccWidgetTouchCallback& callback);
-
-
- void addClickEventListener(const ccWidgetClickCallback& callback);
-
- virtual void addCCSEventListener(const ccWidgetEventCallback& callback);
-
-
- virtual void setPosition(const Vec2 &pos) override;
-
- void setPositionPercent(const Vec2 &percent);
-
- const Vec2& getPositionPercent();
-
- void setPositionType(PositionType type);
-
- PositionType getPositionType() const;
-
- virtual void setFlippedX(bool flippedX);
-
- virtual bool isFlippedX()const{return _flippedX;};
-
- virtual void setFlippedY(bool flippedY);
-
- virtual bool isFlippedY()const{return _flippedY;};
-
- CC_DEPRECATED_ATTRIBUTE bool isFlipX() { return isFlippedX(); };
-
- CC_DEPRECATED_ATTRIBUTE void setFlipX(bool flipX) { setFlippedX(flipX); };
-
- CC_DEPRECATED_ATTRIBUTE bool isFlipY() { return isFlippedY(); };
-
- CC_DEPRECATED_ATTRIBUTE void setFlipY(bool flipY) { setFlippedY(flipY); };
-
- virtual void setScaleX(float scaleX) override;
- virtual void setScaleY(float scaleY) override;
- virtual void setScale(float scale) override;
- virtual void setScale(float scalex, float scaley) override;
- using Node::setScaleZ;
- virtual float getScaleX() const override;
- virtual float getScaleY() const override;
- virtual float getScale() const override;
- using Node::getScaleZ;
-
-
- CC_DEPRECATED_ATTRIBUTE bool clippingParentAreaContainPoint(const Vec2 &pt){return this->isClippingParentContainsPoint(pt);}
-
- bool isClippingParentContainsPoint(const Vec2& pt);
-
- CC_DEPRECATED_ATTRIBUTE const Vec2& getTouchStartPos()const{return this->getTouchBeganPosition();}
-
- const Vec2& getTouchBeganPosition()const;
-
- CC_DEPRECATED_ATTRIBUTE const Vec2& getTouchMovePos()const{ return this->getTouchMovePosition();}
-
- const Vec2& getTouchMovePosition()const;
-
- CC_DEPRECATED_ATTRIBUTE const Vec2& getTouchEndPos()const{return this->getTouchEndPosition();}
-
- const Vec2& getTouchEndPosition()const;
-
- CC_DEPRECATED_ATTRIBUTE virtual void setSize(const Size &size);
-
- virtual void setContentSize(const Size& contentSize) override;
-
- virtual void setSizePercent(const Vec2 &percent);
-
- void setSizeType(SizeType type);
-
- SizeType getSizeType() const;
-
- CC_DEPRECATED_ATTRIBUTE const Size& getSize() const;
-
-
- const Size& getCustomSize() const;
-
-
- virtual const Size& getLayoutSize() {return _contentSize;};
-
- const Vec2& getSizePercent();
-
- virtual bool hitTest(const Vec2 &pt, const Camera* camera, Vec3 *p) const;
-
- virtual bool onTouchBegan(Touch *touch, Event *unusedEvent);
-
- virtual void onTouchMoved(Touch *touch, Event *unusedEvent);
-
- virtual void onTouchEnded(Touch *touch, Event *unusedEvent);
-
- virtual void onTouchCancelled(Touch *touch, Event *unusedEvent);
-
- void setLayoutParameter(LayoutParameter* parameter);
-
- LayoutParameter* getLayoutParameter()const override;
-
- CC_DEPRECATED_ATTRIBUTE LayoutParameter* getLayoutParameter(LayoutParameter::Type type);
-
- virtual void ignoreContentAdaptWithSize(bool ignore);
-
- bool isIgnoreContentAdaptWithSize() const;
-
- Vec2 getWorldPosition()const;
-
- virtual Node* getVirtualRenderer();
-
- virtual Size getVirtualRendererSize() const;
-
-
- virtual std::string getDescription() const override;
-
- Widget* clone();
-
- virtual void onEnter() override;
-
-
- virtual void onExit() override;
-
- void updateSizeAndPosition();
-
- void updateSizeAndPosition(const Size& parentSize);
-
-
- void setActionTag(int tag);
-
- int getActionTag()const;
-
-
- void setPropagateTouchEvents(bool isPropagate);
-
-
-
- bool isPropagateTouchEvents()const;
-
-
- void setSwallowTouches(bool swallow);
-
-
- bool isSwallowTouches()const;
-
-
- bool isFocused()const;
-
-
- void setFocused(bool focus);
-
-
- bool isFocusEnabled()const;
-
-
- void setFocusEnabled(bool enable);
-
-
- virtual Widget* findNextFocusedWidget(FocusDirection direction, Widget* current);
-
-
- void requestFocus();
-
- CC_DEPRECATED_ATTRIBUTE Widget* getCurrentFocusedWidget(bool isWidget);
-
- static Widget* getCurrentFocusedWidget();
-
- static void enableDpadNavigation(bool enable);
-
- std::function<void(Widget*,Widget*)> onFocusChanged;
-
- std::function<Widget*(FocusDirection)> onNextFocusedWidget;
-
-
- void setUnifySizeEnabled(bool enable);
-
- bool isUnifySizeEnabled()const;
-
- void setCallbackName(const std::string& callbackName) { _callbackName = callbackName; }
-
- const std::string& getCallbackName() const{ return _callbackName; }
-
-
- void setCallbackType(const std::string& callbackType) { _callbackType = callbackType; }
-
- const std::string& getCallbackType() const{ return _callbackType; }
-
- void setLayoutComponentEnabled(bool enable);
-
- bool isLayoutComponentEnabled()const;
- CC_CONSTRUCTOR_ACCESS:
-
- virtual bool init() override;
-
- virtual void interceptTouchEvent(TouchEventType event, Widget* sender, Touch *touch);
-
-
- void propagateTouchEvent(TouchEventType event, Widget* sender, Touch *touch);
-
- friend class PageView;
-
- void onFocusChange(Widget* widgetLostFocus, Widget* widgetGetFocus);
-
-
- void dispatchFocusEvent(Widget* widgetLoseFocus, Widget* widgetGetFocus);
-
- protected:
-
-
- GLProgramState* getNormalGLProgramState(Texture2D* texture)const;
-
-
- GLProgramState* getGrayGLProgramState(Texture2D* texture)const;
-
-
-
- virtual void onSizeChanged();
-
- virtual void initRenderer();
-
- virtual void onPressStateChangedToNormal();
-
- virtual void onPressStateChangedToPressed();
-
- virtual void onPressStateChangedToDisabled();
- void pushDownEvent();
- void moveEvent();
- virtual void releaseUpEvent();
- virtual void cancelUpEvent();
-
- virtual void adaptRenderers(){};
- void updateChildrenDisplayedRGBA();
-
- void copyProperties(Widget* model);
- virtual Widget* createCloneInstance();
- virtual void copySpecialProperties(Widget* model);
- virtual void copyClonedWidgetChildren(Widget* model);
-
- Widget* getWidgetParent();
- void updateContentSizeWithTextureSize(const Size& size);
-
- bool isAncestorsEnabled();
- Widget* getAncestorWidget(Node* node);
- bool isAncestorsVisible(Node* node);
-
- CC_DEPRECATED_ATTRIBUTE Widget* getAncensterWidget(Node* node);
- void cleanupWidget();
- LayoutComponent* getOrCreateLayoutComponent();
- protected:
- bool _usingLayoutComponent;
- bool _unifySize;
- bool _enabled;
- bool _bright;
- bool _touchEnabled;
- bool _highlight;
- bool _affectByClipping;
- bool _ignoreSize;
- bool _propagateTouchEvents;
- BrightStyle _brightStyle;
- SizeType _sizeType;
- PositionType _positionType;
-
- int _actionTag;
- Size _customSize;
- Vec2 _sizePercent;
- Vec2 _positionPercent;
- bool _hitted;
-
-
- const Camera *_hittedByCamera;
- EventListenerTouchOneByOne* _touchListener;
- Vec2 _touchBeganPosition;
- Vec2 _touchMovePosition;
- Vec2 _touchEndPosition;
- bool _flippedX;
- bool _flippedY;
-
- Map<int,LayoutParameter*> _layoutParameterDictionary;
- LayoutParameter::Type _layoutParameterType;
- bool _focused;
- bool _focusEnabled;
-
- static Widget *_focusedWidget;
- Ref* _touchEventListener;
- #if defined(__GNUC__) && ((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)))
- #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
- #elif _MSC_VER >= 1400
- #pragma warning (push)
- #pragma warning (disable: 4996)
- #endif
- SEL_TouchEvent _touchEventSelector;
- #if defined(__GNUC__) && ((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)))
- #pragma GCC diagnostic warning "-Wdeprecated-declarations"
- #elif _MSC_VER >= 1400
- #pragma warning (pop)
- #endif
- ccWidgetTouchCallback _touchEventCallback;
- ccWidgetClickCallback _clickEventListener;
- ccWidgetEventCallback _ccEventCallback;
-
- std::string _callbackType;
- std::string _callbackName;
- private:
- class FocusNavigationController;
- static FocusNavigationController* _focusNavigationController;
- };
- }
- NS_CC_END
- #endif
|