diff --git a/etc/icon/Colorsucker.png b/etc/icon/Colorsucker.png new file mode 100644 index 0000000000000000000000000000000000000000..40e19e94e129682fdeb461cceef0f0a57c64d66d Binary files /dev/null and b/etc/icon/Colorsucker.png differ diff --git a/etc/icon/Copy.png b/etc/icon/Copy.png new file mode 100644 index 0000000000000000000000000000000000000000..212517131bf176661ae85c7513def022dbb50559 Binary files /dev/null and b/etc/icon/Copy.png differ diff --git a/etc/icon/Cross.png b/etc/icon/Cross.png new file mode 100644 index 0000000000000000000000000000000000000000..58625855d1cd96ea8a29ab9c3c201d90ac717e83 Binary files /dev/null and b/etc/icon/Cross.png differ diff --git a/etc/icon/East.png b/etc/icon/East.png new file mode 100644 index 0000000000000000000000000000000000000000..4942bc948a17e78c68538ccc3ae886bc0a548737 Binary files /dev/null and b/etc/icon/East.png differ diff --git a/etc/icon/Forbid.png b/etc/icon/Forbid.png new file mode 100644 index 0000000000000000000000000000000000000000..c5c43d4b4b8aaf6d53931586e519a583d064fec7 Binary files /dev/null and b/etc/icon/Forbid.png differ diff --git a/etc/icon/Hand_Grabbing.png b/etc/icon/Hand_Grabbing.png new file mode 100644 index 0000000000000000000000000000000000000000..09ab3121d15e27a975fbaa228aadb2399e4492b9 Binary files /dev/null and b/etc/icon/Hand_Grabbing.png differ diff --git a/etc/icon/Hand_Open.png b/etc/icon/Hand_Open.png new file mode 100644 index 0000000000000000000000000000000000000000..e1cb7a972ec2d372f0d75cbe80159c4a66e74e10 Binary files /dev/null and b/etc/icon/Hand_Open.png differ diff --git a/etc/icon/Hand_Pointing.png b/etc/icon/Hand_Pointing.png new file mode 100644 index 0000000000000000000000000000000000000000..f0daa0dad6154a1846fb9fe4b7f441b3ab6f8b5b Binary files /dev/null and b/etc/icon/Hand_Pointing.png differ diff --git a/etc/icon/Help.png b/etc/icon/Help.png new file mode 100644 index 0000000000000000000000000000000000000000..ffea2f1c072f1682ca8e837ddb947352a553917e Binary files /dev/null and b/etc/icon/Help.png differ diff --git a/etc/icon/MID_Btn_East.png b/etc/icon/MID_Btn_East.png new file mode 100644 index 0000000000000000000000000000000000000000..921cd4ceea8d97ffb6d4c45008d6428cda998cce Binary files /dev/null and b/etc/icon/MID_Btn_East.png differ diff --git a/etc/icon/MID_Btn_North.png b/etc/icon/MID_Btn_North.png new file mode 100644 index 0000000000000000000000000000000000000000..5769575ddb435f5e8f5f8993d9edc13749376293 Binary files /dev/null and b/etc/icon/MID_Btn_North.png differ diff --git a/etc/icon/MID_Btn_North_East.png b/etc/icon/MID_Btn_North_East.png new file mode 100644 index 0000000000000000000000000000000000000000..3daf141241dec309c98ae10266bb153af163f3d9 Binary files /dev/null and b/etc/icon/MID_Btn_North_East.png differ diff --git a/etc/icon/MID_Btn_North_South.png b/etc/icon/MID_Btn_North_South.png new file mode 100644 index 0000000000000000000000000000000000000000..1f56c4cd8f1498293f5fc4a5ab2c321159fb07dd Binary files /dev/null and b/etc/icon/MID_Btn_North_South.png differ diff --git a/etc/icon/MID_Btn_North_South_West_East.png b/etc/icon/MID_Btn_North_South_West_East.png new file mode 100644 index 0000000000000000000000000000000000000000..b45dbde27e59121bdfc4e1752759176fb835027c Binary files /dev/null and b/etc/icon/MID_Btn_North_South_West_East.png differ diff --git a/etc/icon/MID_Btn_North_West.png b/etc/icon/MID_Btn_North_West.png new file mode 100644 index 0000000000000000000000000000000000000000..bde82d08f7a098106b4f4c31d55a84a989e25a8d Binary files /dev/null and b/etc/icon/MID_Btn_North_West.png differ diff --git a/etc/icon/MID_Btn_South.png b/etc/icon/MID_Btn_South.png new file mode 100644 index 0000000000000000000000000000000000000000..e7d5afb6f8f8b1b2939b9e18bdb8b8b3d9729f4d Binary files /dev/null and b/etc/icon/MID_Btn_South.png differ diff --git a/etc/icon/MID_Btn_South_East.png b/etc/icon/MID_Btn_South_East.png new file mode 100644 index 0000000000000000000000000000000000000000..44284a6e04a19ca8453b46ea81db099ad84cfaa2 Binary files /dev/null and b/etc/icon/MID_Btn_South_East.png differ diff --git a/etc/icon/MID_Btn_South_West.png b/etc/icon/MID_Btn_South_West.png new file mode 100644 index 0000000000000000000000000000000000000000..c8632f09160c51ca573d58d3ffb1370058b880ce Binary files /dev/null and b/etc/icon/MID_Btn_South_West.png differ diff --git a/etc/icon/MID_Btn_West.png b/etc/icon/MID_Btn_West.png new file mode 100644 index 0000000000000000000000000000000000000000..7460bc18d63e000689755b39b8ead3c3609ee4f5 Binary files /dev/null and b/etc/icon/MID_Btn_West.png differ diff --git a/etc/icon/Move.png b/etc/icon/Move.png new file mode 100644 index 0000000000000000000000000000000000000000..00f64e54dca0d0731b595b4ddc9e0f7294c40c72 Binary files /dev/null and b/etc/icon/Move.png differ diff --git a/etc/icon/North.png b/etc/icon/North.png new file mode 100644 index 0000000000000000000000000000000000000000..b022ac2e92d4cfb07efde7f3bf4b7ada8454e594 Binary files /dev/null and b/etc/icon/North.png differ diff --git a/etc/icon/North_East.png b/etc/icon/North_East.png new file mode 100644 index 0000000000000000000000000000000000000000..f6134237f38cd681b319c95bf1b77017bc1524b4 Binary files /dev/null and b/etc/icon/North_East.png differ diff --git a/etc/icon/North_East_South_West.png b/etc/icon/North_East_South_West.png new file mode 100644 index 0000000000000000000000000000000000000000..908886aeb3f8df976bb67b2261e8e52e7222e622 Binary files /dev/null and b/etc/icon/North_East_South_West.png differ diff --git a/etc/icon/North_South.png b/etc/icon/North_South.png new file mode 100644 index 0000000000000000000000000000000000000000..b15678a6b178ca0d9b13f7c7f58d025ab7a1ce12 Binary files /dev/null and b/etc/icon/North_South.png differ diff --git a/etc/icon/North_West.png b/etc/icon/North_West.png new file mode 100644 index 0000000000000000000000000000000000000000..cfbe4c8910575c12afde4b5904d79b5beda0c162 Binary files /dev/null and b/etc/icon/North_West.png differ diff --git a/etc/icon/North_West_South_East.png b/etc/icon/North_West_South_East.png new file mode 100644 index 0000000000000000000000000000000000000000..09fa728fbb45082a0524c284b8906b91d7b3a6f7 Binary files /dev/null and b/etc/icon/North_West_South_East.png differ diff --git a/etc/icon/Resize_Left_Right.png b/etc/icon/Resize_Left_Right.png new file mode 100644 index 0000000000000000000000000000000000000000..83e7671e3ffea65260bdb36d8b392fa78d55cd4e Binary files /dev/null and b/etc/icon/Resize_Left_Right.png differ diff --git a/etc/icon/Resize_Up_Down.png b/etc/icon/Resize_Up_Down.png new file mode 100644 index 0000000000000000000000000000000000000000..db8bccf89b6e5260db3875a22b5200fabd30c23c Binary files /dev/null and b/etc/icon/Resize_Up_Down.png differ diff --git a/etc/icon/Screenshot_Cross.png b/etc/icon/Screenshot_Cross.png new file mode 100644 index 0000000000000000000000000000000000000000..27460c082507e71082d11cd8a20eee2fc24da28d Binary files /dev/null and b/etc/icon/Screenshot_Cross.png differ diff --git a/etc/icon/Screenshot_Cursor.png b/etc/icon/Screenshot_Cursor.png new file mode 100644 index 0000000000000000000000000000000000000000..71abea4ca351988a92b8a5b2b2228321df31aecc Binary files /dev/null and b/etc/icon/Screenshot_Cursor.png differ diff --git a/etc/icon/South.png b/etc/icon/South.png new file mode 100644 index 0000000000000000000000000000000000000000..205f5cf5f59ce8318357e168eee0d66c119c233d Binary files /dev/null and b/etc/icon/South.png differ diff --git a/etc/icon/South_East.png b/etc/icon/South_East.png new file mode 100644 index 0000000000000000000000000000000000000000..f4a70d2d068271bfe10e4ce724ae27e4e5ba96d9 Binary files /dev/null and b/etc/icon/South_East.png differ diff --git a/etc/icon/South_West.png b/etc/icon/South_West.png new file mode 100644 index 0000000000000000000000000000000000000000..2ae8e9a9fa396bb6ed0f385b7b99b66830357a40 Binary files /dev/null and b/etc/icon/South_West.png differ diff --git a/etc/icon/Text_Cursor.png b/etc/icon/Text_Cursor.png new file mode 100644 index 0000000000000000000000000000000000000000..7cd8d2200bc7455e562da003069702832db4eb20 Binary files /dev/null and b/etc/icon/Text_Cursor.png differ diff --git a/etc/icon/West.png b/etc/icon/West.png new file mode 100644 index 0000000000000000000000000000000000000000..2cad91aca31f2e2b257c523e80e6fc2d71fa2cee Binary files /dev/null and b/etc/icon/West.png differ diff --git a/etc/icon/West_East.png b/etc/icon/West_East.png new file mode 100644 index 0000000000000000000000000000000000000000..6be4aa9d05f22a10cd00fa6aec36f95aee2b332d Binary files /dev/null and b/etc/icon/West_East.png differ diff --git a/etc/icon/Zoom_In.png b/etc/icon/Zoom_In.png new file mode 100644 index 0000000000000000000000000000000000000000..2e928ec070fcd05a44cd9b1abd041128287b0528 Binary files /dev/null and b/etc/icon/Zoom_In.png differ diff --git a/etc/icon/Zoom_Out.png b/etc/icon/Zoom_Out.png new file mode 100644 index 0000000000000000000000000000000000000000..d675d0e517ba436724540a39f60dfa75c256f0d0 Binary files /dev/null and b/etc/icon/Zoom_Out.png differ 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 954db527719cbc3172c6d9fc48b8bf0a81860608..f171808f276b3ff7d21e8d87e915b617aed045bb 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 @@ -84,15 +84,14 @@ bool FTPtrDrawMgrUpdataDispInfo(const uintptr_t instanceHdl, int32_t displayId, return true; } -bool FTPtrDrawMgrDrawPointer(const uintptr_t instanceHdl, int32_t displayId, int32_t physicalX, int32_t physicalY) +bool FTPtrDrawMgrDrawPointer(const uintptr_t instanceHdl, int32_t displayId, int32_t physicalX, int32_t physicalY, int32_t style) { - int32_t defaultStyle = 0; PointerDrawPtr instance = FindPointerDraw(instanceHdl); if (instance == nullptr) { return false; } - instance->DrawPointer(displayId, physicalX, physicalY, defaultStyle); + instance->DrawPointer(displayId, physicalX, physicalY, style); return true; } diff --git a/window_manager/ft_pointer_draw/pointer_draw_manager.cpp b/window_manager/ft_pointer_draw/pointer_draw_manager.cpp index 437ab9691e79e591ff2fe718df61f8b2d25b06d5..e7a93f79ea78e0b15836ea57586af2812047a8e5 100644 --- a/window_manager/ft_pointer_draw/pointer_draw_manager.cpp +++ b/window_manager/ft_pointer_draw/pointer_draw_manager.cpp @@ -61,16 +61,21 @@ bool PointerDrawingManager::Init() void PointerDrawingManager::DrawPointer(int32_t displayId, int32_t physicalX, int32_t physicalY, int32_t mouseStyle) { - (void)mouseStyle; - if (!isDrawing_) { - if (InitLayerNode(physicalX, physicalY) != WMError::WM_OK) { - WLOGFE("InitLayerNode fail"); + if (InitSurfaceNode(physicalX, physicalY) != WMError::WM_OK) { + WLOGFE("init surface node fail"); return; } Rosen::DisplayManagerServiceInner::GetInstance().UpdateRSTree(0, 0, surfaceNode_, true, false); isDrawing_ = true; - return; + } + + if (lastMouseStyle_ != mouseStyle) { + if (DrawPointerByStyle(mouseStyle) != WMError::WM_OK) { + WLOGFE("draw pointer by style fail"); + return; + } + lastMouseStyle_ = (MOUSE_ICON)mouseStyle; } if (handler_ == nullptr) { @@ -127,8 +132,12 @@ WMError PointerDrawingManager::MoveTo(int32_t x, int32_t y) return WMError::WM_OK; } -WMError PointerDrawingManager::InitLayerNode(int32_t x, int32_t y) +WMError PointerDrawingManager::InitSurfaceNode(int32_t x, int32_t y) { + if (isDrawing_) { + return WMError::WM_OK; // surface node is inited, just return + } + Rosen::RSSurfaceNodeConfig config; surfaceNode_ = Rosen::RSSurfaceNode::Create(config); if (surfaceNode_ == nullptr) { @@ -154,7 +163,14 @@ WMError PointerDrawingManager::InitLayerNode(int32_t x, int32_t y) WLOGFE("create renderContext fail"); } #endif + return WMError::WM_OK; +} +WMError PointerDrawingManager::DrawPointerByStyle(int mouseStyle) +{ + if (rsSurface_ == nullptr) { + return WMError::WM_ERROR_NULLPTR; + } auto framePtr = rsSurface_->RequestFrame(ICON_WIDTH, ICON_HEIGHT); if (framePtr == nullptr) { WLOGFE("RequestFrame fail"); @@ -172,11 +188,13 @@ WMError PointerDrawingManager::InitLayerNode(int32_t x, int32_t y) paint.setColor(SK_ColorBLUE); canvas->drawRect(SkRect::MakeXYWH(0, 0, ICON_WIDTH, ICON_HEIGHT), paint); #else - if (mouseIcons_.size() == 0) { - WLOGFE("can not find icon pixel file"); - return WMError::WM_ERROR_NULLPTR; + auto it = mouseIcons_.find(MOUSE_ICON(mouseStyle)); + if (it == mouseIcons_.end()) { + WLOGFE("unsupport mouse style=%{public}d", mouseStyle); + return WMError::WM_ERROR_INVALID_PARAM; } - auto pixelmap = DecodeImageToPixelMap(mouseIcons_[DEFAULT].iconPath); + + auto pixelmap = DecodeImageToPixelMap(mouseIcons_[MOUSE_ICON(mouseStyle)].iconPath); if (pixelmap == nullptr) { WLOGFE("DecodeImageToPixelMap fail"); return WMError::WM_ERROR_NULLPTR; @@ -192,7 +210,6 @@ WMError PointerDrawingManager::InitLayerNode(int32_t x, int32_t y) #endif framePtr->SetDamageRegion(0, 0, ICON_WIDTH, ICON_HEIGHT); rsSurface_->FlushFrame(framePtr); - return WMError::WM_OK; } @@ -201,7 +218,47 @@ WMError PointerDrawingManager::InitIconPixel() #ifndef USE_IMITATE_POINTER mouseIcons_ = { {DEFAULT, {ANGLE_NW, POINTER_PIXEL_PATH + "Default.png"}}, + {EAST, {ANGLE_CENTER, POINTER_PIXEL_PATH + "East.png"}}, + {WEST, {ANGLE_CENTER, POINTER_PIXEL_PATH + "West.png"}}, + {SOUTH, {ANGLE_CENTER, POINTER_PIXEL_PATH + "South.png"}}, + {NORTH, {ANGLE_CENTER, POINTER_PIXEL_PATH + "North.png"}}, + {WEST_EAST, {ANGLE_CENTER, POINTER_PIXEL_PATH + "West_East.png"}}, + {NORTH_SOUTH, {ANGLE_CENTER, POINTER_PIXEL_PATH + "North_South.png"}}, + {NORTH_EAST, {ANGLE_CENTER, POINTER_PIXEL_PATH + "North_East.png"}}, + {NORTH_WEST, {ANGLE_CENTER, POINTER_PIXEL_PATH + "North_West.png"}}, + {SOUTH_EAST, {ANGLE_CENTER, POINTER_PIXEL_PATH + "South_East.png"}}, + {SOUTH_WEST, {ANGLE_CENTER, POINTER_PIXEL_PATH + "South_West.png"}}, + {NORTH_EAST_SOUTH_WEST, {ANGLE_CENTER, POINTER_PIXEL_PATH + "North_East_South_West.png"}}, + {NORTH_WEST_SOUTH_EAST, {ANGLE_CENTER, POINTER_PIXEL_PATH + "North_West_South_East.png"}}, + {CROSS, {ANGLE_CENTER, POINTER_PIXEL_PATH + "Cross.png"}}, + {CURSOR_COPY, {ANGLE_NW, POINTER_PIXEL_PATH + "Copy.png"}}, + {CURSOR_FORBID, {ANGLE_NW, POINTER_PIXEL_PATH + "Forbid.png"}}, + {COLOR_SUCKER, {ANGLE_SW, POINTER_PIXEL_PATH + "Colorsucker.png"}}, + {HAND_GRABBING, {ANGLE_CENTER, POINTER_PIXEL_PATH + "Hand_Grabbing.png"}}, + {HAND_OPEN, {ANGLE_CENTER, POINTER_PIXEL_PATH + "Hand_Open.png"}}, + {HAND_POINTING, {ANGLE_NW, POINTER_PIXEL_PATH + "Hand_Pointing.png"}}, + {HELP, {ANGLE_NW, POINTER_PIXEL_PATH + "Help.png"}}, + {CURSOR_MOVE, {ANGLE_CENTER, POINTER_PIXEL_PATH + "Move.png"}}, + {RESIZE_LEFT_RIGHT, {ANGLE_CENTER, POINTER_PIXEL_PATH + "Resize_Left_Right.png"}}, + {RESIZE_UP_DOWN, {ANGLE_CENTER, POINTER_PIXEL_PATH + "Resize_Up_Down.png"}}, + {SCREENSHOT_CHOOSE, {ANGLE_CENTER, POINTER_PIXEL_PATH + "Screenshot_Cross.png"}}, + {SCREENSHOT_CURSOR, {ANGLE_CENTER, POINTER_PIXEL_PATH + "Screenshot_Cursor.png"}}, + {TEXT_CURSOR, {ANGLE_CENTER, POINTER_PIXEL_PATH + "Text_Cursor.png"}}, + {ZOOM_IN, {ANGLE_CENTER, POINTER_PIXEL_PATH + "Zoom_In.png"}}, + {ZOOM_OUT, {ANGLE_CENTER, POINTER_PIXEL_PATH + "Zoom_Out.png"}}, + {MIDDLE_BTN_EAST, {ANGLE_CENTER, POINTER_PIXEL_PATH + "MID_Btn_East.png"}}, + {MIDDLE_BTN_WEST, {ANGLE_CENTER, POINTER_PIXEL_PATH + "MID_Btn_West.png"}}, + {MIDDLE_BTN_SOUTH, {ANGLE_CENTER, POINTER_PIXEL_PATH + "MID_Btn_South.png"}}, + {MIDDLE_BTN_NORTH, {ANGLE_CENTER, POINTER_PIXEL_PATH + "MID_Btn_North.png"}}, + {MIDDLE_BTN_NORTH_SOUTH, {ANGLE_CENTER, POINTER_PIXEL_PATH + "MID_Btn_North_South.png"}}, + {MIDDLE_BTN_NORTH_EAST, {ANGLE_CENTER, POINTER_PIXEL_PATH + "MID_Btn_North_East.png"}}, + {MIDDLE_BTN_NORTH_WEST, {ANGLE_CENTER, POINTER_PIXEL_PATH + "MID_Btn_North_West.png"}}, + {MIDDLE_BTN_SOUTH_EAST, {ANGLE_CENTER, POINTER_PIXEL_PATH + "MID_Btn_South_East.png"}}, + {MIDDLE_BTN_SOUTH_WEST, {ANGLE_CENTER, POINTER_PIXEL_PATH + "MID_Btn_South_West.png"}}, + {MIDDLE_BTN_NORTH_SOUTH_WEST_EAST, {ANGLE_CENTER, POINTER_PIXEL_PATH + + "MID_Btn_North_South_West_East.png"}}, }; + for (auto iter = mouseIcons_.begin(); iter != mouseIcons_.end();) { if (CheckPixelFile(iter->second.iconPath) != WMError::WM_OK) { iter = mouseIcons_.erase(iter); diff --git a/window_manager/ft_pointer_draw/pointer_draw_manager.h b/window_manager/ft_pointer_draw/pointer_draw_manager.h index c69301cfe356b76b734fa64bc403a4682cdc0381..c80cdbd420a2fa410f006ac0b750612fab9c686d 100644 --- a/window_manager/ft_pointer_draw/pointer_draw_manager.h +++ b/window_manager/ft_pointer_draw/pointer_draw_manager.h @@ -88,6 +88,8 @@ enum MOUSE_ICON { MIDDLE_BTN_SOUTH_EAST = 36, MIDDLE_BTN_SOUTH_WEST = 37, MIDDLE_BTN_NORTH_SOUTH_WEST_EAST = 38, + + INVALID_MOUSE_ICON, }; enum ICON_TYPE { @@ -146,7 +148,8 @@ private: std::string iconPath; }; - OHOS::WMError InitLayerNode(int32_t x, int32_t y); + OHOS::WMError InitSurfaceNode(int32_t x, int32_t y); + OHOS::WMError DrawPointerByStyle(int mouseStyle); OHOS::WMError InitIconPixel(); OHOS::WMError CheckPixelFile(const std::string &filePath); OHOS::WMError MoveTo(int32_t x, int32_t y); @@ -156,6 +159,7 @@ private: bool isDrawing_ = false; int32_t displayId_ = 0; std::map mouseIcons_; + MOUSE_ICON lastMouseStyle_ = INVALID_MOUSE_ICON; OHOS::Rosen::RSSurfaceNode::SharedPtr surfaceNode_ = nullptr; std::shared_ptr rsSurface_ = nullptr; std::shared_ptr runner_ = nullptr;