1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2014 Google Inc.
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "CanvasStateHelpers.h"
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifdef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkCanvas.h"
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkCanvasStateUtils.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPaint.h"
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkRect.h"
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkRegion.h"
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotvoid complex_layers_draw(SkCanvas* canvas, float left, float top,
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                         float right, float bottom, int32_t spacer) {
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPaint bluePaint;
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bluePaint.setColor(SK_ColorBLUE);
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bluePaint.setStyle(SkPaint::kFill_Style);
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkRect rect = SkRect::MakeLTRB(left, top, right, bottom);
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    canvas->drawRect(rect, bluePaint);
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    canvas->translate(0, rect.height() + spacer);
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    canvas->drawRect(rect, bluePaint);
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotextern "C" bool complex_layers_draw_from_canvas_state(SkCanvasState* state,
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        float left, float top, float right, float bottom, int32_t spacer) {
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    std::unique_ptr<SkCanvas> canvas = SkCanvasStateUtils::MakeFromCanvasState(state);
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    if (!canvas) {
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return false;
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    complex_layers_draw(canvas.get(), left, top, right, bottom, spacer);
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    return true;
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotvoid complex_clips_draw(SkCanvas* canvas, int32_t left, int32_t top,
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        int32_t right, int32_t bottom, int32_t clipOp, const SkRegion& localRegion) {
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    canvas->save();
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkRect clipRect = SkRect::MakeLTRB(SkIntToScalar(left), SkIntToScalar(top),
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                       SkIntToScalar(right), SkIntToScalar(bottom));
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    canvas->clipRect(clipRect, (SkRegion::Op) clipOp);
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    canvas->drawColor(SK_ColorBLUE);
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    canvas->restore();
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    canvas->clipRegion(localRegion, (SkClipOp) clipOp);
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    canvas->drawColor(SK_ColorBLUE);
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotextern "C" bool complex_clips_draw_from_canvas_state(SkCanvasState* state,
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        int32_t left, int32_t top, int32_t right, int32_t bottom, int32_t clipOp,
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        int32_t regionRects, int32_t* rectCoords) {
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    std::unique_ptr<SkCanvas> canvas = SkCanvasStateUtils::MakeFromCanvasState(state);
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    if (!canvas) {
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return false;
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkRegion localRegion;
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    for (int32_t i = 0; i < regionRects; ++i) {
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        localRegion.op(rectCoords[0], rectCoords[1], rectCoords[2], rectCoords[3],
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                       SkRegion::kUnion_Op);
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        rectCoords += 4;
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    complex_clips_draw(canvas.get(), left, top, right, bottom, clipOp, localRegion);
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    return true;
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif // SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG
70