1641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org/*
2641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org * Copyright 2014 Google Inc.
3641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org *
4641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be
5641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org * found in the LICENSE file.
6641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org */
7641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org
8641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org#include "gm.h"
933d2055e594177b27360f84e0631b26d74a55a9bMike Klein#include "sk_tool_utils.h"
10641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org#include "SkCanvas.h"
1174266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org#include "SkDashPathEffect.h"
12641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org
130d30c51c6cf45b3a08a3000b6d348c16bdec7f05reed@google.comstatic void test_nulldev(SkCanvas* canvas) {
140d30c51c6cf45b3a08a3000b6d348c16bdec7f05reed@google.com    SkBitmap bm;
156c22573edb234ad14df947278cfed010669a39a7reed    bm.setInfo(SkImageInfo::MakeN32Premul(30, 30));
160d30c51c6cf45b3a08a3000b6d348c16bdec7f05reed@google.com    // notice: no pixels mom! be sure we don't crash
170d30c51c6cf45b3a08a3000b6d348c16bdec7f05reed@google.com    // https://code.google.com/p/chromium/issues/detail?id=352616
180d30c51c6cf45b3a08a3000b6d348c16bdec7f05reed@google.com    SkCanvas c(bm);
190d30c51c6cf45b3a08a3000b6d348c16bdec7f05reed@google.com
200d30c51c6cf45b3a08a3000b6d348c16bdec7f05reed@google.com    SkBitmap src;
210d30c51c6cf45b3a08a3000b6d348c16bdec7f05reed@google.com    src.allocN32Pixels(10, 10);
220d30c51c6cf45b3a08a3000b6d348c16bdec7f05reed@google.com    src.eraseColor(SK_ColorRED);
230d30c51c6cf45b3a08a3000b6d348c16bdec7f05reed@google.com
240d30c51c6cf45b3a08a3000b6d348c16bdec7f05reed@google.com    // ensure we don't crash
250d30c51c6cf45b3a08a3000b6d348c16bdec7f05reed@google.com    c.writePixels(src, 0, 0);
260d30c51c6cf45b3a08a3000b6d348c16bdec7f05reed@google.com}
270d30c51c6cf45b3a08a3000b6d348c16bdec7f05reed@google.com
2874266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.orgstatic void draw_text_stroked(SkCanvas* canvas, const SkPaint& paint, SkScalar strokeWidth) {
29641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org    SkPaint p(paint);
3074266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org    SkPoint loc = { 20, 435 };
31affa77db64b75b9d32c7e42282bcc2e4eb2a94c3skia.committer@gmail.com
3274266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org    if (strokeWidth > 0) {
3374266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org        p.setStyle(SkPaint::kFill_Style);
342a475eae622adc1e8fa29206be1eaf862c23548eCary Clark        canvas->drawString("P", loc.fX, loc.fY - 225, p);
3574266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org        canvas->drawPosText("P", 1, &loc, p);
3674266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org    }
37affa77db64b75b9d32c7e42282bcc2e4eb2a94c3skia.committer@gmail.com
38641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org    p.setColor(SK_ColorRED);
39641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org    p.setStyle(SkPaint::kStroke_Style);
4074266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org    p.setStrokeWidth(strokeWidth);
41affa77db64b75b9d32c7e42282bcc2e4eb2a94c3skia.committer@gmail.com
422a475eae622adc1e8fa29206be1eaf862c23548eCary Clark    canvas->drawString("P", loc.fX, loc.fY - 225, p);
43641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org    canvas->drawPosText("P", 1, &loc, p);
44641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org}
45641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org
4674266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.orgstatic void draw_text_set(SkCanvas* canvas, const SkPaint& paint) {
4774266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org    SkAutoCanvasRestore acr(canvas, true);
4874266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org
4974266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org    draw_text_stroked(canvas, paint, 10);
5074266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org
5174266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org    canvas->translate(200, 0);
5274266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org    draw_text_stroked(canvas, paint, 0);
5374266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org
5474266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org    const SkScalar intervals[] = { 20, 10, 5, 10 };
5574266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org    const SkScalar phase = 0;
5674266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org
5774266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org    canvas->translate(200, 0);
5874266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org    SkPaint p(paint);
59a439334b6e758d38501e225e2e5d0ab73e2fb6ebreed    p.setPathEffect(SkDashPathEffect::Make(intervals, SK_ARRAY_COUNT(intervals), phase));
607cb5e4797ed7ecb200f90889687a72940efa6d98reed@google.com    draw_text_stroked(canvas, p, 10);
6174266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org}
6274266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org
632a24338c777462e04a2b26295f9c034155ee8f3ehalcanarynamespace {
64641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org    enum {
65641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org        kBelowThreshold_TextSize = 255,
66641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org        kAboveThreshold_TextSize = 257
67641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org    };
682a24338c777462e04a2b26295f9c034155ee8f3ehalcanary}
69641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org
702a24338c777462e04a2b26295f9c034155ee8f3ehalcanaryDEF_SIMPLE_GM(stroketext, canvas, 1200, 480) {
710d30c51c6cf45b3a08a3000b6d348c16bdec7f05reed@google.com        if (true) { test_nulldev(canvas); }
72641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org        SkPaint paint;
73641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org        paint.setAntiAlias(true);
741818acb6a4b11cd9a1d44ce5dde77452502a9796caryclark        sk_tool_utils::set_portable_typeface(&paint);
75affa77db64b75b9d32c7e42282bcc2e4eb2a94c3skia.committer@gmail.com
76641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org        paint.setTextSize(kBelowThreshold_TextSize);
7774266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org        draw_text_set(canvas, paint);
78affa77db64b75b9d32c7e42282bcc2e4eb2a94c3skia.committer@gmail.com
7974266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org        canvas->translate(600, 0);
80641e33b3f6014b193856ba5789b1a0278a92e083commit-bot@chromium.org        paint.setTextSize(kAboveThreshold_TextSize);
8174266814a0d0fd5b0ec9be664be6b629aeddc0eacommit-bot@chromium.org        draw_text_set(canvas, paint);
822a24338c777462e04a2b26295f9c034155ee8f3ehalcanary}
83