kopia lustrzana https://github.com/backface/turtlestitch
migrated vector paint editor
rodzic
0d053d3ff7
commit
b017ff3c28
|
@ -15,9 +15,7 @@
|
|||
<script type="text/javascript" src="src/lists.js?version=2019-12-08"></script>
|
||||
<script type="text/javascript" src="src/byob.js?version=2020-01-03"></script>
|
||||
<script type="text/javascript" src="src/tables.js?version=2020-01-03"></script>
|
||||
<!--
|
||||
<script type="text/javascript" src="src/sketch.js?version=2019-10-09"></script>
|
||||
//-->
|
||||
<script type="text/javascript" src="src/video.js?version=2019-06-27"></script>
|
||||
<script type="text/javascript" src="src/maps.js?version=2019-10-28"></script>
|
||||
<script type="text/javascript" src="src/xml.js?version=2019-06-27"></script>
|
||||
|
|
|
@ -52,6 +52,8 @@
|
|||
- fixed initial rendering, so costumes can be re-opened after saving
|
||||
2018, June 20 (Jens):
|
||||
- select primary color with right-click (in addition to shift-click)
|
||||
2020, April 15 (Jens):
|
||||
- migrated to new Morphic2 architecture
|
||||
*/
|
||||
|
||||
/*global Point, Object, Rectangle, AlignmentMorph, Morph, XML_Element, nop,
|
||||
|
@ -59,7 +61,7 @@ PaintColorPickerMorph, Color, SliderMorph, InputFieldMorph, ToggleMorph,
|
|||
TextMorph, Image, newCanvas, PaintEditorMorph, StageMorph, Costume, isNil,
|
||||
localize, PaintCanvasMorph, detect, modules*/
|
||||
|
||||
modules.sketch = '2019-October-09';
|
||||
modules.sketch = '2020-April-15';
|
||||
|
||||
// Declarations
|
||||
|
||||
|
@ -1185,7 +1187,6 @@ VectorPaintEditorMorph.prototype.openIn = function (
|
|||
nop();
|
||||
}
|
||||
this.propertiesControls.constrain.refresh();
|
||||
this.drawNew();
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -1201,7 +1202,6 @@ VectorPaintEditorMorph.prototype.buildContents = function() {
|
|||
|
||||
this.refreshToolButtons();
|
||||
this.fixLayout();
|
||||
this.drawNew();
|
||||
};
|
||||
|
||||
VectorPaintEditorMorph.prototype.buildToolbox = function () {
|
||||
|
@ -1252,7 +1252,6 @@ VectorPaintEditorMorph.prototype.buildToolbox = function () {
|
|||
});
|
||||
|
||||
this.toolbox.bounds = this.toolbox.fullBounds().expandBy(inset * 2);
|
||||
this.toolbox.drawNew();
|
||||
};
|
||||
|
||||
// TODO :'(
|
||||
|
@ -1265,11 +1264,20 @@ VectorPaintEditorMorph.prototype.populatePropertiesMenu = function () {
|
|||
alignNames = new AlignmentMorph("row", this.padding);
|
||||
|
||||
pc.primaryColorViewer = new Morph();
|
||||
pc.primaryColorViewer.setExtent(new Point(85, 15)); // 40 = height primary & brush size
|
||||
pc.primaryColorViewer.color = new Color(0, 0, 0);
|
||||
pc.primaryColorViewer.setExtent(new Point(85, 15)); // 40 = height primary & brush size
|
||||
|
||||
pc.primaryColorViewer.render = function (ctx) {
|
||||
myself.renderColorSelection(ctx, myself.paper.settings.primaryColor);
|
||||
};
|
||||
|
||||
pc.secondaryColorViewer = new Morph();
|
||||
pc.secondaryColorViewer.setExtent(new Point(85, 15)); // 20 = height secondaryColor box
|
||||
pc.secondaryColorViewer.color = new Color(0, 0, 0);
|
||||
pc.secondaryColorViewer.setExtent(new Point(85, 15)); // 20 = height secondaryColor box
|
||||
|
||||
pc.secondaryColorViewer.render = function (ctx) {
|
||||
myself.renderColorSelection(ctx, myself.paper.settings.secondaryColor);
|
||||
};
|
||||
|
||||
pc.colorpicker = new PaintColorPickerMorph(
|
||||
new Point(180, 100),
|
||||
|
@ -1313,12 +1321,10 @@ VectorPaintEditorMorph.prototype.populatePropertiesMenu = function () {
|
|||
pc.penSizeField.accept = function (num) {
|
||||
var val = parseFloat(pc.penSizeField.getValue());
|
||||
pc.penSizeSlider.value = val;
|
||||
pc.penSizeSlider.drawNew();
|
||||
pc.penSizeSlider.updateValue();
|
||||
this.setContents(val);
|
||||
myself.paper.settings.lineWidth = val;
|
||||
this.world().keyboardReceiver = myself;
|
||||
//pc.colorpicker.action(myself.paper.settings.primaryColor);
|
||||
this.world().keyboardFocus = myself;
|
||||
myself.selection.forEach(function (shape) {
|
||||
shape.setBorderWidth(num);
|
||||
shape.drawOn(myself.paper);
|
||||
|
@ -1330,7 +1336,6 @@ VectorPaintEditorMorph.prototype.populatePropertiesMenu = function () {
|
|||
alpen.add(pc.penSizeField);
|
||||
alpen.color = myself.color;
|
||||
alpen.fixLayout();
|
||||
pc.penSizeField.drawNew();
|
||||
|
||||
pc.constrain = new ToggleMorph(
|
||||
"checkbox",
|
||||
|
@ -1362,12 +1367,7 @@ VectorPaintEditorMorph.prototype.populatePropertiesMenu = function () {
|
|||
VectorPaintEditorMorph.prototype.selectColor = function (color, secondary) {
|
||||
var myself = this,
|
||||
isSecondary = this.paper.isShiftPressed() ? false : secondary,
|
||||
propertyName = (isSecondary ? 'secondary' : 'primary') + 'Color',
|
||||
ni = newCanvas(
|
||||
this.propertiesControls[propertyName + 'Viewer'].extent()
|
||||
),
|
||||
ctx = ni.getContext('2d'),
|
||||
i, j;
|
||||
propertyName = (isSecondary ? 'secondary' : 'primary') + 'Color';
|
||||
|
||||
this.paper.settings[(propertyName)] = color;
|
||||
|
||||
|
@ -1379,7 +1379,16 @@ VectorPaintEditorMorph.prototype.selectColor = function (color, secondary) {
|
|||
this.updateHistory();
|
||||
}
|
||||
|
||||
if (color === 'transparent') {
|
||||
this.propertiesControls[propertyName + 'Viewer'].rerender();
|
||||
};
|
||||
|
||||
VectorPaintEditorMorph.prototype.renderColorSelection = function (
|
||||
ctx,
|
||||
color = 'transparent'
|
||||
) {
|
||||
var i, j;
|
||||
|
||||
if (color === 'transparent' || color.a === 0) {
|
||||
for (i = 0; i < 180; i += 5) {
|
||||
for (j = 0; j < 15; j += 5) {
|
||||
ctx.fillStyle =
|
||||
|
@ -1393,17 +1402,6 @@ VectorPaintEditorMorph.prototype.selectColor = function (color, secondary) {
|
|||
ctx.fillStyle = color.toString();
|
||||
ctx.fillRect(0, 0, 180, 15);
|
||||
}
|
||||
|
||||
//Brush size
|
||||
ctx.strokeStyle = 'black';
|
||||
ctx.lineWidth = Math.min(this.paper.settings.lineWidth, 20);
|
||||
ctx.beginPath();
|
||||
ctx.lineCap = 'round';
|
||||
ctx.moveTo(20, 30);
|
||||
ctx.lineTo(160, 30);
|
||||
ctx.stroke();
|
||||
this.propertiesControls[propertyName + 'Viewer'].image = ni;
|
||||
this.propertiesControls[propertyName + 'Viewer'].changed();
|
||||
};
|
||||
|
||||
VectorPaintEditorMorph.prototype.changeSelectionLayer = function (destination) {
|
||||
|
@ -1652,6 +1650,7 @@ function VectorPaintCanvasMorph (shift) {
|
|||
|
||||
VectorPaintCanvasMorph.prototype.init = function (shift) {
|
||||
VectorPaintCanvasMorph.uber.init.call(this, shift);
|
||||
this.isCachingImage = true;
|
||||
this.pointBuffer = [];
|
||||
this.currentTool = 'brush';
|
||||
this.settings = {
|
||||
|
@ -1726,23 +1725,28 @@ VectorPaintCanvasMorph.prototype.toolChanged = function (tool) {
|
|||
VectorPaintCanvasMorph.prototype.drawNew = function () {
|
||||
var myself = this,
|
||||
editor = this.parentThatIsA(VectorPaintEditorMorph),
|
||||
canvas = newCanvas(this.extent());
|
||||
canvas = newCanvas(this.extent(), false, this.cachedImage);
|
||||
|
||||
this.merge(this.background, canvas);
|
||||
this.merge(this.paper, canvas);
|
||||
|
||||
editor.shapes.forEach(function(each) {
|
||||
myself.merge(each.image, canvas);
|
||||
});
|
||||
if (editor) {
|
||||
editor.shapes.forEach(function(each) {
|
||||
myself.merge(each.image, canvas);
|
||||
});
|
||||
|
||||
if (editor.currentShape) {
|
||||
this.merge(editor.currentShape.image, canvas);
|
||||
if (editor.currentShape) {
|
||||
this.merge(editor.currentShape.image, canvas);
|
||||
}
|
||||
}
|
||||
|
||||
this.image = canvas;
|
||||
this.cachedImage = canvas;
|
||||
this.drawFrame();
|
||||
};
|
||||
|
||||
VectorPaintCanvasMorph.prototype.render =
|
||||
VectorPaintCanvasMorph.prototype.drawNew;
|
||||
|
||||
VectorPaintCanvasMorph.prototype.step = function () {
|
||||
if (this.redraw) {
|
||||
this.drawNew();
|
||||
|
|
Ładowanie…
Reference in New Issue