# Canvas OOP Proto ДЗ ## Пояснения. Предполагается что вы разберетесь с http://canvas.asmer.fe.a-level.com.ua, и будете наращивать функционал по мотивам. При создании любого визуального элемента вы должны запускать конструктор и перерисовывать всё, что есть в instances. ## OOP Переведите рисовалку на ООП рельсы ## Tail используйте событие `mousemove` и поле `event.buttons`, для того что бы рисовать пока нажата кнопка мыши. ## Size Добавьте возможность изменять размер кружков и линий (толщина). `input type='number'` в помощь ## Color Добавьте возможность изменять цвет кружков. `input type='color'` в помощь ## Rectangle Добавьте наследник `Rectangle`, который будет отрисовывать прямоугольники. ## Line Добавьте наследник `Line`, который будет отрисовывать линию. ## LineDrag Пусть полупрозрачная линия появляется на лету, пока зажата кнопка мыши. Когда же вы отпускаете, линия должна создаваться. ## RectangleDrag Сделайте тоже самое с прямоугольником - при создании прямоугольника вы тянете "тень" прямоугольника, а потом он создается. ## Undo Предусмотрите возможность отмены последних действий ## Select Предусмотрите возможность "выбора объекта" с помощью клика *рядом* с объектом при зажатой клавише `Ctrl`. Используйте массив `selected` в прототипе `Drawable` для хранения списка текущих выбранных объектов. Визуально выделите выбранные объекты. ## ChangeSelected При изменении цвета или размера меняйте эти свойства у всех выделенных элементах. Сделайте функцию forSelected по аналогии с forAll, которая будет перебирать все выбранные элементы и вызывать callback для изменения того или иного параметра. ## DeleteSelected Сделайте возможность удаления элементов. Для этого нужно удалить элементы из массива `Drawable.prototype.instances`