flesh out more of SkLiteDL:

save layer, clips, simple draws

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2226513002

Review-Url: https://codereview.chromium.org/2226513002
This commit is contained in:
mtklein 2016-08-06 15:28:11 -07:00 committed by Commit bot
parent 9c5052f16b
commit 6f8411dfa4
2 changed files with 100 additions and 15 deletions

View File

@ -6,6 +6,7 @@
*/
#include "SkCanvas.h"
#include "SkImageFilter.h"
#include "SkLiteDL.h"
#include "SkMutex.h"
#include "SkSpinlock.h"
@ -20,6 +21,22 @@ namespace {
struct Save final : Op { void draw(SkCanvas* c) override { c-> save(); } };
struct Restore final : Op { void draw(SkCanvas* c) override { c->restore(); } };
struct SaveLayer final : Op {
SaveLayer(const SkRect* bounds, const SkPaint* paint,
const SkImageFilter* backdrop, uint32_t flags) {
if (bounds) { this->bounds = *bounds; }
if (paint) { this->paint = *paint; }
this->backdrop = sk_ref_sp(backdrop);
this->flags = flags;
}
SkRect bounds = {SK_ScalarMin,SK_ScalarMin, SK_ScalarMax,SK_ScalarMax};
SkPaint paint;
sk_sp<const SkImageFilter> backdrop;
uint32_t flags;
void draw(SkCanvas* c) override {
c->saveLayer({ &bounds, &paint, backdrop.get(), flags });
}
};
struct Concat final : Op {
Concat(const SkMatrix& matrix) : matrix(matrix) {}
@ -32,6 +49,13 @@ namespace {
void draw(SkCanvas* c) override { c->setMatrix(matrix); }
};
struct ClipPath final : Op {
ClipPath(const SkPath& path, SkRegion::Op op, bool aa) : path(path), op(op), aa(aa) {}
SkPath path;
SkRegion::Op op;
bool aa;
void draw(SkCanvas* c) override { c->clipPath(path, op, aa); }
};
struct ClipRect final : Op {
ClipRect(const SkRect& rect, SkRegion::Op op, bool aa) : rect(rect), op(op), aa(aa) {}
SkRect rect;
@ -39,19 +63,55 @@ namespace {
bool aa;
void draw(SkCanvas* c) override { c->clipRect(rect, op, aa); }
};
struct ClipRRect final : Op {
ClipRRect(const SkRRect& rrect, SkRegion::Op op, bool aa) : rrect(rrect), op(op), aa(aa) {}
SkRRect rrect;
SkRegion::Op op;
bool aa;
void draw(SkCanvas* c) override { c->clipRRect(rrect, op, aa); }
};
struct ClipRegion final : Op {
ClipRegion(const SkRegion& region, SkRegion::Op op) : region(region), op(op) {}
SkRegion region;
SkRegion::Op op;
void draw(SkCanvas* c) override { c->clipRegion(region, op); }
};
struct DrawPaint final : Op {
DrawPaint(const SkPaint& paint) : paint(paint) {}
SkPaint paint;
void draw(SkCanvas* c) override { c->drawPaint(paint); }
};
struct DrawPath final : Op {
DrawPath(const SkPath& path, const SkPaint& paint) : path(path), paint(paint) {}
SkPath path;
SkPaint paint;
void draw(SkCanvas* c) override { c->drawPath(path, paint); }
};
struct DrawRect final : Op {
DrawRect(const SkRect& rect, const SkPaint& paint) : rect(rect), paint(paint) {}
SkRect rect;
SkPaint paint;
void draw(SkCanvas* c) override { c->drawRect(rect, paint); }
};
struct DrawPath final : Op {
DrawPath(const SkPath& path, const SkPaint& paint) : path(path), paint(paint) {}
SkPath path;
struct DrawOval final : Op {
DrawOval(const SkRect& oval, const SkPaint& paint) : oval(oval), paint(paint) {}
SkRect oval;
SkPaint paint;
void draw(SkCanvas* c) override { c->drawPath(path, paint); }
void draw(SkCanvas* c) override { c->drawOval(oval, paint); }
};
struct DrawRRect final : Op {
DrawRRect(const SkRRect& rrect, const SkPaint& paint) : rrect(rrect), paint(paint) {}
SkRRect rrect;
SkPaint paint;
void draw(SkCanvas* c) override { c->drawRRect(rrect, paint); }
};
struct DrawDRRect final : Op {
DrawDRRect(const SkRRect& outer, const SkRRect& inner, const SkPaint& paint)
: outer(outer), inner(inner), paint(paint) {}
SkRRect outer, inner;
SkPaint paint;
void draw(SkCanvas* c) override { c->drawDRRect(outer, inner, paint); }
};
template <typename T, typename... Args>
@ -75,20 +135,45 @@ namespace {
void SkLiteDL:: save() { push <Save>(&fBytes, 0); }
void SkLiteDL::restore() { push<Restore>(&fBytes, 0); }
void SkLiteDL::saveLayer(const SkRect* bounds, const SkPaint* paint,
const SkImageFilter* backdrop, uint32_t flags) {
push<SaveLayer>(&fBytes, 0, bounds, paint, backdrop, flags);
}
void SkLiteDL:: concat(const SkMatrix& matrix) { push <Concat>(&fBytes, 0, matrix); }
void SkLiteDL::setMatrix(const SkMatrix& matrix) { push<SetMatrix>(&fBytes, 0, matrix); }
void SkLiteDL::clipPath(const SkPath& path, SkRegion::Op op, bool aa) {
push<ClipPath>(&fBytes, 0, path, op, aa);
}
void SkLiteDL::clipRect(const SkRect& rect, SkRegion::Op op, bool aa) {
push<ClipRect>(&fBytes, 0, rect, op, aa);
}
void SkLiteDL::clipRRect(const SkRRect& rrect, SkRegion::Op op, bool aa) {
push<ClipRRect>(&fBytes, 0, rrect, op, aa);
}
void SkLiteDL::clipRegion(const SkRegion& region, SkRegion::Op op) {
push<ClipRegion>(&fBytes, 0, region, op);
}
void SkLiteDL::drawRect(const SkRect& rect, const SkPaint& paint) {
push<DrawRect>(&fBytes, 0, rect, paint);
void SkLiteDL::drawPaint(const SkPaint& paint) {
push<DrawPaint>(&fBytes, 0, paint);
}
void SkLiteDL::drawPath(const SkPath& path, const SkPaint& paint) {
push<DrawPath>(&fBytes, 0, path, paint);
}
void SkLiteDL::drawRect(const SkRect& rect, const SkPaint& paint) {
push<DrawRect>(&fBytes, 0, rect, paint);
}
void SkLiteDL::drawOval(const SkRect& oval, const SkPaint& paint) {
push<DrawOval>(&fBytes, 0, oval, paint);
}
void SkLiteDL::drawRRect(const SkRRect& rrect, const SkPaint& paint) {
push<DrawRRect>(&fBytes, 0, rrect, paint);
}
void SkLiteDL::drawDRRect(const SkRRect& outer, const SkRRect& inner, const SkPaint& paint) {
push<DrawDRRect>(&fBytes, 0, outer, inner, paint);
}
void SkLiteDL::onDraw(SkCanvas* canvas) {
map(&fBytes, [canvas](Op* op) { op->draw(canvas); });

View File

@ -20,25 +20,25 @@ public:
static sk_sp<SkLiteDL> New(SkRect);
void save();
void saveLayer(const SkRect*, const SkPaint*, const SkImageFilter*, uint32_t) {/*TODO*/}
void saveLayer(const SkRect*, const SkPaint*, const SkImageFilter*, uint32_t);
void restore();
void concat (const SkMatrix&);
void setMatrix (const SkMatrix&);
void translateZ(SkScalar) {/*TODO*/}
void clipPath (const SkPath&, SkRegion::Op, bool aa) {/*TODO*/}
void clipRRect (const SkRRect&, SkRegion::Op, bool aa) {/*TODO*/}
void clipPath (const SkPath&, SkRegion::Op, bool aa);
void clipRect (const SkRect&, SkRegion::Op, bool aa);
void clipRegion(const SkRegion&, SkRegion::Op) {/*TODO*/}
void clipRRect (const SkRRect&, SkRegion::Op, bool aa);
void clipRegion(const SkRegion&, SkRegion::Op);
void drawPaint (const SkPaint&) {/*TODO*/}
void drawPaint (const SkPaint&);
void drawPath (const SkPath&, const SkPaint&);
void drawRect (const SkRect&, const SkPaint&);
void drawOval (const SkRect&, const SkPaint&) {/*TODO*/}
void drawRRect (const SkRRect&, const SkPaint&) {/*TODO*/}
void drawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) {/*TODO*/}
void drawOval (const SkRect&, const SkPaint&);
void drawRRect (const SkRRect&, const SkPaint&);
void drawDRRect(const SkRRect&, const SkRRect&, const SkPaint&);
void drawAnnotation (const SkRect&, const char*, SkData*) {/*TODO*/}
void drawDrawable (SkDrawable*, const SkMatrix*) {/*TODO*/}