1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
3 * You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #ifndef ImageBitmapRenderingContext_h
6 #define ImageBitmapRenderingContext_h
8 #include "nsICanvasRenderingContextInternal.h"
9 #include "nsWrapperCache.h"
14 class DataSourceSurface
;
27 * The purpose of ImageBitmapRenderingContext is to provide a faster and
28 * efficient way to display ImageBitmap. Simply call TransferFromImageBitmap()
29 * then we'll transfer the surface of ImageBitmap to this context and then to
32 * See more details in spec: https://wiki.whatwg.org/wiki/OffscreenCanvas
34 class ImageBitmapRenderingContext final
35 : public nsICanvasRenderingContextInternal
,
36 public nsWrapperCache
{
37 virtual ~ImageBitmapRenderingContext();
40 ImageBitmapRenderingContext();
42 virtual JSObject
* WrapObject(JSContext
* aCx
,
43 JS::Handle
<JSObject
*> aGivenProto
) override
;
45 // nsISupports interface + CC
46 NS_DECL_CYCLE_COLLECTING_ISUPPORTS
48 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ImageBitmapRenderingContext
)
50 void TransferImageBitmap(ImageBitmap
& aImageBitmap
);
51 void TransferFromImageBitmap(ImageBitmap
& aImageBitmap
);
53 // nsICanvasRenderingContextInternal
54 virtual int32_t GetWidth() override
{ return mWidth
; }
55 virtual int32_t GetHeight() override
{ return mHeight
; }
57 NS_IMETHOD
SetDimensions(int32_t aWidth
, int32_t aHeight
) override
;
59 NS_IMETHOD
InitializeWithDrawTarget(
60 nsIDocShell
* aDocShell
, NotNull
<gfx::DrawTarget
*> aTarget
) override
;
62 virtual mozilla::UniquePtr
<uint8_t[]> GetImageBuffer(
63 int32_t* aFormat
) override
;
64 NS_IMETHOD
GetInputStream(const char* aMimeType
,
65 const nsAString
& aEncoderOptions
,
66 nsIInputStream
** aStream
) override
;
68 virtual already_AddRefed
<mozilla::gfx::SourceSurface
> GetSurfaceSnapshot(
69 gfxAlphaType
* aOutAlphaType
) override
;
71 virtual void SetOpaqueValueFromOpaqueAttr(bool aOpaqueAttrValue
) override
;
72 virtual bool GetIsOpaque() override
;
73 NS_IMETHOD
Reset() override
;
74 virtual already_AddRefed
<Layer
> GetCanvasLayer(
75 nsDisplayListBuilder
* aBuilder
, Layer
* aOldLayer
,
76 LayerManager
* aManager
) override
;
77 bool UpdateWebRenderCanvasData(nsDisplayListBuilder
* aBuilder
,
78 WebRenderCanvasData
* aCanvasData
) override
;
79 virtual void MarkContextClean() override
;
81 NS_IMETHOD
Redraw(const gfxRect
& aDirty
) override
;
82 NS_IMETHOD
SetIsIPC(bool aIsIPC
) override
;
84 virtual void DidRefresh() override
;
86 virtual void MarkContextCleanForFrameCapture() override
;
87 virtual bool IsContextCleanForFrameCapture() override
;
90 already_AddRefed
<gfx::DataSourceSurface
> MatchWithIntrinsicSize();
91 already_AddRefed
<layers::Image
> ClipToIntrinsicSize();
95 RefPtr
<layers::Image
> mImage
;
98 * Flag to avoid unnecessary surface copies to FrameCaptureListeners in the
99 * case when the canvas is not currently being drawn into and not rendered
100 * but canvas capturing is still ongoing.
102 bool mIsCapturedFrameInvalid
;
106 } // namespace mozilla
108 #endif /* ImageBitmapRenderingContext_h */