13e71a887628ff25c806675366b081c70bb10b74dreed@google.com/* 23e71a887628ff25c806675366b081c70bb10b74dreed@google.com * Copyright 2011 Google Inc. 33e71a887628ff25c806675366b081c70bb10b74dreed@google.com * 43e71a887628ff25c806675366b081c70bb10b74dreed@google.com * Use of this source code is governed by a BSD-style license that can be 53e71a887628ff25c806675366b081c70bb10b74dreed@google.com * found in the LICENSE file. 63e71a887628ff25c806675366b081c70bb10b74dreed@google.com */ 73e71a887628ff25c806675366b081c70bb10b74dreed@google.com 83e71a887628ff25c806675366b081c70bb10b74dreed@google.com#include "gm.h" 93e71a887628ff25c806675366b081c70bb10b74dreed@google.com#include "SkCanvas.h" 103e71a887628ff25c806675366b081c70bb10b74dreed@google.com#include "SkPath.h" 113e71a887628ff25c806675366b081c70bb10b74dreed@google.com#include "SkTypeface.h" 123e71a887628ff25c806675366b081c70bb10b74dreed@google.com 133e71a887628ff25c806675366b081c70bb10b74dreed@google.comstatic void test_path(SkCanvas* canvas, const SkPath& path) { 143e71a887628ff25c806675366b081c70bb10b74dreed@google.com SkPaint paint; 153e71a887628ff25c806675366b081c70bb10b74dreed@google.com paint.setAntiAlias(true); 163e71a887628ff25c806675366b081c70bb10b74dreed@google.com canvas->drawPath(path, paint); 17d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 183e71a887628ff25c806675366b081c70bb10b74dreed@google.com paint.setStyle(SkPaint::kStroke_Style); 193e71a887628ff25c806675366b081c70bb10b74dreed@google.com paint.setColor(SK_ColorRED); 203e71a887628ff25c806675366b081c70bb10b74dreed@google.com canvas->drawPath(path, paint); 213e71a887628ff25c806675366b081c70bb10b74dreed@google.com} 223e71a887628ff25c806675366b081c70bb10b74dreed@google.com 233e71a887628ff25c806675366b081c70bb10b74dreed@google.comstatic void test_rev(SkCanvas* canvas, const SkPath& path) { 243e71a887628ff25c806675366b081c70bb10b74dreed@google.com test_path(canvas, path); 253e71a887628ff25c806675366b081c70bb10b74dreed@google.com 263e71a887628ff25c806675366b081c70bb10b74dreed@google.com SkPath rev; 273e71a887628ff25c806675366b081c70bb10b74dreed@google.com rev.reverseAddPath(path); 283e71a887628ff25c806675366b081c70bb10b74dreed@google.com canvas->save(); 293e71a887628ff25c806675366b081c70bb10b74dreed@google.com canvas->translate(150, 0); 303e71a887628ff25c806675366b081c70bb10b74dreed@google.com test_path(canvas, rev); 313e71a887628ff25c806675366b081c70bb10b74dreed@google.com canvas->restore(); 323e71a887628ff25c806675366b081c70bb10b74dreed@google.com} 333e71a887628ff25c806675366b081c70bb10b74dreed@google.com 343e71a887628ff25c806675366b081c70bb10b74dreed@google.comstatic void test_rev(SkCanvas* canvas) { 353e71a887628ff25c806675366b081c70bb10b74dreed@google.com SkRect r = { 10, 10, 100, 60 }; 363e71a887628ff25c806675366b081c70bb10b74dreed@google.com 373e71a887628ff25c806675366b081c70bb10b74dreed@google.com SkPath path; 383e71a887628ff25c806675366b081c70bb10b74dreed@google.com 393e71a887628ff25c806675366b081c70bb10b74dreed@google.com path.addRect(r); test_rev(canvas, path); 403e71a887628ff25c806675366b081c70bb10b74dreed@google.com 413e71a887628ff25c806675366b081c70bb10b74dreed@google.com canvas->translate(0, 100); 423e71a887628ff25c806675366b081c70bb10b74dreed@google.com path.offset(20, 20); 433e71a887628ff25c806675366b081c70bb10b74dreed@google.com path.addRect(r); test_rev(canvas, path); 443e71a887628ff25c806675366b081c70bb10b74dreed@google.com 453e71a887628ff25c806675366b081c70bb10b74dreed@google.com canvas->translate(0, 100); 463e71a887628ff25c806675366b081c70bb10b74dreed@google.com path.reset(); 473e71a887628ff25c806675366b081c70bb10b74dreed@google.com path.moveTo(10, 10); path.lineTo(30, 30); 483e71a887628ff25c806675366b081c70bb10b74dreed@google.com path.addOval(r); 493e71a887628ff25c806675366b081c70bb10b74dreed@google.com r.offset(50, 20); 503e71a887628ff25c806675366b081c70bb10b74dreed@google.com path.addOval(r); 513e71a887628ff25c806675366b081c70bb10b74dreed@google.com test_rev(canvas, path); 523e71a887628ff25c806675366b081c70bb10b74dreed@google.com 533e71a887628ff25c806675366b081c70bb10b74dreed@google.com SkPaint paint; 543e71a887628ff25c806675366b081c70bb10b74dreed@google.com paint.setTextSize(SkIntToScalar(100)); 553e71a887628ff25c806675366b081c70bb10b74dreed@google.com SkTypeface* hira = SkTypeface::CreateFromName("Hiragino Maru Gothic Pro", SkTypeface::kNormal); 563e71a887628ff25c806675366b081c70bb10b74dreed@google.com SkSafeUnref(paint.setTypeface(hira)); 573e71a887628ff25c806675366b081c70bb10b74dreed@google.com path.reset(); 583e71a887628ff25c806675366b081c70bb10b74dreed@google.com paint.getTextPath("e", 1, 50, 50, &path); 593e71a887628ff25c806675366b081c70bb10b74dreed@google.com canvas->translate(0, 100); 603e71a887628ff25c806675366b081c70bb10b74dreed@google.com test_rev(canvas, path); 613e71a887628ff25c806675366b081c70bb10b74dreed@google.com} 623e71a887628ff25c806675366b081c70bb10b74dreed@google.com 633e71a887628ff25c806675366b081c70bb10b74dreed@google.comnamespace skiagm { 643e71a887628ff25c806675366b081c70bb10b74dreed@google.com 653e71a887628ff25c806675366b081c70bb10b74dreed@google.comclass PathReverseGM : public GM { 663e71a887628ff25c806675366b081c70bb10b74dreed@google.compublic: 673e71a887628ff25c806675366b081c70bb10b74dreed@google.com PathReverseGM() { 683e71a887628ff25c806675366b081c70bb10b74dreed@google.com 693e71a887628ff25c806675366b081c70bb10b74dreed@google.com } 703e71a887628ff25c806675366b081c70bb10b74dreed@google.com 713e71a887628ff25c806675366b081c70bb10b74dreed@google.comprotected: 72a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 73a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kSkipTiled_Flag; 74a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org } 75a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 763e71a887628ff25c806675366b081c70bb10b74dreed@google.com virtual SkString onShortName() { 773e71a887628ff25c806675366b081c70bb10b74dreed@google.com return SkString("path-reverse"); 783e71a887628ff25c806675366b081c70bb10b74dreed@google.com } 793e71a887628ff25c806675366b081c70bb10b74dreed@google.com 803e71a887628ff25c806675366b081c70bb10b74dreed@google.com virtual SkISize onISize() { 81f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(640, 480); 823e71a887628ff25c806675366b081c70bb10b74dreed@google.com } 833e71a887628ff25c806675366b081c70bb10b74dreed@google.com 843e71a887628ff25c806675366b081c70bb10b74dreed@google.com virtual void onDraw(SkCanvas* canvas) { 851313086ef4d901176e569d1f4b6362250ac02cd7caryclark@google.com if (false) test_rev(canvas); // avoid bit rot, suppress warning 863e71a887628ff25c806675366b081c70bb10b74dreed@google.com SkRect r = { 10, 10, 100, 60 }; 87d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 883e71a887628ff25c806675366b081c70bb10b74dreed@google.com SkPath path; 89d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 903e71a887628ff25c806675366b081c70bb10b74dreed@google.com path.addRect(r); test_rev(canvas, path); 91d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 923e71a887628ff25c806675366b081c70bb10b74dreed@google.com canvas->translate(0, 100); 933e71a887628ff25c806675366b081c70bb10b74dreed@google.com path.offset(20, 20); 943e71a887628ff25c806675366b081c70bb10b74dreed@google.com path.addRect(r); test_rev(canvas, path); 95d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 963e71a887628ff25c806675366b081c70bb10b74dreed@google.com canvas->translate(0, 100); 973e71a887628ff25c806675366b081c70bb10b74dreed@google.com path.reset(); 983e71a887628ff25c806675366b081c70bb10b74dreed@google.com path.moveTo(10, 10); path.lineTo(30, 30); 993e71a887628ff25c806675366b081c70bb10b74dreed@google.com path.addOval(r); 1003e71a887628ff25c806675366b081c70bb10b74dreed@google.com r.offset(50, 20); 1013e71a887628ff25c806675366b081c70bb10b74dreed@google.com path.addOval(r); 1023e71a887628ff25c806675366b081c70bb10b74dreed@google.com test_rev(canvas, path); 103d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 1043e71a887628ff25c806675366b081c70bb10b74dreed@google.com SkPaint paint; 1053e71a887628ff25c806675366b081c70bb10b74dreed@google.com paint.setTextSize(SkIntToScalar(100)); 1063e71a887628ff25c806675366b081c70bb10b74dreed@google.com SkTypeface* hira = SkTypeface::CreateFromName("Hiragino Maru Gothic Pro", SkTypeface::kNormal); 1073e71a887628ff25c806675366b081c70bb10b74dreed@google.com SkSafeUnref(paint.setTypeface(hira)); 1083e71a887628ff25c806675366b081c70bb10b74dreed@google.com path.reset(); 1093e71a887628ff25c806675366b081c70bb10b74dreed@google.com paint.getTextPath("e", 1, 50, 50, &path); 1103e71a887628ff25c806675366b081c70bb10b74dreed@google.com canvas->translate(0, 100); 1113e71a887628ff25c806675366b081c70bb10b74dreed@google.com test_rev(canvas, path); 1123e71a887628ff25c806675366b081c70bb10b74dreed@google.com } 1133e71a887628ff25c806675366b081c70bb10b74dreed@google.com 1143e71a887628ff25c806675366b081c70bb10b74dreed@google.comprivate: 1153e71a887628ff25c806675366b081c70bb10b74dreed@google.com typedef GM INHERITED; 1163e71a887628ff25c806675366b081c70bb10b74dreed@google.com}; 1173e71a887628ff25c806675366b081c70bb10b74dreed@google.com 1183e71a887628ff25c806675366b081c70bb10b74dreed@google.com////////////////////////////////////////////////////////////////////////////// 1193e71a887628ff25c806675366b081c70bb10b74dreed@google.com 1203e71a887628ff25c806675366b081c70bb10b74dreed@google.comstatic GM* MyFactory(void*) { return new PathReverseGM; } 1213e71a887628ff25c806675366b081c70bb10b74dreed@google.comstatic GMRegistry reg(MyFactory); 1223e71a887628ff25c806675366b081c70bb10b74dreed@google.com 1233e71a887628ff25c806675366b081c70bb10b74dreed@google.com} 124