1c29fa5a6Sopenharmony_ci/*
2c29fa5a6Sopenharmony_ci * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
3c29fa5a6Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4c29fa5a6Sopenharmony_ci * you may not use this file except in compliance with the License.
5c29fa5a6Sopenharmony_ci * You may obtain a copy of the License at
6c29fa5a6Sopenharmony_ci *
7c29fa5a6Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8c29fa5a6Sopenharmony_ci *
9c29fa5a6Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10c29fa5a6Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11c29fa5a6Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12c29fa5a6Sopenharmony_ci * See the License for the specific language governing permissions and
13c29fa5a6Sopenharmony_ci * limitations under the License.
14c29fa5a6Sopenharmony_ci */
15c29fa5a6Sopenharmony_ci
16c29fa5a6Sopenharmony_ci#ifndef POINTER_DRAWING_MANAGER_H
17c29fa5a6Sopenharmony_ci#define POINTER_DRAWING_MANAGER_H
18c29fa5a6Sopenharmony_ci
19c29fa5a6Sopenharmony_ci#include <iostream>
20c29fa5a6Sopenharmony_ci#include <list>
21c29fa5a6Sopenharmony_ci
22c29fa5a6Sopenharmony_ci#include "common/rs_thread_handler.h"
23c29fa5a6Sopenharmony_ci#include "draw/canvas.h"
24c29fa5a6Sopenharmony_ci#include "event_handler.h"
25c29fa5a6Sopenharmony_ci#include "nocopyable.h"
26c29fa5a6Sopenharmony_ci#include "pixel_map.h"
27c29fa5a6Sopenharmony_ci#include "transaction/rs_transaction.h"
28c29fa5a6Sopenharmony_ci#include "transaction/rs_interfaces.h"
29c29fa5a6Sopenharmony_ci#include "ui/rs_canvas_node.h"
30c29fa5a6Sopenharmony_ci#include "ui/rs_surface_node.h"
31c29fa5a6Sopenharmony_ci#include "window.h"
32c29fa5a6Sopenharmony_ci
33c29fa5a6Sopenharmony_ci#include "device_observer.h"
34c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR
35c29fa5a6Sopenharmony_ci#include "hardware_cursor_pointer_manager.h"
36c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR
37c29fa5a6Sopenharmony_ci#include "i_pointer_drawing_manager.h"
38c29fa5a6Sopenharmony_ci#include "mouse_event_normalize.h"
39c29fa5a6Sopenharmony_ci#include "setting_observer.h"
40c29fa5a6Sopenharmony_ci#include "struct_multimodal.h"
41c29fa5a6Sopenharmony_ci
42c29fa5a6Sopenharmony_cinamespace OHOS {
43c29fa5a6Sopenharmony_cinamespace MMI {
44c29fa5a6Sopenharmony_cinamespace {
45c29fa5a6Sopenharmony_ciconstexpr int32_t DEFAULT_FRAME_RATE { 30 };
46c29fa5a6Sopenharmony_ciconstexpr int32_t INVALID_DISPLAY_ID { -1 };
47c29fa5a6Sopenharmony_ciconstexpr float HARDWARE_CANVAS_SIZE { 512.0f };
48c29fa5a6Sopenharmony_ci} // namespace
49c29fa5a6Sopenharmony_ci
50c29fa5a6Sopenharmony_cistruct isMagicCursor {
51c29fa5a6Sopenharmony_ci    std::string name;
52c29fa5a6Sopenharmony_ci    bool isShow { false };
53c29fa5a6Sopenharmony_ci};
54c29fa5a6Sopenharmony_ci
55c29fa5a6Sopenharmony_cistruct PixelMapReleaseContext {
56c29fa5a6Sopenharmony_ci    explicit PixelMapReleaseContext(std::shared_ptr<Media::PixelMap> pixelMap) : pixelMap_(pixelMap) {}
57c29fa5a6Sopenharmony_ci
58c29fa5a6Sopenharmony_ci    ~PixelMapReleaseContext()
59c29fa5a6Sopenharmony_ci    {
60c29fa5a6Sopenharmony_ci        pixelMap_ = nullptr;
61c29fa5a6Sopenharmony_ci    }
62c29fa5a6Sopenharmony_ci
63c29fa5a6Sopenharmony_ciprivate:
64c29fa5a6Sopenharmony_ci    std::shared_ptr<Media::PixelMap> pixelMap_ { nullptr };
65c29fa5a6Sopenharmony_ci};
66c29fa5a6Sopenharmony_ciclass DelegateInterface;
67c29fa5a6Sopenharmony_ciclass PointerDrawingManager final : public IPointerDrawingManager,
68c29fa5a6Sopenharmony_ci                                    public IDeviceObserver,
69c29fa5a6Sopenharmony_ci                                    public std::enable_shared_from_this<PointerDrawingManager> {
70c29fa5a6Sopenharmony_cipublic:
71c29fa5a6Sopenharmony_ci    PointerDrawingManager();
72c29fa5a6Sopenharmony_ci    DISALLOW_COPY_AND_MOVE(PointerDrawingManager);
73c29fa5a6Sopenharmony_ci    ~PointerDrawingManager();
74c29fa5a6Sopenharmony_ci    void DrawPointer(int32_t displayId, int32_t physicalX, int32_t physicalY,
75c29fa5a6Sopenharmony_ci        const PointerStyle pointerStyle, Direction direction) override;
76c29fa5a6Sopenharmony_ci    void UpdateDisplayInfo(const DisplayInfo& displayInfo) override;
77c29fa5a6Sopenharmony_ci    void OnDisplayInfo(const DisplayGroupInfo& displayGroupInfo) override;
78c29fa5a6Sopenharmony_ci    void OnWindowInfo(const WinInfo &info) override;
79c29fa5a6Sopenharmony_ci    void UpdatePointerDevice(bool hasPointerDevice, bool isPointerVisible, bool isHotPlug) override;
80c29fa5a6Sopenharmony_ci    bool Init() override;
81c29fa5a6Sopenharmony_ci    int32_t SetPointerColor(int32_t color) override;
82c29fa5a6Sopenharmony_ci    int32_t GetPointerColor() override;
83c29fa5a6Sopenharmony_ci    void DeletePointerVisible(int32_t pid) override;
84c29fa5a6Sopenharmony_ci    int32_t SetPointerVisible(int32_t pid, bool visible, int32_t priority, bool isHap) override;
85c29fa5a6Sopenharmony_ci    bool GetPointerVisible(int32_t pid) override;
86c29fa5a6Sopenharmony_ci    int32_t SetPointerStyle(int32_t pid, int32_t windowId, PointerStyle pointerStyle,
87c29fa5a6Sopenharmony_ci        bool isUiExtension = false) override;
88c29fa5a6Sopenharmony_ci    int32_t ClearWindowPointerStyle(int32_t pid, int32_t windowId) override;
89c29fa5a6Sopenharmony_ci    int32_t GetPointerStyle(int32_t pid, int32_t windowId, PointerStyle &pointerStyle,
90c29fa5a6Sopenharmony_ci        bool isUiExtension = false) override;
91c29fa5a6Sopenharmony_ci    int32_t SetPointerSize(int32_t size) override;
92c29fa5a6Sopenharmony_ci    int32_t GetPointerSize() override;
93c29fa5a6Sopenharmony_ci    void DrawPointerStyle(const PointerStyle& pointerStyle) override;
94c29fa5a6Sopenharmony_ci    bool IsPointerVisible() override;
95c29fa5a6Sopenharmony_ci    void SetPointerLocation(int32_t x, int32_t y) override;
96c29fa5a6Sopenharmony_ci    void AdjustMouseFocus(Direction direction, ICON_TYPE iconType, int32_t &physicalX, int32_t &physicalY);
97c29fa5a6Sopenharmony_ci    void SetMouseDisplayState(bool state) override;
98c29fa5a6Sopenharmony_ci    bool GetMouseDisplayState() const override;
99c29fa5a6Sopenharmony_ci    int32_t SetCustomCursor(void* pixelMap, int32_t pid, int32_t windowId, int32_t focusX, int32_t focusY) override;
100c29fa5a6Sopenharmony_ci    int32_t SetMouseIcon(int32_t pid, int32_t windowId, void* pixelMap) override;
101c29fa5a6Sopenharmony_ci    int32_t SetMouseHotSpot(int32_t pid, int32_t windowId, int32_t hotSpotX, int32_t hotSpotY) override;
102c29fa5a6Sopenharmony_ci    PointerStyle GetLastMouseStyle() override;
103c29fa5a6Sopenharmony_ci    const std::map<MOUSE_ICON, IconStyle>& GetMouseIconPath() override;
104c29fa5a6Sopenharmony_ci    IconStyle GetIconStyle(const MOUSE_ICON mouseStyle) override;
105c29fa5a6Sopenharmony_ci    bool HasMagicCursor();
106c29fa5a6Sopenharmony_ci    int32_t DrawCursor(const MOUSE_ICON mouseStyle);
107c29fa5a6Sopenharmony_ci    int32_t SwitchPointerStyle() override;
108c29fa5a6Sopenharmony_ci    void DrawMovePointer(int32_t displayId, int32_t physicalX, int32_t physicalY) override;
109c29fa5a6Sopenharmony_ci    void Dump(int32_t fd, const std::vector<std::string> &args) override;
110c29fa5a6Sopenharmony_ci    void AttachToDisplay();
111c29fa5a6Sopenharmony_ci    int32_t EnableHardwareCursorStats(int32_t pid, bool enable) override;
112c29fa5a6Sopenharmony_ci    int32_t GetHardwareCursorStats(int32_t pid, uint32_t &frameCount, uint32_t &vsyncCount) override;
113c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_MAGICCURSOR
114c29fa5a6Sopenharmony_ci    int32_t GetPointerSnapshot(void *pixelMapPtr) override;
115c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_MAGICCURSOR
116c29fa5a6Sopenharmony_ci    void InitPointerCallback() override;
117c29fa5a6Sopenharmony_ci    void InitPointerObserver() override;
118c29fa5a6Sopenharmony_ci    void OnSessionLost(int32_t pid) override;
119c29fa5a6Sopenharmony_ci    int32_t SkipPointerLayer(bool isSkip) override;
120c29fa5a6Sopenharmony_ci    void SetDelegateProxy(std::shared_ptr<DelegateInterface> proxy) override
121c29fa5a6Sopenharmony_ci    {
122c29fa5a6Sopenharmony_ci        delegateProxy_ = proxy;
123c29fa5a6Sopenharmony_ci    }
124c29fa5a6Sopenharmony_ci    void DestroyPointerWindow() override;
125c29fa5a6Sopenharmony_ci    void DrawScreenCenterPointer(const PointerStyle& pointerStyle) override;
126c29fa5a6Sopenharmony_ci
127c29fa5a6Sopenharmony_ciprivate:
128c29fa5a6Sopenharmony_ci    IconStyle GetIconType(MOUSE_ICON mouseIcon);
129c29fa5a6Sopenharmony_ci    void GetPreferenceKey(std::string &name);
130c29fa5a6Sopenharmony_ci    void DrawLoadingPointerStyle(const MOUSE_ICON mouseStyle);
131c29fa5a6Sopenharmony_ci    void DrawRunningPointerAnimate(const MOUSE_ICON mouseStyle);
132c29fa5a6Sopenharmony_ci    void CreatePointerWindow(int32_t displayId, int32_t physicalX, int32_t physicalY, Direction direction);
133c29fa5a6Sopenharmony_ci    sptr<OHOS::Surface> GetLayer();
134c29fa5a6Sopenharmony_ci    sptr<OHOS::SurfaceBuffer> GetSurfaceBuffer(sptr<OHOS::Surface> layer) const;
135c29fa5a6Sopenharmony_ci    bool RetryGetSurfaceBuffer(sptr<OHOS::SurfaceBuffer> buffer, sptr<OHOS::Surface> layer);
136c29fa5a6Sopenharmony_ci    void DoDraw(uint8_t *addr, uint32_t width, uint32_t height, const MOUSE_ICON mouseStyle = MOUSE_ICON::DEFAULT);
137c29fa5a6Sopenharmony_ci    void DrawPixelmap(OHOS::Rosen::Drawing::Canvas &canvas, const MOUSE_ICON mouseStyle);
138c29fa5a6Sopenharmony_ci    void DrawManager();
139c29fa5a6Sopenharmony_ci    void FixCursorPosition(int32_t &physicalX, int32_t &physicalY);
140c29fa5a6Sopenharmony_ci    std::shared_ptr<OHOS::Media::PixelMap> DecodeImageToPixelMap(const std::string &imagePath);
141c29fa5a6Sopenharmony_ci    void UpdatePointerVisible();
142c29fa5a6Sopenharmony_ci    int32_t UpdateDefaultPointerStyle(int32_t pid, int32_t windowId, PointerStyle style, bool isUiExtension = false);
143c29fa5a6Sopenharmony_ci    void CheckMouseIconPath();
144c29fa5a6Sopenharmony_ci    void InitStyle();
145c29fa5a6Sopenharmony_ci    int32_t InitLayer(const MOUSE_ICON mouseStyle);
146c29fa5a6Sopenharmony_ci    int32_t SetPointerStylePreference(PointerStyle pointerStyle);
147c29fa5a6Sopenharmony_ci    void UpdateMouseStyle();
148c29fa5a6Sopenharmony_ci    int32_t UpdateCursorProperty(void* pixelMap, const int32_t &focusX, const int32_t &focusY);
149c29fa5a6Sopenharmony_ci    void RotateDegree(Direction direction);
150c29fa5a6Sopenharmony_ci    int32_t DrawMovePointer(int32_t displayId, int32_t physicalX, int32_t physicalY,
151c29fa5a6Sopenharmony_ci        PointerStyle pointerStyle, Direction direction);
152c29fa5a6Sopenharmony_ci    void AdjustMouseFocusByDirection0(ICON_TYPE iconType, int32_t &physicalX, int32_t &physicalY);
153c29fa5a6Sopenharmony_ci    void AdjustMouseFocusByDirection90(ICON_TYPE iconType, int32_t &physicalX, int32_t &physicalY);
154c29fa5a6Sopenharmony_ci    void AdjustMouseFocusByDirection180(ICON_TYPE iconType, int32_t &physicalX, int32_t &physicalY);
155c29fa5a6Sopenharmony_ci    void AdjustMouseFocusByDirection270(ICON_TYPE iconType, int32_t &physicalX, int32_t &physicalY);
156c29fa5a6Sopenharmony_ci    void CreateMagicCursorChangeObserver();
157c29fa5a6Sopenharmony_ci    int32_t CreatePointerSwitchObserver(isMagicCursor& item);
158c29fa5a6Sopenharmony_ci    void UpdateStyleOptions();
159c29fa5a6Sopenharmony_ci    int32_t GetIndependentPixels();
160c29fa5a6Sopenharmony_ci    bool IsWindowRotation();
161c29fa5a6Sopenharmony_ci    bool CheckPointerStyleParam(int32_t windowId, PointerStyle pointerStyle);
162c29fa5a6Sopenharmony_ci    std::map<MOUSE_ICON, IconStyle>& GetMouseIcons();
163c29fa5a6Sopenharmony_ci    void UpdateIconPath(const MOUSE_ICON mouseStyle, std::string iconPath);
164c29fa5a6Sopenharmony_ci    std::shared_ptr<Rosen::Drawing::ColorSpace> ConvertToColorSpace(Media::ColorSpace colorSpace);
165c29fa5a6Sopenharmony_ci    Rosen::Drawing::ColorType PixelFormatToColorType(Media::PixelFormat pixelFormat);
166c29fa5a6Sopenharmony_ci    Rosen::Drawing::AlphaType AlphaTypeToAlphaType(Media::AlphaType alphaType);
167c29fa5a6Sopenharmony_ci    std::shared_ptr<Rosen::Drawing::Image> ExtractDrawingImage(std::shared_ptr<Media::PixelMap> pixelMap);
168c29fa5a6Sopenharmony_ci    void DrawImage(OHOS::Rosen::Drawing::Canvas &canvas, MOUSE_ICON mouseStyle);
169c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_MAGICCURSOR
170c29fa5a6Sopenharmony_ci    void SetPixelMap(std::shared_ptr<OHOS::Media::PixelMap> pixelMap);
171c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_MAGICCURSOR
172c29fa5a6Sopenharmony_ci    void ForceClearPointerVisiableStatus() override;
173c29fa5a6Sopenharmony_ci    int32_t UpdateSurfaceNodeBounds(int32_t physicalX, int32_t physicalY);
174c29fa5a6Sopenharmony_ci    void CreateCanvasNode();
175c29fa5a6Sopenharmony_ci    void SetSurfaceNodeVisible(bool visible);
176c29fa5a6Sopenharmony_ci    float CalculateHardwareXOffset(ICON_TYPE iconType);
177c29fa5a6Sopenharmony_ci    float CalculateHardwareYOffset(ICON_TYPE iconType);
178c29fa5a6Sopenharmony_ci    bool SetTraditionsHardWareCursorLocation(int32_t displayId, int32_t physicalX, int32_t physicalY,
179c29fa5a6Sopenharmony_ci        ICON_TYPE iconType);
180c29fa5a6Sopenharmony_ci    void SetHardwareCursorPosition(int32_t displayId, int32_t physicalX, int32_t physicalY,
181c29fa5a6Sopenharmony_ci        PointerStyle pointerStyle);
182c29fa5a6Sopenharmony_ci    void CreateDynamicCanvas();
183c29fa5a6Sopenharmony_ci    int32_t ParsingDynamicImage(MOUSE_ICON mouseStyle);
184c29fa5a6Sopenharmony_ci    void DrawDynamicImage(OHOS::Rosen::Drawing::Canvas &canvas, MOUSE_ICON mouseStyle);
185c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR
186c29fa5a6Sopenharmony_ci    bool SetDynamicHardWareCursorLocation(int32_t physicalX, int32_t physicalY, MOUSE_ICON mouseStyle);
187c29fa5a6Sopenharmony_ci    void RenderThreadLoop();
188c29fa5a6Sopenharmony_ci    int32_t RequestNextVSync();
189c29fa5a6Sopenharmony_ci    void OnVsync(uint64_t timestamp);
190c29fa5a6Sopenharmony_ci    void PostTask(Rosen::RSTaskMessage::RSTask task);
191c29fa5a6Sopenharmony_ci    void DoHardwareCursorDraw();
192c29fa5a6Sopenharmony_ci    int32_t FlushBuffer();
193c29fa5a6Sopenharmony_ci    int32_t GetSurfaceInformation();
194c29fa5a6Sopenharmony_ci    void UpdateBindDisplayId(int32_t displayId);
195c29fa5a6Sopenharmony_ci    void PostTaskRSLocation(int32_t physicalX, int32_t physicalY, std::shared_ptr<Rosen::RSSurfaceNode> surfaceNode);
196c29fa5a6Sopenharmony_ci    void DrawTraditionsCursor(MOUSE_ICON mouseStyle);
197c29fa5a6Sopenharmony_ci    int32_t InitVsync(MOUSE_ICON mouseStyle);
198c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR
199c29fa5a6Sopenharmony_ci
200c29fa5a6Sopenharmony_ciprivate:
201c29fa5a6Sopenharmony_ci    struct PidInfo {
202c29fa5a6Sopenharmony_ci        int32_t pid { 0 };
203c29fa5a6Sopenharmony_ci        bool visible { false };
204c29fa5a6Sopenharmony_ci    };
205c29fa5a6Sopenharmony_ci    bool hasDisplay_ { false };
206c29fa5a6Sopenharmony_ci    DisplayInfo displayInfo_ {};
207c29fa5a6Sopenharmony_ci    bool hasPointerDevice_ { false };
208c29fa5a6Sopenharmony_ci    int32_t lastPhysicalX_ { -1 };
209c29fa5a6Sopenharmony_ci    int32_t lastPhysicalY_ { -1 };
210c29fa5a6Sopenharmony_ci    PointerStyle lastMouseStyle_ {};
211c29fa5a6Sopenharmony_ci    PointerStyle currentMouseStyle_ {};
212c29fa5a6Sopenharmony_ci    PointerStyle lastDrawPointerStyle_ {};
213c29fa5a6Sopenharmony_ci    int32_t pid_ { 0 };
214c29fa5a6Sopenharmony_ci    int32_t windowId_ { 0 };
215c29fa5a6Sopenharmony_ci    int32_t imageWidth_ { 0 };
216c29fa5a6Sopenharmony_ci    int32_t imageHeight_ { 0 };
217c29fa5a6Sopenharmony_ci    int32_t canvasWidth_ = 64;
218c29fa5a6Sopenharmony_ci    int32_t canvasHeight_ = 64;
219c29fa5a6Sopenharmony_ci    int32_t cursorWidth_ { 0 };
220c29fa5a6Sopenharmony_ci    int32_t cursorHeight_ { 0 };
221c29fa5a6Sopenharmony_ci    std::map<MOUSE_ICON, IconStyle> mouseIcons_;
222c29fa5a6Sopenharmony_ci    std::list<PidInfo> pidInfos_;
223c29fa5a6Sopenharmony_ci    std::list<PidInfo> hapPidInfos_;
224c29fa5a6Sopenharmony_ci    bool mouseDisplayState_ { false };
225c29fa5a6Sopenharmony_ci    bool mouseIconUpdate_ { false };
226c29fa5a6Sopenharmony_ci    std::shared_ptr<OHOS::Media::PixelMap> userIcon_ { nullptr };
227c29fa5a6Sopenharmony_ci    uint64_t screenId_ { 0 };
228c29fa5a6Sopenharmony_ci    std::shared_ptr<Rosen::RSSurfaceNode> surfaceNode_;
229c29fa5a6Sopenharmony_ci    std::shared_ptr<Rosen::RSCanvasNode> canvasNode_;
230c29fa5a6Sopenharmony_ci    int32_t userIconHotSpotX_ { 0 };
231c29fa5a6Sopenharmony_ci    int32_t userIconHotSpotY_ { 0 };
232c29fa5a6Sopenharmony_ci    int32_t tempPointerColor_ { -1 };
233c29fa5a6Sopenharmony_ci    Direction lastDirection_ { DIRECTION0 };
234c29fa5a6Sopenharmony_ci    Direction currentDirection_ { DIRECTION0 };
235c29fa5a6Sopenharmony_ci    isMagicCursor hasMagicCursor_;
236c29fa5a6Sopenharmony_ci    bool hasInitObserver_ { false };
237c29fa5a6Sopenharmony_ci    std::atomic<bool> hasHardwareCursorAnimate_ { false };
238c29fa5a6Sopenharmony_ci    std::atomic<bool> hasLoadingPointerStyle_ { false };
239c29fa5a6Sopenharmony_ci    int32_t frameCount_ { DEFAULT_FRAME_RATE };
240c29fa5a6Sopenharmony_ci    int32_t currentFrame_ { 0 };
241c29fa5a6Sopenharmony_ci    sptr<OHOS::Surface> layer_ { nullptr };
242c29fa5a6Sopenharmony_ci    sptr<OHOS::SurfaceBuffer> buffer_ { nullptr };
243c29fa5a6Sopenharmony_ci    std::shared_ptr<uint8_t *> addr_ { nullptr };
244c29fa5a6Sopenharmony_ci    int32_t displayId_ { INVALID_DISPLAY_ID };
245c29fa5a6Sopenharmony_ci    std::shared_ptr<OHOS::Rosen::Drawing::Bitmap> dynamicBitmap_ { nullptr };
246c29fa5a6Sopenharmony_ci    std::shared_ptr<OHOS::Rosen::Drawing::Canvas> dynamicCanvas_ { nullptr };
247c29fa5a6Sopenharmony_ci    std::shared_ptr<Rosen::Drawing::Image> runningRightImage_ { nullptr };
248c29fa5a6Sopenharmony_ci    std::shared_ptr<Rosen::Drawing::Image> image_ { nullptr };
249c29fa5a6Sopenharmony_ci    std::shared_ptr<AppExecFwk::EventRunner> runner_ { nullptr };
250c29fa5a6Sopenharmony_ci    std::shared_ptr<AppExecFwk::EventHandler> handler_ { nullptr };
251c29fa5a6Sopenharmony_ci    std::shared_ptr<Rosen::VSyncReceiver> receiver_ { nullptr };
252c29fa5a6Sopenharmony_ci    std::atomic<bool> isRenderRuning_{ false };
253c29fa5a6Sopenharmony_ci    std::unique_ptr<std::thread> renderThread_ { nullptr };
254c29fa5a6Sopenharmony_ci    bool isInit_ { false };
255c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR
256c29fa5a6Sopenharmony_ci    std::shared_ptr<HardwareCursorPointerManager> hardwareCursorPointerManager_ { nullptr };
257c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR
258c29fa5a6Sopenharmony_ci    float hardwareCanvasSize_ { HARDWARE_CANVAS_SIZE };
259c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_MAGICCURSOR
260c29fa5a6Sopenharmony_ci    std::shared_ptr<OHOS::Media::PixelMap> pixelMap_ { nullptr };
261c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_MAGICCURSOR
262c29fa5a6Sopenharmony_ci    std::shared_ptr<DelegateInterface> delegateProxy_ { nullptr };
263c29fa5a6Sopenharmony_ci    int32_t lastDisplayId_ { DEFAULT_DISPLAY_ID };
264c29fa5a6Sopenharmony_ci};
265c29fa5a6Sopenharmony_ci} // namespace MMI
266c29fa5a6Sopenharmony_ci} // namespace OHOS
267c29fa5a6Sopenharmony_ci#endif // POINTER_DRAWING_MANAGER_H
268