1 /* 2 * Copyright (c) 2021-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 FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_VIEW_ABSTRACT_H 17 #define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_VIEW_ABSTRACT_H 18 19 #include <cstdint> 20 #include <optional> 21 22 #include "base/geometry/dimension.h" 23 #include "base/geometry/dimension_rect.h" 24 #include "base/json/json_util.h" 25 #include "base/log/log.h" 26 #include "base/memory/ace_type.h" 27 #include "base/utils/system_properties.h" 28 #include "bridge/declarative_frontend/engine/bindings.h" 29 #include "bridge/declarative_frontend/engine/functions/js_function.h" 30 #include "bridge/declarative_frontend/engine/js_ref_ptr.h" 31 #include "core/common/container.h" 32 #include "core/common/resource/resource_manager.h" 33 #include "core/common/resource/resource_object.h" 34 #include "core/common/resource/resource_wrapper.h" 35 #include "core/components/common/properties/popup_param.h" 36 #include "core/components/theme/theme_manager.h" 37 #include "core/components_ng/event/gesture_event_hub.h" 38 #include "core/components_ng/pattern/overlay/sheet_presentation_pattern.h" 39 #include "core/components_ng/pattern/tabs/tab_content_model.h" 40 #include "core/components_ng/pattern/text/text_model.h" 41 #include "core/components_ng/pattern/text/text_menu_extension.h" 42 #include "core/components_ng/property/gradient_property.h" 43 #include "core/components_ng/property/transition_property.h" 44 #include "interfaces/inner_api/ace/ai/image_analyzer.h" 45 46 namespace OHOS::Ace::Framework { 47 48 constexpr int32_t DEFAULT_TAP_FINGERS = 1; 49 constexpr int32_t DEFAULT_TAP_COUNTS = 1; 50 constexpr float DEFAULT_PROGRESS_TOTAL = 100.0f; 51 52 enum class ResourceType : uint32_t { 53 COLOR = 10001, 54 FLOAT, 55 STRING, 56 PLURAL, 57 BOOLEAN, 58 INTARRAY, 59 INTEGER, 60 PATTERN, 61 STRARRAY, 62 MEDIA = 20000, 63 RAWFILE = 30000 64 }; 65 66 static std::vector<std::pair<int32_t, RefPtr<ResourceObject>>> DEFAULT_RESOURCE_PAIR_ARRAY; 67 68 enum class JSCallbackInfoType { STRING, NUMBER, OBJECT, BOOLEAN, FUNCTION }; 69 70 struct LocalizedCalcDimension { 71 std::optional<CalcDimension> start; 72 std::optional<CalcDimension> end; 73 std::optional<CalcDimension> top; 74 std::optional<CalcDimension> bottom; 75 RefPtr<ResourceObject> leftResObj; 76 RefPtr<ResourceObject> rightResObj; 77 RefPtr<ResourceObject> topResObj; 78 RefPtr<ResourceObject> bottomResObj; 79 }; 80 81 struct CommonCalcDimension { 82 std::optional<CalcDimension> left; 83 std::optional<CalcDimension> right; 84 std::optional<CalcDimension> top; 85 std::optional<CalcDimension> bottom; 86 RefPtr<ResourceObject> leftResObj; 87 RefPtr<ResourceObject> rightResObj; 88 RefPtr<ResourceObject> topResObj; 89 RefPtr<ResourceObject> bottomResObj; 90 }; 91 92 struct LocalizedColor { 93 std::optional<Color> start; 94 std::optional<Color> end; 95 std::optional<Color> top; 96 std::optional<Color> bottom; 97 RefPtr<ResourceObject> startResObj; 98 RefPtr<ResourceObject> endResObj; 99 RefPtr<ResourceObject> topResObj; 100 RefPtr<ResourceObject> bottomResObj; 101 }; 102 103 struct CommonColor { 104 std::optional<Color> left; 105 std::optional<Color> right; 106 std::optional<Color> top; 107 std::optional<Color> bottom; 108 RefPtr<ResourceObject> leftResObj; 109 RefPtr<ResourceObject> rightResObj; 110 RefPtr<ResourceObject> topResObj; 111 RefPtr<ResourceObject> bottomResObj; 112 }; 113 114 RefPtr<ResourceObject> GetResourceObject(const JSRef<JSObject>& jsObj); 115 RefPtr<ResourceObject> GetResourceObjectByBundleAndModule(const JSRef<JSObject>& jsObj); 116 RefPtr<ResourceWrapper> CreateResourceWrapper(const JSRef<JSObject>& jsObj, RefPtr<ResourceObject>& resourceObject); 117 RefPtr<ResourceWrapper> CreateResourceWrapper(); 118 using PopupOnWillDismiss = std::function<void(int32_t)>; 119 class JSViewAbstract { 120 public: 121 static RefPtr<ResourceObject> GetResourceObject(const JSRef<JSObject>& jsObj); 122 static void SetPixelRoundMode(const JSCallbackInfo& info); 123 static uint8_t GetPixelRoundMode(); 124 static void GetAngle( 125 const std::string& key, const std::unique_ptr<JsonValue>& jsonValue, std::optional<float>& angle); 126 static void GetJsAngle( 127 int32_t key, const JSRef<JSVal>& jsValue, std::optional<float>& angle); 128 static void GetJsAngleWithDefault( 129 int32_t key, const JSRef<JSObject>& jsObj, std::optional<float>& angle, float defaultValue); 130 static inline void CheckAngle(std::optional<float>& angle); 131 static void GetPerspective(const std::string& key, const std::unique_ptr<JsonValue>& jsonValue, float& perspective); 132 static void GetJsPerspective(int32_t key, const JSRef<JSObject>& jsValue, float& perspective); 133 static void GetGradientColorStops(Gradient& gradient, const std::unique_ptr<JsonValue>& jsonValue); 134 static void GetFractionStops( 135 std::vector<std::pair<float, float>>& fractionStops, const JSRef<JSVal>& array); 136 static void NewGetGradientColorStops(NG::Gradient& gradient, const std::unique_ptr<JsonValue>& jsonValue); 137 static void NewGetJsGradientColorStops(NG::Gradient& gradient, const JSRef<JSVal>& colorStops, 138 const int32_t mapIdx = 0); 139 static void NewGetJsGradientColorStopsCheck(NG::Gradient& gradient, const JSRef<JSVal>& colorStops); 140 141 static void JsScale(const JSCallbackInfo& info); 142 static void SetTabBarSymbolOptionApply(const JSCallbackInfo& info, TabBarSymbol& symbolApply, 143 const JSRef<JSVal>& modifierNormalObj, const JSRef<JSVal>& modifierSelectedObj); 144 static void SetDragPreviewOptionApply(const JSCallbackInfo& info, NG::DragPreviewOption& previewOption); 145 static void SetDragNumberBadge(const JSCallbackInfo& info, NG::DragPreviewOption& option); 146 static void SetDefaultScale(); 147 static void JsScaleX(const JSCallbackInfo& info); 148 static void JsScaleY(const JSCallbackInfo& info); 149 static void JsOpacity(const JSCallbackInfo& info); 150 static void JsTranslate(const JSCallbackInfo& info); 151 static void SetDefaultTranslate(); 152 static void JsTranslateX(const JSCallbackInfo& info); 153 static void JsTranslateY(const JSCallbackInfo& info); 154 static void JsRotate(const JSCallbackInfo& info); 155 static void SetDefaultRotate(); 156 static void JsRotateX(const JSCallbackInfo& info); 157 static void JsRotateY(const JSCallbackInfo& info); 158 static void JsTransform(const JSCallbackInfo& info); 159 static void JsTransform3D(const JSCallbackInfo& info); 160 static void SetDefaultTransform(); 161 static void SetDefaultTransform3D(); 162 static void JsTransition(const JSCallbackInfo& info); 163 static void ParseDragPreviewConfig(const JSCallbackInfo& info, NG::DragDropInfo& dragPreviewInfo); 164 static void ParseDragPreviewValue(const JSCallbackInfo& info, NG::DragDropInfo& dragPreviewInfo); 165 static void ParseDragPreviewBuilderNode(const JSCallbackInfo& info, NG::DragDropInfo& dragPreviewInfo, 166 const JSRef<JSVal>& builder); 167 static void ParseDragInteractionOptions(const JSCallbackInfo& info, NG::DragPreviewOption& previewOption); 168 static NG::DragPreviewOption ParseDragPreviewOptions(const JSCallbackInfo& info); 169 static NG::TransitionOptions ParseJsTransition(const JSRef<JSObject>& jsObj); 170 static RefPtr<NG::ChainedTransitionEffect> ParseJsTransitionEffect(const JSCallbackInfo& info); 171 static void JsWidth(const JSCallbackInfo& info); 172 static void JsHeight(const JSCallbackInfo& info); 173 static void JsToolbar(const JSCallbackInfo& info); 174 static void JsBackgroundColor(const JSCallbackInfo& info); 175 static void JsBackgroundImage(const JSCallbackInfo& info); 176 static void JsBackgroundImageSize(const JSCallbackInfo& info); 177 static void JsBackgroundImagePosition(const JSCallbackInfo& info); 178 static void ParseBlurOption(const JSRef<JSObject>& jsBlurOption, BlurOption& blurOption); 179 static void ParseBackgroundImageOption(const JSCallbackInfo& jsOption, int32_t& repeatIndex, bool& syncMode); 180 static void ParseInactiveColor(const JSRef<JSObject>& jsOption, BlurStyleOption& styleOption); 181 static void ParseBlurStyleOption(const JSRef<JSObject>& jsOption, BlurStyleOption& styleOption); 182 static void ParseSysOptions(const JSRef<JSObject>& jsSysOptions, SysOptions& sysOptions); 183 static void JsBackgroundBlurStyle(const JSCallbackInfo& info); 184 static void JsBackgroundEffect(const JSCallbackInfo& info); 185 static void GetEffectOptionColor(const JSRef<JSObject>& jsOption, EffectOption& effectOption); 186 static void GetEffectOptionInactiveColorUpdate(const RefPtr<ResourceObject>& inactiveColorObj, 187 EffectOption& effectOption); 188 static void GetEffectOptionInactiveColor(const JSRef<JSObject>& jsOption, EffectOption& effectOption); 189 static void ParseEffectOption(const JSRef<JSObject>& jsObj, EffectOption& effectOption); 190 static void ParseBrightnessOption(const JSRef<JSObject>& jsObj, BrightnessOption& brightnessOption); 191 static void JsForegroundBlurStyle(const JSCallbackInfo& info); 192 static void JsForegroundEffect(const JSCallbackInfo& info); 193 static void JsSphericalEffect(const JSCallbackInfo& info); 194 static void GetPixelStretchEffectLeftObj( 195 const JSRef<JSObject>& jsObject, CalcDimension& left, PixStretchEffectOption& option); 196 static void GetPixelStretchEffectRightObj( 197 const JSRef<JSObject>& jsObject, CalcDimension& right, PixStretchEffectOption& option); 198 static void GetPixelStretchEffectTopObj( 199 const JSRef<JSObject>& jsObject, CalcDimension& top, PixStretchEffectOption& option); 200 static void GetPixelStretchEffectBottomObj( 201 const JSRef<JSObject>& jsObject, CalcDimension& bottom, PixStretchEffectOption& option); 202 static void JsPixelStretchEffect(const JSCallbackInfo& info); 203 static bool InitPixStretchEffect( 204 CalcDimension& left, CalcDimension& right, CalcDimension& top, CalcDimension bottom); 205 static void JsLightUpEffect(const JSCallbackInfo& info); 206 static void JsBackground(const JSCallbackInfo& info); 207 static void JsBindMenu(const JSCallbackInfo& info); 208 static void JsBindContextMenu(const JSCallbackInfo& info); 209 static void MenuDefaultParam(NG::MenuParam& menuParam); 210 static void ParseContentMenuCommonParam( 211 const JSCallbackInfo& info, const JSRef<JSObject>& menuObj, NG::MenuParam& menuParam); 212 static int32_t OpenMenu(NG::MenuParam& menuParam, const RefPtr<NG::UINode>& customNode, const int32_t& targetId); 213 static int32_t UpdateMenu(const NG::MenuParam& menuParam, const RefPtr<NG::UINode>& customNode); 214 static int32_t CloseMenu(const RefPtr<NG::UINode>& customNode); 215 static void JsBindContentCover(const JSCallbackInfo& info); 216 static void ParseModalStyle(const JSRef<JSObject>& paramObj, NG::ModalStyle& modalStyle); 217 static void ParseModalTransition(const JSRef<JSVal>& jsValue, 218 std::optional<NG::ModalTransition>& modalTransition, 219 NG::ModalTransition defaultTransition = NG::ModalTransition::DEFAULT); 220 static void ParseEnableSafeArea(const JSRef<JSObject>& paramObj, NG::ContentCoverParam& contentCoverParam); 221 static void JsBindSheet(const JSCallbackInfo& info); 222 static bool CheckJSCallbackInfo( 223 const std::string& callerName, const JSRef<JSVal>& tmpInfo, std::vector<JSCallbackInfoType>& infoTypes); 224 static RefPtr<NG::ChainedTransitionEffect> ParseChainedTransition( 225 const JSRef<JSObject>& object, const JSExecutionContext& context, const RefPtr<NG::FrameNode> node = nullptr); 226 static bool ParseSheetIsShow( 227 const JSCallbackInfo& info, const std::string& name, std::function<void(const std::string&)>& callback); 228 static void ParseSheetStyle( 229 const JSRef<JSObject>& paramObj, NG::SheetStyle& sheetStyle, bool isPartialUpdate = false); 230 static NG::SheetEffectEdge ParseSheetEffectEdge(const JSRef<JSObject>& paramObj); 231 static void ParseBindSheetBorderRadius(const JSRef<JSVal>& args, NG::SheetStyle& sheetStyle); 232 static void ParseBindSheetBorderRadius(const JSRef<JSVal>& args, 233 NG::SheetStyle& sheetStyle, RefPtr<ResourceObject>& resourceObj); 234 static bool ParseBindSheetBorderRadiusProps(const JSRef<JSVal>& args, NG::BorderRadiusProperty& radius); 235 static std::optional<CalcDimension> ParseBindSheetBorderRadiusProp(const JSRef<JSObject>& object, 236 const char* prop, RefPtr<ResourceObject>& resourceObj); 237 static bool ParseSheetMode(const std::string heightStr, NG::SheetHeight& detent); 238 static bool ParseSheetDetents(const JSRef<JSVal>& args, 239 std::vector<NG::SheetHeight>& sheetDetents, NG::SheetStyle& sheetStyle); 240 static bool ParseSheetHeight(const JSRef<JSVal>& args, NG::SheetHeight& detent, bool isReset); 241 static bool ParseSheetHeight(const JSRef<JSVal>& args, 242 NG::SheetHeight& detent, bool isReset, RefPtr<ResourceObject>& resObj); 243 static bool ParseSheetBackgroundBlurStyle(const JSRef<JSVal>& args, BlurStyleOption& blurStyleOptions); 244 static bool ParseSheetLevel(const JSRef<JSVal>& args, NG::SheetLevel& sheetLevel); 245 static void ParseCallback(const JSRef<JSObject>& paramObj, 246 std::function<void(const float)>& callbackDidChange, const char* prop); 247 static void ParseLifeCycleCallback(const JSRef<JSObject>& paramObj, std::function<void()>& lifeCycleCallBack, 248 const char* prop); 249 static void ParseSpringBackCallback(const JSRef<JSObject>& paramObj, 250 std::function<void()>& sheetSpringBack, const char* prop); 251 static void ParseSheetCallback(const JSRef<JSObject>& paramObj, std::function<void()>& onAppear, 252 std::function<void()>& onDisappear, std::function<void()>& shouldDismiss, 253 std::function<void(const int32_t info)>& onWillDismiss, std::function<void()>& onWillAppear, 254 std::function<void()>& onWillDisappear, std::function<void(const float)>& onHeightDidChange, 255 std::function<void(const float)>& onDetentsDidChange, std::function<void(const float)>& onWidthDidChange, 256 std::function<void(const float)>& onTypeDidChange, std::function<void()>& sheetSpringBack); 257 static void ParseSheetTitle(const JSRef<JSObject>& paramObj, NG::SheetStyle& sheetStyle, 258 std::function<void()>& titleBuilderFunction); 259 static panda::Local<panda::JSValueRef> JsDismissSheet(panda::JsiRuntimeCallInfo* runtimeCallInfo); 260 static panda::Local<panda::JSValueRef> JsDismissContentCover(panda::JsiRuntimeCallInfo* runtimeCallInfo); 261 static panda::Local<panda::JSValueRef> JsSheetSpringBack(panda::JsiRuntimeCallInfo* runtimeCallInfo); 262 static void ParseModalTransitonEffect( 263 const JSRef<JSObject>& paramObj, NG::ContentCoverParam& contentCoverParam, const JSExecutionContext& context); 264 static void ParseOverlayCallback(const JSRef<JSObject>& paramObj, std::function<void()>& onAppear, 265 std::function<void()>& onDisappear, std::function<void()>& onWillAppear, std::function<void()>& onWillDisappear, 266 std::function<void(const int32_t& info)>& onWillDismiss); 267 static void JsBorderColor(const JSCallbackInfo& info); 268 static void ParseBorderColor(const JSRef<JSVal>& args); 269 static void JsPadding(const JSCallbackInfo& info); 270 static void JsMargin(const JSCallbackInfo& info); 271 static void SetSafeAreaPadding(const JSCallbackInfo& info); 272 static void ParseMarginOrPadding(const JSCallbackInfo& info, EdgeType type); 273 static void ParseMarginOrPaddingCorner(JSRef<JSObject> obj, std::optional<CalcDimension>& top, 274 std::optional<CalcDimension>& bottom, std::optional<CalcDimension>& left, std::optional<CalcDimension>& right); 275 static void ParseMarginOrPaddingCorner(JSRef<JSObject> obj, CommonCalcDimension& commonCalcDimension); 276 static void ParseLocalizedMarginOrLocalizedPaddingCorner( 277 const JSRef<JSObject>& object, LocalizedCalcDimension& localizedCalcDimension); 278 static bool ParseCommonMarginOrPaddingCorner( 279 const JSRef<JSObject>& object, CommonCalcDimension& commonCalcDimension); 280 static void GetBorderRadiusByLengthMetrics(const char* key, JSRef<JSObject>& object, CalcDimension& radius); 281 static void JsOutline(const JSCallbackInfo& info); 282 static void JsOutlineWidth(const JSCallbackInfo& info); 283 static void JsOutlineColor(const JSCallbackInfo& info); 284 static void JsOutlineStyle(const JSCallbackInfo& info); 285 static void JsOutlineRadius(const JSCallbackInfo& info); 286 static void JsBorder(const JSCallbackInfo& info); 287 static void JsBorderWidth(const JSCallbackInfo& info); 288 static void ParseBorderWidth(const JSRef<JSVal>& args); 289 static void JsBorderRadius(const JSCallbackInfo& info); 290 static void ParseBorderRadius(const JSRef<JSVal>& args); 291 static void JsBorderStyle(const JSCallbackInfo& info); 292 static void ParseBorderStyle(const JSRef<JSVal>& args); 293 static void ParseDashGap(const JSRef<JSVal>& args); 294 static void ParseDashWidth(const JSRef<JSVal>& args); 295 static void JsBorderImage(const JSCallbackInfo& info); 296 static void ParseBorderImageRepeat(const JSRef<JSVal>& args, RefPtr<BorderImage>& borderImage); 297 static void ParseBorderImageOutset(const JSRef<JSVal>& args, RefPtr<BorderImage>& borderImage); 298 static void ParseBorderImageSlice(const JSRef<JSVal>& args, RefPtr<BorderImage>& borderImage); 299 static void ParseBorderImageWidth(const JSRef<JSVal>& args, RefPtr<BorderImage>& borderImage); 300 static bool ParseBorderImageDimension( 301 const JSRef<JSVal>& args, BorderImage::BorderImageOption& borderImageDimension); 302 static void ParseBorderImageLengthMetrics( 303 const JSRef<JSObject>& object, LocalizedCalcDimension& localizedCalcDimension); 304 static void UpdateGradientWithDirection(NG::Gradient& lineGradient, NG::GradientDirection direction); 305 static void ParseBorderImageLinearGradient(const JSRef<JSVal>& args, uint8_t& bitset); 306 static void JsUseEffect(const JSCallbackInfo& info); 307 static void JsUseShadowBatching(const JSCallbackInfo& info); 308 static void JsBlur(const JSCallbackInfo& info); 309 static void JsColorBlend(const JSCallbackInfo& info); 310 static void JsBackdropBlur(const JSCallbackInfo& info); 311 static void JsLinearGradientBlur(const JSCallbackInfo& info); 312 static void JsBackgroundBrightness(const JSCallbackInfo& info); 313 static void JsBackgroundBrightnessInternal(const JSCallbackInfo& info); 314 static void JsForegroundBrightness(const JSCallbackInfo& info); 315 static void JsWindowBlur(const JSCallbackInfo& info); 316 static void JsFlexBasis(const JSCallbackInfo& info); 317 static void JsFlexGrow(const JSCallbackInfo& info); 318 static void JsFlexShrink(const JSCallbackInfo& info); 319 static void JsAlignSelf(const JSCallbackInfo& info); 320 static void JsDisplayPriority(const JSCallbackInfo& info); 321 static void JsSharedTransition(const JSCallbackInfo& info); 322 static void JsGeometryTransition(const JSCallbackInfo& info); 323 static void JsGridSpan(const JSCallbackInfo& Info); 324 static void JsGridOffset(const JSCallbackInfo& info); 325 static void JsUseSizeType(const JSCallbackInfo& Info); 326 static void JsHoverEffect(const JSCallbackInfo& info); 327 static void JsOnMouse(const JSCallbackInfo& info); 328 static void JsOnAxisEvent(const JSCallbackInfo& info); 329 static void JsOnHover(const JSCallbackInfo& info); 330 static void JsOnHoverMove(const JSCallbackInfo& info); 331 static void JsOnAccessibilityHover(const JSCallbackInfo& info); 332 static void JsOnClick(const JSCallbackInfo& info); 333 static void JsOnGestureJudgeBegin(const JSCallbackInfo& args); 334 static void JsOnTouchIntercept(const JSCallbackInfo& info); 335 static void JsShouldBuiltInRecognizerParallelWith(const JSCallbackInfo& info); 336 static void JsOnGestureRecognizerJudgeBegin(const JSCallbackInfo& info); 337 static void JsOnTouchTestDone(const JSCallbackInfo& info); 338 static void JsClickEffect(const JSCallbackInfo& info); 339 static void JsRestoreId(int32_t restoreId); 340 static void JsOnVisibleAreaChange(const JSCallbackInfo& info); 341 static void JsOnVisibleAreaApproximateChange(const JSCallbackInfo& info); 342 static void JsHitTestBehavior(const JSCallbackInfo& info); 343 static void JsOnChildTouchTest(const JSCallbackInfo& info); 344 static void JsForegroundColor(const JSCallbackInfo& info); 345 static void JsSetFreeze(const JSCallbackInfo& info); 346 static void ParseSheetSubWindowValue(const JSRef<JSObject>& paramObj, NG::SheetStyle& sheetStyle); 347 348 // outer border 349 static void ParseOuterBorderColor(const JSRef<JSVal>& args); 350 static void ParseOuterBorderWidth(const JSRef<JSVal>& args); 351 static void ParseOuterBorderWidthNew(const JSRef<JSVal>& args); 352 static void ParseOuterBorderRadius(const JSRef<JSVal>& args); 353 static void ParseOuterBorderStyle(const JSRef<JSVal>& args); 354 static void ParseEdgeOutlineWidthLeft(const JSRef<JSObject>& object, NG::BorderWidthProperty& borderWidth); 355 static void ParseEdgeOutlineWidthRight(const JSRef<JSObject>& object, NG::BorderWidthProperty& borderWidth); 356 static void ParseEdgeOutlineWidthTop(const JSRef<JSObject>& object, NG::BorderWidthProperty& borderWidth); 357 static void ParseEdgeOutlineWidthBottom(const JSRef<JSObject>& object, NG::BorderWidthProperty& borderWidth); 358 359 // response region 360 static void JsResponseRegion(const JSCallbackInfo& info); 361 static bool ParseJsResponseRegionArray(const JSRef<JSVal>& jsValue, std::vector<DimensionRect>& result); 362 static bool ParseJsDimensionRect(const JSRef<JSVal>& jsValue, DimensionRect& result); 363 364 // for dynamic $r 365 static void CompleteResourceObject(JSRef<JSObject>& jsObj); 366 static void CompleteResourceObjectWithBundleName( 367 JSRef<JSObject>& jsObj, std::string& bundleName, std::string& moduleName, int32_t& resId); 368 static bool ConvertResourceType(const std::string& typeName, ResourceType& resType); 369 static bool ParseDollarResource(const JSRef<JSVal>& jsValue, std::string& targetModule, ResourceType& resType, 370 std::string& resName, bool isParseType); 371 372 // mouse response response region 373 static void JsMouseResponseRegion(const JSCallbackInfo& info); 374 375 static bool ParseJsLengthNG( 376 const JSRef<JSVal>& jsValue, NG::CalcLength& result, DimensionUnit defaultUnit, bool isSupportPercent = true); 377 static bool ParseJsLengthNG(const JSRef<JSVal>& jsValue, NG::CalcLength& result, DimensionUnit defaultUnit, 378 RefPtr<ResourceObject>& rsourceObj, bool isSupportPercent = true); 379 static bool ParseJsLengthVpNG(const JSRef<JSVal>& jsValue, NG::CalcLength& result, bool isSupportPercent = true); 380 static bool ParseJsLengthVpNG(const JSRef<JSVal>& jsValue, NG::CalcLength& result, 381 RefPtr<ResourceObject>& resObj, bool isSupportPercent = true); 382 383 // for number and string with no unit, use default dimension unit. 384 static bool ParseJsDimension(const JSRef<JSVal>& jsValue, CalcDimension& result, DimensionUnit defaultUnit); 385 static bool ParseJsDimension(const JSRef<JSVal>& jsValue, CalcDimension& result, DimensionUnit defaultUnit, 386 RefPtr<ResourceObject>& resObj); 387 static bool ParseJsDimensionVp(const JSRef<JSVal>& jsValue, CalcDimension& result); 388 static bool ParseJsDimensionVp(const JSRef<JSVal>& jsValue, CalcDimension& result, 389 RefPtr<ResourceObject>& resObj); 390 static bool ParseJsDimensionFp(const JSRef<JSVal>& jsValue, CalcDimension& result); 391 static bool ParseJsDimensionFp(const JSRef<JSVal>& jsValue, CalcDimension& result, 392 RefPtr<ResourceObject>& resObj); 393 static bool ParseJsDimensionPx(const JSRef<JSVal>& jsValue, CalcDimension& result); 394 static bool ParseJsDimensionPx(const JSRef<JSVal>& jsValue, CalcDimension& result, 395 RefPtr<ResourceObject>& resObj); 396 static bool ParseLengthMetricsToDimension(const JSRef<JSVal>& jsValue, CalcDimension& result); 397 static bool ParseLengthMetricsToDimension( 398 const JSRef<JSVal>& jsValue, CalcDimension& result, RefPtr<ResourceObject>& resObj); 399 static bool ParseLengthMetricsToPositiveDimension(const JSRef<JSVal>& jsValue, CalcDimension& result); 400 static bool ParseLengthMetricsToPositiveDimension( 401 const JSRef<JSVal>& jsValue, CalcDimension& result, RefPtr<ResourceObject>& resObj); 402 static bool ParseColorMetricsToColor(const JSRef<JSVal>& jsValue, Color& result); 403 static bool ParseColorMetricsToColor(const JSRef<JSVal>& jsValue, Color& result, RefPtr<ResourceObject>& resObj); 404 static bool ParseJsDouble(const JSRef<JSVal>& jsValue, double& result); 405 static bool ParseJsDouble(const JSRef<JSVal>& jsValue, double& result, RefPtr<ResourceObject>& resObj); 406 static bool ParseJsInt32(const JSRef<JSVal>& jsValue, int32_t& result); 407 static bool ParseJsColorFromResource(const JSRef<JSVal>& jsValue, Color& result, RefPtr<ResourceObject>& resObj); 408 static bool ParseJsObjColorFromResource(const JSRef<JSObject> &jsObj, Color& result, 409 RefPtr<ResourceObject>& resObj); 410 static bool ParseJsColor(const JSRef<JSVal>& jsValue, Color& result); 411 static bool ParseJsColor(const JSRef<JSVal>& jsValue, Color& result, 412 RefPtr<ResourceObject>& resObj); 413 static bool ParseJsColor(const JSRef<JSVal>& jsValue, Color& result, const Color& defaultColor); 414 static bool ParseJsColor(const JSRef<JSVal>& jsValue, Color& result, 415 const Color& defaultColor, RefPtr<ResourceObject>& resObj); 416 static bool ParseJsColorStrategy(const JSRef<JSVal>& jsValue, ForegroundColorStrategy& strategy); 417 static bool ParseJsShadowColorStrategy(const JSRef<JSVal>& jsValue, ShadowColorStrategy& strategy); 418 static bool ParseJsFontFamilies(const JSRef<JSVal>& jsValue, std::vector<std::string>& result); 419 static bool ParseJsFontFamilies(const JSRef<JSVal>& jsValue, std::vector<std::string>& result, 420 RefPtr<ResourceObject>& resObj); 421 422 static bool ParseJsDimensionNG( 423 const JSRef<JSVal>& jsValue, CalcDimension& result, DimensionUnit defaultUnit, bool isSupportPercent = true); 424 static bool ParseJsDimensionNG(const JSRef<JSVal>& jsValue, CalcDimension& result, 425 DimensionUnit defaultUnit, RefPtr<ResourceObject>& resObj, bool isSupportPercent = true); 426 static bool ParseJsDimensionVpNG(const JSRef<JSVal>& jsValue, CalcDimension& result, bool isSupportPercent = true); 427 static bool ParseJsDimensionVpNG(const JSRef<JSVal>& jsValue, CalcDimension& result, 428 RefPtr<ResourceObject>& resObj, bool isSupportPercent = true); 429 static bool ParseJsDimensionFpNG(const JSRef<JSVal>& jsValue, CalcDimension& result, bool isSupportPercent = true); 430 static bool ParseJsDimensionFpNG(const JSRef<JSVal>& jsValue, CalcDimension& result, 431 RefPtr<ResourceObject>& resObj, bool isSupportPercent = true); 432 static bool ParseJsLengthMetricsVp(const JSRef<JSObject>& jsObj, CalcDimension& result); 433 static bool ParseJsLengthMetricsVpWithResObj(const JSRef<JSObject>& jsObj, CalcDimension& result, 434 RefPtr<ResourceObject>& rsourceObj); 435 static bool ParseJsonDimension(const std::unique_ptr<JsonValue>& jsonValue, CalcDimension& result, 436 DimensionUnit defaultUnit, bool checkIllegal = false); 437 static bool ParseJsonDimensionVp( 438 const std::unique_ptr<JsonValue>& jsonValue, CalcDimension& result, bool checkIllegal = false); 439 static bool ParseJsonDouble(const std::unique_ptr<JsonValue>& jsonValue, double& result); 440 static bool ParseJsonColor(const std::unique_ptr<JsonValue>& jsonValue, Color& result); 441 static bool ParseJsString(const JSRef<JSVal>& jsValue, std::string& result); 442 static bool ParseJsString(const JSRef<JSVal>& jsValue, std::string& result, 443 RefPtr<ResourceObject>& resObj); 444 static bool ParseJsString(const JSRef<JSVal>& jsValue, std::u16string& result); 445 static bool ParseJsString(const JSRef<JSVal>& jsValue, std::u16string& result, 446 RefPtr<ResourceObject>& resObj); 447 static bool ParseJsMedia(const JSRef<JSVal>& jsValue, std::string& result); 448 static bool ParseJsMedia(const JSRef<JSVal>& jsValue, std::string& result, 449 RefPtr<ResourceObject>& resObj); 450 static bool ParseJsMediaWithBundleName(const JSRef<JSVal>& jsValue, std::string& result, std::string& bundleName, 451 std::string& moduleName, int32_t& resId); 452 static bool ParseJsMediaWithBundleName(const JSRef<JSVal>& jsValue, std::string& result, 453 std::string& bundleName, std::string& moduleName, int32_t& resId, RefPtr<ResourceObject>& resObj); 454 static bool ParseResourceToDouble(const JSRef<JSVal>& jsValue, double& result, 455 RefPtr<ResourceObject>& resObj); 456 static bool ParseJsBool(const JSRef<JSVal>& jsValue, bool& result); 457 static bool ParseJsBool(const JSRef<JSVal>& jsValue, bool& result, 458 RefPtr<ResourceObject>& resObj); 459 static bool ParseJsInteger(const JSRef<JSVal>& jsValue, uint32_t& result); 460 static bool ParseJsInteger(const JSRef<JSVal>& jsValue, int32_t& result); 461 static bool ParseJsIntegerArray(const JSRef<JSVal>& jsValue, std::vector<uint32_t>& result); 462 static bool ParseJsIntegerArray(const JSRef<JSVal>& jsValue, std::vector<uint32_t>& result, 463 RefPtr<ResourceObject>& resObj, std::vector<RefPtr<ResourceObject>>& resObjArray); 464 static bool ParseJsStrArray(const JSRef<JSVal>& jsValue, std::vector<std::string>& result); 465 static bool ParseJsStrArray(const JSRef<JSVal>& jsValue, std::vector<std::string>& result, 466 RefPtr<ResourceObject>& resObj, std::vector<RefPtr<ResourceObject>>& resObjArray); 467 static bool ParseJsLengthMetricsArray(const JSRef<JSVal>& jsValue, std::vector<Dimension>& result); 468 static bool ParseJsLengthMetricsArray(const JSRef<JSVal>& jsValue, std::vector<Dimension>& result, 469 std::vector<RefPtr<ResourceObject>>& resObjArray); 470 static bool IsGetResourceByName(const JSRef<JSObject>& jsObj); 471 static bool GetJsMediaBundleInfo(const JSRef<JSVal>& jsValue, std::string& bundleName, std::string& moduleName); 472 static void ParseShadowPropsUpdate(const JSRef<JSObject>& jsObj, double& radius, Shadow& shadow); 473 static bool ParseShadowProps(const JSRef<JSVal>& jsValue, Shadow& shadow, const bool configChangePerform = false); 474 static void ParseShadowOffsetXY(const JSRef<JSObject>& jsObj, Shadow& shadow); 475 static bool GetShadowFromTheme(ShadowStyle shadowStyle, Shadow& shadow, const bool configChangePerform = false); 476 static bool ParseJsResource(const JSRef<JSVal>& jsValue, CalcDimension& result); 477 static bool ParseJsResource(const JSRef<JSVal>& jsValue, CalcDimension& result, 478 RefPtr<ResourceObject>& resObj); 479 static bool ParseDataDetectorConfig(const JSCallbackInfo& info, TextDetectConfig& textDetectConfig); 480 static bool ParseAIEntityColor(const JSRef<JSObject>& obj, TextDetectConfig& textDetectConfig); 481 static bool ParseInvertProps(const JSRef<JSVal>& jsValue, InvertVariant& invert); 482 static std::pair<CalcDimension, CalcDimension> ParseSize(const JSCallbackInfo& info); 483 static void JsUseAlign(const JSCallbackInfo& info); 484 static void JsZIndex(const JSCallbackInfo& info); 485 static void SetDirection(const std::string& dir); 486 static void JsSize(const JSCallbackInfo& info); 487 static void JsConstraintSize(const JSCallbackInfo& info); 488 static void JsLayoutPriority(const JSCallbackInfo& info); 489 static void JsLayoutWeight(const JSCallbackInfo& info); 490 491 static void JsAlign(const JSCallbackInfo& info); 492 static void JsLayoutGravity(const JSCallbackInfo& info); 493 static void JsPosition(const JSCallbackInfo& info); 494 static void JsMarkAnchor(const JSCallbackInfo& info); 495 static void JsOffset(const JSCallbackInfo& info); 496 static void JsEnabled(const JSCallbackInfo& info); 497 static void JsAspectRatio(const JSCallbackInfo& info); 498 static void JsOverlay(const JSCallbackInfo& info); 499 static Alignment ParseAlignment(int32_t align); 500 static LayoutCalPolicy ParseLayoutPolicy(const std::string& layoutPolicy); 501 static Alignment ParseLocalizedAlignment(std::string localizedAlignment); 502 static void JsAlignRules(const JSCallbackInfo& info); 503 static void JsChainMode(const JSCallbackInfo& info); 504 505 static void SetVisibility(const JSCallbackInfo& info); 506 static void Pop(); 507 508 static void JsSetDraggable(bool draggable); 509 static void JsSetDragPreviewOptions(const JSCallbackInfo& info); 510 static void JsOnDragStart(const JSCallbackInfo& info); 511 static bool ParseAndUpdateDragItemInfo(const JSRef<JSVal>& info, NG::DragDropBaseInfo& dragInfo); 512 static RefPtr<AceType> ParseDragNode(const JSRef<JSVal>& info); 513 static void JsOnDragEnter(const JSCallbackInfo& info); 514 static void JsOnDragSpringLoading(const JSCallbackInfo& info); 515 static void JsOnDragEnd(const JSCallbackInfo& info); 516 static void JsOnDragMove(const JSCallbackInfo& info); 517 static void JsOnDragLeave(const JSCallbackInfo& info); 518 static void JsOnPreDrag(const JSCallbackInfo& info); 519 static void JsOnDrop(const JSCallbackInfo& info); 520 static void JsOnAreaChange(const JSCallbackInfo& info); 521 static void JsOnSizeChange(const JSCallbackInfo& info); 522 523 static void JsLinearGradient(const JSCallbackInfo& info); 524 static void JsRadialGradient(const JSCallbackInfo& info); 525 static void JsSweepGradient(const JSCallbackInfo& info); 526 static void NewJsLinearGradient(const JSCallbackInfo& info, NG::Gradient& gradient); 527 static void NewLinearGradient(const JSRef<JSObject>& jsObj, NG::Gradient& gradient); 528 static void SetGradientDirection(NG::Gradient& newGradient, const GradientDirection& direction); 529 static void NewJsRadialGradient(const JSCallbackInfo& info, NG::Gradient& gradient); 530 static void NewJsSweepGradient(const JSCallbackInfo& info, NG::Gradient& gradient); 531 static void NewRadialGradient(const JSRef<JSObject>& jsObj, NG::Gradient& gradient); 532 static void ParseSweepGradientPartly(const JSRef<JSObject>& obj, NG::Gradient& newGradient); 533 static void JsMotionPath(const JSCallbackInfo& info); 534 static void JsMotionBlur(const JSCallbackInfo& info); 535 static void JsShadow(const JSCallbackInfo& info); 536 static void JsBlendMode(const JSCallbackInfo& info); 537 static void JsAdvancedBlendMode(const JSCallbackInfo& info); 538 static void JsGrayScale(const JSCallbackInfo& info); 539 static void JsBrightness(const JSCallbackInfo& info); 540 static void JsContrast(const JSCallbackInfo& info); 541 static void JsSaturate(const JSCallbackInfo& info); 542 static void JsSepia(const JSCallbackInfo& info); 543 static void JsInvert(const JSCallbackInfo& info); 544 static void JsSystemBarEffect(const JSCallbackInfo& info); 545 static void JsHueRotate(const JSCallbackInfo& info); 546 547 static void JsClip(const JSCallbackInfo& info); 548 static void JsClipShape(const JSCallbackInfo& info); 549 550 static void ParseProgressMaskResObj(const JSRef<JSVal>& jColor, Color& colorVal, 551 RefPtr<NG::ProgressMaskProperty>& progressMask); 552 static void ParseJsMaskProperty(const JSRef<JSObject>& paramObject); 553 static void JsMask(const JSCallbackInfo& info); 554 static void JsMaskShape(const JSCallbackInfo& info); 555 556 static void JsKey(const std::string& key); 557 static void JsId(const JSCallbackInfo& info); 558 559 static void JsFocusable(const JSCallbackInfo& info); 560 static void JsTabStop(const JSCallbackInfo& info); 561 static void JsNextFocus(const JSCallbackInfo& info); 562 static void JsFocusBox(const JSCallbackInfo& info); 563 static void JsOnFocusMove(const JSCallbackInfo& args); 564 static void JsOnKeyEvent(const JSCallbackInfo& args); 565 static void JsDispatchKeyEvent(const JSCallbackInfo& args); 566 static void JsOnFocus(const JSCallbackInfo& args); 567 static void JsOnBlur(const JSCallbackInfo& args); 568 static void JsTabIndex(const JSCallbackInfo& info); 569 static void JsFocusOnTouch(const JSCallbackInfo& info); 570 static void JsDefaultFocus(const JSCallbackInfo& info); 571 static void JsGroupDefaultFocus(const JSCallbackInfo& info); 572 static void JsDebugLine(const JSCallbackInfo& info); 573 static void JsOpacityPassThrough(const JSCallbackInfo& info); 574 static void JsTransitionPassThrough(const JSCallbackInfo& info); 575 static void JsKeyboardShortcut(const JSCallbackInfo& info); 576 static void JsOnFocusAxisEvent(const JSCallbackInfo& args); 577 static void JsOnCrownEvent(const JSCallbackInfo& args); 578 579 static void JsObscured(const JSCallbackInfo& info); 580 static void JsPrivacySensitive(const JSCallbackInfo& info); 581 582 static void JsAccessibilityGroup(const JSCallbackInfo& info); 583 static void JsAccessibilityText(const JSCallbackInfo& info); 584 static void JsAccessibilityTextHint(const std::string& text); 585 static void JsAccessibilityNextFocusId(const JSCallbackInfo& info); 586 static void JsAccessibilityDescription(const JSCallbackInfo& info); 587 static void JsAccessibilityImportance(const std::string& importance); 588 static void JsAccessibilityLevel(const std::string& level); 589 static void JsAccessibilitySelected(const JSCallbackInfo& info); 590 static void JsAccessibilityChecked(const JSCallbackInfo& info); 591 static void JsAccessibilityRole(const JSCallbackInfo& info); 592 static void JsOnAccessibilityFocus(const JSCallbackInfo& info); 593 static void JsOnAccessibilityActionIntercept(const JSCallbackInfo& info); 594 static void JsOnAccessibilityHoverTransparent(const JSCallbackInfo& info); 595 static void JsAccessibilityDefaultFocus(const JSCallbackInfo& info); 596 static void JsAccessibilityUseSamePage(const JSCallbackInfo& info); 597 static void JsAccessibilityScrollTriggerable(const JSCallbackInfo& info); 598 static void JsAccessibilityFocusDrawLevel(const JSCallbackInfo& info); 599 static void JsAllowDrop(const JSCallbackInfo& info); 600 static void JsDrawModifier(const JSCallbackInfo& info); 601 static void JsDragPreview(const JSCallbackInfo& info); 602 static void JsAccessibilityVirtualNode(const JSCallbackInfo& info); 603 604 static void ParseAccessibilityDescriptionJson(const std::string& description, 605 std::pair<bool, std::string>& autoEventPair, std::pair<bool, std::string>& descriptionPair); 606 607 static void JSCreateAnimatableProperty(const JSCallbackInfo& info); 608 static void JSUpdateAnimatableProperty(const JSCallbackInfo& info); 609 static void JSRenderGroup(const JSCallbackInfo& info); 610 static void JSRenderFit(const JSCallbackInfo& info); 611 static void JsExpandSafeArea(const JSCallbackInfo& info); 612 static void JsIgnoreLayoutSafeArea(const JSCallbackInfo& info); 613 static void JsGestureModifier(const JSCallbackInfo& info); 614 static void JsCustomProperty(const JSCallbackInfo& info); 615 616 static void JsBackgroundImageResizable(const JSCallbackInfo& info); 617 static void JsSetDragEventStrictReportingEnabled(const JSCallbackInfo& info); 618 static void JsEnableDropDisallowedBadge(const JSCallbackInfo& info); 619 static void JsCancelDataLoading(const std::string& key); 620 static void SetSymbolOptionApply(const JSCallbackInfo& info, 621 std::function<void(WeakPtr<NG::FrameNode>)>& symbolApply, const JSRef<JSVal> modifierObj); 622 static void SetTextStyleApply(const JSCallbackInfo& info, 623 std::function<void(WeakPtr<NG::FrameNode>)>& textStyleApply, const JSRef<JSVal>& modifierObj); 624 625 #ifndef WEARABLE_PRODUCT 626 static void JsBindPopup(const JSCallbackInfo& info); 627 static void JsBindTips(const JSCallbackInfo& info); 628 static void SetPopupDismiss( 629 const JSCallbackInfo& info, const JSRef<JSObject>& popupObj, const RefPtr<PopupParam>& popupParam); 630 static PopupOnWillDismiss ParsePopupCallback(const JSCallbackInfo& info, const JSRef<JSObject>& paramObj); 631 static panda::Local<panda::JSValueRef> JsDismissPopup(panda::JsiRuntimeCallInfo* runtimeCallInfo); 632 static void ParseContentPopupCommonParam( 633 const JSCallbackInfo& info, const JSRef<JSObject>& popupObj, const RefPtr<PopupParam>& popupParam); 634 static int32_t OpenPopup(const RefPtr<PopupParam>& param, const RefPtr<NG::UINode>& customNode); 635 static int32_t UpdatePopup(const RefPtr<PopupParam>& param, const RefPtr<NG::UINode>& customNode); 636 static int32_t ClosePopup(const RefPtr<NG::UINode>& customNode); 637 static int32_t GetPopupParam(RefPtr<PopupParam>& param, const RefPtr<NG::UINode>& customNode); 638 #endif 639 640 /** 641 * Binds the native methods to the the js object 642 */ 643 static void JSBind(BindingTarget globalObj); 644 static void JsNotifyDragStartRequest(const JSCallbackInfo& info); 645 static void ParseDialogCallback(const JSRef<JSObject>& paramObj, 646 std::function<void(const int32_t& info, const int32_t& instanceId)>& onWillDismiss); 647 static void ParseAppearDialogCallback(const JSCallbackInfo& info, DialogProperties& dialogProperties); 648 static panda::Local<panda::JSValueRef> JsDismissDialog(panda::JsiRuntimeCallInfo* runtimeCallInfo); 649 GetPipelineContext()650 static RefPtr<PipelineBase> GetPipelineContext() 651 { 652 auto container = Container::Current(); 653 CHECK_NULL_RETURN(container, nullptr); 654 return container->GetPipelineContext(); 655 } 656 657 template<typename T> GetTheme()658 static RefPtr<T> GetTheme() 659 { 660 auto pipelineContext = GetPipelineContext(); 661 CHECK_NULL_RETURN(pipelineContext, nullptr); 662 auto themeManager = pipelineContext->GetThemeManager(); 663 CHECK_NULL_RETURN(themeManager, nullptr); 664 auto node = NG::ViewStackProcessor::GetInstance()->GetMainFrameNode(); 665 return node ? themeManager->GetTheme<T>(node->GetThemeScopeId()) : themeManager->GetTheme<T>(); 666 } 667 668 template<typename T> GetTheme(int32_t themeScopeId)669 static RefPtr<T> GetTheme(int32_t themeScopeId) 670 { 671 auto pipelineContext = GetPipelineContext(); 672 CHECK_NULL_RETURN(pipelineContext, nullptr); 673 auto themeManager = pipelineContext->GetThemeManager(); 674 CHECK_NULL_RETURN(themeManager, nullptr); 675 return themeManager->GetTheme<T>(themeScopeId); 676 } 677 678 /** 679 * box properties setter 680 */ 681 static const Border& GetBorder(); 682 static void SetMarginTop(const JSCallbackInfo& info); 683 static void SetMarginBottom(const JSCallbackInfo& info); 684 static void SetMarginLeft(const JSCallbackInfo& info); 685 static void SetMarginRight(const JSCallbackInfo& info); 686 static void SetPaddingTop(const JSCallbackInfo& info); 687 static void SetPaddingBottom(const JSCallbackInfo& info); 688 static void SetPaddingLeft(const JSCallbackInfo& info); 689 static void SetPaddingRight(const JSCallbackInfo& info); 690 static void SetBorder(const Border& border); 691 static void SetBorderStyle(int32_t style); 692 static void SetBorderColor(const Color& color, const AnimationOption& option); 693 static void SetBorderWidth(const CalcDimension& value, const AnimationOption& option); 694 static void SetColorBlend(Color color); 695 static void SetLinearGradientBlur(NG::LinearGradientBlurPara blurPara); 696 static void SetDynamicLightUp(float rate, float lightUpDegree); 697 static void SetBgDynamicBrightness(BrightnessOption brightnessOption); 698 static void SetFgDynamicBrightness(BrightnessOption brightnessOption); 699 static void SetWindowBlur(float progress, WindowBlurStyle blurStyle); 700 static RefPtr<ThemeConstants> GetThemeConstants(const JSRef<JSObject>& jsObj = JSRef<JSObject>()); 701 static bool JsWidth(const JSRef<JSVal>& jsValue); 702 static bool JsHeight(const JSRef<JSVal>& jsValue); 703 static void GetBorderRadius(const char* key, JSRef<JSObject>& object, CalcDimension& radius); 704 static void GetBorderRadiusResObj(const char* key, JSRef<JSObject>& object, CalcDimension& radius, 705 RefPtr<ResourceObject>& resObj); 706 static void RegisterTextBackgroundStyleResource(TextBackgroundStyle& textBackgroundStyle, 707 RefPtr<ResourceObject>& resObjTopLeft, RefPtr<ResourceObject>& resObjTopRight, 708 RefPtr<ResourceObject>& resObjBottomLeft, RefPtr<ResourceObject>& resObjBottomRight); 709 static bool ParseAllBorderRadiuses(JSRef<JSObject>& object, CalcDimension& topLeft, CalcDimension& topRight, 710 CalcDimension& bottomLeft, CalcDimension& bottomRight); 711 static bool ParseAllBorderRadiuses(JSRef<JSObject>& object, CalcDimension& topLeft, CalcDimension& topRight, 712 CalcDimension& bottomLeft, CalcDimension& bottomRight, TextBackgroundStyle& textBackgroundStyle); 713 static void ParseAllBorderRadiuses(JSRef<JSObject>& object, NG::BorderRadiusProperty& borderRadius); 714 static void JsPointLight(const JSCallbackInfo& info); 715 716 template<typename T> ParseJsInteger(const JSRef<JSVal> & jsValue,T & result)717 static bool ParseJsInteger(const JSRef<JSVal>& jsValue, T& result) 718 { 719 RefPtr<ResourceObject> resObj; 720 return ParseJsInteger(jsValue, result, resObj); 721 } 722 723 template<typename T> ParseJsInteger(const JSRef<JSVal> & jsValue,T & result,RefPtr<ResourceObject> & resObj)724 static bool ParseJsInteger(const JSRef<JSVal>& jsValue, T& result, RefPtr<ResourceObject>& resObj) 725 { 726 if (jsValue->IsNumber()) { 727 result = jsValue->ToNumber<T>(); 728 return true; 729 } 730 731 if (!jsValue->IsObject()) { 732 return false; 733 } 734 JSRef<JSObject> jsObj = JSRef<JSObject>::Cast(jsValue); 735 CompleteResourceObject(jsObj); 736 int32_t resType = jsObj->GetPropertyValue<int32_t>("type", -1); 737 if (resType == -1) { 738 return false; 739 } 740 741 JSRef<JSVal> resId = jsObj->GetProperty("id"); 742 if (!resId->IsNumber()) { 743 return false; 744 } 745 746 resObj = SystemProperties::ConfigChangePerform() ? GetResourceObject(jsObj) : 747 GetResourceObjectByBundleAndModule(jsObj); 748 auto resourceWrapper = CreateResourceWrapper(jsObj, resObj); 749 auto resIdNum = resId->ToNumber<int32_t>(); 750 if (resIdNum == -1) { 751 if (!IsGetResourceByName(jsObj)) { 752 return false; 753 } 754 JSRef<JSVal> args = jsObj->GetProperty("params"); 755 if (!args->IsArray()) { 756 return false; 757 } 758 JSRef<JSArray> params = JSRef<JSArray>::Cast(args); 759 auto param = params->GetValueAt(0); 760 if (resType == static_cast<int32_t>(ResourceType::INTEGER)) { 761 result = static_cast<T>(resourceWrapper->GetIntByName(param->ToString())); 762 return true; 763 } 764 return false; 765 } 766 if (resType == static_cast<int32_t>(ResourceType::INTEGER)) { 767 result = static_cast<T>(resourceWrapper->GetInt(resId->ToNumber<uint32_t>())); 768 return true; 769 } 770 return false; 771 } 772 GetFunctionKeyName(FunctionKey functionkey)773 static std::string GetFunctionKeyName(FunctionKey functionkey) 774 { 775 std::map<FunctionKey, std::string> keyNameMap { 776 {FunctionKey::ESC, "ESC"}, 777 {FunctionKey::F1, "F1"}, 778 {FunctionKey::F2, "F2"}, 779 {FunctionKey::F3, "F3"}, 780 {FunctionKey::F4, "F4"}, 781 {FunctionKey::F5, "F5"}, 782 {FunctionKey::F6, "F6"}, 783 {FunctionKey::F7, "F7"}, 784 {FunctionKey::F8, "F8"}, 785 {FunctionKey::F9, "F9"}, 786 {FunctionKey::F10, "F10"}, 787 {FunctionKey::F11, "F11"}, 788 {FunctionKey::F12, "F12"}, 789 {FunctionKey::TAB, "TAB"}, 790 {FunctionKey::DPAD_UP, "DPAD_UP"}, 791 {FunctionKey::DPAD_DOWN, "DPAD_DOWN"}, 792 {FunctionKey::DPAD_LEFT, "DPAD_LEFT"}, 793 {FunctionKey::DPAD_RIGHT, "DPAD_RIGHT"} 794 }; 795 auto result = keyNameMap.find(functionkey); 796 return (result != keyNameMap.end()) ? result->second : std::string(); 797 } 798 799 static bool CheckColor(const JSRef<JSVal>& jsValue, Color& result, const char* componentName, const char* propName); 800 static bool CheckColor( 801 const JSRef<JSVal>& jsValue, Color& result, const char* componentName, const char* propName, 802 RefPtr<ResourceObject>& resourceObject); 803 static bool CheckLength( 804 const JSRef<JSVal>& jsValue, CalcDimension& result, const char* componentName, const char* propName); 805 static bool CheckLength( 806 const JSRef<JSVal>& jsValue, CalcDimension& result, const char* componentName, const char* propName, 807 RefPtr<ResourceObject>& resourceObject); 808 static bool CheckResource(RefPtr<ResourceObject> resourceObject, 809 RefPtr<ResourceWrapper> resourceWrapper); 810 static bool CheckCustomSymbolId(RefPtr<ResourceWrapper> resourceWrapper, JSRef<JSVal>& resId, 811 std::uint32_t& symbolId); 812 static bool ParseJsSymbolId( 813 const JSRef<JSVal>& jsValue, uint32_t& symbolId, RefPtr<ResourceObject>& symbolResourceObject); 814 static void ParseJsSymbolCustomFamilyNames(std::vector<std::string>& customFamilyNames, 815 const JSRef<JSVal>& jsValue); 816 static bool ParseJsSymbolColor(const JSRef<JSVal>& jsValue, std::vector<Color>& result, 817 bool enableResourceUpdate = false, 818 std::vector<std::pair<int32_t, RefPtr<ResourceObject>>>& resObjArr = DEFAULT_RESOURCE_PAIR_ARRAY); 819 static bool ParseBorderWidthProps(const JSRef<JSVal>& args, NG::BorderWidthProperty& borderWidthProperty); 820 static bool ParseBorderWidthProps(const JSRef<JSVal>& args, 821 NG::BorderWidthProperty& borderWidthProperty, RefPtr<ResourceObject>& resourceObj); 822 static bool ParseBorderColorProps(const JSRef<JSVal>& args, NG::BorderColorProperty& colorProperty); 823 static bool ParseBorderColorProps(const JSRef<JSVal>& args, 824 NG::BorderColorProperty& colorProperty, RefPtr<ResourceObject>& resourceObj); 825 static bool ParseBorderStyleProps(const JSRef<JSVal>& args, NG::BorderStyleProperty& borderStyleProperty); 826 static bool ParseBorderRadius(const JSRef<JSVal>& args, NG::BorderRadiusProperty& radius, bool notNegative = true); 827 static void ParseCommonBorderRadiusProps( 828 const JSRef<JSObject>& object, NG::BorderRadiusProperty& radius, bool notNegative = true); 829 static void ParseBorderRadiusProps(const JSRef<JSObject>& object, NG::BorderRadiusProperty& radius); 830 static bool ParseEditMenuOptions(const JSCallbackInfo& info, NG::OnCreateMenuCallback& onCreateMenuCallback, 831 NG::OnMenuItemClickCallback& onMenuItemClick, NG::OnPrepareMenuCallback& onPrepareMenuCallback); 832 static void SetDialogProperties(const JSRef<JSObject>& obj, DialogProperties& properties); 833 static void SetDialogHoverModeProperties(const JSRef<JSObject>& obj, DialogProperties& properties); 834 static void SetDialogBlurStyleOption(const JSRef<JSObject>& obj, DialogProperties& properties); 835 static void SetDialogEffectOption(const JSRef<JSObject>& obj, DialogProperties& properties); 836 static std::function<void(NG::DrawingContext& context)> GetDrawCallback( 837 const RefPtr<JsFunction>& jsDraw, const JSExecutionContext& execCtx, JSRef<JSObject> modifier); 838 839 static RefPtr<NG::ChainedTransitionEffect> ParseNapiChainedTransition( 840 const JSRef<JSObject>& object, const JSExecutionContext& context); 841 static void JsFocusScopeId(const JSCallbackInfo& info); 842 static void JsFocusScopePriority(const JSCallbackInfo& info); 843 static int32_t ParseJsPropertyId(const JSRef<JSVal>& jsValue); 844 static void JsVisualEffect(const JSCallbackInfo& info); 845 static void JsBackgroundFilter(const JSCallbackInfo& info); 846 static void JsForegroundFilter(const JSCallbackInfo& info); 847 static void JsCompositingFilter(const JSCallbackInfo& info); 848 static NG::PaddingProperty GetLocalizedPadding(const std::optional<CalcDimension>& top, 849 const std::optional<CalcDimension>& bottom, const std::optional<CalcDimension>& start, 850 const std::optional<CalcDimension>& end); 851 static NG::MarginProperty GetEdgeMargins(const CommonCalcDimension& commonCalcDimension); 852 static void GetEdgeMarginsResObj(NG::MarginProperty& margins, const CommonCalcDimension& commonCalcDimension); 853 static NG::PaddingProperty GetEdgePaddingsOrSafeAreaPaddings(const CommonCalcDimension& commonCalcDimension); 854 static NG::BorderColorProperty GetLocalizedBorderColor(const std::optional<Color>& colorStart, 855 const std::optional<Color>& colorEnd, const std::optional<Color>& colorTop, 856 const std::optional<Color>& colorBottom); 857 static NG::BorderColorProperty GetLocalizedBorderColor(const CommonColor& commonColor); 858 static NG::BorderColorProperty GetBorderColor(const CommonColor& commonColor); 859 static NG::BorderRadiusProperty GetLocalizedBorderRadius(const std::optional<Dimension>& radiusTopStart, 860 const std::optional<Dimension>& radiusTopEnd, const std::optional<Dimension>& radiusBottomStart, 861 const std::optional<Dimension>& radiusBottomEnd); 862 static void ParseDetentSelection(const JSRef<JSObject>& paramObj, NG::SheetStyle& sheetStyle); 863 template<typename T> RegisterResource(const std::string & key,const RefPtr<ResourceObject> & resObj,T value)864 static void RegisterResource(const std::string& key, const RefPtr<ResourceObject>& resObj, T value) 865 { 866 auto frameNode = NG::ViewStackProcessor::GetInstance()->GetMainFrameNode(); 867 CHECK_NULL_VOID(frameNode); 868 auto pattern = frameNode->GetPattern(); 869 CHECK_NULL_VOID(pattern); 870 pattern->RegisterResource<T>(key, resObj, value); 871 } 872 static void UnRegisterResource(const std::string& key); 873 static void ParseDragSpringLoadingConfiguration( 874 const JSRef<JSObject>& paramObj, const RefPtr<NG::DragSpringLoadingConfiguration>& config); 875 static void SetBorderRadiusWithCheck(std::optional<NG::BorderRadiusProperty>& result, 876 NG::BorderRadiusProperty& dimension); 877 static bool CheckLengthMetrics(const JSRef<JSObject>& object); 878 static void CompleteResourceObjectFromColor(RefPtr<ResourceObject>& resObj, 879 Color& color, bool state); 880 881 private: 882 static bool CheckDarkResource(const RefPtr<ResourceObject>& resObj); 883 static bool ParseJsStrArrayInternal(const JSRef<JSArray>& jsArray, std::vector<std::string>& result, 884 std::vector<RefPtr<ResourceObject>>& resObjArray); 885 static bool ParseJsIntegerArrayInternal(const JSRef<JSArray>& jsArray, std::vector<uint32_t>& result, 886 std::vector<RefPtr<ResourceObject>>& resObjArray); 887 static bool ParseJsStringObj(const JSRef<JSVal>& jsValue, std::string& result, RefPtr<ResourceObject>& resObj); 888 static bool ParseJSMediaWithRawFile(const JSRef<JSObject>& jsObj, std::string& result, 889 RefPtr<ResourceWrapper>& resourceWrapper); 890 static bool ParseJSMediaInternal(const JSRef<JSObject>& jsValue, std::string& result, 891 RefPtr<ResourceObject>& resObj); 892 static bool ParseResourceToDoubleByName( 893 const JSRef<JSObject>& jsObj, int32_t resType, const RefPtr<ResourceWrapper>& resourceWrapper, double& result); 894 static bool ParseResourceToDoubleById( 895 int32_t resId, int32_t resType, const RefPtr<ResourceWrapper>& resourceWrapper, double& result); 896 static bool ParseJsDimensionByNameInternal(const JSRef<JSObject>& jsObj, CalcDimension& result, 897 DimensionUnit defaultUnit, RefPtr<ResourceWrapper>& resourceWrapper, int32_t resType); 898 static void ParseMenuItemsSymbolId(const JSRef<JSVal>& jsStartIcon, NG::MenuOptionsParam menuOptionsParam); 899 static std::vector<NG::MenuOptionsParam> ParseMenuItems(const JSRef<JSArray>& menuItemsArray, bool showShortcut); 900 static void ParseOnCreateMenu( 901 const JSCallbackInfo& info, const JSRef<JSVal>& jsFunc, NG::OnCreateMenuCallback& onCreateMenuCallback); 902 static void ParseOnPrepareMenu( 903 const JSCallbackInfo& info, const JSRef<JSVal>& jsFunc, NG::OnPrepareMenuCallback& onPrepareMenuCallback); 904 static JSRef<JSVal> CreateJsTextMenuItem(const NG::MenuItemParam& menuItemParam); 905 static JSRef<JSVal> CreateJsTextRange(const NG::MenuItemParam& menuItemParam); 906 static JSRef<JSObject> CreateJsTextMenuId(const std::string& id); 907 static JSRef<JSArray> CreateJsOnMenuItemClick(const NG::MenuItemParam& menuItemParam); 908 static JSRef<JSVal> CreateJsSystemMenuItems(const std::vector<NG::MenuItemParam>& systemMenuItems); 909 static void CompleteResourceObjectInner( 910 JSRef<JSObject>& jsObj, std::string& bundleName, std::string& moduleName, int32_t& resIdValue); 911 static NG::LayoutSafeAreaEdge ParseJsLayoutSafeAreaEdgeArray( 912 const JSRef<JSArray>& jsSafeAreaEdges, NG::LayoutSafeAreaEdge defaultVal); 913 static bool ParseAllBorderRadiusesForOutLine(JSRef<JSObject>& object, NG::BorderRadiusProperty& borderRadius); 914 static void GetBorderRadiusTopLeft(const JSRef<JSVal>& jsValue, NG::BorderRadiusProperty& borderRadius); 915 static void GetBorderRadiusTopRight(const JSRef<JSVal>& jsValue, NG::BorderRadiusProperty& borderRadius); 916 static void GetBorderRadiusBottomLeft(const JSRef<JSVal>& jsValue, NG::BorderRadiusProperty& borderRadius); 917 static void GetBorderRadiusBottomRight(const JSRef<JSVal>& jsValue, NG::BorderRadiusProperty& borderRadius); 918 static void ParseSweepGradientCenter(NG::Gradient& newGradient, const JSRef<JSArray> centerArray); 919 static void ParseRadialGradientCenter(NG::Gradient& newGradient, const JSRef<JSArray> centerArray); 920 static void NewParseGradientColor(NG::Gradient& gradient, RefPtr<ResourceObject>& resObj, 921 NG::GradientColor& gradientColor, int32_t& indx); 922 static void NewParseSweepGradientColor(NG::Gradient& gradient, RefPtr<ResourceObject>& resObj, 923 NG::GradientColor& gradientColor, int32_t& indx); 924 static void NewParseRadialGradientColor(NG::Gradient& gradient, RefPtr<ResourceObject>& resObj, 925 NG::GradientColor& gradientColor, int32_t& indx); 926 static bool ParseBackgroundBuilder( 927 const JSCallbackInfo& info, const JSRef<JSVal>& jsFunc, std::function<void()>& builderFunc); 928 }; 929 } // namespace OHOS::Ace::Framework 930 #endif // JS_VIEW_ABSTRACT_H 931