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