14f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger/*
24f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger * Copyright 2012 Google Inc.
34f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger *
44f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
54f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger * found in the LICENSE file.
64f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger */
74f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
84f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger#include "Test.h"
94f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger#include "SkBitmap.h"
104f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger#include "SkCanvas.h"
114f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
124f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerstatic SkCanvas* create(SkBitmap::Config config, int w, int h, int rb,
134f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger                        void* addr = NULL) {
144f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    SkBitmap bm;
154f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    bm.setConfig(config, w, h, rb);
164f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    if (addr) {
174f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger        bm.setPixels(addr);
184f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    } else {
194f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger        bm.allocPixels();
204f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    }
214f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    return new SkCanvas(bm);
224f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger}
234f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
244f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger// we used to assert if the bounds of the device (clip) was larger than 32K
254f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger// even when the path itself was smaller. We just draw and hope in the debug
264f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger// version to not assert.
274f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerstatic void test_giantaa(skiatest::Reporter* reporter) {
284f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    const int W = 400;
294f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    const int H = 400;
304f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    SkCanvas* canvas = create(SkBitmap::kARGB_8888_Config, 33000, 10, 0, NULL);
314f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    canvas->clear(0);
324f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
334f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    SkPaint paint;
344f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    paint.setAntiAlias(true);
354f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    SkPath path;
364f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    path.addOval(SkRect::MakeXYWH(-10, -10, 20 + W, 20 + H));
374f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    canvas->drawPath(path, paint);
384f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    canvas->unref();
394f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger}
404f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
414f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerstatic void TestDrawPath(skiatest::Reporter* reporter) {
424f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    test_giantaa(reporter);
434f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger}
444f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
454f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger#include "TestClassDef.h"
464f1dae40e24d57d647db01443b8bf2410514b8b5Derek SollenbergerDEFINE_TESTCLASS("DrawPath", TestDrawPathClass, TestDrawPath)
47