added "trashFull" symbol

pull/95/head
jmoenig 2021-03-03 12:23:34 +01:00
rodzic 443d809875
commit d99dc49cb6
2 zmienionych plików z 59 dodań i 1 usunięć

Wyświetl plik

@ -15,6 +15,7 @@
### 2021-03-03
* symbols: added "trash" symbol
* symbols: added "trashFull" symbol
### 2021-03-02
* threads: optimized special cases for COMBINE (sum, product, min, max) by up to 34 x

Wyświetl plik

@ -144,7 +144,8 @@ SymbolMorph.prototype.names = [
'list',
'flipVertical',
'flipHorizontal',
'trash'
'trash',
'trashFull'
];
// SymbolMorph instance creation:
@ -479,6 +480,9 @@ SymbolMorph.prototype.renderShape = function (ctx, aColor) {
case 'trash':
this.renderSymbolTrash(ctx, aColor);
break;
case 'trashFull':
this.renderSymbolTrashFull(ctx, aColor);
break;
default:
throw new Error('unknown symbol name: "' + this.name + '"');
}
@ -2325,6 +2329,59 @@ SymbolMorph.prototype.renderSymbolTrash = function (ctx, color) {
ctx.stroke();
};
SymbolMorph.prototype.renderSymbolTrashFull = function (ctx, color) {
var w = this.symbolWidth(),
h = this.size,
step = w / 10;
function stripe(x) {
var half = step / 2;
ctx.moveTo(x - half, step * 5.5);
ctx.arc(x, step * 5.5, half, radians(180), radians(0));
ctx.lineTo(x + half, step * 8.5);
ctx.arc(x, step * 8.5, half, radians(0), radians(180));
ctx.lineTo(x - half, step * 5.5);
}
// body of the can
ctx.fillStyle = color.toString();
ctx.beginPath();
ctx.moveTo(step, step * 4);
ctx.lineTo(step * 1.5, step * 9.5);
ctx.lineTo(step * 2.5, h);
ctx.lineTo(step * 7.5, h);
ctx.lineTo(step * 8.5, step * 9.5);
ctx.lineTo(step * 9, step * 4);
ctx.lineTo(step, step * 4);
// vertical stripes
stripe(w * 0.3);
stripe(w * 0.5);
stripe(w * 0.7);
ctx.save();
ctx.clip();
ctx.fillRect(0, 0, w, h);
ctx.restore();
// document
ctx.beginPath();
ctx.moveTo(step * 2, 0);
ctx.lineTo(step * 6, 0);
ctx.lineTo(step * 8, step * 2);
ctx.lineTo(step * 8, step * 3.5);
ctx.lineTo(step * 2, step * 3.5);
ctx.closePath();
ctx.fill();
ctx.fillStyle = color.darker(25).toString();
ctx.beginPath();
ctx.moveTo(step * 6, 0);
ctx.lineTo(step * 8, step * 2);
ctx.lineTo(step * 6, step * 2);
ctx.closePath();
ctx.fill();
};
/*
// register examples with the World demo menu