diff --git a/window_manager/ft_pointer_draw/ft_pointer_draw_manager_adapter.cpp b/window_manager/ft_pointer_draw/ft_pointer_draw_manager_adapter.cpp index f171808f276b3ff7d21e8d87e915b617aed045bb..5412625c4557aa24ba66c69e6da864c8aae0b1c1 100644 --- a/window_manager/ft_pointer_draw/ft_pointer_draw_manager_adapter.cpp +++ b/window_manager/ft_pointer_draw/ft_pointer_draw_manager_adapter.cpp @@ -113,6 +113,16 @@ bool FTPtrDrawMgrGetScreenSize(const uintptr_t instanceHdl, int32_t *width, int3 return true; } +bool FTPtrDrawMgrSetPointerVisible(const uintptr_t instanceHdl, int32_t pid, bool visible) +{ + PointerDrawPtr instance = FindPointerDraw(instanceHdl); + if (instance == nullptr) { + return false; + } + + return instance->SetPointerVisible(pid, visible); +} + #if defined(__cplusplus) } #endif // __cplusplus diff --git a/window_manager/ft_pointer_draw/i_pointer_drawing_manager.h b/window_manager/ft_pointer_draw/i_pointer_drawing_manager.h index 84f265f038f2cc3ff87795effaa6d826c7538b7e..9d7b7b0daaf5f6a0ccab66b3fb8669653b3e645e 100644 --- a/window_manager/ft_pointer_draw/i_pointer_drawing_manager.h +++ b/window_manager/ft_pointer_draw/i_pointer_drawing_manager.h @@ -121,7 +121,7 @@ public: virtual void OnWindowInfo(int32_t windowPid, int32_t windowId) {} virtual bool Init() { return true;} virtual void DeletePointerVisible(int32_t pid) {} - virtual int32_t SetPointerVisible(int32_t pid, bool visible) { return 0;} + virtual bool SetPointerVisible(int32_t pid, bool visible) { return 0;} virtual int32_t SetPointerStyle(int32_t pid, int32_t windowId, int32_t pointerStyle) { return 0; } virtual int32_t GetPointerStyle(int32_t pid, int32_t windowId, int32_t &pointerStyle) { return 0;} virtual void DrawPointerStyle() {} diff --git a/window_manager/ft_pointer_draw/pointer_draw_manager.cpp b/window_manager/ft_pointer_draw/pointer_draw_manager.cpp index e7a93f79ea78e0b15836ea57586af2812047a8e5..64de525e1882a00c2282bb7bb0b9a58339df9710 100644 --- a/window_manager/ft_pointer_draw/pointer_draw_manager.cpp +++ b/window_manager/ft_pointer_draw/pointer_draw_manager.cpp @@ -115,6 +115,30 @@ void PointerDrawingManager::SetPointerLocation(int32_t pid, int32_t x, int32_t y } } +bool PointerDrawingManager::SetPointerVisible(int32_t pid, bool visible) +{ + (void)pid; + if (!surfaceNode_) { + return false; + } + + WLOGFE("SetPointerVisible=%{public}d", visible); + surfaceNode_->SetPositionZ(PTR_SURFACE_NODE_Z_ORDER); + Rosen::DisplayManagerServiceInner::GetInstance().UpdateRSTree(0, 0, surfaceNode_, visible, false); + if (visible) { + if (DrawPointerByStyle(lastMouseStyle_) != WMError::WM_OK) { + WLOGFE("draw pointer by style fail"); + return false; + } + } else { + if (ClearDrawPointer() != WMError::WM_OK) { + WLOGFE("clear pointer fail"); + return false; + } + } + return true; +} + void PointerDrawingManager::UpdateDisplayInfo(const ScreenDisplayInfo& displayInfo) { (void) displayInfo; @@ -166,6 +190,23 @@ WMError PointerDrawingManager::InitSurfaceNode(int32_t x, int32_t y) return WMError::WM_OK; } +WMError PointerDrawingManager::ClearDrawPointer() +{ + if (rsSurface_ == nullptr) { + return WMError::WM_ERROR_NULLPTR; + } + auto framePtr = rsSurface_->RequestFrame(ICON_WIDTH, ICON_HEIGHT); + if (framePtr == nullptr) { + WLOGFE("RequestFrame fail"); + return WMError::WM_ERROR_NULLPTR; + } + auto canvas = framePtr->GetCanvas(); + canvas->clear(SK_ColorTRANSPARENT); + framePtr->SetDamageRegion(0, 0, ICON_WIDTH, ICON_HEIGHT); + rsSurface_->FlushFrame(framePtr); + return WMError::WM_OK; +} + WMError PointerDrawingManager::DrawPointerByStyle(int mouseStyle) { if (rsSurface_ == nullptr) { diff --git a/window_manager/ft_pointer_draw/pointer_draw_manager.h b/window_manager/ft_pointer_draw/pointer_draw_manager.h index c80cdbd420a2fa410f006ac0b750612fab9c686d..15906f6dfd3e2d37dc0eeec2a074cc0d67d43a5f 100644 --- a/window_manager/ft_pointer_draw/pointer_draw_manager.h +++ b/window_manager/ft_pointer_draw/pointer_draw_manager.h @@ -119,10 +119,7 @@ public: void DeletePointerVisible(int32_t pid) override {} void SetMouseDisplayState(bool state) override {} void DrawPointerStyle() override {} - int32_t SetPointerVisible(int32_t pid, bool visible) override - { - return OHOS::WMError::WM_OK; - } + bool SetPointerVisible(int32_t pid, bool visible) override; int32_t SetPointerStyle(int32_t pid, int32_t windowId, int32_t pointerStyle) override { return OHOS::WMError::WM_OK; @@ -150,6 +147,7 @@ private: OHOS::WMError InitSurfaceNode(int32_t x, int32_t y); OHOS::WMError DrawPointerByStyle(int mouseStyle); + OHOS::WMError ClearDrawPointer(); OHOS::WMError InitIconPixel(); OHOS::WMError CheckPixelFile(const std::string &filePath); OHOS::WMError MoveTo(int32_t x, int32_t y);