From 3f19a21cadf059ec17abc939739e98642239a08f Mon Sep 17 00:00:00 2001 From: jmoenig Date: Tue, 19 Mar 2013 10:34:10 +0100 Subject: [PATCH] Scalable Comments, auto-positioning scaled scripts including support for auto-positioning scaled scripts (so you don't have to clean-up when scaling blocks) --- blocks.js | 21 +++++++++++++-------- gui.js | 9 ++++++--- history.txt | 3 ++- store.js | 53 ++++++++++++++++++++++++++++++----------------------- 4 files changed, 51 insertions(+), 35 deletions(-) diff --git a/blocks.js b/blocks.js index cb03adff..c18e6f26 100644 --- a/blocks.js +++ b/blocks.js @@ -8738,9 +8738,13 @@ CommentMorph.uber = BoxMorph.prototype; // CommentMorph preferences settings (pseudo-inherited from SyntaxElement): -CommentMorph.prototype.fontSize = SyntaxElementMorph.prototype.fontSize; -CommentMorph.prototype.padding = 5; -CommentMorph.prototype.rounding = 8; +CommentMorph.prototype.refreshScale = function () { + CommentMorph.prototype.fontSize = SyntaxElementMorph.prototype.fontSize; + CommentMorph.prototype.padding = 5 * SyntaxElementMorph.prototype.scale; + CommentMorph.prototype.rounding = 8 * SyntaxElementMorph.prototype.scale; +}; + +CommentMorph.prototype.refreshScale(); // CommentMorph instance creation: @@ -8749,13 +8753,14 @@ function CommentMorph(contents) { } CommentMorph.prototype.init = function (contents) { - var myself = this; + var myself = this, + scale = SyntaxElementMorph.prototype.scale; this.block = null; // optional anchor block this.stickyOffset = null; // not to be persisted this.isCollapsed = false; this.titleBar = new BoxMorph( this.rounding, - 1.000001, // shadow bug in Chrome, + 1.000001 * scale, // shadow bug in Chrome, new Color(255, 255, 180) ); this.titleBar.color = new Color(255, 255, 180); @@ -8773,7 +8778,7 @@ CommentMorph.prototype.init = function (contents) { ); this.contents.isEditable = true; this.contents.enableSelecting(); - this.contents.maxWidth = 90; + this.contents.maxWidth = 90 * scale; this.contents.drawNew(); this.handle = new HandleMorph( this.contents, @@ -8782,13 +8787,13 @@ CommentMorph.prototype.init = function (contents) { -2, -2 ); - this.handle.setExtent(new Point(11, 11)); + this.handle.setExtent(new Point(11 * scale, 11 * scale)); this.anchor = null; CommentMorph.uber.init.call( this, this.rounding, - 1.000001, // shadow bug in Chrome, + 1.000001 * scale, // shadow bug in Chrome, new Color(255, 255, 180) ); this.color = new Color(255, 255, 220); diff --git a/gui.js b/gui.js index 1ba307e8..49c65bdb 100644 --- a/gui.js +++ b/gui.js @@ -64,11 +64,11 @@ standardSettings, Sound, BlockMorph, ToggleMorph, InputSlotDialogMorph, ScriptsMorph, isNil, SymbolMorph, BlockExportDialogMorph, BlockImportDialogMorph, SnapTranslator, localize, List, InputSlotMorph, SnapCloud, Uint8Array, HandleMorph, SVG_Costume, fontHeight, hex_sha512, -sb*/ +sb, CommentMorph*/ // Global stuff //////////////////////////////////////////////////////// -modules.gui = '2013-March-18'; +modules.gui = '2013-March-19'; // Declarations @@ -2787,9 +2787,11 @@ IDE_Morph.prototype.userSetBlocksScale = function () { { 'normal (1)' : 1, 'demo (1.2)' : 1.2, + 'presentation (1.4)' : 1.4, 'big (2)' : 2, 'huge (4)' : 4, - 'giant (8)' : 8 + 'giant (8)' : 8, + 'monstrous (10)' : 10 }, false, // read only? true // numeric @@ -2808,6 +2810,7 @@ IDE_Morph.prototype.setBlocksScale = function (num) { projectData = this.serializer.serialize(this.stage); } SyntaxElementMorph.prototype.setScale(num); + CommentMorph.prototype.refreshScale(); SpriteMorph.prototype.initBlocks(); this.spriteBar.tabBar.tabTo('scripts'); this.createCategories(); diff --git a/history.txt b/history.txt index 8d582a3b..b90771d2 100755 --- a/history.txt +++ b/history.txt @@ -1534,4 +1534,5 @@ ______ 130319 ------ * Blocks: SyntaxElementMorph fixLayout() optimization for active highlights -* Russian translation!! Yay, thanks, Svetlana Ptashnaya!! \ No newline at end of file +* Russian translation!! Yay, thanks, Svetlana Ptashnaya!! +* Store, GUI, Blocks: Scaling support for Comments and serialization/deserialization \ No newline at end of file diff --git a/store.js b/store.js index efd9d3be..2dc43cac 100644 --- a/store.js +++ b/store.js @@ -56,11 +56,12 @@ detect, CustomCommandBlockMorph, CustomReporterBlockMorph, Color, List, newCanvas, Costume, Sound, Audio, IDE_Morph, ScriptsMorph, BlockMorph, ArgMorph, InputSlotMorph, TemplateSlotMorph, CommandSlotMorph, FunctionSlotMorph, MultiArgMorph, ColorSlotMorph, nop, CommentMorph, isNil, -localize, sizeOf, ArgLabelMorph, SVG_Costume, MorphicPreferences*/ +localize, sizeOf, ArgLabelMorph, SVG_Costume, MorphicPreferences, +SyntaxElementMorph*/ // Global stuff //////////////////////////////////////////////////////// -modules.store = '2013-March-14'; +modules.store = '2013-March-19'; // XML_Serializer /////////////////////////////////////////////////////// @@ -702,7 +703,8 @@ SnapSerializer.prototype.populateCustomBlocks = function ( SnapSerializer.prototype.loadScripts = function (scripts, model) { // private - var myself = this; + var myself = this, + scale = SyntaxElementMorph.prototype.scale; scripts.texture = 'scriptsPaneTexture.gif'; model.children.forEach(function (child) { var element; @@ -712,8 +714,8 @@ SnapSerializer.prototype.loadScripts = function (scripts, model) { return; } element.setPosition(new Point( - +child.attributes.x || 0, - +child.attributes.y || 0 + (+child.attributes.x || 0) * scale, + (+child.attributes.y || 0) * scale ).add(scripts.topLeft())); scripts.add(element); element.fixBlockColor(null, true); // force zebra coloring @@ -726,8 +728,8 @@ SnapSerializer.prototype.loadScripts = function (scripts, model) { return; } element.setPosition(new Point( - +child.attributes.x || 0, - +child.attributes.y || 0 + (+child.attributes.x || 0) * scale, + (+child.attributes.y || 0) * scale ).add(scripts.topLeft())); scripts.add(element); } @@ -737,6 +739,7 @@ SnapSerializer.prototype.loadScripts = function (scripts, model) { SnapSerializer.prototype.loadScriptsArray = function (model) { // private - answer an array containting the model's scripts var myself = this, + scale = SyntaxElementMorph.prototype.scale, scripts = []; model.children.forEach(function (child) { var element; @@ -746,8 +749,8 @@ SnapSerializer.prototype.loadScriptsArray = function (model) { return; } element.setPosition(new Point( - +child.attributes.x || 0, - +child.attributes.y || 0 + (+child.attributes.x || 0) * scale, + (+child.attributes.y || 0) * scale )); scripts.push(element); element.fixBlockColor(null, true); // force zebra coloring @@ -757,8 +760,8 @@ SnapSerializer.prototype.loadScriptsArray = function (model) { return; } element.setPosition(new Point( - +child.attributes.x || 0, - +child.attributes.y || 0 + (+child.attributes.x || 0) * scale, + (+child.attributes.y || 0) * scale )); scripts.push(element); } @@ -787,9 +790,10 @@ SnapSerializer.prototype.loadScript = function (model) { SnapSerializer.prototype.loadComment = function (model) { // private - var comment = new CommentMorph(model.contents); + var comment = new CommentMorph(model.contents), + scale = SyntaxElementMorph.prototype.scale; comment.isCollapsed = (model.attributes.collapsed === 'true'); - comment.setTextWidth(+model.attributes.w); + comment.setTextWidth(+model.attributes.w * scale); return comment; }; @@ -1369,6 +1373,7 @@ BlockMorph.prototype.toXML = BlockMorph.prototype.toScriptXML = function ( ) { var position, xml, + scale = SyntaxElementMorph.prototype.scale, block = this; // determine my position @@ -1382,8 +1387,8 @@ BlockMorph.prototype.toXML = BlockMorph.prototype.toScriptXML = function ( if (savePosition) { xml = serializer.format( '', - position.x, - position.y, + position.x / scale, + position.y / scale, this.toXML(serializer) ); } @@ -1613,12 +1619,13 @@ Context.prototype.toXML = function (serializer) { // Comments CommentMorph.prototype.toXML = function (serializer) { - var position; + var position, + scale = SyntaxElementMorph.prototype.scale; if (this.block) { // attached to a block return serializer.format( '%', - this.textWidth(), + this.textWidth() / scale, this.isCollapsed, serializer.escape(this.text()) ); @@ -1632,9 +1639,9 @@ CommentMorph.prototype.toXML = function (serializer) { } return serializer.format( '%', - position.x, - position.y, - this.textWidth(), + position.x / scale, + position.y / scale, + this.textWidth() / scale, this.isCollapsed, serializer.escape(this.text()) );