1 /* 2 * Copyright (c) 2022-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 FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_BASE_VIEW_ABSTRACT_MODEL_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_BASE_VIEW_ABSTRACT_MODEL_H 18 19 #include <cstdint> 20 #include <functional> 21 #include <memory> 22 #include <mutex> 23 #include <optional> 24 #include <vector> 25 26 #include "base/geometry/dimension.h" 27 #include "base/memory/ace_type.h" 28 #include "base/utils/macros.h" 29 #include "core/components/common/properties/alignment.h" 30 #include "core/components/common/properties/popup_param.h" 31 #include "core/components/common/properties/shared_transition_option.h" 32 #include "core/components_ng/base/view_abstract.h" 33 #include "core/components_ng/event/gesture_event_hub.h" 34 #include "core/components_ng/pattern/menu/menu_pattern.h" 35 #include "core/components_ng/pattern/overlay/modal_style.h" 36 #include "core/components_ng/pattern/overlay/sheet_style.h" 37 #include "core/components_ng/property/gradient_property.h" 38 #include "core/components_ng/property/progress_mask_property.h" 39 #include "core/components_ng/property/transition_property.h" 40 #include "core/event/ace_events.h" 41 #include "core/event/key_event.h" 42 #include "core/event/mouse_event.h" 43 #include "core/event/touch_event.h" 44 #include "core/gestures/gesture_info.h" 45 #include "core/image/image_source_info.h" 46 47 namespace OHOS::Ace { 48 49 using ClickEventFunc = std::function<void(const ClickInfo* info)>; 50 using RemoteCallback = std::function<void(const BaseEventInfo* info)>; 51 using OnNewDragFunc = std::function<void(const RefPtr<OHOS::Ace::DragEvent>&)>; 52 53 enum class ResponseType : int32_t { 54 RIGHT_CLICK = 0, 55 LONG_PRESS, 56 }; 57 58 class ACE_FORCE_EXPORT ViewAbstractModel { 59 public: 60 static ViewAbstractModel* GetInstance(); 61 virtual ~ViewAbstractModel() = default; 62 63 // basic size 64 virtual void SetWidth(const CalcDimension& width) = 0; 65 virtual void SetHeight(const CalcDimension& height) = 0; 66 virtual void ClearWidthOrHeight(bool isWidth) = 0; 67 virtual void SetMinWidth(const CalcDimension& minWidth) = 0; 68 virtual void SetMinHeight(const CalcDimension& minHeight) = 0; 69 virtual void SetMaxWidth(const CalcDimension& maxWidth) = 0; 70 virtual void SetMaxHeight(const CalcDimension& maxHeight) = 0; 71 virtual void ResetMinSize(bool resetWidth) = 0; 72 virtual void ResetMaxSize(bool resetWidth) = 0; 73 74 // box props 75 virtual void SetBackgroundColor(const Color& color) = 0; 76 virtual void SetBackgroundImage(const ImageSourceInfo& src, RefPtr<ThemeConstants> themeConstant) = 0; 77 virtual void SetBackgroundImageRepeat(const ImageRepeat& imageRepeat) = 0; 78 virtual void SetBackgroundImageSize(const BackgroundImageSize& bgImgSize) = 0; 79 virtual void SetBackgroundImagePosition(const BackgroundImagePosition& bgImgPosition) = 0; 80 virtual void SetBackgroundBlurStyle(const BlurStyleOption& bgBlurStyle) = 0; SetBackgroundEffect(const EffectOption & effectOption)81 virtual void SetBackgroundEffect(const EffectOption& effectOption) {} SetForegroundBlurStyle(const BlurStyleOption & fgBlurStyle)82 virtual void SetForegroundBlurStyle(const BlurStyleOption& fgBlurStyle) {} SetSphericalEffect(double radio)83 virtual void SetSphericalEffect(double radio) {} SetPixelStretchEffect(PixStretchEffectOption & option)84 virtual void SetPixelStretchEffect(PixStretchEffectOption& option) {} SetLightUpEffect(double radio)85 virtual void SetLightUpEffect(double radio) {} 86 87 virtual void SetPadding(const CalcDimension& value) = 0; 88 virtual void SetPaddings(const std::optional<CalcDimension>& top, const std::optional<CalcDimension>& bottom, 89 const std::optional<CalcDimension>& left, const std::optional<CalcDimension>& right) = 0; 90 virtual void SetMargin(const CalcDimension& value) = 0; 91 virtual void SetMargins(const std::optional<CalcDimension>& top, const std::optional<CalcDimension>& bottom, 92 const std::optional<CalcDimension>& left, const std::optional<CalcDimension>& right) = 0; 93 virtual void SetBorderRadius(const Dimension& value) = 0; 94 virtual void SetBorderRadius(const std::optional<Dimension>& radiusTopLeft, 95 const std::optional<Dimension>& radiusTopRight, const std::optional<Dimension>& radiusBottomLeft, 96 const std::optional<Dimension>& radiusBottomRight) = 0; 97 virtual void SetBorderColor(const Color& value) = 0; 98 virtual void SetBorderColor(const std::optional<Color>& colorLeft, const std::optional<Color>& colorRight, 99 const std::optional<Color>& colorTop, const std::optional<Color>& colorBottom) = 0; 100 virtual void SetBorderWidth(const Dimension& value) = 0; 101 virtual void SetBorderWidth(const std::optional<Dimension>& left, const std::optional<Dimension>& right, 102 const std::optional<Dimension>& top, const std::optional<Dimension>& bottom) = 0; 103 virtual void SetBorderStyle(const BorderStyle& value) = 0; 104 virtual void SetBorderStyle(const std::optional<BorderStyle>& styleLeft, 105 const std::optional<BorderStyle>& styleRight, const std::optional<BorderStyle>& styleTop, 106 const std::optional<BorderStyle>& styleBottom) = 0; 107 virtual void SetBorderImage(const RefPtr<BorderImage>& borderImage, uint8_t bitset) = 0; 108 virtual void SetBorderImageGradient(const NG::Gradient& gradient) = 0; 109 110 // layout 111 virtual void SetLayoutPriority(int32_t priority) = 0; 112 virtual void SetLayoutWeight(int32_t value) = 0; 113 virtual void SetLayoutDirection(TextDirection value) = 0; 114 virtual void SetAspectRatio(float ratio) = 0; 115 virtual void ResetAspectRatio() = 0; 116 virtual void SetAlign(const Alignment& alignment) = 0; 117 virtual void SetAlignRules(const std::map<AlignDirection, AlignRule>& alignRules) = 0; 118 virtual void SetUseAlign( 119 AlignDeclarationPtr declaration, AlignDeclaration::Edge edge, const std::optional<Dimension>& offset) = 0; 120 virtual void SetGrid( 121 std::optional<uint32_t> span, std::optional<int32_t> offset, GridSizeType type = GridSizeType::UNDEFINED) = 0; 122 virtual void SetZIndex(int32_t value) = 0; 123 124 // position 125 virtual void SetPosition(const Dimension& x, const Dimension& y) = 0; 126 virtual void SetOffset(const Dimension& x, const Dimension& y) = 0; 127 virtual void MarkAnchor(const Dimension& x, const Dimension& y) = 0; 128 129 // transforms 130 virtual void SetScale(float x, float y, float z) = 0; 131 virtual void SetPivot(const Dimension& x, const Dimension& y, const Dimension& z) = 0; 132 virtual void SetTranslate(const Dimension& x, const Dimension& y, const Dimension& z) = 0; 133 virtual void SetRotate(float x, float y, float z, float angle, float perspective = 0.0f) = 0; 134 virtual void SetTransformMatrix(const std::vector<float>& matrix) = 0; 135 136 // display props 137 virtual void SetOpacity(double opacity, bool passThrough = false) = 0; 138 virtual void SetTransition(const NG::TransitionOptions& transitionOptions, bool passThrough = false) = 0; 139 virtual void SetChainedTransition(const RefPtr<NG::ChainedTransitionEffect>& effect, bool passThrough = false) = 0; 140 virtual void SetOverlay(const std::string& text, const std::function<void()>&& buildFunc, 141 const std::optional<Alignment>& align, const std::optional<Dimension>& offsetX, 142 const std::optional<Dimension>& offsetY) = 0; 143 virtual void SetVisibility(VisibleType visible, std::function<void(int32_t)>&& changeEventFunc) = 0; 144 virtual void SetSharedTransition( 145 const std::string& shareId, const std::shared_ptr<SharedTransitionOption>& option) = 0; 146 virtual void SetGeometryTransition(const std::string& id, bool followWithoutTransition = false) = 0; 147 virtual void SetMotionPath(const MotionPathOption& option) = 0; 148 virtual void SetRenderGroup(bool isRenderGroup) = 0; 149 virtual void SetRenderFit(RenderFit renderFit) = 0; 150 151 // flex props 152 virtual void SetFlexBasis(const Dimension& value) = 0; 153 virtual void SetAlignSelf(FlexAlign value) = 0; 154 virtual void SetFlexShrink(float value) = 0; 155 virtual void SetFlexGrow(float value) = 0; 156 virtual void SetDisplayIndex(int32_t value) = 0; 157 virtual void ResetFlexShrink() = 0; 158 159 // gradient 160 virtual void SetLinearGradient(const NG::Gradient& gradient) = 0; 161 virtual void SetSweepGradient(const NG::Gradient& gradient) = 0; 162 virtual void SetRadialGradient(const NG::Gradient& gradient) = 0; 163 164 // clip 165 virtual void SetClipShape(const RefPtr<BasicShape>& shape) = 0; 166 virtual void SetClipEdge(bool isClip) = 0; 167 168 // effects 169 virtual void SetMask(const RefPtr<BasicShape>& shape) = 0; 170 virtual void SetBackdropBlur(const Dimension& radius) = 0; 171 virtual void SetLinearGradientBlur(NG::LinearGradientBlurPara blurPara) = 0; 172 173 virtual void SetDynamicLightUp(float rate, float lightUpDegree) = 0; 174 175 virtual void SetFrontBlur(const Dimension& radius) = 0; 176 virtual void SetBackShadow(const std::vector<Shadow>& shadows) = 0; 177 virtual void SetColorBlend(const Color& value) = 0; 178 virtual void SetWindowBlur(float progress, WindowBlurStyle blurStyle) = 0; 179 virtual void SetBrightness(const Dimension& value) = 0; 180 virtual void SetGrayScale(const Dimension& value) = 0; 181 virtual void SetContrast(const Dimension& value) = 0; 182 virtual void SetSaturate(const Dimension& value) = 0; 183 virtual void SetSepia(const Dimension& value) = 0; 184 virtual void SetInvert(const Dimension& value) = 0; 185 virtual void SetHueRotate(float value) = 0; 186 virtual void SetClickEffectLevel(const ClickEffectLevel& level, float scaleValue) = 0; 187 virtual void SetUseEffect(bool useEffect) = 0; 188 189 // event 190 virtual void SetOnClick(GestureEventFunc&& tapEventFunc, ClickEventFunc&& clickEventFunc) = 0; 191 virtual void SetOnTouch(TouchEventFunc&& touchEventFunc) = 0; 192 virtual void SetOnKeyEvent(OnKeyCallbackFunc&& onKeyCallback) = 0; 193 virtual void SetOnMouse(OnMouseEventFunc&& onMouseEventFunc) = 0; 194 virtual void SetOnHover(OnHoverFunc&& onHoverEventFunc) = 0; 195 virtual void SetOnDelete(std::function<void()>&& onDeleteCallback) = 0; 196 virtual void SetOnAppear(std::function<void()>&& onAppearCallback) = 0; 197 virtual void SetOnDisAppear(std::function<void()>&& onDisAppearCallback) = 0; 198 virtual void SetOnAccessibility(std::function<void(const std::string&)>&& onAccessibilityCallback) = 0; 199 virtual void SetOnRemoteMessage(RemoteCallback&& onRemoteCallback) = 0; 200 virtual void SetOnFocusMove(std::function<void(int32_t)>&& onFocusMoveCallback) = 0; 201 virtual void SetOnFocus(OnFocusFunc&& onFocusCallback) = 0; 202 virtual void SetOnBlur(OnBlurFunc&& onBlurCallback) = 0; 203 virtual void SetDraggable(bool draggable) = 0; 204 virtual void SetOnDragStart(NG::OnDragStartFunc&& onDragStart) = 0; 205 virtual void SetOnDragEnter(NG::OnDragDropFunc&& onDragEnter) = 0; 206 virtual void SetOnDragEnd(OnNewDragFunc&& onDragEnd) = 0; 207 virtual void SetOnDragLeave(NG::OnDragDropFunc&& onDragLeave) = 0; 208 virtual void SetOnDragMove(NG::OnDragDropFunc&& onDragMove) = 0; 209 virtual void SetOnDrop(NG::OnDragDropFunc&& onDrop) = 0; 210 virtual void SetAllowDrop(const std::set<std::string>& allowDrop) = 0; 211 virtual void SetOnVisibleChange( 212 std::function<void(bool, double)>&& onVisibleChange, const std::vector<double>& ratios) = 0; 213 virtual void SetOnAreaChanged( 214 std::function<void(const Rect& oldRect, const Offset& oldOrigin, const Rect& rect, const Offset& origin)>&& 215 onAreaChanged) = 0; 216 217 // Disable event when the param is undefined. 218 virtual void DisableOnClick() = 0; 219 virtual void DisableOnTouch() = 0; 220 virtual void DisableOnKeyEvent() = 0; 221 virtual void DisableOnHover() = 0; 222 virtual void DisableOnMouse() = 0; 223 virtual void DisableOnAppear() = 0; 224 virtual void DisableOnDisAppear() = 0; 225 virtual void DisableOnAreaChange() = 0; 226 virtual void DisableOnFocus() = 0; 227 virtual void DisableOnBlur() = 0; 228 229 // interact 230 virtual void SetResponseRegion(const std::vector<DimensionRect>& responseRegion) = 0; SetMouseResponseRegion(const std::vector<DimensionRect> & responseRegion)231 virtual void SetMouseResponseRegion(const std::vector<DimensionRect>& responseRegion) {}; 232 virtual void SetEnabled(bool enabled) = 0; 233 virtual void SetTouchable(bool touchable) = 0; 234 virtual void SetFocusable(bool focusable) = 0; 235 virtual void SetFocusNode(bool focus) = 0; 236 virtual void SetTabIndex(int32_t index) = 0; 237 virtual void SetFocusOnTouch(bool isSet) = 0; 238 virtual void SetDefaultFocus(bool isSet) = 0; 239 virtual void SetGroupDefaultFocus(bool isSet) = 0; 240 virtual void SetInspectorId(const std::string& inspectorId) = 0; 241 virtual void SetRestoreId(int32_t restoreId) = 0; 242 virtual void SetDebugLine(const std::string& line) = 0; 243 virtual void SetHoverEffect(HoverEffectType hoverEffect) = 0; 244 virtual void SetHitTestMode(NG::HitTestMode hitTestMode) = 0; 245 virtual void SetKeyboardShortcut(const std::string& value, const std::vector<ModifierKey>& keys, 246 std::function<void()>&& onKeyboardShortcutAction) = 0; 247 248 // obscured 249 virtual void SetObscured(const std::vector<ObscuredReasons>& reasons) = 0; 250 251 // background 252 virtual void BindBackground(std::function<void()>&& buildFunc, const Alignment& align) = 0; 253 254 // popup and menu 255 virtual void BindPopup(const RefPtr<PopupParam>& param, const RefPtr<AceType>& customNode) = 0; 256 virtual void BindMenu( 257 std::vector<NG::OptionParam>&& params, std::function<void()>&& buildFunc, const NG::MenuParam& menuParam) = 0; 258 virtual void BindContextMenu(ResponseType type, std::function<void()>& buildFunc, const NG::MenuParam& menuParam, 259 const NG::MenuType& menuType = NG::MenuType::CONTEXT_MENU) = 0; 260 virtual void BindContentCover(bool isShow, std::function<void(const std::string&)>&& callback, 261 std::function<void()>&& buildFunc, NG::ModalStyle& modalStyle, std::function<void()>&& onAppear, 262 std::function<void()>&& onDisappear) = 0; 263 virtual void BindSheet(bool isShow, std::function<void(const std::string&)>&& callback, 264 std::function<void()>&& buildFunc, NG::SheetStyle& sheetStyle, std::function<void()>&& onAppear, 265 std::function<void()>&& onDisappear) = 0; 266 267 // accessibility 268 virtual void SetAccessibilityGroup(bool accessible) = 0; 269 virtual void SetAccessibilityText(const std::string& text) = 0; 270 virtual void SetAccessibilityDescription(const std::string& description) = 0; 271 virtual void SetAccessibilityImportance(const std::string& importance) = 0; 272 273 // progress mask 274 virtual void SetProgressMask(const RefPtr<NG::ProgressMaskProperty>& progress) = 0; 275 // foregroundColor 276 virtual void SetForegroundColor(const Color& color) = 0; 277 virtual void SetForegroundColorStrategy(const ForegroundColorStrategy& strategy) = 0; 278 279 // custom animation properties 280 virtual void CreateAnimatablePropertyFloat(const std::string& propertyName, float value, 281 const std::function<void(float)>& onCallbackEvent) = 0; 282 virtual void UpdateAnimatablePropertyFloat(const std::string& propertyName, float value) = 0; 283 284 virtual void CreateAnimatableArithmeticProperty(const std::string& propertyName, 285 RefPtr<NG::CustomAnimatableArithmetic>& value, 286 std::function<void(const RefPtr<NG::CustomAnimatableArithmetic>&)>& onCallbackEvent) = 0; 287 virtual void UpdateAnimatableArithmeticProperty(const std::string& propertyName, 288 RefPtr<NG::CustomAnimatableArithmetic>& value) = 0; 289 virtual void UpdateSafeAreaExpandOpts(const NG::SafeAreaExpandOpts& opts) = 0; 290 private: 291 static std::unique_ptr<ViewAbstractModel> instance_; 292 static std::mutex mutex_; 293 }; 294 } // namespace OHOS::Ace 295 296 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_BASE_VIEW_ABSTRACT_MODEL_H 297