summaryrefslogtreecommitdiff
path: root/libs/hwui/SkiaCanvas.h
diff options
context:
space:
mode:
authorStan Iliev <stani@google.com>2016-10-24 10:40:39 -0400
committerStan Iliev <stani@google.com>2016-10-24 12:16:13 -0400
commitf50806afb8982acbab4510a8d04bbcf13a2bcd9e (patch)
tree9b68924a9a2bffb8241c1f535abd840f45ad55bc /libs/hwui/SkiaCanvas.h
parent58a7220b89cd99a581f96db09e3a9424b9b13cd9 (diff)
Merge SkiaCanvas changes from master-skia to master branch.
Most changes are taken from ag/1407698, ag/1336660, ag/1488900. Test: Built and run manually on angler-eng. Change-Id: Id4e464b9a83c62b6bc7ea31a30e5ca6cd53b659d
Diffstat (limited to 'libs/hwui/SkiaCanvas.h')
-rw-r--r--libs/hwui/SkiaCanvas.h23
1 files changed, 13 insertions, 10 deletions
diff --git a/libs/hwui/SkiaCanvas.h b/libs/hwui/SkiaCanvas.h
index 40772dd354f1..d1edff98eac6 100644
--- a/libs/hwui/SkiaCanvas.h
+++ b/libs/hwui/SkiaCanvas.h
@@ -22,8 +22,7 @@
#include "VectorDrawable.h"
#include <SkCanvas.h>
-#include <SkClipStack.h>
-#include <SkTArray.h>
+#include <SkTLazy.h>
namespace android {
@@ -39,10 +38,7 @@ public:
* not be NULL. This constructor will ref() the SkCanvas, and unref()
* it in its destructor.
*/
- explicit SkiaCanvas(SkCanvas* canvas) : mCanvas(canvas) {
- SkASSERT(canvas);
- canvas->ref();
- }
+ explicit SkiaCanvas(SkCanvas* canvas);
virtual SkCanvas* asSkCanvas() override {
return mCanvas.get();
@@ -152,7 +148,7 @@ public:
uirenderer::GlFunctorLifecycleListener* listener) override;
protected:
- explicit SkiaCanvas() {}
+ SkiaCanvas();
void reset(SkCanvas* skiaCanvas);
void drawDrawable(SkDrawable* drawable) { mCanvas->drawDrawable(drawable); }
@@ -167,19 +163,26 @@ private:
struct SaveRec {
int saveCount;
SaveFlags::Flags saveFlags;
+ size_t clipIndex;
};
bool mHighContrastText = false;
+ const SaveRec* currentSaveRec() const;
void recordPartialSave(SaveFlags::Flags flags);
- void saveClipsForFrame(SkTArray<SkClipStack::Element>& clips, int frameSaveCount);
- void applyClips(const SkTArray<SkClipStack::Element>& clips);
+
+ template<typename T>
+ void recordClip(const T&, SkRegion::Op);
+ void applyPersistentClips(size_t clipStartIndex);
void drawPoints(const float* points, int count, const SkPaint& paint,
SkCanvas::PointMode mode);
- sk_sp<SkCanvas> mCanvas;
+ class Clip;
+
+ sk_sp<SkCanvas> mCanvas;
std::unique_ptr<SkDeque> mSaveStack; // lazily allocated, tracks partial saves.
+ std::vector<Clip> mClipStack; // tracks persistent clips.
};
} // namespace android