diff options
author | 2022-09-01 01:46:00 +0000 | |
---|---|---|
committer | 2022-09-01 01:46:00 +0000 | |
commit | b5dd36aa969ad04b7e8a4450b8438232a17e178f (patch) | |
tree | db83415b5158e6e62a9d060bdc3ccdae6162164c /libs/hwui/SkiaCanvas.cpp | |
parent | d83b25197a5702b6b38e53bc45c352307403848f (diff) | |
parent | e406bb523a7616eda68a2ef16c0dc259d5789ce6 (diff) |
Merge "Move SkiaCanvas::Clip above SkiaCanvas::SkiaCanvas" am: 770e68977b am: d80d36a428 am: eda3dacc31 am: 86a8d4f4d4 am: e406bb523a
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2200075
Change-Id: Iab55e8449d54380693cfe2cc78ea02eae2a0e611
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.cpp | 86 |
1 files changed, 43 insertions, 43 deletions
diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp index 023d6bf0b673..397975dcb78f 100644 --- a/libs/hwui/SkiaCanvas.cpp +++ b/libs/hwui/SkiaCanvas.cpp @@ -57,6 +57,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); } @@ -200,49 +243,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(); |