Merge pull request #470 from Hardmath123/paint-transforms

Paint transforms
pull/3/merge
Jens Mönig 2014-06-04 13:59:06 +02:00
commit d984836bed
1 zmienionych plików z 43 dodań i 4 usunięć

Wyświetl plik

@ -3,12 +3,12 @@
a paint editor for Snap!
inspired by the Scratch paint editor.
written by Kartik Chandra
Copyright (C) 2014 by Kartik Chandra
This file is part of Snap!.
Snap! is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of
@ -53,6 +53,7 @@
Jan 08 - mouse leave dragging fix (Kartik)
Feb 11 - dynamically adjust to stage dimensions (Jens)
Apr 30 - localizations (Manuel)
June 3 - transformations (Kartik)
*/
@ -66,7 +67,7 @@
// Global stuff ////////////////////////////////////////////////////////
modules.paint = '2014-May-02';
modules.paint = '2014-June-3';
// Declarations
@ -133,6 +134,10 @@ PaintEditorMorph.prototype.buildContents = function () {
this.buildToolbox();
this.controls.add(this.toolbox);
this.scaleBox = new AlignmentMorph('row', this.padding);
this.buildScaleBox();
this.controls.add(this.scaleBox);
this.propertiesControls = {
colorpicker: null,
penSizeSlider: null,
@ -218,6 +223,27 @@ PaintEditorMorph.prototype.buildEdits = function () {
this.edits.fixLayout();
};
PaintEditorMorph.prototype.buildScaleBox = function () {
var paper = this.paper;
this.scaleBox.add(this.pushButton(
"grow",
function () {paper.scale(0.05, 0.05); }
));
this.scaleBox.add(this.pushButton(
"shrink",
function () {paper.scale(-0.05, -0.05); }
));
this.scaleBox.add(this.pushButton(
"flip ↔",
function () {paper.scale(-2, 0); }
));
this.scaleBox.add(this.pushButton(
"flip ↕",
function () {paper.scale(0, -2); }
));
this.scaleBox.fixLayout();
};
PaintEditorMorph.prototype.openIn = function (world, oldim, oldrc, callback) {
// Open the editor in a world with an optional image to edit
this.oldim = oldim;
@ -558,6 +584,19 @@ PaintCanvasMorph.prototype.init = function (shift) {
this.buildContents();
};
PaintCanvasMorph.prototype.scale = function(x, y) {
this.mask = newCanvas(this.extent());
var c = newCanvas(this.extent());
c.getContext("2d").save();
c.getContext("2d").translate(this.rotationCenter.x, this.rotationCenter.y);
c.getContext("2d").scale(1 + x, 1 + y);
c.getContext("2d").drawImage(this.paper, -this.rotationCenter.x, -this.rotationCenter.y);
c.getContext("2d").restore();
this.paper = c;
this.drawNew();
this.changed();
};
PaintCanvasMorph.prototype.cacheUndo = function () {
var cachecan = newCanvas(this.extent());
this.merge(this.paper, cachecan);