• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_MENU_MENU_PREVIEW_PATTERN_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_MENU_MENU_PREVIEW_PATTERN_H
18 
19 #include "base/memory/ace_type.h"
20 #include "base/memory/referenced.h"
21 #include "base/utils/string_utils.h"
22 #include "base/utils/utils.h"
23 #include "core/components/common/properties/color.h"
24 #include "core/components_ng/pattern/linear_layout/linear_layout_pattern.h"
25 #include "core/components_ng/pattern/menu/menu_pattern.h"
26 #include "core/components_ng/pattern/menu/menu_theme.h"
27 #include "core/components_ng/pattern/menu/preview/menu_preview_layout_algorithm.h"
28 #include "core/components_ng/pattern/pattern.h"
29 #include "core/components_v2/inspector/inspector_constants.h"
30 #include "core/pipeline_ng/ui_task_scheduler.h"
31 
32 namespace OHOS::Ace::NG {
33 class MenuPreviewPattern : public LinearLayoutPattern {
34     DECLARE_ACE_TYPE(MenuPreviewPattern, Pattern);
35 
36 public:
MenuPreviewPattern()37     MenuPreviewPattern() : LinearLayoutPattern(true) {}
38     ~MenuPreviewPattern() override = default;
39 
CreateLayoutAlgorithm()40     RefPtr<LayoutAlgorithm> CreateLayoutAlgorithm() override
41     {
42         return MakeRefPtr<MenuPreviewLayoutAlgorithm>();
43     }
44 
SetFirstShow()45     void SetFirstShow()
46     {
47         isFirstShow_ = true;
48     }
49 
SetHasPreviewTransitionEffect(bool hasPreviewTransitionEffect)50     void SetHasPreviewTransitionEffect(bool hasPreviewTransitionEffect)
51     {
52         hasPreviewTransitionEffect_ = hasPreviewTransitionEffect;
53     }
54 
SetIsShowHoverImage(bool isShow)55     void SetIsShowHoverImage(bool isShow)
56     {
57         isShowHoverImage_ = isShow;
58     }
59 
GetIsShowHoverImage()60     bool GetIsShowHoverImage() const
61     {
62         return isShowHoverImage_;
63     }
64 
SetHoverImageAfterScaleWidth(float width)65     void SetHoverImageAfterScaleWidth(float width)
66     {
67         hoverImageAfterScaleWidth_ = width;
68     }
69 
GetHoverImageAfterScaleWidth()70     float GetHoverImageAfterScaleWidth() const
71     {
72         return hoverImageAfterScaleWidth_;
73     }
74 
SetHoverImageAfterScaleHeight(float height)75     void SetHoverImageAfterScaleHeight(float height)
76     {
77         hoverImageAfterScaleHeight_ = height;
78     }
79 
GetHoverImageAfterScaleHeight()80     float GetHoverImageAfterScaleHeight() const
81     {
82         return hoverImageAfterScaleHeight_;
83     }
84 
SetHoverImageAfterScaleOffset(const OffsetF & offset)85     void SetHoverImageAfterScaleOffset(const OffsetF& offset)
86     {
87         hoverImageAfterScaleOffset_ = offset;
88     }
89 
GetHoverImageAfterScaleOffset()90     OffsetF GetHoverImageAfterScaleOffset() const
91     {
92         return hoverImageAfterScaleOffset_;
93     }
94 
SetCustomPreviewWidth(float width)95     void SetCustomPreviewWidth(float width)
96     {
97         customPreviewWidth_ = width;
98     }
99 
GetCustomPreviewWidth()100     float GetCustomPreviewWidth() const
101     {
102         return customPreviewWidth_;
103     }
104 
SetCustomPreviewHeight(float height)105     void SetCustomPreviewHeight(float height)
106     {
107         customPreviewHeight_ = height;
108     }
109 
GetCustomPreviewHeight()110     float GetCustomPreviewHeight() const
111     {
112         return customPreviewHeight_;
113     }
114 
SetStackAfterScaleActualWidth(float width)115     void SetStackAfterScaleActualWidth(float width)
116     {
117         stackAfterScaleActualWidth_ = width;
118     }
119 
GetStackAfterScaleActualWidth()120     float GetStackAfterScaleActualWidth() const
121     {
122         return stackAfterScaleActualWidth_;
123     }
124 
SetStackAfterScaleActualHeight(float height)125     void SetStackAfterScaleActualHeight(float height)
126     {
127         stackAfterScaleActualHeight_ = height;
128     }
129 
GetStackAfterScaleActualHeight()130     float GetStackAfterScaleActualHeight() const
131     {
132         return stackAfterScaleActualHeight_;
133     }
134 
SetHoverImageScaleFrom(float scaleFrom)135     void SetHoverImageScaleFrom(float scaleFrom)
136     {
137         hoverImageScaleFrom_ = scaleFrom;
138     }
139 
GetHoverImageScaleFrom()140     float GetHoverImageScaleFrom() const
141     {
142         return hoverImageScaleFrom_;
143     }
144 
SetHoverImageScaleTo(float scaleTo)145     void SetHoverImageScaleTo(float scaleTo)
146     {
147         hoverImageScaleTo_ = scaleTo;
148     }
149 
GetHoverImageScaleTo()150     float GetHoverImageScaleTo() const
151     {
152         return hoverImageScaleTo_;
153     }
154 
SetHoverTargetOriginScale(VectorF scale)155     void SetHoverTargetOriginScale(VectorF scale)
156     {
157         hoverTargetOriginScale_ = scale;
158     }
159 
GetHoverTargetOriginScale()160     VectorF GetHoverTargetOriginScale() const
161     {
162         return hoverTargetOriginScale_;
163     }
164 
SetCustomPreviewScaleTo(float scaleTo)165     void SetCustomPreviewScaleTo(float scaleTo)
166     {
167         customPreviewScaleTo_ = scaleTo;
168     }
169 
GetCustomPreviewScaleTo()170     float GetCustomPreviewScaleTo() const
171     {
172         return customPreviewScaleTo_;
173     }
174     RefPtr<FrameNode> GetMenuWrapper() const;
175     bool GetHoverScaleInterruption() const;
176 
SetIsHoverImageScalePlaying(bool isPlay)177     void SetIsHoverImageScalePlaying(bool isPlay)
178     {
179         isHoverImageScalePlaying_ = isPlay;
180     }
181 
IsHoverImageScalePlaying()182     bool IsHoverImageScalePlaying()
183     {
184         return isHoverImageScalePlaying_;
185     }
186 
SetIsHoverImagePreviewScalePlaying(bool isPlay)187     void SetIsHoverImagePreviewScalePlaying(bool isPlay)
188     {
189         isHoverImagePreviewScalePlaying_ = isPlay;
190     }
191 
IsHoverImagePreviewScalePlaying()192     bool IsHoverImagePreviewScalePlaying()
193     {
194         return isHoverImagePreviewScalePlaying_;
195     }
196 
197 private:
198     void OnModifyDone() override;
199     bool OnDirtyLayoutWrapperSwap(const RefPtr<LayoutWrapper>& dirty, const DirtySwapConfig& config) override;
200     void InitPanEvent(const RefPtr<GestureEventHub>& gestureHub);
201     void HandleDragEnd(float offsetX, float offsetY, float velocity);
202     void ShowBorderRadiusAndShadowAnimation(const MenuParam& menuParam);
203     void UpdateShowScale(const RefPtr<RenderContext>& context, const RefPtr<MenuTheme>& menuTheme,
204         const RefPtr<MenuPattern>& menuPattern);
205     bool isFirstShow_ = false;
206     bool hasPreviewTransitionEffect_ = false;
207 
208     bool isShowHoverImage_ = false;
209     bool isHoverImageScalePlaying_ = false;
210     bool isHoverImagePreviewScalePlaying_ = false;
211     OffsetF hoverImageAfterScaleOffset_;
212     float hoverImageAfterScaleWidth_ = 0.0f;
213     float hoverImageAfterScaleHeight_ = 0.0f;
214     float customPreviewWidth_ = 0.0f;
215     float customPreviewHeight_ = 0.0f;
216     float stackAfterScaleActualWidth_ = 0.0f;
217     float stackAfterScaleActualHeight_ = 0.0f;
218     float hoverImageScaleFrom_ = 1.0f;
219     float hoverImageScaleTo_ = 1.0f;
220     float customPreviewScaleTo_ = 1.0f;
221     VectorF hoverTargetOriginScale_ = { 1.0f, 1.0f };
222     ACE_DISALLOW_COPY_AND_MOVE(MenuPreviewPattern);
223 };
224 } // namespace OHOS::Ace::NG
225 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_MENU_MENU_PREVIEW_PATTERN_H
226