ccb 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (335) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +20 -0
  3. data/README.md +31 -0
  4. data/bin/ccb +4 -0
  5. data/lib/ccb/builder/project_builder.rb +14 -0
  6. data/lib/ccb/builder/scene_builder.rb +9 -0
  7. data/lib/ccb/builder/templates/project/GameConfig.js.tt +21 -0
  8. data/lib/ccb/builder/templates/project/_cocos-project.json +4 -0
  9. data/lib/ccb/builder/templates/project/folder/CMakeLists.txt +295 -0
  10. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/Base64Images.js +32 -0
  11. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/CCBoot.js +2271 -0
  12. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/CCDebugger.js +336 -0
  13. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/actions/CCAction.js +694 -0
  14. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/actions/CCActionCamera.js +293 -0
  15. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/actions/CCActionCatmullRom.js +605 -0
  16. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/actions/CCActionEase.js +3681 -0
  17. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/actions/CCActionInstant.js +757 -0
  18. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/actions/CCActionInterval.js +3554 -0
  19. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/actions/CCActionTween.js +166 -0
  20. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/actions3d/CCActionGrid.js +372 -0
  21. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/actions3d/CCActionGrid3D.js +1257 -0
  22. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/actions3d/CCActionPageTurn3D.js +113 -0
  23. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/actions3d/CCActionTiledGrid.js +1289 -0
  24. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/audio/CCAudio.js +1024 -0
  25. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/clipping-nodes/CCClippingNode.js +224 -0
  26. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/clipping-nodes/CCClippingNodeCanvasRenderCmd.js +227 -0
  27. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/clipping-nodes/CCClippingNodeWebGLRenderCmd.js +226 -0
  28. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/compression/ZipUtils.js +82 -0
  29. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/compression/base64.js +95 -0
  30. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/compression/gzip.js +731 -0
  31. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/compression/zlib.min.js +55 -0
  32. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/CCActionManager.js +378 -0
  33. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/CCCamera.js +290 -0
  34. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/CCConfiguration.js +294 -0
  35. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/CCDirector.js +1019 -0
  36. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/CCDirectorWebGL.js +329 -0
  37. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/CCDrawingPrimitivesCanvas.js +438 -0
  38. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/CCDrawingPrimitivesWebGL.js +464 -0
  39. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/CCScheduler.js +744 -0
  40. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/base-nodes/BaseNodesPropertyDefine.js +127 -0
  41. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/base-nodes/CCAtlasNode.js +294 -0
  42. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/base-nodes/CCAtlasNodeCanvasRenderCmd.js +138 -0
  43. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/base-nodes/CCAtlasNodeWebGLRenderCmd.js +145 -0
  44. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/base-nodes/CCNode.js +2386 -0
  45. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/base-nodes/CCNodeCanvasRenderCmd.js +504 -0
  46. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/base-nodes/CCNodeWebGLRenderCmd.js +254 -0
  47. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/cocoa/CCAffineTransform.js +259 -0
  48. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/cocoa/CCGeometry.js +327 -0
  49. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/event-manager/CCEvent.js +449 -0
  50. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/event-manager/CCEventExtension.js +126 -0
  51. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/event-manager/CCEventListener.js +519 -0
  52. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/event-manager/CCEventManager.js +1025 -0
  53. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/event-manager/CCTouch.js +175 -0
  54. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/labelttf/CCLabelTTF.js +829 -0
  55. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/labelttf/CCLabelTTFCanvasRenderCmd.js +420 -0
  56. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/labelttf/CCLabelTTFWebGLRenderCmd.js +101 -0
  57. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/labelttf/LabelTTFPropertyDefine.js +88 -0
  58. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/layers/CCLayer.js +642 -0
  59. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/layers/CCLayerCanvasRenderCmd.js +434 -0
  60. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/layers/CCLayerWebGLRenderCmd.js +248 -0
  61. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/platform/CCClass.js +333 -0
  62. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/platform/CCCommon.js +303 -0
  63. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/platform/CCConfig.js +303 -0
  64. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/platform/CCEGLView.js +1245 -0
  65. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/platform/CCInputExtension.js +135 -0
  66. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/platform/CCInputManager.js +616 -0
  67. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/platform/CCLoaders.js +142 -0
  68. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/platform/CCMacro.js +830 -0
  69. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/platform/CCSAXParser.js +160 -0
  70. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/platform/CCScreen.js +155 -0
  71. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/platform/CCTypes.js +374 -0
  72. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/platform/CCTypesPropertyDefine.js +165 -0
  73. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/platform/CCTypesWebGL.js +689 -0
  74. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/platform/CCVisibleRect.js +100 -0
  75. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/platform/miniFramework.js +264 -0
  76. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/renderer/RendererCanvas.js +274 -0
  77. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/renderer/RendererWebGL.js +137 -0
  78. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/scenes/CCLoaderScene.js +149 -0
  79. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/scenes/CCScene.js +62 -0
  80. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/sprites/CCAnimation.js +477 -0
  81. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/sprites/CCAnimationCache.js +213 -0
  82. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/sprites/CCBakeSprite.js +71 -0
  83. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/sprites/CCSprite.js +1014 -0
  84. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/sprites/CCSpriteBatchNode.js +676 -0
  85. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/sprites/CCSpriteBatchNodeCanvasRenderCmd.js +101 -0
  86. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/sprites/CCSpriteBatchNodeWebGLRenderCmd.js +243 -0
  87. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/sprites/CCSpriteCanvasRenderCmd.js +518 -0
  88. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/sprites/CCSpriteFrame.js +420 -0
  89. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/sprites/CCSpriteFrameCache.js +341 -0
  90. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/sprites/CCSpriteWebGLRenderCmd.js +493 -0
  91. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/sprites/SpritesPropertyDefine.js +67 -0
  92. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/support/CCPointExtension.js +515 -0
  93. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/support/CCVertex.js +170 -0
  94. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/support/TransformUtils.js +62 -0
  95. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/textures/CCTexture2D.js +455 -0
  96. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/textures/CCTextureAtlas.js +653 -0
  97. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/textures/CCTextureCache.js +371 -0
  98. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/textures/TexturesPropertyDefine.js +221 -0
  99. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/textures/TexturesWebGL.js +899 -0
  100. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/core/utils/BinaryLoader.js +151 -0
  101. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/effects/CCGrabber.js +110 -0
  102. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/effects/CCGrid.js +737 -0
  103. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/kazmath/aabb.js +68 -0
  104. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/kazmath/gl/mat4stack.js +59 -0
  105. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/kazmath/gl/matrix.js +169 -0
  106. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/kazmath/mat3.js +329 -0
  107. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/kazmath/mat4.js +810 -0
  108. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/kazmath/plane.js +184 -0
  109. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/kazmath/quaternion.js +497 -0
  110. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/kazmath/ray2.js +163 -0
  111. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/kazmath/utility.js +76 -0
  112. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/kazmath/vec2.js +107 -0
  113. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/kazmath/vec3.js +205 -0
  114. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/kazmath/vec4.js +158 -0
  115. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/labels/CCLabelAtlas.js +239 -0
  116. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/labels/CCLabelAtlasCanvasRenderCmd.js +95 -0
  117. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/labels/CCLabelAtlasWebGLRenderCmd.js +132 -0
  118. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/labels/CCLabelBMFont.js +958 -0
  119. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/labels/CCLabelBMFontCanvasRenderCmd.js +142 -0
  120. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/labels/CCLabelBMFontWebGLRenderCmd.js +87 -0
  121. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/menus/CCMenu.js +600 -0
  122. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/menus/CCMenuItem.js +1422 -0
  123. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/motion-streak/CCMotionStreak.js +517 -0
  124. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/motion-streak/CCMotionStreakWebGLRenderCmd.js +66 -0
  125. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/node-grid/CCNodeGrid.js +129 -0
  126. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/node-grid/CCNodeGridWebGLRenderCmd.js +98 -0
  127. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/parallax/CCParallaxNode.js +252 -0
  128. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/parallax/CCParallaxNodeRenderCmd.js +69 -0
  129. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/particle/CCPNGReader.js +330 -0
  130. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/particle/CCParticleBatchNode.js +527 -0
  131. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/particle/CCParticleBatchNodeCanvasRenderCmd.js +38 -0
  132. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/particle/CCParticleBatchNodeWebGLRenderCmd.js +74 -0
  133. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/particle/CCParticleExamples.js +1006 -0
  134. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/particle/CCParticleSystem.js +2294 -0
  135. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/particle/CCParticleSystemCanvasRenderCmd.js +217 -0
  136. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/particle/CCParticleSystemWebGLRenderCmd.js +402 -0
  137. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/particle/CCTIFFReader.js +692 -0
  138. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/physics/CCPhysicsDebugNode.js +212 -0
  139. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/physics/CCPhysicsDebugNodeCanvasRenderCmd.js +52 -0
  140. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/physics/CCPhysicsDebugNodeWebGLRenderCmd.js +53 -0
  141. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/physics/CCPhysicsSprite.js +447 -0
  142. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/physics/CCPhysicsSpriteCanvasRenderCmd.js +93 -0
  143. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/physics/CCPhysicsSpriteWebGLRenderCmd.js +87 -0
  144. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/progress-timer/CCActionProgressTimer.js +227 -0
  145. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/progress-timer/CCProgressTimer.js +345 -0
  146. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/progress-timer/CCProgressTimerCanvasRenderCmd.js +270 -0
  147. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/progress-timer/CCProgressTimerWebGLRenderCmd.js +486 -0
  148. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/render-texture/CCRenderTexture.js +395 -0
  149. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/render-texture/CCRenderTextureCanvasRenderCmd.js +105 -0
  150. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/render-texture/CCRenderTextureWebGLRenderCmd.js +367 -0
  151. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/shaders/CCGLProgram.js +767 -0
  152. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/shaders/CCGLStateCache.js +340 -0
  153. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/shaders/CCShaderCache.js +301 -0
  154. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/shaders/CCShaders.js +280 -0
  155. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/shape-nodes/CCDrawNode.js +940 -0
  156. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/shape-nodes/CCDrawNodeCanvasRenderCmd.js +129 -0
  157. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/shape-nodes/CCDrawNodeWebGLRenderCmd.js +41 -0
  158. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/text-input/CCIMEDispatcher.js +526 -0
  159. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/text-input/CCTextFieldTTF.js +472 -0
  160. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/tilemap/CCTGAlib.js +437 -0
  161. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/tilemap/CCTMXLayer.js +914 -0
  162. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/tilemap/CCTMXLayerCanvasRenderCmd.js +232 -0
  163. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/tilemap/CCTMXLayerWebGLRenderCmd.js +67 -0
  164. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/tilemap/CCTMXObjectGroup.js +146 -0
  165. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/tilemap/CCTMXTiledMap.js +479 -0
  166. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/tilemap/CCTMXXMLParser.js +950 -0
  167. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/transitions/CCTransition.js +1971 -0
  168. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/transitions/CCTransitionPageTurn.js +152 -0
  169. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/cocos2d/transitions/CCTransitionProgress.js +458 -0
  170. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccb-reader/CCBAnimationManager.js +770 -0
  171. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccb-reader/CCBKeyframe.js +60 -0
  172. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccb-reader/CCBReader.js +1129 -0
  173. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccb-reader/CCBReaderUtil.js +61 -0
  174. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccb-reader/CCBRelativePositioning.js +90 -0
  175. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccb-reader/CCBSequence.js +114 -0
  176. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccb-reader/CCBValue.js +81 -0
  177. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccb-reader/CCControlLoader.js +318 -0
  178. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccb-reader/CCNodeLoader.js +905 -0
  179. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccb-reader/CCNodeLoaderLibrary.js +101 -0
  180. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccb-reader/CCSpriteLoader.js +544 -0
  181. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccpool/CCPool.js +146 -0
  182. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/base-classes/CCProtectedNode.js +305 -0
  183. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/base-classes/CCProtectedNodeCanvasRenderCmd.js +246 -0
  184. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/base-classes/CCProtectedNodeWebGLRenderCmd.js +159 -0
  185. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/base-classes/UIScale9Sprite.js +1105 -0
  186. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/base-classes/UIScale9SpriteCanvasRenderCmd.js +142 -0
  187. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/base-classes/UIScale9SpriteWebGLRenderCmd.js +129 -0
  188. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/base-classes/UIWidget.js +2059 -0
  189. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/base-classes/UIWidgetRenderCmd.js +100 -0
  190. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/layouts/UIHBox.js +80 -0
  191. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/layouts/UILayout.js +1558 -0
  192. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/layouts/UILayoutCanvasRenderCmd.js +179 -0
  193. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/layouts/UILayoutComponent.js +585 -0
  194. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/layouts/UILayoutManager.js +457 -0
  195. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/layouts/UILayoutParameter.js +576 -0
  196. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/layouts/UILayoutWebGLRenderCmd.js +240 -0
  197. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/layouts/UIRelativeBox.js +79 -0
  198. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/layouts/UIVBox.js +79 -0
  199. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/system/CocosGUI.js +62 -0
  200. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/system/UIHelper.js +164 -0
  201. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/uiwidgets/UIButton.js +987 -0
  202. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/uiwidgets/UICheckBox.js +737 -0
  203. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/uiwidgets/UIImageView.js +337 -0
  204. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/uiwidgets/UILoadingBar.js +432 -0
  205. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/uiwidgets/UIRichText.js +579 -0
  206. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/uiwidgets/UISlider.js +762 -0
  207. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/uiwidgets/UIText.js +512 -0
  208. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/uiwidgets/UITextAtlas.js +229 -0
  209. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/uiwidgets/UITextBMFont.js +216 -0
  210. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/uiwidgets/UITextField.js +915 -0
  211. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/uiwidgets/scroll-widget/UIListView.js +602 -0
  212. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/uiwidgets/scroll-widget/UIPageView.js +657 -0
  213. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/ccui/uiwidgets/scroll-widget/UIScrollView.js +1884 -0
  214. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/CocoStudio.js +68 -0
  215. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/action/CCActionFrame.js +528 -0
  216. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/action/CCActionManager.js +112 -0
  217. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/action/CCActionNode.js +417 -0
  218. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/action/CCActionObject.js +263 -0
  219. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/CCArmature.js +579 -0
  220. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/CCArmatureCanvasRenderCmd.js +190 -0
  221. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/CCArmatureWebGLRenderCmd.js +167 -0
  222. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/CCBone.js +711 -0
  223. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/animation/CCArmatureAnimation.js +669 -0
  224. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/animation/CCProcessBase.js +365 -0
  225. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/animation/CCTween.js +448 -0
  226. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/datas/CCDatas.js +807 -0
  227. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/display/CCDecorativeDisplay.js +118 -0
  228. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/display/CCDisplayFactory.js +220 -0
  229. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/display/CCDisplayManager.js +465 -0
  230. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/display/CCSkin.js +215 -0
  231. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/display/CCSkinCanvasRenderCmd.js +58 -0
  232. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/display/CCSkinWebGLRenderCmd.js +146 -0
  233. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/physics/CCColliderDetector.js +397 -0
  234. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/utils/CCArmatureDataManager.js +325 -0
  235. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/utils/CCArmatureDefine.js +45 -0
  236. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/utils/CCDataReaderHelper.js +1223 -0
  237. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/utils/CCSpriteFrameCacheHelper.js +68 -0
  238. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/utils/CCTransformHelp.js +183 -0
  239. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/utils/CCTweenFunction.js +501 -0
  240. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/armature/utils/CCUtilMath.js +69 -0
  241. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/components/CCComAttribute.js +210 -0
  242. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/components/CCComAudio.js +285 -0
  243. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/components/CCComController.js +76 -0
  244. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/components/CCComRender.js +91 -0
  245. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/components/CCComponent.js +136 -0
  246. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/components/CCComponentContainer.js +159 -0
  247. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/loader/load.js +221 -0
  248. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/loader/parsers/action-1.x.js +238 -0
  249. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/loader/parsers/action-2.x.js +266 -0
  250. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/loader/parsers/compatible.js +251 -0
  251. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/loader/parsers/scene-1.x.js +262 -0
  252. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/loader/parsers/timelineParser-1.x.js +292 -0
  253. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/loader/parsers/timelineParser-2.x.js +1288 -0
  254. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/loader/parsers/uiParser-1.x.js +680 -0
  255. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/timeline/ActionTimeline.js +448 -0
  256. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/timeline/Frame.js +1268 -0
  257. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/timeline/Timeline.js +321 -0
  258. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/trigger/ObjectFactory.js +99 -0
  259. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/trigger/TriggerBase.js +49 -0
  260. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/trigger/TriggerMng.js +301 -0
  261. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/cocostudio/trigger/TriggerObj.js +263 -0
  262. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/editbox/CCEditBox.js +716 -0
  263. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/editbox/CCdomNode.js +657 -0
  264. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/control-extension/CCControl.js +381 -0
  265. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/control-extension/CCControlButton.js +688 -0
  266. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/control-extension/CCControlColourPicker.js +187 -0
  267. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/control-extension/CCControlHuePicker.js +218 -0
  268. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/control-extension/CCControlPotentiometer.js +300 -0
  269. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/control-extension/CCControlSaturationBrightnessPicker.js +257 -0
  270. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/control-extension/CCControlSlider.js +308 -0
  271. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/control-extension/CCControlStepper.js +390 -0
  272. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/control-extension/CCControlSwitch.js +425 -0
  273. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/control-extension/CCControlUtils.js +177 -0
  274. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/control-extension/CCInvocation.js +65 -0
  275. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/control-extension/CCMenuPassive.js +415 -0
  276. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/control-extension/CCScale9Sprite.js +1099 -0
  277. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/control-extension/CCScale9SpriteCanvasRenderCmd.js +142 -0
  278. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/control-extension/CCScale9SpriteWebGLRenderCmd.js +129 -0
  279. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/scrollview/CCScrollView.js +827 -0
  280. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/scrollview/CCScrollViewCanvasRenderCmd.js +79 -0
  281. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/scrollview/CCScrollViewWebGLRenderCmd.js +108 -0
  282. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/scrollview/CCSorting.js +239 -0
  283. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/gui/scrollview/CCTableView.js +718 -0
  284. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/spine/CCSkeleton.js +357 -0
  285. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/spine/CCSkeletonAnimation.js +340 -0
  286. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/spine/CCSkeletonCanvasRenderCmd.js +165 -0
  287. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/spine/CCSkeletonWebGLRenderCmd.js +165 -0
  288. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/extensions/spine/Spine.js +2239 -0
  289. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/external/box2d/box2d.js +10882 -0
  290. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/external/chipmunk/chipmunk.js +6196 -0
  291. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/external/pluginx/Plugin.js +254 -0
  292. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/external/pluginx/platform/facebook.js +557 -0
  293. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/external/pluginx/platform/facebook_sdk.js +151 -0
  294. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/external/socketio/socket.io.min.js +2 -0
  295. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/jsb_apis.js +618 -0
  296. data/lib/ccb/builder/templates/project/folder/frameworks/cocos2d-html5/moduleConfig.json +453 -0
  297. data/lib/ccb/builder/templates/project/folder/project.json +42 -0
  298. data/lib/ccb/builder/templates/project/folder/res/CloseNormal.png +0 -0
  299. data/lib/ccb/builder/templates/project/folder/res/CloseSelected.png +0 -0
  300. data/lib/ccb/builder/templates/project/folder/res/HelloWorld.png +0 -0
  301. data/lib/ccb/builder/templates/project/folder/res/favicon.ico +0 -0
  302. data/lib/ccb/builder/templates/project/folder/res/gameOver/cocos2d-html5.png +0 -0
  303. data/lib/ccb/builder/templates/project/folder/res/gameOver/gameOver.png +0 -0
  304. data/lib/ccb/builder/templates/project/folder/res/mainMenu/bg.png +0 -0
  305. data/lib/ccb/builder/templates/project/folder/res/mainMenu/menu.png +0 -0
  306. data/lib/ccb/builder/templates/project/folder/res/setting/menuTitle.png +0 -0
  307. data/lib/ccb/builder/templates/project/folder/res/shared/arial-14.fnt +182 -0
  308. data/lib/ccb/builder/templates/project/folder/res/shared/arial-14.png +0 -0
  309. data/lib/ccb/builder/templates/project/folder/res/sound/music/bgMusic.mp3 +0 -0
  310. data/lib/ccb/builder/templates/project/folder/src/about/layer/ABBackgroundLayer.js +23 -0
  311. data/lib/ccb/builder/templates/project/folder/src/about/layer/ABTouchLayer.js +51 -0
  312. data/lib/ccb/builder/templates/project/folder/src/about/scene/About.js +36 -0
  313. data/lib/ccb/builder/templates/project/folder/src/config/Level.js +7 -0
  314. data/lib/ccb/builder/templates/project/folder/src/gameOver/layer/GOBackgroundLayer.js +50 -0
  315. data/lib/ccb/builder/templates/project/folder/src/gameOver/layer/GOTouchLayer.js +51 -0
  316. data/lib/ccb/builder/templates/project/folder/src/gameOver/scene/GameOver.js +38 -0
  317. data/lib/ccb/builder/templates/project/folder/src/gamePlay/classes/LevelManager.js +21 -0
  318. data/lib/ccb/builder/templates/project/folder/src/gamePlay/layer/GPBackgroundLayer.js +25 -0
  319. data/lib/ccb/builder/templates/project/folder/src/gamePlay/layer/GPTouchLayer.js +51 -0
  320. data/lib/ccb/builder/templates/project/folder/src/gamePlay/scene/GamePlay.js +44 -0
  321. data/lib/ccb/builder/templates/project/folder/src/mainMenu/layer/MMBackgroundLayer.js +43 -0
  322. data/lib/ccb/builder/templates/project/folder/src/mainMenu/layer/MMMainMenuLayer.js +38 -0
  323. data/lib/ccb/builder/templates/project/folder/src/mainMenu/layer/MMTouchLayer.js +96 -0
  324. data/lib/ccb/builder/templates/project/folder/src/mainMenu/scene/MainMenu.js +45 -0
  325. data/lib/ccb/builder/templates/project/folder/src/resource.js +29 -0
  326. data/lib/ccb/builder/templates/project/folder/src/setting/layer/STBackgroundLayer.js +25 -0
  327. data/lib/ccb/builder/templates/project/folder/src/setting/layer/STTouchLayer.js +89 -0
  328. data/lib/ccb/builder/templates/project/folder/src/setting/scene/Setting.js +40 -0
  329. data/lib/ccb/builder/templates/project/index.html.tt +27 -0
  330. data/lib/ccb/builder/templates/project/main.js.tt +62 -0
  331. data/lib/ccb/cli.rb +32 -0
  332. data/lib/ccb/ext/method_hooker.rb +68 -0
  333. data/lib/ccb/ext/string_extention.rb +7 -0
  334. data/lib/ccb.rb +1 -0
  335. metadata +449 -0
@@ -0,0 +1,1558 @@
1
+ /****************************************************************************
2
+ Copyright (c) 2011-2012 cocos2d-x.org
3
+ Copyright (c) 2013-2014 Chukong Technologies Inc.
4
+
5
+ http://www.cocos2d-x.org
6
+
7
+ Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ of this software and associated documentation files (the "Software"), to deal
9
+ in the Software without restriction, including without limitation the rights
10
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ copies of the Software, and to permit persons to whom the Software is
12
+ furnished to do so, subject to the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be included in
15
+ all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ THE SOFTWARE.
24
+ ****************************************************************************/
25
+
26
+ /**
27
+ * ccui.Layout is the base class of ccui.PageView and ccui.ScrollView, it does layout by layout manager
28
+ * and clips area by its _clippingStencil when clippingEnabled is true.
29
+ * @class
30
+ * @extends ccui.Widget
31
+ *
32
+ * @property {Boolean} clippingEnabled - Indicate whether clipping is enabled
33
+ * @property {ccui.Layout.CLIPPING_STENCIL|ccui.Layout.CLIPPING_SCISSOR} clippingType
34
+ * @property {ccui.Layout.ABSOLUTE|ccui.Layout.LINEAR_VERTICAL|ccui.Layout.LINEAR_HORIZONTAL|ccui.Layout.RELATIVE} layoutType
35
+ *
36
+ */
37
+ ccui.Layout = ccui.Widget.extend(/** @lends ccui.Layout# */{
38
+ _clippingEnabled: false,
39
+ _backGroundScale9Enabled: null,
40
+ _backGroundImage: null,
41
+ _backGroundImageFileName: null,
42
+ _backGroundImageCapInsets: null,
43
+ _colorType: null,
44
+ _bgImageTexType: ccui.Widget.LOCAL_TEXTURE,
45
+ _colorRender: null,
46
+ _gradientRender: null,
47
+ _color: null,
48
+ _startColor: null,
49
+ _endColor: null,
50
+ _alongVector: null,
51
+ _opacity: 255,
52
+ _backGroundImageTextureSize: null,
53
+ _layoutType: null,
54
+ _doLayoutDirty: true,
55
+ _clippingRectDirty: true,
56
+ _clippingType: null,
57
+ _clippingStencil: null,
58
+ _scissorRectDirty: false,
59
+ _clippingRect: null,
60
+ _clippingParent: null,
61
+ _className: "Layout",
62
+ _backGroundImageColor: null,
63
+ _finalPositionX: 0,
64
+ _finalPositionY: 0,
65
+
66
+ _backGroundImageOpacity:0,
67
+
68
+ _loopFocus: false, //whether enable loop focus or not
69
+ __passFocusToChild: true, //on default, it will pass the focus to the next nearest widget
70
+ _isFocusPassing:false, //when finding the next focused widget, use this variable to pass focus between layout & widget
71
+ _isInterceptTouch: false,
72
+
73
+ /**
74
+ * Allocates and initializes an UILayout.
75
+ * Constructor of ccui.Layout
76
+ * @function
77
+ * @example
78
+ * // example
79
+ * var uiLayout = new ccui.Layout();
80
+ */
81
+ ctor: function () {
82
+ this._layoutType = ccui.Layout.ABSOLUTE;
83
+ this._widgetType = ccui.Widget.TYPE_CONTAINER;
84
+ this._clippingType = ccui.Layout.CLIPPING_STENCIL;
85
+ this._colorType = ccui.Layout.BG_COLOR_NONE;
86
+
87
+ ccui.Widget.prototype.ctor.call(this);
88
+ this._backGroundImageCapInsets = cc.rect(0, 0, 0, 0);
89
+
90
+ this._color = cc.color(255, 255, 255, 255);
91
+ this._startColor = cc.color(255, 255, 255, 255);
92
+ this._endColor = cc.color(255, 255, 255, 255);
93
+ this._alongVector = cc.p(0, -1);
94
+ this._backGroundImageTextureSize = cc.size(0, 0);
95
+
96
+ this._clippingRect = cc.rect(0, 0, 0, 0);
97
+ this._backGroundImageColor = cc.color(255, 255, 255, 255);
98
+ },
99
+
100
+ /**
101
+ * Calls its parent's onEnter, and calls its clippingStencil's onEnter if clippingStencil isn't null.
102
+ * @override
103
+ */
104
+ onEnter: function(){
105
+ ccui.Widget.prototype.onEnter.call(this);
106
+ if (this._clippingStencil)
107
+ this._clippingStencil.onEnter();
108
+ this._doLayoutDirty = true;
109
+ this._clippingRectDirty = true;
110
+ },
111
+
112
+ /**
113
+ * Calls its parent's onExit, and calls its clippingStencil's onExit if clippingStencil isn't null.
114
+ * @override
115
+ */
116
+ onExit: function(){
117
+ ccui.Widget.prototype.onExit.call(this);
118
+ if (this._clippingStencil)
119
+ this._clippingStencil.onExit();
120
+ },
121
+
122
+ /**
123
+ * If a layout is loop focused which means that the focus movement will be inside the layout
124
+ * @param {Boolean} loop pass true to let the focus movement loop inside the layout
125
+ */
126
+ setLoopFocus: function(loop){
127
+ this._loopFocus = loop;
128
+ },
129
+
130
+ /**
131
+ * Gets whether enable focus loop
132
+ * @returns {boolean} If focus loop is enabled, then it will return true, otherwise it returns false. The default value is false.
133
+ */
134
+ isLoopFocus: function(){
135
+ return this._loopFocus;
136
+ },
137
+
138
+ /**
139
+ * Specifies whether the layout pass its focus to its child
140
+ * @param pass To specify whether the layout pass its focus to its child
141
+ */
142
+ setPassFocusToChild: function(pass){
143
+ this.__passFocusToChild = pass;
144
+ },
145
+
146
+ /**
147
+ * Returns whether the layout will pass the focus to its children or not. The default value is true
148
+ * @returns {boolean} To query whether the layout will pass the focus to its children or not. The default value is true
149
+ */
150
+ isPassFocusToChild: function(){
151
+ return this.__passFocusToChild;
152
+ },
153
+
154
+ /**
155
+ * When a widget is in a layout, you could call this method to get the next focused widget within a specified direction.
156
+ * If the widget is not in a layout, it will return itself
157
+ * @param {Number} direction the direction to look for the next focused widget in a layout
158
+ * @param {ccui.Widget} current the current focused widget
159
+ * @returns {ccui.Widget} return the index of widget in the layout
160
+ */
161
+ findNextFocusedWidget: function(direction, current){
162
+ if (this._isFocusPassing || this.isFocused()) {
163
+ var parent = this.getParent();
164
+ this._isFocusPassing = false;
165
+ if (this.__passFocusToChild) {
166
+ var w = this._passFocusToChild(direction, current);
167
+ if (w instanceof ccui.Layout && parent) {
168
+ parent._isFocusPassing = true;
169
+ return parent.findNextFocusedWidget(direction, this);
170
+ }
171
+ return w;
172
+ }
173
+
174
+ if (null == parent || !(parent instanceof ccui.Layout))
175
+ return this;
176
+ parent._isFocusPassing = true;
177
+ return parent.findNextFocusedWidget(direction, this);
178
+ } else if(current.isFocused() || current instanceof ccui.Layout) {
179
+ if (this._layoutType == ccui.Layout.LINEAR_HORIZONTAL) {
180
+ switch (direction){
181
+ case ccui.Widget.LEFT:
182
+ return this._getPreviousFocusedWidget(direction, current);
183
+ break;
184
+ case ccui.Widget.RIGHT:
185
+ return this._getNextFocusedWidget(direction, current);
186
+ break;
187
+ case ccui.Widget.DOWN:
188
+ case ccui.Widget.UP:
189
+ if (this._isLastWidgetInContainer(this, direction)){
190
+ if (this._isWidgetAncestorSupportLoopFocus(current, direction))
191
+ return ccui.Widget.prototype.findNextFocusedWidget.call(this, direction, this);
192
+ return current;
193
+ } else {
194
+ return ccui.Widget.prototype.findNextFocusedWidget.call(this, direction, this);
195
+ }
196
+ break;
197
+ default:
198
+ cc.assert(0, "Invalid Focus Direction");
199
+ return current;
200
+ }
201
+ } else if (this._layoutType == ccui.Layout.LINEAR_VERTICAL) {
202
+ switch (direction){
203
+ case ccui.Widget.LEFT:
204
+ case ccui.Widget.RIGHT:
205
+ if (this._isLastWidgetInContainer(this, direction)) {
206
+ if (this._isWidgetAncestorSupportLoopFocus(current, direction))
207
+ return ccui.Widget.prototype.findNextFocusedWidget.call(this, direction, this);
208
+ return current;
209
+ }
210
+ else
211
+ return ccui.Widget.prototype.findNextFocusedWidget.call(this, direction, this);
212
+ break;
213
+ case ccui.Widget.DOWN:
214
+ return this._getNextFocusedWidget(direction, current);
215
+ break;
216
+ case ccui.Widget.UP:
217
+ return this._getPreviousFocusedWidget(direction, current);
218
+ break;
219
+ default:
220
+ cc.assert(0, "Invalid Focus Direction");
221
+ return current;
222
+ }
223
+ } else {
224
+ cc.assert(0, "Un Supported Layout type, please use VBox and HBox instead!!!");
225
+ return current;
226
+ }
227
+ } else
228
+ return current;
229
+ },
230
+
231
+ /**
232
+ * To specify a user-defined functor to decide which child widget of the layout should get focused
233
+ * @function
234
+ * @param {Number} direction
235
+ * @param {ccui.Widget} current
236
+ */
237
+ onPassFocusToChild: null,
238
+
239
+ /**
240
+ * override "init" method of widget. please do not call this function by yourself, you should pass the parameters to constructor to initialize it.
241
+ * @returns {boolean}
242
+ * @override
243
+ */
244
+ init: function () {
245
+ if (ccui.Widget.prototype.init.call(this)) {
246
+ this.ignoreContentAdaptWithSize(false);
247
+ this.setContentSize(cc.size(0, 0));
248
+ this.setAnchorPoint(0, 0);
249
+ this.onPassFocusToChild = this._findNearestChildWidgetIndex.bind(this);
250
+ return true;
251
+ }
252
+ return false;
253
+ },
254
+
255
+ /**
256
+ * Adds a widget to the container.
257
+ * @param {ccui.Widget} widget
258
+ * @param {Number} [zOrder]
259
+ * @param {Number|string} [tag] tag or name
260
+ * @override
261
+ */
262
+ addChild: function (widget, zOrder, tag) {
263
+ if ((widget instanceof ccui.Widget)) {
264
+ this._supplyTheLayoutParameterLackToChild(widget);
265
+ }
266
+ ccui.Widget.prototype.addChild.call(this, widget, zOrder, tag);
267
+ this._doLayoutDirty = true;
268
+ },
269
+
270
+ /**
271
+ * Removes child widget from ccui.Layout, and sets the layout dirty flag to true.
272
+ * @param {ccui.Widget} widget
273
+ * @param {Boolean} [cleanup=true]
274
+ * @override
275
+ */
276
+ removeChild: function (widget, cleanup) {
277
+ ccui.Widget.prototype.removeChild.call(this, widget, cleanup);
278
+ this._doLayoutDirty = true;
279
+ },
280
+
281
+ /**
282
+ * Removes all children from the container with a cleanup, and sets the layout dirty flag to true.
283
+ * @param {Boolean} cleanup
284
+ */
285
+ removeAllChildren: function (cleanup) {
286
+ ccui.Widget.prototype.removeAllChildren.call(this, cleanup);
287
+ this._doLayoutDirty = true;
288
+ },
289
+
290
+ /**
291
+ * Removes all children from the container, do a cleanup to all running actions depending on the cleanup parameter,
292
+ * and sets the layout dirty flag to true.
293
+ * @param {Boolean} cleanup true if all running actions on all children nodes should be cleanup, false otherwise.
294
+ */
295
+ removeAllChildrenWithCleanup: function(cleanup){
296
+ ccui.Widget.prototype.removeAllChildrenWithCleanup.call(this, cleanup);
297
+ this._doLayoutDirty = true;
298
+ },
299
+
300
+ /**
301
+ * Gets if layout is clipping enabled.
302
+ * @returns {Boolean} if layout is clipping enabled.
303
+ */
304
+ isClippingEnabled: function () {
305
+ return this._clippingEnabled;
306
+ },
307
+
308
+ /**
309
+ * <p>
310
+ * Calls adaptRenderers (its subclass will override it.) and do layout.
311
+ * If clippingEnabled is true, it will clip/scissor area.
312
+ * </p>
313
+ * @override
314
+ * @param {cc.Node.RenderCmd} [parentCmd]
315
+ */
316
+ visit: function (parentCmd) {
317
+ if (!this._visible)
318
+ return;
319
+ this._adaptRenderers();
320
+ this._doLayout();
321
+
322
+ if (this._clippingEnabled) {
323
+ switch (this._clippingType) {
324
+ case ccui.Layout.CLIPPING_STENCIL:
325
+ this._renderCmd.stencilClippingVisit(parentCmd);
326
+ break;
327
+ case ccui.Layout.CLIPPING_SCISSOR:
328
+ this._renderCmd.scissorClippingVisit(parentCmd);
329
+ break;
330
+ default:
331
+ break;
332
+ }
333
+ } else
334
+ ccui.Widget.prototype.visit.call(this, parentCmd);
335
+ },
336
+
337
+ /**
338
+ * Changes if layout can clip it's content and locChild.
339
+ * If you really need this, please enable it. But it would reduce the rendering efficiency.
340
+ * @param {Boolean} able clipping enabled.
341
+ */
342
+ setClippingEnabled: function (able) {
343
+ if (able == this._clippingEnabled)
344
+ return;
345
+ this._clippingEnabled = able;
346
+ switch (this._clippingType) {
347
+ case ccui.Layout.CLIPPING_STENCIL:
348
+ if (able){
349
+ this._clippingStencil = new cc.DrawNode();
350
+ this._renderCmd.rebindStencilRendering(this._clippingStencil);
351
+ if (this._running)
352
+ this._clippingStencil.onEnter();
353
+ this._setStencilClippingSize(this._contentSize);
354
+ } else {
355
+ if (this._running && this._clippingStencil)
356
+ this._clippingStencil.onExit();
357
+ this._clippingStencil = null;
358
+ }
359
+ break;
360
+ default:
361
+ break;
362
+ }
363
+ },
364
+
365
+ /**
366
+ * Sets clipping type to ccui.Layout
367
+ * @param {ccui.Layout.CLIPPING_STENCIL|ccui.Layout.CLIPPING_SCISSOR} type
368
+ */
369
+ setClippingType: function (type) {
370
+ if (type == this._clippingType)
371
+ return;
372
+ if(cc._renderType === cc._RENDER_TYPE_CANVAS && type == ccui.Layout.CLIPPING_SCISSOR){
373
+ cc.log("Only supports STENCIL on canvas mode.");
374
+ return;
375
+ }
376
+ var clippingEnabled = this.isClippingEnabled();
377
+ this.setClippingEnabled(false);
378
+ this._clippingType = type;
379
+ this.setClippingEnabled(clippingEnabled);
380
+ },
381
+
382
+ /**
383
+ * Gets clipping type of ccui.Layout
384
+ * @returns {ccui.Layout.CLIPPING_STENCIL|ccui.Layout.CLIPPING_SCISSOR}
385
+ */
386
+ getClippingType: function () {
387
+ return this._clippingType;
388
+ },
389
+
390
+ _setStencilClippingSize: function (size) {
391
+ if (this._clippingEnabled && this._clippingType == ccui.Layout.CLIPPING_STENCIL) {
392
+ var rect = [];
393
+ rect[0] = cc.p(0, 0);
394
+ rect[1] = cc.p(size.width, 0);
395
+ rect[2] = cc.p(size.width, size.height);
396
+ rect[3] = cc.p(0, size.height);
397
+ var green = cc.color.GREEN;
398
+ this._clippingStencil.clear();
399
+ this._clippingStencil.drawPoly(rect, 4, green, 0, green);
400
+ }
401
+ },
402
+
403
+ _getClippingRect: function () {
404
+ if (this._clippingRectDirty) {
405
+ var worldPos = this.convertToWorldSpace(cc.p(0, 0));
406
+ var t = this.getNodeToWorldTransform();
407
+ var scissorWidth = this._contentSize.width * t.a;
408
+ var scissorHeight = this._contentSize.height * t.d;
409
+ var parentClippingRect;
410
+ var parent = this;
411
+
412
+ while (parent) {
413
+ parent = parent.getParent();
414
+ if (parent && parent instanceof ccui.Layout && parent.isClippingEnabled()) {
415
+ this._clippingParent = parent;
416
+ break;
417
+ }
418
+ }
419
+
420
+ if (this._clippingParent) {
421
+ parentClippingRect = this._clippingParent._getClippingRect();
422
+ var finalX = worldPos.x - (scissorWidth * this._anchorPoint.x);
423
+ var finalY = worldPos.y - (scissorHeight * this._anchorPoint.y);
424
+ var finalWidth = scissorWidth;
425
+ var finalHeight = scissorHeight;
426
+
427
+ var leftOffset = worldPos.x - parentClippingRect.x;
428
+ if (leftOffset < 0) {
429
+ finalX = parentClippingRect.x;
430
+ finalWidth += leftOffset;
431
+ }
432
+ var rightOffset = (worldPos.x + scissorWidth) - (parentClippingRect.x + parentClippingRect.width);
433
+ if (rightOffset > 0)
434
+ finalWidth -= rightOffset;
435
+ var topOffset = (worldPos.y + scissorHeight) - (parentClippingRect.y + parentClippingRect.height);
436
+ if (topOffset > 0)
437
+ finalHeight -= topOffset;
438
+ var bottomOffset = worldPos.y - parentClippingRect.y;
439
+ if (bottomOffset < 0) {
440
+ finalY = parentClippingRect.x;
441
+ finalHeight += bottomOffset;
442
+ }
443
+ if (finalWidth < 0)
444
+ finalWidth = 0;
445
+ if (finalHeight < 0)
446
+ finalHeight = 0;
447
+ this._clippingRect.x = finalX;
448
+ this._clippingRect.y = finalY;
449
+ this._clippingRect.width = finalWidth;
450
+ this._clippingRect.height = finalHeight;
451
+ } else {
452
+ this._clippingRect.x = worldPos.x - (scissorWidth * this._anchorPoint.x);
453
+ this._clippingRect.y = worldPos.y - (scissorHeight * this._anchorPoint.y);
454
+ this._clippingRect.width = scissorWidth;
455
+ this._clippingRect.height = scissorHeight;
456
+ }
457
+ this._clippingRectDirty = false;
458
+ }
459
+ return this._clippingRect;
460
+ },
461
+
462
+ _onSizeChanged: function () {
463
+ ccui.Widget.prototype._onSizeChanged.call(this);
464
+ var locContentSize = this._contentSize;
465
+ this._setStencilClippingSize(locContentSize);
466
+ this._doLayoutDirty = true;
467
+ this._clippingRectDirty = true;
468
+ if (this._backGroundImage) {
469
+ this._backGroundImage.setPosition(locContentSize.width * 0.5, locContentSize.height * 0.5);
470
+ if (this._backGroundScale9Enabled && this._backGroundImage instanceof ccui.Scale9Sprite)
471
+ this._backGroundImage.setPreferredSize(locContentSize);
472
+ }
473
+ if (this._colorRender)
474
+ this._colorRender.setContentSize(locContentSize);
475
+ if (this._gradientRender)
476
+ this._gradientRender.setContentSize(locContentSize);
477
+ },
478
+
479
+ /**
480
+ * Sets background image use scale9 renderer.
481
+ * @param {Boolean} able true that use scale9 renderer, false otherwise.
482
+ */
483
+ setBackGroundImageScale9Enabled: function (able) {
484
+ if (this._backGroundScale9Enabled == able)
485
+ return;
486
+ this.removeProtectedChild(this._backGroundImage);
487
+ this._backGroundImage = null;
488
+ this._backGroundScale9Enabled = able;
489
+ this._addBackGroundImage();
490
+ this.setBackGroundImage(this._backGroundImageFileName, this._bgImageTexType);
491
+ this.setBackGroundImageCapInsets(this._backGroundImageCapInsets);
492
+ },
493
+
494
+ /**
495
+ * Get whether background image is use scale9 renderer.
496
+ * @returns {Boolean}
497
+ */
498
+ isBackGroundImageScale9Enabled: function () {
499
+ return this._backGroundScale9Enabled;
500
+ },
501
+
502
+ /**
503
+ * Sets a background image for layout
504
+ * @param {String} fileName
505
+ * @param {ccui.Widget.LOCAL_TEXTURE|ccui.Widget.PLIST_TEXTURE} texType
506
+ */
507
+ setBackGroundImage: function (fileName, texType) {
508
+ if (!fileName)
509
+ return;
510
+ texType = texType || ccui.Widget.LOCAL_TEXTURE;
511
+ if (this._backGroundImage == null){
512
+ this._addBackGroundImage();
513
+ this.setBackGroundImageScale9Enabled(this._backGroundScale9Enabled);
514
+ }
515
+ this._backGroundImageFileName = fileName;
516
+ this._bgImageTexType = texType;
517
+ var locBackgroundImage = this._backGroundImage;
518
+ switch (this._bgImageTexType) {
519
+ case ccui.Widget.LOCAL_TEXTURE:
520
+ locBackgroundImage.initWithFile(fileName);
521
+ break;
522
+ case ccui.Widget.PLIST_TEXTURE:
523
+ locBackgroundImage.initWithSpriteFrameName(fileName);
524
+ break;
525
+ default:
526
+ break;
527
+ }
528
+ if (this._backGroundScale9Enabled)
529
+ locBackgroundImage.setPreferredSize(this._contentSize);
530
+
531
+ this._backGroundImageTextureSize = locBackgroundImage.getContentSize();
532
+ locBackgroundImage.setPosition(this._contentSize.width * 0.5, this._contentSize.height * 0.5);
533
+ this._updateBackGroundImageColor();
534
+ },
535
+
536
+ /**
537
+ * Sets a background image CapInsets for layout, if the background image is a scale9 render.
538
+ * @param {cc.Rect} capInsets capinsets of background image.
539
+ */
540
+ setBackGroundImageCapInsets: function (capInsets) {
541
+ if(!capInsets)
542
+ return;
543
+ var locInsets = this._backGroundImageCapInsets;
544
+ locInsets.x = capInsets.x;
545
+ locInsets.y = capInsets.y;
546
+ locInsets.width = capInsets.width;
547
+ locInsets.height = capInsets.height;
548
+ if (this._backGroundScale9Enabled)
549
+ this._backGroundImage.setCapInsets(capInsets);
550
+ },
551
+
552
+ /**
553
+ * Gets background image capinsets of ccui.Layout.
554
+ * @returns {cc.Rect}
555
+ */
556
+ getBackGroundImageCapInsets: function () {
557
+ return cc.rect(this._backGroundImageCapInsets);
558
+ },
559
+
560
+ _supplyTheLayoutParameterLackToChild: function (locChild) {
561
+ if (!locChild) {
562
+ return;
563
+ }
564
+ switch (this._layoutType) {
565
+ case ccui.Layout.ABSOLUTE:
566
+ break;
567
+ case ccui.Layout.LINEAR_HORIZONTAL:
568
+ case ccui.Layout.LINEAR_VERTICAL:
569
+ var layoutParameter = locChild.getLayoutParameter(ccui.LayoutParameter.LINEAR);
570
+ if (!layoutParameter)
571
+ locChild.setLayoutParameter(new ccui.LinearLayoutParameter());
572
+ break;
573
+ case ccui.Layout.RELATIVE:
574
+ var layoutParameter = locChild.getLayoutParameter(ccui.LayoutParameter.RELATIVE);
575
+ if (!layoutParameter)
576
+ locChild.setLayoutParameter(new ccui.RelativeLayoutParameter());
577
+ break;
578
+ default:
579
+ break;
580
+ }
581
+ },
582
+
583
+ _addBackGroundImage: function () {
584
+ var contentSize = this._contentSize;
585
+ if (this._backGroundScale9Enabled) {
586
+ this._backGroundImage = new ccui.Scale9Sprite();
587
+ this._backGroundImage.setPreferredSize(contentSize);
588
+ } else
589
+ this._backGroundImage = new cc.Sprite();
590
+ this.addProtectedChild(this._backGroundImage, ccui.Layout.BACKGROUND_IMAGE_ZORDER, -1);
591
+ this._backGroundImage.setPosition(contentSize.width * 0.5, contentSize.height * 0.5);
592
+ },
593
+
594
+ /**
595
+ * Remove the background image of ccui.Layout.
596
+ */
597
+ removeBackGroundImage: function () {
598
+ if (!this._backGroundImage)
599
+ return;
600
+ this.removeProtectedChild(this._backGroundImage);
601
+ this._backGroundImage = null;
602
+ this._backGroundImageFileName = "";
603
+ this._backGroundImageTextureSize.width = 0;
604
+ this._backGroundImageTextureSize.height = 0;
605
+ },
606
+
607
+ /**
608
+ * Sets Color Type for ccui.Layout.
609
+ * @param {ccui.Layout.BG_COLOR_NONE|ccui.Layout.BG_COLOR_SOLID|ccui.Layout.BG_COLOR_GRADIENT} type
610
+ */
611
+ setBackGroundColorType: function (type) {
612
+ if (this._colorType == type)
613
+ return;
614
+ switch (this._colorType) {
615
+ case ccui.Layout.BG_COLOR_NONE:
616
+ if (this._colorRender) {
617
+ this.removeProtectedChild(this._colorRender);
618
+ this._colorRender = null;
619
+ }
620
+ if (this._gradientRender) {
621
+ this.removeProtectedChild(this._gradientRender);
622
+ this._gradientRender = null;
623
+ }
624
+ break;
625
+ case ccui.Layout.BG_COLOR_SOLID:
626
+ if (this._colorRender) {
627
+ this.removeProtectedChild(this._colorRender);
628
+ this._colorRender = null;
629
+ }
630
+ break;
631
+ case ccui.Layout.BG_COLOR_GRADIENT:
632
+ if (this._gradientRender) {
633
+ this.removeProtectedChild(this._gradientRender);
634
+ this._gradientRender = null;
635
+ }
636
+ break;
637
+ default:
638
+ break;
639
+ }
640
+ this._colorType = type;
641
+ switch (this._colorType) {
642
+ case ccui.Layout.BG_COLOR_NONE:
643
+ break;
644
+ case ccui.Layout.BG_COLOR_SOLID:
645
+ this._colorRender = new cc.LayerColor();
646
+ this._colorRender.setContentSize(this._contentSize);
647
+ this._colorRender.setOpacity(this._opacity);
648
+ this._colorRender.setColor(this._color);
649
+ this.addProtectedChild(this._colorRender, ccui.Layout.BACKGROUND_RENDERER_ZORDER, -1);
650
+ break;
651
+ case ccui.Layout.BG_COLOR_GRADIENT:
652
+ this._gradientRender = new cc.LayerGradient(cc.color(255, 0, 0, 255), cc.color(0, 255, 0, 255));
653
+ this._gradientRender.setContentSize(this._contentSize);
654
+ this._gradientRender.setOpacity(this._opacity);
655
+ this._gradientRender.setStartColor(this._startColor);
656
+ this._gradientRender.setEndColor(this._endColor);
657
+ this._gradientRender.setVector(this._alongVector);
658
+ this.addProtectedChild(this._gradientRender, ccui.Layout.BACKGROUND_RENDERER_ZORDER, -1);
659
+ break;
660
+ default:
661
+ break;
662
+ }
663
+ },
664
+
665
+ /**
666
+ * Get background color type of ccui.Layout.
667
+ * @returns {ccui.Layout.BG_COLOR_NONE|ccui.Layout.BG_COLOR_SOLID|ccui.Layout.BG_COLOR_GRADIENT}
668
+ */
669
+ getBackGroundColorType: function () {
670
+ return this._colorType;
671
+ },
672
+
673
+ /**
674
+ * Sets background color for layout, if color type is Layout.COLOR_SOLID
675
+ * @param {cc.Color} color
676
+ * @param {cc.Color} [endColor]
677
+ */
678
+ setBackGroundColor: function (color, endColor) {
679
+ if (!endColor) {
680
+ this._color.r = color.r;
681
+ this._color.g = color.g;
682
+ this._color.b = color.b;
683
+ if (this._colorRender)
684
+ this._colorRender.setColor(color);
685
+ } else {
686
+ this._startColor.r = color.r;
687
+ this._startColor.g = color.g;
688
+ this._startColor.b = color.b;
689
+ if (this._gradientRender)
690
+ this._gradientRender.setStartColor(color);
691
+
692
+ this._endColor.r = endColor.r;
693
+ this._endColor.g = endColor.g;
694
+ this._endColor.b = endColor.b;
695
+ if (this._gradientRender)
696
+ this._gradientRender.setEndColor(endColor);
697
+ }
698
+ },
699
+
700
+ /**
701
+ * Gets background color of ccui.Layout, if color type is Layout.COLOR_SOLID.
702
+ * @returns {cc.Color}
703
+ */
704
+ getBackGroundColor: function () {
705
+ var tmpColor = this._color;
706
+ return cc.color(tmpColor.r, tmpColor.g, tmpColor.b, tmpColor.a);
707
+ },
708
+
709
+ /**
710
+ * Gets background start color of ccui.Layout
711
+ * @returns {cc.Color}
712
+ */
713
+ getBackGroundStartColor: function () {
714
+ var tmpColor = this._startColor;
715
+ return cc.color(tmpColor.r, tmpColor.g, tmpColor.b, tmpColor.a);
716
+ },
717
+
718
+ /**
719
+ * Gets background end color of ccui.Layout
720
+ * @returns {cc.Color}
721
+ */
722
+ getBackGroundEndColor: function () {
723
+ var tmpColor = this._endColor;
724
+ return cc.color(tmpColor.r, tmpColor.g, tmpColor.b, tmpColor.a);
725
+ },
726
+
727
+ /**
728
+ * Sets background opacity to ccui.Layout.
729
+ * @param {number} opacity
730
+ */
731
+ setBackGroundColorOpacity: function (opacity) {
732
+ this._opacity = opacity;
733
+ switch (this._colorType) {
734
+ case ccui.Layout.BG_COLOR_NONE:
735
+ break;
736
+ case ccui.Layout.BG_COLOR_SOLID:
737
+ this._colorRender.setOpacity(opacity);
738
+ break;
739
+ case ccui.Layout.BG_COLOR_GRADIENT:
740
+ this._gradientRender.setOpacity(opacity);
741
+ break;
742
+ default:
743
+ break;
744
+ }
745
+ },
746
+
747
+ /**
748
+ * Get background opacity value of ccui.Layout.
749
+ * @returns {Number}
750
+ */
751
+ getBackGroundColorOpacity: function () {
752
+ return this._opacity;
753
+ },
754
+
755
+ /**
756
+ * Sets background color vector for layout, if color type is Layout.COLOR_GRADIENT
757
+ * @param {cc.Point} vector
758
+ */
759
+ setBackGroundColorVector: function (vector) {
760
+ this._alongVector.x = vector.x;
761
+ this._alongVector.y = vector.y;
762
+ if (this._gradientRender) {
763
+ this._gradientRender.setVector(vector);
764
+ }
765
+ },
766
+
767
+ /**
768
+ * Gets background color vector of ccui.Layout, if color type is Layout.COLOR_GRADIENT
769
+ * @returns {cc.Point}
770
+ */
771
+ getBackGroundColorVector: function () {
772
+ return this._alongVector;
773
+ },
774
+
775
+ /**
776
+ * Sets backGround image color
777
+ * @param {cc.Color} color
778
+ */
779
+ setBackGroundImageColor: function (color) {
780
+ this._backGroundImageColor.r = color.r;
781
+ this._backGroundImageColor.g = color.g;
782
+ this._backGroundImageColor.b = color.b;
783
+
784
+ this._updateBackGroundImageColor();
785
+ },
786
+
787
+ /**
788
+ * Sets backGround image Opacity
789
+ * @param {Number} opacity
790
+ */
791
+ setBackGroundImageOpacity: function (opacity) {
792
+ this._backGroundImageColor.a = opacity;
793
+ this.getBackGroundImageColor();
794
+ },
795
+
796
+ /**
797
+ * Gets backGround image color
798
+ * @returns {cc.Color}
799
+ */
800
+ getBackGroundImageColor: function () {
801
+ var color = this._backGroundImageColor;
802
+ return cc.color(color.r, color.g, color.b, color.a);
803
+ },
804
+
805
+ /**
806
+ * Gets backGround image opacity
807
+ * @returns {Number}
808
+ */
809
+ getBackGroundImageOpacity: function () {
810
+ return this._backGroundImageColor.a;
811
+ },
812
+
813
+ _updateBackGroundImageColor: function () {
814
+ if(this._backGroundImage)
815
+ this._backGroundImage.setColor(this._backGroundImageColor);
816
+ },
817
+
818
+ /**
819
+ * Gets background image texture size.
820
+ * @returns {cc.Size}
821
+ */
822
+ getBackGroundImageTextureSize: function () {
823
+ return this._backGroundImageTextureSize;
824
+ },
825
+
826
+ /**
827
+ * Sets LayoutType to ccui.Layout, LayoutManager will do layout by layout type..
828
+ * @param {ccui.Layout.ABSOLUTE|ccui.Layout.LINEAR_VERTICAL|ccui.Layout.LINEAR_HORIZONTAL|ccui.Layout.RELATIVE} type
829
+ */
830
+ setLayoutType: function (type) {
831
+ this._layoutType = type;
832
+ var layoutChildrenArray = this._children;
833
+ var locChild = null;
834
+ for (var i = 0; i < layoutChildrenArray.length; i++) {
835
+ locChild = layoutChildrenArray[i];
836
+ if(locChild instanceof ccui.Widget)
837
+ this._supplyTheLayoutParameterLackToChild(locChild);
838
+ }
839
+ this._doLayoutDirty = true;
840
+ },
841
+
842
+ /**
843
+ * Gets LayoutType of ccui.Layout.
844
+ * @returns {null}
845
+ */
846
+ getLayoutType: function () {
847
+ return this._layoutType;
848
+ },
849
+
850
+ /**
851
+ * request to refresh widget layout, it will do layout at visit calls
852
+ */
853
+ requestDoLayout: function () {
854
+ this._doLayoutDirty = true;
855
+ },
856
+
857
+ _doLayout: function () {
858
+ if (!this._doLayoutDirty)
859
+ return;
860
+
861
+ this.sortAllChildren();
862
+
863
+ var executant = ccui.getLayoutManager(this._layoutType);
864
+ if (executant)
865
+ executant._doLayout(this);
866
+ this._doLayoutDirty = false;
867
+ },
868
+
869
+ _getLayoutContentSize: function(){
870
+ return this.getContentSize();
871
+ },
872
+
873
+ _getLayoutElements: function(){
874
+ return this.getChildren();
875
+ },
876
+
877
+ _updateBackGroundImageOpacity: function(){
878
+ if (this._backGroundImage)
879
+ this._backGroundImage.setOpacity(this._backGroundImageOpacity);
880
+ },
881
+
882
+ _updateBackGroundImageRGBA: function(){
883
+ if (this._backGroundImage) {
884
+ this._backGroundImage.setColor(this._backGroundImageColor);
885
+ this._backGroundImage.setOpacity(this._backGroundImageOpacity);
886
+ }
887
+ },
888
+
889
+ /**
890
+ * Gets the content size of the layout, it will accumulate all its children's content size
891
+ * @returns {cc.Size}
892
+ * @private
893
+ */
894
+ _getLayoutAccumulatedSize: function(){
895
+ var children = this.getChildren();
896
+ var layoutSize = cc.size(0, 0);
897
+ var widgetCount = 0, locSize;
898
+ for(var i = 0, len = children.length; i < len; i++) {
899
+ var layout = children[i];
900
+ if (null != layout && layout instanceof ccui.Layout){
901
+ locSize = layout._getLayoutAccumulatedSize();
902
+ layoutSize.width += locSize.width;
903
+ layoutSize.height += locSize.height;
904
+ } else {
905
+ if (layout instanceof ccui.Widget) {
906
+ widgetCount++;
907
+ var m = layout.getLayoutParameter().getMargin();
908
+ locSize = layout.getContentSize();
909
+ layoutSize.width += locSize.width + (m.right + m.left) * 0.5;
910
+ layoutSize.height += locSize.height + (m.top + m.bottom) * 0.5;
911
+ }
912
+ }
913
+ }
914
+
915
+ //substract extra size
916
+ var type = this.getLayoutType();
917
+ if (type == ccui.Layout.LINEAR_HORIZONTAL)
918
+ layoutSize.height = layoutSize.height - layoutSize.height/widgetCount * (widgetCount-1);
919
+
920
+ if (type == ccui.Layout.LINEAR_VERTICAL)
921
+ layoutSize.width = layoutSize.width - layoutSize.width/widgetCount * (widgetCount-1);
922
+ return layoutSize;
923
+ },
924
+
925
+ /**
926
+ * When the layout get focused, it the layout pass the focus to its child, it will use this method to determine which child <br/>
927
+ * will get the focus. The current algorithm to determine which child will get focus is nearest-distance-priority algorithm
928
+ * @param {Number} direction next focused widget direction
929
+ * @param {ccui.Widget} baseWidget
930
+ * @returns {Number}
931
+ * @private
932
+ */
933
+ _findNearestChildWidgetIndex: function(direction, baseWidget){
934
+ if (baseWidget == null || baseWidget == this)
935
+ return this._findFirstFocusEnabledWidgetIndex();
936
+
937
+ var index = 0, locChildren = this.getChildren();
938
+ var count = locChildren.length, widgetPosition;
939
+
940
+ var distance = cc.FLT_MAX, found = 0;
941
+ if (direction == ccui.Widget.LEFT || direction == ccui.Widget.RIGHT || direction == ccui.Widget.DOWN || direction == ccui.Widget.UP) {
942
+ widgetPosition = this._getWorldCenterPoint(baseWidget);
943
+ while (index < count) {
944
+ var w = locChildren[index];
945
+ if (w && w instanceof ccui.Widget && w.isFocusEnabled()) {
946
+ var length = (w instanceof ccui.Layout)? w._calculateNearestDistance(baseWidget)
947
+ : cc.pLength(cc.pSub(this._getWorldCenterPoint(w), widgetPosition));
948
+ if (length < distance){
949
+ found = index;
950
+ distance = length;
951
+ }
952
+ }
953
+ index++;
954
+ }
955
+ return found;
956
+ }
957
+ cc.log("invalid focus direction!");
958
+ return 0;
959
+ },
960
+
961
+ /**
962
+ * When the layout get focused, it the layout pass the focus to its child, it will use this method to determine which child
963
+ * will get the focus. The current algorithm to determine which child will get focus is farthest-distance-priority algorithm
964
+ * @param {Number} direction next focused widget direction
965
+ * @param {ccui.Widget} baseWidget
966
+ * @returns {Number} The index of child widget in the container
967
+ * @private
968
+ */
969
+ _findFarthestChildWidgetIndex: function(direction, baseWidget){
970
+ if (baseWidget == null || baseWidget == this)
971
+ return this._findFirstFocusEnabledWidgetIndex();
972
+
973
+ var index = 0, locChildren = this.getChildren();
974
+ var count = locChildren.length;
975
+
976
+ var distance = -cc.FLT_MAX, found = 0;
977
+ if (direction == ccui.Widget.LEFT || direction == ccui.Widget.RIGHT || direction == ccui.Widget.DOWN || direction == ccui.Widget.UP) {
978
+ var widgetPosition = this._getWorldCenterPoint(baseWidget);
979
+ while (index < count) {
980
+ var w = locChildren[index];
981
+ if (w && w instanceof ccui.Widget && w.isFocusEnabled()) {
982
+ var length = (w instanceof ccui.Layout)?w._calculateFarthestDistance(baseWidget)
983
+ : cc.pLength(cc.pSub(this._getWorldCenterPoint(w), widgetPosition));
984
+ if (length > distance){
985
+ found = index;
986
+ distance = length;
987
+ }
988
+ }
989
+ index++;
990
+ }
991
+ return found;
992
+ }
993
+ cc.log("invalid focus direction!!!");
994
+ return 0;
995
+ },
996
+
997
+ /**
998
+ * calculate the nearest distance between the baseWidget and the children of the layout
999
+ * @param {ccui.Widget} baseWidget the base widget which will be used to calculate the distance between the layout's children and itself
1000
+ * @returns {Number} return the nearest distance between the baseWidget and the layout's children
1001
+ * @private
1002
+ */
1003
+ _calculateNearestDistance: function(baseWidget){
1004
+ var distance = cc.FLT_MAX;
1005
+ var widgetPosition = this._getWorldCenterPoint(baseWidget);
1006
+ var locChildren = this._children;
1007
+
1008
+ for (var i = 0, len = locChildren.length; i < len; i++) {
1009
+ var widget = locChildren[i], length;
1010
+ if (widget instanceof ccui.Layout)
1011
+ length = widget._calculateNearestDistance(baseWidget);
1012
+ else {
1013
+ if (widget instanceof ccui.Widget && widget.isFocusEnabled())
1014
+ length = cc.pLength(cc.pSub(this._getWorldCenterPoint(widget), widgetPosition));
1015
+ else
1016
+ continue;
1017
+ }
1018
+ if (length < distance)
1019
+ distance = length;
1020
+ }
1021
+ return distance;
1022
+ },
1023
+
1024
+ /**
1025
+ * calculate the farthest distance between the baseWidget and the children of the layout
1026
+ * @param baseWidget
1027
+ * @returns {number}
1028
+ * @private
1029
+ */
1030
+ _calculateFarthestDistance:function(baseWidget){
1031
+ var distance = -cc.FLT_MAX;
1032
+ var widgetPosition = this._getWorldCenterPoint(baseWidget);
1033
+ var locChildren = this._children;
1034
+
1035
+ for (var i = 0, len = locChildren.length; i < len; i++) {
1036
+ var layout = locChildren[i];
1037
+ var length;
1038
+ if (layout instanceof ccui.Layout)
1039
+ length = layout._calculateFarthestDistance(baseWidget);
1040
+ else {
1041
+ if (layout instanceof ccui.Widget && layout.isFocusEnabled()) {
1042
+ var wPosition = this._getWorldCenterPoint(layout);
1043
+ length = cc.pLength(cc.pSub(wPosition, widgetPosition));
1044
+ } else
1045
+ continue;
1046
+ }
1047
+
1048
+ if (length > distance)
1049
+ distance = length;
1050
+ }
1051
+ return distance;
1052
+ },
1053
+
1054
+ /**
1055
+ * when a layout pass the focus to it's child, use this method to determine which algorithm to use, nearest or farthest distance algorithm or not
1056
+ * @param direction
1057
+ * @param baseWidget
1058
+ * @private
1059
+ */
1060
+ _findProperSearchingFunctor: function(direction, baseWidget){
1061
+ if (baseWidget == null)
1062
+ return;
1063
+
1064
+ var previousWidgetPosition = this._getWorldCenterPoint(baseWidget);
1065
+ var widgetPosition = this._getWorldCenterPoint(this._findFirstNonLayoutWidget());
1066
+ if (direction == ccui.Widget.LEFT) {
1067
+ this.onPassFocusToChild = (previousWidgetPosition.x > widgetPosition.x) ? this._findNearestChildWidgetIndex.bind(this)
1068
+ : this._findFarthestChildWidgetIndex.bind(this);
1069
+ } else if (direction == ccui.Widget.RIGHT) {
1070
+ this.onPassFocusToChild = (previousWidgetPosition.x > widgetPosition.x) ? this._findFarthestChildWidgetIndex.bind(this)
1071
+ : this._findNearestChildWidgetIndex.bind(this);
1072
+ }else if(direction == ccui.Widget.DOWN) {
1073
+ this.onPassFocusToChild = (previousWidgetPosition.y > widgetPosition.y) ? this._findNearestChildWidgetIndex.bind(this)
1074
+ : this._findFarthestChildWidgetIndex.bind(this);
1075
+ }else if(direction == ccui.Widget.UP) {
1076
+ this.onPassFocusToChild = (previousWidgetPosition.y < widgetPosition.y) ? this._findNearestChildWidgetIndex.bind(this)
1077
+ : this._findFarthestChildWidgetIndex.bind(this);
1078
+ }else
1079
+ cc.log("invalid direction!");
1080
+ },
1081
+
1082
+ /**
1083
+ * find the first non-layout widget in this layout
1084
+ * @returns {ccui.Widget}
1085
+ * @private
1086
+ */
1087
+ _findFirstNonLayoutWidget:function(){
1088
+ var locChildren = this._children;
1089
+ for(var i = 0, len = locChildren.length; i < len; i++) {
1090
+ var child = locChildren[i];
1091
+ if (child instanceof ccui.Layout){
1092
+ var widget = child._findFirstNonLayoutWidget();
1093
+ if(widget)
1094
+ return widget;
1095
+ } else{
1096
+ if (child instanceof ccui.Widget)
1097
+ return child;
1098
+ }
1099
+ }
1100
+ return null;
1101
+ },
1102
+
1103
+ /**
1104
+ * find the first focus enabled widget index in the layout, it will recursive searching the child widget
1105
+ * @returns {number}
1106
+ * @private
1107
+ */
1108
+ _findFirstFocusEnabledWidgetIndex: function(){
1109
+ var index = 0, locChildren = this.getChildren();
1110
+ var count = locChildren.length;
1111
+ while (index < count) {
1112
+ var w = locChildren[index];
1113
+ if (w && w instanceof ccui.Widget && w.isFocusEnabled())
1114
+ return index;
1115
+ index++;
1116
+ }
1117
+ return 0;
1118
+ },
1119
+
1120
+ /**
1121
+ * find a focus enabled child Widget in the layout by index
1122
+ * @param index
1123
+ * @returns {*}
1124
+ * @private
1125
+ */
1126
+ _findFocusEnabledChildWidgetByIndex: function(index){
1127
+ var widget = this._getChildWidgetByIndex(index);
1128
+ if (widget){
1129
+ if (widget.isFocusEnabled())
1130
+ return widget;
1131
+ index = index + 1;
1132
+ return this._findFocusEnabledChildWidgetByIndex(index);
1133
+ }
1134
+ return null;
1135
+ },
1136
+
1137
+ /**
1138
+ * get the center point of a widget in world space
1139
+ * @param {ccui.Widget} widget
1140
+ * @returns {cc.Point}
1141
+ * @private
1142
+ */
1143
+ _getWorldCenterPoint: function(widget){
1144
+ //FIXEDME: we don't need to calculate the content size of layout anymore
1145
+ var widgetSize = widget instanceof ccui.Layout ? widget._getLayoutAccumulatedSize() : widget.getContentSize();
1146
+ return widget.convertToWorldSpace(cc.p(widgetSize.width /2, widgetSize.height /2));
1147
+ },
1148
+
1149
+ /**
1150
+ * this method is called internally by nextFocusedWidget. When the dir is Right/Down, then this method will be called
1151
+ * @param {Number} direction
1152
+ * @param {ccui.Widget} current the current focused widget
1153
+ * @returns {ccui.Widget} the next focused widget
1154
+ * @private
1155
+ */
1156
+ _getNextFocusedWidget: function(direction, current){
1157
+ var nextWidget = null, locChildren = this._children;
1158
+ var previousWidgetPos = locChildren.indexOf(current);
1159
+ previousWidgetPos = previousWidgetPos + 1;
1160
+ if (previousWidgetPos < locChildren.length) {
1161
+ nextWidget = this._getChildWidgetByIndex(previousWidgetPos);
1162
+ //handle widget
1163
+ if (nextWidget) {
1164
+ if (nextWidget.isFocusEnabled()) {
1165
+ if (nextWidget instanceof ccui.Layout) {
1166
+ nextWidget._isFocusPassing = true;
1167
+ return nextWidget.findNextFocusedWidget(direction, nextWidget);
1168
+ } else {
1169
+ this.dispatchFocusEvent(current, nextWidget);
1170
+ return nextWidget;
1171
+ }
1172
+ } else
1173
+ return this._getNextFocusedWidget(direction, nextWidget);
1174
+ } else
1175
+ return current;
1176
+ } else {
1177
+ if (this._loopFocus) {
1178
+ if (this._checkFocusEnabledChild()) {
1179
+ previousWidgetPos = 0;
1180
+ nextWidget = this._getChildWidgetByIndex(previousWidgetPos);
1181
+ if (nextWidget.isFocusEnabled()) {
1182
+ if (nextWidget instanceof ccui.Layout) {
1183
+ nextWidget._isFocusPassing = true;
1184
+ return nextWidget.findNextFocusedWidget(direction, nextWidget);
1185
+ } else {
1186
+ this.dispatchFocusEvent(current, nextWidget);
1187
+ return nextWidget;
1188
+ }
1189
+ } else
1190
+ return this._getNextFocusedWidget(direction, nextWidget);
1191
+ } else
1192
+ return (current instanceof ccui.Layout) ? current : ccui.Widget._focusedWidget;
1193
+ } else{
1194
+ if (this._isLastWidgetInContainer(current, direction)){
1195
+ if (this._isWidgetAncestorSupportLoopFocus(this, direction))
1196
+ return ccui.Widget.prototype.findNextFocusedWidget.call(this, direction, this);
1197
+ return (current instanceof ccui.Layout) ? current : ccui.Widget._focusedWidget;
1198
+ } else
1199
+ return ccui.Widget.prototype.findNextFocusedWidget.call(this, direction, this);
1200
+ }
1201
+ }
1202
+ },
1203
+
1204
+ /**
1205
+ * this method is called internally by nextFocusedWidget. When the dir is Left/Up, then this method will be called
1206
+ * @param direction
1207
+ * @param {ccui.Widget} current the current focused widget
1208
+ * @returns {ccui.Widget} the next focused widget
1209
+ * @private
1210
+ */
1211
+ _getPreviousFocusedWidget: function(direction, current){
1212
+ var nextWidget = null, locChildren = this._children;
1213
+ var previousWidgetPos = locChildren.indexOf(current);
1214
+ previousWidgetPos = previousWidgetPos - 1;
1215
+ if (previousWidgetPos >= 0){
1216
+ nextWidget = this._getChildWidgetByIndex(previousWidgetPos);
1217
+ if (nextWidget.isFocusEnabled()) {
1218
+ if (nextWidget instanceof ccui.Layout){
1219
+ nextWidget._isFocusPassing = true;
1220
+ return nextWidget.findNextFocusedWidget(direction, nextWidget);
1221
+ }
1222
+ this.dispatchFocusEvent(current, nextWidget);
1223
+ return nextWidget;
1224
+ } else
1225
+ return this._getPreviousFocusedWidget(direction, nextWidget); //handling the disabled widget, there is no actual focus lose or get, so we don't need any envet
1226
+ }else {
1227
+ if (this._loopFocus){
1228
+ if (this._checkFocusEnabledChild()) {
1229
+ previousWidgetPos = locChildren.length -1;
1230
+ nextWidget = this._getChildWidgetByIndex(previousWidgetPos);
1231
+ if (nextWidget.isFocusEnabled()){
1232
+ if (nextWidget instanceof ccui.Layout){
1233
+ nextWidget._isFocusPassing = true;
1234
+ return nextWidget.findNextFocusedWidget(direction, nextWidget);
1235
+ } else {
1236
+ this.dispatchFocusEvent(current, nextWidget);
1237
+ return nextWidget;
1238
+ }
1239
+ } else
1240
+ return this._getPreviousFocusedWidget(direction, nextWidget);
1241
+ } else
1242
+ return (current instanceof ccui.Layout) ? current : ccui.Widget._focusedWidget;
1243
+ } else {
1244
+ if (this._isLastWidgetInContainer(current, direction)) {
1245
+ if (this._isWidgetAncestorSupportLoopFocus(this, direction))
1246
+ return ccui.Widget.prototype.findNextFocusedWidget.call(this, direction, this);
1247
+ return (current instanceof ccui.Layout) ? current : ccui.Widget._focusedWidget;
1248
+ } else
1249
+ return ccui.Widget.prototype.findNextFocusedWidget.call(this, direction, this);
1250
+ }
1251
+ }
1252
+ },
1253
+
1254
+ /**
1255
+ * find the nth element in the _children array. Only the Widget descendant object will be returned
1256
+ * @param {Number} index
1257
+ * @returns {ccui.Widget}
1258
+ * @private
1259
+ */
1260
+ _getChildWidgetByIndex: function (index) {
1261
+ var locChildren = this._children;
1262
+ var size = locChildren.length, count = 0, oldIndex = index;
1263
+ while (index < size) {
1264
+ var firstChild = locChildren[index];
1265
+ if (firstChild && firstChild instanceof ccui.Widget)
1266
+ return firstChild;
1267
+ count++;
1268
+ index++;
1269
+ }
1270
+
1271
+ var begin = 0;
1272
+ while (begin < oldIndex) {
1273
+ var child = locChildren[begin];
1274
+ if (child && child instanceof ccui.Widget)
1275
+ return child;
1276
+ count++;
1277
+ begin++;
1278
+ }
1279
+ return null;
1280
+ },
1281
+
1282
+ /**
1283
+ * whether it is the last element according to all their parents
1284
+ * @param {ccui.Widget} widget
1285
+ * @param {Number} direction
1286
+ * @returns {Boolean}
1287
+ * @private
1288
+ */
1289
+ _isLastWidgetInContainer:function(widget, direction){
1290
+ var parent = widget.getParent();
1291
+ if (parent == null || !(parent instanceof ccui.Layout))
1292
+ return true;
1293
+
1294
+ var container = parent.getChildren();
1295
+ var index = container.indexOf(widget);
1296
+ if (parent.getLayoutType() == ccui.Layout.LINEAR_HORIZONTAL) {
1297
+ if (direction == ccui.Widget.LEFT) {
1298
+ if (index == 0)
1299
+ return this._isLastWidgetInContainer(parent, direction);
1300
+ else
1301
+ return false;
1302
+ }
1303
+ if (direction == ccui.Widget.RIGHT) {
1304
+ if (index == container.length - 1)
1305
+ return this._isLastWidgetInContainer(parent, direction);
1306
+ else
1307
+ return false;
1308
+ }
1309
+ if (direction == ccui.Widget.DOWN)
1310
+ return this._isLastWidgetInContainer(parent, direction);
1311
+
1312
+ if (direction == ccui.Widget.UP)
1313
+ return this._isLastWidgetInContainer(parent, direction);
1314
+ } else if(parent.getLayoutType() == ccui.Layout.LINEAR_VERTICAL){
1315
+ if (direction == ccui.Widget.UP){
1316
+ if (index == 0)
1317
+ return this._isLastWidgetInContainer(parent, direction);
1318
+ else
1319
+ return false;
1320
+ }
1321
+ if (direction == ccui.Widget.DOWN) {
1322
+ if (index == container.length - 1)
1323
+ return this._isLastWidgetInContainer(parent, direction);
1324
+ else
1325
+ return false;
1326
+ }
1327
+ if (direction == ccui.Widget.LEFT)
1328
+ return this._isLastWidgetInContainer(parent, direction);
1329
+
1330
+ if (direction == ccui.Widget.RIGHT)
1331
+ return this._isLastWidgetInContainer(parent, direction);
1332
+ } else {
1333
+ cc.log("invalid layout Type");
1334
+ return false;
1335
+ }
1336
+ },
1337
+
1338
+ /**
1339
+ * Lookup any parent widget with a layout type as the direction, if the layout is loop focused, then return true, otherwise it returns false.
1340
+ * @param {ccui.Widget} widget
1341
+ * @param {Number} direction
1342
+ * @returns {Boolean}
1343
+ * @private
1344
+ */
1345
+ _isWidgetAncestorSupportLoopFocus: function(widget, direction){
1346
+ var parent = widget.getParent();
1347
+ if (parent == null || !(parent instanceof ccui.Layout))
1348
+ return false;
1349
+ if (parent.isLoopFocus()) {
1350
+ var layoutType = parent.getLayoutType();
1351
+ if (layoutType == ccui.Layout.LINEAR_HORIZONTAL) {
1352
+ if (direction == ccui.Widget.LEFT || direction == ccui.Widget.RIGHT)
1353
+ return true;
1354
+ else
1355
+ return this._isWidgetAncestorSupportLoopFocus(parent, direction);
1356
+ }
1357
+ if (layoutType == ccui.Layout.LINEAR_VERTICAL){
1358
+ if (direction == ccui.Widget.DOWN || direction == ccui.Widget.UP)
1359
+ return true;
1360
+ else
1361
+ return this._isWidgetAncestorSupportLoopFocus(parent, direction);
1362
+ } else{
1363
+ cc.assert(0, "invalid layout type");
1364
+ return false;
1365
+ }
1366
+ } else
1367
+ return this._isWidgetAncestorSupportLoopFocus(parent, direction);
1368
+ },
1369
+
1370
+ /**
1371
+ * pass the focus to the layout's next focus enabled child
1372
+ * @param {Number} direction
1373
+ * @param {ccui.Widget} current
1374
+ * @returns {ccui.Widget}
1375
+ * @private
1376
+ */
1377
+ _passFocusToChild: function(direction, current){
1378
+ if (this._checkFocusEnabledChild()) {
1379
+ var previousWidget = ccui.Widget.getCurrentFocusedWidget();
1380
+ this._findProperSearchingFunctor(direction, previousWidget);
1381
+ var index = this.onPassFocusToChild(direction, previousWidget);
1382
+
1383
+ var widget = this._getChildWidgetByIndex(index);
1384
+ if (widget instanceof ccui.Layout) {
1385
+ widget._isFocusPassing = true;
1386
+ return widget.findNextFocusedWidget(direction, widget);
1387
+ } else {
1388
+ this.dispatchFocusEvent(current, widget);
1389
+ return widget;
1390
+ }
1391
+ }else
1392
+ return this;
1393
+ },
1394
+
1395
+ /**
1396
+ * If there are no focus enabled child in the layout, it will return false, otherwise it returns true
1397
+ * @returns {boolean}
1398
+ * @private
1399
+ */
1400
+ _checkFocusEnabledChild: function(){
1401
+ var locChildren = this._children;
1402
+ for(var i = 0, len = locChildren.length; i < len; i++){
1403
+ var widget = locChildren[i];
1404
+ if (widget && widget instanceof ccui.Widget && widget.isFocusEnabled())
1405
+ return true;
1406
+ }
1407
+ return false;
1408
+ },
1409
+
1410
+ /**
1411
+ * Returns the "class name" of widget.
1412
+ * @returns {string}
1413
+ */
1414
+ getDescription: function () {
1415
+ return "Layout";
1416
+ },
1417
+
1418
+ _createCloneInstance: function () {
1419
+ return new ccui.Layout();
1420
+ },
1421
+
1422
+ _copyClonedWidgetChildren: function (model) {
1423
+ ccui.Widget.prototype._copyClonedWidgetChildren.call(this, model);
1424
+ },
1425
+
1426
+ _copySpecialProperties: function (layout) {
1427
+ if(!(layout instanceof ccui.Layout))
1428
+ return;
1429
+ this.setBackGroundImageScale9Enabled(layout._backGroundScale9Enabled);
1430
+ this.setBackGroundImage(layout._backGroundImageFileName, layout._bgImageTexType);
1431
+ this.setBackGroundImageCapInsets(layout._backGroundImageCapInsets);
1432
+ this.setBackGroundColorType(layout._colorType);
1433
+ this.setBackGroundColor(layout._color);
1434
+ this.setBackGroundColor(layout._startColor, layout._endColor);
1435
+ this.setBackGroundColorOpacity(layout._opacity);
1436
+ this.setBackGroundColorVector(layout._alongVector);
1437
+ this.setLayoutType(layout._layoutType);
1438
+ this.setClippingEnabled(layout._clippingEnabled);
1439
+ this.setClippingType(layout._clippingType);
1440
+ this._loopFocus = layout._loopFocus;
1441
+ this.__passFocusToChild = layout.__passFocusToChild;
1442
+ this._isInterceptTouch = layout._isInterceptTouch;
1443
+ },
1444
+
1445
+ /**
1446
+ * force refresh widget layout
1447
+ */
1448
+ forceDoLayout: function(){
1449
+ this.requestDoLayout();
1450
+ this._doLayout();
1451
+ },
1452
+
1453
+ _createRenderCmd: function(){
1454
+ if(cc._renderType === cc._RENDER_TYPE_WEBGL)
1455
+ return new ccui.Layout.WebGLRenderCmd(this);
1456
+ else
1457
+ return new ccui.Layout.CanvasRenderCmd(this);
1458
+ }
1459
+ });
1460
+
1461
+ var _p = ccui.Layout.prototype;
1462
+
1463
+ // Extended properties
1464
+ /** @expose */
1465
+ _p.clippingEnabled;
1466
+ cc.defineGetterSetter(_p, "clippingEnabled", _p.isClippingEnabled, _p.setClippingEnabled);
1467
+ /** @expose */
1468
+ _p.clippingType;
1469
+ cc.defineGetterSetter(_p, "clippingType", null, _p.setClippingType);
1470
+ /** @expose */
1471
+ _p.layoutType;
1472
+ cc.defineGetterSetter(_p, "layoutType", _p.getLayoutType, _p.setLayoutType);
1473
+
1474
+ _p = null;
1475
+
1476
+ /**
1477
+ * allocates and initializes a UILayout.
1478
+ * @deprecated since v3.0, please use new ccui.Layout() instead.
1479
+ * @return {ccui.Layout}
1480
+ */
1481
+ ccui.Layout.create = function () {
1482
+ return new ccui.Layout();
1483
+ };
1484
+
1485
+ // Constants
1486
+
1487
+ //layoutBackGround color type
1488
+ /**
1489
+ * The None of ccui.Layout's background color type
1490
+ * @constant
1491
+ * @type {number}
1492
+ */
1493
+ ccui.Layout.BG_COLOR_NONE = 0;
1494
+ /**
1495
+ * The solid of ccui.Layout's background color type, it will use a LayerColor to draw the background.
1496
+ * @constant
1497
+ * @type {number}
1498
+ */
1499
+ ccui.Layout.BG_COLOR_SOLID = 1;
1500
+ /**
1501
+ * The gradient of ccui.Layout's background color type, it will use a LayerGradient to draw the background.
1502
+ * @constant
1503
+ * @type {number}
1504
+ */
1505
+ ccui.Layout.BG_COLOR_GRADIENT = 2;
1506
+
1507
+ //Layout type
1508
+ /**
1509
+ * The absolute of ccui.Layout's layout type.
1510
+ * @type {number}
1511
+ * @constant
1512
+ */
1513
+ ccui.Layout.ABSOLUTE = 0;
1514
+ /**
1515
+ * The vertical of ccui.Layout's layout type.
1516
+ * @type {number}
1517
+ * @constant
1518
+ */
1519
+ ccui.Layout.LINEAR_VERTICAL = 1;
1520
+ /**
1521
+ * The horizontal of ccui.Layout's layout type.
1522
+ * @type {number}
1523
+ * @constant
1524
+ */
1525
+ ccui.Layout.LINEAR_HORIZONTAL = 2;
1526
+ /**
1527
+ * The relative of ccui.Layout's layout type.
1528
+ * @type {number}
1529
+ * @constant
1530
+ */
1531
+ ccui.Layout.RELATIVE = 3;
1532
+
1533
+ //Layout clipping type
1534
+ /**
1535
+ * The stencil of ccui.Layout's clipping type.
1536
+ * @type {number}
1537
+ * @constant
1538
+ */
1539
+ ccui.Layout.CLIPPING_STENCIL = 0;
1540
+ /**
1541
+ * The scissor of ccui.Layout's clipping type.
1542
+ * @type {number}
1543
+ * @constant
1544
+ */
1545
+ ccui.Layout.CLIPPING_SCISSOR = 1;
1546
+
1547
+ /**
1548
+ * The zOrder value of ccui.Layout's image background.
1549
+ * @type {number}
1550
+ * @constant
1551
+ */
1552
+ ccui.Layout.BACKGROUND_IMAGE_ZORDER = -2;
1553
+ /**
1554
+ * The zOrder value of ccui.Layout's color background.
1555
+ * @type {number}
1556
+ * @constant
1557
+ */
1558
+ ccui.Layout.BACKGROUND_RENDERER_ZORDER = -2;