• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_JSI_NATIVEMODULE_ARKTS_UTILS_H
17 #define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_JSI_NATIVEMODULE_ARKTS_UTILS_H
18 
19 #include "bridge/declarative_frontend/declarative_frontend.h"
20 #include "bridge/declarative_frontend/engine/functions/js_drag_function.h"
21 #include "bridge/declarative_frontend/engine/js_object_template.h"
22 #include "core/interfaces/native/node/api.h"
23 #include "bridge/declarative_frontend/frontend_delegate_declarative.h"
24 #include "bridge/declarative_frontend/jsview/js_canvas_image_data.h"
25 #include "bridge/js_frontend/engine/jsi/ark_js_runtime.h"
26 #include "core/components/common/properties/text_style.h"
27 #include "core/components_ng/pattern/text_field/text_field_model.h"
28 
29 namespace OHOS::Ace::NG {
30 class ArkTSUtils {
31 public:
32     static uint32_t ColorAlphaAdapt(uint32_t origin);
33     static bool ParseJsColor(const EcmaVM* vm, const Local<JSValueRef>& value, Color& result);
34     static bool ParseJsColorAlpha(const EcmaVM* vm, const Local<JSValueRef>& value, Color& result);
35     static bool ParseJsColorFromResource(const EcmaVM* vm, const Local<JSValueRef>& jsObj, Color& result);
36     static bool ParseJsDimensionFromResource(
37         const EcmaVM* vm, const Local<JSValueRef>& jsObj, DimensionUnit dimensionUnit, CalcDimension& result);
38     static bool ParseJsDimensionFromResourceNG(
39         const EcmaVM* vm, const Local<JSValueRef>& jsObj, DimensionUnit dimensionUnit, CalcDimension& result);
40     static bool ParseStringArray(
41         const EcmaVM* vm, const Local<JSValueRef>& arg, std::string* array, int32_t defaultLength);
42     static bool ParseJsInteger(const EcmaVM *vm, const Local<JSValueRef> &value, int32_t &result);
43     static bool ParseJsInteger(const EcmaVM *vm, const Local<JSValueRef> &value, uint32_t &result);
44     static bool ParseJsDouble(const EcmaVM *vm, const Local<JSValueRef> &value, double &result);
45     static bool ParseAllBorder(const EcmaVM *vm, const Local<JSValueRef> &args, CalcDimension &result);
46     static bool ParseAllRadius(const EcmaVM *vm, const Local<JSValueRef> &args, CalcDimension &result);
47     static bool ParseJsFontFamiliesToString(const EcmaVM *vm, const Local<JSValueRef> &jsValue, std::string &result);
48     static bool ParseJsFontFamilies(
49         const EcmaVM *vm, const Local<JSValueRef> &jsValue, std::vector<std::string> &result);
50     static bool ParseJsFontFamiliesFromResource(
51         const EcmaVM *vm, const Local<JSValueRef> &jsValue, std::vector<std::string> &result);
52     static bool ParseJsDimension(const EcmaVM *vm, const Local<JSValueRef> &jsValue, CalcDimension &result,
53         DimensionUnit defaultUnit, bool isSupportPercent = true, bool enableCheckInvalidvalue = true);
54     static bool ParseJsDimensionFp(const EcmaVM *vm, const Local<JSValueRef> &jsValue, CalcDimension &result,
55         bool isSupportPercent = true, bool enableCheckInvalidvalue = true);
56     static bool ParseJsDimensionVp(
57         const EcmaVM *vm, const Local<JSValueRef> &value, CalcDimension &result, bool enableCheckInvalidvalue = true);
58     static bool ParseJsDimensionNG(const EcmaVM *vm, const Local<JSValueRef> &jsValue, CalcDimension &result,
59         DimensionUnit defaultUnit, bool isSupportPercent = true);
60     static bool ParseJsDimensionVpNG(const EcmaVM *vm, const Local<JSValueRef> &jsValue, CalcDimension &result,
61         bool isSupportPercent = true);
62     static bool ParseJsMedia(const EcmaVM *vm, const Local<JSValueRef> &jsValue, std::string& result);
63     static bool ParseJsMediaFromResource(const EcmaVM *vm, const Local<JSValueRef> &jsValue, std::string& result);
64     static bool ParseResourceToDouble(const EcmaVM* vm, const Local<JSValueRef>& jsValue, double& result);
65     static bool ParseJsIntegerArray(const EcmaVM* vm, Local<JSValueRef> values, std::vector<uint32_t>& result);
66     static bool ParseJsString(const EcmaVM *vm, const Local<JSValueRef> &value, std::string& result);
67     static bool ParseJsStringFromResource(const EcmaVM *vm, const Local<JSValueRef> &jsValue, std::string& result);
68     template <class T>
ParseArray(const EcmaVM * vm,const Local<JSValueRef> & arg,T * array,int32_t defaultLength,std::function<T (const EcmaVM *,const Local<JSValueRef> &)> getValue)69     static bool ParseArray(const EcmaVM *vm, const Local<JSValueRef> &arg, T *array, int32_t defaultLength,
70         std::function<T(const EcmaVM *, const Local<JSValueRef> &)> getValue)
71     {
72         CHECK_NULL_RETURN(vm, false);
73         CHECK_NULL_RETURN(array, false);
74         if (defaultLength <= 0) {
75             return false;
76         }
77         auto handle = panda::CopyableGlobal<panda::ArrayRef>(vm, arg);
78         int32_t length = static_cast<int32_t>(handle->Length(vm));
79         if (length != defaultLength) {
80             return false;
81         }
82         for (int32_t i = 0; i < length; i++) {
83             auto value = handle->GetValueAt(vm, arg, i);
84             *(array + i) = getValue(vm, value);
85         }
86         return true;
87     }
88     static void GetStringFromJS(const EcmaVM *vm, const Local<JSValueRef> &value, std::string& result);
89     static bool ParseJsResource(const EcmaVM *vm, const Local<JSValueRef> &jsValue, CalcDimension &result);
90     static void GetJsMediaBundleInfo(
91         const EcmaVM* vm, const Local<JSValueRef>& jsValue, std::string& bundleName, std::string& moduleName);
92     static bool ParseJsColorStrategy(
93         const EcmaVM* vm, const Local<JSValueRef>& value, ForegroundColorStrategy& strategy);
94     static bool GetJsPasswordIcon(const EcmaVM *vm, const Local<JSValueRef> &jsOnIconSrc,
95         const Local<JSValueRef> &jsOffIconSrc, PasswordIcon& result);
96     static void ParsePadding(
97         const EcmaVM* vm, const Local<JSValueRef>& value, CalcDimension& dimen, ArkUISizeType& result);
98     static bool ParseResponseRegion(
99         const EcmaVM* vm, const Local<JSValueRef>& jsValue,
100         double* regionValues, int32_t* regionUnits, uint32_t length);
101     template<typename T>
GetTheme()102     static RefPtr<T> GetTheme()
103     {
104         auto pipelineContext = PipelineBase::GetCurrentContext();
105         CHECK_NULL_RETURN(pipelineContext, nullptr);
106         auto themeManager = pipelineContext->GetThemeManager();
107         CHECK_NULL_RETURN(themeManager, nullptr);
108         return themeManager->GetTheme<T>();
109     }
IsPercentStr(std::string & percent)110     static bool IsPercentStr(std::string& percent)
111     {
112         if (percent.find("%") != std::string::npos) {
113             size_t index = percent.find("%");
114             percent = percent.substr(0, index);
115             return true;
116         }
117         return false;
118     }
119 };
120 } // namespace OHOS::Ace::NG
121 #endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_JSI_NATIVEMODULE_ARKTS_UTILS_H
122