1 /* 2 * Copyright (c) 2021 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_TEXT_OVERLAY_TEXT_OVERLAY_COMPONENT_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_TEXT_OVERLAY_COMPONENT_H 18 19 #include "core/components/box/box_component.h" 20 #include "core/components/button/button_component.h" 21 #include "core/components/menu/menu_component.h" 22 #include "core/components/option/option_component.h" 23 #include "core/components/select_popup/select_popup_component.h" 24 #include "core/components/text_field/render_text_field.h" 25 #include "core/components/text_field/text_field_component.h" 26 #include "core/components/text_overlay/text_overlay_theme.h" 27 #include "core/components/tween/tween_component.h" 28 #include "core/pipeline/base/component.h" 29 #include "core/pipeline/base/sole_child_component.h" 30 #include "frameworks/core/animation/animator.h" 31 32 namespace OHOS::Ace { 33 34 constexpr Dimension ICON_SIZE = 24.0_vp; 35 constexpr Dimension ICON_PADDING = 2.0_vp; 36 37 using CommonCallback = std::function<void()>; 38 using StartHandleMoveCallback = 39 std::function<void(int32_t end, const Offset&, const std::function<void(const Offset&)>&, bool isSingleHandle)>; 40 using EndHandleMoveCallback = 41 std::function<void(int32_t start, const Offset&, const std::function<void(const Offset&)>&)>; 42 using CopyAllCallback = std::function<void(const std::function<void(const Offset&, const Offset&)>&)>; 43 44 class TextOverlayComponent : public SoleChildComponent { 45 DECLARE_ACE_TYPE(TextOverlayComponent, SoleChildComponent) 46 47 public: 48 TextOverlayComponent( 49 const RefPtr<ThemeManager>& themeManager, const RefPtr<AccessibilityManager>& accessibilityManager); 50 ~TextOverlayComponent() override = default; 51 52 RefPtr<Element> CreateElement() override; 53 RefPtr<RenderNode> CreateRenderNode() override; 54 55 void InitThemeStyle(const RefPtr<ThemeManager>& themeManager); 56 RefPtr<Component> BuildChild( 57 bool isSingleHandle, bool hasToolBar, bool hasMenu, bool hasIcon, bool hasAnimation = true); 58 RefPtr<Component> BuildToolBar(bool isSingleHandle, bool hasToolBar, bool hasMenu, bool hasIcon, bool hasAnimation); 59 60 void SetWeakTextField(const WeakPtr<RenderTextField>& weakTextField); 61 const WeakPtr<RenderTextField>& GetWeakTextField() const; 62 63 bool HasMoreButton() const; 64 65 void SetIsPassword(bool isPassword); 66 bool GetIsPassword() const; 67 68 void SetIsSingleHandle(bool isSingleHandle); 69 bool GetIsSingleHandle() const; 70 71 void SetLineHeight(double lineHeight); 72 double GetLineHeight() const; 73 74 void SetClipRect(const Rect& clipRect); 75 const Rect& GetClipRect() const; 76 77 void SetHandleColor(const Color& handleColor); 78 const Color& GetHandleColor() const; 79 80 void SetHandleColorInner(const Color& handleColorInner); 81 const Color& GetHandleColorInner() const; 82 83 void SetHandleDiameter(const Dimension& handleDiameter); 84 const Dimension& GetHandleDiameter() const; 85 86 void SetHandleDiameterInner(const Dimension& handleDiameterInner); 87 const Dimension& GetHandleDiameterInner() const; 88 89 void SetMenuSpacingWithText(const Dimension& menuSpacingWithText); 90 const Dimension& GetMenuSpacingWithText() const; 91 92 void SetOnFocusChange(const std::function<void(bool, bool)>& onFocusChange); 93 const std::function<void(bool, bool)>& GetOnFocusChange() const; 94 95 void SetOnCut(const CommonCallback& onCut); 96 const CommonCallback& GetOnCut() const; 97 98 void SetOnCopy(const CommonCallback& onCopy); 99 const CommonCallback& GetOnCopy() const; 100 101 void SetOnPaste(const CommonCallback& onPaste); 102 const CommonCallback& GetOnPaste() const; 103 104 void SetOnCopyAll(const CopyAllCallback& onCopyAll); 105 const CopyAllCallback& GetOnCopyAll() const; 106 107 void SetCutButtonMarker(const EventMarker& cutButtonMarker); 108 const EventMarker& GetCutButtonMarker() const; 109 110 void SetCopyButtonMarker(const EventMarker& copyButtonMarker); 111 const EventMarker& GetCopyButtonMarker() const; 112 113 void SetPasteButtonMarker(const EventMarker& pasteButtonMarker); 114 const EventMarker& GetPasteButtonMarker() const; 115 116 void SetCopyAllButtonMarker(const EventMarker& copyAllButtonMarker); 117 const EventMarker& GetCopyAllButtonMarker() const; 118 119 void SetMoreButtonMarker(const EventMarker& moreButtonMarker); 120 const EventMarker& GetMoreButtonMarker() const; 121 122 void SetStartHandleOffset(const Offset& offset); 123 const Offset& GetStartHandleOffset() const; 124 125 void SetEndHandleOffset(const Offset& offset); 126 const Offset& GetEndHandleOffset() const; 127 128 void SetOnStartHandleMove(const StartHandleMoveCallback& onStartHandleMove); 129 const StartHandleMoveCallback& GetOnStartHandleMove() const; 130 131 void SetOnEndHandleMove(const EndHandleMoveCallback& onEndHandleMove); 132 const EndHandleMoveCallback& GetOnEndHandleMove() const; 133 134 void SetRealTextDirection(TextDirection realTextDirection); 135 TextDirection GetRealTextDirection() const; 136 137 void SetOptions(const std::vector<InputOption>& options); 138 const std::vector<InputOption>& GetOptions() const; 139 140 void SetImageFill(const std::optional<Color>& imageFill); 141 void SetOptionsClickMarker(const EventMarker& onOptionsClick); 142 void SetTranslateButtonMarker(const EventMarker& onTranslate); 143 void SetShareButtonMarker(const EventMarker& onShare); 144 void SetSearchButtonMarker(const EventMarker& onSearch); 145 void SetPopOverlay(const CommonCallback& popOverlay); 146 void SetContext(const WeakPtr<PipelineContext>& context); 147 void SetShowOption(const TweenOption& tweenOption); 148 void SetHideOption(const TweenOption& tweenOption); 149 150 const RefPtr<SelectPopupComponent>& GetMenu() const; 151 152 private: 153 RefPtr<ButtonComponent> BuildButton(const std::string& data, const EventMarker& onClick); 154 RefPtr<ButtonComponent> BuildMoreIconButton(bool hasMenu); 155 RefPtr<Component> BuildMenu(); 156 RefPtr<OptionComponent> BuildMenuOption(const std::string& imageSrc, InternalResource::ResourceId resourceId, 157 const std::string& text, bool useResource); 158 RefPtr<Component> BuildAnimation(const RefPtr<Component>& child, bool hasAnimation); 159 void OnOptionClick(int32_t index); 160 void OnToolBarButtonClick(const EventMarker& marker, const std::string& eventName); 161 std::string GetSelectedText() const; 162 163 WeakPtr<PipelineContext> context_; 164 WeakPtr<RenderTextField> weakTextField_; 165 RefPtr<TextOverlayTheme> theme_; 166 RefPtr<SelectPopupComponent> menu_; 167 RefPtr<ThemeManager> themeManager_; 168 WeakPtr<AccessibilityManager> accessibilityManager_; 169 170 bool hasMoreButton_ = false; 171 bool isPassword_ = false; 172 bool isSingleHandle_ = false; 173 double lineHeight_ = 0.0; 174 Rect clipRect_; 175 Color handleColor_; 176 Color handleColorInner_; 177 std::optional<Color> imageFill_; 178 Dimension handleDiameter_; 179 Dimension handleDiameterInner_; 180 Dimension menuSpacingWithText_; 181 Offset startHandleOffset_; 182 Offset endHandleOffset_; 183 TextDirection realTextDirection_ = TextDirection::LTR; 184 ComposeId innerComposeId_; 185 ComposeId outerComposeId_; 186 187 CommonCallback popOverlay_; 188 CommonCallback onCut_; 189 CommonCallback onCopy_; 190 CommonCallback onPaste_; 191 CopyAllCallback onCopyAll_; 192 StartHandleMoveCallback onStartHandleMove_; 193 EndHandleMoveCallback onEndHandleMove_; 194 std::function<void(bool, bool)> onFocusChange_; 195 196 EventMarker optionsClickMarker_; 197 EventMarker translateButtonMarker_; 198 EventMarker shareButtonMarker_; 199 EventMarker searchButtonMarker_; 200 EventMarker cutButtonMarker_ = BackEndEventManager<void()>::GetInstance().GetAvailableMarker(); 201 EventMarker copyButtonMarker_ = BackEndEventManager<void()>::GetInstance().GetAvailableMarker(); 202 EventMarker pasteButtonMarker_ = BackEndEventManager<void()>::GetInstance().GetAvailableMarker(); 203 EventMarker copyAllButtonMarker_ = BackEndEventManager<void()>::GetInstance().GetAvailableMarker(); 204 EventMarker moreButtonMarker_ = BackEndEventManager<void()>::GetInstance().GetAvailableMarker(); 205 206 std::vector<InputOption> options_; // Options for menu. 207 }; 208 209 } // namespace OHOS::Ace 210 211 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_TEXT_OVERLAY_COMPONENT_H 212