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 #if defined(ROSEN_OHOS) || defined(ROSEN_ARKUI_X) 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: m_canvas(canvas)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 DrawArcWithCenter(napi_env env, napi_callback_info info); 64 static napi_value ClipRoundRect(napi_env env, napi_callback_info info); 65 static napi_value DrawCircle(napi_env env, napi_callback_info info); 66 static napi_value DrawColor(napi_env env, napi_callback_info info); 67 static napi_value DrawImage(napi_env env, napi_callback_info info); 68 static napi_value DrawImageLattice(napi_env env, napi_callback_info info); 69 static napi_value DrawImageNine(napi_env env, napi_callback_info info); 70 static napi_value DrawImageRect(napi_env env, napi_callback_info info); 71 static napi_value DrawImageRectWithSrc(napi_env env, napi_callback_info info); 72 static napi_value DrawLine(napi_env env, napi_callback_info info); 73 static napi_value DrawRect(napi_env env, napi_callback_info info); 74 static napi_value DrawOval(napi_env env, napi_callback_info info); 75 static napi_value DrawPoint(napi_env env, napi_callback_info info); 76 static napi_value DrawPoints(napi_env env, napi_callback_info info); 77 static napi_value DrawPath(napi_env env, napi_callback_info info); 78 static napi_value DrawPixelMapMesh(napi_env env, napi_callback_info info); 79 static napi_value DrawShadow(napi_env env, napi_callback_info info); 80 static napi_value DrawRegion(napi_env env, napi_callback_info info); 81 static napi_value DrawSingleCharacter(napi_env env, napi_callback_info info); 82 static napi_value DrawSingleCharacterWithFeatures(napi_env env, napi_callback_info info); 83 static napi_value DrawText(napi_env env, napi_callback_info info); 84 static napi_value DrawBackground(napi_env env, napi_callback_info info); 85 static napi_value DrawRoundRect(napi_env env, napi_callback_info info); 86 static napi_value GetTotalMatrix(napi_env env, napi_callback_info info); 87 static napi_value DrawNestedRoundRect(napi_env env, napi_callback_info info); 88 static napi_value DetachBrush(napi_env env, napi_callback_info info); 89 static napi_value DetachPen(napi_env env, napi_callback_info info); 90 static napi_value GetSaveCount(napi_env env, napi_callback_info info); 91 static napi_value GetWidth(napi_env env, napi_callback_info info); 92 static napi_value GetHeight(napi_env env, napi_callback_info info); 93 static napi_value IsClipEmpty(napi_env env, napi_callback_info info); 94 static napi_value Rotate(napi_env env, napi_callback_info info); 95 static napi_value RestoreToCount(napi_env env, napi_callback_info info); 96 static napi_value Restore(napi_env env, napi_callback_info info); 97 static napi_value Skew(napi_env env, napi_callback_info info); 98 static napi_value Save(napi_env env, napi_callback_info info); 99 static napi_value SaveLayer(napi_env env, napi_callback_info info); 100 static napi_value Scale(napi_env env, napi_callback_info info); 101 static napi_value SetMatrix(napi_env env, napi_callback_info info); 102 static napi_value ResetMatrix(napi_env env, napi_callback_info info); 103 static napi_value Translate(napi_env env, napi_callback_info info); 104 static napi_value GetLocalClipBounds(napi_env env, napi_callback_info info); 105 static napi_value QuickRejectPath(napi_env env, napi_callback_info info); 106 static napi_value QuickRejectRect(napi_env env, napi_callback_info info); 107 108 Canvas* GetCanvas(); 109 DRAWING_API void ResetCanvas(); 110 DRAWING_API void ClipCanvas(float width, float height); 111 DRAWING_API void SaveCanvas(); 112 DRAWING_API void RestoreCanvas(); 113 114 private: 115 napi_value OnClear(napi_env env, napi_callback_info info); 116 napi_value OnClipPath(napi_env env, napi_callback_info info); 117 napi_value OnClipRegion(napi_env env, napi_callback_info info); 118 napi_value OnClipRect(napi_env env, napi_callback_info info); 119 napi_value OnConcatMatrix(napi_env env, napi_callback_info info); 120 napi_value OnDrawArc(napi_env env, napi_callback_info info); 121 napi_value OnDrawArcWithCenter(napi_env env, napi_callback_info info); 122 napi_value OnClipRoundRect(napi_env env, napi_callback_info info); 123 napi_value OnDrawCircle(napi_env env, napi_callback_info info); 124 napi_value OnDrawColor(napi_env env, napi_callback_info info); 125 napi_value OnDrawImage(napi_env env, napi_callback_info info); 126 napi_value OnDrawImageLattice(napi_env env, napi_callback_info info); 127 napi_value OnDrawImageNine(napi_env env, napi_callback_info info); 128 napi_value OnDrawImageRect(napi_env env, napi_callback_info info); 129 napi_value OnDrawImageRectWithSrc(napi_env env, napi_callback_info info); 130 napi_value OnDrawLine(napi_env env, napi_callback_info info); 131 napi_value OnDrawRect(napi_env env, napi_callback_info info); 132 napi_value OnDrawOval(napi_env env, napi_callback_info info); 133 napi_value OnDrawPoint(napi_env env, napi_callback_info info); 134 napi_value OnDrawPoints(napi_env env, napi_callback_info info); 135 napi_value OnDrawPath(napi_env env, napi_callback_info info); 136 napi_value OnDrawPixelMapMesh(napi_env env, napi_callback_info info); 137 napi_value OnDrawShadow(napi_env env, napi_callback_info info); 138 napi_value OnDrawRegion(napi_env env, napi_callback_info info); 139 napi_value OnDrawSingleCharacter(napi_env env, napi_callback_info info); 140 napi_value OnDrawSingleCharacterWithFeatures(napi_env env, napi_callback_info info); 141 napi_value OnDrawText(napi_env env, napi_callback_info info); 142 napi_value OnGetSaveCount(napi_env env, napi_callback_info info); 143 napi_value OnGetWidth(napi_env env, napi_callback_info info); 144 napi_value OnGetHeight(napi_env env, napi_callback_info info); 145 napi_value OnIsClipEmpty(napi_env env, napi_callback_info info); 146 napi_value OnRotate(napi_env env, napi_callback_info info); 147 napi_value OnRestoreToCount(napi_env env, napi_callback_info info); 148 napi_value OnRestore(napi_env env, napi_callback_info info); 149 napi_value OnSkew(napi_env env, napi_callback_info info); 150 napi_value OnSave(napi_env env, napi_callback_info info); 151 napi_value OnSaveLayer(napi_env env, napi_callback_info info); 152 napi_value OnScale(napi_env env, napi_callback_info info); 153 napi_value OnSetMatrix(napi_env env, napi_callback_info info); 154 napi_value OnResetMatrix(napi_env env, napi_callback_info info); 155 napi_value OnTranslate(napi_env env, napi_callback_info info); 156 napi_value OnDrawBackground(napi_env env, napi_callback_info info); 157 napi_value OnDrawRoundRect(napi_env env, napi_callback_info info); 158 napi_value OnDrawNestedRoundRect(napi_env env, napi_callback_info info); 159 napi_value OnGetLocalClipBounds(napi_env env, napi_callback_info info); 160 napi_value OnGetTotalMatrix(napi_env env, napi_callback_info info); 161 napi_value OnQuickRejectPath(napi_env env, napi_callback_info info); 162 napi_value OnQuickRejectRect(napi_env env, napi_callback_info info); 163 164 static bool CreateConstructor(napi_env env); 165 static thread_local napi_ref constructor_; 166 Canvas* m_canvas = nullptr; 167 bool owned_ = false; 168 #if defined(ROSEN_OHOS) || defined(ROSEN_ARKUI_X) 169 std::shared_ptr<Media::PixelMap> mPixelMap_ = nullptr; 170 #endif 171 }; 172 } // namespace Drawing 173 } // namespace OHOS::Rosen 174 #endif // OHOS_ROSEN_JS_CANVAS_H