• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef FOUNDATION_ACE_FRAMEWORK_JAVASCRIPT_BRIDGE_JS_VIEW_JS_OFFSCREEN_CANVAS_H
17 #define FOUNDATION_ACE_FRAMEWORK_JAVASCRIPT_BRIDGE_JS_VIEW_JS_OFFSCREEN_CANVAS_H
18 
19 #include "bridge/declarative_frontend/jsview/canvas/js_offscreen_rendering_context.h"
20 #include "core/common/ace_engine.h"
21 #include "core/components/common/properties/paint_state.h"
22 #include "core/components_ng/pattern/canvas/offscreen_canvas_pattern.h"
23 
24 namespace OHOS::Ace::Framework {
25 
26 class JSOffscreenCanvas : public AceType, public JSInteractableView, public JSViewAbstract {
27     DECLARE_ACE_TYPE(JSOffscreenCanvas, AceType);
28 public:
29     JSOffscreenCanvas() = default;
30     ~JSOffscreenCanvas() override = default;
31 
32     static void JSBind(BindingTarget globalObj, void* nativeEngine);
33     static napi_value Constructor(napi_env env, napi_callback_info info);
34     static napi_value InitOffscreenCanvas(napi_env env);
35     static napi_value JsTransferToImageBitmap(napi_env env, napi_callback_info info);
36     static napi_value JsGetContext(napi_env env, napi_callback_info info);
37     static napi_value JsGetWidth(napi_env env, napi_callback_info info);
38     static napi_value JsGetHeight(napi_env env, napi_callback_info info);
39     static napi_value JsSetHeight(napi_env env, napi_callback_info info);
40     static napi_value JsSetWidth(napi_env env, napi_callback_info info);
41 
JsCreateRadialGradient(const JSCallbackInfo & info)42     void JsCreateRadialGradient(const JSCallbackInfo& info) {}
JsFillRect(const JSCallbackInfo & info)43     void JsFillRect(const JSCallbackInfo& info) {}
JsStrokeRect(const JSCallbackInfo & info)44     void JsStrokeRect(const JSCallbackInfo& info) {}
JsClearRect(const JSCallbackInfo & info)45     void JsClearRect(const JSCallbackInfo& info) {}
JsCreateLinearGradient(const JSCallbackInfo & info)46     void JsCreateLinearGradient(const JSCallbackInfo& info) {}
JsFillText(const JSCallbackInfo & info)47     void JsFillText(const JSCallbackInfo& info) {}
JsStrokeText(const JSCallbackInfo & info)48     void JsStrokeText(const JSCallbackInfo& info) {}
JsMeasureText(const JSCallbackInfo & info)49     void JsMeasureText(const JSCallbackInfo& info) {}
JsMoveTo(const JSCallbackInfo & info)50     void JsMoveTo(const JSCallbackInfo& info) {}
JsLineTo(const JSCallbackInfo & info)51     void JsLineTo(const JSCallbackInfo& info) {}
JsBezierCurveTo(const JSCallbackInfo & info)52     void JsBezierCurveTo(const JSCallbackInfo& info) {}
JsQuadraticCurveTo(const JSCallbackInfo & info)53     void JsQuadraticCurveTo(const JSCallbackInfo& info) {}
JsArcTo(const JSCallbackInfo & info)54     void JsArcTo(const JSCallbackInfo& info) {}
JsArc(const JSCallbackInfo & info)55     void JsArc(const JSCallbackInfo& info) {}
JsEllipse(const JSCallbackInfo & info)56     void JsEllipse(const JSCallbackInfo& info) {}
JsFill(const JSCallbackInfo & info)57     void JsFill(const JSCallbackInfo& info) {}
JsStroke(const JSCallbackInfo & info)58     void JsStroke(const JSCallbackInfo& info) {}
JsClip(const JSCallbackInfo & info)59     void JsClip(const JSCallbackInfo& info) {}
JsRect(const JSCallbackInfo & info)60     void JsRect(const JSCallbackInfo& info) {}
JsRoundRect(const JSCallbackInfo & info)61     void JsRoundRect(const JSCallbackInfo& info) {}
JsBeginPath(const JSCallbackInfo & info)62     void JsBeginPath(const JSCallbackInfo& info) {}
JsClosePath(const JSCallbackInfo & info)63     void JsClosePath(const JSCallbackInfo& info) {}
JsRestore(const JSCallbackInfo & info)64     void JsRestore(const JSCallbackInfo& info) {}
JsSave(const JSCallbackInfo & info)65     void JsSave(const JSCallbackInfo& info) {}
JsRotate(const JSCallbackInfo & info)66     void JsRotate(const JSCallbackInfo& info) {}
JsScale(const JSCallbackInfo & info)67     void JsScale(const JSCallbackInfo& info) {}
JsGetTransform(const JSCallbackInfo & info)68     void JsGetTransform(const JSCallbackInfo& info) {}
JsSetTransform(const JSCallbackInfo & info)69     void JsSetTransform(const JSCallbackInfo& info) {}
JsResetTransform(const JSCallbackInfo & info)70     void JsResetTransform(const JSCallbackInfo& info) {}
JsTransform(const JSCallbackInfo & info)71     void JsTransform(const JSCallbackInfo& info) {}
JsTranslate(const JSCallbackInfo & info)72     void JsTranslate(const JSCallbackInfo& info) {}
JsSetLineDash(const JSCallbackInfo & info)73     void JsSetLineDash(const JSCallbackInfo& info) {}
JsGetLineDash(const JSCallbackInfo & info)74     void JsGetLineDash(const JSCallbackInfo& info) {}
JsDrawImage(const JSCallbackInfo & info)75     void JsDrawImage(const JSCallbackInfo& info) {}
JsCreatePattern(const JSCallbackInfo & info)76     void JsCreatePattern(const JSCallbackInfo& info) {}
JsCreateImageData(const JSCallbackInfo & info)77     void JsCreateImageData(const JSCallbackInfo& info) {}
JsPutImageData(const JSCallbackInfo & info)78     void JsPutImageData(const JSCallbackInfo& info) {}
JsGetImageData(const JSCallbackInfo & info)79     void JsGetImageData(const JSCallbackInfo& info) {}
JsGetJsonData(const JSCallbackInfo & info)80     void JsGetJsonData(const JSCallbackInfo& info) {}
JsGetPixelMap(const JSCallbackInfo & info)81     void JsGetPixelMap(const JSCallbackInfo& info) {}
JsSetPixelMap(const JSCallbackInfo & info)82     void JsSetPixelMap(const JSCallbackInfo& info) {}
JsCreateConicGradient(const JSCallbackInfo & info)83     void JsCreateConicGradient(const JSCallbackInfo& info) {}
JsSetFilter(const JSCallbackInfo & info)84     void JsSetFilter(const JSCallbackInfo& info) {}
JsGetFilter(const JSCallbackInfo & info)85     void JsGetFilter(const JSCallbackInfo& info) {}
JsSetDirection(const JSCallbackInfo & info)86     void JsSetDirection(const JSCallbackInfo& info) {}
JsGetDirection(const JSCallbackInfo & info)87     void JsGetDirection(const JSCallbackInfo& info) {}
JsSetFillStyle(const JSCallbackInfo & info)88     void JsSetFillStyle(const JSCallbackInfo& info) {}
JsGetFillStyle(const JSCallbackInfo & info)89     void JsGetFillStyle(const JSCallbackInfo& info) {}
JsSetStrokeStyle(const JSCallbackInfo & info)90     void JsSetStrokeStyle(const JSCallbackInfo& info) {}
JsGetStrokeStyle(const JSCallbackInfo & info)91     void JsGetStrokeStyle(const JSCallbackInfo& info) {}
JsSetLineCap(const JSCallbackInfo & info)92     void JsSetLineCap(const JSCallbackInfo& info) {}
JsGetLineCap(const JSCallbackInfo & info)93     void JsGetLineCap(const JSCallbackInfo& info) {}
JsSetLineJoin(const JSCallbackInfo & info)94     void JsSetLineJoin(const JSCallbackInfo& info) {}
JsGetLineJoin(const JSCallbackInfo & info)95     void JsGetLineJoin(const JSCallbackInfo& info) {}
JsSetMiterLimit(const JSCallbackInfo & info)96     void JsSetMiterLimit(const JSCallbackInfo& info) {}
JsGetMiterLimit(const JSCallbackInfo & info)97     void JsGetMiterLimit(const JSCallbackInfo& info) {}
JsSetLineWidth(const JSCallbackInfo & info)98     void JsSetLineWidth(const JSCallbackInfo& info) {}
JsGetLineWidth(const JSCallbackInfo & info)99     void JsGetLineWidth(const JSCallbackInfo& info) {}
JsSetFont(const JSCallbackInfo & info)100     void JsSetFont(const JSCallbackInfo& info) {}
JsGetFont(const JSCallbackInfo & info)101     void JsGetFont(const JSCallbackInfo& info) {}
JsSetTextAlign(const JSCallbackInfo & info)102     void JsSetTextAlign(const JSCallbackInfo& info) {}
JsGetTextAlign(const JSCallbackInfo & info)103     void JsGetTextAlign(const JSCallbackInfo& info) {}
JsSetTextBaseline(const JSCallbackInfo & info)104     void JsSetTextBaseline(const JSCallbackInfo& info) {}
JsGetTextBaseline(const JSCallbackInfo & info)105     void JsGetTextBaseline(const JSCallbackInfo& info) {}
JsSetGlobalAlpha(const JSCallbackInfo & info)106     void JsSetGlobalAlpha(const JSCallbackInfo& info) {}
JsGetGlobalAlpha(const JSCallbackInfo & info)107     void JsGetGlobalAlpha(const JSCallbackInfo& info) {}
JsSetGlobalCompositeOperation(const JSCallbackInfo & info)108     void JsSetGlobalCompositeOperation(const JSCallbackInfo& info) {}
JsGetGlobalCompositeOperation(const JSCallbackInfo & info)109     void JsGetGlobalCompositeOperation(const JSCallbackInfo& info) {}
JsSetLineDashOffset(const JSCallbackInfo & info)110     void JsSetLineDashOffset(const JSCallbackInfo& info) {}
JsGetLineDashOffset(const JSCallbackInfo & info)111     void JsGetLineDashOffset(const JSCallbackInfo& info) {}
JsSetShadowBlur(const JSCallbackInfo & info)112     void JsSetShadowBlur(const JSCallbackInfo& info) {}
JsGetShadowBlur(const JSCallbackInfo & info)113     void JsGetShadowBlur(const JSCallbackInfo& info) {}
JsSetShadowColor(const JSCallbackInfo & info)114     void JsSetShadowColor(const JSCallbackInfo& info) {}
JsGetShadowColor(const JSCallbackInfo & info)115     void JsGetShadowColor(const JSCallbackInfo& info) {}
JsSetShadowOffsetX(const JSCallbackInfo & info)116     void JsSetShadowOffsetX(const JSCallbackInfo& info) {}
JsGetShadowOffsetX(const JSCallbackInfo & info)117     void JsGetShadowOffsetX(const JSCallbackInfo& info) {}
JsSetShadowOffsetY(const JSCallbackInfo & info)118     void JsSetShadowOffsetY(const JSCallbackInfo& info) {}
JsGetShadowOffsetY(const JSCallbackInfo & info)119     void JsGetShadowOffsetY(const JSCallbackInfo& info) {}
JsSetImageSmoothingEnabled(const JSCallbackInfo & info)120     void JsSetImageSmoothingEnabled(const JSCallbackInfo& info) {}
JsGetImageSmoothingEnabled(const JSCallbackInfo & info)121     void JsGetImageSmoothingEnabled(const JSCallbackInfo& info) {}
JsSetImageSmoothingQuality(const JSCallbackInfo & info)122     void JsSetImageSmoothingQuality(const JSCallbackInfo& info) {}
JsGetImageSmoothingQuality(const JSCallbackInfo & info)123     void JsGetImageSmoothingQuality(const JSCallbackInfo& info) {}
JSTransferFromImageBitmap(const JSCallbackInfo & info)124     void JSTransferFromImageBitmap(const JSCallbackInfo& info) {}
JsSaveLayer(const JSCallbackInfo & info)125     void JsSaveLayer(const JSCallbackInfo& info) {}
JsRestoreLayer(const JSCallbackInfo & info)126     void JsRestoreLayer(const JSCallbackInfo& info) {}
127 
SetWidth(double width)128     void SetWidth(double width)
129     {
130         width_ = width;
131     }
132 
GetWidth()133     double GetWidth() const
134     {
135         return width_;
136     }
137 
SetHeight(double height)138     void SetHeight(double height)
139     {
140         height_ = height;
141     }
142 
GetHeight()143     double GetHeight() const
144     {
145         return height_;
146     }
147 
SetDetachStatus(bool isDetached)148     void SetDetachStatus(bool isDetached)
149     {
150         isDetached_ = isDetached;
151     }
152 
IsDetached()153     bool IsDetached() const
154     {
155         return isDetached_;
156     }
157 
SetUnit(CanvasUnit unit)158     void SetUnit(CanvasUnit unit)
159     {
160         unit_ = unit;
161     }
162 
GetUnit()163     CanvasUnit GetUnit()
164     {
165         return unit_;
166     }
167 
GetDensity()168     double GetDensity()
169     {
170         double density = PipelineBase::GetCurrentDensity();
171         return ((GetUnit() == CanvasUnit::DEFAULT) && !NearZero(density)) ? density : 1.0;
172     }
173 
IsGetContext()174     bool IsGetContext() const
175     {
176         return isGetContext_;
177     }
178 
SetOffscreenPattern(const RefPtr<NG::OffscreenCanvasPattern> & offscreenPattern)179     void SetOffscreenPattern(const RefPtr<NG::OffscreenCanvasPattern>& offscreenPattern)
180     {
181         offscreenCanvasPattern_ = offscreenPattern;
182     }
183 
184     enum class ContextType {
185         CONTEXT_2D = 0,
186     };
187 
188     ACE_DISALLOW_COPY_AND_MOVE(JSOffscreenCanvas);
189 private:
190     napi_value CreateContext2d(napi_env env, double width, double height, const EcmaVM* vm);
191     napi_value onTransferToImageBitmap(napi_env env);
192     napi_value onGetContext(napi_env env, napi_callback_info info);
193     void SetAntiAlias(napi_value argv);
194     napi_value OnGetWidth(napi_env env);
195     napi_value OnGetHeight(napi_env env);
196     napi_value OnSetWidth(napi_env env, napi_callback_info info);
197     napi_value OnSetHeight(napi_env env, napi_callback_info info);
198 
199     RefPtr<NG::OffscreenCanvasPattern> offscreenCanvasPattern_;
200     RefPtr<JSOffscreenRenderingContext> offscreenCanvasContext_;
201     RefPtr<JSRenderingContextSettings> offscreenCanvasSettings_;
202     double width_ = 0.0f;
203     double height_ = 0.0f;
204     ContextType contextType_;
205     CanvasUnit unit_ = CanvasUnit::DEFAULT;
206     bool isGetContext_ = false;
207     bool isDetached_ = false;
208 };
209 
210 } // namespace OHOS::Ace::Framework
211 
212 #endif // FOUNDATION_ACE_FRAMEWORK_JAVASCRIPT_BRIDGE_JS_VIEW_JS_OFFSCREEN_CANVAS_H
213