new feature: enable sprite nesting via the context menu

pull/89/head
jmoenig 2019-02-18 19:00:25 +01:00
rodzic 0565310e52
commit b0d4b4fd1b
3 zmienionych plików z 36 dodań i 3 usunięć

Wyświetl plik

@ -13,6 +13,7 @@
* blocks for changing and querying the "flat line ends" setting
* selectors for changing and querying "draggable" and "rotation style" settings
* special context-aware drop-downs for custom blocks
* new "stick to" submenu in the sprite context menu where applicable
* multi-line and monospaced "code" input slots for custom blocks
* new "string" library, thanks, Brian
* added "neg" selector to monadic function reporter in "Operators" category
@ -39,6 +40,9 @@
* Greek, thanks, Alexandros!
* German
### 2019-02-18
* Objects: enable sprite nesting via the context menu
### 2019-02-15
* BYOB: tweaked yesterday's fix...
* Blocks: fixed a glitch in the custom block help mechanism (show only the prototype)

Wyświetl plik

@ -8,7 +8,7 @@
<script type="text/javascript" src="src/widgets.js?version=2018-10-02"></script>
<script type="text/javascript" src="src/blocks.js?version=2019-02-15"></script>
<script type="text/javascript" src="src/threads.js?version=2019-01-28"></script>
<script type="text/javascript" src="src/objects.js?version=2019-02-07"></script>
<script type="text/javascript" src="src/objects.js?version=2019-02-18"></script>
<script type="text/javascript" src="src/gui.js?version=2019-02-07"></script>
<script type="text/javascript" src="src/paint.js?version=2018-10-02"></script>
<script type="text/javascript" src="src/lists.js?version=2019-02-07"></script>

Wyświetl plik

@ -83,7 +83,7 @@ BlockEditorMorph, BlockDialogMorph, PrototypeHatBlockMorph, localize,
TableMorph, TableFrameMorph, normalizeCanvas, BooleanSlotMorph, HandleMorph,
AlignmentMorph, Process, XML_Element, VectorPaintEditorMorph*/
modules.objects = '2019-February-07';
modules.objects = '2019-February-18';
var SpriteMorph;
var StageMorph;
@ -3206,7 +3206,9 @@ SpriteMorph.prototype.reportSounds = function () {
SpriteMorph.prototype.userMenu = function () {
var ide = this.parentThatIsA(IDE_Morph),
menu = new MenuMorph(this);
menu = new MenuMorph(this),
allParts,
anchors;
if (ide && ide.isAppMode) {
// menu.addItem('help', 'nop');
@ -3246,6 +3248,15 @@ SpriteMorph.prototype.userMenu = function () {
localize('detach from') + ' ' + this.anchor.name,
'detachFromAnchor'
);
} else {
allParts = this.allParts();
anchors = this.parent.children.filter(function (morph) {
return morph instanceof SpriteMorph &&
!contains(allParts, morph);
});
if (anchors.length) {
menu.addMenu('stick to', this.anchorsMenu(anchors));
}
}
if (this.parts.length) {
menu.addItem('detach all parts', 'detachAllParts');
@ -3254,6 +3265,20 @@ SpriteMorph.prototype.userMenu = function () {
return menu;
};
SpriteMorph.prototype.anchorsMenu = function (targets) {
var menu = new MenuMorph(this.attachTo, null, this);
targets.forEach(function (sprite) {
menu.addItem(
[
sprite.thumbnail(new Point(24, 24)),
sprite.name,
],
sprite
);
});
return menu;
};
SpriteMorph.prototype.exportSprite = function () {
if (this.isTemporary) {return; }
var ide = this.parentThatIsA(IDE_Morph);
@ -5987,6 +6012,10 @@ SpriteMorph.prototype.booleanMorph = function (bool) {
simulate Morphic trees
*/
SpriteMorph.prototype.attachTo = function (aSprite) {
aSprite.attachPart(this);
};
SpriteMorph.prototype.attachPart = function (aSprite) {
var v = Date.now();
if (aSprite.anchor) {