blob: 070ff6af45e2d9412c2d243fab36cef8f5db3238 [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001/*
2 * Copyright 2011 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 */
reed@google.com8ea69832013-06-21 15:11:40 +00007
reed@google.com67981c52011-02-17 14:21:01 +00008#include "gm.h"
Mike Klein33d20552017-03-22 13:47:51 -04009#include "sk_tool_utils.h"
caryclarkf597c422015-07-28 10:37:53 -070010#include "Resources.h"
Mike Reed9cd2a5c2019-01-22 15:17:59 -050011#include "SkFontMetrics.h"
bungemand3ebb482015-08-05 13:57:49 -070012#include "SkPath.h"
Mike Reed71f5a0b2018-10-25 16:12:39 -040013#include "SkTextUtils.h"
caryclarkf597c422015-07-28 10:37:53 -070014#include "SkTypeface.h"
reed@google.com67981c52011-02-17 14:21:01 +000015
reed@google.com8ea69832013-06-21 15:11:40 +000016class Poly2PolyGM : public skiagm::GM {
reed@google.com67981c52011-02-17 14:21:01 +000017public:
rmistry@google.comd6176b02012-08-23 18:14:13 +000018 Poly2PolyGM() {}
19
reed@google.com67981c52011-02-17 14:21:01 +000020protected:
commit-bot@chromium.orga90c6802014-04-30 13:20:45 +000021
mtklein36352bf2015-03-25 18:17:31 -070022 SkString onShortName() override {
reed@google.com67981c52011-02-17 14:21:01 +000023 return SkString("poly2poly");
24 }
25
mtklein36352bf2015-03-25 18:17:31 -070026 SkISize onISize() override {
reed@google.com8ea69832013-06-21 15:11:40 +000027 return SkISize::Make(835, 840);
reed@google.com67981c52011-02-17 14:21:01 +000028 }
rmistry@google.comd6176b02012-08-23 18:14:13 +000029
Mike Reeddc5863c2018-12-23 23:19:14 -050030 static void doDraw(SkCanvas* canvas, const SkFont& font, SkPaint* paint, const int isrc[],
reed@google.com67981c52011-02-17 14:21:01 +000031 const int idst[], int count) {
32 SkMatrix matrix;
33 SkPoint src[4], dst[4];
rmistry@google.comd6176b02012-08-23 18:14:13 +000034
reed@google.com67981c52011-02-17 14:21:01 +000035 for (int i = 0; i < count; i++) {
36 src[i].set(SkIntToScalar(isrc[2*i+0]), SkIntToScalar(isrc[2*i+1]));
37 dst[i].set(SkIntToScalar(idst[2*i+0]), SkIntToScalar(idst[2*i+1]));
38 }
rmistry@google.comd6176b02012-08-23 18:14:13 +000039
reed@google.com67981c52011-02-17 14:21:01 +000040 canvas->save();
41 matrix.setPolyToPoly(src, dst, count);
42 canvas->concat(matrix);
rmistry@google.comd6176b02012-08-23 18:14:13 +000043
Mike Kleind46dce32018-08-16 10:17:03 -040044 paint->setColor(SK_ColorGRAY);
reed@google.com67981c52011-02-17 14:21:01 +000045 paint->setStyle(SkPaint::kStroke_Style);
Mike Reed3661bc92017-02-22 13:21:42 -050046 const SkScalar D = 64;
47 canvas->drawRect(SkRect::MakeWH(D, D), *paint);
reed@google.com67981c52011-02-17 14:21:01 +000048 canvas->drawLine(0, 0, D, D, *paint);
49 canvas->drawLine(0, D, D, 0, *paint);
rmistry@google.comd6176b02012-08-23 18:14:13 +000050
Mike Reedb5784ac2018-11-12 09:35:15 -050051 SkFontMetrics fm;
Mike Reeddc5863c2018-12-23 23:19:14 -050052 font.getMetrics(&fm);
reed@google.com67981c52011-02-17 14:21:01 +000053 paint->setColor(SK_ColorRED);
54 paint->setStyle(SkPaint::kFill_Style);
55 SkScalar x = D/2;
bsalomon@google.com72e49b82011-10-27 21:47:03 +000056 SkScalar y = D/2 - (fm.fAscent + fm.fDescent)/2;
caryclarkf597c422015-07-28 10:37:53 -070057 uint16_t glyphID = 3; // X
Mike Reeddc5863c2018-12-23 23:19:14 -050058 SkTextUtils::Draw(canvas, &glyphID, sizeof(glyphID), kGlyphID_SkTextEncoding, x, y,
59 font, *paint, SkTextUtils::kCenter_Align);
reed@google.com67981c52011-02-17 14:21:01 +000060 canvas->restore();
61 }
rmistry@google.comd6176b02012-08-23 18:14:13 +000062
caryclarkf597c422015-07-28 10:37:53 -070063 void onOnceBeforeDraw() override {
Hal Canary53e5e7d2017-12-08 14:25:14 -050064 fEmFace = MakeResourceAsTypeface("fonts/Em.ttf");
caryclarkf597c422015-07-28 10:37:53 -070065 }
66
mtklein36352bf2015-03-25 18:17:31 -070067 void onDraw(SkCanvas* canvas) override {
reed@google.com67981c52011-02-17 14:21:01 +000068 SkPaint paint;
69 paint.setAntiAlias(true);
70 paint.setStrokeWidth(SkIntToScalar(4));
Mike Reeddc5863c2018-12-23 23:19:14 -050071 SkFont font(fEmFace, 40);
rmistry@google.comd6176b02012-08-23 18:14:13 +000072
reed@google.com67981c52011-02-17 14:21:01 +000073 canvas->save();
74 canvas->translate(SkIntToScalar(10), SkIntToScalar(10));
75 // translate (1 point)
76 const int src1[] = { 0, 0 };
77 const int dst1[] = { 5, 5 };
Mike Reeddc5863c2018-12-23 23:19:14 -050078 doDraw(canvas, font, &paint, src1, dst1, 1);
reed@google.com67981c52011-02-17 14:21:01 +000079 canvas->restore();
rmistry@google.comd6176b02012-08-23 18:14:13 +000080
reed@google.com67981c52011-02-17 14:21:01 +000081 canvas->save();
82 canvas->translate(SkIntToScalar(160), SkIntToScalar(10));
83 // rotate/uniform-scale (2 points)
84 const int src2[] = { 32, 32, 64, 32 };
85 const int dst2[] = { 32, 32, 64, 48 };
Mike Reeddc5863c2018-12-23 23:19:14 -050086 doDraw(canvas, font, &paint, src2, dst2, 2);
reed@google.com67981c52011-02-17 14:21:01 +000087 canvas->restore();
rmistry@google.comd6176b02012-08-23 18:14:13 +000088
reed@google.com67981c52011-02-17 14:21:01 +000089 canvas->save();
90 canvas->translate(SkIntToScalar(10), SkIntToScalar(110));
91 // rotate/skew (3 points)
92 const int src3[] = { 0, 0, 64, 0, 0, 64 };
93 const int dst3[] = { 0, 0, 96, 0, 24, 64 };
Mike Reeddc5863c2018-12-23 23:19:14 -050094 doDraw(canvas, font, &paint, src3, dst3, 3);
reed@google.com67981c52011-02-17 14:21:01 +000095 canvas->restore();
rmistry@google.comd6176b02012-08-23 18:14:13 +000096
reed@google.com67981c52011-02-17 14:21:01 +000097 canvas->save();
98 canvas->translate(SkIntToScalar(160), SkIntToScalar(110));
99 // perspective (4 points)
100 const int src4[] = { 0, 0, 64, 0, 64, 64, 0, 64 };
101 const int dst4[] = { 0, 0, 96, 0, 64, 96, 0, 64 };
Mike Reeddc5863c2018-12-23 23:19:14 -0500102 doDraw(canvas, font, &paint, src4, dst4, 4);
reed@google.com67981c52011-02-17 14:21:01 +0000103 canvas->restore();
104 }
rmistry@google.comd6176b02012-08-23 18:14:13 +0000105
reed@google.com67981c52011-02-17 14:21:01 +0000106private:
reed@google.com8ea69832013-06-21 15:11:40 +0000107 typedef skiagm::GM INHERITED;
bungeman13b9c952016-05-12 10:09:30 -0700108 sk_sp<SkTypeface> fEmFace;
reed@google.com67981c52011-02-17 14:21:01 +0000109};
110
111//////////////////////////////////////////////////////////////////////////////
112
reed@google.com8ea69832013-06-21 15:11:40 +0000113DEF_GM( return new Poly2PolyGM; )