blob: 3addf321bf389e6749442552483e2a63a8d9e37e [file] [log] [blame]
/*
* Copyright 2013 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkPaintPriv_DEFINED
#define SkPaintPriv_DEFINED
#include "include/core/SkPaint.h"
class SkReadBuffer;
class SkWriteBuffer;
enum SkColorType : int;
class SkPaintPriv {
public:
enum ShaderOverrideOpacity {
kNone_ShaderOverrideOpacity, //!< there is no overriding shader (bitmap or image)
kOpaque_ShaderOverrideOpacity, //!< the overriding shader is opaque
kNotOpaque_ShaderOverrideOpacity, //!< the overriding shader may not be opaque
};
/**
* Returns true if drawing with this paint (or nullptr) will ovewrite all affected pixels.
*
* Note: returns conservative true, meaning it may return false even though the paint might
* in fact overwrite its pixels.
*/
static bool Overwrites(const SkPaint* paint, ShaderOverrideOpacity);
static bool ShouldDither(const SkPaint&, SkColorType);
/*
* The luminance color is used to determine which Gamma Canonical color to map to. This is
* really only used by backends which want to cache glyph masks, and need some way to know if
* they need to generate new masks based off a given color.
*/
static SkColor ComputeLuminanceColor(const SkPaint&);
/** Serializes SkPaint into a buffer. A companion unflatten() call
can reconstitute the paint at a later time.
@param buffer SkWriteBuffer receiving the flattened SkPaint data
*/
static void Flatten(const SkPaint& paint, SkWriteBuffer& buffer);
/** Populates SkPaint, typically from a serialized stream, created by calling
flatten() at an earlier time.
*/
static SkPaint Unflatten(SkReadBuffer& buffer);
// If this paint has any color filter, fold it into the shader and/or paint color
// so that it draws the same but getColorFilter() returns nullptr.
//
// Since we may be filtering now, we need to know what color space to filter in,
// typically the color space of the device we're drawing into.
static void RemoveColorFilter(SkPaint*, SkColorSpace* dstCS);
static SkScalar ComputeResScaleForStroking(const SkMatrix&);
};
#endif