SymbolMorph.prototype.names.push('largeStage'); SymbolMorph.prototype.names.push('zoomToFit'); /* SymbolMorph.prototype.originalSymbolCanvasColored = SymbolMorph.prototype.symbolCanvasColored; SymbolMorph.prototype.symbolCanvasColored = function (aColor) { if (this.name == 'largeStage') { return this.drawSymbolLargeStage(newCanvas(new Point(this.symbolWidth(), this.size)), aColor); } else if (this.name == 'zoomToFit') { return this.drawSymbolZoomToFit(newCanvas(new Point(this.symbolWidth(), this.size)), aColor); } else if (this.name == 'turtle') { return this.drawSymbolTurtle(newCanvas(new Point(this.symbolWidth(), this.size)), aColor); } else { return this.originalSymbolCanvasColored(aColor) } } */ SymbolMorph.prototype.originalSymbolWidth = SymbolMorph.prototype.symbolWidth; SymbolMorph.prototype.symbolWidth = function () { switch (this.name) { // case 'gears': // case 'file': // return this.originalSymbolWidth() * 0.8; case 'turtle': return this.originalSymbolWidth() * 0.8; default: return this.originalSymbolWidth(); } }; SymbolMorph.prototype.origRenderShape = SymbolMorph.prototype.renderShape; SymbolMorph.prototype.renderShape = function (ctx, aColor) { switch (this.name) { case 'zoomToFit': this.renderSymbolZoomToFit(ctx, aColor); break; default: this.origRenderShape(ctx, aColor); } } SymbolMorph.prototype.renderSymbolZoomToFit = function(ctx, color) { var c = this.symbolWidth() / 2, h = this.size, w = this.symbolWidth() / 5; ctx.fillStyle = color.toString(); ctx.beginPath(); ctx.moveTo(0, 0); ctx.lineTo(w, 0); ctx.stroke(); ctx.moveTo(0, 0); ctx.lineTo(0, w); ctx.stroke(); ctx.moveTo(0, h); ctx.lineTo(0, h - w); ctx.stroke(); ctx.moveTo(0, h); ctx.lineTo(w, h); ctx.stroke(); ctx.moveTo(h, 0); ctx.lineTo(h - w, 0); ctx.stroke(); ctx.moveTo(h, 0); ctx.lineTo(h, w); ctx.stroke(); ctx.moveTo(h, h); ctx.lineTo(h - w, h); ctx.stroke(); ctx.moveTo(h, h); ctx.lineTo(h, h - w); ctx.stroke(); } SymbolMorph.prototype.renderSymbolTurtle = function (ctx, color) { // this.renderTexture('stitchcode/assets/turtles16.png', ctx); // draw a circle // draw a solid circle var w = this.symbolWidth(); var r = w / 2.5; ctx.fillStyle = color.toString(); ctx.beginPath(); ctx.scale(1, 0.7); ctx.arc(w / 2 - 1, w / (2 * 0.7), r, radians(0), radians(360), true); ctx.fill(); ctx.beginPath(); ctx.arc(w / 2 - 1 + r, w / (2 * 0.7), r/2, radians(0), radians(360), true); ctx.fill(); ctx.beginPath(); ctx.scale(1,1); ctx.arc(w / 2 - 1 - r/1.5, w / 2 - r/2, r/2.5, radians(0), radians(360), true); ctx.fill(); ctx.beginPath(); ctx.arc(w / 2 - 1 + r/1.5, w / 2 - r/2, r/2.5, radians(0), radians(360), true); ctx.fill(); ctx.beginPath(); ctx.arc(w / 2 - 1 - r/1.5, w / 2 + (r*1.5), r/2.5, radians(0), radians(360), true); ctx.fill(); ctx.beginPath(); ctx.arc(w / 2 - 1 + r/1.5, w / 2.0 + r*1.5, r/2.5, radians(0), radians(360), true); ctx.fill(); } SymbolMorph.prototype.renderSymbolTurtle2 = function (ctx, color) { this.texture = "data:image/png;base64,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"; this.render = function (ctx) { if (this.cachedTexture) { this.renderCachedTexture(ctx); } else if (this.texture) { this.renderTexture(this.texture, ctx); } this.changed(); }; this.renderCachedTexture = function (ctx) { ctx.drawImage( this.cachedTexture, 0, 16 ); this.changed(); }; this.render() this.fixLayout() }; /* SymbolMorph.prototype.drawSymbolFullScreen = function (canvas, color) { // answer a canvas showing two arrows pointing diagonally outwards var ctx = canvas.getContext('2d'), h = canvas.height, c = canvas.width / 2, off = canvas.width / 10, w = canvas.width / 2; ctx.strokeStyle = color.toString(); ctx.lineWidth = 1.5; ctx.moveTo(c - off, c + off); ctx.lineTo(0, h); ctx.stroke(); ctx.moveTo(c + off, c - off); ctx.lineTo(h, 0); ctx.stroke(); ctx.moveTo(0, h); ctx.lineTo(0, h - w); ctx.stroke(); ctx.moveTo(0, h); ctx.lineTo(w, h); ctx.stroke(); ctx.moveTo(h, 0); ctx.lineTo(h - w, 0); ctx.stroke(); ctx.moveTo(h, 0); ctx.lineTo(h, w); ctx.stroke(); return canvas; }; SymbolMorph.prototype.drawSymbolZoomToFit = function (canvas, color) { // answer a canvas showing two arrows pointing diagonally outwards var ctx = canvas.getContext('2d'), h = canvas.height, c = canvas.width / 2, off = canvas.width / 10, w = canvas.width / 4; ctx.strokeStyle = color.toString(); ctx.lineWidth = 1.5; ctx.moveTo(0, 0); ctx.lineTo(w, 0); ctx.stroke(); ctx.moveTo(0, 0); ctx.lineTo(0, w); ctx.stroke(); ctx.moveTo(0, h); ctx.lineTo(0, h - w); ctx.stroke(); ctx.moveTo(0, h); ctx.lineTo(w, h); ctx.stroke(); ctx.moveTo(h, 0); ctx.lineTo(h - w, 0); ctx.stroke(); ctx.moveTo(h, 0); ctx.lineTo(h, w); ctx.stroke(); ctx.moveTo(h, h); ctx.lineTo(h - w, h); ctx.stroke(); ctx.moveTo(h, h); ctx.lineTo(h, h - w); ctx.stroke(); return canvas; }; SymbolMorph.prototype.drawSymbolFile= function (canvas, color) { // answer a canvas showing a page symbol var ctx = canvas.getContext('2d'), w = Math.min(canvas.width, canvas.height) / 2; //ctx.fillStyle = color.toString(); ctx.beginPath(); ctx.moveTo(0, 0); ctx.lineTo(w, 0); ctx.lineTo(w, w); ctx.lineTo(canvas.width, w); ctx.lineTo(canvas.width, canvas.height); ctx.lineTo(0, canvas.height); ctx.stroke(); //ctx.fill(); //ctx.fillStyle = color.darker(25).toString(); ctx.beginPath(); ctx.moveTo(w, 0); ctx.lineTo(canvas.width, w); ctx.lineTo(w, w); ctx.lineTo(w, 0); ctx.stroke(); //ctx.fill(); return canvas; }; SymbolMorph.prototype.drawSymbolNormalScreen = function (canvas, color) { // answer a canvas showing two arrows pointing diagonally outwards var ctx = canvas.getContext('2d'), h = canvas.height, c = canvas.width / 2, off = canvas.width / 10, w = canvas.width / 2; ctx.strokeStyle = color.toString(); ctx.lineWidth = 1.5; ctx.moveTo(c - off, c + off); ctx.lineTo(0, h); ctx.stroke(); ctx.moveTo(c + off, c - off); ctx.lineTo(h, 0); ctx.stroke(); ctx.moveTo(0, h); ctx.lineTo(0, h - w); ctx.stroke(); ctx.moveTo(0, h); ctx.lineTo(w, h); ctx.stroke(); ctx.moveTo(h, 0); ctx.lineTo(h - w, 0); ctx.stroke(); ctx.moveTo(h, 0); ctx.lineTo(h, w); ctx.stroke(); return canvas; }; SymbolMorph.prototype.drawSymbolLargeStage = function (canvas, color) { var ctx = canvas.getContext('2d'), w = canvas.width, h = canvas.height, w2 = w * 1 / 3, h2 = h * 2 / 3; ctx.strokeStyle = color.toString(); ctx.lineWidth = 2; ctx.rect(0, 0, w, h); ctx.stroke(); ctx.rect(w2, 0, w, h2); ctx.stroke(); return canvas; }; SymbolMorph.prototype.drawSymbolNormalStage = function (canvas, color) { var ctx = canvas.getContext('2d'), w = canvas.width, h = canvas.height, w2 = w / 2, h2 = h / 2; ctx.strokeStyle = color.toString(); ctx.lineWidth = 2; ctx.rect(0, 0, w, h); ctx.stroke(); ctx.rect(w2, 0, w2, h2); ctx.stroke(); return canvas; }; SymbolMorph.prototype.drawSymbolSmallStage = function (canvas, color) { var ctx = canvas.getContext('2d'), w = canvas.width, h = canvas.height, w2 = w * 2 / 3, h2 = h * 1 / 3; ctx.strokeStyle = color.toString(); ctx.lineWidth = 2; ctx.rect(0, 0, w, h); ctx.stroke(); ctx.rect(w2, 0, w2, h2); ctx.stroke(); return canvas; }; */