163d73749fbe36491403ea521005fd298dc70a94creed@google.com/* 263d73749fbe36491403ea521005fd298dc70a94creed@google.com * Copyright 2011 Google Inc. 363d73749fbe36491403ea521005fd298dc70a94creed@google.com * 463d73749fbe36491403ea521005fd298dc70a94creed@google.com * Use of this source code is governed by a BSD-style license that can be 563d73749fbe36491403ea521005fd298dc70a94creed@google.com * found in the LICENSE file. 663d73749fbe36491403ea521005fd298dc70a94creed@google.com */ 763d73749fbe36491403ea521005fd298dc70a94creed@google.com 863d73749fbe36491403ea521005fd298dc70a94creed@google.com#include "gm.h" 963d73749fbe36491403ea521005fd298dc70a94creed@google.com#include "SkCanvas.h" 1063d73749fbe36491403ea521005fd298dc70a94creed@google.com#include "SkPath.h" 1163d73749fbe36491403ea521005fd298dc70a94creed@google.com#include "SkTypeface.h" 1263d73749fbe36491403ea521005fd298dc70a94creed@google.com 1363d73749fbe36491403ea521005fd298dc70a94creed@google.comnamespace skiagm { 1463d73749fbe36491403ea521005fd298dc70a94creed@google.com 1563d73749fbe36491403ea521005fd298dc70a94creed@google.comclass StrokeFillGM : public GM { 1663d73749fbe36491403ea521005fd298dc70a94creed@google.compublic: 1763d73749fbe36491403ea521005fd298dc70a94creed@google.com StrokeFillGM() { 1863d73749fbe36491403ea521005fd298dc70a94creed@google.com 1963d73749fbe36491403ea521005fd298dc70a94creed@google.com } 2063d73749fbe36491403ea521005fd298dc70a94creed@google.com 2163d73749fbe36491403ea521005fd298dc70a94creed@google.comprotected: 22a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 23a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kSkipTiled_Flag; 24a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org } 25a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 2663d73749fbe36491403ea521005fd298dc70a94creed@google.com virtual SkString onShortName() { 2763d73749fbe36491403ea521005fd298dc70a94creed@google.com return SkString("stroke-fill"); 2863d73749fbe36491403ea521005fd298dc70a94creed@google.com } 2963d73749fbe36491403ea521005fd298dc70a94creed@google.com 3063d73749fbe36491403ea521005fd298dc70a94creed@google.com virtual SkISize onISize() { 31f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(640, 480); 3263d73749fbe36491403ea521005fd298dc70a94creed@google.com } 3363d73749fbe36491403ea521005fd298dc70a94creed@google.com 34f8aa18c08d97cdc98a85a0422d3415822a73949cbungeman@google.com static void show_bold(SkCanvas* canvas, const void* text, int len, 35f8aa18c08d97cdc98a85a0422d3415822a73949cbungeman@google.com SkScalar x, SkScalar y, const SkPaint& paint) { 36188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com SkPaint p(paint); 37188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com canvas->drawText(text, len, x, y, p); 38188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com p.setFakeBoldText(true); 39188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com canvas->drawText(text, len, x, y + SkIntToScalar(120), p); 40188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com } 41188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com 4263d73749fbe36491403ea521005fd298dc70a94creed@google.com virtual void onDraw(SkCanvas* canvas) { 43188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com SkScalar x = SkIntToScalar(100); 44188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com SkScalar y = SkIntToScalar(88); 45188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com 46d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com SkPaint paint; 47d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com paint.setAntiAlias(true); 48d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com paint.setTextSize(SkIntToScalar(100)); 49b435bd7d497c6743ae495e11b6828eae30521366reed@google.com paint.setStrokeWidth(SkIntToScalar(5)); 50ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 51992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark sk_tool_utils::set_portable_typeface(&paint, "Papyrus"); 52f8aa18c08d97cdc98a85a0422d3415822a73949cbungeman@google.com show_bold(canvas, "Hello", 5, x, y, paint); 53188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com 54992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark sk_tool_utils::set_portable_typeface(&paint, "Hiragino Maru Gothic Pro"); 55f8aa18c08d97cdc98a85a0422d3415822a73949cbungeman@google.com const unsigned char hyphen[] = { 0xE3, 0x83, 0xBC }; 56f8aa18c08d97cdc98a85a0422d3415822a73949cbungeman@google.com show_bold(canvas, hyphen, SK_ARRAY_COUNT(hyphen), x + SkIntToScalar(300), y, paint); 57188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com 58188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com paint.setStyle(SkPaint::kStrokeAndFill_Style); 59188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com 60d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com SkPath path; 61d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com path.setFillType(SkPath::kWinding_FillType); 62b435bd7d497c6743ae495e11b6828eae30521366reed@google.com path.addCircle(x, y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCW_Direction); 63b435bd7d497c6743ae495e11b6828eae30521366reed@google.com path.addCircle(x, y + SkIntToScalar(200), SkIntToScalar(40), SkPath::kCCW_Direction); 64d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com canvas->drawPath(path, paint); 65ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 66d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com SkPath path2; 67d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com path2.setFillType(SkPath::kWinding_FillType); 68b435bd7d497c6743ae495e11b6828eae30521366reed@google.com path2.addCircle(x + SkIntToScalar(120), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCCW_Direction); 69b435bd7d497c6743ae495e11b6828eae30521366reed@google.com path2.addCircle(x + SkIntToScalar(120), y + SkIntToScalar(200), SkIntToScalar(40), SkPath::kCW_Direction); 70d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com canvas->drawPath(path2, paint); 71ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 72d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com path2.reset(); 73b435bd7d497c6743ae495e11b6828eae30521366reed@google.com path2.addCircle(x + SkIntToScalar(240), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCCW_Direction); 74d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com canvas->drawPath(path2, paint); 75d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com SkASSERT(path2.cheapIsDirection(SkPath::kCCW_Direction)); 76ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 77d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com path2.reset(); 78d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com SkASSERT(!path2.cheapComputeDirection(NULL)); 79b435bd7d497c6743ae495e11b6828eae30521366reed@google.com path2.addCircle(x + SkIntToScalar(360), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCW_Direction); 80d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com SkASSERT(path2.cheapIsDirection(SkPath::kCW_Direction)); 81d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com canvas->drawPath(path2, paint); 8263d73749fbe36491403ea521005fd298dc70a94creed@google.com } 8363d73749fbe36491403ea521005fd298dc70a94creed@google.com 8463d73749fbe36491403ea521005fd298dc70a94creed@google.comprivate: 8563d73749fbe36491403ea521005fd298dc70a94creed@google.com typedef GM INHERITED; 8663d73749fbe36491403ea521005fd298dc70a94creed@google.com}; 8763d73749fbe36491403ea521005fd298dc70a94creed@google.com 8863d73749fbe36491403ea521005fd298dc70a94creed@google.com////////////////////////////////////////////////////////////////////////////// 8963d73749fbe36491403ea521005fd298dc70a94creed@google.com 9063d73749fbe36491403ea521005fd298dc70a94creed@google.comstatic GM* MyFactory(void*) { return new StrokeFillGM; } 9163d73749fbe36491403ea521005fd298dc70a94creed@google.comstatic GMRegistry reg(MyFactory); 9263d73749fbe36491403ea521005fd298dc70a94creed@google.com 9363d73749fbe36491403ea521005fd298dc70a94creed@google.com} 94