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 SkPaint_DEFINED
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define SkPaint_DEFINED
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkBlendMode.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkColor.h"
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkFilterQuality.h"
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkMatrix.h"
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkRefCnt.h"
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkAutoDescriptor;
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkAutoGlyphCache;
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkColorFilter;
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkData;
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkDescriptor;
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkDrawLooper;
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkReadBuffer;
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkWriteBuffer;
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkGlyph;
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct SkRect;
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkGlyphCache;
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkImageFilter;
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkMaskFilter;
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkPath;
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkPathEffect;
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct SkPoint;
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkShader;
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkSurfaceProps;
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkTextBlob;
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkTypeface;
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/** \class SkPaint
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPaint controls options applied when drawing and measuring. SkPaint collects all
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    options outside of the SkCanvas clip and SkCanvas matrix.
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    Various options apply to text, strokes and fills, and images.
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    Some options may not be implemented on all platforms; in these cases, setting
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    the option has no effect. Some options are conveniences that duplicate SkCanvas
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    functionality; for instance, text size is identical to matrix scale.
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPaint options are rarely exclusive; each option modifies a stage of the drawing
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    pipeline and multiple pipeline stages may be affected by a single SkPaint.
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPaint collects effects and filters that describe single-pass and multiple-pass
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    algorithms that alter the drawing geometry, color, and transparency. For instance,
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPaint does not directly implement dashing or blur, but contains the objects that do so.
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    The objects contained by SkPaint are opaque, and cannot be edited outside of the SkPaint
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    to affect it. The implementation is free to defer computations associated with the
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPaint, or ignore them altogether. For instance, some GPU implementations draw all
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPath geometries with anti-aliasing, regardless of how SkPaint::kAntiAlias_Flag
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    is set in SkPaint.
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPaint describes a single color, a single font, a single image quality, and so on.
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    Multiple colors are drawn either by using multiple paints or with objects like
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkShader attached to SkPaint.
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot*/
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SK_API SkPaint {
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Constructs SkPaint with default values.
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  default initialized SkPaint
71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPaint();
73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Makes a shallow copy of SkPaint. SkTypeface, SkPathEffect, SkShader,
75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkMaskFilter, SkColorFilter, SkDrawLooper, and SkImageFilter are shared
76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        between the original paint and the copy. Objects containing SkRefCnt increment
77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        their references by one.
78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The referenced objects SkPathEffect, SkShader, SkMaskFilter, SkColorFilter,
80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkDrawLooper, and SkImageFilter cannot be modified after they are created.
81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        This prevents objects with SkRefCnt from being modified once SkPaint refers to them.
82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param paint  original to copy
84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return       shallow copy of paint
85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPaint(const SkPaint& paint);
87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Implements a move constructor to avoid increasing the reference counts
89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        of objects referenced by the paint.
90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        After the call, paint is undefined, and can be safely destructed.
92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param paint  original to move
94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return       content of paint
95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPaint(SkPaint&& paint);
97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Decreases SkPaint SkRefCnt of owned objects: SkTypeface, SkPathEffect, SkShader,
99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkMaskFilter, SkColorFilter, SkDrawLooper, and SkImageFilter. If the
100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        objects containing SkRefCnt go to zero, they are deleted.
101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    ~SkPaint();
103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Makes a shallow copy of SkPaint. SkTypeface, SkPathEffect, SkShader,
105fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkMaskFilter, SkColorFilter, SkDrawLooper, and SkImageFilter are shared
106fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        between the original paint and the copy. Objects containing SkRefCnt in the
107fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        prior destination are decreased by one, and the referenced objects are deleted if the
108fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        resulting count is zero. Objects containing SkRefCnt in the parameter paint
109fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        are increased by one. paint is unmodified.
110fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
111fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param paint  original to copy
112fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return       content of paint
113fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
114fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPaint& operator=(const SkPaint& paint);
115fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
116fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Moves the paint to avoid increasing the reference counts
117fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        of objects referenced by the paint parameter. Objects containing SkRefCnt in the
118fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        prior destination are decreased by one; those objects are deleted if the resulting count
119fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        is zero.
120fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
121fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        After the call, paint is undefined, and can be safely destructed.
122fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
123fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param paint  original to move
124fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return       content of paint
125fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
126fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPaint& operator=(SkPaint&& paint);
127fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
128fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Compares a and b, and returns true if a and b are equivalent. May return false
129fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        if SkTypeface, SkPathEffect, SkShader, SkMaskFilter, SkColorFilter,
130fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkDrawLooper, or SkImageFilter have identical contents but different pointers.
131fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
132fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param a  SkPaint to compare
133fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param b  SkPaint to compare
134fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return   true if SkPaint pair are equivalent
135fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
136fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_API friend bool operator==(const SkPaint& a, const SkPaint& b);
137fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
138fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Compares a and b, and returns true if a and b are not equivalent. May return true
139fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        if SkTypeface, SkPathEffect, SkShader, SkMaskFilter, SkColorFilter,
140fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkDrawLooper, or SkImageFilter have identical contents but different pointers.
141fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
142fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param a  SkPaint to compare
143fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param b  SkPaint to compare
144fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return   true if SkPaint pair are not equivalent
145fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
146fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    friend bool operator!=(const SkPaint& a, const SkPaint& b) {
147fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return !(a == b);
148fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
149fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
150fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns a hash generated from SkPaint values and pointers.
151fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Identical hashes guarantee that the paints are
152fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        equivalent, but differing hashes do not guarantee that the paints have differing
153fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        contents.
154fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
155fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        If operator==(const SkPaint& a, const SkPaint& b) returns true for two paints,
156fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        their hashes are also equal.
157fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
158fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The hash returned is platform and implementation specific.
159fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
160fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  a shallow hash
161fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
162fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    uint32_t getHash() const;
163fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
164fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Serializes SkPaint into a buffer. A companion unflatten() call
165fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        can reconstitute the paint at a later time.
166fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
167fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param buffer  SkWriteBuffer receiving the flattened SkPaint data
168fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
169fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void flatten(SkWriteBuffer& buffer) const;
170fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
171fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Populates SkPaint, typically from a serialized stream, created by calling
172fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        flatten() at an earlier time.
173fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
174fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkReadBuffer class is not public, so unflatten() cannot be meaningfully called
175fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        by the client.
176fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
177fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param buffer  serialized data describing SkPaint content
178fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return false if the buffer contained invalid data to initialize the paint, in which case
179fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                      the paint will be reset().
180fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
181fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool unflatten(SkReadBuffer& buffer);
182fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
183fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets all SkPaint contents to their initial values. This is equivalent to replacing
184fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPaint with the result of SkPaint().
185fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
186fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void reset();
187fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
188fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** \enum SkPaint::Hinting
189fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Hinting adjusts the glyph outlines so that the shape provides a uniform
190fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        look at a given point size on font engines that support it. Hinting may have a
191fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        muted effect or no effect at all depending on the platform.
192fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
193fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The four levels roughly control corresponding features on platforms that use FreeType
194fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        as the font engine.
195fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
196fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    enum Hinting {
197fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Leaves glyph outlines unchanged from their native representation.
198fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
199fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
200fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            outline being loaded should not be fitted to the pixel grid but simply scaled
201fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            to 26.6 fractional pixels.
202fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
203fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kNo_Hinting     = 0,
204fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
205fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Modifies glyph outlines minimally to improve constrast.
206fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            With FreeType, this is equivalent in spirit to the
207fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
208fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            lighter hinting algorithm for non-monochrome modes.
209fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Generated glyphs may be fuzzy but better resemble their original shape.
210fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
211fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kSlight_Hinting = 1,
212fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
213fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Modifies glyph outlines to improve constrast. This is the default.
214fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
215fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            choosing the default hinting algorithm, which is optimized for standard
216fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            gray-level rendering.
217fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
218fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kNormal_Hinting = 2,
219fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
220fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Modifies glyph outlines for maxiumum constrast. With FreeType, this selects
221fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LCD_V if kLCDRenderText_Flag is set.
222fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
223fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
224fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.
225fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
226fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kFull_Hinting   = 3,
227fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
228fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
229fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns level of glyph outline adjustment.
230fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
231fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  one of: kNo_Hinting, kSlight_Hinting, kNormal_Hinting, kFull_Hinting
232fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
233fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    Hinting getHinting() const {
234fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return static_cast<Hinting>(fBitfields.fHinting);
235fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
236fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
237fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets level of glyph outline adjustment.
238fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Does not check for valid values of hintingLevel.
239fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
240fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param hintingLevel  one of: kNo_Hinting, kSlight_Hinting, kNormal_Hinting, kFull_Hinting
241fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
242fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setHinting(Hinting hintingLevel);
243fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
244fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** \enum SkPaint::Flags
245fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The bit values stored in Flags.
246fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The default value for Flags, normally zero, can be changed at compile time
247fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        with a custom definition of SkPaintDefaults_Flags.
248fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        All flags can be read and written explicitly; Flags allows manipulating
249fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        multiple settings at once.
250fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
251fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    enum Flags {
252fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kAntiAlias_Flag          = 0x01,   //!< mask for setting anti-alias
253fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kDither_Flag             = 0x04,   //!< mask for setting dither
254fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kFakeBoldText_Flag       = 0x20,   //!< mask for setting fake bold
255fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kLinearText_Flag         = 0x40,   //!< mask for setting linear text
256fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kSubpixelText_Flag       = 0x80,   //!< mask for setting subpixel text
257fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kDevKernText_Flag        = 0x100,  //!< mask for setting full hinting spacing
258fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kLCDRenderText_Flag      = 0x200,  //!< mask for setting lcd text
259fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kEmbeddedBitmapText_Flag = 0x400,  //!< mask for setting font embedded bitmaps
260fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kAutoHinting_Flag        = 0x800,  //!< mask for setting auto-hinting
261fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kVerticalText_Flag       = 0x1000, //!< mask for setting vertical text
262fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
263fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Hack for GDI -- do not use if you can help it */
264fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kGenA8FromLCD_Flag       = 0x2000,
265fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
266fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** mask of all Flags, including private flags and flags reserved for future use */
267fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kAllFlags                = 0xFFFF,
268fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
269fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
270fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
271fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    enum ReserveFlags {
272fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kUnderlineText_ReserveFlag  = 0x08, //!< mask for underline text
273fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kStrikeThruText_ReserveFlag = 0x10, //!< mask for strike-thru text
274fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
275fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    #endif
276fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
277fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns paint settings described by SkPaint::Flags. Each setting uses one
278fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        bit, and can be tested with SkPaint::Flags members.
279fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
280fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  zero, one, or more bits described by SkPaint::Flags
281fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
282fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    uint32_t getFlags() const { return fBitfields.fFlags; }
283fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
284fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Replaces SkPaint::Flags with flags, the union of the SkPaint::Flags members.
285fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        All SkPaint::Flags members may be cleared, or one or more may be set.
286fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
287fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param flags  union of SkPaint::Flags for SkPaint
288fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
289fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setFlags(uint32_t flags);
290fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
291fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** If true, pixels on the active edges of SkPath may be drawn with partial transparency.
292fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
293fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Equivalent to getFlags() masked with kAntiAlias_Flag.
294fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
295fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  kAntiAlias_Flag state
296fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
297fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool isAntiAlias() const {
298fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return SkToBool(this->getFlags() & kAntiAlias_Flag);
299fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
300fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
301fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Requests, but does not require, that SkPath edge pixels draw opaque or with
302fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        partial transparency.
303fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
304fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Sets kAntiAlias_Flag if aa is true.
305fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Clears kAntiAlias_Flag if aa is false.
306fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
307fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param aa  setting for kAntiAlias_Flag
308fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
309fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setAntiAlias(bool aa);
310fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
311fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** If true, color error may be distributed to smooth color transition.
312fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
313fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Equivalent to getFlags() masked with kDither_Flag.
314fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
315fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  kDither_Flag state
316fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
317fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool isDither() const {
318fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return SkToBool(this->getFlags() & kDither_Flag);
319fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
320fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
321fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Requests, but does not require, to distribute color error.
322fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
323fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Sets kDither_Flag if dither is true.
324fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Clears kDither_Flag if dither is false.
325fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
326fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param dither  setting for kDither_Flag
327fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
328fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setDither(bool dither);
329fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
330fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** If true, text is converted to SkPath before drawing and measuring.
331fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
332fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Equivalent to getFlags() masked with kLinearText_Flag.
333fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
334fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  kLinearText_Flag state
335fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
336fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool isLinearText() const {
337fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return SkToBool(this->getFlags() & kLinearText_Flag);
338fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
339fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
340fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** If true, text is converted to SkPath before drawing and measuring.
341fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        By default, kLinearText_Flag is clear.
342fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
343fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Sets kLinearText_Flag if linearText is true.
344fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Clears kLinearText_Flag if linearText is false.
345fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
346fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param linearText  setting for kLinearText_Flag
347fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
348fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setLinearText(bool linearText);
349fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
350fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** If true, glyphs at different sub-pixel positions may differ on pixel edge coverage.
351fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
352fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Equivalent to getFlags() masked with kSubpixelText_Flag.
353fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
354fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  kSubpixelText_Flag state
355fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
356fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool isSubpixelText() const {
357fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return SkToBool(this->getFlags() & kSubpixelText_Flag);
358fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
359fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
360fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Requests, but does not require, that glyphs respect sub-pixel positioning.
361fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
362fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Sets kSubpixelText_Flag if subpixelText is true.
363fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Clears kSubpixelText_Flag if subpixelText is false.
364fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
365fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param subpixelText  setting for kSubpixelText_Flag
366fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
367fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setSubpixelText(bool subpixelText);
368fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
369fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** If true, glyphs may use LCD striping to improve glyph edges.
370fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
371fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns true if SkPaint::Flags kLCDRenderText_Flag is set.
372fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
373fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  kLCDRenderText_Flag state
374fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
375fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool isLCDRenderText() const {
376fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return SkToBool(this->getFlags() & kLCDRenderText_Flag);
377fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
378fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
379fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Requests, but does not require, that glyphs use LCD striping for glyph edges.
380fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
381fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Sets kLCDRenderText_Flag if lcdText is true.
382fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Clears kLCDRenderText_Flag if lcdText is false.
383fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
384fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param lcdText  setting for kLCDRenderText_Flag
385fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
386fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setLCDRenderText(bool lcdText);
387fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
388fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** If true, font engine may return glyphs from font bitmaps instead of from outlines.
389fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
390fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Equivalent to getFlags() masked with kEmbeddedBitmapText_Flag.
391fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
392fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  kEmbeddedBitmapText_Flag state
393fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
394fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool isEmbeddedBitmapText() const {
395fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return SkToBool(this->getFlags() & kEmbeddedBitmapText_Flag);
396fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
397fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
398fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Requests, but does not require, to use bitmaps in fonts instead of outlines.
399fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
400fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Sets kEmbeddedBitmapText_Flag if useEmbeddedBitmapText is true.
401fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Clears kEmbeddedBitmapText_Flag if useEmbeddedBitmapText is false.
402fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
403fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param useEmbeddedBitmapText  setting for kEmbeddedBitmapText_Flag
404fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
405fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setEmbeddedBitmapText(bool useEmbeddedBitmapText);
406fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
407fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** If true, and if SkPaint::Hinting is set to kNormal_Hinting or kFull_Hinting, and if
408fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        platform uses FreeType as the font manager, instruct the font manager to always hint
409fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        glyphs.
410fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
411fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Equivalent to getFlags() masked with kAutoHinting_Flag.
412fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
413fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  kAutoHinting_Flag state
414fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
415fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool isAutohinted() const {
416fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return SkToBool(this->getFlags() & kAutoHinting_Flag);
417fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
418fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
419fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** If SkPaint::Hinting is set to kNormal_Hinting or kFull_Hinting and useAutohinter is set,
420fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        instruct the font manager to always hint glyphs.
421fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        auto-hinting has no effect if SkPaint::Hinting is set to kNo_Hinting or
422fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kSlight_Hinting.
423fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
424fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Only affects platforms that use FreeType as the font manager.
425fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
426fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Sets kAutoHinting_Flag if useAutohinter is true.
427fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Clears kAutoHinting_Flag if useAutohinter is false.
428fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
429fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param useAutohinter  setting for kAutoHinting_Flag
430fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
431fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setAutohinted(bool useAutohinter);
432fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
433fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** If true, glyphs are drawn top to bottom instead of left to right.
434fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
435fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Equivalent to getFlags() masked with kVerticalText_Flag.
436fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
437fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  kVerticalText_Flag state
438fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
439fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool isVerticalText() const {
440fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return SkToBool(this->getFlags() & kVerticalText_Flag);
441fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
442fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
443fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** If true, text advance positions the next glyph below the previous glyph instead of to the
444fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        right of previous glyph.
445fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
446fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Sets kVerticalText_Flag if vertical is true.
447fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Clears kVerticalText_Flag if vertical is false.
448fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
449fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param verticalText  setting for kVerticalText_Flag
450fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
451fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setVerticalText(bool verticalText);
452fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
453fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** If true, approximate bold by increasing the stroke width when creating glyph bitmaps
454fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        from outlines.
455fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
456fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Equivalent to getFlags() masked with kFakeBoldText_Flag.
457fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
458fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  kFakeBoldText_Flag state
459fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
460fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool isFakeBoldText() const {
461fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return SkToBool(this->getFlags() & kFakeBoldText_Flag);
462fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
463fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
464fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Use increased stroke width when creating glyph bitmaps to approximate a bold typeface.
465fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
466fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Sets kFakeBoldText_Flag if fakeBoldText is true.
467fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Clears kFakeBoldText_Flag if fakeBoldText is false.
468fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
469fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param fakeBoldText  setting for kFakeBoldText_Flag
470fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
471fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setFakeBoldText(bool fakeBoldText);
472fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
473fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns if character spacing may be adjusted by the hinting difference.
474fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
475fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Equivalent to getFlags() masked with kDevKernText_Flag.
476fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
477fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  kDevKernText_Flag state
478fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
479fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool isDevKernText() const {
480fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return SkToBool(this->getFlags() & kDevKernText_Flag);
481fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
482fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
483fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Requests, but does not require, to use hinting to adjust glyph spacing.
484fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
485fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Sets kDevKernText_Flag if devKernText is true.
486fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Clears kDevKernText_Flag if devKernText is false.
487fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
488fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param devKernText  setting for devKernText
489fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
490fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setDevKernText(bool devKernText);
491fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
492fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns SkFilterQuality, the image filtering level. A lower setting
493fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        draws faster; a higher setting looks better when the image is scaled.
494fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
495fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  one of: kNone_SkFilterQuality, kLow_SkFilterQuality,
496fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                 kMedium_SkFilterQuality, kHigh_SkFilterQuality
497fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
498fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkFilterQuality getFilterQuality() const {
499fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return (SkFilterQuality)fBitfields.fFilterQuality;
500fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
501fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
502fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets SkFilterQuality, the image filtering level. A lower setting
503fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        draws faster; a higher setting looks better when the image is scaled.
504fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Does not check to see if quality is valid.
505fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
506fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param quality  one of: kNone_SkFilterQuality, kLow_SkFilterQuality,
507fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                        kMedium_SkFilterQuality, kHigh_SkFilterQuality
508fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
509fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setFilterQuality(SkFilterQuality quality);
510fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
511fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** \enum SkPaint::Style
512fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Set Style to fill, stroke, or both fill and stroke geometry.
513fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The stroke and fill
514fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        share all paint attributes; for instance, they are drawn with the same color.
515fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
516fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Use kStrokeAndFill_Style to avoid hitting the same pixels twice with a stroke draw and
517fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        a fill draw.
518fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
519fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    enum Style {
520fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Set to fill geometry.
521fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Applies to SkRect, SkRegion, SkRRect, circles, ovals, SkPath, and text.
522fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SkBitmap, SkImage, patches, SkRegion, sprites, and vertices are painted as if
523fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            kFill_Style is set, and ignore the set Style.
524fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            The FillType specifies additional rules to fill the area outside the path edge,
525fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            and to create an unfilled hole inside the shape.
526fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Style is set to kFill_Style by default.
527fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
528fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kFill_Style,
529fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
530fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Set to stroke geometry.
531fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Applies to SkRect, SkRegion, SkRRect, arcs, circles, ovals, SkPath, and text.
532fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Arcs, lines, and points, are always drawn as if kStroke_Style is set,
533fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            and ignore the set Style.
534fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            The stroke construction is unaffected by the FillType.
535fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
536fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kStroke_Style,
537fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
538fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Set to stroke and fill geometry.
539fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Applies to SkRect, SkRegion, SkRRect, circles, ovals, SkPath, and text.
540fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SkPath is treated as if it is set to SkPath::kWinding_FillType,
541fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            and the set FillType is ignored.
542fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
543fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kStrokeAndFill_Style,
544fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
545fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
546fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    enum {
547fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** The number of different Style values defined.
548fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            May be used to verify that Style is a legal value.
549fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
550fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kStyleCount = kStrokeAndFill_Style + 1,
551fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
552fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
553fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Whether the geometry is filled, stroked, or filled and stroked.
554fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
555fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  one of:kFill_Style, kStroke_Style, kStrokeAndFill_Style
556fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
557fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    Style getStyle() const { return (Style)fBitfields.fStyle; }
558fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
559fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets whether the geometry is filled, stroked, or filled and stroked.
560fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Has no effect if style is not a legal SkPaint::Style value.
561fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
562fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param style  one of: kFill_Style, kStroke_Style, kStrokeAndFill_Style
563fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
564fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setStyle(Style style);
565fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
566fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Retrieves alpha and RGB, unpremultiplied, packed into 32 bits.
567fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Use helpers SkColorGetA(), SkColorGetR(), SkColorGetG(), and SkColorGetB() to extract
568fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        a color component.
569fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
570fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  unpremultiplied ARGB
571fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
572fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkColor getColor() const { return fColor; }
573fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
574fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets alpha and RGB used when stroking and filling. The color is a 32-bit value,
575fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        unpremultiplied, packing 8-bit components for alpha, red, blue, and green.
576fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
577fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param color  unpremultiplied ARGB
578fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
579fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setColor(SkColor color);
580fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
581fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Retrieves alpha from the color used when stroking and filling.
582fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
583fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  alpha ranging from zero, fully transparent, to 255, fully opaque
584fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
585fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    uint8_t getAlpha() const { return SkToU8(SkColorGetA(fColor)); }
586fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
587fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Replaces alpha, leaving RGB
588fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        unchanged. An out of range value triggers an assert in the debug
589fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        build. a is a value from zero to 255.
590fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        a set to zero makes color fully transparent; a set to 255 makes color
591fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fully opaque.
592fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
593fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param a  alpha component of color
594fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
595fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setAlpha(U8CPU a);
596fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
597fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets color used when drawing solid fills. The color components range from 0 to 255.
598fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The color is unpremultiplied; alpha sets the transparency independent of RGB.
599fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
600fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param a  amount of color alpha, from fully transparent (0) to fully opaque (255)
601fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param r  amount of color rgb red, from no red (0) to full red (255)
602fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param g  amount of color rgb green, from no green (0) to full green (255)
603fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param b  amount of color rgb blue, from no blue (0) to full blue (255)
604fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
605fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b);
606fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
607fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns the thickness of the pen used by SkPaint to
608fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        outline the shape.
609fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
610fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  zero for hairline, greater than zero for pen thickness
611fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
612fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar getStrokeWidth() const { return fWidth; }
613fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
614fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets the thickness of the pen used by the paint to
615fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        outline the shape.
616fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Has no effect if width is less than zero.
617fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
618fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param width  zero thickness for hairline; greater than zero for pen thickness
619fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
620fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setStrokeWidth(SkScalar width);
621fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
622fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** The limit at which a sharp corner is drawn beveled.
623fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
624fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  zero and greater miter limit
625fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
626fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar getStrokeMiter() const { return fMiterLimit; }
627fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
628fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** The limit at which a sharp corner is drawn beveled.
629fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Valid values are zero and greater.
630fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Has no effect if miter is less than zero.
631fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
632fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param miter  zero and greater miter limit
633fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
634fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setStrokeMiter(SkScalar miter);
635fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
636fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** \enum SkPaint::Cap
637fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Cap draws at the beginning and end of an open path contour.
638fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
639fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    enum Cap {
640fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kButt_Cap,                  //!< Does not extend the stroke past the beginning or the end.
641fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
642fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Adds a circle with a diameter equal to stroke width at the beginning
643fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            and end.
644fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
645fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kRound_Cap,
646fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
647fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Adds a square with sides equal to stroke width at the beginning
648fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            and end. The square sides are parallel to the initial and final direction
649fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            of the stroke.
650fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
651fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kSquare_Cap,
652fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kLast_Cap    = kSquare_Cap, //!< Equivalent to the largest value for Cap.
653fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
654fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Equivalent to kButt_Cap.
655fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Cap is set to kButt_Cap by default.
656fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
657fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kDefault_Cap = kButt_Cap,
658fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
659fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
660fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    static constexpr int kCapCount = kLast_Cap + 1;
661fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
662fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** \enum SkPaint::Join
663fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Join specifies how corners are drawn when a shape is stroked. Join
664fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        affects the four corners of a stroked rectangle, and the connected segments in a
665fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        stroked path.
666fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
667fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Choose miter join to draw sharp corners. Choose round join to draw a circle with a
668fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        radius equal to the stroke width on top of the corner. Choose bevel join to minimally
669fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        connect the thick strokes.
670fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
671fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The fill path constructed to describe the stroked path respects the join setting but may
672fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        not contain the actual join. For instance, a fill path constructed with round joins does
673fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        not necessarily include circles at each connected segment.
674fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
675fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    enum Join {
676fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Extends the outside corner to the extent allowed by miter limit.
677fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            If the extension exceeds miter limit, kBevel_Join is used instead.
678fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
679fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kMiter_Join,
680fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
681fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Adds a circle with a diameter of stroke width at the sharp corner. */
682fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kRound_Join,
683fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kBevel_Join,                 //!< Connects the outside edges of the sharp corner.
684fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kLast_Join    = kBevel_Join, //!< Equivalent to the largest value for Join.
685fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
686fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Equivalent to kMiter_Join.
687fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Join is set to kMiter_Join by default.
688fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
689fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kDefault_Join = kMiter_Join,
690fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
691fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
692fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    static constexpr int kJoinCount = kLast_Join + 1;
693fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
694fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** The geometry drawn at the beginning and end of strokes.
695fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
696fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  one of: kButt_Cap, kRound_Cap, kSquare_Cap
697fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
698fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    Cap getStrokeCap() const { return (Cap)fBitfields.fCapType; }
699fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
700fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** The geometry drawn at the beginning and end of strokes.
701fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
702fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param cap  one of: kButt_Cap, kRound_Cap, kSquare_Cap;
703fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                    has no effect if cap is not valid
704fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
705fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setStrokeCap(Cap cap);
706fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
707fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** The geometry drawn at the corners of strokes.
708fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
709fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  one of: kMiter_Join, kRound_Join, kBevel_Join
710fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
711fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    Join getStrokeJoin() const { return (Join)fBitfields.fJoinType; }
712fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
713fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** The geometry drawn at the corners of strokes.
714fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
715fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param join  one of: kMiter_Join, kRound_Join, kBevel_Join;
716fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                     otherwise, has no effect
717fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
718fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setStrokeJoin(Join join);
719fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
720fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** The filled equivalent of the stroked path.
721fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
722fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param src       SkPath read to create a filled version
723fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param dst       resulting SkPath; may be the same as src, but may not be nullptr
724fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param cullRect  optional limit passed to SkPathEffect
725fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param resScale  if > 1, increase precision, else if (0 < res < 1) reduce precision
726fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                         to favor speed and size
727fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return          true if the path represents style fill, or false if it represents hairline
728fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
729fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect,
730fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                     SkScalar resScale = 1) const;
731fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
732fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** The filled equivalent of the stroked path.
733fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
734fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Replaces dst with the src path modified by SkPathEffect and style stroke.
735fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPathEffect, if any, is not culled. stroke width is created with default precision.
736fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
737fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param src  SkPath read to create a filled version
738fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param dst  resulting SkPath dst may be the same as src, but may not be nullptr
739fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return     true if the path represents style fill, or false if it represents hairline
740fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
741fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool getFillPath(const SkPath& src, SkPath* dst) const {
742fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return this->getFillPath(src, dst, nullptr, 1);
743fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
744fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
745fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Optional colors used when filling a path, such as a gradient.
746fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
747fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Does not alter SkShader SkRefCnt.
748fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
749fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  SkShader if previously set, nullptr otherwise
750fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
751fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkShader* getShader() const { return fShader.get(); }
752fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
753fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Optional colors used when filling a path, such as a gradient.
754fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
755fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Increases SkShader SkRefCnt by one.
756fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
757fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  SkShader if previously set, nullptr otherwise
758fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
759fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkShader> refShader() const;
760fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
761fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Optional colors used when filling a path, such as a gradient.
762fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
763fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Sets SkShader to shader, decreasing SkRefCnt of the previous SkShader.
764fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Increments shader SkRefCnt by one.
765fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
766fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param shader  how geometry is filled with color; if nullptr, color is used instead
767fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
768fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setShader(sk_sp<SkShader> shader);
769fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
770fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns SkColorFilter if set, or nullptr.
771fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Does not alter SkColorFilter SkRefCnt.
772fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
773fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  SkColorFilter if previously set, nullptr otherwise
774fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
775fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkColorFilter* getColorFilter() const { return fColorFilter.get(); }
776fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
777fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns SkColorFilter if set, or nullptr.
778fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Increases SkColorFilter SkRefCnt by one.
779fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
780fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  SkColorFilter if set, or nullptr
781fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
782fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkColorFilter> refColorFilter() const;
783fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
784fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets SkColorFilter to filter, decreasing SkRefCnt of the previous
785fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkColorFilter. Pass nullptr to clear SkColorFilter.
786fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
787fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Increments filter SkRefCnt by one.
788fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
789fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param colorFilter  SkColorFilter to apply to subsequent draw
790fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
791fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setColorFilter(sk_sp<SkColorFilter> colorFilter);
792fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
793fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns SkBlendMode.
794fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        By default, returns SkBlendMode::kSrcOver.
795fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
796fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  mode used to combine source color with destination color
797fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
798fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkBlendMode getBlendMode() const { return (SkBlendMode)fBlendMode; }
799fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
800fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns true if SkBlendMode is SkBlendMode::kSrcOver, the default.
801fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
802fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  true if SkBlendMode is SkBlendMode::kSrcOver
803fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
804fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool isSrcOver() const { return (SkBlendMode)fBlendMode == SkBlendMode::kSrcOver; }
805fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
806fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets SkBlendMode to mode.
807fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Does not check for valid input.
808fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
809fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param mode  SkBlendMode used to combine source color and destination
810fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
811fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setBlendMode(SkBlendMode mode) { fBlendMode = (unsigned)mode; }
812fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
813fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns SkPathEffect if set, or nullptr.
814fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Does not alter SkPathEffect SkRefCnt.
815fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
816fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  SkPathEffect if previously set, nullptr otherwise
817fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
818fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPathEffect* getPathEffect() const { return fPathEffect.get(); }
819fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
820fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns SkPathEffect if set, or nullptr.
821fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Increases SkPathEffect SkRefCnt by one.
822fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
823fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  SkPathEffect if previously set, nullptr otherwise
824fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
825fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkPathEffect> refPathEffect() const;
826fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
827fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets SkPathEffect to pathEffect, decreasing SkRefCnt of the previous
828fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPathEffect. Pass nullptr to leave the path geometry unaltered.
829fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
830fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Increments pathEffect SkRefCnt by one.
831fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
832fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param pathEffect  replace SkPath with a modification when drawn
833fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
834fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setPathEffect(sk_sp<SkPathEffect> pathEffect);
835fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
836fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns SkMaskFilter if set, or nullptr.
837fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Does not alter SkMaskFilter SkRefCnt.
838fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
839fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  SkMaskFilter if previously set, nullptr otherwise
840fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
841fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkMaskFilter* getMaskFilter() const { return fMaskFilter.get(); }
842fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
843fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns SkMaskFilter if set, or nullptr.
844fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
845fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Increases SkMaskFilter SkRefCnt by one.
846fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
847fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  SkMaskFilter if previously set, nullptr otherwise
848fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
849fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkMaskFilter> refMaskFilter() const;
850fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
851fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets SkMaskFilter to maskFilter, decreasing SkRefCnt of the previous
852fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkMaskFilter. Pass nullptr to clear SkMaskFilter and leave SkMaskFilter effect on
853fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        mask alpha unaltered.
854fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
855fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param maskFilter  modifies clipping mask generated from drawn geometry
856fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
857fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setMaskFilter(sk_sp<SkMaskFilter> maskFilter);
858fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
859fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns SkTypeface if set, or nullptr.
860fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Increments SkTypeface SkRefCnt by one.
861fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
862fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  SkTypeface if previously set, nullptr otherwise
863fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
864fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkTypeface* getTypeface() const { return fTypeface.get(); }
865fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
866fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Increases SkTypeface SkRefCnt by one.
867fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
868fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  SkTypeface if previously set, nullptr otherwise
869fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
870fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkTypeface> refTypeface() const;
871fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
872fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets SkTypeface to typeface, decreasing SkRefCnt of the previous SkTypeface.
873fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Pass nullptr to clear SkTypeface and use the default typeface. Increments
874fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        typeface SkRefCnt by one.
875fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
876fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param typeface  font and style used to draw text
877fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
878fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setTypeface(sk_sp<SkTypeface> typeface);
879fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
880fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns SkImageFilter if set, or nullptr.
881fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Does not alter SkImageFilter SkRefCnt.
882fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
883fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  SkImageFilter if previously set, nullptr otherwise
884fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
885fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkImageFilter* getImageFilter() const { return fImageFilter.get(); }
886fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
887fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns SkImageFilter if set, or nullptr.
888fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Increases SkImageFilter SkRefCnt by one.
889fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
890fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  SkImageFilter if previously set, nullptr otherwise
891fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
892fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkImageFilter> refImageFilter() const;
893fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
894fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets SkImageFilter to imageFilter, decreasing SkRefCnt of the previous
895fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkImageFilter. Pass nullptr to clear SkImageFilter, and remove SkImageFilter effect
896fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        on drawing.
897fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
898fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param imageFilter  how SkImage is sampled when transformed
899fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
900fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setImageFilter(sk_sp<SkImageFilter> imageFilter);
901fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
902fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns SkDrawLooper if set, or nullptr.
903fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Does not alter SkDrawLooper SkRefCnt.
904fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
905fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  SkDrawLooper if previously set, nullptr otherwise
906fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
907fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkDrawLooper* getDrawLooper() const { return fDrawLooper.get(); }
908fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
909fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns SkDrawLooper if set, or nullptr.
910fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Increases SkDrawLooper SkRefCnt by one.
911fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
912fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  SkDrawLooper if previously set, nullptr otherwise
913fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
914fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkDrawLooper> refDrawLooper() const;
915fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
916fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Deprecated.
917fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        (see bug.skia.org/6259)
918fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
919fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  SkDrawLooper if previously set, nullptr otherwise
920fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
921fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkDrawLooper* getLooper() const { return fDrawLooper.get(); }
922fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
923fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets SkDrawLooper to drawLooper, decreasing SkRefCnt of the previous
924fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        drawLooper.  Pass nullptr to clear SkDrawLooper and leave SkDrawLooper effect on
925fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        drawing unaltered.
926fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
927fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Increments drawLooper SkRefCnt by one.
928fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
929fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param drawLooper  iterates through drawing one or more time, altering SkPaint
930fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
931fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setDrawLooper(sk_sp<SkDrawLooper> drawLooper);
932fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
933fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Deprecated.
934fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        (see bug.skia.org/6259)
935fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
936fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param drawLooper  sets SkDrawLooper to drawLooper
937fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
938fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setLooper(sk_sp<SkDrawLooper> drawLooper);
939fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
940fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** \enum SkPaint::Align
941fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Align adjusts the text relative to the text position.
942fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Align affects glyphs drawn with: SkCanvas::drawText, SkCanvas::drawPosText,
943fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkCanvas::drawPosTextH, SkCanvas::drawTextOnPath,
944fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkCanvas::drawTextOnPathHV, SkCanvas::drawTextRSXform, SkCanvas::drawTextBlob,
945fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        and SkCanvas::drawString;
946fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        as well as calls that place text glyphs like getTextWidths() and getTextPath().
947fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
948fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The text position is set by the font for both horizontal and vertical text.
949fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Typically, for horizontal text, the position is to the left side of the glyph on the
950fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        base line; and for vertical text, the position is the horizontal center of the glyph
951fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        at the caps height.
952fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
953fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Align adjusts the glyph position to center it or move it to abut the position
954fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        using the metrics returned by the font.
955fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
956fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Align defaults to kLeft_Align.
957fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
958fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    enum Align {
959fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Leaves the glyph at the position computed by the font offset by the text position. */
960fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kLeft_Align,
961fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
962fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Moves the glyph half its width if Flags has kVerticalText_Flag clear, and
963fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            half its height if Flags has kVerticalText_Flag set.
964fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
965fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kCenter_Align,
966fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
967fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Moves the glyph by its width if Flags has kVerticalText_Flag clear,
968fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            and by its height if Flags has kVerticalText_Flag set.
969fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
970fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kRight_Align,
971fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
972fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
973fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    enum {
974fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kAlignCount = 3, //!< The number of different Align values defined.
975fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
976fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
977fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns SkPaint::Align.
978fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns kLeft_Align if SkPaint::Align has not been set.
979fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
980fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  text placement relative to position
981fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
982fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    Align   getTextAlign() const { return (Align)fBitfields.fTextAlign; }
983fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
984fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets SkPaint::Align to align.
985fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Has no effect if align is an invalid value.
986fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
987fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param align  text placement relative to position
988fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
989fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void    setTextAlign(Align align);
990fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
991fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns text size in points.
992fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
993fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  typographic height of text
994fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
995fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar getTextSize() const { return fTextSize; }
996fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
997fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets text size in points.
998fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Has no effect if textSize is not greater than or equal to zero.
999fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1000fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param textSize  typographic height of text
1001fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1002fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setTextSize(SkScalar textSize);
1003fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1004fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns text scale x.
1005fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Default value is 1.
1006fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1007fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  text horizontal scale
1008fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1009fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar getTextScaleX() const { return fTextScaleX; }
1010fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1011fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets text scale x.
1012fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Default value is 1.
1013fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1014fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param scaleX  text horizontal scale
1015fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1016fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setTextScaleX(SkScalar scaleX);
1017fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1018fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns text skew x.
1019fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Default value is zero.
1020fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1021fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  additional shear in x-axis relative to y-axis
1022fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1023fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar getTextSkewX() const { return fTextSkewX; }
1024fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1025fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets text skew x.
1026fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Default value is zero.
1027fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1028fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param skewX  additional shear in x-axis relative to y-axis
1029fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1030fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setTextSkewX(SkScalar skewX);
1031fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1032fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** \enum SkPaint::TextEncoding
1033fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        TextEncoding determines whether text specifies character codes and their encoded
1034fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        size, or glyph indices. Characters are encoded as specified by the Unicode standard.
1035fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1036fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
1037fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        All character code formats are able to represent all of Unicode, differing only
1038fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        in the total storage required.
1039fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1040fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        UTF-8 (RFC 3629) encodes each character as one or more 8-bit bytes.
1041fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1042fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        UTF-16 (RFC 2781) encodes each character as one or two 16-bit words.
1043fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1044fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        UTF-32 encodes each character as one 32-bit word.
1045fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1046fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        font manager uses font data to convert character code points into glyph indices.
1047fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        A glyph index is a 16-bit word.
1048fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1049fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        TextEncoding is set to kUTF8_TextEncoding by default.
1050fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1051fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    enum TextEncoding {
1052fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kUTF8_TextEncoding,    //!< Uses bytes to represent UTF-8 or ASCII.
1053fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kUTF16_TextEncoding,   //!< Uses two byte words to represent most of Unicode.
1054fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kUTF32_TextEncoding,   //!< Uses four byte words to represent all of Unicode.
1055fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kGlyphID_TextEncoding, //!< Uses two byte words to represent glyph indices.
1056fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
1057fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1058fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns SkPaint::TextEncoding.
1059fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPaint::TextEncoding determines how character code points are mapped to font glyph indices.
1060fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1061fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  one of: kUTF8_TextEncoding, kUTF16_TextEncoding, kUTF32_TextEncoding, or
1062fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                 kGlyphID_TextEncoding
1063fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1064fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    TextEncoding getTextEncoding() const {
1065fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot      return (TextEncoding)fBitfields.fTextEncoding;
1066fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
1067fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1068fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Sets SkPaint::TextEncoding to encoding.
1069fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPaint::TextEncoding determines how character code points are mapped to font glyph indices.
1070fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Invalid values for encoding are ignored.
1071fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1072fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param encoding  one of: kUTF8_TextEncoding, kUTF16_TextEncoding, kUTF32_TextEncoding, or
1073fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                         kGlyphID_TextEncoding
1074fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1075fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setTextEncoding(TextEncoding encoding);
1076fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1077fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** \struct SkPaint::FontMetrics
1078fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        FontMetrics is filled out by getFontMetrics(). FontMetrics contents reflect the values
1079fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        computed by font manager using SkTypeface. Values are set to zero if they are
1080fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        not available.
1081fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1082fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        All vertical values relative to the baseline are given y-down. As such, zero is on the
1083fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        baseline, negative values are above the baseline, and positive values are below the
1084fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        baseline.
1085fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1086fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fUnderlineThickness and fUnderlinePosition have a bit set in fFlags if their values
1087fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        are valid, since their value may be zero.
1088fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1089fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fStrikeoutThickness and fStrikeoutPosition have a bit set in fFlags if their values
1090fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        are valid, since their value may be zero.
1091fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1092fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    struct FontMetrics {
1093fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1094fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** \enum SkPaint::FontMetrics::FontMetricsFlags
1095fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            FontMetricsFlags are set in fFlags when underline and strikeout metrics are valid;
1096fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            the underline or strikeout metric may be valid and zero.
1097fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
1098fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1099fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        enum FontMetricsFlags {
1100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            kUnderlineThicknessIsValid_Flag = 1 << 0, //!< Set if fUnderlineThickness is valid.
1101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            kUnderlinePositionIsValid_Flag  = 1 << 1, //!< Set if fUnderlinePosition is valid.
1102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            kStrikeoutThicknessIsValid_Flag = 1 << 2, //!< Set if fStrikeoutThickness is valid.
1103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            kStrikeoutPositionIsValid_Flag  = 1 << 3, //!< Set if fStrikeoutPosition is valid.
1104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        };
1105fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1106fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        uint32_t fFlags;              //!< fFlags is set when underline metrics are valid.
1107fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1108fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Greatest extent above the baseline for any glyph.
1109fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Typically less than zero.
1110fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1111fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkScalar fTop;
1112fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1113fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Recommended distance above the baseline to reserve for a line of text.
1114fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Typically less than zero.
1115fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1116fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkScalar fAscent;
1117fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1118fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Recommended distance below the baseline to reserve for a line of text.
1119fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Typically greater than zero.
1120fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1121fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkScalar fDescent;
1122fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1123fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Greatest extent below the baseline for any glyph.
1124fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Typically greater than zero.
1125fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1126fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkScalar fBottom;
1127fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1128fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Recommended distance to add between lines of text.
1129fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Typically greater than or equal to zero.
1130fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1131fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkScalar fLeading;
1132fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1133fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Average character width, if it is available.
1134fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Zero if no average width is stored in the font.
1135fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1136fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkScalar fAvgCharWidth;
1137fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1138fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkScalar fMaxCharWidth;       //!< Maximum character width.
1139fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1140fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Minimum bounding box x value for all glyphs.
1141fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Typically less than zero.
1142fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1143fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkScalar fXMin;
1144fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1145fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Maximum bounding box x value for all glyphs.
1146fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Typically greater than zero.
1147fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1148fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkScalar fXMax;
1149fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1150fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Height of a lower-case 'x'.
1151fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            May be zero if no lower-case height is stored in the font.
1152fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1153fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkScalar fXHeight;
1154fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1155fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Height of an upper-case letter.
1156fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            May be zero if no upper-case height is stored in the font.
1157fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1158fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkScalar fCapHeight;
1159fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1160fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Underline thickness.
1161fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1162fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            If the metric is valid, the kUnderlineThicknessIsValid_Flag is set in fFlags.
1163fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            If kUnderlineThicknessIsValid_Flag is clear, fUnderlineThickness is zero.
1164fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1165fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkScalar fUnderlineThickness;
1166fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1167fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Position of the top of the underline stroke relative to the baseline.
1168fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Typically positive when valid.
1169fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1170fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            If the metric is valid, the kUnderlinePositionIsValid_Flag is set in fFlags.
1171fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            If kUnderlinePositionIsValid_Flag is clear, fUnderlinePosition is zero.
1172fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1173fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkScalar fUnderlinePosition;
1174fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1175fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Strikeout thickness.
1176fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1177fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            If the metric is valid, the kStrikeoutThicknessIsValid_Flag is set in fFlags.
1178fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            If kStrikeoutThicknessIsValid_Flag is clear, fStrikeoutThickness is zero.
1179fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1180fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkScalar fStrikeoutThickness;
1181fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1182fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Position of the bottom of the strikeout stroke relative to the baseline.
1183fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Typically negative when valid.
1184fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1185fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            If the metric is valid, the kStrikeoutPositionIsValid_Flag is set in fFlags.
1186fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            If kStrikeoutPositionIsValid_Flag is clear, fStrikeoutPosition is zero.
1187fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1188fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkScalar fStrikeoutPosition;
1189fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1190fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** If SkPaint::FontMetrics has a valid underline thickness, return true, and set
1191fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            thickness to that value. If the underline thickness is not valid,
1192fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            return false, and ignore thickness.
1193fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1194fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            @param thickness  storage for underline width
1195fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            @return           true if font specifies underline width
1196fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1197fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        bool hasUnderlineThickness(SkScalar* thickness) const {
1198fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            if (SkToBool(fFlags & kUnderlineThicknessIsValid_Flag)) {
1199fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                *thickness = fUnderlineThickness;
1200fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                return true;
1201fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
1202fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            return false;
1203fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
1204fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1205fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** If SkPaint::FontMetrics has a valid underline position, return true, and set
1206fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            position to that value. If the underline position is not valid,
1207fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            return false, and ignore position.
1208fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1209fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            @param position  storage for underline position
1210fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            @return          true if font specifies underline position
1211fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1212fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        bool hasUnderlinePosition(SkScalar* position) const {
1213fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            if (SkToBool(fFlags & kUnderlinePositionIsValid_Flag)) {
1214fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                *position = fUnderlinePosition;
1215fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                return true;
1216fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
1217fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            return false;
1218fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
1219fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1220fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** If SkPaint::FontMetrics has a valid strikeout thickness, return true, and set
1221fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            thickness to that value. If the underline thickness is not valid,
1222fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            return false, and ignore thickness.
1223fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1224fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            @param thickness  storage for strikeout width
1225fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            @return           true if font specifies strikeout width
1226fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1227fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        bool hasStrikeoutThickness(SkScalar* thickness) const {
1228fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            if (SkToBool(fFlags & kStrikeoutThicknessIsValid_Flag)) {
1229fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                *thickness = fStrikeoutThickness;
1230fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                return true;
1231fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
1232fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            return false;
1233fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
1234fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1235fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** If SkPaint::FontMetrics has a valid strikeout position, return true, and set
1236fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            position to that value. If the underline position is not valid,
1237fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            return false, and ignore position.
1238fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1239fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            @param position  storage for strikeout position
1240fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            @return          true if font specifies strikeout position
1241fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        */
1242fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        bool hasStrikeoutPosition(SkScalar* position) const {
1243fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            if (SkToBool(fFlags & kStrikeoutPositionIsValid_Flag)) {
1244fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                *position = fStrikeoutPosition;
1245fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                return true;
1246fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
1247fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            return false;
1248fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
1249fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1250fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
1251fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1252fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns SkPaint::FontMetrics associated with SkTypeface.
1253fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The return value is the recommended spacing between lines: the sum of metrics
1254fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        descent, ascent, and leading.
1255fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        If metrics is not nullptr, SkPaint::FontMetrics is copied to metrics.
1256fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Results are scaled by text size but does not take into account
1257fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        dimensions required by text scale x, text skew x, fake bold,
1258fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        style stroke, and SkPathEffect.
1259fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Results can be additionally scaled by scale; a scale of zero
1260fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        is ignored.
1261fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1262fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param metrics  storage for SkPaint::FontMetrics from SkTypeface; may be nullptr
1263fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param scale    additional multiplier for returned values
1264fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return         recommended spacing between lines
1265fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1266fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar getFontMetrics(FontMetrics* metrics, SkScalar scale = 0) const;
1267fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1268fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns the recommended spacing between lines: the sum of metrics
1269fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        descent, ascent, and leading.
1270fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Result is scaled by text size but does not take into account
1271fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        dimensions required by stroking and SkPathEffect.
1272fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns the same result as getFontMetrics().
1273fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1274fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  recommended spacing between lines
1275fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1276fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar getFontSpacing() const { return this->getFontMetrics(nullptr, 0); }
1277fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1278fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Converts text into glyph indices.
1279fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns the number of glyph indices represented by text.
1280fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPaint::TextEncoding specifies how text represents characters or glyphs.
1281fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        glyphs may be nullptr, to compute the glyph count.
1282fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1283fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Does not check text for valid character codes or valid glyph indices.
1284fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1285fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        If byteLength equals zero, returns zero.
1286fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        If byteLength includes a partial character, the partial character is ignored.
1287fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1288fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        If SkPaint::TextEncoding is kUTF8_TextEncoding and
1289fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        text contains an invalid UTF-8 sequence, zero is returned.
1290fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1291fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param text        character storage encoded with SkPaint::TextEncoding
1292fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param byteLength  length of character storage in bytes
1293fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param glyphs      storage for glyph indices; may be nullptr
1294fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return            number of glyphs represented by text of length byteLength
1295fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1296fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    int textToGlyphs(const void* text, size_t byteLength,
1297fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                     SkGlyphID glyphs[]) const;
1298fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1299fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns true if all text corresponds to a non-zero glyph index.
1300fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns false if any characters in text are not supported in
1301fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkTypeface.
1302fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1303fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        If SkPaint::TextEncoding is kGlyphID_TextEncoding,
1304fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        returns true if all glyph indices in text are non-zero;
1305fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        does not check to see if text contains valid glyph indices for SkTypeface.
1306fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1307fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns true if byteLength is zero.
1308fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1309fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param text        array of characters or glyphs
1310fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param byteLength  number of bytes in text array
1311fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return            true if all text corresponds to a non-zero glyph index
1312fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1313fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool containsText(const void* text, size_t byteLength) const;
1314fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1315fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Converts glyphs into text if possible.
1316fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Glyph values without direct Unicode equivalents are mapped to zero.
1317fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Uses the SkTypeface, but is unaffected
1318fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        by SkPaint::TextEncoding; the text values returned are equivalent to kUTF32_TextEncoding.
1319fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1320fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Only supported on platforms that use FreeType as the font engine.
1321fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1322fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param glyphs  array of indices into font
1323fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param count   length of glyph array
1324fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param text    storage for character codes, one per glyph
1325fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1326fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void glyphsToUnichars(const SkGlyphID glyphs[], int count, SkUnichar text[]) const;
1327fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1328fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns the number of glyphs in text.
1329fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Uses SkPaint::TextEncoding to count the glyphs.
1330fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns the same result as textToGlyphs().
1331fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1332fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param text        character storage encoded with SkPaint::TextEncoding
1333fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param byteLength  length of character storage in bytes
1334fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return            number of glyphs represented by text of length byteLength
1335fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1336fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    int countText(const void* text, size_t byteLength) const {
1337fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return this->textToGlyphs(text, byteLength, nullptr);
1338fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
1339fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1340fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns the advance width of text if kVerticalText_Flag is clear,
1341fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        and the height of text if kVerticalText_Flag is set.
1342fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The advance is the normal distance to move before drawing additional text.
1343fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Uses SkPaint::TextEncoding to decode text, SkTypeface to get the font metrics,
1344fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        and text size, text scale x, text skew x, stroke width, and
1345fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPathEffect to scale the metrics and bounds.
1346fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns the bounding box of text if bounds is not nullptr.
1347fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The bounding box is computed as if the text was drawn at the origin.
1348fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1349fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param text    character codes or glyph indices to be measured
1350fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param length  number of bytes of text to measure
1351fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param bounds  returns bounding box relative to (0, 0) if not nullptr
1352fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return        advance width or height
1353fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1354fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar measureText(const void* text, size_t length, SkRect* bounds) const;
1355fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1356fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns the advance width of text if kVerticalText_Flag is clear,
1357fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        and the height of text if kVerticalText_Flag is set.
1358fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The advance is the normal distance to move before drawing additional text.
1359fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Uses SkPaint::TextEncoding to decode text, SkTypeface to get the font metrics,
1360fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        and text size to scale the metrics.
1361fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Does not scale the advance or bounds by fake bold or SkPathEffect.
1362fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1363fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param text    character codes or glyph indices to be measured
1364fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param length  number of bytes of text to measure
1365fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return        advance width or height
1366fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1367fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar measureText(const void* text, size_t length) const {
1368fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return this->measureText(text, length, nullptr);
1369fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
1370fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1371fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns the bytes of text that fit within maxWidth.
1372fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        If kVerticalText_Flag is clear, the text fragment fits if its advance width is less than or
1373fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        equal to maxWidth.
1374fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        If kVerticalText_Flag is set, the text fragment fits if its advance height is less than or
1375fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        equal to maxWidth.
1376fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Measures only while the advance is less than or equal to maxWidth.
1377fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns the advance or the text fragment in measuredWidth if it not nullptr.
1378fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Uses SkPaint::TextEncoding to decode text, SkTypeface to get the font metrics,
1379fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        and text size to scale the metrics.
1380fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Does not scale the advance or bounds by fake bold or SkPathEffect.
1381fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1382fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param text           character codes or glyph indices to be measured
1383fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param length         number of bytes of text to measure
1384fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param maxWidth       advance limit; text is measured while advance is less than maxWidth
1385fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param measuredWidth  returns the width of the text less than or equal to maxWidth
1386fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return               bytes of text that fit, always less than or equal to length
1387fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1388fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    size_t  breakText(const void* text, size_t length, SkScalar maxWidth,
1389fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                      SkScalar* measuredWidth = nullptr) const;
1390fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1391fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Retrieves the advance and bounds for each glyph in text, and returns
1392fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        the glyph count in text.
1393fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Both widths and bounds may be nullptr.
1394fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        If widths is not nullptr, widths must be an array of glyph count entries.
1395fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        if bounds is not nullptr, bounds must be an array of glyph count entries.
1396fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        If kVerticalText_Flag is clear, widths returns the horizontal advance.
1397fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        If kVerticalText_Flag is set, widths returns the vertical advance.
1398fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Uses SkPaint::TextEncoding to decode text, SkTypeface to get the font metrics,
1399fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        and text size to scale the widths and bounds.
1400fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Does not scale the advance by fake bold or SkPathEffect.
1401fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Does include fake bold and SkPathEffect in the bounds.
1402fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1403fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param text        character codes or glyph indices to be measured
1404fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param byteLength  number of bytes of text to measure
1405fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param widths      returns text advances for each glyph; may be nullptr
1406fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param bounds      returns bounds for each glyph relative to (0, 0); may be nullptr
1407fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return            glyph count in text
1408fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1409fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    int getTextWidths(const void* text, size_t byteLength, SkScalar widths[],
1410fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                      SkRect bounds[] = nullptr) const;
1411fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1412fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns the geometry as SkPath equivalent to the drawn text.
1413fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Uses SkPaint::TextEncoding to decode text, SkTypeface to get the glyph paths,
1414fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        and text size, fake bold, and SkPathEffect to scale and modify the glyph paths.
1415fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        All of the glyph paths are stored in path.
1416fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Uses x, y, and SkPaint::Align to position path.
1417fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1418fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param text    character codes or glyph indices
1419fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param length  number of bytes of text
1420fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param x       x-coordinate of the origin of the text
1421fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param y       y-coordinate of the origin of the text
1422fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param path    geometry of the glyphs
1423fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1424fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y,
1425fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                     SkPath* path) const;
1426fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1427fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns the geometry as SkPath equivalent to the drawn text.
1428fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Uses SkPaint::TextEncoding to decode text, SkTypeface to get the glyph paths,
1429fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        and text size, fake bold, and SkPathEffect to scale and modify the glyph paths.
1430fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        All of the glyph paths are stored in path.
1431fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Uses pos array and SkPaint::Align to position path.
1432fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        pos contains a position for each glyph.
1433fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1434fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param text    character codes or glyph indices
1435fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param length  number of bytes of text
1436fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param pos     positions of each glyph
1437fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param path    geometry of the glyphs
1438fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1439fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void getPosTextPath(const void* text, size_t length,
1440fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                        const SkPoint pos[], SkPath* path) const;
1441fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1442fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns the number of intervals that intersect bounds.
1443fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        bounds describes a pair of lines parallel to the text advance.
1444fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The return count is zero or a multiple of two, and is at most twice the number of glyphs in
1445fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        the string.
1446fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Uses SkPaint::TextEncoding to decode text, SkTypeface to get the glyph paths,
1447fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        and text size, fake bold, and SkPathEffect to scale and modify the glyph paths.
1448fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Uses x, y, and SkPaint::Align to position intervals.
1449fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1450fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Pass nullptr for intervals to determine the size of the interval array.
1451fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1452fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        intervals are cached to improve performance for multiple calls.
1453fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1454fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param text       character codes or glyph indices
1455fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param length     number of bytes of text
1456fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param x          x-coordinate of the origin of the text
1457fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param y          y-coordinate of the origin of the text
1458fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param bounds     lower and upper line parallel to the advance
1459fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param intervals  returned intersections; may be nullptr
1460fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return           number of intersections; may be zero
1461fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1462fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    int getTextIntercepts(const void* text, size_t length, SkScalar x, SkScalar y,
1463fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                          const SkScalar bounds[2], SkScalar* intervals) const;
1464fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1465fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns the number of intervals that intersect bounds.
1466fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        bounds describes a pair of lines parallel to the text advance.
1467fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The return count is zero or a multiple of two, and is at most twice the number of glyphs in
1468fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        the string.
1469fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Uses SkPaint::TextEncoding to decode text, SkTypeface to get the glyph paths,
1470fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        and text size, fake bold, and SkPathEffect to scale and modify the glyph paths.
1471fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Uses pos array and SkPaint::Align to position intervals.
1472fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1473fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Pass nullptr for intervals to determine the size of the interval array.
1474fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1475fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        intervals are cached to improve performance for multiple calls.
1476fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1477fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param text       character codes or glyph indices
1478fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param length     number of bytes of text
1479fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param pos        positions of each glyph
1480fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param bounds     lower and upper line parallel to the advance
1481fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param intervals  returned intersections; may be nullptr
1482fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return           number of intersections; may be zero
1483fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1484fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    int getPosTextIntercepts(const void* text, size_t length, const SkPoint pos[],
1485fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                             const SkScalar bounds[2], SkScalar* intervals) const;
1486fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1487fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns the number of intervals that intersect bounds.
1488fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        bounds describes a pair of lines parallel to the text advance.
1489fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The return count is zero or a multiple of two, and is at most twice the number of glyphs in
1490fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        the string.
1491fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Uses SkPaint::TextEncoding to decode text, SkTypeface to get the glyph paths,
1492fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        and text size, fake bold, and SkPathEffect to scale and modify the glyph paths.
1493fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Uses xpos array, constY, and SkPaint::Align to position intervals.
1494fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1495fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Pass nullptr for intervals to determine the size of the interval array.
1496fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1497fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        intervals are cached to improve performance for multiple calls.
1498fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1499fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param text       character codes or glyph indices
1500fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param length     number of bytes of text
1501fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param xpos       positions of each glyph in x
1502fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param constY     position of each glyph in y
1503fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param bounds     lower and upper line parallel to the advance
1504fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param intervals  returned intersections; may be nullptr
1505fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return           number of intersections; may be zero
1506fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1507fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    int getPosTextHIntercepts(const void* text, size_t length, const SkScalar xpos[],
1508fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                              SkScalar constY, const SkScalar bounds[2], SkScalar* intervals) const;
1509fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1510fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns the number of intervals that intersect bounds.
1511fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        bounds describes a pair of lines parallel to the text advance.
1512fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The return count is zero or a multiple of two, and is at most twice the number of glyphs in
1513fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        the string.
1514fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Uses SkTypeface to get the glyph paths,
1515fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        and text size, fake bold, and SkPathEffect to scale and modify the glyph paths.
1516fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Uses run array and SkPaint::Align to position intervals.
1517fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1518fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPaint::TextEncoding must be set to SkPaint::kGlyphID_TextEncoding.
1519fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1520fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Pass nullptr for intervals to determine the size of the interval array.
1521fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1522fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        intervals are cached to improve performance for multiple calls.
1523fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1524fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param blob       glyphs, positions, and text paint attributes
1525fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param bounds     lower and upper line parallel to the advance
1526fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param intervals  returned intersections; may be nullptr
1527fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return           number of intersections; may be zero
1528fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1529fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    int getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds[2],
1530fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                              SkScalar* intervals) const;
1531fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1532fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns the union of bounds of all glyphs.
1533fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returned dimensions are computed by font manager from font data,
1534fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        ignoring SkPaint::Hinting. Includes text size, text scale x,
1535fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        and text skew x, but not fake bold or SkPathEffect.
1536fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1537fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        If text size is large, text scale x is one, and text skew x is zero,
1538fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        returns the same bounds as SkPaint::FontMetrics { FontMetrics::fXMin,
1539fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        FontMetrics::fTop, FontMetrics::fXMax, FontMetrics::fBottom }.
1540fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1541fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  union of bounds of all glyphs
1542fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1543fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkRect getFontBounds() const;
1544fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1545fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** Returns true if SkPaint prevents all drawing;
1546fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        otherwise, the SkPaint may or may not allow drawing.
1547fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1548fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns true if, for example, SkBlendMode combined with color alpha computes a
1549fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        new alpha of zero.
1550fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1551fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  true if SkPaint prevents all drawing
1552fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1553fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool nothingToDraw() const;
1554fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1555fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**     (to be made private)
1556fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns true if SkPaint does not include elements requiring extensive computation
1557fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        to compute SkBaseDevice bounds of drawn geometry. For instance, SkPaint with SkPathEffect
1558fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        always returns false.
1559fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1560fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return  true if SkPaint allows for fast computation of bounds
1561fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1562fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool canComputeFastBounds() const;
1563fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1564fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**     (to be made private)
1565fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Only call this if canComputeFastBounds() returned true. This takes a
1566fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
1567fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        effects in the paint (e.g. stroking). If needed, it uses the storage
1568fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        parameter. It returns the adjusted bounds that can then be used
1569fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        for SkCanvas::quickReject tests.
1570fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1571fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The returned SkRect will either be orig or storage, thus the caller
1572fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        should not rely on storage being set to the result, but should always
1573fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        use the returned value. It is legal for orig and storage to be the same
1574fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkRect.
1575fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            e.g.
1576fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            if (paint.canComputeFastBounds()) {
1577fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SkRect r, storage;
1578fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            path.computeBounds(&r, SkPath::kFast_BoundsType);
1579fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            const SkRect& fastR = paint.computeFastBounds(r, &storage);
1580fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            if (canvas->quickReject(fastR, ...)) {
1581fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            // don't draw the path
1582fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
1583fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
1584fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1585fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param orig     geometry modified by SkPaint when drawn
1586fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param storage  computed bounds of geometry; may not be nullptr
1587fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return         fast computed bounds
1588fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1589fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const SkRect& computeFastBounds(const SkRect& orig, SkRect* storage) const {
1590fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        // Things like stroking, etc... will do math on the bounds rect, assuming that it's sorted.
1591fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkASSERT(orig.isSorted());
1592fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPaint::Style style = this->getStyle();
1593fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        // ultra fast-case: filling with no effects that affect geometry
1594fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        if (kFill_Style == style) {
1595fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            uintptr_t effects = reinterpret_cast<uintptr_t>(this->getLooper());
1596fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            effects |= reinterpret_cast<uintptr_t>(this->getMaskFilter());
1597fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            effects |= reinterpret_cast<uintptr_t>(this->getPathEffect());
1598fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            effects |= reinterpret_cast<uintptr_t>(this->getImageFilter());
1599fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            if (!effects) {
1600fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                return orig;
1601fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
1602fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
1603fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1604fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return this->doComputeFastBounds(orig, storage, style);
1605fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
1606fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1607fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**     (to be made private)
1608fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1609fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param orig     geometry modified by SkPaint when drawn
1610fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param storage  computed bounds of geometry
1611fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return         fast computed bounds
1612fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1613fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const SkRect& computeFastStrokeBounds(const SkRect& orig,
1614fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                          SkRect* storage) const {
1615fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return this->doComputeFastBounds(orig, storage, kStroke_Style);
1616fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
1617fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1618fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**     (to be made private)
1619fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Computes the bounds, overriding the SkPaint SkPaint::Style. This can be used to
1620fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        account for additional width required by stroking orig, without
1621fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        altering SkPaint::Style set to fill.
1622fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1623fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param orig     geometry modified by SkPaint when drawn
1624fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param storage  computed bounds of geometry
1625fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param style    overrides SkPaint::Style
1626fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @return         fast computed bounds
1627fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1628fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const SkRect& doComputeFastBounds(const SkRect& orig, SkRect* storage,
1629fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                      Style style) const;
1630fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1631fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /** macro expands to: void toString(SkString* str) const;
1632fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Creates string representation of SkPaint. The representation is read by
1633fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        internal debugging tools. The interface and implementation may be
1634fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        suppressed by defining SK_IGNORE_TO_STRING.
1635fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1636fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param str  storage for string representation of SkPaint
1637fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
1638fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_TO_STRING_NONVIRT()
1639fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1640fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
1641fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    typedef const SkGlyph& (*GlyphCacheProc)(SkGlyphCache*, const char**);
1642fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1643fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkTypeface>     fTypeface;
1644fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkPathEffect>   fPathEffect;
1645fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkShader>       fShader;
1646fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkMaskFilter>   fMaskFilter;
1647fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkColorFilter>  fColorFilter;
1648fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkDrawLooper>   fDrawLooper;
1649fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkImageFilter>  fImageFilter;
1650fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1651fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar        fTextSize;
1652fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar        fTextScaleX;
1653fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar        fTextSkewX;
1654fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkColor         fColor;
1655fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar        fWidth;
1656fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar        fMiterLimit;
1657fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    uint32_t        fBlendMode; // just need 5-6 bits
1658fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    union {
1659fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        struct {
1660fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            // all of these bitfields should add up to 32
1661fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            unsigned        fFlags : 16;
1662fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            unsigned        fTextAlign : 2;
1663fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            unsigned        fCapType : 2;
1664fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            unsigned        fJoinType : 2;
1665fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            unsigned        fStyle : 2;
1666fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            unsigned        fTextEncoding : 2;  // 3 values
1667fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            unsigned        fHinting : 2;
1668fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            unsigned        fFilterQuality : 2;
1669fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            //unsigned      fFreeBits : 2;
1670fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        } fBitfields;
1671fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        uint32_t fBitfieldsUInt;
1672fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
1673fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1674fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    static GlyphCacheProc GetGlyphCacheProc(TextEncoding encoding,
1675fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                            bool isDevKern,
1676fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                            bool needFullMetrics);
1677fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1678fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar measure_text(SkGlyphCache*, const char* text, size_t length,
1679fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                          int* count, SkRect* bounds) const;
1680fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1681fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /*
1682fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * The luminance color is used to determine which Gamma Canonical color to map to.  This is
1683fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * really only used by backends which want to cache glyph masks, and need some way to know if
1684fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * they need to generate new masks based off a given color.
1685fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
1686fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkColor computeLuminanceColor() const;
1687fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1688fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    enum {
1689fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /*  This is the size we use when we ask for a glyph's path. We then
1690fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot         *  post-transform it as we draw to match the request.
1691fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot         *  This is done to try to re-use cache entries for the path.
1692fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot         *
1693fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot         *  This value is somewhat arbitrary. In theory, it could be 1, since
1694fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot         *  we store paths as floats. However, we get the path from the font
1695fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot         *  scaler, and it may represent its paths as fixed-point (or 26.6),
1696fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot         *  so we shouldn't ask for something too big (might overflow 16.16)
1697fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot         *  or too small (underflow 26.6).
1698fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot         *
1699fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot         *  This value could track kMaxSizeForGlyphCache, assuming the above
1700fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot         *  constraints, but since we ask for unhinted paths, the two values
1701fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot         *  need not match per-se.
1702fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot         */
1703fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kCanonicalTextSizeForPaths  = 64,
1704fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
1705fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1706fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    static bool TooBigToUseCache(const SkMatrix& ctm, const SkMatrix& textM, SkScalar maxLimit);
1707fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1708fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // Set flags/hinting/textSize up to use for drawing text as paths.
1709fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // Returns scale factor to restore the original textSize, since will will
1710fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // have change it to kCanonicalTextSizeForPaths.
1711fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar setupForAsPaths();
1712fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1713fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    static SkScalar MaxCacheSize2(SkScalar maxLimit);
1714fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1715fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    friend class GrAtlasTextBlob;
1716fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    friend class GrAtlasTextContext;
1717fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    friend class GrGLPathRendering;
1718fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    friend class GrPathRendering;
1719fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    friend class GrStencilAndCoverTextContext;
1720fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    friend class GrTextUtils;
1721fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    friend class SkAutoGlyphCache;
1722fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    friend class SkAutoGlyphCacheNoGamma;
1723fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    friend class SkCanonicalizePaint;
1724fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    friend class SkCanvas;
1725fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    friend class SkDraw;
1726fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    friend class SkPDFDevice;
1727fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    friend class SkScalerContext;  // for computeLuminanceColor()
1728fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    friend class SkTextBaseIter;
1729fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
1730fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
1731fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif
1732