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_PARAGRAPH_H 17 #define OHOS_ROSEN_JS_PARAGRAPH_H 18 19 #include <memory> 20 #include <native_engine/native_engine.h> 21 #include <native_engine/native_value.h> 22 23 #include "typography.h" 24 25 namespace OHOS::Rosen { 26 class JsParagraph final { 27 public: 28 explicit JsParagraph(std::shared_ptr<Typography> paragraph); 29 ~JsParagraph(); 30 31 static napi_value Init(napi_env env, napi_value exportObj); 32 static napi_value Layout(napi_env env, napi_callback_info info); 33 static napi_value Paint(napi_env env, napi_callback_info info); 34 static napi_value PaintOnPath(napi_env env, napi_callback_info info); 35 static napi_value GetMaxWidth(napi_env env, napi_callback_info info); 36 static napi_value GetHeight(napi_env env, napi_callback_info info); 37 static napi_value GetLongestLine(napi_env env, napi_callback_info info); 38 static napi_value GetLongestLineWithIndent(napi_env env, napi_callback_info info); 39 static napi_value GetMinIntrinsicWidth(napi_env env, napi_callback_info info); 40 static napi_value GetMaxIntrinsicWidth(napi_env env, napi_callback_info info); 41 static napi_value GetAlphabeticBaseline(napi_env env, napi_callback_info info); 42 static napi_value GetIdeographicBaseline(napi_env env, napi_callback_info info); 43 static napi_value GetRectsForRange(napi_env env, napi_callback_info info); 44 static napi_value GetRectsForPlaceholders(napi_env env, napi_callback_info info); 45 static napi_value GetGlyphPositionAtCoordinate(napi_env env, napi_callback_info info); 46 static napi_value GetWordBoundary(napi_env env, napi_callback_info info); 47 static napi_value GetLineCount(napi_env env, napi_callback_info info); 48 static napi_value GetLineHeight(napi_env env, napi_callback_info info); 49 static napi_value GetLineWidth(napi_env env, napi_callback_info info); 50 static napi_value GetTextLines(napi_env env, napi_callback_info info); 51 static napi_value DidExceedMaxLines(napi_env env, napi_callback_info info); 52 static napi_value GetActualTextRange(napi_env env, napi_callback_info info); 53 static napi_value GetLineMetrics(napi_env env, napi_callback_info info); 54 static napi_value GetFontMetricsByTextStyle(napi_env env, napi_callback_info info); 55 static napi_value GetLineFontMetrics(napi_env env, napi_callback_info info); 56 static void Destructor(napi_env env, void *nativeObject, void *finalize); 57 static napi_value CreateJsTypography(napi_env env, std::unique_ptr<Typography> typography); 58 static napi_value Constructor(napi_env env, napi_callback_info info); 59 std::shared_ptr<Typography> GetParagraph(); 60 static napi_value LayoutAsync(napi_env env, napi_callback_info info); 61 static napi_value IsStrutStyleEqual(napi_env env, napi_callback_info info); 62 static napi_value UpdateColor(napi_env env, napi_callback_info info); 63 static napi_value UpdateDecoration(napi_env env, napi_callback_info info); 64 65 private: 66 napi_value OnLayout(napi_env env, napi_callback_info info); 67 napi_value OnPaint(napi_env env, napi_callback_info info); 68 napi_value OnPaintOnPath(napi_env env, napi_callback_info info); 69 napi_value OnGetMaxWidth(napi_env env, napi_callback_info info); 70 napi_value OnGetHeight(napi_env env, napi_callback_info info); 71 napi_value OnGetLongestLine(napi_env env, napi_callback_info info); 72 napi_value OnGetLongestLineWithIndent(napi_env env, napi_callback_info info); 73 napi_value OnGetMinIntrinsicWidth(napi_env env, napi_callback_info info); 74 napi_value OnGetMaxIntrinsicWidth(napi_env env, napi_callback_info info); 75 napi_value OnGetAlphabeticBaseline(napi_env env, napi_callback_info info); 76 napi_value OnGetIdeographicBaseline(napi_env env, napi_callback_info info); 77 napi_value OnGetRectsForRange(napi_env env, napi_callback_info info); 78 napi_value OnGetRectsForPlaceholders(napi_env env, napi_callback_info info); 79 napi_value OnGetGlyphPositionAtCoordinate(napi_env env, napi_callback_info info); 80 napi_value OnGetWordBoundary(napi_env env, napi_callback_info info); 81 napi_value OnGetLineCount(napi_env env, napi_callback_info info); 82 napi_value OnGetLineHeight(napi_env env, napi_callback_info info); 83 napi_value OnGetLineWidth(napi_env env, napi_callback_info info); 84 napi_value OnDidExceedMaxLines(napi_env env, napi_callback_info info); 85 napi_value OnGetTextLines(napi_env env, napi_callback_info info); 86 napi_value OnGetActualTextRange(napi_env env, napi_callback_info info); 87 napi_value OnGetLineMetrics(napi_env env, napi_callback_info info); 88 napi_value OnGetLineMetricsAt(napi_env env, napi_callback_info info); 89 90 napi_value OnGetFontMetricsByTextStyle(napi_env env, napi_callback_info info); 91 napi_value OnGetLineFontMetrics(napi_env env, napi_callback_info info); 92 napi_value OnLayoutAsync(napi_env env, napi_callback_info info); 93 napi_value OnUpdateColor(napi_env env, napi_callback_info info); 94 napi_value OnUpdateDecoration(napi_env env, napi_callback_info info); 95 static bool CreateConstructor(napi_env env); 96 static thread_local napi_ref constructor_; 97 static std::mutex constructorMutex_; 98 std::shared_ptr<Typography> paragraph_ = nullptr; 99 }; 100 } // namespace OHOS::Rosen 101 #endif // OHOS_ROSEN_JS_PARAGRAPH_H