1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2006 The Android Open Source Project
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef SkStroke_DEFINED
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define SkStroke_DEFINED
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPath.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPoint.h"
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPaint.h"
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkStrokerPriv.h"
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifdef SK_DEBUG
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotextern bool gDebugStrokerErrorSet;
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotextern SkScalar gDebugStrokerError;
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotextern int gMaxRecursion[];
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/** \class SkStroke
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkStroke is the utility class that constructs paths by stroking
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    geometries (lines, rects, ovals, roundrects, paths). This is
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    invoked when a geometry or text is drawn in a canvas with the
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    kStroke_Mask bit set in the paint.
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot*/
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkStroke {
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkStroke();
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkStroke(const SkPaint&);
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkStroke(const SkPaint&, SkScalar width);   // width overrides paint.getStrokeWidth()
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPaint::Cap    getCap() const { return (SkPaint::Cap)fCap; }
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void        setCap(SkPaint::Cap);
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPaint::Join   getJoin() const { return (SkPaint::Join)fJoin; }
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void        setJoin(SkPaint::Join);
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void    setMiterLimit(SkScalar);
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void    setWidth(SkScalar);
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool    getDoFill() const { return SkToBool(fDoFill); }
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void    setDoFill(bool doFill) { fDoFill = SkToU8(doFill); }
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *  ResScale is the "intended" resolution for the output.
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *      Default is 1.0.
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *      Larger values (res > 1) indicate that the result should be more precise, since it will
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *          be zoomed up, and small errors will be magnified.
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *      Smaller values (0 < res < 1) indicate that the result can be less precise, since it will
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *          be zoomed down, and small errors may be invisible.
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar getResScale() const { return fResScale; }
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setResScale(SkScalar rs) {
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkASSERT(rs > 0 && SkScalarIsFinite(rs));
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fResScale = rs;
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *  Stroke the specified rect, winding it in the specified direction..
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void    strokeRect(const SkRect& rect, SkPath* result,
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                       SkPath::Direction = SkPath::kCW_Direction) const;
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void    strokePath(const SkPath& path, SkPath*) const;
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    ////////////////////////////////////////////////////////////////
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar    fWidth, fMiterLimit;
71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar    fResScale;
72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    uint8_t     fCap, fJoin;
73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkBool8     fDoFill;
74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    friend class SkPaint;
76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif
79