UISlider.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728
  1. /****************************************************************************
  2. Copyright (c) 2011-2012 cocos2d-x.org
  3. Copyright (c) 2013-2014 Chukong Technologies Inc.
  4. http://www.cocos2d-x.org
  5. Permission is hereby granted, free of charge, to any person obtaining a copy
  6. of this software and associated documentation files (the "Software"), to deal
  7. in the Software without restriction, including without limitation the rights
  8. to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  9. copies of the Software, and to permit persons to whom the Software is
  10. furnished to do so, subject to the following conditions:
  11. The above copyright notice and this permission notice shall be included in
  12. all copies or substantial portions of the Software.
  13. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  14. IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  15. FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  16. AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  17. LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  18. OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  19. THE SOFTWARE.
  20. ****************************************************************************/
  21. /**
  22. * The Slider control of Cocos UI.
  23. * @class
  24. * @extends ccui.Widget
  25. *
  26. * @property {Number} percent - The current progress of loadingbar
  27. */
  28. ccui.Slider = ccui.Widget.extend(/** @lends ccui.Slider# */{
  29. _barRenderer: null,
  30. _progressBarRenderer: null,
  31. _progressBarTextureSize: null,
  32. _slidBallNormalRenderer: null,
  33. _slidBallPressedRenderer: null,
  34. _slidBallDisabledRenderer: null,
  35. _slidBallRenderer: null,
  36. _barLength: 0,
  37. _percent: 0,
  38. _scale9Enabled: false,
  39. _prevIgnoreSize: true,
  40. _textureFile: "",
  41. _progressBarTextureFile: "",
  42. _slidBallNormalTextureFile: "",
  43. _slidBallPressedTextureFile: "",
  44. _slidBallDisabledTextureFile: "",
  45. _capInsetsBarRenderer: null,
  46. _capInsetsProgressBarRenderer: null,
  47. _sliderEventListener: null,
  48. _sliderEventSelector: null,
  49. _barTexType: ccui.Widget.LOCAL_TEXTURE,
  50. _progressBarTexType: ccui.Widget.LOCAL_TEXTURE,
  51. _ballNTexType: ccui.Widget.LOCAL_TEXTURE,
  52. _ballPTexType: ccui.Widget.LOCAL_TEXTURE,
  53. _ballDTexType: ccui.Widget.LOCAL_TEXTURE,
  54. _isTextureLoaded: false,
  55. _className: "Slider",
  56. _barRendererAdaptDirty: true,
  57. _progressBarRendererDirty: true,
  58. /**
  59. * allocates and initializes a UISlider.
  60. * Constructor of ccui.Slider. override it to extend the construction behavior, remember to call "this._super()" in the extended "ctor" function.
  61. * @example
  62. * // example
  63. * var uiSlider = new ccui.Slider();
  64. */
  65. ctor: function () {
  66. this._progressBarTextureSize = cc.size(0, 0);
  67. this._capInsetsBarRenderer = cc.rect(0, 0, 0, 0);
  68. this._capInsetsProgressBarRenderer = cc.rect(0, 0, 0, 0);
  69. ccui.Widget.prototype.ctor.call(this);
  70. },
  71. /**
  72. * Initializes a ccui.Slider. Please do not call this function by yourself, you should pass the parameters to constructor to initialize it.
  73. * @returns {boolean}
  74. * @override
  75. */
  76. init: function () {
  77. return ccui.Widget.prototype.init.call(this);
  78. },
  79. _initRenderer: function () {
  80. this._barRenderer = cc.Sprite.create();
  81. this._progressBarRenderer = cc.Sprite.create();
  82. this._progressBarRenderer.setAnchorPoint(0.0, 0.5);
  83. this.addProtectedChild(this._barRenderer, ccui.Slider.BASEBAR_RENDERER_ZORDER, -1);
  84. this.addProtectedChild(this._progressBarRenderer, ccui.Slider.PROGRESSBAR_RENDERER_ZORDER, -1);
  85. this._slidBallNormalRenderer = cc.Sprite.create();
  86. this._slidBallPressedRenderer = cc.Sprite.create();
  87. this._slidBallPressedRenderer.setVisible(false);
  88. this._slidBallDisabledRenderer = cc.Sprite.create();
  89. this._slidBallDisabledRenderer.setVisible(false);
  90. this._slidBallRenderer = new cc.Node();
  91. this._slidBallRenderer.addChild(this._slidBallNormalRenderer);
  92. this._slidBallRenderer.addChild(this._slidBallPressedRenderer);
  93. this._slidBallRenderer.addChild(this._slidBallDisabledRenderer);
  94. this.addProtectedChild(this._slidBallRenderer, ccui.Slider.BALL_RENDERER_ZORDER, -1);
  95. },
  96. /**
  97. * Loads texture for slider bar.
  98. * @param {String} fileName
  99. * @param {ccui.Widget.LOCAL_TEXTURE|ccui.Widget.PLIST_TEXTURE} texType
  100. */
  101. loadBarTexture: function (fileName, texType) {
  102. if (!fileName) {
  103. return;
  104. }
  105. texType = texType || ccui.Widget.LOCAL_TEXTURE;
  106. this._textureFile = fileName;
  107. this._barTexType = texType;
  108. var barRenderer = this._barRenderer;
  109. var self = this;
  110. if(!barRenderer.texture || !barRenderer.texture.isLoaded()){
  111. barRenderer.addLoadedEventListener(function(){
  112. self._findLayout();
  113. self._updateChildrenDisplayedRGBA();
  114. self._barRendererAdaptDirty = true;
  115. self._progressBarRendererDirty = true;
  116. self._updateContentSizeWithTextureSize(self._barRenderer.getContentSize());
  117. });
  118. }
  119. switch (this._barTexType) {
  120. case ccui.Widget.LOCAL_TEXTURE:
  121. //SetTexture cannot load resource
  122. barRenderer.initWithFile(fileName);
  123. break;
  124. case ccui.Widget.PLIST_TEXTURE:
  125. //SetTexture cannot load resource
  126. barRenderer.initWithSpriteFrameName(fileName);
  127. break;
  128. default:
  129. break;
  130. }
  131. this._updateChildrenDisplayedRGBA();
  132. this._barRendererAdaptDirty = true;
  133. this._progressBarRendererDirty = true;
  134. this._updateContentSizeWithTextureSize(this._barRenderer.getContentSize());
  135. },
  136. /**
  137. * Loads dark state texture for slider progress bar.
  138. * @param {String} fileName
  139. * @param {ccui.Widget.LOCAL_TEXTURE|ccui.Widget.PLIST_TEXTURE} texType
  140. */
  141. loadProgressBarTexture: function (fileName, texType) {
  142. if (!fileName) {
  143. return;
  144. }
  145. texType = texType || ccui.Widget.LOCAL_TEXTURE;
  146. this._progressBarTextureFile = fileName;
  147. this._progressBarTexType = texType;
  148. var progressBarRenderer = this._progressBarRenderer;
  149. var self = this;
  150. if(!progressBarRenderer.texture || !progressBarRenderer.texture.isLoaded()){
  151. progressBarRenderer.addLoadedEventListener(function(){
  152. self._findLayout();
  153. self._updateChildrenDisplayedRGBA();
  154. self._progressBarRenderer.setAnchorPoint(cc.p(0, 0.5));
  155. var tz = self._progressBarRenderer.getContentSize();
  156. self._progressBarTextureSize = {width: tz.width, height: tz.height};
  157. self._progressBarRendererDirty = true;
  158. });
  159. }
  160. switch (this._progressBarTexType) {
  161. case ccui.Widget.LOCAL_TEXTURE:
  162. //SetTexture cannot load resource
  163. progressBarRenderer.initWithFile(fileName);
  164. break;
  165. case ccui.Widget.PLIST_TEXTURE:
  166. //SetTexture cannot load resource
  167. progressBarRenderer.initWithSpriteFrameName(fileName);
  168. break;
  169. default:
  170. break;
  171. }
  172. this._updateChildrenDisplayedRGBA();
  173. this._progressBarRenderer.setAnchorPoint(cc.p(0, 0.5));
  174. var tz = this._progressBarRenderer.getContentSize();
  175. this._progressBarTextureSize = {width: tz.width, height: tz.height};
  176. this._progressBarRendererDirty = true;
  177. },
  178. /**
  179. * Sets if slider is using scale9 renderer.
  180. * @param {Boolean} able
  181. */
  182. setScale9Enabled: function (able) {
  183. if (this._scale9Enabled == able)
  184. return;
  185. this._scale9Enabled = able;
  186. this.removeProtectedChild(this._barRenderer, true);
  187. this.removeProtectedChild(this._progressBarRenderer, true);
  188. this._barRenderer = null;
  189. this._progressBarRenderer = null;
  190. if (this._scale9Enabled) {
  191. this._barRenderer = new ccui.Scale9Sprite();
  192. this._progressBarRenderer = new ccui.Scale9Sprite();
  193. } else {
  194. this._barRenderer = cc.Sprite.create();
  195. this._progressBarRenderer = cc.Sprite.create();
  196. }
  197. this.loadBarTexture(this._textureFile, this._barTexType);
  198. this.loadProgressBarTexture(this._progressBarTextureFile, this._progressBarTexType);
  199. this.addProtectedChild(this._barRenderer, ccui.Slider.BASEBAR_RENDERER_ZORDER, -1);
  200. this.addProtectedChild(this._progressBarRenderer, ccui.Slider.PROGRESSBAR_RENDERER_ZORDER, -1);
  201. if (this._scale9Enabled) {
  202. var ignoreBefore = this._ignoreSize;
  203. this.ignoreContentAdaptWithSize(false);
  204. this._prevIgnoreSize = ignoreBefore;
  205. } else {
  206. this.ignoreContentAdaptWithSize(this._prevIgnoreSize);
  207. }
  208. this.setCapInsetsBarRenderer(this._capInsetsBarRenderer);
  209. this.setCapInsetProgressBarRenderer(this._capInsetsProgressBarRenderer);
  210. },
  211. /**
  212. * Returns slider is using scale9 renderer or not.
  213. * @returns {Boolean}
  214. */
  215. isScale9Enabled: function () {
  216. return this._scale9Enabled;
  217. },
  218. /**
  219. * override "ignoreContentAdaptWithSize" method of widget.
  220. * @param {Boolean} ignore
  221. */
  222. ignoreContentAdaptWithSize: function (ignore) {
  223. if (!this._scale9Enabled || (this._scale9Enabled && !ignore)) {
  224. ccui.Widget.prototype.ignoreContentAdaptWithSize.call(this, ignore);
  225. this._prevIgnoreSize = ignore;
  226. }
  227. },
  228. /**
  229. * Sets capinsets for slider, if slider is using scale9 renderer.
  230. * @param {cc.Rect} capInsets
  231. */
  232. setCapInsets: function (capInsets) {
  233. this.setCapInsetsBarRenderer(capInsets);
  234. this.setCapInsetProgressBarRenderer(capInsets);
  235. },
  236. /**
  237. * Sets capinsets for slider's renderer, if slider is using scale9 renderer.
  238. * @param {cc.Rect} capInsets
  239. */
  240. setCapInsetsBarRenderer: function (capInsets) {
  241. if(!capInsets)
  242. return;
  243. var locInsets = this._capInsetsBarRenderer;
  244. locInsets.x = capInsets.x;
  245. locInsets.y = capInsets.y;
  246. locInsets.width = capInsets.width;
  247. locInsets.height = capInsets.height;
  248. if (!this._scale9Enabled)
  249. return;
  250. this._barRenderer.setCapInsets(capInsets);
  251. },
  252. /**
  253. * Returns cap insets for slider.
  254. * @returns {cc.Rect}
  255. */
  256. getCapInsetsBarRenderer: function () {
  257. return cc.rect(this._capInsetsBarRenderer);
  258. },
  259. /**
  260. * Sets capinsets of ProgressBar for slider, if slider is using scale9 renderer.
  261. * @param {cc.Rect} capInsets
  262. */
  263. setCapInsetProgressBarRenderer: function (capInsets) {
  264. if(!capInsets)
  265. return;
  266. var locInsets = this._capInsetsProgressBarRenderer;
  267. locInsets.x = capInsets.x;
  268. locInsets.y = capInsets.y;
  269. locInsets.width = capInsets.width;
  270. locInsets.height = capInsets.height;
  271. if (!this._scale9Enabled)
  272. return;
  273. this._progressBarRenderer.setCapInsets(capInsets);
  274. },
  275. /**
  276. * Returns cap insets of ProgressBar for slider.
  277. * @returns {cc.Rect}
  278. */
  279. getCapInsetsProgressBarRenderer: function () {
  280. return cc.rect(this._capInsetsProgressBarRenderer);
  281. },
  282. /**
  283. * Loads textures for slider ball.
  284. * @param {String} normal
  285. * @param {String} pressed
  286. * @param {String} disabled
  287. * @param {ccui.Widget.LOCAL_TEXTURE|ccui.Widget.PLIST_TEXTURE} texType
  288. */
  289. loadSlidBallTextures: function (normal, pressed, disabled, texType) {
  290. this.loadSlidBallTextureNormal(normal, texType);
  291. this.loadSlidBallTexturePressed(pressed, texType);
  292. this.loadSlidBallTextureDisabled(disabled, texType);
  293. },
  294. /**
  295. * Loads normal state texture for slider ball.
  296. * @param {String} normal
  297. * @param {ccui.Widget.LOCAL_TEXTURE|ccui.Widget.PLIST_TEXTURE} texType
  298. */
  299. loadSlidBallTextureNormal: function (normal, texType) {
  300. if (!normal) {
  301. return;
  302. }
  303. texType = texType || ccui.Widget.LOCAL_TEXTURE;
  304. this._slidBallNormalTextureFile = normal;
  305. this._ballNTexType = texType;
  306. var self = this;
  307. if(!this._slidBallNormalRenderer.texture || !this._slidBallNormalRenderer.texture.isLoaded()){
  308. this._slidBallNormalRenderer.addLoadedEventListener(function(){
  309. self._updateChildrenDisplayedRGBA();
  310. });
  311. }
  312. switch (this._ballNTexType) {
  313. case ccui.Widget.LOCAL_TEXTURE:
  314. //SetTexture cannot load resource
  315. this._slidBallNormalRenderer.initWithFile(normal);
  316. break;
  317. case ccui.Widget.PLIST_TEXTURE:
  318. //SetTexture cannot load resource
  319. this._slidBallNormalRenderer.initWithSpriteFrameName(normal);
  320. break;
  321. default:
  322. break;
  323. }
  324. this._updateChildrenDisplayedRGBA();
  325. },
  326. /**
  327. * Loads selected state texture for slider ball.
  328. * @param {String} pressed
  329. * @param {ccui.Widget.LOCAL_TEXTURE|ccui.Widget.PLIST_TEXTURE} texType
  330. */
  331. loadSlidBallTexturePressed: function (pressed, texType) {
  332. if (!pressed) {
  333. return;
  334. }
  335. texType = texType || ccui.Widget.LOCAL_TEXTURE;
  336. this._slidBallPressedTextureFile = pressed;
  337. this._ballPTexType = texType;
  338. var self = this;
  339. if(!this._slidBallPressedRenderer.texture || !this._slidBallPressedRenderer.texture.isLoaded()){
  340. this._slidBallPressedRenderer.addLoadedEventListener(function(){
  341. self._updateChildrenDisplayedRGBA();
  342. });
  343. }
  344. switch (this._ballPTexType) {
  345. case ccui.Widget.LOCAL_TEXTURE:
  346. //SetTexture cannot load resource
  347. this._slidBallPressedRenderer.initWithFile(pressed);
  348. break;
  349. case ccui.Widget.PLIST_TEXTURE:
  350. //SetTexture cannot load resource
  351. this._slidBallPressedRenderer.initWithSpriteFrameName(pressed);
  352. break;
  353. default:
  354. break;
  355. }
  356. this._updateChildrenDisplayedRGBA();
  357. },
  358. /**
  359. * Load dark state texture for slider ball.
  360. * @param {String} disabled
  361. * @param {ccui.Widget.LOCAL_TEXTURE|ccui.Widget.PLIST_TEXTURE} texType
  362. */
  363. loadSlidBallTextureDisabled: function (disabled, texType) {
  364. if (!disabled) {
  365. return;
  366. }
  367. texType = texType || ccui.Widget.LOCAL_TEXTURE;
  368. this._slidBallDisabledTextureFile = disabled;
  369. this._ballDTexType = texType;
  370. var self = this;
  371. if(!this._slidBallDisabledRenderer.texture || !this._slidBallDisabledRenderer.texture.isLoaded()){
  372. this._slidBallDisabledRenderer.addLoadedEventListener(function(){
  373. self._updateChildrenDisplayedRGBA();
  374. });
  375. }
  376. switch (this._ballDTexType) {
  377. case ccui.Widget.LOCAL_TEXTURE:
  378. //SetTexture cannot load resource
  379. this._slidBallDisabledRenderer.initWithFile(disabled);
  380. break;
  381. case ccui.Widget.PLIST_TEXTURE:
  382. //SetTexture cannot load resource
  383. this._slidBallDisabledRenderer.initWithSpriteFrameName(disabled);
  384. break;
  385. default:
  386. break;
  387. }
  388. this._updateChildrenDisplayedRGBA();
  389. },
  390. /**
  391. * Changes the progress direction of slider.
  392. * @param {number} percent
  393. */
  394. setPercent: function (percent) {
  395. if (percent > 100)
  396. percent = 100;
  397. if (percent < 0)
  398. percent = 0;
  399. this._percent = percent;
  400. var res = percent / 100.0;
  401. var dis = this._barLength * res;
  402. this._slidBallRenderer.setPosition(cc.p(dis, this._contentSize.height / 2));
  403. if (this._scale9Enabled)
  404. this._progressBarRenderer.setPreferredSize(cc.size(dis, this._progressBarTextureSize.height));
  405. else {
  406. var spriteRenderer = this._progressBarRenderer;
  407. var rect = spriteRenderer.getTextureRect();
  408. spriteRenderer.setTextureRect(
  409. cc.rect(rect.x, rect.y, dis, rect.height),
  410. spriteRenderer.isTextureRectRotated()
  411. );
  412. }
  413. },
  414. /**
  415. * test the point whether location in loadingBar's bounding box.
  416. * @override
  417. * @param {cc.Point} pt
  418. * @returns {boolean}
  419. */
  420. hitTest: function(pt){
  421. var nsp = this._slidBallNormalRenderer.convertToNodeSpace(pt);
  422. var ballSize = this._slidBallNormalRenderer.getContentSize();
  423. var ballRect = cc.rect(0,0, ballSize.width, ballSize.height);
  424. // if (ballRect.containsPoint(nsp)) {
  425. return (nsp.x >= ballRect.x &&
  426. nsp.x <= (ballRect.x + ballRect.width) &&
  427. nsp.y >= ballRect.y &&
  428. nsp.y <= (ballRect.y +ballRect.height));
  429. },
  430. onTouchBegan: function (touch, event) {
  431. var pass = ccui.Widget.prototype.onTouchBegan.call(this, touch, event);
  432. if (this._hit) {
  433. var nsp = this.convertToNodeSpace(this._touchBeganPosition);
  434. this.setPercent(this._getPercentWithBallPos(nsp.x));
  435. this._percentChangedEvent();
  436. }
  437. return pass;
  438. },
  439. onTouchMoved: function (touch, event) {
  440. var touchPoint = touch.getLocation();
  441. var nsp = this.convertToNodeSpace(touchPoint);
  442. this.setPercent(this._getPercentWithBallPos(nsp.x));
  443. this._percentChangedEvent();
  444. },
  445. onTouchEnded: function (touch, event) {
  446. ccui.Widget.prototype.onTouchEnded.call(this, touch, event);
  447. },
  448. onTouchCancelled: function (touch, event) {
  449. ccui.Widget.prototype.onTouchCancelled.call(this, touch, event);
  450. },
  451. /**
  452. * Returns percent with ball's position.
  453. * @param {cc.Point} px
  454. * @returns {number}
  455. */
  456. _getPercentWithBallPos: function (px) {
  457. return ((px/this._barLength)*100);
  458. },
  459. /**
  460. * add event listener
  461. * @param {Function} selector
  462. * @param {Object} [target=]
  463. * @deprecated since v3.0, please use addEventListener instead.
  464. */
  465. addEventListenerSlider: function (selector, target) {
  466. this.addEventListener(selector, target);
  467. },
  468. /**
  469. * Adds a callback
  470. * @param {Function} selector
  471. * @param {Object} [target=]
  472. */
  473. addEventListener: function(selector, target){
  474. this._sliderEventSelector = selector;
  475. this._sliderEventListener = target;
  476. },
  477. _percentChangedEvent: function () {
  478. if(this._sliderEventSelector){
  479. if (this._sliderEventListener)
  480. this._sliderEventSelector.call(this._sliderEventListener, this, ccui.Slider.EVENT_PERCENT_CHANGED);
  481. else
  482. this._sliderEventSelector(this, ccui.Slider.EVENT_PERCENT_CHANGED);
  483. }
  484. },
  485. /**
  486. * Gets the progress direction of slider.
  487. * @returns {number}
  488. */
  489. getPercent: function () {
  490. return this._percent;
  491. },
  492. _onSizeChanged: function () {
  493. ccui.Widget.prototype._onSizeChanged.call(this);
  494. this._barRendererAdaptDirty = true;
  495. this._progressBarRendererDirty = true;
  496. },
  497. _adaptRenderers: function(){
  498. if (this._barRendererAdaptDirty)
  499. {
  500. this._barRendererScaleChangedWithSize();
  501. this._barRendererAdaptDirty = false;
  502. }
  503. if (this._progressBarRendererDirty)
  504. {
  505. this._progressBarRendererScaleChangedWithSize();
  506. this._progressBarRendererDirty = false;
  507. }
  508. },
  509. /**
  510. * Returns the content size of bar renderer.
  511. * @returns {cc.Size}
  512. */
  513. getVirtualRendererSize: function(){
  514. return this._barRenderer.getContentSize();
  515. },
  516. /**
  517. * Returns the bar renderer.
  518. * @returns {cc.Node}
  519. */
  520. getVirtualRenderer: function () {
  521. return this._barRenderer;
  522. },
  523. _barRendererScaleChangedWithSize: function () {
  524. if (this._ignoreSize) {
  525. this._barRenderer.setScale(1.0);
  526. this._barLength = this._contentSize.width;
  527. }
  528. else {
  529. this._barLength = this._contentSize.width;
  530. if (this._scale9Enabled) {
  531. this._barRenderer.setPreferredSize(this._contentSize);
  532. }
  533. else {
  534. var btextureSize = this._barRenderer.getContentSize();
  535. if (btextureSize.width <= 0.0 || btextureSize.height <= 0.0) {
  536. this._barRenderer.setScale(1.0);
  537. return;
  538. }
  539. var bscaleX = this._contentSize.width / btextureSize.width;
  540. var bscaleY = this._contentSize.height / btextureSize.height;
  541. this._barRenderer.setScaleX(bscaleX);
  542. this._barRenderer.setScaleY(bscaleY);
  543. }
  544. }
  545. this._barRenderer.setPosition(this._contentSize.width / 2.0, this._contentSize.height / 2.0);
  546. this.setPercent(this._percent);
  547. },
  548. _progressBarRendererScaleChangedWithSize: function () {
  549. if (this._ignoreSize) {
  550. if (!this._scale9Enabled) {
  551. var ptextureSize = this._progressBarTextureSize;
  552. var pscaleX = this._contentSize.width / ptextureSize.width;
  553. var pscaleY = this._contentSize.height / ptextureSize.height;
  554. this._progressBarRenderer.setScaleX(pscaleX);
  555. this._progressBarRenderer.setScaleY(pscaleY);
  556. }
  557. }
  558. else {
  559. if (this._scale9Enabled) {
  560. this._progressBarRenderer.setPreferredSize(this._contentSize);
  561. this._progressBarTextureSize = this._progressBarRenderer.getContentSize();
  562. }
  563. else {
  564. var ptextureSize = this._progressBarTextureSize;
  565. if (ptextureSize.width <= 0.0 || ptextureSize.height <= 0.0) {
  566. this._progressBarRenderer.setScale(1.0);
  567. return;
  568. }
  569. var pscaleX = this._contentSize.width / ptextureSize.width;
  570. var pscaleY = this._contentSize.height / ptextureSize.height;
  571. this._progressBarRenderer.setScaleX(pscaleX);
  572. this._progressBarRenderer.setScaleY(pscaleY);
  573. }
  574. }
  575. this._progressBarRenderer.setPosition(0.0, this._contentSize.height / 2.0);
  576. this.setPercent(this._percent);
  577. },
  578. _onPressStateChangedToNormal: function () {
  579. this._slidBallNormalRenderer.setVisible(true);
  580. this._slidBallPressedRenderer.setVisible(false);
  581. this._slidBallDisabledRenderer.setVisible(false);
  582. },
  583. _onPressStateChangedToPressed: function () {
  584. this._slidBallNormalRenderer.setVisible(false);
  585. this._slidBallPressedRenderer.setVisible(true);
  586. this._slidBallDisabledRenderer.setVisible(false);
  587. },
  588. _onPressStateChangedToDisabled: function () {
  589. this._slidBallNormalRenderer.setVisible(false);
  590. this._slidBallPressedRenderer.setVisible(false);
  591. this._slidBallDisabledRenderer.setVisible(true);
  592. },
  593. /**
  594. * Returns the "class name" of ccui.LoadingBar.
  595. * @returns {string}
  596. */
  597. getDescription: function () {
  598. return "Slider";
  599. },
  600. _createCloneInstance: function () {
  601. return ccui.Slider.create();
  602. },
  603. _copySpecialProperties: function (slider) {
  604. this._prevIgnoreSize = slider._prevIgnoreSize;
  605. this.setScale9Enabled(slider._scale9Enabled);
  606. this.loadBarTexture(slider._textureFile, slider._barTexType);
  607. this.loadProgressBarTexture(slider._progressBarTextureFile, slider._progressBarTexType);
  608. this.loadSlidBallTextureNormal(slider._slidBallNormalTextureFile, slider._ballNTexType);
  609. this.loadSlidBallTexturePressed(slider._slidBallPressedTextureFile, slider._ballPTexType);
  610. this.loadSlidBallTextureDisabled(slider._slidBallDisabledTextureFile, slider._ballDTexType);
  611. this.setPercent(slider.getPercent());
  612. this._sliderEventListener = slider._sliderEventListener;
  613. this._sliderEventSelector = slider._sliderEventSelector;
  614. }
  615. });
  616. var _p = ccui.Slider.prototype;
  617. // Extended properties
  618. /** @expose */
  619. _p.percent;
  620. cc.defineGetterSetter(_p, "percent", _p.getPercent, _p.setPercent);
  621. _p = null;
  622. /**
  623. * allocates and initializes a UISlider.
  624. * @deprecated since v3.0, please use new ccui.Slider() instead.
  625. * @return {ccui.Slider}
  626. * @example
  627. * // example
  628. * var uiSlider = ccui.Slider.create();
  629. */
  630. ccui.Slider.create = function () {
  631. return new ccui.Slider();
  632. };
  633. // Constant
  634. //Slider event type
  635. /**
  636. * The percent change event flag of ccui.Slider.
  637. * @constant
  638. * @type {number}
  639. */
  640. ccui.Slider.EVENT_PERCENT_CHANGED = 0;
  641. //Render zorder
  642. /**
  643. * The zOrder value of ccui.Slider's base bar renderer.
  644. * @constant
  645. * @type {number}
  646. */
  647. ccui.Slider.BASEBAR_RENDERER_ZORDER = -3;
  648. /**
  649. * The zOrder value of ccui.Slider's progress bar renderer.
  650. * @constant
  651. * @type {number}
  652. */
  653. ccui.Slider.PROGRESSBAR_RENDERER_ZORDER = -2;
  654. /**
  655. * The zOrder value of ccui.Slider's ball renderer.
  656. * @constant
  657. * @type {number}
  658. */
  659. ccui.Slider.BALL_RENDERER_ZORDER = -1;