Home | History | Annotate | Download | only in core
      1 
      2 /*
      3  * Copyright 2011 Google Inc.
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 #ifndef SkDrawProcs_DEFINED
      9 #define SkDrawProcs_DEFINED
     10 
     11 #include "SkBlitter.h"
     12 #include "SkDraw.h"
     13 
     14 class SkAAClip;
     15 class SkBlitter;
     16 
     17 struct SkDraw1Glyph {
     18     const SkDraw* fDraw;
     19     SkBounder* fBounder;
     20     const SkRegion* fClip;
     21     const SkAAClip* fAAClip;
     22     SkBlitter* fBlitter;
     23     SkGlyphCache* fCache;
     24     const SkPaint* fPaint;
     25     SkIRect fClipBounds;
     26     /** Half the sampling frequency of the rasterized glyph in x. */
     27     SkFixed fHalfSampleX;
     28     /** Half the sampling frequency of the rasterized glyph in y. */
     29     SkFixed fHalfSampleY;
     30 
     31     /** Draws one glyph.
     32      *
     33      *  The x and y are pre-biased, so implementations may just truncate them.
     34      *  i.e. half the sampling frequency has been added.
     35      *  e.g. 1/2 or 1/(2^(SkGlyph::kSubBits+1)) has already been added.
     36      *  This added bias can be found in fHalfSampleX,Y.
     37      */
     38     typedef void (*Proc)(const SkDraw1Glyph&, SkFixed x, SkFixed y, const SkGlyph&);
     39 
     40     Proc init(const SkDraw* draw, SkBlitter* blitter, SkGlyphCache* cache,
     41               const SkPaint&);
     42 
     43     // call this instead of fBlitter->blitMask() since this wrapper will handle
     44     // the case when the mask is ARGB32_Format
     45     //
     46     void blitMask(const SkMask& mask, const SkIRect& clip) const {
     47         if (SkMask::kARGB32_Format == mask.fFormat) {
     48             this->blitMaskAsSprite(mask);
     49         } else {
     50             fBlitter->blitMask(mask, clip);
     51         }
     52     }
     53 
     54     // mask must be kARGB32_Format
     55     void blitMaskAsSprite(const SkMask& mask) const;
     56 };
     57 
     58 struct SkDrawProcs {
     59     SkDraw1Glyph::Proc  fD1GProc;
     60 };
     61 
     62 /**
     63  *  If the current paint is set to stroke and the stroke-width when applied to
     64  *  the matrix is <= 1.0, then this returns true, and sets coverage (simulating
     65  *  a stroke by drawing a hairline with partial coverage). If any of these
     66  *  conditions are false, then this returns false and coverage is ignored.
     67  */
     68 bool SkDrawTreatAsHairline(const SkPaint&, const SkMatrix&, SkScalar* coverage);
     69 
     70 #endif
     71