Объекты, реализующие интерфейс CanvasState, поддерживают стек состояний рисования. Состояния чертежа (Drawing states) состоят из:
- Текущая матрица преобразования.
- Текущая область отсечения.
- Текущие значения следующих атрибутов:
strokeStyle
,fillStyle
,globalAlpha
,lineWidth
,lineCap
,lineJoin
,miterLimit
,lineDashOffset
,shadowOffsetX
,shadowOffsetY
,shadowBlur
,shadowColor
,filter
,globalCompositeOperation
,font
,textAlign
,textBaseline
,direction
,letterSpacing
,fontKerning
,fontStretch
,fontVariantCaps
,textRendering
,wordSpacing
,imageSmoothingEnabled
,imageSmoothingQuality
. - Текущий список тире.
Растровые изображения контекста визуализации не являются частью состояния рисования, поскольку они зависят от того, привязан ли контекст визуализации к элементу холста canvas и каким образом.
Объекты, реализующие миксин CanvasState, имеют логическое значение потери контекста (context lost), которое инициализируется значением false при создании объекта. Значение потерянного контекста обновляется в шагах, связанных с потерей контекста.
context.save()
Помещает текущее состояние в стек.
context.restore()
Выдвигает верхнее состояние в стеке, восстанавливая контекст до этого состояния.
context.reset()
Сбрасывает контекст визуализации, который включает буфер поддержки, стек состояний рисования, путь и стили.
context.isContextLost()
Возвращает истину, если контекст отрисовки был утерян. Потеря контекста может произойти из-за сбоев драйвера, нехватки памяти и т. д. В этих случаях холст теряет резервное хранилище и предпринимает шаги для сброса контекста визуализации в состояние по умолчанию.
Шаги метода save() заключаются в том, чтобы поместить копию текущего состояния рисования в стек состояний рисования.
Шаги метода restore() заключаются в том, чтобы вывести верхнюю запись в стек состояний рисования и сбросить состояние рисования, которое она описывает. Если сохранённого состояния нет, метод ничего не должен делать.
Шаги метода reset() заключаются в сбросе контекста визуализации в состояние по умолчанию.
Чтобы сбросить контекст рендеринга в состояние по умолчанию (reset the rendering context to its default state):
1. Очистить растровое изображение холста до прозрачного чёрного. 2. Очистите список подпути в текущем пути по умолчанию для контекста. 3. Очистите стек состояний рисования контекста. 4. Сбросьте всё, из чего состоит состояние рисования, к их начальным значениям.
Шаги метода isContextLost() должны вернуть потерянный контекст этого this.
Информационные ссылки
Стандарт HTML — Раздел «4.12.5.1.2 The canvas state» — https://html.spec.whatwg.org/#the-canvas-state