1baa0220dfddda3cd44f0ffb5f95a4a60443eb8c3junov@chromium.org/*
2baa0220dfddda3cd44f0ffb5f95a4a60443eb8c3junov@chromium.org * Copyright 2013 Google Inc.
3baa0220dfddda3cd44f0ffb5f95a4a60443eb8c3junov@chromium.org *
4baa0220dfddda3cd44f0ffb5f95a4a60443eb8c3junov@chromium.org * Use of this source code is governed by a BSD-style license that can be
5baa0220dfddda3cd44f0ffb5f95a4a60443eb8c3junov@chromium.org * found in the LICENSE file.
6baa0220dfddda3cd44f0ffb5f95a4a60443eb8c3junov@chromium.org */
7baa0220dfddda3cd44f0ffb5f95a4a60443eb8c3junov@chromium.org
8baa0220dfddda3cd44f0ffb5f95a4a60443eb8c3junov@chromium.org#ifndef SkPaintPriv_DEFINED
9baa0220dfddda3cd44f0ffb5f95a4a60443eb8c3junov@chromium.org#define SkPaintPriv_DEFINED
10baa0220dfddda3cd44f0ffb5f95a4a60443eb8c3junov@chromium.org
11d4a70ee36717493cc071f878b16b037463e6ce9aFlorin Malita#include "SkImageInfo.h"
128be952ad8c9deefe19cff36f9ad217563400f817Mike Reed#include "SkPaint.h"
137120b2d577d3aab1f51c5af1530a68c57ca51696Mike Reed#include "SkMatrix.h"
14a85d4d0814818e4ddabb9237da209d61d6cd5854reed
15baa0220dfddda3cd44f0ffb5f95a4a60443eb8c3junov@chromium.orgclass SkBitmap;
16a85d4d0814818e4ddabb9237da209d61d6cd5854reedclass SkImage;
17baa0220dfddda3cd44f0ffb5f95a4a60443eb8c3junov@chromium.org
18af51e04dc0978d7a93f12ee7588f5af9336c1fccreedclass SkPaintPriv {
19af51e04dc0978d7a93f12ee7588f5af9336c1fccreedpublic:
20c83a29759a5c2966da5ab973e4fd90763e4c962breed    enum ShaderOverrideOpacity {
21c83a29759a5c2966da5ab973e4fd90763e4c962breed        kNone_ShaderOverrideOpacity,        //!< there is no overriding shader (bitmap or image)
22c83a29759a5c2966da5ab973e4fd90763e4c962breed        kOpaque_ShaderOverrideOpacity,      //!< the overriding shader is opaque
23c83a29759a5c2966da5ab973e4fd90763e4c962breed        kNotOpaque_ShaderOverrideOpacity,   //!< the overriding shader may not be opaque
24c83a29759a5c2966da5ab973e4fd90763e4c962breed    };
259d524f22bfde5dc3dc8f48e1be39bdebd3bb0304halcanary
26af51e04dc0978d7a93f12ee7588f5af9336c1fccreed    /**
2796fcdcc219d2a0d3579719b84b28bede76efba64halcanary     *  Returns true if drawing with this paint (or nullptr) will ovewrite all affected pixels.
28af51e04dc0978d7a93f12ee7588f5af9336c1fccreed     *
29af51e04dc0978d7a93f12ee7588f5af9336c1fccreed     *  Note: returns conservative true, meaning it may return false even though the paint might
30af51e04dc0978d7a93f12ee7588f5af9336c1fccreed     *        in fact overwrite its pixels.
31af51e04dc0978d7a93f12ee7588f5af9336c1fccreed     */
32c83a29759a5c2966da5ab973e4fd90763e4c962breed    static bool Overwrites(const SkPaint* paint, ShaderOverrideOpacity);
33c83a29759a5c2966da5ab973e4fd90763e4c962breed
34c83a29759a5c2966da5ab973e4fd90763e4c962breed    static bool Overwrites(const SkPaint& paint) {
35c83a29759a5c2966da5ab973e4fd90763e4c962breed        return Overwrites(&paint, kNone_ShaderOverrideOpacity);
36c83a29759a5c2966da5ab973e4fd90763e4c962breed    }
3746c248da267d315d500d2296a205cf22077b3e87piotaixr
38af51e04dc0978d7a93f12ee7588f5af9336c1fccreed    /**
3996fcdcc219d2a0d3579719b84b28bede76efba64halcanary     *  Returns true if drawing this bitmap with this paint (or nullptr) will ovewrite all affected
40af51e04dc0978d7a93f12ee7588f5af9336c1fccreed     *  pixels.
41af51e04dc0978d7a93f12ee7588f5af9336c1fccreed     */
42af51e04dc0978d7a93f12ee7588f5af9336c1fccreed    static bool Overwrites(const SkBitmap&, const SkPaint* paint);
4346c248da267d315d500d2296a205cf22077b3e87piotaixr
44af51e04dc0978d7a93f12ee7588f5af9336c1fccreed    /**
4596fcdcc219d2a0d3579719b84b28bede76efba64halcanary     *  Returns true if drawing this image with this paint (or nullptr) will ovewrite all affected
46af51e04dc0978d7a93f12ee7588f5af9336c1fccreed     *  pixels.
47af51e04dc0978d7a93f12ee7588f5af9336c1fccreed     */
48af51e04dc0978d7a93f12ee7588f5af9336c1fccreed    static bool Overwrites(const SkImage*, const SkPaint* paint);
498be952ad8c9deefe19cff36f9ad217563400f817Mike Reed
508be952ad8c9deefe19cff36f9ad217563400f817Mike Reed    static void ScaleFontMetrics(SkPaint::FontMetrics*, SkScalar);
517120b2d577d3aab1f51c5af1530a68c57ca51696Mike Reed
527120b2d577d3aab1f51c5af1530a68c57ca51696Mike Reed    /**
537120b2d577d3aab1f51c5af1530a68c57ca51696Mike Reed     *  Return a matrix that applies the paint's text values: size, scale, skew
547120b2d577d3aab1f51c5af1530a68c57ca51696Mike Reed     */
557120b2d577d3aab1f51c5af1530a68c57ca51696Mike Reed    static void MakeTextMatrix(SkMatrix* matrix, SkScalar size, SkScalar scaleX, SkScalar skewX) {
567120b2d577d3aab1f51c5af1530a68c57ca51696Mike Reed        matrix->setScale(size * scaleX, size);
577120b2d577d3aab1f51c5af1530a68c57ca51696Mike Reed        if (skewX) {
587120b2d577d3aab1f51c5af1530a68c57ca51696Mike Reed            matrix->postSkew(skewX, 0);
597120b2d577d3aab1f51c5af1530a68c57ca51696Mike Reed        }
607120b2d577d3aab1f51c5af1530a68c57ca51696Mike Reed    }
617120b2d577d3aab1f51c5af1530a68c57ca51696Mike Reed
627120b2d577d3aab1f51c5af1530a68c57ca51696Mike Reed    static void MakeTextMatrix(SkMatrix* matrix, const SkPaint& paint) {
637120b2d577d3aab1f51c5af1530a68c57ca51696Mike Reed        MakeTextMatrix(matrix, paint.getTextSize(), paint.getTextScaleX(), paint.getTextSkewX());
647120b2d577d3aab1f51c5af1530a68c57ca51696Mike Reed    }
6563fd760a37905c45d26fc3d49cac261fad1b4808Ben Wagner
66d4a70ee36717493cc071f878b16b037463e6ce9aFlorin Malita    static bool ShouldDither(const SkPaint&, SkColorType);
67889d521d8715f4934accb630097bc09bf7ad1a32Mike Reed
68889d521d8715f4934accb630097bc09bf7ad1a32Mike Reed    // returns 0 if buffer is invalid for specified encoding
69889d521d8715f4934accb630097bc09bf7ad1a32Mike Reed    static int ValidCountText(const void* text, size_t length, SkPaint::TextEncoding);
70af51e04dc0978d7a93f12ee7588f5af9336c1fccreed};
71a85d4d0814818e4ddabb9237da209d61d6cd5854reed
72baa0220dfddda3cd44f0ffb5f95a4a60443eb8c3junov@chromium.org#endif
73