|
12 | 12 | <canvas id="debug-canvas" width="10" height="10" style="border:3px dashed red"></canvas>
|
13 | 13 | <p>
|
14 | 14 | <label for="fudgeproperty">Property to tweak:</label>
|
15 |
| - <select id="fudgeproperty" onchange="onFudgePropertyChanged(this.value)"> |
| 15 | + <select id="fudgeproperty"> |
16 | 16 | <option value="posx">Position X</option>
|
17 | 17 | <option value="posy">Position Y</option>
|
18 | 18 | <option value="direction">Direction</option>
|
|
27 | 27 | <option value="ghost">Ghost</option>
|
28 | 28 | </select>
|
29 | 29 | <label for="fudge">Property Value:</label>
|
30 |
| - <input type="range" id="fudge" style="width:50%" value="90" min="-90" max="270" step="any" oninput="onFudgeChanged(this.value)" onchange="onFudgeChanged(this.value)"> |
| 30 | + <input type="range" id="fudge" style="width:50%" value="90" min="-90" max="270" step="any"> |
31 | 31 | </p>
|
32 | 32 | <p>
|
33 |
| - <label for="fudgeMin">Min:</label><input id="fudgeMin" type="number" onchange="onFudgeMinChanged(this.value)"> |
34 |
| - <label for="fudgeMax">Max:</label><input id="fudgeMax" type="number" onchange="onFudgeMaxChanged(this.value)"> |
| 33 | + <label for="fudgeMin">Min:</label><input id="fudgeMin" type="number"> |
| 34 | + <label for="fudgeMax">Max:</label><input id="fudgeMax" type="number"> |
35 | 35 | </p>
|
36 |
| -<script src="scratch-render.js"></script> |
37 |
| -<script> |
38 |
| - var canvas = document.getElementById('scratch-stage'); |
39 |
| - var fudge = 90; |
40 |
| - var renderer = new ScratchRender(canvas); |
41 |
| - renderer.setLayerGroupOrdering(['group1']); |
42 |
| - |
43 |
| - var drawableID = renderer.createDrawable('group1'); |
44 |
| - renderer.updateDrawableProperties(drawableID, { |
45 |
| - position: [0, 0], |
46 |
| - scale: [100, 100], |
47 |
| - direction: 90 |
48 |
| - }); |
49 |
| - |
50 |
| - var drawableID2 = renderer.createDrawable('group1'); |
51 |
| - var wantBitmapSkin = false; |
52 |
| - |
53 |
| - // Bitmap (squirrel) |
54 |
| - var image = new Image(); |
55 |
| - image.onload = function () { |
56 |
| - var bitmapSkinId = renderer.createBitmapSkin(image); |
57 |
| - if (wantBitmapSkin) { |
58 |
| - renderer.updateDrawableProperties(drawableID2, { |
59 |
| - skinId: bitmapSkinId |
60 |
| - }); |
61 |
| - } |
62 |
| - }; |
63 |
| - image.crossOrigin = 'anonymous'; |
64 |
| - image.src = 'https://cdn.assets.scratch.mit.edu/internalapi/asset/7e24c99c1b853e52f8e7f9004416fa34.png/get/'; |
65 |
| - |
66 |
| - // SVG (cat 1-a) |
67 |
| - var xhr = new XMLHttpRequest(); |
68 |
| - xhr.addEventListener("load", function () { |
69 |
| - var skinId = renderer.createSVGSkin(xhr.responseText); |
70 |
| - if (!wantBitmapSkin) { |
71 |
| - renderer.updateDrawableProperties(drawableID2, { |
72 |
| - skinId: skinId |
73 |
| - }); |
74 |
| - } |
75 |
| - }); |
76 |
| - xhr.open('GET', 'https://cdn.assets.scratch.mit.edu/internalapi/asset/f88bf1935daea28f8ca098462a31dbb0.svg/get/'); |
77 |
| - xhr.send(); |
78 |
| - |
79 |
| - var posX = 0; |
80 |
| - var posY = 0; |
81 |
| - var scaleX = 100; |
82 |
| - var scaleY = 100; |
83 |
| - var fudgeProperty = 'posx'; |
84 |
| - function onFudgePropertyChanged(newValue) { |
85 |
| - fudgeProperty = newValue; |
86 |
| - } |
87 |
| - var fudgeInput = document.getElementById('fudge'); |
88 |
| - function onFudgeMinChanged(newValue) { |
89 |
| - fudgeInput.min = newValue; |
90 |
| - } |
91 |
| - function onFudgeMaxChanged(newValue) { |
92 |
| - fudgeInput.max = newValue; |
93 |
| - } |
94 |
| - function onFudgeChanged(newValue) { |
95 |
| - fudge = newValue; |
96 |
| - var props = {}; |
97 |
| - switch (fudgeProperty) { |
98 |
| - case 'posx': props.position = [fudge, posY]; posX = fudge; break; |
99 |
| - case 'posy': props.position = [posX, fudge]; posY = fudge; break; |
100 |
| - case 'direction': props.direction = fudge; break; |
101 |
| - case 'scalex': props.scale = [fudge, scaleY]; scaleX = fudge; break; |
102 |
| - case 'scaley': props.scale = [scaleX, fudge]; scaleY = fudge; break; |
103 |
| - case 'color': props.color = fudge; break; |
104 |
| - case 'whirl': props.whirl = fudge; break; |
105 |
| - case 'fisheye': props.fisheye = fudge; break; |
106 |
| - case 'pixelate': props.pixelate = fudge; break; |
107 |
| - case 'mosaic': props.mosaic = fudge; break; |
108 |
| - case 'brightness': props.brightness = fudge; break; |
109 |
| - case 'ghost': props.ghost = fudge; break; |
110 |
| - } |
111 |
| - renderer.updateDrawableProperties(drawableID2, props); |
112 |
| - } |
113 |
| - |
114 |
| - // Adapted from code by Simon Sarris: http://stackoverflow.com/a/10450761 |
115 |
| - function getMousePos(event, element) { |
116 |
| - var stylePaddingLeft = parseInt(document.defaultView.getComputedStyle(element, null)['paddingLeft'], 10) || 0; |
117 |
| - var stylePaddingTop = parseInt(document.defaultView.getComputedStyle(element, null)['paddingTop'], 10) || 0; |
118 |
| - var styleBorderLeft = parseInt(document.defaultView.getComputedStyle(element, null)['borderLeftWidth'], 10) || 0; |
119 |
| - var styleBorderTop = parseInt(document.defaultView.getComputedStyle(element, null)['borderTopWidth'], 10) || 0; |
120 |
| - |
121 |
| - // Some pages have fixed-position bars at the top or left of the page |
122 |
| - // They will mess up mouse coordinates and this fixes that |
123 |
| - var html = document.body.parentNode; |
124 |
| - var htmlTop = html.offsetTop; |
125 |
| - var htmlLeft = html.offsetLeft; |
126 |
| - |
127 |
| - // Compute the total offset. It's possible to cache this if you want |
128 |
| - var offsetX = 0, offsetY = 0; |
129 |
| - if (element.offsetParent !== undefined) { |
130 |
| - do { |
131 |
| - offsetX += element.offsetLeft; |
132 |
| - offsetY += element.offsetTop; |
133 |
| - } while ((element = element.offsetParent)); |
134 |
| - } |
135 |
| - |
136 |
| - // Add padding and border style widths to offset |
137 |
| - // Also add the <html> offsets in case there's a position:fixed bar |
138 |
| - // This part is not strictly necessary, it depends on your styling |
139 |
| - offsetX += stylePaddingLeft + styleBorderLeft + htmlLeft; |
140 |
| - offsetY += stylePaddingTop + styleBorderTop + htmlTop; |
141 |
| - |
142 |
| - // We return a simple javascript object with x and y defined |
143 |
| - return { |
144 |
| - x: event.pageX - offsetX, |
145 |
| - y: event.pageY - offsetY |
146 |
| - }; |
147 |
| - } |
148 |
| - |
149 |
| - canvas.onmousemove = function(event) { |
150 |
| - var mousePos = getMousePos(event, canvas); |
151 |
| - renderer.extractColor(mousePos.x, mousePos.y, 30); |
152 |
| - }; |
153 |
| - |
154 |
| - canvas.onclick = function(event) { |
155 |
| - var mousePos = getMousePos(event, canvas); |
156 |
| - var pickID = renderer.pick(mousePos.x, mousePos.y); |
157 |
| - console.log('You clicked on ' + (pickID < 0 ? 'nothing' : 'ID# ' + pickID)); |
158 |
| - if (pickID >= 0) { |
159 |
| - console.dir(renderer.extractDrawable(pickID, mousePos.x, mousePos.y)); |
160 |
| - } |
161 |
| - }; |
162 |
| - |
163 |
| - function drawStep() { |
164 |
| - renderer.draw(); |
165 |
| - // renderer.getBounds(drawableID2); |
166 |
| - // renderer.isTouchingColor(drawableID2, [255,255,255]); |
167 |
| - requestAnimationFrame(drawStep); |
168 |
| - } |
169 |
| - drawStep(); |
170 |
| - |
171 |
| - var debugCanvas = /** @type {canvas} */ document.getElementById('debug-canvas'); |
172 |
| - renderer.setDebugCanvas(debugCanvas); |
173 |
| -</script> |
| 36 | +<script src="playground.js"></script> |
174 | 37 | </body>
|
175 | 38 | </html>
|
0 commit comments