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 Constructor(napi_env env, napi_callback_info info); 47 static void Destructor(napi_env env, void *nativeObject, void *finalize); 48 DRAWING_API static napi_value CreateJsCanvas(napi_env env, Canvas* canvas, float width, float height); 49 50 static napi_value Init(napi_env env, napi_value exportObj); 51 52 static napi_value DrawRect(napi_env env, napi_callback_info info); 53 static napi_value DrawCircle(napi_env env, napi_callback_info info); 54 static napi_value DrawImage(napi_env env, napi_callback_info info); 55 static napi_value DrawColor(napi_env env, napi_callback_info info); 56 static napi_value DrawPoint(napi_env env, napi_callback_info info); 57 static napi_value DrawPath(napi_env env, napi_callback_info info); 58 static napi_value DrawLine(napi_env env, napi_callback_info info); 59 static napi_value DrawText(napi_env env, napi_callback_info info); 60 static napi_value AttachPen(napi_env env, napi_callback_info info); 61 static napi_value AttachBrush(napi_env env, napi_callback_info info); 62 static napi_value DetachPen(napi_env env, napi_callback_info info); 63 static napi_value DetachBrush(napi_env env, napi_callback_info info); 64 65 Canvas* GetCanvas(); 66 DRAWING_API void ResetCanvas(); 67 68 private: 69 napi_value OnDrawRect(napi_env env, napi_callback_info info); 70 napi_value OnDrawCircle(napi_env env, napi_callback_info info); 71 napi_value OnDrawImage(napi_env env, napi_callback_info info); 72 napi_value OnDrawColor(napi_env env, napi_callback_info info); 73 napi_value OnDrawPoint(napi_env env, napi_callback_info info); 74 napi_value OnDrawPath(napi_env env, napi_callback_info info); 75 napi_value OnDrawLine(napi_env env, napi_callback_info info); 76 napi_value OnDrawText(napi_env env, napi_callback_info info); 77 78 static bool DeclareFuncAndCreateConstructor(napi_env env); 79 static thread_local napi_ref constructor_; 80 Canvas* m_canvas = nullptr; 81 bool owned_ = false; 82 }; 83 } // namespace Drawing 84 } // namespace OHOS::Rosen 85 #endif // OHOS_ROSEN_JS_CANVAS_H