summaryrefslogtreecommitdiff
path: root/libs/hwui/SkiaCanvas.cpp
diff options
context:
space:
mode:
author Ryan Prichard <rprichard@google.com> 2022-09-01 01:44:56 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2022-09-01 01:44:56 +0000
commite406bb523a7616eda68a2ef16c0dc259d5789ce6 (patch)
treef53c26edf1a0392711c440c2fa25e291b779ceaa /libs/hwui/SkiaCanvas.cpp
parent9756ac0bf2ea8b8915482d738cd9ed34d4f7e1d7 (diff)
parent86a8d4f4d44efbd2aee5a6f336c92d049317984e (diff)
Merge "Move SkiaCanvas::Clip above SkiaCanvas::SkiaCanvas" am: 770e68977b am: d80d36a428 am: eda3dacc31 am: 86a8d4f4d4
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2200075 Change-Id: Ia12475aa0035cd2616cf3594d3dfe63a39726452 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'libs/hwui/SkiaCanvas.cpp')
-rw-r--r--libs/hwui/SkiaCanvas.cpp86
1 files changed, 43 insertions, 43 deletions
diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp
index 53c6db0cdf3a..f9b3a8c12b2e 100644
--- a/libs/hwui/SkiaCanvas.cpp
+++ b/libs/hwui/SkiaCanvas.cpp
@@ -51,6 +51,49 @@ namespace android {
using uirenderer::PaintUtils;
+class SkiaCanvas::Clip {
+public:
+ Clip(const SkRect& rect, SkClipOp op, const SkMatrix& m)
+ : mType(Type::Rect), mOp(op), mMatrix(m), mRRect(SkRRect::MakeRect(rect)) {}
+ Clip(const SkRRect& rrect, SkClipOp op, const SkMatrix& m)
+ : mType(Type::RRect), mOp(op), mMatrix(m), mRRect(rrect) {}
+ Clip(const SkPath& path, SkClipOp op, const SkMatrix& m)
+ : mType(Type::Path), mOp(op), mMatrix(m), mPath(std::in_place, path) {}
+
+ void apply(SkCanvas* canvas) const {
+ canvas->setMatrix(mMatrix);
+ switch (mType) {
+ case Type::Rect:
+ // Don't anti-alias rectangular clips
+ canvas->clipRect(mRRect.rect(), mOp, false);
+ break;
+ case Type::RRect:
+ // Ensure rounded rectangular clips are anti-aliased
+ canvas->clipRRect(mRRect, mOp, true);
+ break;
+ case Type::Path:
+ // Ensure path clips are anti-aliased
+ canvas->clipPath(mPath.value(), mOp, true);
+ break;
+ }
+ }
+
+private:
+ enum class Type {
+ Rect,
+ RRect,
+ Path,
+ };
+
+ Type mType;
+ SkClipOp mOp;
+ SkMatrix mMatrix;
+
+ // These are logically a union (tracked separately due to non-POD path).
+ std::optional<SkPath> mPath;
+ SkRRect mRRect;
+};
+
Canvas* Canvas::create_canvas(const SkBitmap& bitmap) {
return new SkiaCanvas(bitmap);
}
@@ -194,49 +237,6 @@ void SkiaCanvas::restoreUnclippedLayer(int restoreCount, const Paint& paint) {
}
}
-class SkiaCanvas::Clip {
-public:
- Clip(const SkRect& rect, SkClipOp op, const SkMatrix& m)
- : mType(Type::Rect), mOp(op), mMatrix(m), mRRect(SkRRect::MakeRect(rect)) {}
- Clip(const SkRRect& rrect, SkClipOp op, const SkMatrix& m)
- : mType(Type::RRect), mOp(op), mMatrix(m), mRRect(rrect) {}
- Clip(const SkPath& path, SkClipOp op, const SkMatrix& m)
- : mType(Type::Path), mOp(op), mMatrix(m), mPath(std::in_place, path) {}
-
- void apply(SkCanvas* canvas) const {
- canvas->setMatrix(mMatrix);
- switch (mType) {
- case Type::Rect:
- // Don't anti-alias rectangular clips
- canvas->clipRect(mRRect.rect(), mOp, false);
- break;
- case Type::RRect:
- // Ensure rounded rectangular clips are anti-aliased
- canvas->clipRRect(mRRect, mOp, true);
- break;
- case Type::Path:
- // Ensure path clips are anti-aliased
- canvas->clipPath(mPath.value(), mOp, true);
- break;
- }
- }
-
-private:
- enum class Type {
- Rect,
- RRect,
- Path,
- };
-
- Type mType;
- SkClipOp mOp;
- SkMatrix mMatrix;
-
- // These are logically a union (tracked separately due to non-POD path).
- std::optional<SkPath> mPath;
- SkRRect mRRect;
-};
-
const SkiaCanvas::SaveRec* SkiaCanvas::currentSaveRec() const {
const SaveRec* rec = mSaveStack ? static_cast<const SaveRec*>(mSaveStack->back()) : nullptr;
int currentSaveCount = mCanvas->getSaveCount();