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