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