Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ae54948e authored by Jorge Betancourt's avatar Jorge Betancourt Committed by Android (Google) Code Review
Browse files

Merge "enable hardware drawing for clipShader" into main

parents 33cac7f7 67f119c7
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ X(ClipPath)
X(ClipRect)
X(ClipRRect)
X(ClipRegion)
X(ClipShader)
X(ResetClip)
X(DrawPaint)
X(DrawBehind)
+15 −0
Original line number Diff line number Diff line
@@ -207,6 +207,13 @@ struct ClipRegion final : Op {
    SkClipOp op;
    void draw(SkCanvas* c, const SkMatrix&) const { c->clipRegion(region, op); }
};
struct ClipShader final : Op {
    static const auto kType = Type::ClipShader;
    ClipShader(const sk_sp<SkShader>& shader, SkClipOp op) : shader(shader), op(op) {}
    sk_sp<SkShader> shader;
    SkClipOp op;
    void draw(SkCanvas* c, const SkMatrix&) const { c->clipShader(shader, op); }
};
struct ResetClip final : Op {
    static const auto kType = Type::ResetClip;
    ResetClip() {}
@@ -822,6 +829,9 @@ void DisplayListData::clipRRect(const SkRRect& rrect, SkClipOp op, bool aa) {
void DisplayListData::clipRegion(const SkRegion& region, SkClipOp op) {
    this->push<ClipRegion>(0, region, op);
}
void DisplayListData::clipShader(const sk_sp<SkShader>& shader, SkClipOp op) {
    this->push<ClipShader>(0, shader, op);
}
void DisplayListData::resetClip() {
    this->push<ResetClip>(0);
}
@@ -1134,6 +1144,11 @@ void RecordingCanvas::onClipRegion(const SkRegion& region, SkClipOp op) {
    fDL->clipRegion(region, op);
    this->INHERITED::onClipRegion(region, op);
}
void RecordingCanvas::onClipShader(sk_sp<SkShader> shader, SkClipOp op) {
    setClipMayBeComplex();
    fDL->clipShader(shader, op);
    this->INHERITED::onClipShader(shader, op);
}
void RecordingCanvas::onResetClip() {
    // This is part of "replace op" emulation, but rely on the following intersection
    // clip to potentially mark the clip as complex. If we are already complex, we do
+2 −0
Original line number Diff line number Diff line
@@ -140,6 +140,7 @@ private:
    void translateZ(SkScalar);

    void clipPath(const SkPath&, SkClipOp, bool aa);
    void clipShader(const sk_sp<SkShader>& shader, SkClipOp);
    void clipRect(const SkRect&, SkClipOp, bool aa);
    void clipRRect(const SkRRect&, SkClipOp, bool aa);
    void clipRegion(const SkRegion&, SkClipOp);
@@ -216,6 +217,7 @@ public:
    void onClipRect(const SkRect&, SkClipOp, ClipEdgeStyle) override;
    void onClipRRect(const SkRRect&, SkClipOp, ClipEdgeStyle) override;
    void onClipPath(const SkPath&, SkClipOp, ClipEdgeStyle) override;
    void onClipShader(sk_sp<SkShader>, SkClipOp) override;
    void onClipRegion(const SkRegion&, SkClipOp) override;
    void onResetClip() override;