520389e3
xiaoyu
接入cocos源码,编译未通过,继续修改
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
|
/****************************************************************************
Copyright (c) 2013-2016 Chukong Technologies Inc.
Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
http://www.cocos2d-x.org
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
#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"
/**
* @addtogroup ui
* @{
*/
NS_CC_BEGIN
class EventListenerTouchOneByOne;
class Camera;
namespace ui {
class LayoutComponent;
/**
*@brief Base class for all ui widgets.
* This class inherent from `ProtectedNode` and `LayoutParameterProtocol`.
* If you want to implements your own ui widget, you should subclass it.
*/
class CC_GUI_DLL Widget : public ProtectedNode, public LayoutParameterProtocol
{
public:
/**
* Widget focus direction.
*/
enum class FocusDirection
{
LEFT,
RIGHT,
UP,
DOWN
};
/**
* Widget position type for layout.
*/
enum class PositionType
{
ABSOLUTE,
PERCENT
};
/**
* Widget size type for layout.
*/
enum class SizeType
{
ABSOLUTE,
PERCENT
};
/**
* Touch event type.
*/
enum class TouchEventType
{
BEGAN,
MOVED,
ENDED,
CANCELED
};
/**
* Texture resource type.
* - LOCAL: It means the texture is loaded from image.
* - PLIST: It means the texture is loaded from texture atlas.
*/
enum class TextureResType
{
LOCAL = 0,
PLIST = 1
};
/**
* Widget bright style.
*/
enum class BrightStyle
{
NONE = -1,
NORMAL,
HIGHLIGHT
};
/**
* Widget touch event callback.
*/
typedef std::function<void(Ref*,Widget::TouchEventType)> ccWidgetTouchCallback;
/**
* Widget click event callback.
*/
typedef std::function<void(Ref*)> ccWidgetClickCallback;
/**
* Widget custom event callback.
* It is mainly used together with Cocos Studio.
*/
typedef std::function<void(Ref*, int)> ccWidgetEventCallback;
/**
* Default constructor
* @js ctor
* @lua new
*/
Widget();
/**
* Default destructor
* @js NA
* @lua NA
*/
virtual ~Widget();
/**
* Create and return a empty Widget instance pointer.
*/
static Widget* create();
/**
* Sets whether the widget is enabled
*
* true if the widget is enabled, widget may be touched , false if the widget is disabled, widget cannot be touched.
*
* Note: If you want to change the widget's appearance to disabled state, you should also call `setBright(false)`.
*
* The default value is true, a widget is default to enable touch.
*
* @param enabled Set to true to enable touch, false otherwise.
*/
virtual void setEnabled(bool enabled);
/**
* Determines if the widget is enabled or not.
*
* @return true if the widget is enabled, false if the widget is disabled.
*/
bool isEnabled() const;
/**
* Sets whether the widget is bright
*
* The default value is true, a widget is default to bright
*
* @param bright true if the widget is bright, false if the widget is dark.
*/
void setBright(bool bright);
/**
* Determines if the widget is bright
*
* @return true if the widget is bright, false if the widget is dark.
*/
bool isBright() const;
/**
* Sets whether the widget is touch enabled.
*
* The default value is false, a widget is default to touch disabled.
*
* @param enabled True if the widget is touch enabled, false if the widget is touch disabled.
*/
virtual void setTouchEnabled(bool enabled);
/**
* To set the bright style of widget.
*
* @see BrightStyle
*
* @param style BrightStyle::NORMAL means the widget is in normal state, BrightStyle::HIGHLIGHT means the widget is in highlight state.
*/
void setBrightStyle(BrightStyle style);
/**
* Determines if the widget is touch enabled
*
* @return true if the widget is touch enabled, false if the widget is touch disabled.
*/
bool isTouchEnabled() const;
/**
* Determines if the widget is highlighted
*
* @return true if the widget is highlighted, false if the widget is not highlighted.
*/
bool isHighlighted() const;
/**
* Sets whether the widget is highlighted
*
* The default value is false, a widget is default to not highlighted
*
* @param highlight true if the widget is highlighted, false if the widget is not highlighted.
*/
void setHighlighted(bool highlight);
/**
* Gets the left boundary position of this widget in parent's coordination system.
* @return The left boundary position of this widget.
*/
float getLeftBoundary() const;
/**
* Gets the bottom boundary position of this widget in parent's coordination system.
* @return The bottom boundary position of this widget.
*/
float getBottomBoundary() const;
/**
* Gets the right boundary position of this widget in parent's coordination system.
* @return The right boundary position of this widget.
*/
float getRightBoundary() const;
/**
* Gets the top boundary position of this widget in parent's coordination system.
* @return The top boundary position of this widget.
*/
float getTopBoundary() const;
/**
* @js NA
*/
virtual void visit(cocos2d::Renderer *renderer, const Mat4 &parentTransform, uint32_t parentFlags) override;
/**
* Set a callback to touch vent listener.
*@param callback The callback in `ccWidgetEventCallback.`
*/
void addTouchEventListener(const ccWidgetTouchCallback& callback);
/**
* Set a click event handler to the widget.
* @param callback The callback in `ccWidgetClickCallback`.
*/
void addClickEventListener(const ccWidgetClickCallback& callback);
/**
* Set a event handler to the widget in order to use cocostudio editor and framework
* @param callback The callback in `ccWidgetEventCallback`.
* @lua NA
*/
virtual void addCCSEventListener(const ccWidgetEventCallback& callback);
/**/
/**
* Changes the position (x,y) of the widget in OpenGL coordinates
*
* Usually we use p(x,y) to compose a Vec2 object.
* The original point (0,0) is at the left-bottom corner of screen.
*
* @param pos The position (x,y) of the widget in OpenGL coordinates
*/
virtual void setPosition(const Vec2 &pos) override;
/**
* Set the percent(x,y) of the widget in OpenGL coordinates
*
* @param percent The percent (x,y) of the widget in OpenGL coordinates
*/
void setPositionPercent(const Vec2 &percent);
/**
* Gets the percent (x,y) of the widget in OpenGL coordinates
*
* @see setPosition(const Vec2&)
*
* @return The percent (x,y) of the widget in OpenGL coordinates
*/
const Vec2& getPositionPercent();
/**
* Changes the position type of the widget
*
* @see `PositionType`
*
* @param type the position type of widget
*/
void setPositionType(PositionType type);
/**
* Gets the position type of the widget
*
* @see `PositionType`
*
* @return type the position type of widget
*/
PositionType getPositionType() const;
/**
* Sets whether the widget should be flipped horizontally or not.
*
* @param flippedX true if the widget should be flipped horizontally, false otherwise.
*/
virtual void setFlippedX(bool flippedX);
/**
* Returns the flag which indicates whether the widget is flipped horizontally or not.
*
* It not only flips the texture of the widget, but also the texture of the widget's children.
* Also, flipping relies on widget's anchor point.
* Internally, it just use setScaleX(-1) to flip the widget.
*
* @return true if the widget is flipped horizontally, false otherwise.
*/
virtual bool isFlippedX()const{return _flippedX;};
/**
* Sets whether the widget should be flipped vertically or not.
*
* @param flippedY true if the widget should be flipped vertically, false otherwise.
*/
virtual void setFlippedY(bool flippedY);
/**
* Return the flag which indicates whether the widget is flipped vertically or not.
*
* It not only flips the texture of the widget, but also the texture of the widget's children.
* Also, flipping relies on widget's anchor point.
* Internally, it just use setScaleY(-1) to flip the widget.
*
* @return true if the widget is flipped vertically, false otherwise.
*/
virtual bool isFlippedY()const{return _flippedY;};
//override the setScale function of Node
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;
/**
* Checks a point if in parent's area.
*
* @param pt A point in `Vec2`.
* @return true if the point is in parent's area, false otherwise.
*/
bool isClippingParentContainsPoint(const Vec2& pt);
/**
* Gets the touch began point of widget when widget is selected.
* @return the touch began point.
*/
const Vec2& getTouchBeganPosition()const;
/*
* Gets the touch move point of widget when widget is selected.
* @return the touch move point.
*/
const Vec2& getTouchMovePosition()const;
/*
* Gets the touch end point of widget when widget is selected.
* @return the touch end point.
*/
const Vec2& getTouchEndPosition()const;
/**
* Changes the size that is widget's size
* @param contentSize A content size in `Size`.
*/
virtual void setContentSize(const Size& contentSize) override;
/**
* Changes the percent that is widget's percent size
*
* @param percent that is widget's percent size
*/
virtual void setSizePercent(const Vec2 &percent);
/**
* Changes the size type of widget.
*
* @see `SizeType`
*
* @param type that is widget's size type
*/
void setSizeType(SizeType type);
/**
* Gets the size type of widget.
*
* @see `SizeType`
*/
SizeType getSizeType() const;
/**
* Get the user defined widget size.
*@return User defined size.
*/
const Size& getCustomSize() const;
/**
* Get the content size of widget.
* @warning This API exists mainly for keeping back compatibility.
* @return
*/
virtual const Size& getLayoutSize() {return _contentSize;};
/**
* Get size percent of widget.
*
* @return Percent size.
*/
const Vec2& getSizePercent();
/**
* Checks a point is in widget's content space.
* This function is used for determining touch area of widget.
*
* @param pt The point in `Vec2`.
* @param camera The camera look at widget, used to convert GL screen point to near/far plane.
* @param p Point to a Vec3 for store the intersect point, if don't need them set to nullptr.
* @return true if the point is in widget's content space, false otherwise.
*/
virtual bool hitTest(const Vec2 &pt, const Camera* camera, Vec3 *p) const;
/**
* A callback which will be called when touch began event is issued.
*@param touch The touch info.
*@param unusedEvent The touch event info.
*@return True if user want to handle touches, false otherwise.
*/
virtual bool onTouchBegan(Touch *touch, Event *unusedEvent);
/**
* A callback which will be called when touch moved event is issued.
*@param touch The touch info.
*@param unusedEvent The touch event info.
*/
virtual void onTouchMoved(Touch *touch, Event *unusedEvent);
/**
* A callback which will be called when touch ended event is issued.
*@param touch The touch info.
*@param unusedEvent The touch event info.
*/
virtual void onTouchEnded(Touch *touch, Event *unusedEvent);
/**
* A callback which will be called when touch cancelled event is issued.
*@param touch The touch info.
*@param unusedEvent The touch event info.
*/
virtual void onTouchCancelled(Touch *touch, Event *unusedEvent);
/**
* Sets a LayoutParameter to widget.
*
* @see LayoutParameter
* @param parameter LayoutParameter pointer
*/
void setLayoutParameter(LayoutParameter* parameter);
/**
* Gets LayoutParameter of widget.
*
* @see LayoutParameter
* @return LayoutParameter
*/
LayoutParameter* getLayoutParameter()const override;
/**
* Toggle whether ignore user defined content size for widget.
* Set true will ignore user defined content size which means
* the widget size is always equal to the return value of `getVirtualRendererSize`.
*
* @param ignore set member variable _ignoreSize to ignore
*/
virtual void ignoreContentAdaptWithSize(bool ignore);
/**
* Query whether the widget ignores user defined content size or not
*
* @return True means ignore user defined content size, false otherwise.
*/
bool isIgnoreContentAdaptWithSize() const;
/**
* Gets position of widget in world space.
*
* @return Position of widget in world space.
*/
Vec2 getWorldPosition()const;
/**
* Gets the inner Renderer node of widget.
*
* For example, a button's Virtual Renderer is it's texture renderer.
*
* @return Node pointer.
*/
virtual Node* getVirtualRenderer();
/**
* Get the virtual renderer's size
*@return Widget virtual renderer size.
*/
virtual Size getVirtualRendererSize() const;
/**
* Returns the string representation of widget class name
* @return get the class description.
*/
virtual std::string getDescription() const override;
/**
* Create a new widget copy of the original one.
* @return A cloned widget copy of original.
*/
Widget* clone();
/**
* @lua NA
*/
virtual void onEnter() override;
/**
* @lua NA
*/
virtual void onExit() override;
/**
* Update all children's contents size and position recursively.
* @see `updateSizeAndPosition(const Size&)`
*/
void updateSizeAndPosition();
/**
* Update all children's contents size and position recursively.
*/
void updateSizeAndPosition(const Size& parentSize);
/**
* Set the tag of action.
*@param tag A integer tag value.
*/
void setActionTag(int tag);
/**
* Get the action tag.
*@return Action tag.
*/
int getActionTag()const;
/**
* @brief Allow widget touch events to propagate to its parents. Set false will disable propagation
* @param isPropagate True to allow propagation, false otherwise.
* @since v3.3
*/
void setPropagateTouchEvents(bool isPropagate);
/**
* Return whether the widget is propagate touch events to its parents or not
* @return whether touch event propagation is allowed or not.
* @since v3.3
*/
bool isPropagateTouchEvents()const;
/**
* Toggle widget swallow touch option.
* @brief Specify widget to swallow touches or not
* @param swallow True to swallow touch, false otherwise.
* @since v3.3
*/
void setSwallowTouches(bool swallow);
/**
* Return whether the widget is swallowing touch or not
* @return Whether touch is swallowed.
* @since v3.3
*/
bool isSwallowTouches()const;
/**
* Query whether widget is focused or not.
*@return whether the widget is focused or not
*/
bool isFocused()const;
/**
* Toggle widget focus status.
*@param focus pass true to let the widget get focus or pass false to let the widget lose focus
*/
void setFocused(bool focus);
/**
* Query widget's focus enable state.
*@return true represent the widget could accept focus, false represent the widget couldn't accept focus
*/
bool isFocusEnabled()const;
/**
* Allow widget to accept focus.
*@param enable pass true/false to enable/disable the focus ability of a widget
*/
void setFocusEnabled(bool enable);
/**
* When a widget is in a layout, you could call this method to get the next focused widget within a specified direction.
* If the widget is not in a layout, it will return itself
*@param direction the direction to look for the next focused widget in a layout
*@param current the current focused widget
*@return the next focused widget in a layout
*/
virtual Widget* findNextFocusedWidget(FocusDirection direction, Widget* current);
/**
* when a widget calls this method, it will get focus immediately.
*/
void requestFocus();
/**
* Return a current focused widget in your UI scene.
* No matter what widget object you call this method on , it will return you the exact one focused widget.
*/
static Widget* getCurrentFocusedWidget();
/*
* Call this method with parameter true to enable the Android Dpad focus navigation feature
*@param enable set true to enable dpad focus navigation, otherwise disenable dpad focus navigation
*/
static void enableDpadNavigation(bool enable);
/**
* When a widget lose/get focus, this method will be called. Be Caution when you provide your own version,
* you must call widget->setFocused(true/false) to change the focus state of the current focused widget;
*/
std::function<void(Widget*,Widget*)> onFocusChanged;
/**
* use this function to manually specify the next focused widget regards to each direction
*/
std::function<Widget*(FocusDirection)> onNextFocusedWidget;
/**
*Toggle use unify size.
*@param enable True to use unify size, false otherwise.
*/
void setUnifySizeEnabled(bool enable);
/**
* Query whether unify size enable state.
*@return true represent the widget use Unify Size, false represent the widget couldn't use Unify Size
*/
bool isUnifySizeEnabled()const;
/**
* Set callback name.
*@param callbackName A string representation of callback name.
*/
void setCallbackName(const std::string& callbackName) { _callbackName = callbackName; }
/**
* Query callback name.
*@return The callback name.
*/
const std::string& getCallbackName() const{ return _callbackName; }
/**
* Set callback type.
* @param callbackType A string representation of callback type.
*/
void setCallbackType(const std::string& callbackType) { _callbackType = callbackType; }
/**
* Query callback type.
*@return Callback type string.
*/
const std::string& getCallbackType() const{ return _callbackType; }
/**
* Toggle layout component enable.
*@param enable Layout Component of a widget
*/
void setLayoutComponentEnabled(bool enable);
/**
* Query whether layout component is enabled or not.
*@return true represent the widget use Layout Component, false represent the widget couldn't use Layout Component.
*/
bool isLayoutComponentEnabled()const;
CC_CONSTRUCTOR_ACCESS:
friend class PageView;
//initializes state of widget.
virtual bool init() override;
/*
* @brief Sends the touch event to widget's parent, if a widget wants to handle touch event under another widget,
* it must override this function.
* @param event the touch event type, it could be BEGAN/MOVED/CANCELED/ENDED
* @param parent
* @param point
*/
virtual void interceptTouchEvent(TouchEventType event, Widget* sender, Touch *touch);
/**
*@brief Propagate touch events to its parents
*/
void propagateTouchEvent(TouchEventType event, Widget* sender, Touch *touch);
/**
* This method is called when a focus change event happens
*@param widgetLostFocus The widget which lose its focus
*@param widgetGetFocus The widget which get its focus
*/
void onFocusChange(Widget* widgetLostFocus, Widget* widgetGetFocus);
/**
* Dispatch a EventFocus through a EventDispatcher
*@param widgetLoseFocus The widget which lose its focus
*@param widgetGetFocus he widget which get its focus
*/
void dispatchFocusEvent(Widget* widgetLoseFocus, Widget* widgetGetFocus);
protected:
//call back function called when size changed.
virtual void onSizeChanged();
//initializes renderer of widget.
virtual void initRenderer();
//call back function called widget's state changed to normal.
virtual void onPressStateChangedToNormal();
//call back function called widget's state changed to selected.
virtual void onPressStateChangedToPressed();
//call back function called widget's state changed to dark.
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);
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;
//used for search widget by action tag in UIHelper class
int _actionTag;
Size _customSize;
Vec2 _sizePercent;
Vec2 _positionPercent;
bool _hitted;
// weak reference of the camera which made the widget passed the hit test when response touch begin event
// it's useful in the next touch move/end events
const Camera *_hittedByCamera;
EventListenerTouchOneByOne* _touchListener;
Vec2 _touchBeganPosition;
Vec2 _touchMovePosition;
Vec2 _touchEndPosition;
bool _flippedX;
bool _flippedY;
//use map to enable switch back and forth for user layout parameters
Map<int,LayoutParameter*> _layoutParameterDictionary;
LayoutParameter::Type _layoutParameterType;
bool _focused;
bool _focusEnabled;
/**
* store the only one focused widget
*/
static Widget *_focusedWidget; //both layout & widget will be stored in this variable
Ref* _touchEventListener;
ccWidgetTouchCallback _touchEventCallback;
ccWidgetClickCallback _clickEventListener;
ccWidgetEventCallback _ccEventCallback;
std::string _callbackType;
std::string _callbackName;
private:
class FocusNavigationController;
static FocusNavigationController* _focusNavigationController;
};
}
NS_CC_END
// end of ui group
/// @}
#endif /* defined(__Widget__) */
|