1 /* 2 * Copyright (c) 2024 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 OHOS_ROSEN_JS_CANVAS_H 17 #define OHOS_ROSEN_JS_CANVAS_H 18 19 #include <native_engine/native_engine.h> 20 #include <native_engine/native_value.h> 21 22 namespace OHOS::Rosen { 23 namespace Drawing { 24 25 #ifndef DRAWING_API 26 #ifdef _WIN32 27 #define DRAWING_EXPORT __attribute__((dllexport)) 28 #define DRAWING_IMPORT __attribute__((dllimport)) 29 #else 30 #define DRAWING_EXPORT __attribute__((visibility("default"))) 31 #define DRAWING_IMPORT __attribute__((visibility("default"))) 32 #endif 33 #ifdef MODULE_DRAWING 34 #define DRAWING_API DRAWING_EXPORT 35 #else 36 #define DRAWING_API DRAWING_IMPORT 37 #endif 38 #endif 39 40 class Canvas; 41 class JsCanvas final { 42 public: m_canvas(canvas)43 explicit JsCanvas(Canvas* canvas, bool owned = false) : m_canvas(canvas), owned_(owned) {}; 44 ~JsCanvas(); 45 46 static napi_value Init(napi_env env, napi_value exportObj); 47 static napi_value Constructor(napi_env env, napi_callback_info info); 48 static void Destructor(napi_env env, void *nativeObject, void *finalize); 49 50 DRAWING_API static napi_value CreateJsCanvas(napi_env env, Canvas* canvas); 51 52 static napi_value AttachBrush(napi_env env, napi_callback_info info); 53 static napi_value AttachPen(napi_env env, napi_callback_info info); 54 static napi_value Clear(napi_env env, napi_callback_info info); 55 static napi_value ClipPath(napi_env env, napi_callback_info info); 56 static napi_value ClipRegion(napi_env env, napi_callback_info info); 57 static napi_value ClipRect(napi_env env, napi_callback_info info); 58 static napi_value ConcatMatrix(napi_env env, napi_callback_info info); 59 static napi_value DrawArc(napi_env env, napi_callback_info info); 60 static napi_value ClipRoundRect(napi_env env, napi_callback_info info); 61 static napi_value DrawCircle(napi_env env, napi_callback_info info); 62 static napi_value DrawColor(napi_env env, napi_callback_info info); 63 static napi_value DrawImage(napi_env env, napi_callback_info info); 64 static napi_value DrawImageRect(napi_env env, napi_callback_info info); 65 static napi_value DrawImageRectWithSrc(napi_env env, napi_callback_info info); 66 static napi_value DrawLine(napi_env env, napi_callback_info info); 67 static napi_value DrawRect(napi_env env, napi_callback_info info); 68 static napi_value DrawOval(napi_env env, napi_callback_info info); 69 static napi_value DrawPoint(napi_env env, napi_callback_info info); 70 static napi_value DrawPoints(napi_env env, napi_callback_info info); 71 static napi_value DrawPath(napi_env env, napi_callback_info info); 72 static napi_value DrawPixelMapMesh(napi_env env, napi_callback_info info); 73 static napi_value DrawShadow(napi_env env, napi_callback_info info); 74 static napi_value DrawRegion(napi_env env, napi_callback_info info); 75 static napi_value DrawSingleCharacter(napi_env env, napi_callback_info info); 76 static napi_value DrawText(napi_env env, napi_callback_info info); 77 static napi_value DrawBackground(napi_env env, napi_callback_info info); 78 static napi_value DrawRoundRect(napi_env env, napi_callback_info info); 79 static napi_value GetTotalMatrix(napi_env env, napi_callback_info info); 80 static napi_value DrawNestedRoundRect(napi_env env, napi_callback_info info); 81 static napi_value DetachBrush(napi_env env, napi_callback_info info); 82 static napi_value DetachPen(napi_env env, napi_callback_info info); 83 static napi_value GetSaveCount(napi_env env, napi_callback_info info); 84 static napi_value GetWidth(napi_env env, napi_callback_info info); 85 static napi_value GetHeight(napi_env env, napi_callback_info info); 86 static napi_value IsClipEmpty(napi_env env, napi_callback_info info); 87 static napi_value Rotate(napi_env env, napi_callback_info info); 88 static napi_value RestoreToCount(napi_env env, napi_callback_info info); 89 static napi_value Restore(napi_env env, napi_callback_info info); 90 static napi_value Skew(napi_env env, napi_callback_info info); 91 static napi_value Save(napi_env env, napi_callback_info info); 92 static napi_value SaveLayer(napi_env env, napi_callback_info info); 93 static napi_value Scale(napi_env env, napi_callback_info info); 94 static napi_value SetMatrix(napi_env env, napi_callback_info info); 95 static napi_value ResetMatrix(napi_env env, napi_callback_info info); 96 static napi_value Translate(napi_env env, napi_callback_info info); 97 static napi_value GetLocalClipBounds(napi_env env, napi_callback_info info); 98 99 Canvas* GetCanvas(); 100 DRAWING_API void ResetCanvas(); 101 DRAWING_API void ClipCanvas(float width, float height); 102 DRAWING_API void SaveCanvas(); 103 DRAWING_API void RestoreCanvas(); 104 105 private: 106 napi_value OnClear(napi_env env, napi_callback_info info); 107 napi_value OnClipPath(napi_env env, napi_callback_info info); 108 napi_value OnClipRegion(napi_env env, napi_callback_info info); 109 napi_value OnClipRect(napi_env env, napi_callback_info info); 110 napi_value OnConcatMatrix(napi_env env, napi_callback_info info); 111 napi_value OnDrawArc(napi_env env, napi_callback_info info); 112 napi_value OnClipRoundRect(napi_env env, napi_callback_info info); 113 napi_value OnDrawCircle(napi_env env, napi_callback_info info); 114 napi_value OnDrawColor(napi_env env, napi_callback_info info); 115 napi_value OnDrawImage(napi_env env, napi_callback_info info); 116 napi_value OnDrawImageRect(napi_env env, napi_callback_info info); 117 napi_value OnDrawImageRectWithSrc(napi_env env, napi_callback_info info); 118 napi_value OnDrawLine(napi_env env, napi_callback_info info); 119 napi_value OnDrawRect(napi_env env, napi_callback_info info); 120 napi_value OnDrawOval(napi_env env, napi_callback_info info); 121 napi_value OnDrawPoint(napi_env env, napi_callback_info info); 122 napi_value OnDrawPoints(napi_env env, napi_callback_info info); 123 napi_value OnDrawPath(napi_env env, napi_callback_info info); 124 napi_value OnDrawPixelMapMesh(napi_env env, napi_callback_info info); 125 napi_value OnDrawShadow(napi_env env, napi_callback_info info); 126 napi_value OnDrawRegion(napi_env env, napi_callback_info info); 127 napi_value OnDrawSingleCharacter(napi_env env, napi_callback_info info); 128 napi_value OnDrawText(napi_env env, napi_callback_info info); 129 napi_value OnGetSaveCount(napi_env env, napi_callback_info info); 130 napi_value OnGetWidth(napi_env env, napi_callback_info info); 131 napi_value OnGetHeight(napi_env env, napi_callback_info info); 132 napi_value OnIsClipEmpty(napi_env env, napi_callback_info info); 133 napi_value OnRotate(napi_env env, napi_callback_info info); 134 napi_value OnRestoreToCount(napi_env env, napi_callback_info info); 135 napi_value OnRestore(napi_env env, napi_callback_info info); 136 napi_value OnSkew(napi_env env, napi_callback_info info); 137 napi_value OnSave(napi_env env, napi_callback_info info); 138 napi_value OnSaveLayer(napi_env env, napi_callback_info info); 139 napi_value OnScale(napi_env env, napi_callback_info info); 140 napi_value OnSetMatrix(napi_env env, napi_callback_info info); 141 napi_value OnResetMatrix(napi_env env, napi_callback_info info); 142 napi_value OnTranslate(napi_env env, napi_callback_info info); 143 napi_value OnDrawBackground(napi_env env, napi_callback_info info); 144 napi_value OnDrawRoundRect(napi_env env, napi_callback_info info); 145 napi_value OnDrawNestedRoundRect(napi_env env, napi_callback_info info); 146 napi_value OnGetLocalClipBounds(napi_env env, napi_callback_info info); 147 napi_value OnGetTotalMatrix(napi_env env, napi_callback_info info); 148 149 static bool CreateConstructor(napi_env env); 150 static thread_local napi_ref constructor_; 151 Canvas* m_canvas = nullptr; 152 bool owned_ = false; 153 }; 154 } // namespace Drawing 155 } // namespace OHOS::Rosen 156 #endif // OHOS_ROSEN_JS_CANVAS_H