diff options
author | scroggo <scroggo@google.com> | 2014-07-22 12:38:55 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-07-22 12:38:55 -0700 |
commit | 24519371cb541db6f59d903d21878ed9c45eb549 (patch) | |
tree | 3aeaca2a3da03607d7494c8b3deef5c4045a9d07 /tests/CanvasStateHelpers.cpp | |
parent | c0bc9134514a4f138621203a6f7d4553ebec238a (diff) |
Run CanvasState test across a library boundary.
Refactor CanvasStateTest to pull out functions which can
either be called directly or from a shared library. Add a
command line flag to pass in the path to a library to open
to call those functions from.
Separate different CanvasTest tests into separate DEF_TEST
tests. This allows them to be run in parallel.
Move the ifdefs outside of function declarations to skip
running CanvasTest tests which do nothing.
Add the canvas_state_lib target. It is a shared library that
exports some functions to be called by another version of
Skia.
BUG=b/15693384
R=djsollen@google.com, reed@google.com
Author: scroggo@google.com
Review URL: https://codereview.chromium.org/400043003
Diffstat (limited to 'tests/CanvasStateHelpers.cpp')
-rw-r--r-- | tests/CanvasStateHelpers.cpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/CanvasStateHelpers.cpp b/tests/CanvasStateHelpers.cpp new file mode 100644 index 0000000000..96972b8a1e --- /dev/null +++ b/tests/CanvasStateHelpers.cpp @@ -0,0 +1,71 @@ +/* + * 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, (SkRegion::Op) 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 |