mirror of https://github.com/axmolengine/axmol.git
Merge pull request #6894 from andyque/refactor5183
refactor Layout, LayoutParameter and LayoutExecutant
This commit is contained in:
commit
75cb686573
|
@ -944,8 +944,6 @@
|
||||||
2905FA6F18CF08D100240AA3 /* UIRichText.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2905FA0418CF08D000240AA3 /* UIRichText.cpp */; };
|
2905FA6F18CF08D100240AA3 /* UIRichText.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2905FA0418CF08D000240AA3 /* UIRichText.cpp */; };
|
||||||
2905FA7018CF08D100240AA3 /* UIRichText.h in Headers */ = {isa = PBXBuildFile; fileRef = 2905FA0518CF08D000240AA3 /* UIRichText.h */; };
|
2905FA7018CF08D100240AA3 /* UIRichText.h in Headers */ = {isa = PBXBuildFile; fileRef = 2905FA0518CF08D000240AA3 /* UIRichText.h */; };
|
||||||
2905FA7118CF08D100240AA3 /* UIRichText.h in Headers */ = {isa = PBXBuildFile; fileRef = 2905FA0518CF08D000240AA3 /* UIRichText.h */; };
|
2905FA7118CF08D100240AA3 /* UIRichText.h in Headers */ = {isa = PBXBuildFile; fileRef = 2905FA0518CF08D000240AA3 /* UIRichText.h */; };
|
||||||
2905FA7218CF08D100240AA3 /* UIScrollInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 2905FA0618CF08D000240AA3 /* UIScrollInterface.h */; };
|
|
||||||
2905FA7318CF08D100240AA3 /* UIScrollInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 2905FA0618CF08D000240AA3 /* UIScrollInterface.h */; };
|
|
||||||
2905FA7418CF08D100240AA3 /* UIScrollView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2905FA0718CF08D000240AA3 /* UIScrollView.cpp */; };
|
2905FA7418CF08D100240AA3 /* UIScrollView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2905FA0718CF08D000240AA3 /* UIScrollView.cpp */; };
|
||||||
2905FA7518CF08D100240AA3 /* UIScrollView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2905FA0718CF08D000240AA3 /* UIScrollView.cpp */; };
|
2905FA7518CF08D100240AA3 /* UIScrollView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2905FA0718CF08D000240AA3 /* UIScrollView.cpp */; };
|
||||||
2905FA7618CF08D100240AA3 /* UIScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2905FA0818CF08D000240AA3 /* UIScrollView.h */; };
|
2905FA7618CF08D100240AA3 /* UIScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2905FA0818CF08D000240AA3 /* UIScrollView.h */; };
|
||||||
|
@ -975,6 +973,12 @@
|
||||||
2905FA8E18CF08D100240AA3 /* UIWidget.h in Headers */ = {isa = PBXBuildFile; fileRef = 2905FA1418CF08D100240AA3 /* UIWidget.h */; };
|
2905FA8E18CF08D100240AA3 /* UIWidget.h in Headers */ = {isa = PBXBuildFile; fileRef = 2905FA1418CF08D100240AA3 /* UIWidget.h */; };
|
||||||
2905FA8F18CF08D100240AA3 /* UIWidget.h in Headers */ = {isa = PBXBuildFile; fileRef = 2905FA1418CF08D100240AA3 /* UIWidget.h */; };
|
2905FA8F18CF08D100240AA3 /* UIWidget.h in Headers */ = {isa = PBXBuildFile; fileRef = 2905FA1418CF08D100240AA3 /* UIWidget.h */; };
|
||||||
2986667F18B1B246000E39CA /* CCTweenFunction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2986667818B1B079000E39CA /* CCTweenFunction.cpp */; };
|
2986667F18B1B246000E39CA /* CCTweenFunction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2986667818B1B079000E39CA /* CCTweenFunction.cpp */; };
|
||||||
|
29CB8F4C1929D1BB00C841D6 /* UILayoutExecutant.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29CB8F4A1929D1BB00C841D6 /* UILayoutExecutant.cpp */; };
|
||||||
|
29CB8F4D1929D1BB00C841D6 /* UILayoutExecutant.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29CB8F4A1929D1BB00C841D6 /* UILayoutExecutant.cpp */; };
|
||||||
|
29CB8F4E1929D1BB00C841D6 /* UILayoutExecutant.h in Headers */ = {isa = PBXBuildFile; fileRef = 29CB8F4B1929D1BB00C841D6 /* UILayoutExecutant.h */; };
|
||||||
|
29CB8F4F1929D1BB00C841D6 /* UILayoutExecutant.h in Headers */ = {isa = PBXBuildFile; fileRef = 29CB8F4B1929D1BB00C841D6 /* UILayoutExecutant.h */; };
|
||||||
|
29CB8F551929D7A900C841D6 /* UIScrollInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 29CB8F541929D7A900C841D6 /* UIScrollInterface.h */; };
|
||||||
|
29CB8F561929D7A900C841D6 /* UIScrollInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 29CB8F541929D7A900C841D6 /* UIScrollInterface.h */; };
|
||||||
2AC795DB1862870F005EC8E1 /* SkeletonBounds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2AC795D918628689005EC8E1 /* SkeletonBounds.cpp */; };
|
2AC795DB1862870F005EC8E1 /* SkeletonBounds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2AC795D918628689005EC8E1 /* SkeletonBounds.cpp */; };
|
||||||
2AC795DC1862870F005EC8E1 /* Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2AC795D51862867D005EC8E1 /* Event.cpp */; };
|
2AC795DC1862870F005EC8E1 /* Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2AC795D51862867D005EC8E1 /* Event.cpp */; };
|
||||||
2AC795DD1862870F005EC8E1 /* EventData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2AC795D71862867D005EC8E1 /* EventData.cpp */; };
|
2AC795DD1862870F005EC8E1 /* EventData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2AC795D71862867D005EC8E1 /* EventData.cpp */; };
|
||||||
|
@ -2235,7 +2239,6 @@
|
||||||
2905FA0318CF08D000240AA3 /* UIPageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIPageView.h; sourceTree = "<group>"; };
|
2905FA0318CF08D000240AA3 /* UIPageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIPageView.h; sourceTree = "<group>"; };
|
||||||
2905FA0418CF08D000240AA3 /* UIRichText.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UIRichText.cpp; sourceTree = "<group>"; };
|
2905FA0418CF08D000240AA3 /* UIRichText.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UIRichText.cpp; sourceTree = "<group>"; };
|
||||||
2905FA0518CF08D000240AA3 /* UIRichText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIRichText.h; sourceTree = "<group>"; };
|
2905FA0518CF08D000240AA3 /* UIRichText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIRichText.h; sourceTree = "<group>"; };
|
||||||
2905FA0618CF08D000240AA3 /* UIScrollInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIScrollInterface.h; sourceTree = "<group>"; };
|
|
||||||
2905FA0718CF08D000240AA3 /* UIScrollView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UIScrollView.cpp; sourceTree = "<group>"; };
|
2905FA0718CF08D000240AA3 /* UIScrollView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UIScrollView.cpp; sourceTree = "<group>"; };
|
||||||
2905FA0818CF08D000240AA3 /* UIScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIScrollView.h; sourceTree = "<group>"; };
|
2905FA0818CF08D000240AA3 /* UIScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIScrollView.h; sourceTree = "<group>"; };
|
||||||
2905FA0918CF08D000240AA3 /* UISlider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UISlider.cpp; sourceTree = "<group>"; };
|
2905FA0918CF08D000240AA3 /* UISlider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UISlider.cpp; sourceTree = "<group>"; };
|
||||||
|
@ -2253,6 +2256,9 @@
|
||||||
29080DEB191B82CE0066F8DF /* UIDeprecated.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIDeprecated.h; sourceTree = "<group>"; };
|
29080DEB191B82CE0066F8DF /* UIDeprecated.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIDeprecated.h; sourceTree = "<group>"; };
|
||||||
2986667818B1B079000E39CA /* CCTweenFunction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CCTweenFunction.cpp; sourceTree = "<group>"; };
|
2986667818B1B079000E39CA /* CCTweenFunction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CCTweenFunction.cpp; sourceTree = "<group>"; };
|
||||||
2986667918B1B079000E39CA /* CCTweenFunction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCTweenFunction.h; sourceTree = "<group>"; };
|
2986667918B1B079000E39CA /* CCTweenFunction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCTweenFunction.h; sourceTree = "<group>"; };
|
||||||
|
29CB8F4A1929D1BB00C841D6 /* UILayoutExecutant.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UILayoutExecutant.cpp; sourceTree = "<group>"; };
|
||||||
|
29CB8F4B1929D1BB00C841D6 /* UILayoutExecutant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UILayoutExecutant.h; sourceTree = "<group>"; };
|
||||||
|
29CB8F541929D7A900C841D6 /* UIScrollInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIScrollInterface.h; sourceTree = "<group>"; };
|
||||||
2AC795D318628672005EC8E1 /* BoundingBoxAttachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BoundingBoxAttachment.cpp; sourceTree = "<group>"; };
|
2AC795D318628672005EC8E1 /* BoundingBoxAttachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BoundingBoxAttachment.cpp; sourceTree = "<group>"; };
|
||||||
2AC795D418628672005EC8E1 /* BoundingBoxAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BoundingBoxAttachment.h; sourceTree = "<group>"; };
|
2AC795D418628672005EC8E1 /* BoundingBoxAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BoundingBoxAttachment.h; sourceTree = "<group>"; };
|
||||||
2AC795D51862867D005EC8E1 /* Event.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Event.cpp; sourceTree = "<group>"; };
|
2AC795D51862867D005EC8E1 /* Event.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Event.cpp; sourceTree = "<group>"; };
|
||||||
|
@ -3902,23 +3908,63 @@
|
||||||
2905F9E618CF08D000240AA3 /* ui */ = {
|
2905F9E618CF08D000240AA3 /* ui */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
3EA0FB69191C841D00B170C8 /* UIVideoPlayer.h */,
|
29CB8F531929D67D00C841D6 /* widgets */,
|
||||||
3EA0FB6A191C841D00B170C8 /* UIVideoPlayerIOS.mm */,
|
29CB8F521929D65500C841D6 /* experimental */,
|
||||||
|
29CB8F511929D64500C841D6 /* base */,
|
||||||
|
29CB8F501929D63600C841D6 /* layout */,
|
||||||
2905F9E918CF08D000240AA3 /* CocosGUI.cpp */,
|
2905F9E918CF08D000240AA3 /* CocosGUI.cpp */,
|
||||||
2905F9EA18CF08D000240AA3 /* CocosGUI.h */,
|
2905F9EA18CF08D000240AA3 /* CocosGUI.h */,
|
||||||
2905F9EB18CF08D000240AA3 /* GUIDefine.h */,
|
);
|
||||||
2905F9F018CF08D000240AA3 /* UIButton.cpp */,
|
name = ui;
|
||||||
2905F9F118CF08D000240AA3 /* UIButton.h */,
|
path = ../cocos/ui;
|
||||||
2905F9F218CF08D000240AA3 /* UICheckBox.cpp */,
|
sourceTree = "<group>";
|
||||||
2905F9F318CF08D000240AA3 /* UICheckBox.h */,
|
};
|
||||||
2905F9F418CF08D000240AA3 /* UIHelper.cpp */,
|
29CB8F501929D63600C841D6 /* layout */ = {
|
||||||
2905F9F518CF08D000240AA3 /* UIHelper.h */,
|
isa = PBXGroup;
|
||||||
2905F9F618CF08D000240AA3 /* UIImageView.cpp */,
|
children = (
|
||||||
2905F9F718CF08D000240AA3 /* UIImageView.h */,
|
50E6D32E18E174130051CA34 /* UIHBox.cpp */,
|
||||||
|
50E6D32F18E174130051CA34 /* UIHBox.h */,
|
||||||
|
50E6D33018E174130051CA34 /* UIRelativeBox.cpp */,
|
||||||
|
50E6D33118E174130051CA34 /* UIRelativeBox.h */,
|
||||||
|
50E6D33218E174130051CA34 /* UIVBox.cpp */,
|
||||||
|
50E6D33318E174130051CA34 /* UIVBox.h */,
|
||||||
2905F9F818CF08D000240AA3 /* UILayout.cpp */,
|
2905F9F818CF08D000240AA3 /* UILayout.cpp */,
|
||||||
2905F9F918CF08D000240AA3 /* UILayout.h */,
|
2905F9F918CF08D000240AA3 /* UILayout.h */,
|
||||||
2905F9FC18CF08D000240AA3 /* UILayoutParameter.cpp */,
|
2905F9FC18CF08D000240AA3 /* UILayoutParameter.cpp */,
|
||||||
2905F9FD18CF08D000240AA3 /* UILayoutParameter.h */,
|
2905F9FD18CF08D000240AA3 /* UILayoutParameter.h */,
|
||||||
|
29CB8F4A1929D1BB00C841D6 /* UILayoutExecutant.cpp */,
|
||||||
|
29CB8F4B1929D1BB00C841D6 /* UILayoutExecutant.h */,
|
||||||
|
);
|
||||||
|
name = layout;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
29CB8F511929D64500C841D6 /* base */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
29080DEB191B82CE0066F8DF /* UIDeprecated.h */,
|
||||||
|
2905FA1318CF08D100240AA3 /* UIWidget.cpp */,
|
||||||
|
2905FA1418CF08D100240AA3 /* UIWidget.h */,
|
||||||
|
50E6D30C18DADB5D0051CA34 /* CCProtectedNode.cpp */,
|
||||||
|
50E6D30D18DADB5D0051CA34 /* CCProtectedNode.h */,
|
||||||
|
2905F9F418CF08D000240AA3 /* UIHelper.cpp */,
|
||||||
|
2905F9F518CF08D000240AA3 /* UIHelper.h */,
|
||||||
|
2905F9EB18CF08D000240AA3 /* GUIDefine.h */,
|
||||||
|
);
|
||||||
|
name = base;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
29CB8F521929D65500C841D6 /* experimental */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
3EA0FB69191C841D00B170C8 /* UIVideoPlayer.h */,
|
||||||
|
3EA0FB6A191C841D00B170C8 /* UIVideoPlayerIOS.mm */,
|
||||||
|
);
|
||||||
|
name = experimental;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
29CB8F531929D67D00C841D6 /* widgets */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
2905F9FE18CF08D000240AA3 /* UIListView.cpp */,
|
2905F9FE18CF08D000240AA3 /* UIListView.cpp */,
|
||||||
2905F9FF18CF08D000240AA3 /* UIListView.h */,
|
2905F9FF18CF08D000240AA3 /* UIListView.h */,
|
||||||
2905FA0018CF08D000240AA3 /* UILoadingBar.cpp */,
|
2905FA0018CF08D000240AA3 /* UILoadingBar.cpp */,
|
||||||
|
@ -3927,9 +3973,9 @@
|
||||||
2905FA0318CF08D000240AA3 /* UIPageView.h */,
|
2905FA0318CF08D000240AA3 /* UIPageView.h */,
|
||||||
2905FA0418CF08D000240AA3 /* UIRichText.cpp */,
|
2905FA0418CF08D000240AA3 /* UIRichText.cpp */,
|
||||||
2905FA0518CF08D000240AA3 /* UIRichText.h */,
|
2905FA0518CF08D000240AA3 /* UIRichText.h */,
|
||||||
2905FA0618CF08D000240AA3 /* UIScrollInterface.h */,
|
|
||||||
2905FA0718CF08D000240AA3 /* UIScrollView.cpp */,
|
2905FA0718CF08D000240AA3 /* UIScrollView.cpp */,
|
||||||
2905FA0818CF08D000240AA3 /* UIScrollView.h */,
|
2905FA0818CF08D000240AA3 /* UIScrollView.h */,
|
||||||
|
29CB8F541929D7A900C841D6 /* UIScrollInterface.h */,
|
||||||
2905FA0918CF08D000240AA3 /* UISlider.cpp */,
|
2905FA0918CF08D000240AA3 /* UISlider.cpp */,
|
||||||
2905FA0A18CF08D100240AA3 /* UISlider.h */,
|
2905FA0A18CF08D100240AA3 /* UISlider.h */,
|
||||||
2905FA0B18CF08D100240AA3 /* UIText.cpp */,
|
2905FA0B18CF08D100240AA3 /* UIText.cpp */,
|
||||||
|
@ -3940,20 +3986,14 @@
|
||||||
2905FA1018CF08D100240AA3 /* UITextBMFont.h */,
|
2905FA1018CF08D100240AA3 /* UITextBMFont.h */,
|
||||||
2905FA1118CF08D100240AA3 /* UITextField.cpp */,
|
2905FA1118CF08D100240AA3 /* UITextField.cpp */,
|
||||||
2905FA1218CF08D100240AA3 /* UITextField.h */,
|
2905FA1218CF08D100240AA3 /* UITextField.h */,
|
||||||
2905FA1318CF08D100240AA3 /* UIWidget.cpp */,
|
2905F9F018CF08D000240AA3 /* UIButton.cpp */,
|
||||||
2905FA1418CF08D100240AA3 /* UIWidget.h */,
|
2905F9F118CF08D000240AA3 /* UIButton.h */,
|
||||||
50E6D30C18DADB5D0051CA34 /* CCProtectedNode.cpp */,
|
2905F9F218CF08D000240AA3 /* UICheckBox.cpp */,
|
||||||
50E6D30D18DADB5D0051CA34 /* CCProtectedNode.h */,
|
2905F9F318CF08D000240AA3 /* UICheckBox.h */,
|
||||||
50E6D32E18E174130051CA34 /* UIHBox.cpp */,
|
2905F9F618CF08D000240AA3 /* UIImageView.cpp */,
|
||||||
50E6D32F18E174130051CA34 /* UIHBox.h */,
|
2905F9F718CF08D000240AA3 /* UIImageView.h */,
|
||||||
50E6D33018E174130051CA34 /* UIRelativeBox.cpp */,
|
|
||||||
50E6D33118E174130051CA34 /* UIRelativeBox.h */,
|
|
||||||
50E6D33218E174130051CA34 /* UIVBox.cpp */,
|
|
||||||
50E6D33318E174130051CA34 /* UIVBox.h */,
|
|
||||||
29080DEB191B82CE0066F8DF /* UIDeprecated.h */,
|
|
||||||
);
|
);
|
||||||
name = ui;
|
name = widgets;
|
||||||
path = ../cocos/ui;
|
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
37936A361869B76800E974DD /* internal */ = {
|
37936A361869B76800E974DD /* internal */ = {
|
||||||
|
@ -4806,6 +4846,7 @@
|
||||||
5034CA39191D591100CE6051 /* ccShader_PositionColorLengthTexture.frag in Headers */,
|
5034CA39191D591100CE6051 /* ccShader_PositionColorLengthTexture.frag in Headers */,
|
||||||
2AC795DF18628723005EC8E1 /* SkeletonBounds.h in Headers */,
|
2AC795DF18628723005EC8E1 /* SkeletonBounds.h in Headers */,
|
||||||
50ABBE891925AB6F00A911A9 /* CCMap.h in Headers */,
|
50ABBE891925AB6F00A911A9 /* CCMap.h in Headers */,
|
||||||
|
29CB8F4E1929D1BB00C841D6 /* UILayoutExecutant.h in Headers */,
|
||||||
2AC795E018628723005EC8E1 /* Event.h in Headers */,
|
2AC795E018628723005EC8E1 /* Event.h in Headers */,
|
||||||
2AC795E118628723005EC8E1 /* EventData.h in Headers */,
|
2AC795E118628723005EC8E1 /* EventData.h in Headers */,
|
||||||
50E6D33618E174130051CA34 /* UIHBox.h in Headers */,
|
50E6D33618E174130051CA34 /* UIHBox.h in Headers */,
|
||||||
|
@ -5010,7 +5051,6 @@
|
||||||
1AD71DED180E26E600808F54 /* CCMenuLoader.h in Headers */,
|
1AD71DED180E26E600808F54 /* CCMenuLoader.h in Headers */,
|
||||||
50ABBE8F1925AB6F00A911A9 /* CCPlatformConfig.h in Headers */,
|
50ABBE8F1925AB6F00A911A9 /* CCPlatformConfig.h in Headers */,
|
||||||
1AD71DF1180E26E600808F54 /* CCNode+CCBRelativePositioning.h in Headers */,
|
1AD71DF1180E26E600808F54 /* CCNode+CCBRelativePositioning.h in Headers */,
|
||||||
2905FA7218CF08D100240AA3 /* UIScrollInterface.h in Headers */,
|
|
||||||
1AD71DF5180E26E600808F54 /* CCNodeLoader.h in Headers */,
|
1AD71DF5180E26E600808F54 /* CCNodeLoader.h in Headers */,
|
||||||
1AD71DF9180E26E600808F54 /* CCNodeLoaderLibrary.h in Headers */,
|
1AD71DF9180E26E600808F54 /* CCNodeLoaderLibrary.h in Headers */,
|
||||||
50ABBE291925AB6F00A911A9 /* CCAutoreleasePool.h in Headers */,
|
50ABBE291925AB6F00A911A9 /* CCAutoreleasePool.h in Headers */,
|
||||||
|
@ -5075,6 +5115,7 @@
|
||||||
50ABBD9D1925AB4100A911A9 /* ccGLStateCache.h in Headers */,
|
50ABBD9D1925AB4100A911A9 /* ccGLStateCache.h in Headers */,
|
||||||
50ABBEB91925AB6F00A911A9 /* ccUTF8.h in Headers */,
|
50ABBEB91925AB6F00A911A9 /* ccUTF8.h in Headers */,
|
||||||
1AAF536E180E3374000584C8 /* HttpRequest.h in Headers */,
|
1AAF536E180E3374000584C8 /* HttpRequest.h in Headers */,
|
||||||
|
29CB8F551929D7A900C841D6 /* UIScrollInterface.h in Headers */,
|
||||||
1AAF5370180E3374000584C8 /* HttpResponse.h in Headers */,
|
1AAF5370180E3374000584C8 /* HttpResponse.h in Headers */,
|
||||||
50ABBE671925AB6F00A911A9 /* CCEventListenerCustom.h in Headers */,
|
50ABBE671925AB6F00A911A9 /* CCEventListenerCustom.h in Headers */,
|
||||||
1AAF5374180E3374000584C8 /* SocketIO.h in Headers */,
|
1AAF5374180E3374000584C8 /* SocketIO.h in Headers */,
|
||||||
|
@ -5357,7 +5398,6 @@
|
||||||
503DD8E41926736A00CD74DD /* CCDirectorCaller.h in Headers */,
|
503DD8E41926736A00CD74DD /* CCDirectorCaller.h in Headers */,
|
||||||
50ABBD8A1925AB4100A911A9 /* CCCustomCommand.h in Headers */,
|
50ABBD8A1925AB4100A911A9 /* CCCustomCommand.h in Headers */,
|
||||||
2905FA6D18CF08D100240AA3 /* UIPageView.h in Headers */,
|
2905FA6D18CF08D100240AA3 /* UIPageView.h in Headers */,
|
||||||
2905FA7318CF08D100240AA3 /* UIScrollInterface.h in Headers */,
|
|
||||||
50ABBE881925AB6F00A911A9 /* ccMacros.h in Headers */,
|
50ABBE881925AB6F00A911A9 /* ccMacros.h in Headers */,
|
||||||
50ABC0101926664800A911A9 /* CCFileUtils.h in Headers */,
|
50ABC0101926664800A911A9 /* CCFileUtils.h in Headers */,
|
||||||
2905FA4318CF08D100240AA3 /* CocosGUI.h in Headers */,
|
2905FA4318CF08D100240AA3 /* CocosGUI.h in Headers */,
|
||||||
|
@ -5528,6 +5568,7 @@
|
||||||
50ABBD921925AB4100A911A9 /* CCGLProgramCache.h in Headers */,
|
50ABBD921925AB4100A911A9 /* CCGLProgramCache.h in Headers */,
|
||||||
1AD71E0E180E26E600808F54 /* CocosBuilder.h in Headers */,
|
1AD71E0E180E26E600808F54 /* CocosBuilder.h in Headers */,
|
||||||
B29594C91926D61F003EEF37 /* CCObjLoader.h in Headers */,
|
B29594C91926D61F003EEF37 /* CCObjLoader.h in Headers */,
|
||||||
|
29CB8F561929D7A900C841D6 /* UIScrollInterface.h in Headers */,
|
||||||
1AD71E98180E26E600808F54 /* Animation.h in Headers */,
|
1AD71E98180E26E600808F54 /* Animation.h in Headers */,
|
||||||
1AD71E9C180E26E600808F54 /* AnimationState.h in Headers */,
|
1AD71E9C180E26E600808F54 /* AnimationState.h in Headers */,
|
||||||
50ABBE961925AB6F00A911A9 /* CCProfiling.h in Headers */,
|
50ABBE961925AB6F00A911A9 /* CCProfiling.h in Headers */,
|
||||||
|
@ -5620,6 +5661,7 @@
|
||||||
1A8C59E2180E930E00EF57C3 /* CCInputDelegate.h in Headers */,
|
1A8C59E2180E930E00EF57C3 /* CCInputDelegate.h in Headers */,
|
||||||
503DD8EA1926736A00CD74DD /* CCESRenderer.h in Headers */,
|
503DD8EA1926736A00CD74DD /* CCESRenderer.h in Headers */,
|
||||||
1A8C59E6180E930E00EF57C3 /* CCProcessBase.h in Headers */,
|
1A8C59E6180E930E00EF57C3 /* CCProcessBase.h in Headers */,
|
||||||
|
29CB8F4F1929D1BB00C841D6 /* UILayoutExecutant.h in Headers */,
|
||||||
50ABBE581925AB6F00A911A9 /* CCEventFocus.h in Headers */,
|
50ABBE581925AB6F00A911A9 /* CCEventFocus.h in Headers */,
|
||||||
50ABC00A1926664800A911A9 /* CCCommon.h in Headers */,
|
50ABC00A1926664800A911A9 /* CCCommon.h in Headers */,
|
||||||
2905FA5918CF08D100240AA3 /* UILayout.h in Headers */,
|
2905FA5918CF08D100240AA3 /* UILayout.h in Headers */,
|
||||||
|
@ -6200,6 +6242,7 @@
|
||||||
2905FA4018CF08D100240AA3 /* CocosGUI.cpp in Sources */,
|
2905FA4018CF08D100240AA3 /* CocosGUI.cpp in Sources */,
|
||||||
1AD71EC1180E26E600808F54 /* extension.cpp in Sources */,
|
1AD71EC1180E26E600808F54 /* extension.cpp in Sources */,
|
||||||
50ABBE511925AB6F00A911A9 /* CCEventDispatcher.cpp in Sources */,
|
50ABBE511925AB6F00A911A9 /* CCEventDispatcher.cpp in Sources */,
|
||||||
|
29CB8F4C1929D1BB00C841D6 /* UILayoutExecutant.cpp in Sources */,
|
||||||
50ABC0051926664800A911A9 /* CCThread.mm in Sources */,
|
50ABC0051926664800A911A9 /* CCThread.mm in Sources */,
|
||||||
1AD71EC5180E26E600808F54 /* Json.cpp in Sources */,
|
1AD71EC5180E26E600808F54 /* Json.cpp in Sources */,
|
||||||
50E6D33C18E174130051CA34 /* UIVBox.cpp in Sources */,
|
50E6D33C18E174130051CA34 /* UIVBox.cpp in Sources */,
|
||||||
|
@ -6678,6 +6721,7 @@
|
||||||
50FCEBAC18C72017004AD434 /* PageViewReader.cpp in Sources */,
|
50FCEBAC18C72017004AD434 /* PageViewReader.cpp in Sources */,
|
||||||
1A8C598C180E930E00EF57C3 /* CCActionFrame.cpp in Sources */,
|
1A8C598C180E930E00EF57C3 /* CCActionFrame.cpp in Sources */,
|
||||||
1A8C5990180E930E00EF57C3 /* CCActionFrameEasing.cpp in Sources */,
|
1A8C5990180E930E00EF57C3 /* CCActionFrameEasing.cpp in Sources */,
|
||||||
|
29CB8F4D1929D1BB00C841D6 /* UILayoutExecutant.cpp in Sources */,
|
||||||
50FCEBA418C72017004AD434 /* ListViewReader.cpp in Sources */,
|
50FCEBA418C72017004AD434 /* ListViewReader.cpp in Sources */,
|
||||||
1A8C5994180E930E00EF57C3 /* CCActionManagerEx.cpp in Sources */,
|
1A8C5994180E930E00EF57C3 /* CCActionManagerEx.cpp in Sources */,
|
||||||
50ABBEBC1925AB6F00A911A9 /* ccUtils.cpp in Sources */,
|
50ABBEBC1925AB6F00A911A9 /* ccUtils.cpp in Sources */,
|
||||||
|
|
|
@ -9,6 +9,7 @@ LOCAL_SRC_FILES := \
|
||||||
UIWidget.cpp \
|
UIWidget.cpp \
|
||||||
UILayout.cpp \
|
UILayout.cpp \
|
||||||
UILayoutParameter.cpp \
|
UILayoutParameter.cpp \
|
||||||
|
UILayoutExecutant.cpp \
|
||||||
CocosGUI.cpp \
|
CocosGUI.cpp \
|
||||||
UIHelper.cpp \
|
UIHelper.cpp \
|
||||||
UIListView.cpp \
|
UIListView.cpp \
|
||||||
|
|
|
@ -8,6 +8,7 @@ set(COCOS_UI_SRC
|
||||||
ui/UIImageView.cpp
|
ui/UIImageView.cpp
|
||||||
ui/UILayout.cpp
|
ui/UILayout.cpp
|
||||||
ui/UILayoutParameter.cpp
|
ui/UILayoutParameter.cpp
|
||||||
|
ui/UILayoutExecutant.cpp
|
||||||
ui/UIListView.cpp
|
ui/UIListView.cpp
|
||||||
ui/UILoadingBar.cpp
|
ui/UILoadingBar.cpp
|
||||||
ui/UIPageView.cpp
|
ui/UIPageView.cpp
|
||||||
|
|
|
@ -32,532 +32,12 @@ THE SOFTWARE.
|
||||||
#include "renderer/CCRenderer.h"
|
#include "renderer/CCRenderer.h"
|
||||||
#include "renderer/CCGroupCommand.h"
|
#include "renderer/CCGroupCommand.h"
|
||||||
#include "renderer/CCCustomCommand.h"
|
#include "renderer/CCCustomCommand.h"
|
||||||
|
#include "ui/UILayoutExecutant.h"
|
||||||
|
|
||||||
NS_CC_BEGIN
|
NS_CC_BEGIN
|
||||||
|
|
||||||
namespace ui {
|
namespace ui {
|
||||||
|
|
||||||
class LayoutExecutant : public Ref
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
LayoutExecutant(){};
|
|
||||||
virtual ~LayoutExecutant(){};
|
|
||||||
static LayoutExecutant* create();
|
|
||||||
virtual void doLayout(const Size& layoutSize, Vector<Node*> container){};
|
|
||||||
};
|
|
||||||
|
|
||||||
class LinearVerticalLayoutExecutant : public LayoutExecutant
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
LinearVerticalLayoutExecutant(){};
|
|
||||||
virtual ~LinearVerticalLayoutExecutant(){};
|
|
||||||
static LinearVerticalLayoutExecutant* create();
|
|
||||||
virtual void doLayout(const Size& layoutSize, Vector<Node*> container);
|
|
||||||
};
|
|
||||||
|
|
||||||
class LinearHorizontalLayoutExecutant : public LayoutExecutant
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
LinearHorizontalLayoutExecutant(){};
|
|
||||||
virtual ~LinearHorizontalLayoutExecutant(){};
|
|
||||||
static LinearHorizontalLayoutExecutant* create();
|
|
||||||
virtual void doLayout(const Size& layoutSize, Vector<Node*> container);
|
|
||||||
};
|
|
||||||
|
|
||||||
class RelativeLayoutExecutant : public LayoutExecutant
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
RelativeLayoutExecutant(){};
|
|
||||||
virtual ~RelativeLayoutExecutant(){};
|
|
||||||
static RelativeLayoutExecutant* create();
|
|
||||||
virtual void doLayout(const Size& layoutSize, Vector<Node*> container);
|
|
||||||
};
|
|
||||||
|
|
||||||
LayoutExecutant* LayoutExecutant::create()
|
|
||||||
{
|
|
||||||
LayoutExecutant* exe = new LayoutExecutant();
|
|
||||||
if (exe)
|
|
||||||
{
|
|
||||||
exe->autorelease();
|
|
||||||
return exe;
|
|
||||||
}
|
|
||||||
CC_SAFE_DELETE(exe);
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
LinearVerticalLayoutExecutant* LinearVerticalLayoutExecutant::create()
|
|
||||||
{
|
|
||||||
LinearVerticalLayoutExecutant* exe = new LinearVerticalLayoutExecutant();
|
|
||||||
if (exe)
|
|
||||||
{
|
|
||||||
exe->autorelease();
|
|
||||||
return exe;
|
|
||||||
}
|
|
||||||
CC_SAFE_DELETE(exe);
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
LinearHorizontalLayoutExecutant* LinearHorizontalLayoutExecutant::create()
|
|
||||||
{
|
|
||||||
LinearHorizontalLayoutExecutant* exe = new LinearHorizontalLayoutExecutant();
|
|
||||||
if (exe)
|
|
||||||
{
|
|
||||||
exe->autorelease();
|
|
||||||
return exe;
|
|
||||||
}
|
|
||||||
CC_SAFE_DELETE(exe);
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
RelativeLayoutExecutant* RelativeLayoutExecutant::create()
|
|
||||||
{
|
|
||||||
RelativeLayoutExecutant* exe = new RelativeLayoutExecutant();
|
|
||||||
if (exe)
|
|
||||||
{
|
|
||||||
exe->autorelease();
|
|
||||||
return exe;
|
|
||||||
}
|
|
||||||
CC_SAFE_DELETE(exe);
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void LinearVerticalLayoutExecutant::doLayout(const cocos2d::Size &layoutSize, Vector<cocos2d::Node *> container)
|
|
||||||
{
|
|
||||||
float topBoundary = layoutSize.height;
|
|
||||||
|
|
||||||
for (auto& subWidget : container)
|
|
||||||
{
|
|
||||||
Widget* child = dynamic_cast<Widget*>(subWidget);
|
|
||||||
if (child)
|
|
||||||
{
|
|
||||||
LinearLayoutParameter* layoutParameter = dynamic_cast<LinearLayoutParameter*>(child->getLayoutParameter(LayoutParameter::Type::LINEAR));
|
|
||||||
|
|
||||||
if (layoutParameter)
|
|
||||||
{
|
|
||||||
LinearLayoutParameter::LinearGravity childGravity = layoutParameter->getGravity();
|
|
||||||
Vec2 ap = child->getAnchorPoint();
|
|
||||||
Size cs = child->getSize();
|
|
||||||
float finalPosX = ap.x * cs.width;
|
|
||||||
float finalPosY = topBoundary - ((1.0f-ap.y) * cs.height);
|
|
||||||
switch (childGravity)
|
|
||||||
{
|
|
||||||
case LinearLayoutParameter::LinearGravity::NONE:
|
|
||||||
case LinearLayoutParameter::LinearGravity::LEFT:
|
|
||||||
break;
|
|
||||||
case LinearLayoutParameter::LinearGravity::RIGHT:
|
|
||||||
finalPosX = layoutSize.width - ((1.0f - ap.x) * cs.width);
|
|
||||||
break;
|
|
||||||
case LinearLayoutParameter::LinearGravity::CENTER_HORIZONTAL:
|
|
||||||
finalPosX = layoutSize.width / 2.0f - cs.width * (0.5f-ap.x);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
Margin mg = layoutParameter->getMargin();
|
|
||||||
finalPosX += mg.left;
|
|
||||||
finalPosY -= mg.top;
|
|
||||||
child->setPosition(Vec2(finalPosX, finalPosY));
|
|
||||||
topBoundary = child->getBottomInParent() - mg.bottom;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void LinearHorizontalLayoutExecutant::doLayout(const cocos2d::Size &layoutSize, Vector<cocos2d::Node *> container)
|
|
||||||
{
|
|
||||||
float leftBoundary = 0.0f;
|
|
||||||
for (auto& subWidget : container)
|
|
||||||
{
|
|
||||||
Widget* child = dynamic_cast<Widget*>(subWidget);
|
|
||||||
if (child)
|
|
||||||
{
|
|
||||||
LinearLayoutParameter* layoutParameter = dynamic_cast<LinearLayoutParameter*>(child->getLayoutParameter(LayoutParameter::Type::LINEAR));
|
|
||||||
if (layoutParameter)
|
|
||||||
{
|
|
||||||
LinearLayoutParameter::LinearGravity childGravity = layoutParameter->getGravity();
|
|
||||||
Vec2 ap = child->getAnchorPoint();
|
|
||||||
Size cs = child->getSize();
|
|
||||||
float finalPosX = leftBoundary + (ap.x * cs.width);
|
|
||||||
float finalPosY = layoutSize.height - (1.0f - ap.y) * cs.height;
|
|
||||||
switch (childGravity)
|
|
||||||
{
|
|
||||||
case LinearLayoutParameter::LinearGravity::NONE:
|
|
||||||
case LinearLayoutParameter::LinearGravity::TOP:
|
|
||||||
break;
|
|
||||||
case LinearLayoutParameter::LinearGravity::BOTTOM:
|
|
||||||
finalPosY = ap.y * cs.height;
|
|
||||||
break;
|
|
||||||
case LinearLayoutParameter::LinearGravity::CENTER_VERTICAL:
|
|
||||||
finalPosY = layoutSize.height / 2.0f - cs.height * (0.5f - ap.y);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
Margin mg = layoutParameter->getMargin();
|
|
||||||
finalPosX += mg.left;
|
|
||||||
finalPosY -= mg.top;
|
|
||||||
child->setPosition(Vec2(finalPosX, finalPosY));
|
|
||||||
leftBoundary = child->getRightInParent() + mg.right;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void RelativeLayoutExecutant::doLayout(const cocos2d::Size &layoutSize, Vector<cocos2d::Node *> container)
|
|
||||||
{
|
|
||||||
ssize_t unlayoutChildCount = 0;
|
|
||||||
Vector<Widget*> widgetChildren;
|
|
||||||
for (auto& subWidget : container)
|
|
||||||
{
|
|
||||||
Widget* child = dynamic_cast<Widget*>(subWidget);
|
|
||||||
if (child)
|
|
||||||
{
|
|
||||||
RelativeLayoutParameter* layoutParameter = dynamic_cast<RelativeLayoutParameter*>(child->getLayoutParameter(LayoutParameter::Type::RELATIVE));
|
|
||||||
layoutParameter->_put = false;
|
|
||||||
unlayoutChildCount++;
|
|
||||||
widgetChildren.pushBack(child);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
while (unlayoutChildCount > 0)
|
|
||||||
{
|
|
||||||
for (auto& subWidget : widgetChildren)
|
|
||||||
{
|
|
||||||
Widget* child = static_cast<Widget*>(subWidget);
|
|
||||||
RelativeLayoutParameter* layoutParameter = dynamic_cast<RelativeLayoutParameter*>(child->getLayoutParameter(LayoutParameter::Type::RELATIVE));
|
|
||||||
|
|
||||||
if (layoutParameter)
|
|
||||||
{
|
|
||||||
if (layoutParameter->_put)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
Vec2 ap = child->getAnchorPoint();
|
|
||||||
Size cs = child->getSize();
|
|
||||||
RelativeLayoutParameter::RelativeAlign align = layoutParameter->getAlign();
|
|
||||||
const std::string relativeName = layoutParameter->getRelativeToWidgetName();
|
|
||||||
Widget* relativeWidget = nullptr;
|
|
||||||
RelativeLayoutParameter* relativeWidgetLP = nullptr;
|
|
||||||
float finalPosX = 0.0f;
|
|
||||||
float finalPosY = 0.0f;
|
|
||||||
if (!relativeName.empty())
|
|
||||||
{
|
|
||||||
for (auto& sWidget : widgetChildren)
|
|
||||||
{
|
|
||||||
if (sWidget)
|
|
||||||
{
|
|
||||||
RelativeLayoutParameter* rlayoutParameter = dynamic_cast<RelativeLayoutParameter*>(sWidget->getLayoutParameter(LayoutParameter::Type::RELATIVE));
|
|
||||||
if (rlayoutParameter && rlayoutParameter->getRelativeName() == relativeName)
|
|
||||||
{
|
|
||||||
relativeWidget = sWidget;
|
|
||||||
relativeWidgetLP = rlayoutParameter;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
switch (align)
|
|
||||||
{
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::NONE:
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::PARENT_TOP_LEFT:
|
|
||||||
finalPosX = ap.x * cs.width;
|
|
||||||
finalPosY = layoutSize.height - ((1.0f - ap.y) * cs.height);
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::PARENT_TOP_CENTER_HORIZONTAL:
|
|
||||||
finalPosX = layoutSize.width * 0.5f - cs.width * (0.5f - ap.x);
|
|
||||||
finalPosY = layoutSize.height - ((1.0f - ap.y) * cs.height);
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::PARENT_TOP_RIGHT:
|
|
||||||
finalPosX = layoutSize.width - ((1.0f - ap.x) * cs.width);
|
|
||||||
finalPosY = layoutSize.height - ((1.0f - ap.y) * cs.height);
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::PARENT_LEFT_CENTER_VERTICAL:
|
|
||||||
finalPosX = ap.x * cs.width;
|
|
||||||
finalPosY = layoutSize.height * 0.5f - cs.height * (0.5f - ap.y);
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::CENTER_IN_PARENT:
|
|
||||||
finalPosX = layoutSize.width * 0.5f - cs.width * (0.5f - ap.x);
|
|
||||||
finalPosY = layoutSize.height * 0.5f - cs.height * (0.5f - ap.y);
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::PARENT_RIGHT_CENTER_VERTICAL:
|
|
||||||
finalPosX = layoutSize.width - ((1.0f - ap.x) * cs.width);
|
|
||||||
finalPosY = layoutSize.height * 0.5f - cs.height * (0.5f - ap.y);
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::PARENT_LEFT_BOTTOM:
|
|
||||||
finalPosX = ap.x * cs.width;
|
|
||||||
finalPosY = ap.y * cs.height;
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::PARENT_BOTTOM_CENTER_HORIZONTAL:
|
|
||||||
finalPosX = layoutSize.width * 0.5f - cs.width * (0.5f - ap.x);
|
|
||||||
finalPosY = ap.y * cs.height;
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::PARENT_RIGHT_BOTTOM:
|
|
||||||
finalPosX = layoutSize.width - ((1.0f - ap.x) * cs.width);
|
|
||||||
finalPosY = ap.y * cs.height;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_ABOVE_LEFTALIGN:
|
|
||||||
if (relativeWidget)
|
|
||||||
{
|
|
||||||
if (relativeWidgetLP && !relativeWidgetLP->_put)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
float locationBottom = relativeWidget->getTopInParent();
|
|
||||||
float locationLeft = relativeWidget->getLeftInParent();
|
|
||||||
finalPosY = locationBottom + ap.y * cs.height;
|
|
||||||
finalPosX = locationLeft + ap.x * cs.width;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_ABOVE_CENTER:
|
|
||||||
if (relativeWidget)
|
|
||||||
{
|
|
||||||
if (relativeWidgetLP && !relativeWidgetLP->_put)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
Size rbs = relativeWidget->getSize();
|
|
||||||
float locationBottom = relativeWidget->getTopInParent();
|
|
||||||
|
|
||||||
finalPosY = locationBottom + ap.y * cs.height;
|
|
||||||
finalPosX = relativeWidget->getLeftInParent() + rbs.width * 0.5f + ap.x * cs.width - cs.width * 0.5f;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_ABOVE_RIGHTALIGN:
|
|
||||||
if (relativeWidget)
|
|
||||||
{
|
|
||||||
if (relativeWidgetLP && !relativeWidgetLP->_put)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
float locationBottom = relativeWidget->getTopInParent();
|
|
||||||
float locationRight = relativeWidget->getRightInParent();
|
|
||||||
finalPosY = locationBottom + ap.y * cs.height;
|
|
||||||
finalPosX = locationRight - (1.0f - ap.x) * cs.width;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_LEFT_OF_TOPALIGN:
|
|
||||||
if (relativeWidget)
|
|
||||||
{
|
|
||||||
if (relativeWidgetLP && !relativeWidgetLP->_put)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
float locationTop = relativeWidget->getTopInParent();
|
|
||||||
float locationRight = relativeWidget->getLeftInParent();
|
|
||||||
finalPosY = locationTop - (1.0f - ap.y) * cs.height;
|
|
||||||
finalPosX = locationRight - (1.0f - ap.x) * cs.width;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_LEFT_OF_CENTER:
|
|
||||||
if (relativeWidget)
|
|
||||||
{
|
|
||||||
if (relativeWidgetLP && !relativeWidgetLP->_put)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
Size rbs = relativeWidget->getSize();
|
|
||||||
float locationRight = relativeWidget->getLeftInParent();
|
|
||||||
finalPosX = locationRight - (1.0f - ap.x) * cs.width;
|
|
||||||
|
|
||||||
finalPosY = relativeWidget->getBottomInParent() + rbs.height * 0.5f + ap.y * cs.height - cs.height * 0.5f;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_LEFT_OF_BOTTOMALIGN:
|
|
||||||
if (relativeWidget)
|
|
||||||
{
|
|
||||||
if (relativeWidgetLP && !relativeWidgetLP->_put)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
float locationBottom = relativeWidget->getBottomInParent();
|
|
||||||
float locationRight = relativeWidget->getLeftInParent();
|
|
||||||
finalPosY = locationBottom + ap.y * cs.height;
|
|
||||||
finalPosX = locationRight - (1.0f - ap.x) * cs.width;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_RIGHT_OF_TOPALIGN:
|
|
||||||
if (relativeWidget)
|
|
||||||
{
|
|
||||||
if (relativeWidgetLP && !relativeWidgetLP->_put)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
float locationTop = relativeWidget->getTopInParent();
|
|
||||||
float locationLeft = relativeWidget->getRightInParent();
|
|
||||||
finalPosY = locationTop - (1.0f - ap.y) * cs.height;
|
|
||||||
finalPosX = locationLeft + ap.x * cs.width;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_RIGHT_OF_CENTER:
|
|
||||||
if (relativeWidget)
|
|
||||||
{
|
|
||||||
if (relativeWidgetLP && !relativeWidgetLP->_put)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
Size rbs = relativeWidget->getSize();
|
|
||||||
float locationLeft = relativeWidget->getRightInParent();
|
|
||||||
finalPosX = locationLeft + ap.x * cs.width;
|
|
||||||
|
|
||||||
finalPosY = relativeWidget->getBottomInParent() + rbs.height * 0.5f + ap.y * cs.height - cs.height * 0.5f;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_RIGHT_OF_BOTTOMALIGN:
|
|
||||||
if (relativeWidget)
|
|
||||||
{
|
|
||||||
if (relativeWidgetLP && !relativeWidgetLP->_put)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
float locationBottom = relativeWidget->getBottomInParent();
|
|
||||||
float locationLeft = relativeWidget->getRightInParent();
|
|
||||||
finalPosY = locationBottom + ap.y * cs.height;
|
|
||||||
finalPosX = locationLeft + ap.x * cs.width;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_BELOW_LEFTALIGN:
|
|
||||||
if (relativeWidget)
|
|
||||||
{
|
|
||||||
if (relativeWidgetLP && !relativeWidgetLP->_put)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
float locationTop = relativeWidget->getBottomInParent();
|
|
||||||
float locationLeft = relativeWidget->getLeftInParent();
|
|
||||||
finalPosY = locationTop - (1.0f - ap.y) * cs.height;
|
|
||||||
finalPosX = locationLeft + ap.x * cs.width;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_BELOW_CENTER:
|
|
||||||
if (relativeWidget)
|
|
||||||
{
|
|
||||||
if (relativeWidgetLP && !relativeWidgetLP->_put)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
Size rbs = relativeWidget->getSize();
|
|
||||||
float locationTop = relativeWidget->getBottomInParent();
|
|
||||||
|
|
||||||
finalPosY = locationTop - (1.0f - ap.y) * cs.height;
|
|
||||||
finalPosX = relativeWidget->getLeftInParent() + rbs.width * 0.5f + ap.x * cs.width - cs.width * 0.5f;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_BELOW_RIGHTALIGN:
|
|
||||||
if (relativeWidget)
|
|
||||||
{
|
|
||||||
if (relativeWidgetLP && !relativeWidgetLP->_put)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
float locationTop = relativeWidget->getBottomInParent();
|
|
||||||
float locationRight = relativeWidget->getRightInParent();
|
|
||||||
finalPosY = locationTop - (1.0f - ap.y) * cs.height;
|
|
||||||
finalPosX = locationRight - (1.0f - ap.x) * cs.width;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
Margin relativeWidgetMargin;
|
|
||||||
Margin mg = layoutParameter->getMargin();
|
|
||||||
if (relativeWidgetLP)
|
|
||||||
{
|
|
||||||
relativeWidgetMargin = relativeWidgetLP->getMargin();
|
|
||||||
}
|
|
||||||
//handle margin
|
|
||||||
switch (align)
|
|
||||||
{
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::NONE:
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::PARENT_TOP_LEFT:
|
|
||||||
finalPosX += mg.left;
|
|
||||||
finalPosY -= mg.top;
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::PARENT_TOP_CENTER_HORIZONTAL:
|
|
||||||
finalPosY -= mg.top;
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::PARENT_TOP_RIGHT:
|
|
||||||
finalPosX -= mg.right;
|
|
||||||
finalPosY -= mg.top;
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::PARENT_LEFT_CENTER_VERTICAL:
|
|
||||||
finalPosX += mg.left;
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::CENTER_IN_PARENT:
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::PARENT_RIGHT_CENTER_VERTICAL:
|
|
||||||
finalPosX -= mg.right;
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::PARENT_LEFT_BOTTOM:
|
|
||||||
finalPosX += mg.left;
|
|
||||||
finalPosY += mg.bottom;
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::PARENT_BOTTOM_CENTER_HORIZONTAL:
|
|
||||||
finalPosY += mg.bottom;
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::PARENT_RIGHT_BOTTOM:
|
|
||||||
finalPosX -= mg.right;
|
|
||||||
finalPosY += mg.bottom;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_ABOVE_LEFTALIGN:
|
|
||||||
finalPosY += mg.bottom;
|
|
||||||
finalPosX += mg.left;
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_ABOVE_RIGHTALIGN:
|
|
||||||
finalPosY += mg.bottom;
|
|
||||||
finalPosX -= mg.right;
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_ABOVE_CENTER:
|
|
||||||
finalPosY += mg.bottom;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_LEFT_OF_TOPALIGN:
|
|
||||||
finalPosX -= mg.right;
|
|
||||||
finalPosY -= mg.top;
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_LEFT_OF_BOTTOMALIGN:
|
|
||||||
finalPosX -= mg.right;
|
|
||||||
finalPosY += mg.bottom;
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_LEFT_OF_CENTER:
|
|
||||||
finalPosX -= mg.right;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_RIGHT_OF_TOPALIGN:
|
|
||||||
finalPosX += mg.left;
|
|
||||||
finalPosY -= mg.top;
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_RIGHT_OF_BOTTOMALIGN:
|
|
||||||
finalPosX += mg.left;
|
|
||||||
finalPosY += mg.bottom;
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_RIGHT_OF_CENTER:
|
|
||||||
finalPosX += mg.left;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_BELOW_LEFTALIGN:
|
|
||||||
finalPosY -= mg.top;
|
|
||||||
finalPosX += mg.left;
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_BELOW_RIGHTALIGN:
|
|
||||||
finalPosY -= mg.top;
|
|
||||||
finalPosX -= mg.right;
|
|
||||||
break;
|
|
||||||
case RelativeLayoutParameter::RelativeAlign::LOCATION_BELOW_CENTER:
|
|
||||||
finalPosY -= mg.top;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
child->setPosition(Vec2(finalPosX, finalPosY));
|
|
||||||
layoutParameter->_put = true;
|
|
||||||
unlayoutChildCount--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
widgetChildren.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
static const int BACKGROUNDIMAGE_Z = (-1);
|
static const int BACKGROUNDIMAGE_Z = (-1);
|
||||||
static const int BCAKGROUNDCOLORRENDERER_Z = (-2);
|
static const int BCAKGROUNDCOLORRENDERER_Z = (-2);
|
||||||
|
|
||||||
|
@ -604,7 +84,6 @@ _currentAlphaTestFunc(GL_ALWAYS),
|
||||||
_currentAlphaTestRef(1),
|
_currentAlphaTestRef(1),
|
||||||
_backGroundImageColor(Color3B::WHITE),
|
_backGroundImageColor(Color3B::WHITE),
|
||||||
_backGroundImageOpacity(255),
|
_backGroundImageOpacity(255),
|
||||||
_curLayoutExecutant(nullptr),
|
|
||||||
_passFocusToChild(true),
|
_passFocusToChild(true),
|
||||||
_loopFocus(false)
|
_loopFocus(false)
|
||||||
{
|
{
|
||||||
|
@ -615,7 +94,6 @@ _loopFocus(false)
|
||||||
Layout::~Layout()
|
Layout::~Layout()
|
||||||
{
|
{
|
||||||
CC_SAFE_RELEASE(_clippingStencil);
|
CC_SAFE_RELEASE(_clippingStencil);
|
||||||
CC_SAFE_RELEASE(_curLayoutExecutant);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Layout::onEnter()
|
void Layout::onEnter()
|
||||||
|
@ -1180,7 +658,7 @@ void Layout::supplyTheLayoutParameterLackToChild(Widget *child)
|
||||||
case Type::HORIZONTAL:
|
case Type::HORIZONTAL:
|
||||||
case Type::VERTICAL:
|
case Type::VERTICAL:
|
||||||
{
|
{
|
||||||
LinearLayoutParameter* layoutParameter = dynamic_cast<LinearLayoutParameter*>(child->getLayoutParameter(LayoutParameter::Type::LINEAR));
|
LinearLayoutParameter* layoutParameter = dynamic_cast<LinearLayoutParameter*>(child->getLayoutParameter());
|
||||||
if (!layoutParameter)
|
if (!layoutParameter)
|
||||||
{
|
{
|
||||||
child->setLayoutParameter(LinearLayoutParameter::create());
|
child->setLayoutParameter(LinearLayoutParameter::create());
|
||||||
|
@ -1189,7 +667,7 @@ void Layout::supplyTheLayoutParameterLackToChild(Widget *child)
|
||||||
}
|
}
|
||||||
case Type::RELATIVE:
|
case Type::RELATIVE:
|
||||||
{
|
{
|
||||||
RelativeLayoutParameter* layoutParameter = dynamic_cast<RelativeLayoutParameter*>(child->getLayoutParameter(LayoutParameter::Type::RELATIVE));
|
RelativeLayoutParameter* layoutParameter = dynamic_cast<RelativeLayoutParameter*>(child->getLayoutParameter());
|
||||||
if (!layoutParameter)
|
if (!layoutParameter)
|
||||||
{
|
{
|
||||||
child->setLayoutParameter(RelativeLayoutParameter::create());
|
child->setLayoutParameter(RelativeLayoutParameter::create());
|
||||||
|
@ -1427,9 +905,7 @@ const Size& Layout::getBackGroundImageTextureSize() const
|
||||||
void Layout::setLayoutType(Type type)
|
void Layout::setLayoutType(Type type)
|
||||||
{
|
{
|
||||||
_layoutType = type;
|
_layoutType = type;
|
||||||
CC_SAFE_RELEASE_NULL(_curLayoutExecutant);
|
|
||||||
_curLayoutExecutant = createCurrentLayoutExecutant();
|
|
||||||
CC_SAFE_RETAIN(_curLayoutExecutant);
|
|
||||||
for (auto& child : _children)
|
for (auto& child : _children)
|
||||||
{
|
{
|
||||||
Widget* widgetChild = dynamic_cast<Widget*>(child);
|
Widget* widgetChild = dynamic_cast<Widget*>(child);
|
||||||
|
@ -1441,7 +917,29 @@ void Layout::setLayoutType(Type type)
|
||||||
_doLayoutDirty = true;
|
_doLayoutDirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
LayoutExecutant* Layout::createCurrentLayoutExecutant()
|
|
||||||
|
|
||||||
|
Layout::Type Layout::getLayoutType() const
|
||||||
|
{
|
||||||
|
return _layoutType;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Layout::requestDoLayout()
|
||||||
|
{
|
||||||
|
_doLayoutDirty = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Size Layout::getLayoutContentSize()
|
||||||
|
{
|
||||||
|
return this->getSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
const Vector<Node*>& Layout::getLayoutElements()
|
||||||
|
{
|
||||||
|
return this->getChildren();
|
||||||
|
}
|
||||||
|
|
||||||
|
LayoutExecutant* Layout::createLayoutExecutant()
|
||||||
{
|
{
|
||||||
LayoutExecutant* exe = nullptr;
|
LayoutExecutant* exe = nullptr;
|
||||||
switch (_layoutType)
|
switch (_layoutType)
|
||||||
|
@ -1459,16 +957,7 @@ LayoutExecutant* Layout::createCurrentLayoutExecutant()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return exe;
|
return exe;
|
||||||
}
|
|
||||||
|
|
||||||
Layout::Type Layout::getLayoutType() const
|
|
||||||
{
|
|
||||||
return _layoutType;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Layout::requestDoLayout()
|
|
||||||
{
|
|
||||||
_doLayoutDirty = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Layout::doLayout()
|
void Layout::doLayout()
|
||||||
|
@ -1477,10 +966,13 @@ void Layout::doLayout()
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_curLayoutExecutant)
|
LayoutExecutant* executant = this->createLayoutExecutant();
|
||||||
|
|
||||||
|
if (executant)
|
||||||
{
|
{
|
||||||
_curLayoutExecutant->doLayout(getSize(), getChildren());
|
executant->doLayout(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
_doLayoutDirty = false;
|
_doLayoutDirty = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1541,7 +1033,7 @@ bool Layout::isPassFocusToChild()
|
||||||
return _passFocusToChild;
|
return _passFocusToChild;
|
||||||
}
|
}
|
||||||
|
|
||||||
Size Layout::getLayoutContentSize()const
|
Size Layout::getLayoutAccumulatedSize()const
|
||||||
{
|
{
|
||||||
const auto& children = this->getChildren();
|
const auto& children = this->getChildren();
|
||||||
Size layoutSize = Size::ZERO;
|
Size layoutSize = Size::ZERO;
|
||||||
|
@ -1551,7 +1043,7 @@ Size Layout::getLayoutContentSize()const
|
||||||
Layout *layout = dynamic_cast<Layout*>(widget);
|
Layout *layout = dynamic_cast<Layout*>(widget);
|
||||||
if (nullptr != layout)
|
if (nullptr != layout)
|
||||||
{
|
{
|
||||||
layoutSize = layoutSize + layout->getLayoutContentSize();
|
layoutSize = layoutSize + layout->getLayoutAccumulatedSize();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1559,7 +1051,7 @@ Size Layout::getLayoutContentSize()const
|
||||||
if (w)
|
if (w)
|
||||||
{
|
{
|
||||||
widgetCount++;
|
widgetCount++;
|
||||||
Margin m = w->getLayoutParameter(LayoutParameter::Type::LINEAR)->getMargin();
|
Margin m = w->getLayoutParameter()->getMargin();
|
||||||
layoutSize = layoutSize + w->getSize() + Size(m.right + m.left, m.top + m.bottom) * 0.5;
|
layoutSize = layoutSize + w->getSize() + Size(m.right + m.left, m.top + m.bottom) * 0.5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1582,7 +1074,7 @@ Vec2 Layout::getWorldCenterPoint(Widget* widget)
|
||||||
{
|
{
|
||||||
Layout *layout = dynamic_cast<Layout*>(widget);
|
Layout *layout = dynamic_cast<Layout*>(widget);
|
||||||
//FIXEDME: we don't need to calculate the content size of layout anymore
|
//FIXEDME: we don't need to calculate the content size of layout anymore
|
||||||
Size widgetSize = layout ? layout->getLayoutContentSize() : widget->getSize();
|
Size widgetSize = layout ? layout->getLayoutAccumulatedSize() : widget->getSize();
|
||||||
// CCLOG("contnet size : width = %f, height = %f", widgetSize.width, widgetSize.height);
|
// CCLOG("contnet size : width = %f, height = %f", widgetSize.width, widgetSize.height);
|
||||||
return widget->convertToWorldSpace(Vec2(widgetSize.width/2, widgetSize.height/2));
|
return widget->convertToWorldSpace(Vec2(widgetSize.width/2, widgetSize.height/2));
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,14 +30,27 @@ THE SOFTWARE.
|
||||||
NS_CC_BEGIN
|
NS_CC_BEGIN
|
||||||
|
|
||||||
namespace ui {
|
namespace ui {
|
||||||
|
|
||||||
|
class LayoutExecutant;
|
||||||
|
|
||||||
|
class LayoutProtocol
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
LayoutProtocol(){}
|
||||||
|
virtual ~LayoutProtocol(){}
|
||||||
|
|
||||||
|
virtual LayoutExecutant* createLayoutExecutant() = 0;
|
||||||
|
virtual const Size getLayoutContentSize() = 0;
|
||||||
|
virtual const Vector<Node*>& getLayoutElements() = 0;
|
||||||
|
virtual void doLayout() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @js NA
|
* @js NA
|
||||||
* @lua NA
|
* @lua NA
|
||||||
*/
|
*/
|
||||||
class LayoutExecutant;
|
|
||||||
|
|
||||||
class Layout : public Widget
|
class Layout : public Widget, public LayoutProtocol
|
||||||
{
|
{
|
||||||
|
|
||||||
DECLARE_CLASS_GUI_INFO
|
DECLARE_CLASS_GUI_INFO
|
||||||
|
@ -313,7 +326,11 @@ protected:
|
||||||
|
|
||||||
void setStencilClippingSize(const Size& size);
|
void setStencilClippingSize(const Size& size);
|
||||||
const Rect& getClippingRect();
|
const Rect& getClippingRect();
|
||||||
virtual void doLayout();
|
|
||||||
|
virtual void doLayout()override;
|
||||||
|
virtual LayoutExecutant* createLayoutExecutant()override;
|
||||||
|
virtual const Size getLayoutContentSize()override;
|
||||||
|
virtual const Vector<Node*>& getLayoutElements() override;
|
||||||
|
|
||||||
//clipping
|
//clipping
|
||||||
void onBeforeVisitStencil();
|
void onBeforeVisitStencil();
|
||||||
|
@ -325,12 +342,11 @@ protected:
|
||||||
void updateBackGroundImageColor();
|
void updateBackGroundImageColor();
|
||||||
void updateBackGroundImageOpacity();
|
void updateBackGroundImageOpacity();
|
||||||
void updateBackGroundImageRGBA();
|
void updateBackGroundImageRGBA();
|
||||||
LayoutExecutant* createCurrentLayoutExecutant();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*get the content size of the layout, it will accumulate all its children's content size
|
*get the content size of the layout, it will accumulate all its children's content size
|
||||||
*/
|
*/
|
||||||
Size getLayoutContentSize() const;
|
Size getLayoutAccumulatedSize() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When the layout get focused, it the layout pass the focus to its child, it will use this method to determine which child
|
* When the layout get focused, it the layout pass the focus to its child, it will use this method to determine which child
|
||||||
|
@ -477,8 +493,6 @@ protected:
|
||||||
Color3B _backGroundImageColor;
|
Color3B _backGroundImageColor;
|
||||||
GLubyte _backGroundImageOpacity;
|
GLubyte _backGroundImageOpacity;
|
||||||
|
|
||||||
LayoutExecutant* _curLayoutExecutant;
|
|
||||||
|
|
||||||
GLint _mask_layer_le;
|
GLint _mask_layer_le;
|
||||||
GroupCommand _groupCommand;
|
GroupCommand _groupCommand;
|
||||||
CustomCommand _beforeVisitCmdStencil;
|
CustomCommand _beforeVisitCmdStencil;
|
||||||
|
|
|
@ -0,0 +1,559 @@
|
||||||
|
/****************************************************************************
|
||||||
|
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||||
|
|
||||||
|
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.
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "UILayoutExecutant.h"
|
||||||
|
#include "UILayout.h"
|
||||||
|
|
||||||
|
NS_CC_BEGIN
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
LinearVerticalLayoutExecutant* LinearVerticalLayoutExecutant::create()
|
||||||
|
{
|
||||||
|
LinearVerticalLayoutExecutant* exe = new LinearVerticalLayoutExecutant();
|
||||||
|
if (exe)
|
||||||
|
{
|
||||||
|
exe->autorelease();
|
||||||
|
return exe;
|
||||||
|
}
|
||||||
|
CC_SAFE_DELETE(exe);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
LinearHorizontalLayoutExecutant* LinearHorizontalLayoutExecutant::create()
|
||||||
|
{
|
||||||
|
LinearHorizontalLayoutExecutant* exe = new LinearHorizontalLayoutExecutant();
|
||||||
|
if (exe)
|
||||||
|
{
|
||||||
|
exe->autorelease();
|
||||||
|
return exe;
|
||||||
|
}
|
||||||
|
CC_SAFE_DELETE(exe);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
RelativeLayoutExecutant* RelativeLayoutExecutant::create()
|
||||||
|
{
|
||||||
|
RelativeLayoutExecutant* exe = new RelativeLayoutExecutant();
|
||||||
|
if (exe)
|
||||||
|
{
|
||||||
|
exe->autorelease();
|
||||||
|
return exe;
|
||||||
|
}
|
||||||
|
CC_SAFE_DELETE(exe);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LinearVerticalLayoutExecutant::doLayout(LayoutProtocol* layout)
|
||||||
|
{
|
||||||
|
Size layoutSize = layout->getLayoutContentSize();
|
||||||
|
Vector<Node*> container = layout->getLayoutElements();
|
||||||
|
float topBoundary = layoutSize.height;
|
||||||
|
|
||||||
|
for (auto& subWidget : container)
|
||||||
|
{
|
||||||
|
LayoutParameterProtocol* child = dynamic_cast<LayoutParameterProtocol*>(subWidget);
|
||||||
|
if (child)
|
||||||
|
{
|
||||||
|
LinearLayoutParameter* layoutParameter = dynamic_cast<LinearLayoutParameter*>(child->getLayoutParameter());
|
||||||
|
|
||||||
|
if (layoutParameter)
|
||||||
|
{
|
||||||
|
LinearLayoutParameter::LinearGravity childGravity = layoutParameter->getGravity();
|
||||||
|
Vec2 ap = subWidget->getAnchorPoint();
|
||||||
|
Size cs = subWidget->getContentSize();
|
||||||
|
float finalPosX = ap.x * cs.width;
|
||||||
|
float finalPosY = topBoundary - ((1.0f-ap.y) * cs.height);
|
||||||
|
switch (childGravity)
|
||||||
|
{
|
||||||
|
case LinearLayoutParameter::LinearGravity::NONE:
|
||||||
|
case LinearLayoutParameter::LinearGravity::LEFT:
|
||||||
|
break;
|
||||||
|
case LinearLayoutParameter::LinearGravity::RIGHT:
|
||||||
|
finalPosX = layoutSize.width - ((1.0f - ap.x) * cs.width);
|
||||||
|
break;
|
||||||
|
case LinearLayoutParameter::LinearGravity::CENTER_HORIZONTAL:
|
||||||
|
finalPosX = layoutSize.width / 2.0f - cs.width * (0.5f-ap.x);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Margin mg = layoutParameter->getMargin();
|
||||||
|
finalPosX += mg.left;
|
||||||
|
finalPosY -= mg.top;
|
||||||
|
subWidget->setPosition(Vec2(finalPosX, finalPosY));
|
||||||
|
topBoundary = subWidget->getPosition().y - subWidget->getAnchorPoint().y * subWidget->getContentSize().height - mg.bottom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LinearHorizontalLayoutExecutant::doLayout(LayoutProtocol* layout)
|
||||||
|
{
|
||||||
|
Size layoutSize = layout->getLayoutContentSize();
|
||||||
|
Vector<Node*> container = layout->getLayoutElements();
|
||||||
|
float leftBoundary = 0.0f;
|
||||||
|
for (auto& subWidget : container)
|
||||||
|
{
|
||||||
|
Widget* child = dynamic_cast<Widget*>(subWidget);
|
||||||
|
if (child)
|
||||||
|
{
|
||||||
|
LinearLayoutParameter* layoutParameter = dynamic_cast<LinearLayoutParameter*>(child->getLayoutParameter());
|
||||||
|
if (layoutParameter)
|
||||||
|
{
|
||||||
|
LinearLayoutParameter::LinearGravity childGravity = layoutParameter->getGravity();
|
||||||
|
Vec2 ap = child->getAnchorPoint();
|
||||||
|
Size cs = child->getSize();
|
||||||
|
float finalPosX = leftBoundary + (ap.x * cs.width);
|
||||||
|
float finalPosY = layoutSize.height - (1.0f - ap.y) * cs.height;
|
||||||
|
switch (childGravity)
|
||||||
|
{
|
||||||
|
case LinearLayoutParameter::LinearGravity::NONE:
|
||||||
|
case LinearLayoutParameter::LinearGravity::TOP:
|
||||||
|
break;
|
||||||
|
case LinearLayoutParameter::LinearGravity::BOTTOM:
|
||||||
|
finalPosY = ap.y * cs.height;
|
||||||
|
break;
|
||||||
|
case LinearLayoutParameter::LinearGravity::CENTER_VERTICAL:
|
||||||
|
finalPosY = layoutSize.height / 2.0f - cs.height * (0.5f - ap.y);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Margin mg = layoutParameter->getMargin();
|
||||||
|
finalPosX += mg.left;
|
||||||
|
finalPosY -= mg.top;
|
||||||
|
child->setPosition(Vec2(finalPosX, finalPosY));
|
||||||
|
leftBoundary = child->getRightBoundary() + mg.right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector<Widget*> RelativeLayoutExecutant::getAllWidgets(cocos2d::ui::LayoutProtocol *layout)
|
||||||
|
{
|
||||||
|
Vector<Node*> container = layout->getLayoutElements();
|
||||||
|
Vector<Widget*> widgetChildren;
|
||||||
|
for (auto& subWidget : container)
|
||||||
|
{
|
||||||
|
Widget* child = dynamic_cast<Widget*>(subWidget);
|
||||||
|
if (child)
|
||||||
|
{
|
||||||
|
RelativeLayoutParameter* layoutParameter = dynamic_cast<RelativeLayoutParameter*>(child->getLayoutParameter());
|
||||||
|
layoutParameter->_put = false;
|
||||||
|
_unlayoutChildCount++;
|
||||||
|
widgetChildren.pushBack(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return widgetChildren;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget* RelativeLayoutExecutant::getRelativeWidget(Widget* widget)
|
||||||
|
{
|
||||||
|
Widget* relativeWidget = nullptr;
|
||||||
|
RelativeLayoutParameter* layoutParameter = dynamic_cast<RelativeLayoutParameter*>(widget->getLayoutParameter());
|
||||||
|
const std::string relativeName = layoutParameter->getRelativeToWidgetName();
|
||||||
|
|
||||||
|
if (!relativeName.empty())
|
||||||
|
{
|
||||||
|
for (auto& sWidget : _widgetChildren)
|
||||||
|
{
|
||||||
|
if (sWidget)
|
||||||
|
{
|
||||||
|
RelativeLayoutParameter* rlayoutParameter = dynamic_cast<RelativeLayoutParameter*>(sWidget->getLayoutParameter());
|
||||||
|
if (rlayoutParameter && rlayoutParameter->getRelativeName() == relativeName)
|
||||||
|
{
|
||||||
|
relativeWidget = sWidget;
|
||||||
|
_relativeWidgetLP = rlayoutParameter;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return relativeWidget;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RelativeLayoutExecutant::caculateFinalPositionWithRelativeWidget(LayoutProtocol *layout)
|
||||||
|
{
|
||||||
|
Vec2 ap = _widget->getAnchorPoint();
|
||||||
|
Size cs = _widget->getSize();
|
||||||
|
|
||||||
|
_finalPositionX = 0.0f;
|
||||||
|
_finalPositionY = 0.0f;
|
||||||
|
|
||||||
|
Widget* relativeWidget = this->getRelativeWidget(_widget);
|
||||||
|
|
||||||
|
RelativeLayoutParameter* layoutParameter = dynamic_cast<RelativeLayoutParameter*>(_widget->getLayoutParameter());
|
||||||
|
|
||||||
|
RelativeLayoutParameter::RelativeAlign align = layoutParameter->getAlign();
|
||||||
|
|
||||||
|
Size layoutSize = layout->getLayoutContentSize();
|
||||||
|
|
||||||
|
|
||||||
|
switch (align)
|
||||||
|
{
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::NONE:
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::PARENT_TOP_LEFT:
|
||||||
|
_finalPositionX = ap.x * cs.width;
|
||||||
|
_finalPositionY = layoutSize.height - ((1.0f - ap.y) * cs.height);
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::PARENT_TOP_CENTER_HORIZONTAL:
|
||||||
|
_finalPositionX = layoutSize.width * 0.5f - cs.width * (0.5f - ap.x);
|
||||||
|
_finalPositionY = layoutSize.height - ((1.0f - ap.y) * cs.height);
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::PARENT_TOP_RIGHT:
|
||||||
|
_finalPositionX = layoutSize.width - ((1.0f - ap.x) * cs.width);
|
||||||
|
_finalPositionY = layoutSize.height - ((1.0f - ap.y) * cs.height);
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::PARENT_LEFT_CENTER_VERTICAL:
|
||||||
|
_finalPositionX = ap.x * cs.width;
|
||||||
|
_finalPositionY = layoutSize.height * 0.5f - cs.height * (0.5f - ap.y);
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::CENTER_IN_PARENT:
|
||||||
|
_finalPositionX = layoutSize.width * 0.5f - cs.width * (0.5f - ap.x);
|
||||||
|
_finalPositionY = layoutSize.height * 0.5f - cs.height * (0.5f - ap.y);
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::PARENT_RIGHT_CENTER_VERTICAL:
|
||||||
|
_finalPositionX = layoutSize.width - ((1.0f - ap.x) * cs.width);
|
||||||
|
_finalPositionY = layoutSize.height * 0.5f - cs.height * (0.5f - ap.y);
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::PARENT_LEFT_BOTTOM:
|
||||||
|
_finalPositionX = ap.x * cs.width;
|
||||||
|
_finalPositionY = ap.y * cs.height;
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::PARENT_BOTTOM_CENTER_HORIZONTAL:
|
||||||
|
_finalPositionX = layoutSize.width * 0.5f - cs.width * (0.5f - ap.x);
|
||||||
|
_finalPositionY = ap.y * cs.height;
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::PARENT_RIGHT_BOTTOM:
|
||||||
|
_finalPositionX = layoutSize.width - ((1.0f - ap.x) * cs.width);
|
||||||
|
_finalPositionY = ap.y * cs.height;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_ABOVE_LEFTALIGN:
|
||||||
|
if (relativeWidget)
|
||||||
|
{
|
||||||
|
if (_relativeWidgetLP && !_relativeWidgetLP->_put)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
float locationTop = relativeWidget->getTopBoundary();
|
||||||
|
float locationLeft = relativeWidget->getLeftBoundary();
|
||||||
|
_finalPositionY = locationTop + ap.y * cs.height;
|
||||||
|
_finalPositionX = locationLeft + ap.x * cs.width;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_ABOVE_CENTER:
|
||||||
|
if (relativeWidget)
|
||||||
|
{
|
||||||
|
if (_relativeWidgetLP && !_relativeWidgetLP->_put)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Size rbs = relativeWidget->getSize();
|
||||||
|
float locationTop = relativeWidget->getTopBoundary();
|
||||||
|
|
||||||
|
_finalPositionY = locationTop + ap.y * cs.height;
|
||||||
|
_finalPositionX = relativeWidget->getLeftBoundary() + rbs.width * 0.5f + ap.x * cs.width - cs.width * 0.5f;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_ABOVE_RIGHTALIGN:
|
||||||
|
if (relativeWidget)
|
||||||
|
{
|
||||||
|
if (_relativeWidgetLP && !_relativeWidgetLP->_put)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
float locationTop = relativeWidget->getTopBoundary();
|
||||||
|
float locationRight = relativeWidget->getRightBoundary();
|
||||||
|
_finalPositionY = locationTop + ap.y * cs.height;
|
||||||
|
_finalPositionX = locationRight - (1.0f - ap.x) * cs.width;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_LEFT_OF_TOPALIGN:
|
||||||
|
if (relativeWidget)
|
||||||
|
{
|
||||||
|
if (_relativeWidgetLP && !_relativeWidgetLP->_put)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
float locationTop = relativeWidget->getTopBoundary();
|
||||||
|
float locationLeft = relativeWidget->getLeftBoundary();
|
||||||
|
_finalPositionY = locationTop - (1.0f - ap.y) * cs.height;
|
||||||
|
_finalPositionX = locationLeft - (1.0f - ap.x) * cs.width;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_LEFT_OF_CENTER:
|
||||||
|
if (relativeWidget)
|
||||||
|
{
|
||||||
|
if (_relativeWidgetLP && !_relativeWidgetLP->_put)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Size rbs = relativeWidget->getSize();
|
||||||
|
float locationLeft = relativeWidget->getLeftBoundary();
|
||||||
|
_finalPositionX = locationLeft - (1.0f - ap.x) * cs.width;
|
||||||
|
|
||||||
|
_finalPositionY = relativeWidget->getBottomBoundary() + rbs.height * 0.5f + ap.y * cs.height - cs.height * 0.5f;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_LEFT_OF_BOTTOMALIGN:
|
||||||
|
if (relativeWidget)
|
||||||
|
{
|
||||||
|
if (_relativeWidgetLP && !_relativeWidgetLP->_put)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
float locationBottom = relativeWidget->getBottomBoundary();
|
||||||
|
float locationLeft = relativeWidget->getLeftBoundary();
|
||||||
|
_finalPositionY = locationBottom + ap.y * cs.height;
|
||||||
|
_finalPositionX = locationLeft - (1.0f - ap.x) * cs.width;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_RIGHT_OF_TOPALIGN:
|
||||||
|
if (relativeWidget)
|
||||||
|
{
|
||||||
|
if (_relativeWidgetLP && !_relativeWidgetLP->_put)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
float locationTop = relativeWidget->getTopBoundary();
|
||||||
|
float locationRight = relativeWidget->getRightBoundary();
|
||||||
|
_finalPositionY = locationTop - (1.0f - ap.y) * cs.height;
|
||||||
|
_finalPositionX = locationRight + ap.x * cs.width;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_RIGHT_OF_CENTER:
|
||||||
|
if (relativeWidget)
|
||||||
|
{
|
||||||
|
if (_relativeWidgetLP && !_relativeWidgetLP->_put)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Size rbs = relativeWidget->getSize();
|
||||||
|
float locationRight = relativeWidget->getRightBoundary();
|
||||||
|
_finalPositionX = locationRight + ap.x * cs.width;
|
||||||
|
|
||||||
|
_finalPositionY = relativeWidget->getBottomBoundary() + rbs.height * 0.5f + ap.y * cs.height - cs.height * 0.5f;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_RIGHT_OF_BOTTOMALIGN:
|
||||||
|
if (relativeWidget)
|
||||||
|
{
|
||||||
|
if (_relativeWidgetLP && !_relativeWidgetLP->_put)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
float locationBottom = relativeWidget->getBottomBoundary();
|
||||||
|
float locationRight = relativeWidget->getRightBoundary();
|
||||||
|
_finalPositionY = locationBottom + ap.y * cs.height;
|
||||||
|
_finalPositionX = locationRight + ap.x * cs.width;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_BELOW_LEFTALIGN:
|
||||||
|
if (relativeWidget)
|
||||||
|
{
|
||||||
|
if (_relativeWidgetLP && !_relativeWidgetLP->_put)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
float locationBottom = relativeWidget->getBottomBoundary();
|
||||||
|
float locationLeft = relativeWidget->getLeftBoundary();
|
||||||
|
_finalPositionY = locationBottom - (1.0f - ap.y) * cs.height;
|
||||||
|
_finalPositionX = locationLeft + ap.x * cs.width;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_BELOW_CENTER:
|
||||||
|
if (relativeWidget)
|
||||||
|
{
|
||||||
|
if (_relativeWidgetLP && !_relativeWidgetLP->_put)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Size rbs = relativeWidget->getSize();
|
||||||
|
float locationBottom = relativeWidget->getBottomBoundary();
|
||||||
|
|
||||||
|
_finalPositionY = locationBottom - (1.0f - ap.y) * cs.height;
|
||||||
|
_finalPositionX = relativeWidget->getLeftBoundary() + rbs.width * 0.5f + ap.x * cs.width - cs.width * 0.5f;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_BELOW_RIGHTALIGN:
|
||||||
|
if (relativeWidget)
|
||||||
|
{
|
||||||
|
if (_relativeWidgetLP && !_relativeWidgetLP->_put)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
float locationBottom = relativeWidget->getBottomBoundary();
|
||||||
|
float locationRight = relativeWidget->getRightBoundary();
|
||||||
|
_finalPositionY = locationBottom - (1.0f - ap.y) * cs.height;
|
||||||
|
_finalPositionX = locationRight - (1.0f - ap.x) * cs.width;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RelativeLayoutExecutant::caculateFinalPositionWithRelativeAlign()
|
||||||
|
{
|
||||||
|
RelativeLayoutParameter* layoutParameter = dynamic_cast<RelativeLayoutParameter*>(_widget->getLayoutParameter());
|
||||||
|
|
||||||
|
Margin mg = layoutParameter->getMargin();
|
||||||
|
|
||||||
|
|
||||||
|
RelativeLayoutParameter::RelativeAlign align = layoutParameter->getAlign();
|
||||||
|
|
||||||
|
//handle margin
|
||||||
|
switch (align)
|
||||||
|
{
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::NONE:
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::PARENT_TOP_LEFT:
|
||||||
|
_finalPositionX += mg.left;
|
||||||
|
_finalPositionY -= mg.top;
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::PARENT_TOP_CENTER_HORIZONTAL:
|
||||||
|
_finalPositionY -= mg.top;
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::PARENT_TOP_RIGHT:
|
||||||
|
_finalPositionX -= mg.right;
|
||||||
|
_finalPositionY -= mg.top;
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::PARENT_LEFT_CENTER_VERTICAL:
|
||||||
|
_finalPositionX += mg.left;
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::CENTER_IN_PARENT:
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::PARENT_RIGHT_CENTER_VERTICAL:
|
||||||
|
_finalPositionX -= mg.right;
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::PARENT_LEFT_BOTTOM:
|
||||||
|
_finalPositionX += mg.left;
|
||||||
|
_finalPositionY += mg.bottom;
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::PARENT_BOTTOM_CENTER_HORIZONTAL:
|
||||||
|
_finalPositionY += mg.bottom;
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::PARENT_RIGHT_BOTTOM:
|
||||||
|
_finalPositionX -= mg.right;
|
||||||
|
_finalPositionY += mg.bottom;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_ABOVE_LEFTALIGN:
|
||||||
|
_finalPositionY += mg.bottom;
|
||||||
|
_finalPositionX += mg.left;
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_ABOVE_RIGHTALIGN:
|
||||||
|
_finalPositionY += mg.bottom;
|
||||||
|
_finalPositionX -= mg.right;
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_ABOVE_CENTER:
|
||||||
|
_finalPositionY += mg.bottom;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_LEFT_OF_TOPALIGN:
|
||||||
|
_finalPositionX -= mg.right;
|
||||||
|
_finalPositionY -= mg.top;
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_LEFT_OF_BOTTOMALIGN:
|
||||||
|
_finalPositionX -= mg.right;
|
||||||
|
_finalPositionY += mg.bottom;
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_LEFT_OF_CENTER:
|
||||||
|
_finalPositionX -= mg.right;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_RIGHT_OF_TOPALIGN:
|
||||||
|
_finalPositionX += mg.left;
|
||||||
|
_finalPositionY -= mg.top;
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_RIGHT_OF_BOTTOMALIGN:
|
||||||
|
_finalPositionX += mg.left;
|
||||||
|
_finalPositionY += mg.bottom;
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_RIGHT_OF_CENTER:
|
||||||
|
_finalPositionX += mg.left;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_BELOW_LEFTALIGN:
|
||||||
|
_finalPositionY -= mg.top;
|
||||||
|
_finalPositionX += mg.left;
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_BELOW_RIGHTALIGN:
|
||||||
|
_finalPositionY -= mg.top;
|
||||||
|
_finalPositionX -= mg.right;
|
||||||
|
break;
|
||||||
|
case RelativeLayoutParameter::RelativeAlign::LOCATION_BELOW_CENTER:
|
||||||
|
_finalPositionY -= mg.top;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RelativeLayoutExecutant::doLayout(LayoutProtocol *layout)
|
||||||
|
{
|
||||||
|
|
||||||
|
_widgetChildren = this->getAllWidgets(layout);
|
||||||
|
|
||||||
|
while (_unlayoutChildCount > 0)
|
||||||
|
{
|
||||||
|
for (auto& subWidget : _widgetChildren)
|
||||||
|
{
|
||||||
|
_widget = static_cast<Widget*>(subWidget);
|
||||||
|
|
||||||
|
RelativeLayoutParameter* layoutParameter = dynamic_cast<RelativeLayoutParameter*>(_widget->getLayoutParameter());
|
||||||
|
|
||||||
|
if (layoutParameter)
|
||||||
|
{
|
||||||
|
if (layoutParameter->_put)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool ret = this->caculateFinalPositionWithRelativeWidget(layout);
|
||||||
|
if (!ret) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->caculateFinalPositionWithRelativeAlign();
|
||||||
|
|
||||||
|
|
||||||
|
_widget->setPosition(Vec2(_finalPositionX, _finalPositionY));
|
||||||
|
|
||||||
|
layoutParameter->_put = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_unlayoutChildCount--;
|
||||||
|
|
||||||
|
}
|
||||||
|
_widgetChildren.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_CC_END
|
|
@ -0,0 +1,98 @@
|
||||||
|
/****************************************************************************
|
||||||
|
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||||
|
|
||||||
|
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 __cocos2d_libs__CCLayoutExecutant__
|
||||||
|
#define __cocos2d_libs__CCLayoutExecutant__
|
||||||
|
|
||||||
|
#include "base/CCRef.h"
|
||||||
|
#include "base/CCVector.h"
|
||||||
|
|
||||||
|
NS_CC_BEGIN
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class LayoutProtocol;
|
||||||
|
class Widget;
|
||||||
|
class RelativeLayoutParameter;
|
||||||
|
|
||||||
|
class LayoutExecutant : public Ref
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
LayoutExecutant(){};
|
||||||
|
virtual ~LayoutExecutant(){};
|
||||||
|
|
||||||
|
virtual void doLayout(LayoutProtocol *layout) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class LinearVerticalLayoutExecutant : public LayoutExecutant
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
LinearVerticalLayoutExecutant(){};
|
||||||
|
virtual ~LinearVerticalLayoutExecutant(){};
|
||||||
|
static LinearVerticalLayoutExecutant* create();
|
||||||
|
virtual void doLayout(LayoutProtocol *layout) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class LinearHorizontalLayoutExecutant : public LayoutExecutant
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
LinearHorizontalLayoutExecutant(){};
|
||||||
|
virtual ~LinearHorizontalLayoutExecutant(){};
|
||||||
|
static LinearHorizontalLayoutExecutant* create();
|
||||||
|
virtual void doLayout(LayoutProtocol *layout) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class RelativeLayoutExecutant : public LayoutExecutant
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RelativeLayoutExecutant()
|
||||||
|
:_unlayoutChildCount(0),
|
||||||
|
_widget(nullptr),
|
||||||
|
_finalPositionX(0.0f),
|
||||||
|
_finalPositionY(0.0f),
|
||||||
|
_relativeWidgetLP(nullptr)
|
||||||
|
{}
|
||||||
|
virtual ~RelativeLayoutExecutant(){};
|
||||||
|
static RelativeLayoutExecutant* create();
|
||||||
|
virtual void doLayout(LayoutProtocol *layout) override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Vector<Widget*> getAllWidgets(LayoutProtocol *layout);
|
||||||
|
Widget* getRelativeWidget(Widget* widget);
|
||||||
|
bool caculateFinalPositionWithRelativeWidget(LayoutProtocol *layout);
|
||||||
|
void caculateFinalPositionWithRelativeAlign();
|
||||||
|
|
||||||
|
ssize_t _unlayoutChildCount;
|
||||||
|
Vector<Widget*> _widgetChildren;
|
||||||
|
Widget* _widget;
|
||||||
|
float _finalPositionX;
|
||||||
|
float _finalPositionY;
|
||||||
|
|
||||||
|
RelativeLayoutParameter* _relativeWidgetLP;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_CC_END
|
||||||
|
#endif /* defined(__cocos2d_libs__CCLayoutExecutant__) */
|
|
@ -129,6 +129,15 @@ protected:
|
||||||
Margin _margin;
|
Margin _margin;
|
||||||
Type _layoutParameterType;
|
Type _layoutParameterType;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class LayoutParameterProtocol
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
LayoutParameterProtocol(){}
|
||||||
|
virtual ~LayoutParameterProtocol(){}
|
||||||
|
|
||||||
|
virtual LayoutParameter* getLayoutParameter() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -130,7 +130,7 @@ void ListView::remedyLayoutParameter(Widget *item)
|
||||||
switch (_direction) {
|
switch (_direction) {
|
||||||
case Direction::VERTICAL:
|
case Direction::VERTICAL:
|
||||||
{
|
{
|
||||||
LinearLayoutParameter* llp = (LinearLayoutParameter*)(item->getLayoutParameter(LayoutParameter::Type::LINEAR));
|
LinearLayoutParameter* llp = (LinearLayoutParameter*)(item->getLayoutParameter());
|
||||||
if (!llp)
|
if (!llp)
|
||||||
{
|
{
|
||||||
LinearLayoutParameter* defaultLp = LinearLayoutParameter::create();
|
LinearLayoutParameter* defaultLp = LinearLayoutParameter::create();
|
||||||
|
@ -185,7 +185,7 @@ void ListView::remedyLayoutParameter(Widget *item)
|
||||||
}
|
}
|
||||||
case Direction::HORIZONTAL:
|
case Direction::HORIZONTAL:
|
||||||
{
|
{
|
||||||
LinearLayoutParameter* llp = (LinearLayoutParameter*)(item->getLayoutParameter(LayoutParameter::Type::LINEAR));
|
LinearLayoutParameter* llp = (LinearLayoutParameter*)(item->getLayoutParameter());
|
||||||
if (!llp)
|
if (!llp)
|
||||||
{
|
{
|
||||||
LinearLayoutParameter* defaultLp = LinearLayoutParameter::create();
|
LinearLayoutParameter* defaultLp = LinearLayoutParameter::create();
|
||||||
|
|
|
@ -435,18 +435,18 @@ bool PageView::scrollPages(float touchOffset)
|
||||||
switch (_touchMoveDir)
|
switch (_touchMoveDir)
|
||||||
{
|
{
|
||||||
case TouchDirection::LEFT: // left
|
case TouchDirection::LEFT: // left
|
||||||
if (_rightChild->getRightInParent() + touchOffset <= _rightBoundary)
|
if (_rightChild->getRightBoundary() + touchOffset <= _rightBoundary)
|
||||||
{
|
{
|
||||||
realOffset = _rightBoundary - _rightChild->getRightInParent();
|
realOffset = _rightBoundary - _rightChild->getRightBoundary();
|
||||||
movePages(realOffset);
|
movePages(realOffset);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TouchDirection::RIGHT: // right
|
case TouchDirection::RIGHT: // right
|
||||||
if (_leftChild->getLeftInParent() + touchOffset >= _leftBoundary)
|
if (_leftChild->getLeftBoundary() + touchOffset >= _leftBoundary)
|
||||||
{
|
{
|
||||||
realOffset = _leftBoundary - _leftChild->getLeftInParent();
|
realOffset = _leftBoundary - _leftChild->getLeftBoundary();
|
||||||
movePages(realOffset);
|
movePages(realOffset);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -357,7 +357,13 @@ protected:
|
||||||
void startBounceChildren(float v);
|
void startBounceChildren(float v);
|
||||||
void stopBounceChildren();
|
void stopBounceChildren();
|
||||||
bool checkCustomScrollDestination(float* touchOffsetX, float* touchOffsetY);
|
bool checkCustomScrollDestination(float* touchOffsetX, float* touchOffsetY);
|
||||||
|
|
||||||
virtual bool scrollChildren(float touchOffsetX, float touchOffsetY);
|
virtual bool scrollChildren(float touchOffsetX, float touchOffsetY);
|
||||||
|
virtual bool scrollChilderHorizontal(float touchOffsetX, float touchOffsetY);
|
||||||
|
virtual bool scrollChilderVertical(float touchOffsetX, float touchOffsetY);
|
||||||
|
virtual bool scrollChilderBoth(float touchOffsetX, float touchOffsetY);
|
||||||
|
|
||||||
|
|
||||||
bool bounceScrollChildren(float touchOffsetX, float touchOffsetY);
|
bool bounceScrollChildren(float touchOffsetX, float touchOffsetY);
|
||||||
void startRecordSlidAction();
|
void startRecordSlidAction();
|
||||||
virtual void endRecordSlidAction();
|
virtual void endRecordSlidAction();
|
||||||
|
|
|
@ -62,7 +62,8 @@ _opacity(255),
|
||||||
_flippedX(false),
|
_flippedX(false),
|
||||||
_flippedY(false),
|
_flippedY(false),
|
||||||
_focused(false),
|
_focused(false),
|
||||||
_focusEnabled(true)
|
_focusEnabled(true),
|
||||||
|
_layoutParameterType(LayoutParameter::Type::NONE)
|
||||||
{
|
{
|
||||||
onFocusChanged = CC_CALLBACK_2(Widget::onFocusChange,this);
|
onFocusChanged = CC_CALLBACK_2(Widget::onFocusChange,this);
|
||||||
onNextFocusedWidget = nullptr;
|
onNextFocusedWidget = nullptr;
|
||||||
|
@ -815,24 +816,24 @@ bool Widget::isEnabled() const
|
||||||
return _enabled;
|
return _enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
float Widget::getLeftInParent()
|
float Widget::getLeftBoundary() const
|
||||||
{
|
{
|
||||||
return getPosition().x - getAnchorPoint().x * _size.width;;
|
return getPosition().x - getAnchorPoint().x * _size.width;
|
||||||
}
|
}
|
||||||
|
|
||||||
float Widget::getBottomInParent()
|
float Widget::getBottomBoundary() const
|
||||||
{
|
{
|
||||||
return getPosition().y - getAnchorPoint().y * _size.height;;
|
return getPosition().y - getAnchorPoint().y * _size.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
float Widget::getRightInParent()
|
float Widget::getRightBoundary() const
|
||||||
{
|
{
|
||||||
return getLeftInParent() + _size.width;
|
return getLeftBoundary() + _size.width;
|
||||||
}
|
}
|
||||||
|
|
||||||
float Widget::getTopInParent()
|
float Widget::getTopBoundary() const
|
||||||
{
|
{
|
||||||
return getBottomInParent() + _size.height;
|
return getBottomBoundary() + _size.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Vec2& Widget::getTouchStartPos()
|
const Vec2& Widget::getTouchStartPos()
|
||||||
|
@ -868,8 +869,14 @@ void Widget::setLayoutParameter(LayoutParameter *parameter)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_layoutParameterDictionary.insert((int)parameter->getLayoutType(), parameter);
|
_layoutParameterDictionary.insert((int)parameter->getLayoutType(), parameter);
|
||||||
|
_layoutParameterType = parameter->getLayoutType();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LayoutParameter* Widget::getLayoutParameter()
|
||||||
|
{
|
||||||
|
return dynamic_cast<LayoutParameter*>(_layoutParameterDictionary.at((int)_layoutParameterType));
|
||||||
|
}
|
||||||
|
|
||||||
LayoutParameter* Widget::getLayoutParameter(LayoutParameter::Type type)
|
LayoutParameter* Widget::getLayoutParameter(LayoutParameter::Type type)
|
||||||
{
|
{
|
||||||
return dynamic_cast<LayoutParameter*>(_layoutParameterDictionary.at((int)type));
|
return dynamic_cast<LayoutParameter*>(_layoutParameterDictionary.at((int)type));
|
||||||
|
|
|
@ -28,6 +28,7 @@ THE SOFTWARE.
|
||||||
#include "ui/CCProtectedNode.h"
|
#include "ui/CCProtectedNode.h"
|
||||||
#include "ui/UILayoutParameter.h"
|
#include "ui/UILayoutParameter.h"
|
||||||
#include "ui/GUIDefine.h"
|
#include "ui/GUIDefine.h"
|
||||||
|
#include "ui/UILayoutParameter.h"
|
||||||
|
|
||||||
NS_CC_BEGIN
|
NS_CC_BEGIN
|
||||||
|
|
||||||
|
@ -57,7 +58,7 @@ CC_DEPRECATED_ATTRIBUTE typedef void (Ref::*SEL_TouchEvent)(Ref*,TouchEventType)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
class Widget : public ProtectedNode
|
class Widget : public ProtectedNode, public LayoutParameterProtocol
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum class FocusDirection
|
enum class FocusDirection
|
||||||
|
@ -200,28 +201,32 @@ public:
|
||||||
*
|
*
|
||||||
* @return The left boundary position of this widget.
|
* @return The left boundary position of this widget.
|
||||||
*/
|
*/
|
||||||
float getLeftInParent();
|
CC_DEPRECATED_ATTRIBUTE float getLeftInParent(){return this->getLeftBoundary();}
|
||||||
|
float getLeftBoundary() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the bottom boundary position of this widget.
|
* Gets the bottom boundary position of this widget.
|
||||||
*
|
*
|
||||||
* @return The bottom boundary position of this widget.
|
* @return The bottom boundary position of this widget.
|
||||||
*/
|
*/
|
||||||
float getBottomInParent();
|
CC_DEPRECATED_ATTRIBUTE float getBottomInParent(){return this->getBottomBoundary();}
|
||||||
|
float getBottomBoundary() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the right boundary position of this widget.
|
* Gets the right boundary position of this widget.
|
||||||
*
|
*
|
||||||
* @return The right boundary position of this widget.
|
* @return The right boundary position of this widget.
|
||||||
*/
|
*/
|
||||||
float getRightInParent();
|
CC_DEPRECATED_ATTRIBUTE float getRightInParent(){return this->getRightBoundary();}
|
||||||
|
float getRightBoundary() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the top boundary position of this widget.
|
* Gets the top boundary position of this widget.
|
||||||
*
|
*
|
||||||
* @return The top boundary position of this widget.
|
* @return The top boundary position of this widget.
|
||||||
*/
|
*/
|
||||||
float getTopInParent();
|
CC_DEPRECATED_ATTRIBUTE float getTopInParent(){return this->getTopBoundary();}
|
||||||
|
float getTopBoundary() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a child from the container with its name
|
* Gets a child from the container with its name
|
||||||
|
@ -479,7 +484,9 @@ public:
|
||||||
*
|
*
|
||||||
* @return LayoutParameter
|
* @return LayoutParameter
|
||||||
*/
|
*/
|
||||||
LayoutParameter* getLayoutParameter(LayoutParameter::Type type);
|
LayoutParameter* getLayoutParameter() override;
|
||||||
|
CC_DEPRECATED_ATTRIBUTE LayoutParameter* getLayoutParameter(LayoutParameter::Type type);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ignore the widget size
|
* Ignore the widget size
|
||||||
|
@ -667,9 +674,12 @@ protected:
|
||||||
Size _size;
|
Size _size;
|
||||||
Size _customSize;
|
Size _customSize;
|
||||||
bool _ignoreSize;
|
bool _ignoreSize;
|
||||||
bool _affectByClipping;
|
|
||||||
SizeType _sizeType;
|
SizeType _sizeType;
|
||||||
Vec2 _sizePercent;
|
Vec2 _sizePercent;
|
||||||
|
|
||||||
|
bool _affectByClipping;
|
||||||
|
|
||||||
PositionType _positionType;
|
PositionType _positionType;
|
||||||
Vec2 _positionPercent;
|
Vec2 _positionPercent;
|
||||||
bool _reorderWidgetChildDirty;
|
bool _reorderWidgetChildDirty;
|
||||||
|
@ -679,8 +689,10 @@ protected:
|
||||||
GLubyte _opacity;
|
GLubyte _opacity;
|
||||||
bool _flippedX;
|
bool _flippedX;
|
||||||
bool _flippedY;
|
bool _flippedY;
|
||||||
Map<int, LayoutParameter*> _layoutParameterDictionary;
|
//use map to enble switch back and forth for user layout parameters
|
||||||
|
Map<int,LayoutParameter*> _layoutParameterDictionary;
|
||||||
|
LayoutParameter::Type _layoutParameterType;
|
||||||
|
|
||||||
bool _focused;
|
bool _focused;
|
||||||
bool _focusEnabled;
|
bool _focusEnabled;
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
<ClInclude Include="..\UIHelper.h" />
|
<ClInclude Include="..\UIHelper.h" />
|
||||||
<ClInclude Include="..\UIImageView.h" />
|
<ClInclude Include="..\UIImageView.h" />
|
||||||
<ClInclude Include="..\UILayout.h" />
|
<ClInclude Include="..\UILayout.h" />
|
||||||
|
<ClInclude Include="..\UILayoutExecutant.h" />
|
||||||
<ClInclude Include="..\UILayoutParameter.h" />
|
<ClInclude Include="..\UILayoutParameter.h" />
|
||||||
<ClInclude Include="..\UIListView.h" />
|
<ClInclude Include="..\UIListView.h" />
|
||||||
<ClInclude Include="..\UILoadingBar.h" />
|
<ClInclude Include="..\UILoadingBar.h" />
|
||||||
|
@ -44,6 +45,7 @@
|
||||||
<ClCompile Include="..\UIHelper.cpp" />
|
<ClCompile Include="..\UIHelper.cpp" />
|
||||||
<ClCompile Include="..\UIImageView.cpp" />
|
<ClCompile Include="..\UIImageView.cpp" />
|
||||||
<ClCompile Include="..\UILayout.cpp" />
|
<ClCompile Include="..\UILayout.cpp" />
|
||||||
|
<ClCompile Include="..\UILayoutExecutant.cpp" />
|
||||||
<ClCompile Include="..\UILayoutParameter.cpp" />
|
<ClCompile Include="..\UILayoutParameter.cpp" />
|
||||||
<ClCompile Include="..\UIListView.cpp" />
|
<ClCompile Include="..\UIListView.cpp" />
|
||||||
<ClCompile Include="..\UILoadingBar.cpp" />
|
<ClCompile Include="..\UILoadingBar.cpp" />
|
||||||
|
|
|
@ -87,6 +87,9 @@
|
||||||
<ClInclude Include="..\UIVBox.h">
|
<ClInclude Include="..\UIVBox.h">
|
||||||
<Filter>Layouts</Filter>
|
<Filter>Layouts</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\UILayoutExecutant.h">
|
||||||
|
<Filter>Layouts</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\UIScrollView.cpp">
|
<ClCompile Include="..\UIScrollView.cpp">
|
||||||
|
@ -155,5 +158,8 @@
|
||||||
<ClCompile Include="..\UIVBox.cpp">
|
<ClCompile Include="..\UIVBox.cpp">
|
||||||
<Filter>Layouts</Filter>
|
<Filter>Layouts</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\UILayoutExecutant.cpp">
|
||||||
|
<Filter>Layouts</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -60,13 +60,13 @@ bool UIScrollViewTest_Vertical::init()
|
||||||
|
|
||||||
Button* titleButton = Button::create("cocosui/backtotopnormal.png", "cocosui/backtotoppressed.png");
|
Button* titleButton = Button::create("cocosui/backtotopnormal.png", "cocosui/backtotoppressed.png");
|
||||||
titleButton->setTitleText("Title Button");
|
titleButton->setTitleText("Title Button");
|
||||||
titleButton->setPosition(Vec2(innerWidth / 2.0f, button->getBottomInParent() - button->getSize().height));
|
titleButton->setPosition(Vec2(innerWidth / 2.0f, button->getBottomBoundary() - button->getSize().height));
|
||||||
scrollView->addChild(titleButton);
|
scrollView->addChild(titleButton);
|
||||||
|
|
||||||
Button* button_scale9 = Button::create("cocosui/button.png", "cocosui/buttonHighlighted.png");
|
Button* button_scale9 = Button::create("cocosui/button.png", "cocosui/buttonHighlighted.png");
|
||||||
button_scale9->setScale9Enabled(true);
|
button_scale9->setScale9Enabled(true);
|
||||||
button_scale9->setSize(Size(100.0f, button_scale9->getVirtualRendererSize().height));
|
button_scale9->setSize(Size(100.0f, button_scale9->getVirtualRendererSize().height));
|
||||||
button_scale9->setPosition(Vec2(innerWidth / 2.0f, titleButton->getBottomInParent() - titleButton->getSize().height));
|
button_scale9->setPosition(Vec2(innerWidth / 2.0f, titleButton->getBottomBoundary() - titleButton->getSize().height));
|
||||||
scrollView->addChild(button_scale9);
|
scrollView->addChild(button_scale9);
|
||||||
|
|
||||||
imageView->setPosition(Vec2(innerWidth / 2.0f, imageView->getSize().height / 2.0f));
|
imageView->setPosition(Vec2(innerWidth / 2.0f, imageView->getSize().height / 2.0f));
|
||||||
|
@ -137,19 +137,19 @@ bool UIScrollViewTest_Horizontal::init()
|
||||||
|
|
||||||
Button* titleButton = Button::create("cocosui/backtotopnormal.png", "cocosui/backtotoppressed.png");
|
Button* titleButton = Button::create("cocosui/backtotopnormal.png", "cocosui/backtotoppressed.png");
|
||||||
titleButton->setTitleText("Title Button");
|
titleButton->setTitleText("Title Button");
|
||||||
titleButton->setPosition(Vec2(button->getRightInParent() + button->getSize().width / 2.0f,
|
titleButton->setPosition(Vec2(button->getRightBoundary() + button->getSize().width / 2.0f,
|
||||||
button->getBottomInParent() - button->getSize().height / 2.0f));
|
button->getBottomBoundary() - button->getSize().height / 2.0f));
|
||||||
scrollView->addChild(titleButton);
|
scrollView->addChild(titleButton);
|
||||||
|
|
||||||
Button* button_scale9 = Button::create("cocosui/button.png", "cocosui/buttonHighlighted.png");
|
Button* button_scale9 = Button::create("cocosui/button.png", "cocosui/buttonHighlighted.png");
|
||||||
button_scale9->setScale9Enabled(true);
|
button_scale9->setScale9Enabled(true);
|
||||||
button_scale9->setSize(Size(100.0f, button_scale9->getVirtualRendererSize().height));
|
button_scale9->setSize(Size(100.0f, button_scale9->getVirtualRendererSize().height));
|
||||||
button_scale9->setPosition(Vec2(titleButton->getRightInParent() + titleButton->getSize().width / 2.0f,
|
button_scale9->setPosition(Vec2(titleButton->getRightBoundary() + titleButton->getSize().width / 2.0f,
|
||||||
titleButton->getBottomInParent() - titleButton->getSize().height / 2.0f));
|
titleButton->getBottomBoundary() - titleButton->getSize().height / 2.0f));
|
||||||
scrollView->addChild(button_scale9);
|
scrollView->addChild(button_scale9);
|
||||||
|
|
||||||
imageView->setPosition(Vec2(innerWidth - imageView->getSize().width / 2.0f,
|
imageView->setPosition(Vec2(innerWidth - imageView->getSize().width / 2.0f,
|
||||||
button_scale9->getBottomInParent() - button_scale9->getSize().height / 2.0f));
|
button_scale9->getBottomBoundary() - button_scale9->getSize().height / 2.0f));
|
||||||
scrollView->addChild(imageView);
|
scrollView->addChild(imageView);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in New Issue