1 /*
2 * Copyright 2014 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #include "gm.h"
9 #include "SkCanvas.h"
10 #include "SkDashPathEffect.h"
11
test_nulldev(SkCanvas * canvas)12 static void test_nulldev(SkCanvas* canvas) {
13 SkBitmap bm;
14 bm.setInfo(SkImageInfo::MakeN32Premul(30, 30));
15 // notice: no pixels mom! be sure we don't crash
16 // https://code.google.com/p/chromium/issues/detail?id=352616
17 SkCanvas c(bm);
18
19 SkBitmap src;
20 src.allocN32Pixels(10, 10);
21 src.eraseColor(SK_ColorRED);
22
23 // ensure we don't crash
24 c.writePixels(src, 0, 0);
25 }
26
draw_text_stroked(SkCanvas * canvas,const SkPaint & paint,SkScalar strokeWidth)27 static void draw_text_stroked(SkCanvas* canvas, const SkPaint& paint, SkScalar strokeWidth) {
28 SkPaint p(paint);
29 SkPoint loc = { 20, 435 };
30
31 if (strokeWidth > 0) {
32 p.setStyle(SkPaint::kFill_Style);
33 canvas->drawText("P", 1, loc.fX, loc.fY - 225, p);
34 canvas->drawPosText("P", 1, &loc, p);
35 }
36
37 p.setColor(SK_ColorRED);
38 p.setStyle(SkPaint::kStroke_Style);
39 p.setStrokeWidth(strokeWidth);
40
41 canvas->drawText("P", 1, loc.fX, loc.fY - 225, p);
42 canvas->drawPosText("P", 1, &loc, p);
43 }
44
draw_text_set(SkCanvas * canvas,const SkPaint & paint)45 static void draw_text_set(SkCanvas* canvas, const SkPaint& paint) {
46 SkAutoCanvasRestore acr(canvas, true);
47
48 draw_text_stroked(canvas, paint, 10);
49
50 canvas->translate(200, 0);
51 draw_text_stroked(canvas, paint, 0);
52
53 const SkScalar intervals[] = { 20, 10, 5, 10 };
54 const SkScalar phase = 0;
55
56 canvas->translate(200, 0);
57 SkPaint p(paint);
58 p.setPathEffect(SkDashPathEffect::Create(intervals, SK_ARRAY_COUNT(intervals), phase))->unref();
59 draw_text_stroked(canvas, p, 10);
60 }
61
62 namespace {
63 enum {
64 kBelowThreshold_TextSize = 255,
65 kAboveThreshold_TextSize = 257
66 };
67 }
68
69 DEF_SIMPLE_GM(stroketext, canvas, 1200, 480) {
70 if (true) { test_nulldev(canvas); }
71 SkPaint paint;
72 paint.setAntiAlias(true);
73 sk_tool_utils::set_portable_typeface(&paint);
74
75 paint.setTextSize(kBelowThreshold_TextSize);
76 draw_text_set(canvas, paint);
77
78 canvas->translate(600, 0);
79 paint.setTextSize(kAboveThreshold_TextSize);
80 draw_text_set(canvas, paint);
81 }
82