added "new costume" primitive reporter to "looks" category

pull/89/head
jmoenig 2019-10-18 11:48:11 +02:00
rodzic 8e0c9fe0c2
commit 14822fb957
5 zmienionych plików z 51 dodań i 18 usunięć

Wyświetl plik

@ -2,7 +2,8 @@
## in development: ## in development:
* **New Features:** * **New Features:**
* added selectors for sprites' and the stage's bounding box (left, right, top, bottom) to MY dropdown * new primitive in "looks": NEW COSTUME from a list of pixels and dimensions, allowing CURRENT
* added selectors for sprites' and the stage's bounding box (LEFT, RIGHT, TOP, BOTTOM) to MY dropdown
* **Notable Changes:** * **Notable Changes:**
* running STOP ALL now also toggles (pauses and resumes) all generic WHEN hat blocks (just like pressing the stop button) * running STOP ALL now also toggles (pauses and resumes) all generic WHEN hat blocks (just like pressing the stop button)
* **Notable Fixes:** * **Notable Fixes:**
@ -14,6 +15,7 @@
### 2019-10-18 ### 2019-10-18
* objects, blocks, threads: added dimension getters for the stage * objects, blocks, threads: added dimension getters for the stage
* German translation update (left, right, top, bottom selectors in MY) * German translation update (left, right, top, bottom selectors in MY)
* blocks, objects, threads: added "new costume" primitive reporter to "looks" category
### 2019-10-17 ### 2019-10-17
* objects, blocks, threads: added selectors for sprites' bounding box (left, right, top, bottom) to MY dropdown * objects, blocks, threads: added selectors for sprites' bounding box (left, right, top, bottom) to MY dropdown

Wyświetl plik

@ -6,8 +6,8 @@
<link rel="shortcut icon" href="src/favicon.ico"> <link rel="shortcut icon" href="src/favicon.ico">
<script type="text/javascript" src="src/morphic.js?version=2019-10-16"></script> <script type="text/javascript" src="src/morphic.js?version=2019-10-16"></script>
<script type="text/javascript" src="src/widgets.js?version=2019-10-16"></script> <script type="text/javascript" src="src/widgets.js?version=2019-10-16"></script>
<script type="text/javascript" src="src/blocks.js?version=2019-10-17"></script> <script type="text/javascript" src="src/blocks.js?version=2019-10-18"></script>
<script type="text/javascript" src="src/threads.js?version=2019-10-17"></script> <script type="text/javascript" src="src/threads.js?version=2019-10-18"></script>
<script type="text/javascript" src="src/objects.js?version=2019-10-18"></script> <script type="text/javascript" src="src/objects.js?version=2019-10-18"></script>
<script type="text/javascript" src="src/gui.js?version=2019-10-16"></script> <script type="text/javascript" src="src/gui.js?version=2019-10-16"></script>
<script type="text/javascript" src="src/paint.js?version=2019-06-27"></script> <script type="text/javascript" src="src/paint.js?version=2019-06-27"></script>

Wyświetl plik

@ -148,7 +148,7 @@ CustomCommandBlockMorph, SymbolMorph, ToggleButtonMorph, DialMorph*/
// Global stuff //////////////////////////////////////////////////////// // Global stuff ////////////////////////////////////////////////////////
modules.blocks = '2019-October-17'; modules.blocks = '2019-October-18';
var SyntaxElementMorph; var SyntaxElementMorph;
var BlockMorph; var BlockMorph;
@ -1139,6 +1139,16 @@ SyntaxElementMorph.prototype.labelPart = function (spec) {
); );
part.setContents(1); part.setContents(1);
break; break;
case '%dim':
part = new InputSlotMorph(
null,
true,
{
current : ['current']
}
);
// part.setContents( ['current']);
break;
case '%rel': case '%rel':
part = new InputSlotMorph( part = new InputSlotMorph(
null, // text null, // text
@ -2372,6 +2382,7 @@ SyntaxElementMorph.prototype.endLayout = function () {
%inst - white roundish type-in slot with drop-down for instruments %inst - white roundish type-in slot with drop-down for instruments
%ida - white roundish type-in slot with drop-down for list indices %ida - white roundish type-in slot with drop-down for list indices
%idx - white roundish type-in slot for indices incl. "any" %idx - white roundish type-in slot for indices incl. "any"
%dim - white roundish type-in slot for dimensinos incl. "current"
%obj - specially drawn slot for object reporters %obj - specially drawn slot for object reporters
%rel - chameleon colored rectangular drop-down for relation options %rel - chameleon colored rectangular drop-down for relation options
%spr - chameleon colored rectangular drop-down for object-names %spr - chameleon colored rectangular drop-down for object-names

Wyświetl plik

@ -312,6 +312,11 @@ SpriteMorph.prototype.initBlocks = function () {
spec: '%img of costume %cst', spec: '%img of costume %cst',
defaults: [['width']] defaults: [['width']]
}, },
reportNewCostume: {
type: 'reporter',
category: 'looks',
spec: 'new costume %l width: %dim height: %dim'
},
reportNewCostumeStretched: { reportNewCostumeStretched: {
type: 'reporter', type: 'reporter',
category: 'looks', category: 'looks',
@ -2210,6 +2215,7 @@ SpriteMorph.prototype.blockTemplates = function (category) {
blocks.push(block('doThink')); blocks.push(block('doThink'));
blocks.push('-'); blocks.push('-');
blocks.push(block('reportGetImageAttribute')); blocks.push(block('reportGetImageAttribute'));
blocks.push(block('reportNewCostume'));
blocks.push(block('reportNewCostumeStretched')); blocks.push(block('reportNewCostumeStretched'));
blocks.push('-'); blocks.push('-');
blocks.push(block('changeEffect')); blocks.push(block('changeEffect'));
@ -8268,6 +8274,7 @@ StageMorph.prototype.blockTemplates = function (category) {
blocks.push(block('getCostumeIdx')); blocks.push(block('getCostumeIdx'));
blocks.push('-'); blocks.push('-');
blocks.push(block('reportGetImageAttribute')); blocks.push(block('reportGetImageAttribute'));
blocks.push(block('reportNewCostume'));
blocks.push(block('reportNewCostumeStretched')); blocks.push(block('reportNewCostumeStretched'));
blocks.push('-'); blocks.push('-');
blocks.push(block('changeEffect')); blocks.push(block('changeEffect'));

Wyświetl plik

@ -61,7 +61,7 @@ StageMorph, SpriteMorph, StagePrompterMorph, Note, modules, isString, copy,
isNil, WatcherMorph, List, ListWatcherMorph, alert, console, TableMorph, Color, isNil, WatcherMorph, List, ListWatcherMorph, alert, console, TableMorph, Color,
TableFrameMorph, ColorSlotMorph, isSnapObject, Map, newCanvas, Symbol*/ TableFrameMorph, ColorSlotMorph, isSnapObject, Map, newCanvas, Symbol*/
modules.threads = '2019-October-17'; modules.threads = '2019-October-18';
var ThreadManager; var ThreadManager;
var Process; var Process;
@ -4915,11 +4915,6 @@ Process.prototype.reportGetImageAttribute = function (choice, name) {
Process.prototype.reportNewCostumeStretched = function (name, xP, yP) { Process.prototype.reportNewCostumeStretched = function (name, xP, yP) {
var cst; var cst;
if (!isFinite(+xP * +yP) || isNaN(+xP * +yP)) {
throw new Error(
'expecting a finite number\nbut getting Infinity or NaN'
);
}
if (name instanceof List) { if (name instanceof List) {
return this.reportNewCostume(name, xP, yP); return this.reportNewCostume(name, xP, yP);
} }
@ -4927,6 +4922,11 @@ Process.prototype.reportNewCostumeStretched = function (name, xP, yP) {
if (!cst) { if (!cst) {
return new Costume(); return new Costume();
} }
if (!isFinite(+xP * +yP) || isNaN(+xP * +yP)) {
throw new Error(
'expecting a finite number\nbut getting Infinity or NaN'
);
}
return cst.stretched( return cst.stretched(
Math.round(cst.width() * +xP / 100), Math.round(cst.width() * +xP / 100),
Math.round(cst.height() * +yP / 100) Math.round(cst.height() * +yP / 100)
@ -4951,16 +4951,29 @@ Process.prototype.costumeNamed = function (name) {
}; };
Process.prototype.reportNewCostume = function (pixels, width, height, name) { Process.prototype.reportNewCostume = function (pixels, width, height, name) {
// private var rcvr = this.blockReceiver(),
stage = rcvr.parentThatIsA(StageMorph),
canvas, ctx, src, dta, i, k, px;
this.assertType(pixels, 'list');
if (this.inputOption(width) === 'current') {
width = rcvr.costume ? rcvr.costume.width() : stage.dimensions.x;
}
if (this.inputOption(height) === 'current') {
height = rcvr.costume ? rcvr.costume.height() : stage.dimensions.y;
}
width = Math.abs(Math.floor(+width)); width = Math.abs(Math.floor(+width));
height = Math.abs(Math.floor(+height)); height = Math.abs(Math.floor(+height));
if (!isFinite(width * height) || isNaN(width * height)) {
throw new Error(
'expecting a finite number\nbut getting Infinity or NaN'
);
}
var canvas = newCanvas(new Point(width, height), true), canvas = newCanvas(new Point(width, height), true);
ctx = canvas.getContext('2d'), ctx = canvas.getContext('2d');
src = pixels.asArray(), src = pixels.asArray();
dta = ctx.createImageData(width, height), dta = ctx.createImageData(width, height);
i, k, px;
for (i = 0; i < src.length; i += 1) { for (i = 0; i < src.length; i += 1) {
px = src[i].asArray(); px = src[i].asArray();
for (k = 0; k < 4; k += 1) { for (k = 0; k < 4; k += 1) {
@ -4970,7 +4983,7 @@ Process.prototype.reportNewCostume = function (pixels, width, height, name) {
ctx.putImageData(dta, 0, 0); ctx.putImageData(dta, 0, 0);
return new Costume( return new Costume(
canvas, canvas,
name || this.blockReceiver().newCostumeName(localize('snap')) name || rcvr.newCostumeName(localize('snap'))
); );
}; };