• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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