11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc.
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkDrawProcs_DEFINED
90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkDrawProcs_DEFINED
100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDraw.h"
120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
131cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerclass SkAAClip;
140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkBlitter;
150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstruct SkDraw1Glyph {
174f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    const SkDraw* fDraw;
184f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    SkBounder* fBounder;
194f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    const SkRegion* fClip;
204f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    const SkAAClip* fAAClip;
214f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    SkBlitter* fBlitter;
224f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    SkGlyphCache* fCache;
234f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    SkIRect fClipBounds;
244f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
254f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    // The fixed x,y are pre-rounded, so impls just trunc them down to ints.
264f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    // i.e. half the sampling frequency has been added.
274f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    // e.g. 1/2 or 1/(2^(SkGlyph::kSubBits+1)) has already been added.
284f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    typedef void (*Proc)(const SkDraw1Glyph&, SkFixed x, SkFixed y, const SkGlyph&);
294f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
304f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger    Proc init(const SkDraw* draw, SkBlitter* blitter, SkGlyphCache* cache);
310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstruct SkDrawProcs {
340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDraw1Glyph::Proc  fD1GProc;
350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
371cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/**
384f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger *  If the current paint is set to stroke and the stroke-width when applied to
394f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger *  the matrix is <= 1.0, then this returns true, and sets coverage (simulating
404f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger *  a stroke by drawing a hairline with partial coverage). If any of these
414f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger *  conditions are false, then this returns false and coverage is ignored.
421cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
434f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerbool SkDrawTreatAsHairline(const SkPaint&, const SkMatrix&, SkScalar* coverage);
441cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
47