Line data Source code
1 : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* This Source Code Form is subject to the terms of the Mozilla Public
3 : * License, v. 2.0. If a copy of the MPL was not distributed with this file,
4 : * You can obtain one at http://mozilla.org/MPL/2.0/. */
5 :
6 : #ifndef MOZILLA_DOM_CANVASRENDERINGCONTEXTHELPER_H_
7 : #define MOZILLA_DOM_CANVASRENDERINGCONTEXTHELPER_H_
8 :
9 : #include "mozilla/dom/BindingDeclarations.h"
10 : #include "mozilla/layers/LayersTypes.h"
11 : #include "nsSize.h"
12 :
13 : class nsICanvasRenderingContextInternal;
14 : class nsIGlobalObject;
15 :
16 : namespace mozilla {
17 :
18 : class ErrorResult;
19 :
20 : namespace dom {
21 :
22 : class BlobCallback;
23 : class EncodeCompleteCallback;
24 :
25 : enum class CanvasContextType : uint8_t {
26 : NoContext,
27 : Canvas2D,
28 : WebGL1,
29 : WebGL2,
30 : ImageBitmap
31 : };
32 :
33 : /**
34 : * Povides common RenderingContext functionality used by both OffscreenCanvas
35 : * and HTMLCanvasElement.
36 : */
37 0 : class CanvasRenderingContextHelper
38 : {
39 : public:
40 : virtual already_AddRefed<nsISupports>
41 : GetContext(JSContext* aCx,
42 : const nsAString& aContextId,
43 : JS::Handle<JS::Value> aContextOptions,
44 : ErrorResult& aRv);
45 :
46 : virtual bool GetOpaqueAttr() = 0;
47 :
48 : protected:
49 : virtual nsresult UpdateContext(JSContext* aCx,
50 : JS::Handle<JS::Value> aNewContextOptions,
51 : ErrorResult& aRvForDictionaryInit);
52 :
53 : virtual nsresult ParseParams(JSContext* aCx,
54 : const nsAString& aType,
55 : const JS::Value& aEncoderOptions,
56 : nsAString& outParams,
57 : bool* const outCustomParseOptions);
58 :
59 : void ToBlob(JSContext* aCx, nsIGlobalObject* global, BlobCallback& aCallback,
60 : const nsAString& aType, JS::Handle<JS::Value> aParams,
61 : ErrorResult& aRv);
62 :
63 : void ToBlob(JSContext* aCx, nsIGlobalObject* aGlobal, EncodeCompleteCallback* aCallback,
64 : const nsAString& aType, JS::Handle<JS::Value> aParams,
65 : ErrorResult& aRv);
66 :
67 : virtual already_AddRefed<nsICanvasRenderingContextInternal>
68 : CreateContext(CanvasContextType aContextType);
69 :
70 : already_AddRefed<nsICanvasRenderingContextInternal>
71 : CreateContextHelper(CanvasContextType aContextType,
72 : layers::LayersBackend aCompositorBackend);
73 :
74 : virtual nsIntSize GetWidthHeight() = 0;
75 :
76 : CanvasContextType mCurrentContextType;
77 : nsCOMPtr<nsICanvasRenderingContextInternal> mCurrentContext;
78 : };
79 :
80 : } // namespace dom
81 : } // namespace mozilla
82 :
83 : #endif // MOZILLA_DOM_CANVASRENDERINGCONTEXTHELPER_H_
|