diff options
Diffstat (limited to 'objects.js')
| -rw-r--r-- | objects.js | 54 |
1 files changed, 53 insertions, 1 deletions
@@ -125,7 +125,7 @@ PrototypeHatBlockMorph*/ // Global stuff //////////////////////////////////////////////////////// -modules.objects = '2014-July-11'; +modules.objects = '2014-July-17'; var SpriteMorph; var StageMorph; @@ -415,6 +415,12 @@ SpriteMorph.prototype.initBlocks = function () { spec: 'go back %n layers', defaults: [1] }, + doScreenshot: { + type: 'command', + category: 'looks', + spec: 'save %imgsource as costume named %s', + defaults: [['pen trails'], localize('screenshot')] + }, // Looks - Debugging primitives for development mode reportCostumes: { @@ -1711,6 +1717,8 @@ SpriteMorph.prototype.blockTemplates = function (category) { blocks.push('-'); blocks.push(block('log')); blocks.push(block('alert')); + blocks.push('-'); + blocks.push(block('doScreenshot')); } ///////////////////////////////// @@ -4076,6 +4084,42 @@ SpriteMorph.prototype.reactToDropOf = function (morph, hand) { morph.slideBackTo(hand.grabOrigin); }; +// SpriteMorph screenshots + +SpriteMorph.prototype.newCostumeName = function (name) { + + function stemOf(aName) { + var ix = aName.indexOf('('); + if (ix < 0) {return aName; } + return aName.substring(0, ix); + } + + var stem = stemOf(name), + similar = this.costumes.asArray().filter(function (eachCostume) { + return stemOf(eachCostume.name) === stem; + }).length; + + return stem + (similar ? '(' + (similar + 1) + ')' : ''); +}; + +SpriteMorph.prototype.doScreenshot = function (imgSource, data) { + var canvas, + stage = this.parentThatIsA(StageMorph), + costume; + data = this.newCostumeName(data); + if (imgSource[0] === undefined) { + return; + } + if (imgSource[0] === "pen trails") { + canvas = stage.trailsCanvas; + costume = new Costume(canvas, data).copy(); // prevent mutation + } else if (imgSource[0] === "stage image") { + canvas = stage.fullImageClassic(); + costume = new Costume(canvas, data); + } + this.addCostume(costume); +}; + // SpriteHighlightMorph ///////////////////////////////////////////////// // SpriteHighlightMorph inherits from Morph: @@ -4771,6 +4815,8 @@ StageMorph.prototype.blockTemplates = function (category) { blocks.push('-'); blocks.push(block('log')); blocks.push(block('alert')); + blocks.push('-'); + blocks.push(block('doScreenshot')); } ///////////////////////////////// @@ -5244,6 +5290,12 @@ StageMorph.prototype.deleteVariable = SpriteMorph.prototype.deleteVariable; // StageMorph block rendering +StageMorph.prototype.doScreenshot + = SpriteMorph.prototype.doScreenshot; + +StageMorph.prototype.newCostumeName + = SpriteMorph.prototype.newCostumeName; + StageMorph.prototype.blockForSelector = SpriteMorph.prototype.blockForSelector; |
