export script pic with result bubble

hidden option in the shift-context-menu of reporter scripts
pull/3/merge
jmoenig 2014-07-30 16:28:01 +02:00
rodzic 9f7028dbf9
commit 61dd479a2b
3 zmienionych plików z 73 dodań i 8 usunięć

Wyświetl plik

@ -155,7 +155,7 @@ DialogBoxMorph, BlockInputFragmentMorph, PrototypeHatBlockMorph, Costume*/
// Global stuff ////////////////////////////////////////////////////////
modules.blocks = '2014-July-29';
modules.blocks = '2014-July-30';
var SyntaxElementMorph;
@ -1621,7 +1621,7 @@ SyntaxElementMorph.prototype.isEmptySlot = function () {
// SyntaxElementMorph speech bubble feedback:
SyntaxElementMorph.prototype.showBubble = function (value) {
SyntaxElementMorph.prototype.showBubble = function (value, exportPic) {
var bubble,
txt,
img,
@ -1695,11 +1695,28 @@ SyntaxElementMorph.prototype.showBubble = function (value) {
this.rightCenter().add(new Point(2, 0)),
isClickable
);
if (exportPic) {
this.exportPictureWithResult(bubble);
}
if (sf) {
bubble.keepWithin(sf);
}
};
SyntaxElementMorph.prototype.exportPictureWithResult = function (aBubble) {
var scr = this.fullImage(),
bub = aBubble.fullImageClassic(),
taller = Math.max(0, bub.height - scr.height),
pic = newCanvas(new Point(
scr.width + bub.width + 2,
scr.height + taller
)),
ctx = pic.getContext('2d');
ctx.drawImage(scr, 0, pic.height - scr.height);
ctx.drawImage(bub, scr.width + 2, 0);
window.open(pic.toDataURL());
};
// SyntaxElementMorph code mapping
/*
@ -2026,13 +2043,29 @@ BlockMorph.prototype.userMenu = function () {
var menu = new MenuMorph(this),
world = this.world(),
myself = this,
shiftClicked = world.currentKey === 16,
alternatives,
top,
blck;
menu.addItem(
"help...",
'showHelp'
);
if (shiftClicked) {
top = this.topBlock();
if (top instanceof ReporterBlockMorph) {
menu.addItem(
"script pic with result...",
function () {
top.ExportResultPic();
},
'open a new window\n' +
'with a picture of both\nthis script and its result',
new Color(100, 0, 0)
);
}
}
if (this.isTemplate) {
if (!(this.parent instanceof SyntaxElementMorph)) {
if (this.selector !== 'evaluateCustomBlock') {
@ -4115,6 +4148,23 @@ ReporterBlockMorph.prototype.mouseClickLeft = function (pos) {
}
};
// ReporterBlock exporting picture with result bubble
ReporterBlockMorph.prototype.ExportResultPic = function () {
var top = this.topBlock(),
receiver = top.receiver(),
stage;
if (top !== this) {return; }
if (receiver) {
stage = receiver.parentThatIsA(StageMorph);
if (stage) {
stage.threads.stopProcess(top);
stage.threads.startProcess(top, false, true);
}
}
};
// ReporterBlockMorph deleting
ReporterBlockMorph.prototype.userDestroy = function () {

Wyświetl plik

@ -2255,3 +2255,4 @@ ______
------
* Objects: propagate HIDE and SHOW to nested sprite parts
* GUI: propagate DELETE to nested sprite parts
* Blocks, Threads: export script pic with result bubble (shift-context-menu of reporter scripts)

Wyświetl plik

@ -83,7 +83,7 @@ ArgLabelMorph, localize, XML_Element, hex_sha512*/
// Global stuff ////////////////////////////////////////////////////////
modules.threads = '2014-July-28';
modules.threads = '2014-July-30';
var ThreadManager;
var Process;
@ -134,7 +134,11 @@ ThreadManager.prototype.toggleProcess = function (block) {
}
};
ThreadManager.prototype.startProcess = function (block, isThreadSafe) {
ThreadManager.prototype.startProcess = function (
block,
isThreadSafe,
exportResult
) {
var active = this.findProcess(block),
top = block.topBlock(),
newProc;
@ -147,6 +151,7 @@ ThreadManager.prototype.startProcess = function (block, isThreadSafe) {
}
top.addHighlight();
newProc = new Process(block.topBlock());
newProc.exportResult = exportResult;
this.processes.push(newProc);
return newProc;
};
@ -232,11 +237,17 @@ ThreadManager.prototype.removeTerminatedProcesses = function () {
if (proc.topBlock instanceof ReporterBlockMorph) {
if (proc.homeContext.inputs[0] instanceof List) {
proc.topBlock.showBubble(new ListWatcherMorph(
proc.homeContext.inputs[0]
));
proc.topBlock.showBubble(
new ListWatcherMorph(
proc.homeContext.inputs[0]
),
proc.exportResult
);
} else {
proc.topBlock.showBubble(proc.homeContext.inputs[0]);
proc.topBlock.showBubble(
proc.homeContext.inputs[0],
proc.exportResult
);
}
}
} else {
@ -302,6 +313,8 @@ ThreadManager.prototype.findProcess = function (block) {
httpRequest active instance of an HttpRequest or null
pauseOffset msecs between the start of an interpolated operation
and when the process was paused
exportResult boolean flag indicating whether a picture of the top
block along with the result bubble shoud be exported
*/
Process.prototype = {};
@ -325,6 +338,7 @@ function Process(topBlock) {
this.isPaused = false;
this.pauseOffset = null;
this.frameCount = 0;
this.exportResult = false;
if (topBlock) {
this.homeContext.receiver = topBlock.receiver();