summaryrefslogtreecommitdiff
path: root/objects.js
diff options
context:
space:
mode:
Diffstat (limited to 'objects.js')
-rw-r--r--objects.js54
1 files changed, 53 insertions, 1 deletions
diff --git a/objects.js b/objects.js
index 3cd3ca5..e395369 100644
--- a/objects.js
+++ b/objects.js
@@ -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;