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