1a3e0fd82Sopenharmony_ci/*
2a3e0fd82Sopenharmony_ci * Copyright (c) 2020-2021 Huawei Device Co., Ltd.
3a3e0fd82Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4a3e0fd82Sopenharmony_ci * you may not use this file except in compliance with the License.
5a3e0fd82Sopenharmony_ci * You may obtain a copy of the License at
6a3e0fd82Sopenharmony_ci *
7a3e0fd82Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8a3e0fd82Sopenharmony_ci *
9a3e0fd82Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10a3e0fd82Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11a3e0fd82Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12a3e0fd82Sopenharmony_ci * See the License for the specific language governing permissions and
13a3e0fd82Sopenharmony_ci * limitations under the License.
14a3e0fd82Sopenharmony_ci */
15a3e0fd82Sopenharmony_ci
16a3e0fd82Sopenharmony_ci/**
17a3e0fd82Sopenharmony_ci * @addtogroup UI_Components
18a3e0fd82Sopenharmony_ci * @{
19a3e0fd82Sopenharmony_ci *
20a3e0fd82Sopenharmony_ci * @brief Defines UI components such as buttons, texts, images, lists, and progress bars.
21a3e0fd82Sopenharmony_ci *
22a3e0fd82Sopenharmony_ci * @since 1.0
23a3e0fd82Sopenharmony_ci * @version 1.0
24a3e0fd82Sopenharmony_ci */
25a3e0fd82Sopenharmony_ci
26a3e0fd82Sopenharmony_ci/**
27a3e0fd82Sopenharmony_ci * @file root_view.h
28a3e0fd82Sopenharmony_ci *
29a3e0fd82Sopenharmony_ci * @brief Manages a root view.
30a3e0fd82Sopenharmony_ci *
31a3e0fd82Sopenharmony_ci * A root view is the view containing its child views. It represents the root node in a tree structure and is
32a3e0fd82Sopenharmony_ci * the parent to all the children.
33a3e0fd82Sopenharmony_ci *
34a3e0fd82Sopenharmony_ci * @since 1.0
35a3e0fd82Sopenharmony_ci * @version 1.0
36a3e0fd82Sopenharmony_ci */
37a3e0fd82Sopenharmony_ci
38a3e0fd82Sopenharmony_ci#ifndef GRAPHIC_LITE_ROOT_VIEW_H
39a3e0fd82Sopenharmony_ci#define GRAPHIC_LITE_ROOT_VIEW_H
40a3e0fd82Sopenharmony_ci
41a3e0fd82Sopenharmony_ci#if defined __linux__ || defined __LITEOS__ || defined __APPLE__
42a3e0fd82Sopenharmony_ci#include <pthread.h>
43a3e0fd82Sopenharmony_ci#endif
44a3e0fd82Sopenharmony_ci
45a3e0fd82Sopenharmony_ci#include "components/ui_view_group.h"
46a3e0fd82Sopenharmony_ci#include "events/key_event.h"
47a3e0fd82Sopenharmony_ci#include "events/virtual_device_event.h"
48a3e0fd82Sopenharmony_ci#include "gfx_utils/list.h"
49a3e0fd82Sopenharmony_ci
50a3e0fd82Sopenharmony_ci#if LOCAL_RENDER
51a3e0fd82Sopenharmony_ci#include <map>
52a3e0fd82Sopenharmony_ci#include "gfx_utils/vector.h"
53a3e0fd82Sopenharmony_ci#endif
54a3e0fd82Sopenharmony_ci
55a3e0fd82Sopenharmony_cinamespace OHOS {
56a3e0fd82Sopenharmony_ci#if ENABLE_WINDOW
57a3e0fd82Sopenharmony_ciclass Window;
58a3e0fd82Sopenharmony_ciclass WindowImpl;
59a3e0fd82Sopenharmony_ci#endif
60a3e0fd82Sopenharmony_ci
61a3e0fd82Sopenharmony_ci/**
62a3e0fd82Sopenharmony_ci * @brief Defines the functions related to a root view which contains its child views and represents
63a3e0fd82Sopenharmony_ci *        the root node in a tree structure.
64a3e0fd82Sopenharmony_ci *
65a3e0fd82Sopenharmony_ci * @since 1.0
66a3e0fd82Sopenharmony_ci * @version 1.0
67a3e0fd82Sopenharmony_ci */
68a3e0fd82Sopenharmony_ciclass RootView : public UIViewGroup {
69a3e0fd82Sopenharmony_cipublic:
70a3e0fd82Sopenharmony_ci    /**
71a3e0fd82Sopenharmony_ci     * @brief Obtains a singleton <b>RootView</b> instance.
72a3e0fd82Sopenharmony_ci     *
73a3e0fd82Sopenharmony_ci     * @return Returns the singleton <b>RootView</b> instance.
74a3e0fd82Sopenharmony_ci     * @since 1.0
75a3e0fd82Sopenharmony_ci     * @version 1.0
76a3e0fd82Sopenharmony_ci     */
77a3e0fd82Sopenharmony_ci    static RootView* GetInstance();
78a3e0fd82Sopenharmony_ci
79a3e0fd82Sopenharmony_ci#if ENABLE_WINDOW
80a3e0fd82Sopenharmony_ci    /**
81a3e0fd82Sopenharmony_ci     * @brief Obtains a <b>RootView</b> instance bound to a window.
82a3e0fd82Sopenharmony_ci     *
83a3e0fd82Sopenharmony_ci     * @return Returns the <b>RootView</b> instance.
84a3e0fd82Sopenharmony_ci     * @since 1.0
85a3e0fd82Sopenharmony_ci     * @version 1.0
86a3e0fd82Sopenharmony_ci     */
87a3e0fd82Sopenharmony_ci    static RootView* GetWindowRootView()
88a3e0fd82Sopenharmony_ci    {
89a3e0fd82Sopenharmony_ci        return new RootView;
90a3e0fd82Sopenharmony_ci    }
91a3e0fd82Sopenharmony_ci
92a3e0fd82Sopenharmony_ci    /**
93a3e0fd82Sopenharmony_ci     * @brief Destroys the <b>RootView</b> bound to a window.
94a3e0fd82Sopenharmony_ci     *
95a3e0fd82Sopenharmony_ci     * @param rootView Indicates the pointer to the <b>RootView</b> to destroy.
96a3e0fd82Sopenharmony_ci     * @return Returns <b>true</b> if the operation is successful; returns <b>false</b> otherwise.
97a3e0fd82Sopenharmony_ci     * @since 1.0
98a3e0fd82Sopenharmony_ci     * @version 1.0
99a3e0fd82Sopenharmony_ci     */
100a3e0fd82Sopenharmony_ci    static bool DestroyWindowRootView(RootView* rootView)
101a3e0fd82Sopenharmony_ci    {
102a3e0fd82Sopenharmony_ci        if (rootView == RootView::GetInstance()) {
103a3e0fd82Sopenharmony_ci            return false;
104a3e0fd82Sopenharmony_ci        }
105a3e0fd82Sopenharmony_ci        delete rootView;
106a3e0fd82Sopenharmony_ci        return true;
107a3e0fd82Sopenharmony_ci    }
108a3e0fd82Sopenharmony_ci#endif
109a3e0fd82Sopenharmony_ci
110a3e0fd82Sopenharmony_ci    /**
111a3e0fd82Sopenharmony_ci     * @brief Represents the listener for monitoring physical key events.
112a3e0fd82Sopenharmony_ci     *
113a3e0fd82Sopenharmony_ci     * @since 1.0
114a3e0fd82Sopenharmony_ci     * @version 1.0
115a3e0fd82Sopenharmony_ci     */
116a3e0fd82Sopenharmony_ci    class OnKeyActListener : public HeapBase {
117a3e0fd82Sopenharmony_ci    public:
118a3e0fd82Sopenharmony_ci        /**
119a3e0fd82Sopenharmony_ci         * @brief Responds to a physical key event.
120a3e0fd82Sopenharmony_ci         *
121a3e0fd82Sopenharmony_ci         * @param view Indicates the view displayed upon a physical key event.
122a3e0fd82Sopenharmony_ci         * @param event Indicates the physical key event to respond to.
123a3e0fd82Sopenharmony_ci         * @return Returns <b>true</b> if the view is normally displayed upon a physical key
124a3e0fd82Sopenharmony_ci         *         event; returns <b> false</b> otherwise.
125a3e0fd82Sopenharmony_ci         * @since 1.0
126a3e0fd82Sopenharmony_ci         * @version 1.0
127a3e0fd82Sopenharmony_ci         */
128a3e0fd82Sopenharmony_ci        virtual bool OnKeyAct(UIView& view, const KeyEvent& event) = 0;
129a3e0fd82Sopenharmony_ci    };
130a3e0fd82Sopenharmony_ci
131a3e0fd82Sopenharmony_ci    /**
132a3e0fd82Sopenharmony_ci     * @brief Obtains the view type.
133a3e0fd82Sopenharmony_ci     *
134a3e0fd82Sopenharmony_ci     * @return Returns <b>UI_ROOT_VIEW</b>, as defined in {@link UIViewType}.
135a3e0fd82Sopenharmony_ci     * @since 1.0
136a3e0fd82Sopenharmony_ci     * @version 1.0
137a3e0fd82Sopenharmony_ci     */
138a3e0fd82Sopenharmony_ci    UIViewType GetViewType() const override
139a3e0fd82Sopenharmony_ci    {
140a3e0fd82Sopenharmony_ci        return UI_ROOT_VIEW;
141a3e0fd82Sopenharmony_ci    }
142a3e0fd82Sopenharmony_ci
143a3e0fd82Sopenharmony_ci    /**
144a3e0fd82Sopenharmony_ci     * @brief Executes a physical key event.
145a3e0fd82Sopenharmony_ci     *
146a3e0fd82Sopenharmony_ci     * @param event Indicates the physical key event to execute.
147a3e0fd82Sopenharmony_ci     * @since 1.0
148a3e0fd82Sopenharmony_ci     * @version 1.0
149a3e0fd82Sopenharmony_ci     */
150a3e0fd82Sopenharmony_ci    virtual void OnKeyEvent(const KeyEvent& event)
151a3e0fd82Sopenharmony_ci    {
152a3e0fd82Sopenharmony_ci        if (onKeyActListener_ != nullptr) {
153a3e0fd82Sopenharmony_ci            onKeyActListener_->OnKeyAct(*this, event);
154a3e0fd82Sopenharmony_ci        }
155a3e0fd82Sopenharmony_ci    }
156a3e0fd82Sopenharmony_ci
157a3e0fd82Sopenharmony_ci    /**
158a3e0fd82Sopenharmony_ci     * @brief Sets the listener that contains a callback to be invoked upon a physical key event.
159a3e0fd82Sopenharmony_ci     *
160a3e0fd82Sopenharmony_ci     * @param onKeyActListener Indicates the pointer to the listener to set.
161a3e0fd82Sopenharmony_ci     * @since 1.0
162a3e0fd82Sopenharmony_ci     * @version 1.0
163a3e0fd82Sopenharmony_ci     */
164a3e0fd82Sopenharmony_ci    void SetOnKeyActListener(OnKeyActListener* onKeyActListener)
165a3e0fd82Sopenharmony_ci    {
166a3e0fd82Sopenharmony_ci        onKeyActListener_ = onKeyActListener;
167a3e0fd82Sopenharmony_ci    }
168a3e0fd82Sopenharmony_ci
169a3e0fd82Sopenharmony_ci    /**
170a3e0fd82Sopenharmony_ci     * @brief Clears the listener for monitoring physical key events.
171a3e0fd82Sopenharmony_ci     *
172a3e0fd82Sopenharmony_ci     * @since 1.0
173a3e0fd82Sopenharmony_ci     * @version 1.0
174a3e0fd82Sopenharmony_ci     */
175a3e0fd82Sopenharmony_ci    void ClearOnKeyActListener()
176a3e0fd82Sopenharmony_ci    {
177a3e0fd82Sopenharmony_ci        onKeyActListener_ = nullptr;
178a3e0fd82Sopenharmony_ci    }
179a3e0fd82Sopenharmony_ci
180a3e0fd82Sopenharmony_ci    /**
181a3e0fd82Sopenharmony_ci     * @brief Listens for the input events triggered by a virtual device other than
182a3e0fd82Sopenharmony_ci     *        human touching or physical pressing.
183a3e0fd82Sopenharmony_ci     *
184a3e0fd82Sopenharmony_ci     * @since 1.0
185a3e0fd82Sopenharmony_ci     * @version 1.0
186a3e0fd82Sopenharmony_ci     */
187a3e0fd82Sopenharmony_ci    class OnVirtualDeviceEventListener : public HeapBase {
188a3e0fd82Sopenharmony_ci    public:
189a3e0fd82Sopenharmony_ci        /**
190a3e0fd82Sopenharmony_ci         * @brief Responds to an input event triggered by a virtual device.
191a3e0fd82Sopenharmony_ci         *
192a3e0fd82Sopenharmony_ci          * @param view Indicates the view displayed upon an input event triggered by a virtual device.
193a3e0fd82Sopenharmony_ci         * @param event Indicates the input event to respond to.
194a3e0fd82Sopenharmony_ci         * @return Returns <b>true</b> if this view is normally displayed upon an input event triggered by a
195a3e0fd82Sopenharmony_ci         *         virtual device; returns <b> false</b> otherwise.
196a3e0fd82Sopenharmony_ci         * @since 1.0
197a3e0fd82Sopenharmony_ci         * @version 1.0
198a3e0fd82Sopenharmony_ci         */
199a3e0fd82Sopenharmony_ci        virtual bool OnVirtualDeviceEvent(UIView& view, VirtualDeviceEvent event) = 0;
200a3e0fd82Sopenharmony_ci    };
201a3e0fd82Sopenharmony_ci
202a3e0fd82Sopenharmony_ci    /**
203a3e0fd82Sopenharmony_ci     * @brief Executes an input event triggered by a virtual device.
204a3e0fd82Sopenharmony_ci     *
205a3e0fd82Sopenharmony_ci     * @param event Indicates the input event to respond to.
206a3e0fd82Sopenharmony_ci     * @since 1.0
207a3e0fd82Sopenharmony_ci     * @version 1.0
208a3e0fd82Sopenharmony_ci     */
209a3e0fd82Sopenharmony_ci    virtual void OnVirtualDeviceEvent(const VirtualDeviceEvent& event)
210a3e0fd82Sopenharmony_ci    {
211a3e0fd82Sopenharmony_ci        if (onVirtualEventListener_ != nullptr) {
212a3e0fd82Sopenharmony_ci            onVirtualEventListener_->OnVirtualDeviceEvent(*this, event);
213a3e0fd82Sopenharmony_ci        }
214a3e0fd82Sopenharmony_ci    }
215a3e0fd82Sopenharmony_ci
216a3e0fd82Sopenharmony_ci    /**
217a3e0fd82Sopenharmony_ci     * @brief Sets a listener for monitoring the input events of a virtual device.
218a3e0fd82Sopenharmony_ci     *
219a3e0fd82Sopenharmony_ci     * @param onVirtualDeviceEventListener Indicates the pointer to the listener to set.
220a3e0fd82Sopenharmony_ci     * @since 1.0
221a3e0fd82Sopenharmony_ci     * @version 1.0
222a3e0fd82Sopenharmony_ci     */
223a3e0fd82Sopenharmony_ci    void SetOnVirtualDeviceEventListener(OnVirtualDeviceEventListener* onVirtualDeviceEventListener)
224a3e0fd82Sopenharmony_ci    {
225a3e0fd82Sopenharmony_ci        onVirtualEventListener_ = onVirtualDeviceEventListener;
226a3e0fd82Sopenharmony_ci    }
227a3e0fd82Sopenharmony_ci
228a3e0fd82Sopenharmony_ci    /**
229a3e0fd82Sopenharmony_ci     * @brief Clears the listener for monitoring the input events of a virtual device.
230a3e0fd82Sopenharmony_ci     *
231a3e0fd82Sopenharmony_ci     * @since 1.0
232a3e0fd82Sopenharmony_ci     * @version 1.0
233a3e0fd82Sopenharmony_ci     */
234a3e0fd82Sopenharmony_ci    void ClearOnVirtualDeviceEventListener()
235a3e0fd82Sopenharmony_ci    {
236a3e0fd82Sopenharmony_ci        onVirtualEventListener_ = nullptr;
237a3e0fd82Sopenharmony_ci    }
238a3e0fd82Sopenharmony_ci
239a3e0fd82Sopenharmony_ci    /**
240a3e0fd82Sopenharmony_ci     * @brief Checks whether the target view is one of the child views of the specified parent view.
241a3e0fd82Sopenharmony_ci     *
242a3e0fd82Sopenharmony_ci     * @param parentView Indicates the specified parent view.
243a3e0fd82Sopenharmony_ci     * @param subView Indicates the target child view.
244a3e0fd82Sopenharmony_ci     * @return Returns <b>true</b> if the target view is available; returns  <b> false</b> otherwise.
245a3e0fd82Sopenharmony_ci     * @since 1.0
246a3e0fd82Sopenharmony_ci     * @version 1.0
247a3e0fd82Sopenharmony_ci     */
248a3e0fd82Sopenharmony_ci    static bool FindSubView(const UIView& parentView, const UIView* subView);
249a3e0fd82Sopenharmony_ci
250a3e0fd82Sopenharmony_ci#if ENABLE_WINDOW
251a3e0fd82Sopenharmony_ci    /**
252a3e0fd82Sopenharmony_ci     * @brief Obtains the window bound with a <b>RootView</b>.
253a3e0fd82Sopenharmony_ci     *
254a3e0fd82Sopenharmony_ci     * @return Returns the window.
255a3e0fd82Sopenharmony_ci     * @since 1.0
256a3e0fd82Sopenharmony_ci     * @version 1.0
257a3e0fd82Sopenharmony_ci     */
258a3e0fd82Sopenharmony_ci    Window* GetBoundWindow() const;
259a3e0fd82Sopenharmony_ci#endif
260a3e0fd82Sopenharmony_ci
261a3e0fd82Sopenharmony_ci    void DrawTop(UIView* view, const Rect& rect);
262a3e0fd82Sopenharmony_ci
263a3e0fd82Sopenharmony_ci    /**
264a3e0fd82Sopenharmony_ci     * @brief Measure all child view under RootView
265a3e0fd82Sopenharmony_ci     */
266a3e0fd82Sopenharmony_ci    void Measure();
267a3e0fd82Sopenharmony_ci
268a3e0fd82Sopenharmony_ci    void MeasureView(UIView* view);
269a3e0fd82Sopenharmony_ci
270a3e0fd82Sopenharmony_ci    /**
271a3e0fd82Sopenharmony_ci     * @brief update momory info based on FB buffer info.
272a3e0fd82Sopenharmony_ci     *
273a3e0fd82Sopenharmony_ci     * @param fbBufferInfo FB buffer info
274a3e0fd82Sopenharmony_ci     * @since 6.0
275a3e0fd82Sopenharmony_ci     * @version 6.0
276a3e0fd82Sopenharmony_ci     */
277a3e0fd82Sopenharmony_ci    void UpdateBufferInfo(BufferInfo* fbBufferInfo);
278a3e0fd82Sopenharmony_ci
279a3e0fd82Sopenharmony_ci    /**
280a3e0fd82Sopenharmony_ci     * @brief save the drawing context.
281a3e0fd82Sopenharmony_ci     *
282a3e0fd82Sopenharmony_ci     * @since 6.0
283a3e0fd82Sopenharmony_ci     * @version 6.0
284a3e0fd82Sopenharmony_ci     */
285a3e0fd82Sopenharmony_ci    void SaveDrawContext();
286a3e0fd82Sopenharmony_ci
287a3e0fd82Sopenharmony_ci    /**
288a3e0fd82Sopenharmony_ci     * @brief restore the drawing context.
289a3e0fd82Sopenharmony_ci     *
290a3e0fd82Sopenharmony_ci     * @since 6.0
291a3e0fd82Sopenharmony_ci     * @version 6.0
292a3e0fd82Sopenharmony_ci     */
293a3e0fd82Sopenharmony_ci    void RestoreDrawContext();
294a3e0fd82Sopenharmony_ci
295a3e0fd82Sopenharmony_ciprivate:
296a3e0fd82Sopenharmony_ci    friend class RenderManager;
297a3e0fd82Sopenharmony_ci    friend class UIViewGroup;
298a3e0fd82Sopenharmony_ci    friend class UIView;
299a3e0fd82Sopenharmony_ci#if ENABLE_WINDOW
300a3e0fd82Sopenharmony_ci    friend class WindowImpl;
301a3e0fd82Sopenharmony_ci#endif
302a3e0fd82Sopenharmony_ci
303a3e0fd82Sopenharmony_ci    RootView();
304a3e0fd82Sopenharmony_ci
305a3e0fd82Sopenharmony_ci    ~RootView();
306a3e0fd82Sopenharmony_ci
307a3e0fd82Sopenharmony_ci    inline Rect GetScreenRect();
308a3e0fd82Sopenharmony_ci    void AddInvalidateRectWithLock(Rect& rect, UIView *view);
309a3e0fd82Sopenharmony_ci    void AddInvalidateRect(Rect& rect, UIView* view);
310a3e0fd82Sopenharmony_ci    void Render();
311a3e0fd82Sopenharmony_ci    UIView* GetTopUIView(const Rect& rect);
312a3e0fd82Sopenharmony_ci    void InitDrawContext();
313a3e0fd82Sopenharmony_ci    void DestroyDrawContext();
314a3e0fd82Sopenharmony_ci    void InitMapBufferInfo(BufferInfo* bufferInfo);
315a3e0fd82Sopenharmony_ci    void DestroyMapBufferInfo();
316a3e0fd82Sopenharmony_ci    void BlitMapBuffer(Rect& curViewRect, TransformMap& transMap, const Rect& invalidatedArea);
317a3e0fd82Sopenharmony_ci    void ClearMapBuffer();
318a3e0fd82Sopenharmony_ci    void UpdateMapBufferInfo(Rect& invalidatedArea);
319a3e0fd82Sopenharmony_ci    void RestoreMapBufferInfo();
320a3e0fd82Sopenharmony_ci    /**
321a3e0fd82Sopenharmony_ci     * @brief check need rootview to trans view
322a3e0fd82Sopenharmony_ci     *
323a3e0fd82Sopenharmony_ci     * @param  param UIView
324a3e0fd82Sopenharmony_ci     * @return true if need rootview to trans view
325a3e0fd82Sopenharmony_ci     */
326a3e0fd82Sopenharmony_ci    bool CheckNeedRootViewTransView(UIView* curview);
327a3e0fd82Sopenharmony_ci#if LOCAL_RENDER
328a3e0fd82Sopenharmony_ci    void RemoveViewFromInvalidMap(UIView *view);
329a3e0fd82Sopenharmony_ci    void DrawInvalidMap(const Rect &buffRect);
330a3e0fd82Sopenharmony_ci    void OptimizeInvalidView(UIView* curview, UIView* background, List<Rect> &renderedRects);
331a3e0fd82Sopenharmony_ci    void OptimizeInvalidMap();
332a3e0fd82Sopenharmony_ci
333a3e0fd82Sopenharmony_ci    std::map<UIView*, Graphic::Vector<Rect>> invalidateMap_;
334a3e0fd82Sopenharmony_ci#else
335a3e0fd82Sopenharmony_ci    void OptimizeAddRect(Rect& rect);
336a3e0fd82Sopenharmony_ci    void OptimizeInvalidateRects();
337a3e0fd82Sopenharmony_ci    List<Rect> invalidateRects_;
338a3e0fd82Sopenharmony_ci#endif
339a3e0fd82Sopenharmony_ci
340a3e0fd82Sopenharmony_ci    OnKeyActListener* onKeyActListener_ {nullptr};
341a3e0fd82Sopenharmony_ci    OnVirtualDeviceEventListener* onVirtualEventListener_ {nullptr};
342a3e0fd82Sopenharmony_ci#if defined __linux__ || defined __LITEOS__ || defined __APPLE__
343a3e0fd82Sopenharmony_ci    pthread_mutex_t lock_;
344a3e0fd82Sopenharmony_ci#endif
345a3e0fd82Sopenharmony_ci
346a3e0fd82Sopenharmony_ci#if ENABLE_WINDOW
347a3e0fd82Sopenharmony_ci    WindowImpl* boundWindow_ {nullptr};
348a3e0fd82Sopenharmony_ci#endif
349a3e0fd82Sopenharmony_ci    /**
350a3e0fd82Sopenharmony_ci     * @brief draw context info.
351a3e0fd82Sopenharmony_ci     * @param bufferInfo dst drawing buffer info.
352a3e0fd82Sopenharmony_ci     * @param mapBufferInfo dst animator drawing buffer info.
353a3e0fd82Sopenharmony_ci     * @since 6.0
354a3e0fd82Sopenharmony_ci     * @version 6.0
355a3e0fd82Sopenharmony_ci     */
356a3e0fd82Sopenharmony_ci    struct DrawContext {
357a3e0fd82Sopenharmony_ci        BufferInfo* bufferInfo;
358a3e0fd82Sopenharmony_ci        BufferInfo* mapBufferInfo;
359a3e0fd82Sopenharmony_ci    };
360a3e0fd82Sopenharmony_ci    DrawContext dc_;
361a3e0fd82Sopenharmony_ci    DrawContext bakDc_;
362a3e0fd82Sopenharmony_ci};
363a3e0fd82Sopenharmony_ci} // namespace OHOS
364a3e0fd82Sopenharmony_ci#endif // GRAPHIC_LITE_ROOT_VIEW_H
365