diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2020-06-02 01:01:26 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-06-02 01:01:26 +0000 |
commit | b538f65845b13705cd119dfe77617b91aed112f0 (patch) | |
tree | 397b18a6bba64f4d9c4d4744aca03de6c34c380d /libs/input/SpriteIcon.cpp | |
parent | 3182d32da327f5c029325cffcc98a273a841b042 (diff) | |
parent | 38a831c1e32e1dec31be273a3ad079d36ee52f3f (diff) |
Merge "Isolate SpriteIcon into its own file." am: 38a831c1e3
Original change: undetermined
Change-Id: I136cf55c2fd1346dacb0774d8fb53383b2ae1202
Diffstat (limited to 'libs/input/SpriteIcon.cpp')
-rw-r--r-- | libs/input/SpriteIcon.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/libs/input/SpriteIcon.cpp b/libs/input/SpriteIcon.cpp new file mode 100644 index 000000000000..10cc458b9289 --- /dev/null +++ b/libs/input/SpriteIcon.cpp @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "SpriteIcon.h" + +#include <SkBitmap.h> +#include <SkCanvas.h> +#include <SkColor.h> +#include <SkPaint.h> + +#include <android/native_window.h> +#include <log/log.h> + +namespace android { + +bool SpriteIcon::draw(sp<Surface> surface) const { + ANativeWindow_Buffer outBuffer; + status_t status = surface->lock(&outBuffer, NULL); + if (status) { + ALOGE("Error %d locking sprite surface before drawing.", status); + return false; + } + + SkBitmap surfaceBitmap; + ssize_t bpr = outBuffer.stride * bytesPerPixel(outBuffer.format); + surfaceBitmap.installPixels(SkImageInfo::MakeN32Premul(outBuffer.width, outBuffer.height), + outBuffer.bits, bpr); + + SkCanvas surfaceCanvas(surfaceBitmap); + + SkPaint paint; + paint.setBlendMode(SkBlendMode::kSrc); + surfaceCanvas.drawBitmap(bitmap, 0, 0, &paint); + + if (outBuffer.width > width()) { + paint.setColor(0); // transparent fill color + surfaceCanvas.drawRect(SkRect::MakeLTRB(width(), 0, outBuffer.width, height()), paint); + } + if (outBuffer.height > height()) { + paint.setColor(0); // transparent fill color + surfaceCanvas.drawRect(SkRect::MakeLTRB(0, height(), outBuffer.width, outBuffer.height), + paint); + } + + status = surface->unlockAndPost(); + if (status) { + ALOGE("Error %d unlocking and posting sprite surface after drawing.", status); + } + return !status; +} + +} // namespace android |