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