diff options
Diffstat (limited to 'libs/input/SpriteController.cpp')
-rw-r--r-- | libs/input/SpriteController.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/libs/input/SpriteController.cpp b/libs/input/SpriteController.cpp index 4991f0434bc2..ed31b1202863 100644 --- a/libs/input/SpriteController.cpp +++ b/libs/input/SpriteController.cpp @@ -220,13 +220,13 @@ void SpriteController::doUpdateSprites() { if (outBuffer.width > update.state.icon.bitmap.width()) { paint.setColor(0); // transparent fill color - surfaceCanvas.drawRectCoords(update.state.icon.bitmap.width(), 0, - outBuffer.width, update.state.icon.bitmap.height(), paint); + surfaceCanvas.drawRect(SkRect::MakeLTRB(update.state.icon.bitmap.width(), 0, + outBuffer.width, update.state.icon.bitmap.height()), paint); } if (outBuffer.height > update.state.icon.bitmap.height()) { paint.setColor(0); // transparent fill color - surfaceCanvas.drawRectCoords(0, update.state.icon.bitmap.height(), - outBuffer.width, outBuffer.height, paint); + surfaceCanvas.drawRect(SkRect::MakeLTRB(0, update.state.icon.bitmap.height(), + outBuffer.width, outBuffer.height), paint); } status = surface->unlockAndPost(); @@ -405,7 +405,11 @@ void SpriteController::SpriteImpl::setIcon(const SpriteIcon& icon) { uint32_t dirty; if (icon.isValid()) { - icon.bitmap.copyTo(&mLocked.state.icon.bitmap, kN32_SkColorType); + SkBitmap* bitmapCopy = &mLocked.state.icon.bitmap; + if (bitmapCopy->tryAllocPixels(icon.bitmap.info().makeColorType(kN32_SkColorType))) { + icon.bitmap.readPixels(bitmapCopy->info(), bitmapCopy->getPixels(), + bitmapCopy->rowBytes(), 0, 0); + } if (!mLocked.state.icon.isValid() || mLocked.state.icon.hotSpotX != icon.hotSpotX |