diff --git a/snap.html b/snap.html index 62a435e2..bc156ce8 100755 --- a/snap.html +++ b/snap.html @@ -4,7 +4,7 @@ Snap! Build Your Own Blocks 6.0.0 - beta - - + diff --git a/src/morphic.js b/src/morphic.js index 32de2cd7..f7c66e29 100644 --- a/src/morphic.js +++ b/src/morphic.js @@ -1268,12 +1268,17 @@ /*global window, HTMLCanvasElement, FileReader, Audio, FileList, Map*/ -var morphicVersion = '2020-June-30'; +var morphicVersion = '2020-July-01'; var modules = {}; // keep track of additional loaded modules var useBlurredShadows = true; const ZERO = new Point(); +const BLACK = new Color(); +const WHITE = new Color(255, 255, 255); + Object.freeze(ZERO); +Object.freeze(BLACK); +Object.freeze(WHITE); var standardSettings = { minimumFontHeight: getMinimumFontHeight(), // browser settings @@ -2271,7 +2276,7 @@ Color.prototype.lighter = function (percent) { if (percent) { fract = (100 - percent) / 100; } - return this.mixed(fract, new Color(255, 255, 255)); + return this.mixed(fract, WHITE); }; Color.prototype.dansDarker = function () { @@ -2533,7 +2538,7 @@ Point.prototype.translateBy = function (deltaPoint) { }; Point.prototype.rotateBy = function (angle, centerPoint) { - var center = centerPoint || new Point(0, 0), + var center = centerPoint || ZERO, p = this.subtract(center), r = p.r(), theta = angle - p.theta(); @@ -4685,7 +4690,7 @@ HandleMorph.prototype.init = function ( this.type = type || 'resize'; // also: 'move', 'moveCenter', 'movePivot' this.isHighlighted = false; HandleMorph.uber.init.call(this); - this.color = new Color(255, 255, 255); + this.color = WHITE; this.isDraggable = false; if (this.type === 'movePivot') { size *= 2; @@ -4726,7 +4731,7 @@ HandleMorph.prototype.render = function (ctx) { this.renderHandleOn( ctx, new Color(100, 100, 255), - new Color(255, 255, 255) + WHITE ); } else { this.renderHandleOn( @@ -5236,7 +5241,7 @@ ColorPaletteMorph.prototype.render = function (ctx) { var ext = this.extent(), x, y, h, l; - this.choice = new Color(); + this.choice = BLACK; for (x = 0; x <= ext.x; x += 1) { h = 360 * x / ext.x; for (y = 0; y <= ext.y; y += 1) { @@ -5338,7 +5343,7 @@ GrayPaletteMorph.prototype.render = function (ctx) { var ext = this.extent(), gradient; - this.choice = new Color(); + this.choice = BLACK; gradient = ctx.createLinearGradient(0, 0, ext.x, ext.y); gradient.addColorStop(0, 'black'); gradient.addColorStop(1, 'white'); @@ -5357,13 +5362,13 @@ ColorPickerMorph.uber = Morph.prototype; // ColorPickerMorph instance creation: function ColorPickerMorph(defaultColor) { - this.init(defaultColor || new Color(255, 255, 255)); + this.init(defaultColor || WHITE); } ColorPickerMorph.prototype.init = function (defaultColor) { this.choice = defaultColor; ColorPickerMorph.uber.init.call(this); - this.color = new Color(255, 255, 255); + this.color = WHITE; this.setExtent(new Point(80, 80)); }; @@ -5799,7 +5804,7 @@ function BoxMorph(edge, border, borderColor) { BoxMorph.prototype.init = function (edge, border, borderColor) { this.edge = edge || 4; this.border = border || ((border === 0) ? 0 : 2); - this.borderColor = borderColor || new Color(); + this.borderColor = borderColor || BLACK; BoxMorph.uber.init.call(this); }; @@ -7315,8 +7320,8 @@ MouseSensorMorph.prototype.init = function (edge, border, borderColor) { MouseSensorMorph.uber.init.call(this); this.edge = edge || 4; this.border = border || 2; - this.color = new Color(255, 255, 255); - this.borderColor = borderColor || new Color(); + this.color = WHITE; + this.borderColor = borderColor || BLACK; this.isTouched = false; this.upStep = 0.05; this.downStep = 0.02; @@ -7475,7 +7480,7 @@ InspectorMorph.prototype.buildPanes = function () { this.label = new TextMorph(this.target.toString()); this.label.fontSize = MorphicPreferences.menuFontSize; this.label.isBold = true; - this.label.color = new Color(255, 255, 255); + this.label.color = WHITE; this.add(this.label); // properties list @@ -7541,7 +7546,7 @@ InspectorMorph.prototype.buildPanes = function () { this.detail.acceptsDrops = false; this.detail.contents.acceptsDrops = false; this.detail.isTextLineWrapping = true; - this.detail.color = new Color(255, 255, 255); + this.detail.color = WHITE; this.detail.hBar.alpha = 0.6; this.detail.vBar.alpha = 0.6; ctrl = new TextMorph(''); @@ -7558,7 +7563,7 @@ InspectorMorph.prototype.buildPanes = function () { this.work.acceptsDrops = false; this.work.contents.acceptsDrops = false; this.work.isTextLineWrapping = true; - this.work.color = new Color(255, 255, 255); + this.work.color = WHITE; this.work.hBar.alpha = 0.6; this.work.vBar.alpha = 0.6; ev = new TextMorph(''); @@ -7979,7 +7984,7 @@ MenuMorph.prototype.createLabel = function () { 'center' ); text.alignment = 'center'; - text.color = new Color(255, 255, 255); + text.color = WHITE; text.backgroundColor = this.borderColor; text.fixLayout(); this.label = new BoxMorph(3, 0); @@ -8006,7 +8011,7 @@ MenuMorph.prototype.createItems = function () { this.edge = MorphicPreferences.isFlat ? 0 : 5; this.border = MorphicPreferences.isFlat ? 1 : 2; } - this.color = new Color(255, 255, 255); + this.color = WHITE; this.borderColor = new Color(60, 60, 60); this.setExtent(new Point(0, 0)); @@ -8432,7 +8437,7 @@ StringMorph.prototype.init = function ( this.enableLinks = false; // set to "true" if I can contain clickable URLs this.isNumeric = isNumeric || false; this.isPassword = false; - this.shadowOffset = shadowOffset || new Point(0, 0); + this.shadowOffset = shadowOffset || ZERO; this.shadowColor = shadowColor || null; this.isShowingBlanks = false; this.blanksColor = new Color(180, 140, 140); @@ -8442,7 +8447,7 @@ StringMorph.prototype.init = function ( this.currentlySelecting = false; this.startMark = 0; this.endMark = 0; - this.markedTextColor = new Color(255, 255, 255); + this.markedTextColor = WHITE; this.markedBackgoundColor = new Color(60, 60, 120); // initialize inherited properties: @@ -8488,7 +8493,7 @@ StringMorph.prototype.font = function () { StringMorph.prototype.fixLayout = function (justMe) { // determine my extent depending on my current settings var width, - shadowOffset = this.shadowOffset || new Point(), + shadowOffset = this.shadowOffset || ZERO, txt = this.isPassword ? this.password('*', this.text.length) : this.text; @@ -8514,7 +8519,7 @@ StringMorph.prototype.fixLayout = function (justMe) { StringMorph.prototype.render = function (ctx) { var start, stop, i, p, c, x, y, - shadowOffset = this.shadowOffset || new Point(), + shadowOffset = this.shadowOffset || ZERO, txt = this.isPassword ? this.password('*', this.text.length) : this.text; @@ -9130,7 +9135,7 @@ TextMorph.prototype.init = function ( this.isBold = bold || false; this.isItalic = italic || false; this.alignment = alignment || 'left'; - this.shadowOffset = shadowOffset || new Point(0, 0); + this.shadowOffset = shadowOffset || ZERO; this.shadowColor = shadowColor || null; this.maxWidth = width || 0; this.maxLineWidth = 0; @@ -9146,7 +9151,7 @@ TextMorph.prototype.init = function ( this.currentlySelecting = false; this.startMark = 0; this.endMark = 0; - this.markedTextColor = new Color(255, 255, 255); + this.markedTextColor = WHITE; this.markedBackgoundColor = new Color(60, 60, 120); // initialize inherited properties: @@ -9694,7 +9699,7 @@ TriggerMorph.prototype.init = function ( TriggerMorph.uber.init.call(this); // override inherited properites: - this.color = new Color(255, 255, 255); + this.color = WHITE; this.createLabel(); }; @@ -10741,7 +10746,7 @@ ListMorph.prototype.init = function ( ListMorph.uber.init.call(this); this.contents.acceptsDrops = false; - this.color = new Color(255, 255, 255); + this.color = WHITE; this.hBar.alpha = 0.6; this.vBar.alpha = 0.6; this.elements = elements || []; @@ -10882,7 +10887,7 @@ StringFieldMorph.prototype.init = function ( this.isNumeric = isNumeric || false; this.text = null; StringFieldMorph.uber.init.call(this); - this.color = new Color(255, 255, 255); + this.color = WHITE; this.isEditable = true; this.acceptsDrops = false; this.createText(); @@ -11062,7 +11067,7 @@ HandMorph.prototype.changed = function () { var b; if (this.world !== null) { b = this.cachedFullBounds || this.fullBounds(); - if (!b.extent().eq(new Point())) { + if (!b.extent().eq(ZERO)) { this.world.broken.push(b.spread()); } }