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