diff options
author | John Reck <jreck@google.com> | 2018-09-20 16:27:46 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2018-09-21 09:56:42 -0700 |
commit | 08ee815625770e69146b7899e1701e2b2e85464e (patch) | |
tree | 9ae931c890b45e7c377951ba1c3ebb4a4b02f3db /libs/hwui/RecordingCanvas.cpp | |
parent | 4603406afe2667b1eac5b07bc21d3b44443a9e9a (diff) |
Support auto-dark for VectorDrawable
Also fixes a bug where non-animatable properties (colorfilter)
weren't captured at record-time
Test: poked around, quick settings doesn't look awful
Change-Id: I57312dd5eb70f477814a4d898963ee010153c243
Diffstat (limited to 'libs/hwui/RecordingCanvas.cpp')
-rw-r--r-- | libs/hwui/RecordingCanvas.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/libs/hwui/RecordingCanvas.cpp b/libs/hwui/RecordingCanvas.cpp index 5f54c025c819..c30af842ebbb 100644 --- a/libs/hwui/RecordingCanvas.cpp +++ b/libs/hwui/RecordingCanvas.cpp @@ -16,6 +16,8 @@ #include "RecordingCanvas.h" +#include "VectorDrawable.h" + #include "SkCanvas.h" #include "SkData.h" #include "SkDrawShadowInfo.h" @@ -498,6 +500,27 @@ struct DrawShadowRec final : Op { SkDrawShadowRec fRec; void draw(SkCanvas* c, const SkMatrix&) const { c->private_draw_shadow_rec(fPath, fRec); } }; + +struct DrawVectorDrawable final : Op { + static const auto kType = Type::DrawVectorDrawable; + DrawVectorDrawable(VectorDrawableRoot* tree) + : mRoot(tree) + , mBounds(tree->stagingProperties().getBounds()) + , palette(tree->computePalette()) { + // Recording, so use staging properties + tree->getPaintFor(&paint, tree->stagingProperties()); + } + + void draw(SkCanvas* canvas, const SkMatrix&) const { + mRoot->draw(canvas, mBounds, paint); + } + + sp<VectorDrawableRoot> mRoot; + SkRect mBounds; + SkPaint paint; + BitmapPalette palette; +}; + } template <typename T, typename... Args> @@ -698,6 +721,9 @@ void DisplayListData::drawAtlas(const SkImage* atlas, const SkRSXform xforms[], void DisplayListData::drawShadowRec(const SkPath& path, const SkDrawShadowRec& rec) { this->push<DrawShadowRec>(0, path, rec); } +void DisplayListData::drawVectorDrawable(VectorDrawableRoot* tree) { + this->push<DrawVectorDrawable>(0, tree); +} typedef void (*draw_fn)(const void*, SkCanvas*, const SkMatrix&); typedef void (*void_fn)(const void*); @@ -962,5 +988,9 @@ void RecordingCanvas::onDrawShadowRec(const SkPath& path, const SkDrawShadowRec& fDL->drawShadowRec(path, rec); } +void RecordingCanvas::drawVectorDrawable(VectorDrawableRoot* tree) { + fDL->drawVectorDrawable(tree); +} + }; // namespace uirenderer }; // namespace android |