From f97ceb2084504796fac9a7885fe64da546fd224b Mon Sep 17 00:00:00 2001 From: jiangwenyu1 Date: Mon, 31 Jul 2023 20:03:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=98=BE=E7=A4=BA=E3=80=81?= =?UTF-8?q?=E9=9A=90=E8=97=8F=E9=BC=A0=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ft_pointer_draw_manager_adapter.cpp | 10 +++++ .../i_pointer_drawing_manager.h | 2 +- .../ft_pointer_draw/pointer_draw_manager.cpp | 41 +++++++++++++++++++ .../ft_pointer_draw/pointer_draw_manager.h | 6 +-- 4 files changed, 54 insertions(+), 5 deletions(-) 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 f171808..5412625 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 84f265f..9d7b7b0 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 e7a93f7..64de525 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 c80cdbd..15906f6 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); -- Gitee