skia2/tests/CanvasStateHelpers.cpp
Heather Miller b613c266df Revert "Change SkCanvas to *not* inherit from SkRefCnt"
This reverts commit 8240750718.

Reason for revert: Breaking WebView (chromium:663959)

Original change's description:
> Change SkCanvas to *not* inherit from SkRefCnt
> 
> Definitely tricky for classes like SkNWayCanvas, where the caller (today)
> need not pay attention to ownership of the canvases it gave the NWay
> (after this CL, the caller *must* managed ownership)
> 
> BUG=skia:
> 
> GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4441
> 
> DOCS_PREVIEW= https://skia.org/?cl=4441
> 
> Change-Id: Ib1ac07a3cdf0686d78e7aaa4735d45cc90bea081
> Reviewed-on: https://skia-review.googlesource.com/4441
> Commit-Queue: Mike Reed <reed@google.com>
> Reviewed-by: Florin Malita <fmalita@chromium.org>
> Reviewed-by: Robert Phillips <robertphillips@google.com>
> 

TBR=djsollen@google.com,mtklein@google.com,halcanary@google.com,robertphillips@google.com,fmalita@chromium.org,fmalita@google.com,reed@google.com,reviews@skia.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true

Change-Id: I5e3b3e876b7d2c09833cf841801321033b6b968b
Reviewed-on: https://skia-review.googlesource.com/4687
Commit-Queue: Heather Miller <hcm@google.com>
Reviewed-by: Heather Miller <hcm@google.com>
2016-11-10 21:25:44 +00:00

72 lines
2.4 KiB
C++

/*
* Copyright 2014 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "CanvasStateHelpers.h"
#ifdef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG
#include "SkCanvas.h"
#include "SkCanvasStateUtils.h"
#include "SkPaint.h"
#include "SkRect.h"
#include "SkRegion.h"
void complex_layers_draw(SkCanvas* canvas, float left, float top,
float right, float bottom, int32_t spacer) {
SkPaint bluePaint;
bluePaint.setColor(SK_ColorBLUE);
bluePaint.setStyle(SkPaint::kFill_Style);
SkRect rect = SkRect::MakeLTRB(left, top, right, bottom);
canvas->drawRect(rect, bluePaint);
canvas->translate(0, rect.height() + spacer);
canvas->drawRect(rect, bluePaint);
}
extern "C" bool complex_layers_draw_from_canvas_state(SkCanvasState* state,
float left, float top, float right, float bottom, int32_t spacer) {
SkCanvas* canvas = SkCanvasStateUtils::CreateFromCanvasState(state);
if (!canvas) {
return false;
}
complex_layers_draw(canvas, left, top, right, bottom, spacer);
canvas->unref();
return true;
}
void complex_clips_draw(SkCanvas* canvas, int32_t left, int32_t top,
int32_t right, int32_t bottom, int32_t clipOp, const SkRegion& localRegion) {
canvas->save();
SkRect clipRect = SkRect::MakeLTRB(SkIntToScalar(left), SkIntToScalar(top),
SkIntToScalar(right), SkIntToScalar(bottom));
canvas->clipRect(clipRect, (SkRegion::Op) clipOp);
canvas->drawColor(SK_ColorBLUE);
canvas->restore();
canvas->clipRegion(localRegion, (SkCanvas::ClipOp) clipOp);
canvas->drawColor(SK_ColorBLUE);
}
extern "C" bool complex_clips_draw_from_canvas_state(SkCanvasState* state,
int32_t left, int32_t top, int32_t right, int32_t bottom, int32_t clipOp,
int32_t regionRects, int32_t* rectCoords) {
SkCanvas* canvas = SkCanvasStateUtils::CreateFromCanvasState(state);
if (!canvas) {
return false;
}
SkRegion localRegion;
for (int32_t i = 0; i < regionRects; ++i) {
localRegion.op(rectCoords[0], rectCoords[1], rectCoords[2], rectCoords[3],
SkRegion::kUnion_Op);
rectCoords += 4;
}
complex_clips_draw(canvas, left, top, right, bottom, clipOp, localRegion);
canvas->unref();
return true;
}
#endif // SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG