1 /* 2 * Copyright (c) 2021-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_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/text/text_menu_extension.h" 40 #include "core/components_ng/property/gradient_property.h" 41 #include "core/components_ng/property/transition_property.h" 42 #include "interfaces/inner_api/ace/ai/image_analyzer.h" 43 44 namespace OHOS::Ace::Framework { 45 46 constexpr int32_t DEFAULT_TAP_FINGERS = 1; 47 constexpr int32_t DEFAULT_TAP_COUNTS = 1; 48 constexpr float DEFAULT_PROGRESS_TOTAL = 100.0f; 49 50 enum class ResourceType : uint32_t { 51 COLOR = 10001, 52 FLOAT, 53 STRING, 54 PLURAL, 55 BOOLEAN, 56 INTARRAY, 57 INTEGER, 58 PATTERN, 59 STRARRAY, 60 MEDIA = 20000, 61 RAWFILE = 30000 62 }; 63 64 enum class JSCallbackInfoType { STRING, NUMBER, OBJECT, BOOLEAN, FUNCTION }; 65 66 RefPtr<ResourceObject> GetResourceObject(const JSRef<JSObject>& jsObj); 67 RefPtr<ResourceObject> GetResourceObjectByBundleAndModule(const JSRef<JSObject>& jsObj); 68 RefPtr<ResourceWrapper> CreateResourceWrapper(const JSRef<JSObject>& jsObj, RefPtr<ResourceObject>& resourceObject); 69 RefPtr<ResourceWrapper> CreateResourceWrapper(); 70 71 class JSViewAbstract { 72 public: 73 static void GetAngle( 74 const std::string& key, const std::unique_ptr<JsonValue>& jsonValue, std::optional<float>& angle); 75 static void GetJsAngle( 76 const std::string& key, const JSRef<JSVal>& jsValue, std::optional<float>& angle); 77 static void CheckAngle(std::optional<float>& angle); 78 static void GetPerspective(const std::string& key, const std::unique_ptr<JsonValue>& jsonValue, float& perspective); 79 static void GetJsPerspective(const std::string& key, const JSRef<JSVal>& jsValue, float& perspective); 80 static void GetGradientColorStops(Gradient& gradient, const std::unique_ptr<JsonValue>& jsonValue); 81 static void GetFractionStops( 82 std::vector<std::pair<float, float>>& fractionStops, const JSRef<JSVal>& array); 83 static void NewGetGradientColorStops(NG::Gradient& gradient, const std::unique_ptr<JsonValue>& jsonValue); 84 static void NewGetJsGradientColorStops(NG::Gradient& gradient, const JSRef<JSVal>& colorStops); 85 86 static void JsScale(const JSCallbackInfo& info); 87 static void SetDefaultScale(); 88 static void JsScaleX(const JSCallbackInfo& info); 89 static void JsScaleY(const JSCallbackInfo& info); 90 static void JsOpacity(const JSCallbackInfo& info); 91 static void JsTranslate(const JSCallbackInfo& info); 92 static void SetDefaultTranslate(); 93 static void JsTranslateX(const JSCallbackInfo& info); 94 static void JsTranslateY(const JSCallbackInfo& info); 95 static void JsRotate(const JSCallbackInfo& info); 96 static void SetDefaultRotate(); 97 static void JsRotateX(const JSCallbackInfo& info); 98 static void JsRotateY(const JSCallbackInfo& info); 99 static void JsTransform(const JSCallbackInfo& info); 100 static void SetDefaultTransform(); 101 static void JsTransition(const JSCallbackInfo& info); 102 static NG::TransitionOptions ParseTransition(std::unique_ptr<JsonValue>& transitionArgs); 103 static NG::TransitionOptions ParseJsTransition(const JSRef<JSVal>& transitionArgs); 104 static void JsWidth(const JSCallbackInfo& info); 105 static void JsHeight(const JSCallbackInfo& info); 106 static void JsBackgroundColor(const JSCallbackInfo& info); 107 static void JsBackgroundImage(const JSCallbackInfo& info); 108 static void JsBackgroundImageSize(const JSCallbackInfo& info); 109 static void JsBackgroundImagePosition(const JSCallbackInfo& info); 110 static void ParseBlurOption(const JSRef<JSObject>& jsBlurOption, BlurOption& blurOption); 111 static void JsBackgroundBlurStyle(const JSCallbackInfo& info); 112 static void JsBackgroundEffect(const JSCallbackInfo& info); 113 static void ParseEffectOption(const JSRef<JSObject>& jsObj, EffectOption& effectOption); 114 static void JsForegroundBlurStyle(const JSCallbackInfo& info); 115 static void JsSphericalEffect(const JSCallbackInfo& info); 116 static void JsPixelStretchEffect(const JSCallbackInfo& info); 117 static void JsLightUpEffect(const JSCallbackInfo& info); 118 static void JsBackground(const JSCallbackInfo& info); 119 static void JsBindMenu(const JSCallbackInfo& info); 120 static void JsBindContextMenu(const JSCallbackInfo& info); 121 static void JsBindContentCover(const JSCallbackInfo& info); 122 static void ParseModalStyle(const JSRef<JSObject>& paramObj, NG::ModalStyle& modalStyle); 123 static void JsBindSheet(const JSCallbackInfo& info); 124 static void ParseSheetStyle(const JSRef<JSObject>& paramObj, NG::SheetStyle& sheetStyle); 125 static bool ParseSheetDetents(const JSRef<JSVal>& args, std::vector<NG::SheetHeight>& sheetDetents); 126 static void ParseSheetDetentHeight(const JSRef<JSVal>& args, NG::SheetHeight& detent); 127 static bool ParseSheetBackgroundBlurStyle(const JSRef<JSVal>& args, BlurStyleOption& blurStyleOptions); 128 static void ParseSheetCallback(const JSRef<JSObject>& paramObj, std::function<void()>& onAppear, 129 std::function<void()>& onDisappear, std::function<void()>& shouldDismiss); 130 static void ParseSheetTitle(const JSRef<JSObject>& paramObj, NG::SheetStyle& sheetStyle, 131 std::function<void()>& titleBuilderFunction); 132 static panda::Local<panda::JSValueRef> JsDismissSheet(panda::JsiRuntimeCallInfo* runtimeCallInfo); 133 static void ParseOverlayCallback( 134 const JSRef<JSObject>& paramObj, std::function<void()>& onAppear, std::function<void()>& onDisappear); 135 static void JsBorderColor(const JSCallbackInfo& info); 136 static void ParseBorderColor(const JSRef<JSVal>& args); 137 static void JsPadding(const JSCallbackInfo& info); 138 static void JsMargin(const JSCallbackInfo& info); 139 static void ParseMarginOrPadding(const JSCallbackInfo& info, bool isMargin); 140 static void ParseMarginOrPaddingCorner(JSRef<JSObject> obj, std::optional<CalcDimension>& top, 141 std::optional<CalcDimension>& bottom, std::optional<CalcDimension>& left, std::optional<CalcDimension>& right); 142 static void JsOutline(const JSCallbackInfo& info); 143 static void JsOutlineWidth(const JSCallbackInfo& info); 144 static void JsOutlineColor(const JSCallbackInfo& info); 145 static void JsOutlineStyle(const JSCallbackInfo& info); 146 static void JsOutlineRadius(const JSCallbackInfo& info); 147 static void JsBorder(const JSCallbackInfo& info); 148 static void JsBorderWidth(const JSCallbackInfo& info); 149 static void ParseBorderWidth(const JSRef<JSVal>& args); 150 static void JsBorderRadius(const JSCallbackInfo& info); 151 static void ParseBorderRadius(const JSRef<JSVal>& args); 152 static void JsBorderStyle(const JSCallbackInfo& info); 153 static void ParseBorderStyle(const JSRef<JSVal>& args); 154 static void JsBorderImage(const JSCallbackInfo& info); 155 static void ParseBorderImageRepeat(const JSRef<JSVal>& args, RefPtr<BorderImage>& borderImage); 156 static void ParseBorderImageOutset(const JSRef<JSVal>& args, RefPtr<BorderImage>& borderImage); 157 static void ParseBorderImageSlice(const JSRef<JSVal>& args, RefPtr<BorderImage>& borderImage); 158 static void ParseBorderImageWidth(const JSRef<JSVal>& args, RefPtr<BorderImage>& borderImage); 159 static void ParseBorderImageDimension( 160 const JSRef<JSVal>& args, BorderImage::BorderImageOption& borderImageDimension); 161 static void ParseBorderImageLinearGradient(const JSRef<JSVal>& args, uint8_t& bitset); 162 static void JsUseEffect(const JSCallbackInfo& info); 163 static void JsUseShadowBatching(const JSCallbackInfo& info); 164 static void JsBlur(const JSCallbackInfo& info); 165 static void JsColorBlend(const JSCallbackInfo& info); 166 static void JsBackdropBlur(const JSCallbackInfo& info); 167 static void JsLinearGradientBlur(const JSCallbackInfo& info); 168 static void JsBackgroundBrightness(const JSCallbackInfo& info); 169 static void JsWindowBlur(const JSCallbackInfo& info); 170 static void JsFlexBasis(const JSCallbackInfo& info); 171 static void JsFlexGrow(const JSCallbackInfo& info); 172 static void JsFlexShrink(const JSCallbackInfo& info); 173 static void JsAlignSelf(const JSCallbackInfo& info); 174 static void JsDisplayPriority(const JSCallbackInfo& info); 175 static void JsSharedTransition(const JSCallbackInfo& info); 176 static void JsGeometryTransition(const JSCallbackInfo& info); 177 static void JsGridSpan(const JSCallbackInfo& Info); 178 static void JsGridOffset(const JSCallbackInfo& info); 179 static void JsUseSizeType(const JSCallbackInfo& Info); 180 static void JsHoverEffect(const JSCallbackInfo& info); 181 static void JsOnMouse(const JSCallbackInfo& info); 182 static void JsOnHover(const JSCallbackInfo& info); 183 static void JsOnClick(const JSCallbackInfo& info); 184 static void JsOnGestureJudgeBegin(const JSCallbackInfo& args); 185 static void JsClickEffect(const JSCallbackInfo& info); 186 static void JsRestoreId(int32_t restoreId); 187 static void JsOnVisibleAreaChange(const JSCallbackInfo& info); 188 static void JsHitTestBehavior(const JSCallbackInfo& info); 189 static void JsOnChildTouchTest(const JSCallbackInfo& info); 190 static void JsForegroundColor(const JSCallbackInfo& info); 191 static void JsSetFreeze(const JSCallbackInfo& info); 192 193 // outer border 194 static void ParseOuterBorderColor(const JSRef<JSVal>& args); 195 static void ParseOuterBorderWidth(const JSRef<JSVal>& args); 196 static void ParseOuterBorderRadius(const JSRef<JSVal>& args); 197 static void ParseOuterBorderStyle(const JSRef<JSVal>& args); 198 199 // response region 200 static void JsResponseRegion(const JSCallbackInfo& info); 201 static bool ParseJsResponseRegionArray(const JSRef<JSVal>& jsValue, std::vector<DimensionRect>& result); 202 static bool ParseJsDimensionRect(const JSRef<JSVal>& jsValue, DimensionRect& result); 203 204 // for dynamic $r 205 static void CompleteResourceObject(JSRef<JSObject>& jsObj); 206 static bool ConvertResourceType(const std::string& typeName, ResourceType& resType); 207 static bool ParseDollarResource(const JSRef<JSVal>& jsValue, ResourceType& resType, std::string& resName); 208 209 // mouse response response region 210 static void JsMouseResponseRegion(const JSCallbackInfo& info); 211 212 // for number and string with no unit, use default dimension unit. 213 static bool ParseJsDimension(const JSRef<JSVal>& jsValue, CalcDimension& result, DimensionUnit defaultUnit); 214 static bool ParseJsDimensionVp(const JSRef<JSVal>& jsValue, CalcDimension& result); 215 static bool ParseJsDimensionFp(const JSRef<JSVal>& jsValue, CalcDimension& result); 216 static bool ParseJsDimensionPx(const JSRef<JSVal>& jsValue, CalcDimension& result); 217 static bool ParseJsDouble(const JSRef<JSVal>& jsValue, double& result); 218 static bool ParseJsInt32(const JSRef<JSVal>& jsValue, int32_t& result); 219 static bool ParseJsColorFromResource(const JSRef<JSVal>& jsValue, Color& result); 220 static bool ParseJsColor(const JSRef<JSVal>& jsValue, Color& result); 221 static bool ParseJsColorStrategy(const JSRef<JSVal>& jsValue, ForegroundColorStrategy& strategy); 222 static bool ParseJsShadowColorStrategy(const JSRef<JSVal>& jsValue, ShadowColorStrategy& strategy); 223 static bool ParseJsFontFamilies(const JSRef<JSVal>& jsValue, std::vector<std::string>& result); 224 225 static bool ParseJsDimensionNG( 226 const JSRef<JSVal>& jsValue, CalcDimension& result, DimensionUnit defaultUnit, bool isSupportPercent = true); 227 static bool ParseJsDimensionVpNG(const JSRef<JSVal>& jsValue, CalcDimension& result, bool isSupportPercent = true); 228 static bool ParseJsDimensionFpNG(const JSRef<JSVal>& jsValue, CalcDimension& result, bool isSupportPercent = true); 229 230 static bool ParseJsonDimension(const std::unique_ptr<JsonValue>& jsonValue, CalcDimension& result, 231 DimensionUnit defaultUnit, bool checkIllegal = false); 232 static bool ParseJsonDimensionVp( 233 const std::unique_ptr<JsonValue>& jsonValue, CalcDimension& result, bool checkIllegal = false); 234 static bool ParseJsonDouble(const std::unique_ptr<JsonValue>& jsonValue, double& result); 235 static bool ParseJsonColor(const std::unique_ptr<JsonValue>& jsonValue, Color& result); 236 static bool ParseJsString(const JSRef<JSVal>& jsValue, std::string& result); 237 static bool ParseJsMedia(const JSRef<JSVal>& jsValue, std::string& result); 238 static bool ParseResourceToDouble(const JSRef<JSVal>& jsValue, double& result); 239 static bool ParseJsBool(const JSRef<JSVal>& jsValue, bool& result); 240 static bool ParseJsInteger(const JSRef<JSVal>& jsValue, uint32_t& result); 241 static bool ParseJsInteger(const JSRef<JSVal>& jsValue, int32_t& result); 242 static bool ParseJsIntegerArray(const JSRef<JSVal>& jsValue, std::vector<uint32_t>& result); 243 static bool ParseJsStrArray(const JSRef<JSVal>& jsValue, std::vector<std::string>& result); 244 static bool IsGetResourceByName(const JSRef<JSObject>& jsObj); 245 static void GetJsMediaBundleInfo(const JSRef<JSVal>& jsValue, std::string& bundleName, std::string& moduleName); 246 static bool ParseShadowProps(const JSRef<JSVal>& jsValue, Shadow& shadow); 247 static bool GetShadowFromTheme(ShadowStyle shadowStyle, Shadow& shadow); 248 static bool ParseJsResource(const JSRef<JSVal>& jsValue, CalcDimension& result); 249 static bool ParseDataDetectorConfig(const JSCallbackInfo& info, std::string& types, 250 std::function<void(const std::string&)>& onResult); 251 static bool ParseInvertProps(const JSRef<JSVal>& jsValue, InvertVariant& invert); 252 253 static std::pair<CalcDimension, CalcDimension> ParseSize(const JSCallbackInfo& info); 254 static void JsUseAlign(const JSCallbackInfo& info); 255 static void JsZIndex(const JSCallbackInfo& info); 256 static void SetDirection(const std::string& dir); 257 static void JsSize(const JSCallbackInfo& info); 258 static void JsConstraintSize(const JSCallbackInfo& info); 259 static void JsLayoutPriority(const JSCallbackInfo& info); 260 static void JsPixelRound(const JSCallbackInfo& info); 261 static void JsLayoutWeight(const JSCallbackInfo& info); 262 263 static void JsAlign(const JSCallbackInfo& info); 264 static void JsPosition(const JSCallbackInfo& info); 265 static void JsMarkAnchor(const JSCallbackInfo& info); 266 static void JsOffset(const JSCallbackInfo& info); 267 static void JsEnabled(const JSCallbackInfo& info); 268 static void JsAspectRatio(const JSCallbackInfo& info); 269 static void JsOverlay(const JSCallbackInfo& info); 270 static Alignment ParseAlignment(int32_t align); 271 static void JsAlignRules(const JSCallbackInfo& info); 272 273 static void SetVisibility(const JSCallbackInfo& info); 274 static void Pop(); 275 276 static void JsSetDraggable(bool draggable); 277 static void JsSetDragPreviewOptions(const JSCallbackInfo& info); 278 static void JsOnDragStart(const JSCallbackInfo& info); 279 static bool ParseAndUpdateDragItemInfo(const JSRef<JSVal>& info, NG::DragDropBaseInfo& dragInfo); 280 static RefPtr<AceType> ParseDragNode(const JSRef<JSVal>& info); 281 static void JsOnDragEnter(const JSCallbackInfo& info); 282 static void JsOnDragEnd(const JSCallbackInfo& info); 283 static void JsOnDragMove(const JSCallbackInfo& info); 284 static void JsOnDragLeave(const JSCallbackInfo& info); 285 static void JsOnDrop(const JSCallbackInfo& info); 286 static void JsOnAreaChange(const JSCallbackInfo& info); 287 288 static void JsLinearGradient(const JSCallbackInfo& info); 289 static void JsRadialGradient(const JSCallbackInfo& info); 290 static void JsSweepGradient(const JSCallbackInfo& info); 291 static void NewJsLinearGradient(const JSCallbackInfo& info, NG::Gradient& gradient); 292 static void NewJsRadialGradient(const JSCallbackInfo& info, NG::Gradient& gradient); 293 static void NewJsSweepGradient(const JSCallbackInfo& info, NG::Gradient& gradient); 294 static void JsMotionPath(const JSCallbackInfo& info); 295 static void JsShadow(const JSCallbackInfo& info); 296 static void JsBlendMode(const JSCallbackInfo& info); 297 static void JsGrayScale(const JSCallbackInfo& info); 298 static void JsBrightness(const JSCallbackInfo& info); 299 static void JsContrast(const JSCallbackInfo& info); 300 static void JsSaturate(const JSCallbackInfo& info); 301 static void JsSepia(const JSCallbackInfo& info); 302 static void JsInvert(const JSCallbackInfo& info); 303 static void JsSystemBarEffect(const JSCallbackInfo& info); 304 static void JsHueRotate(const JSCallbackInfo& info); 305 306 static void JsClip(const JSCallbackInfo& info); 307 static void JsMask(const JSCallbackInfo& info); 308 309 static void JsKey(const std::string& key); 310 static void JsId(const JSCallbackInfo& info); 311 312 static void JsFocusable(const JSCallbackInfo& info); 313 static void JsOnFocusMove(const JSCallbackInfo& args); 314 static void JsOnKeyEvent(const JSCallbackInfo& args); 315 static void JsOnFocus(const JSCallbackInfo& args); 316 static void JsOnBlur(const JSCallbackInfo& args); 317 static void JsTabIndex(const JSCallbackInfo& info); 318 static void JsFocusOnTouch(const JSCallbackInfo& info); 319 static void JsDefaultFocus(const JSCallbackInfo& info); 320 static void JsGroupDefaultFocus(const JSCallbackInfo& info); 321 static void JsDebugLine(const JSCallbackInfo& info); 322 static void JsOpacityPassThrough(const JSCallbackInfo& info); 323 static void JsTransitionPassThrough(const JSCallbackInfo& info); 324 static void JsKeyboardShortcut(const JSCallbackInfo& info); 325 326 static void JsObscured(const JSCallbackInfo& info); 327 328 static void JsAccessibilityGroup(bool accessible); 329 static void JsAccessibilityText(const std::string& text); 330 static void JsAccessibilityDescription(const std::string& description); 331 static void JsAccessibilityImportance(const std::string& importance); 332 static void JsAccessibilityLevel(const std::string& level); 333 static void JsAllowDrop(const JSCallbackInfo& info); 334 static void JsDragPreview(const JSCallbackInfo& info); 335 static void JsAccessibilityVirtualNode(const JSCallbackInfo& info); 336 337 static void ParseAccessibilityDescriptionJson(const std::string& description, 338 std::pair<bool, std::string>& autoEventPair, std::pair<bool, std::string>& descriptionPair); 339 340 static void JSCreateAnimatableProperty(const JSCallbackInfo& info); 341 static void JSUpdateAnimatableProperty(const JSCallbackInfo& info); 342 static void JSRenderGroup(const JSCallbackInfo& info); 343 static void JSRenderFit(const JSCallbackInfo& info); 344 345 static void JsExpandSafeArea(const JSCallbackInfo& info); 346 347 static void ParseImageAnalyzerTextOptions(const JSRef<JSVal>& optionVal, ImageAnalyzerConfig& analyzerConfig); 348 static void ParseImageAnalyzerSubjectOptions(const JSRef<JSVal>& optionVal, ImageAnalyzerConfig& analyzerConfig); 349 350 static void ParseMenuOptions( 351 const JSCallbackInfo& info, const JSRef<JSArray>& jsArray, std::vector<NG::MenuOptionsParam>& items); 352 353 #ifndef WEARABLE_PRODUCT 354 static void JsBindPopup(const JSCallbackInfo& info); 355 #endif 356 357 /** 358 * Binds the native methods to the the js object 359 */ 360 static void JSBind(BindingTarget globalObj); 361 GetPipelineContext()362 static RefPtr<PipelineBase> GetPipelineContext() 363 { 364 auto container = Container::Current(); 365 CHECK_NULL_RETURN(container, nullptr); 366 return container->GetPipelineContext(); 367 } 368 369 template<typename T> GetTheme()370 static RefPtr<T> GetTheme() 371 { 372 auto pipelineContext = GetPipelineContext(); 373 CHECK_NULL_RETURN(pipelineContext, nullptr); 374 auto themeManager = pipelineContext->GetThemeManager(); 375 CHECK_NULL_RETURN(themeManager, nullptr); 376 return themeManager->GetTheme<T>(); 377 } 378 379 /** 380 * box properties setter 381 */ 382 static const Border& GetBorder(); 383 static void SetMarginTop(const JSCallbackInfo& info); 384 static void SetMarginBottom(const JSCallbackInfo& info); 385 static void SetMarginLeft(const JSCallbackInfo& info); 386 static void SetMarginRight(const JSCallbackInfo& info); 387 static void SetPaddingTop(const JSCallbackInfo& info); 388 static void SetPaddingBottom(const JSCallbackInfo& info); 389 static void SetPaddingLeft(const JSCallbackInfo& info); 390 static void SetPaddingRight(const JSCallbackInfo& info); 391 static void SetBorder(const Border& border); 392 static void SetBorderStyle(int32_t style); 393 static void SetBorderColor(const Color& color, const AnimationOption& option); 394 static void SetBorderWidth(const CalcDimension& value, const AnimationOption& option); 395 static void SetColorBlend(Color color); 396 static void SetLinearGradientBlur(NG::LinearGradientBlurPara blurPara); 397 static void SetDynamicLightUp(float rate, float lightUpDegree); 398 static void SetWindowBlur(float progress, WindowBlurStyle blurStyle); 399 static RefPtr<ThemeConstants> GetThemeConstants(const JSRef<JSObject>& jsObj = JSRef<JSObject>()); 400 static bool JsWidth(const JSRef<JSVal>& jsValue); 401 static bool JsHeight(const JSRef<JSVal>& jsValue); 402 static void GetBorderRadius(const char* key, JSRef<JSObject>& object, CalcDimension& radius); 403 static void ParseAllBorderRadiuses(JSRef<JSObject>& object, CalcDimension& topLeft, CalcDimension& topRight, 404 CalcDimension& bottomLeft, CalcDimension& bottomRight); 405 static void JsPointLight(const JSCallbackInfo& info); 406 407 template<typename T> ParseJsInteger(const JSRef<JSVal> & jsValue,T & result)408 static bool ParseJsInteger(const JSRef<JSVal>& jsValue, T& result) 409 { 410 if (!jsValue->IsNumber() && !jsValue->IsObject()) { 411 LOGE("arg is not number or Object."); 412 return false; 413 } 414 415 if (jsValue->IsNumber()) { 416 result = jsValue->ToNumber<T>(); 417 return true; 418 } 419 420 JSRef<JSObject> jsObj = JSRef<JSObject>::Cast(jsValue); 421 int32_t resType = jsObj->GetPropertyValue<int32_t>("type", -1); 422 if (resType == -1) { 423 return false; 424 } 425 426 JSRef<JSVal> resId = jsObj->GetProperty("id"); 427 if (!resId->IsNumber()) { 428 LOGW("resId is not number"); 429 return false; 430 } 431 432 auto resourceObject = GetResourceObjectByBundleAndModule(jsObj); 433 auto resourceWrapper = CreateResourceWrapper(jsObj, resourceObject); 434 auto resIdNum = resId->ToNumber<int32_t>(); 435 if (resIdNum == -1) { 436 if (!IsGetResourceByName(jsObj)) { 437 return false; 438 } 439 JSRef<JSVal> args = jsObj->GetProperty("params"); 440 JSRef<JSArray> params = JSRef<JSArray>::Cast(args); 441 auto param = params->GetValueAt(0); 442 if (resType == static_cast<int32_t>(ResourceType::INTEGER)) { 443 result = static_cast<T>(resourceWrapper->GetIntByName(param->ToString())); 444 return true; 445 } 446 return false; 447 } 448 if (resType == static_cast<int32_t>(ResourceType::INTEGER)) { 449 result = static_cast<T>(resourceWrapper->GetInt(resId->ToNumber<uint32_t>())); 450 return true; 451 } 452 return false; 453 } 454 GetFunctionKeyName(FunctionKey functionkey)455 static std::string GetFunctionKeyName(FunctionKey functionkey) 456 { 457 switch (functionkey) { 458 case FunctionKey::ESC: 459 return "ESC"; 460 break; 461 case FunctionKey::F1: 462 return "F1"; 463 break; 464 case FunctionKey::F2: 465 return "F2"; 466 break; 467 case FunctionKey::F3: 468 return "F3"; 469 break; 470 case FunctionKey::F4: 471 return "F4"; 472 break; 473 case FunctionKey::F5: 474 return "F5"; 475 break; 476 case FunctionKey::F6: 477 return "F6"; 478 break; 479 case FunctionKey::F7: 480 return "F7"; 481 break; 482 case FunctionKey::F8: 483 return "F8"; 484 break; 485 case FunctionKey::F9: 486 return "F9"; 487 break; 488 case FunctionKey::F10: 489 return "F10"; 490 break; 491 case FunctionKey::F11: 492 return "F11"; 493 break; 494 case FunctionKey::F12: 495 return "F12"; 496 break; 497 default: 498 return ""; 499 break; 500 } 501 } 502 503 static bool CheckColor(const JSRef<JSVal>& jsValue, Color& result, const char* componentName, const char* propName); 504 static bool CheckLength( 505 const JSRef<JSVal>& jsValue, CalcDimension& result, const char* componentName, const char* propName); 506 static bool ParseJsSymbolId( 507 const JSRef<JSVal>& jsValue, uint32_t& symbolId, RefPtr<ResourceObject>& symbolResourceObject); 508 static bool ParseJsSymbolColor(const JSRef<JSVal>& jsValue, std::vector<Color>& result); 509 }; 510 } // namespace OHOS::Ace::Framework 511 #endif // JS_VIEW_ABSTRACT_H 512