diff --git a/core/res/res/drawable-mdpi/pointer_arrow.png b/core/res/res/drawable-mdpi/pointer_arrow.png index e01129c1647d1..fbd187c19f183 100644 Binary files a/core/res/res/drawable-mdpi/pointer_arrow.png and b/core/res/res/drawable-mdpi/pointer_arrow.png differ diff --git a/services/input/PointerController.cpp b/services/input/PointerController.cpp index ebc58eeb03c2e..92af51e6c82cf 100644 --- a/services/input/PointerController.cpp +++ b/services/input/PointerController.cpp @@ -310,8 +310,16 @@ void PointerController::setDisplayOrientation(int32_t orientation) { void PointerController::setPointerIcon(const SkBitmap* bitmap, float hotSpotX, float hotSpotY) { AutoMutex _l(mLock); - delete mLocked.iconBitmap; - mLocked.iconBitmap = bitmap ? new SkBitmap(*bitmap) : NULL; + if (mLocked.iconBitmap) { + delete mLocked.iconBitmap; + mLocked.iconBitmap = NULL; + } + + if (bitmap) { + mLocked.iconBitmap = new SkBitmap(); + bitmap->copyTo(mLocked.iconBitmap, SkBitmap::kARGB_8888_Config); + } + mLocked.iconHotSpotX = hotSpotX; mLocked.iconHotSpotY = hotSpotY; mLocked.drawn = false;