1 #ifndef DALI_TOOLKIT_TEXT_SCROLLER_H
2 #define DALI_TOOLKIT_TEXT_SCROLLER_H
5 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <dali/public-api/actors/camera-actor.h>
23 #include <dali/public-api/animation/animation.h>
24 #include <dali/public-api/render-tasks/render-task.h>
25 #include <dali/public-api/rendering/renderer.h>
28 #include <dali-toolkit/internal/text/text-definitions.h>
29 #include <dali-toolkit/public-api/controls/text-controls/text-label.h>
30 #include <dali-toolkit/public-api/text/text-enumerations.h>
39 class ScrollerInterface;
41 typedef IntrusivePtr<TextScroller> TextScrollerPtr;
44 * @brief A helper class for scrolling text
46 class TextScroller : public RefObject, public ConnectionTracker
50 * @brief Text Scrolling helper, used to automatically scroll text, SetParameters should be called before scrolling is needed.
51 * CleanUp removes the Scrolling actors from stage whilst keeping the Scroller object alive and preserving Speed, Gap and Loop count.
53 * @param[in] scrollerInterface scroller interface
55 static TextScrollerPtr New(ScrollerInterface& scrollerInterface);
58 * @brief Set parameters relating to source required for scrolling
60 * @param[in] scrollingTextActor actor containing the text to be scrolled
61 * @param[in] renderer renderer to render the text
62 * @param[in] textureSet texture of the text to be scrolled
63 * @param[in] controlSize size of the control to scroll within
64 * @param[in] textureSize size of the texture
65 * @param[in] wrapGap The gap before scrolling wraps
66 * @param[in] direction text direction true for right to left text
67 * @param[in] horizontalAlignment horizontal alignment of the text
68 * @param[in] verticalAlignment vertical alignment of the text
70 void SetParameters(Actor scrollingTextActor, Dali::Renderer renderer, TextureSet textureSet, const Size& controlSize, const Size& textureSize, const float wrapGap, CharacterDirection direction, HorizontalAlignment::Type horizontalAlignment, VerticalAlignment::Type verticalAlignment);
73 * @brief Set the gap distance to elapse before the text wraps around
74 * @param[in] gap distance to elapse
79 * @brief Get the distance before scrolling wraps
80 * @return gap distance to elapse
85 * @brief Set speed the text should scroll
86 * @param[in] scrollSpeed pixels per second
88 void SetSpeed(int scrollSpeed);
91 * @brief Get the speed of text scrolling
92 * @return speed in pixels per second
97 * @brief Set the number of times the text scrolling should loop, can stop current scrolling by passing in 0;
98 * @param[in] loopCount number of times the scrolled text should loop, 0 to stop scrolling
100 void SetLoopCount(int loopCount);
103 * @brief Get the number of loops
104 * @return int number of loops
106 int GetLoopCount() const;
109 * @brief Set the delay time of scroll animation loop
110 * @param[in] float delay time seconds of loops
112 void SetLoopDelay(float delay);
115 * @brief Get the delay time of scroll
116 * @return float delay time seconds of loops
118 float GetLoopDelay() const;
121 * @brief Set the mode of scrolling stop
122 * @param[in] stopMode type when text scrolling is stoped.
124 void SetStopMode(TextLabel::AutoScrollStopMode::Type stopMode);
127 * @brief Stop the auto scrolling.
129 void StopScrolling();
132 * @brief Get the mode of scrolling stop
133 * @return stopMode type when text scrolling is stoped.
135 TextLabel::AutoScrollStopMode::Type GetStopMode() const;
137 private: // Implementation
141 TextScroller(ScrollerInterface& scrollerInterface);
149 TextScroller(const TextScroller& handle);
152 TextScroller& operator=(const TextScroller& handle);
155 * @brief Callback for end of animation
156 * @param[in] animation Animation handle
158 void AutoScrollAnimationFinished(Dali::Animation& animation);
161 * @brief variables required to set up scrolling animation
162 * @param[in] scrollingTextActor actor that shows scrolling text
163 * @param[in] scrollAmount distance to animate text for the given duration
164 * @param[in] scrollDuration duration of aninmation
165 * @param[in] loopCount number of times to loop the scrolling text
167 void StartScrolling(Actor scrollingTextActor, float scrollAmount, float scrollDuration, int loopCount);
170 ScrollerInterface& mScrollerInterface; // Interface implemented by control that requires scrolling
171 Property::Index mScrollDeltaIndex; // Property used by shader to represent distance to scroll
172 Animation mScrollAnimation; // Animation used to update the mScrollDeltaIndex
173 Dali::Renderer mRenderer; // Renderer used to render the text
174 Shader mShader; // Shader originally used by the renderer while not scrolling
175 TextureSet mTextureSet; // Texture originally used by the renderer while not scrolling
177 int mScrollSpeed; ///< Speed which text should automatically scroll at
178 int mLoopCount; ///< Number of time the text should scroll
179 float mLoopDelay; ///< Time delay of loop start
180 float mWrapGap; ///< Gap before text wraps around when scrolling
181 TextLabel::AutoScrollStopMode::Type mStopMode; ///< Stop mode of scrolling text, when loop count is 0.
183 }; // TextScroller class
187 } // namespace Toolkit
191 #endif // DALI_TOOLKIT_TEXT_SCROLLER_H