Image.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. topSuite("Ext.draw.sprite.Image", ['Ext.draw.Container'], function() {
  2. beforeEach(function() {
  3. // Silence warnings regarding Sencha download server
  4. spyOn(Ext.log, 'warn');
  5. });
  6. describe("hitTest", function () {
  7. var sprite, surface, container;
  8. beforeEach(function () {
  9. container = new Ext.draw.Container({
  10. renderTo: Ext.getBody()
  11. });
  12. surface = new Ext.draw.Surface();
  13. sprite = new Ext.draw.sprite.Image({
  14. globalAlpha: 0.8,
  15. y: 50,
  16. x: 50,
  17. height: 50,
  18. width: 50,
  19. src: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAA' +
  20. 'XNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAActpVFh0WE1MOmNvbS5hZG9iZS54bXAAA' +
  21. 'AAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlI' +
  22. 'DUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyL' +
  23. 'zIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKI' +
  24. 'CAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgI' +
  25. 'CAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgI' +
  26. 'CAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgSW1hZ2VSZWFkeTwveG1wOkNyZWF0b3JUb29sPgogI' +
  27. 'CAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZ' +
  28. 'jpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KKS7NPQAACxhJREFUaAXFW' +
  29. 'WlsVNcZPe/N5jEGL6w1S1hj9i2BmApIpEolStugqkRuVRoJVY0qlC5UlfKjSqrmb6U2bdKIoJa0a' +
  30. 'RCIkopFlEAWtaFpw1YMgbSsxmDZxgbvM2/mzVt6vvvmgkMyM/YYzLXu3Ddv7vKd73zLvdeGz4Iii' +
  31. '+97MAxTjXY9G5bdinh0LEJmvMgZix8WSFHE+P4g2ntO4ErbNkTDFVkQReumCEmCIeHBjvQRCClMJ' +
  32. 'NLNaLi+Bd3JX2DJtBYCGYX+AAc791D6DwqIWKFhGGq91s7DaGj/Hs3pHGZO2IvS2ASCcPl7aCjyF' +
  33. 'D12EKZ1G8SVtl0437qai0ZREpmGqrLFWQECkEVLM4SBAwairb6x/S003niKZrSKDPQgEl6MWKQqE' +
  34. 'CHL1hDkKXrogIAou4eB613/Ioh1iIVrAd+itzTDNEayBuZ0//gACgLRzptMt+JS23qEzdkEkGZ1C' +
  35. 'K0ajtsCCb1SNGtFq3UIAwsC0XniSvsbcN0Gar+SAovg4thjkcq8g0SqORCh+JQ0BAjB0LxAhA0pX' +
  36. 'YlzuNn3HMKh5QTRSyYMFWZ9P6RYaOt+L5jtPn7mBQIKLKW164CyGwEgD6J4xjDWJJ1+KZo6nkVT+' +
  37. '8cqy3uey9+H38hyAtE5I5XpICPbmbHFN1IUUgAEJQgCoGlVY8eHT6Ol4yJMM6RyjUc2dfLMdr+nT' +
  38. 'U4g2nV7k5dgu0fpG+UEQW3fAsEevslqozsxFlamHm98MAsnLhyAnbHY3yRnBoYLUB4ggcS9qfPqI' +
  39. 'TCl/kqlmLQ02zHQmehBLDoXhjkdb/3nCWw99hROtRxC2kneAiTs3UuGcgLR0cqyryjP8MiGFOUfY' +
  40. 'l5ZaizbY+QiIoN5xY9gdOUSdPr7sev8Grxe/w3UNweAZL57yVBOIIHQLjLOdQVAwm1QAh9R8YyUJ' +
  41. 'NMeMgoVpzIcOPErzDWTUBmbj077bfzl0hpsPUVAdzB0t00uB5BA3eITjtdHAUuJQaJVACJgBbR/n' +
  42. 'ztgmgzfsxO8sgT8kMf3SYK7qgBVZQHtJKDfn/46TrYc/JTJCaC7UXIA0VOLyTBX0KHvBCFQPcqQz' +
  43. 'rALZ3FG9MGNWnxnwiVAjznG9RNUxLVbgLoyh7Dj8uN47fRanOgHSFbTOUuvPNg2LxDTDCNqckPoO' +
  44. '5xXIlTgIyADJqvn0bSY5VNl3chEkgqEwz6iY11dAcReGa8JIWMSRkcX0OTexTYCeuX013Cy9X0FQ' +
  45. 'nxoKOzkACImJDo34IaqkVLCEQj/JACn6Qs9IQtt0Q50sjqmw/2WCQ3CZf+gEqyAyo53uNG0ydBtQ' +
  46. 'O9jy8Uv4Q9nNqHDalURrlgwBhOfSPyZIhNKLjhyfS8OtKzFOIZXGDcZcmk2hguTvsBHXG3i9pFxI' +
  47. 'MQNsEnnN8UaqR4JzXIIk1bCnjTyRRYTlxKVAGXsPwY3mINiHLNx9hlMr5ynmJG1B1Ny9lYLc6aJp' +
  48. 'TU0C+633ARrBt2sFmWwnVBQKVmG1WEfhzoRVuRZsyLf5dmh9PpZvosPOX4KKbcBI8Nz1Rw/PzMf5' +
  49. '26eUgocLDM5gQSqBMaXTsWEyDpm7kZ4bikyrsHFuctitViZRlQVMAJYqgicof+oZ/mefSfvNRjdu' +
  50. 'ohwvmaa20yUmaV48exiNPXKLntwPpMTiE5ekVAMSyq/hQ7u3G23jKHT5cKARUmEGQEgYBiF2VL47' +
  51. 'HcN6nbrB8wJmCwwDd7xwxx/k8JPBoMgfvPJjzh/sCsY6G4gJxCxTwEjZdHYx1BlzkQy8z+k3TjBE' +
  52. 'AQDmTIxCibA0gQhYAJAAuo2WwJUCZ1l8DbYAJz6jaaWdFtRHlqEg737sL9hp1pbOVXwlPczp7PrU' +
  53. 'drpP7y2D69eehJfKJnPKNZAlDE6PH2ny0My6XM7b9A86OxUTYj45VkcXTu+BAHl9P0cXtYgRro9/' +
  54. 'Ye/u+JHfHb9GFrda9ix7CqqR04ekPPnZUQW0tc/KyY9gUdGbkRz8gx8dwp9JqVYkbOiMjWykhSTu' +
  55. '1UZpoUhYUsqGbOVf/VnLfvMICEmGLAoxjUSR8n4u008B7Foy1BfcnwUZETGaVY6km14/shy3HQbE' +
  56. 'Q/XwDKuwbFjZEXCccBIiKpXjGhm+F2YkdAcMCLK4aSsEoaJj/OTDbaSdqV6iKGHAaAstBDbV/wdF' +
  57. 'SU8XhOsViq7fKYUZERG6AhSVToOzy15Dx5Xa7HOwXRnwPIzytktKjLB931s+6RlTZCJRNafkmyVL' +
  58. '2mGsq3NVkU+3ZIZy7VQgjl4O3EaFzr1MYJo85QBAZHxGsyUihn4VW0DqkO1eKf7Y4T9qdRsBRKZj' +
  59. 'BK6jwL3ZoH0ByUmJ0Eizd9UzQIJzC5rYgKGASFFesRkhbWz7WflqaB5DerKVIOZVDEVv171Nyyof' +
  60. 'wU/ufoC4hRukTOHQSABCx108DA3ioGJhamqiMlgQHuK8NnkdkBlfD6rDK92CsFWxmGIyvB9mrsG2' +
  61. '0sDTQTSdg7+gmBMPvPisMEVDaY8XolNK57H0S/+G3Wj6vBR539R33cVMW8SjyXl6KXN9Iq5sYrZW' +
  62. 'Yyx0qYUI2SGzzbfSStMpbglsgxWsmK1xZE4GQOOAxcbG5GyUwWFHJCzf94s/bWTdtI4cukjbDmxG' +
  63. 'duad4AGjonxGjowd8RGFzN2CCVUmTASJjOyLzPIklwPKlZoOG4mAqcninQb6w0eHdwIGp1rWFa2F' +
  64. 'Ide2IOKMrkzyO3wgzKt/oB0BJGIFgvHsLrmUdTOqMUPLm3EjpNb8FLTm4hTqfNK5vLuJckdc7fYl' +
  65. 'SDgNATDBGhyvwY7Ai/BrX5vCGkqPs0QlhLzE6BuiGyQMgIoVIoGoicWUxNNyV+UgB6pWYWHZizH+' +
  66. 'svPYO+JrTjY+EdMjAAV0WXMJ2makQWX2c/JVnH8jDg4FZKm8CnJPZS9RKhKd2HMqApeDBYWs3APL' +
  67. 'XGeVjkvtawBhQnooQdXYcH05fjKxe/ir0e2Ytfl11FNQFUElPTkXGKryMSbMnWTnBYw2YjmkJUQr' +
  68. '5pIJKaVT+YNDW21QBGe71oRQJohj+dgYWj57JV48dub8WbdYSwdvwF7bhxDj00z80vp/G42HH8ah' +
  69. 'E3nj3g0ux6gpnoW/3URzusfAuCuAtEaUYC46RKGAkBR1M5diV9ueA2H1/8D8dB4HO+rR5gHK8vlb' +
  70. 'rofEw5B2NwehwVIFzB/xjw1rcyVr9wTIHrBOwFFwhGsXLga2zfuw+NVa3GSYCJenEB4IKM5ZaRlD' +
  71. 'TMh3kjx9obXBXNnztHT5W3vKRC9cn9ALhmYMHoCXtrwW5pXlGZmw+R5X4Nw6CvjjBHobDmPH6/+K' +
  72. 'aZUT1HTGBLx8pRhAaLXF0AhJhEB88CEKdj+1T+j/fp5VGKEYsInCJ9mVcobS8nqdWvW0efktob3A' +
  73. '/zLV4YViBZEa3f1kpUA7/660rz05jbYpVlNMctxofEkvv/NZ7Fs4cNqiCigULk/QLLaHVM5FnVTv' +
  74. '8N/Ip3DCI93aGJi3HyC7rHp6R8q9hQbAwByV/JIIW3d+bvWsITV8SPHqXwR5glzZng0Ptl1HLt37' +
  75. '8GD02bxnOLzxDkwXQ+s152SDPG7DqUubb83QfWzTIoQxJ7jeHnz77D2y0+qd4UNSnULPjjpsBeai' +
  76. '1rzZleHX7PhYb+6braP0fBf/tOrfvALb4KzfQYqnCStYS8Ok4WUD479U7Kcj9Xwdx/ae0uOwYKQg' +
  77. 'cMOhKFXCdzT1+tj3Vh/w8+e8S9euTgkEDK46PNIP+sc8CPXU6dDi/v17ft3Ynr1A3is9lE1XkUnu' +
  78. 'agokC9yLTasQESIlJ1G643rGFc5BqVx+QcSb03o9AONTmrA53z8H0eVMzcGH0Y4AAAAAElFTkSuQ' +
  79. 'mCC'
  80. });
  81. surface.add(sprite);
  82. container.add(surface);
  83. });
  84. afterEach(function () {
  85. Ext.destroy(sprite, surface, container);
  86. });
  87. it("should return an object with the 'sprite' property set to the sprite itself, " +
  88. "if the sprite is visible and its bounding box is hit", function () {
  89. // Testing hitTest method of the abstract Sprite class.
  90. // Even though, (10,10) is not inside the circle, it's inside it's bounding box.
  91. var result = Ext.draw.sprite.Sprite.prototype.hitTest.call(sprite, [60, 70]);
  92. expect(result && result.sprite).toBe(sprite);
  93. });
  94. it("should return null, if the sprite's bounding box is hit, but the sprite is not visible", function () {
  95. var originalMethod = sprite.isVisible;
  96. sprite.isVisible = function () { return false; };
  97. var result = Ext.draw.sprite.Sprite.prototype.hitTest.call(sprite, [60, 70]);
  98. expect(result).toBe(null);
  99. sprite.isVisible = originalMethod;
  100. });
  101. it("should return null, if the sprite is visible, but it's bounding box is not hit", function () {
  102. var result = Ext.draw.sprite.Sprite.prototype.hitTest.call(sprite, [210, 200]);
  103. expect(result).toBe(null);
  104. });
  105. });
  106. });