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