18a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project 38a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 68a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkStroke_DEFINED 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkStroke_DEFINED 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1104fdaa1afed8687a3b15226ddebcb798c94ddac5reed@google.com#include "SkPath.h" 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPoint.h" 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPaint.h" 14feff7d2d7719f52c7ea52db156003e609002bf04caryclark#include "SkStrokerPriv.h" 15feff7d2d7719f52c7ea52db156003e609002bf04caryclark 16a76b7a3b04bc0e937921a1eb38d713c619e60e4ecaryclark#ifdef SK_DEBUG 17feff7d2d7719f52c7ea52db156003e609002bf04caryclarkextern bool gDebugStrokerErrorSet; 18feff7d2d7719f52c7ea52db156003e609002bf04caryclarkextern SkScalar gDebugStrokerError; 19feff7d2d7719f52c7ea52db156003e609002bf04caryclarkextern int gMaxRecursion[]; 20feff7d2d7719f52c7ea52db156003e609002bf04caryclark#endif 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** \class SkStroke 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkStroke is the utility class that constructs paths by stroking 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com geometries (lines, rects, ovals, roundrects, paths). This is 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com invoked when a geometry or text is drawn in a canvas with the 268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kStroke_Mask bit set in the paint. 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com*/ 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkStroke { 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkStroke(); 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkStroke(const SkPaint&); 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkStroke(const SkPaint&, SkScalar width); // width overrides paint.getStrokeWidth() 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPaint::Cap getCap() const { return (SkPaint::Cap)fCap; } 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setCap(SkPaint::Cap); 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPaint::Join getJoin() const { return (SkPaint::Join)fJoin; } 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setJoin(SkPaint::Join); 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setMiterLimit(SkScalar); 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setWidth(SkScalar); 428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool getDoFill() const { return SkToBool(fDoFill); } 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setDoFill(bool doFill) { fDoFill = SkToU8(doFill); } 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4604fdaa1afed8687a3b15226ddebcb798c94ddac5reed@google.com /** 4705d9044de4f1c6e791df66a425638752daac4c6breed * ResScale is the "intended" resolution for the output. 4805d9044de4f1c6e791df66a425638752daac4c6breed * Default is 1.0. 4905d9044de4f1c6e791df66a425638752daac4c6breed * Larger values (res > 1) indicate that the result should be more precise, since it will 5005d9044de4f1c6e791df66a425638752daac4c6breed * be zoomed up, and small errors will be magnified. 5105d9044de4f1c6e791df66a425638752daac4c6breed * Smaller values (0 < res < 1) indicate that the result can be less precise, since it will 5205d9044de4f1c6e791df66a425638752daac4c6breed * be zoomed down, and small errors may be invisible. 5305d9044de4f1c6e791df66a425638752daac4c6breed */ 5405d9044de4f1c6e791df66a425638752daac4c6breed SkScalar getResScale() const { return fResScale; } 5505d9044de4f1c6e791df66a425638752daac4c6breed void setResScale(SkScalar rs) { 5605d9044de4f1c6e791df66a425638752daac4c6breed SkASSERT(rs > 0 && SkScalarIsFinite(rs)); 5705d9044de4f1c6e791df66a425638752daac4c6breed fResScale = rs; 5805d9044de4f1c6e791df66a425638752daac4c6breed } 5905d9044de4f1c6e791df66a425638752daac4c6breed 6005d9044de4f1c6e791df66a425638752daac4c6breed /** 6104fdaa1afed8687a3b15226ddebcb798c94ddac5reed@google.com * Stroke the specified rect, winding it in the specified direction.. 6204fdaa1afed8687a3b15226ddebcb798c94ddac5reed@google.com */ 6304fdaa1afed8687a3b15226ddebcb798c94ddac5reed@google.com void strokeRect(const SkRect& rect, SkPath* result, 6404fdaa1afed8687a3b15226ddebcb798c94ddac5reed@google.com SkPath::Direction = SkPath::kCW_Direction) const; 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void strokePath(const SkPath& path, SkPath*) const; 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com //////////////////////////////////////////////////////////////// 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScalar fWidth, fMiterLimit; 7105d9044de4f1c6e791df66a425638752daac4c6breed SkScalar fResScale; 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint8_t fCap, fJoin; 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkBool8 fDoFill; 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com friend class SkPaint; 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 79