Commit bdf704e1 authored by Aaron Krajeski's avatar Aaron Krajeski Committed by Commit Bot

Add reset function to CanvasRenderingContext2D

This functionresets everything (transformation stack, clip, styles,
font, etc). If there are pending transforms in the stack they get
discarded as well.

In the interest of getting the API ready for demoing I'm rushing
through these a bit.

TODO: Add WPT tests (crbug.com/1131449)

Bug: 1131137
Change-Id: If98217fe4de804352d279aa46ab128e3bf6ae53d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2425067Reviewed-by: default avatarFernando Serboncini <fserb@chromium.org>
Reviewed-by: default avatarYi Xu <yiyix@chromium.org>
Reviewed-by: default avatarJuanmi Huertas <juanmihd@chromium.org>
Commit-Queue: Aaron Krajeski <aaronhk@chromium.org>
Cr-Commit-Position: refs/heads/master@{#812128}
parent 57f742a7
...@@ -138,7 +138,7 @@ void BaseRenderingContext2D::UnwindStateStack() { ...@@ -138,7 +138,7 @@ void BaseRenderingContext2D::UnwindStateStack() {
} }
} }
void BaseRenderingContext2D::Reset() { void BaseRenderingContext2D::reset() {
ValidateStateStack(); ValidateStateStack();
UnwindStateStack(); UnwindStateStack();
state_stack_.resize(1); state_stack_.resize(1);
......
...@@ -32,8 +32,6 @@ class MODULES_EXPORT BaseRenderingContext2D : public GarbageCollectedMixin, ...@@ -32,8 +32,6 @@ class MODULES_EXPORT BaseRenderingContext2D : public GarbageCollectedMixin,
public: public:
~BaseRenderingContext2D() override; ~BaseRenderingContext2D() override;
void Reset();
void strokeStyle(StringOrCanvasGradientOrCanvasPattern&) const; void strokeStyle(StringOrCanvasGradientOrCanvasPattern&) const;
void setStrokeStyle(const StringOrCanvasGradientOrCanvasPattern&); void setStrokeStyle(const StringOrCanvasGradientOrCanvasPattern&);
...@@ -81,6 +79,7 @@ class MODULES_EXPORT BaseRenderingContext2D : public GarbageCollectedMixin, ...@@ -81,6 +79,7 @@ class MODULES_EXPORT BaseRenderingContext2D : public GarbageCollectedMixin,
void save(); void save();
void restore(); void restore();
void reset();
void scale(double sx, double sy); void scale(double sx, double sy);
void rotate(double angle_in_radians); void rotate(double angle_in_radians);
......
...@@ -321,7 +321,7 @@ CanvasPixelFormat CanvasRenderingContext2D::PixelFormat() const { ...@@ -321,7 +321,7 @@ CanvasPixelFormat CanvasRenderingContext2D::PixelFormat() const {
void CanvasRenderingContext2D::Reset() { void CanvasRenderingContext2D::Reset() {
// This is a multiple inheritance bootstrap // This is a multiple inheritance bootstrap
BaseRenderingContext2D::Reset(); BaseRenderingContext2D::reset();
} }
void CanvasRenderingContext2D::RestoreCanvasMatrixClipStack( void CanvasRenderingContext2D::RestoreCanvasMatrixClipStack(
......
...@@ -52,6 +52,8 @@ interface CanvasRenderingContext2D { ...@@ -52,6 +52,8 @@ interface CanvasRenderingContext2D {
// state // state
void save(); // push state on state stack void save(); // push state on state stack
void restore(); // pop state stack and restore state void restore(); // pop state stack and restore state
// Clear the canvas and reset the path
[RuntimeEnabled=NewCanvas2DAPI] void reset();
// transformations (default transform is the identity matrix) // transformations (default transform is the identity matrix)
void scale(unrestricted double x, unrestricted double y); void scale(unrestricted double x, unrestricted double y);
...@@ -157,7 +159,6 @@ interface CanvasRenderingContext2D { ...@@ -157,7 +159,6 @@ interface CanvasRenderingContext2D {
attribute DOMString textAlign; // "start", "end", "left", "right", "center" (default: "start") attribute DOMString textAlign; // "start", "end", "left", "right", "center" (default: "start")
attribute DOMString textBaseline; // "top", "hanging", "middle", "alphabetic", "ideographic", "bottom" (default: "alphabetic") attribute DOMString textBaseline; // "top", "hanging", "middle", "alphabetic", "ideographic", "bottom" (default: "alphabetic")
attribute DOMString direction; // "inherit", "rtl", "ltr" (default: "inherit") attribute DOMString direction; // "inherit", "rtl", "ltr" (default: "inherit")
}; };
CanvasRenderingContext2D includes CanvasPath; CanvasRenderingContext2D includes CanvasPath;
...@@ -177,7 +177,7 @@ OffscreenCanvasRenderingContext2D::GetCanvasResourceProvider() const { ...@@ -177,7 +177,7 @@ OffscreenCanvasRenderingContext2D::GetCanvasResourceProvider() const {
} }
void OffscreenCanvasRenderingContext2D::Reset() { void OffscreenCanvasRenderingContext2D::Reset() {
Host()->DiscardResourceProvider(); Host()->DiscardResourceProvider();
BaseRenderingContext2D::Reset(); BaseRenderingContext2D::reset();
// Because the host may have changed to a zero size // Because the host may have changed to a zero size
is_valid_size_ = IsValidImageSize(Host()->Size()); is_valid_size_ = IsValidImageSize(Host()->Size());
} }
......
...@@ -16,6 +16,8 @@ ...@@ -16,6 +16,8 @@
// state // state
void save(); // push state on state stack void save(); // push state on state stack
void restore(); // pop state stack and restore state void restore(); // pop state stack and restore state
// Clear the canvas and reset the path
[RuntimeEnabled=NewCanvas2DAPI] void reset();
// transformations (default transform is the identity matrix) // transformations (default transform is the identity matrix)
void scale(unrestricted double x, unrestricted double y); void scale(unrestricted double x, unrestricted double y);
......
...@@ -1065,6 +1065,7 @@ interface OffscreenCanvasRenderingContext2D ...@@ -1065,6 +1065,7 @@ interface OffscreenCanvasRenderingContext2D
method putImageData method putImageData
method quadraticCurveTo method quadraticCurveTo
method rect method rect
method reset
method resetTransform method resetTransform
method restore method restore
method rotate method rotate
......
...@@ -1031,6 +1031,7 @@ Starting worker: resources/global-interface-listing-worker.js ...@@ -1031,6 +1031,7 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] method putImageData [Worker] method putImageData
[Worker] method quadraticCurveTo [Worker] method quadraticCurveTo
[Worker] method rect [Worker] method rect
[Worker] method reset
[Worker] method resetTransform [Worker] method resetTransform
[Worker] method restore [Worker] method restore
[Worker] method rotate [Worker] method rotate
......
...@@ -1022,6 +1022,7 @@ interface CanvasRenderingContext2D ...@@ -1022,6 +1022,7 @@ interface CanvasRenderingContext2D
method quadraticCurveTo method quadraticCurveTo
method rect method rect
method removeHitRegion method removeHitRegion
method reset
method resetTransform method resetTransform
method restore method restore
method rotate method rotate
...@@ -5744,6 +5745,7 @@ interface OffscreenCanvasRenderingContext2D ...@@ -5744,6 +5745,7 @@ interface OffscreenCanvasRenderingContext2D
method putImageData method putImageData
method quadraticCurveTo method quadraticCurveTo
method rect method rect
method reset
method resetTransform method resetTransform
method restore method restore
method rotate method rotate
......
...@@ -985,6 +985,7 @@ Starting worker: resources/global-interface-listing-worker.js ...@@ -985,6 +985,7 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] method putImageData [Worker] method putImageData
[Worker] method quadraticCurveTo [Worker] method quadraticCurveTo
[Worker] method rect [Worker] method rect
[Worker] method reset
[Worker] method resetTransform [Worker] method resetTransform
[Worker] method restore [Worker] method restore
[Worker] method rotate [Worker] method rotate
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment