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