SkPaintPriv.h revision 63fd760a37905c45d26fc3d49cac261fad1b4808
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); 67af51e04dc0978d7a93f12ee7588f5af9336c1fccreed}; 68a85d4d0814818e4ddabb9237da209d61d6cd5854reed 69baa0220dfddda3cd44f0ffb5f95a4a60443eb8c3junov@chromium.org#endif 70