W3C home > Mailing lists > Public > whatwg@whatwg.org > October 2013

[whatwg] Canvas resetClip() API

From: Rashmi Shyamasundar <rashmi.shyam@gmail.com>
Date: Tue, 8 Oct 2013 09:25:16 +0530
Message-ID: <CAEiriRZ3y=d1kySzjMdreMfXFQQ1S5WgpiJdv1aLJ0Ha5ucGaw@mail.gmail.com>
To: whatwg@lists.whatwg.org
Hi All,

This is regarding the resetClip() API for canvas. Please take a look at my
patches to the bug https://bugs.webkit.org/show_bug.cgi?id=82801.
resetClip() can be implemented in Cairo, without any overhead, since Cairo
supports resetClip.

I tried to implement the API in CG, using the below approach :- (Please
check https://bugs.webkit.org/show_bug.cgi?id=82801#c9 )

Steps :-
When resetClip() is called,
1. Save the imageData from canvas imageBuffer
2. Save the GraphicsContextState
3. Clear the canvas buffer. This will delete the buffer and
GraphicsContextStateSaver.
4. Copy the saved imageData to a new imageBuffer
5. Set the graphicsContextState to the saved state.
GraphicsContextState does not have information about any clip.


The drawback with the above approach is that clipping-region cannot be
restored since it is not part of the GraphicsContextState or
CanvasRenderingContext2D::State.

Currently clipping-region is not saved in GraphicsContextState or
CanvasRenderingContext2D::State. If clipping-region is somehow saved
in GraphicsContextState and CanvasRenderingContext2D::State then,
through step#5, clipping region can also be restored.


Below is an example which will not work in CG (But, Works perfectly in
Cairo), if clipping-region is not saved in GraphicsContextState and
CanvasRenderingContext2D::State :-

ctx.clip();
ctx.save();
ctx.resetClip();
...; // draw with no clip
ctx.restore();
...; // draw with a clip (This draw does not contain any clip)


Thanks,
Rashmi
Received on Tuesday, 8 October 2013 04:00:48 UTC

This archive was generated by hypermail 2.4.0 : Wednesday, 22 January 2020 17:00:11 UTC