LCOV - code coverage report
Current view: top level - gfx/skia/skia/src/core - SkAAClip.h (source / functions) Hit Total Coverage
Test: output.info Lines: 11 11 100.0 %
Date: 2017-07-14 16:53:18 Functions: 5 5 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright 2011 Google Inc.
       3             :  *
       4             :  * Use of this source code is governed by a BSD-style license that can be
       5             :  * found in the LICENSE file.
       6             :  */
       7             : 
       8             : #ifndef SkAAClip_DEFINED
       9             : #define SkAAClip_DEFINED
      10             : 
      11             : #include "SkAutoMalloc.h"
      12             : #include "SkBlitter.h"
      13             : #include "SkRegion.h"
      14             : 
      15             : class SkAAClip {
      16             : public:
      17             :     SkAAClip();
      18             :     SkAAClip(const SkAAClip&);
      19             :     ~SkAAClip();
      20             : 
      21             :     SkAAClip& operator=(const SkAAClip&);
      22             :     friend bool operator==(const SkAAClip&, const SkAAClip&);
      23             :     friend bool operator!=(const SkAAClip& a, const SkAAClip& b) {
      24             :         return !(a == b);
      25             :     }
      26             : 
      27             :     void swap(SkAAClip&);
      28             : 
      29        8847 :     bool isEmpty() const { return nullptr == fRunHead; }
      30        2760 :     const SkIRect& getBounds() const { return fBounds; }
      31             : 
      32             :     // Returns true iff the clip is not empty, and is just a hard-edged rect (no partial alpha).
      33             :     // If true, getBounds() can be used in place of this clip.
      34             :     bool isRect() const;
      35             : 
      36             :     bool setEmpty();
      37             :     bool setRect(const SkIRect&);
      38             :     bool setRect(const SkRect&, bool doAA = true);
      39             :     bool setPath(const SkPath&, const SkRegion* clip = nullptr, bool doAA = true);
      40             :     bool setRegion(const SkRegion&);
      41             :     bool set(const SkAAClip&);
      42             : 
      43             :     bool op(const SkAAClip&, const SkAAClip&, SkRegion::Op);
      44             : 
      45             :     // Helpers for op()
      46             :     bool op(const SkIRect&, SkRegion::Op);
      47             :     bool op(const SkRect&, SkRegion::Op, bool doAA);
      48             :     bool op(const SkAAClip&, SkRegion::Op);
      49             : 
      50             :     bool translate(int dx, int dy, SkAAClip* dst) const;
      51             :     bool translate(int dx, int dy) {
      52             :         return this->translate(dx, dy, this);
      53             :     }
      54             : 
      55             :     /**
      56             :      *  Allocates a mask the size of the aaclip, and expands its data into
      57             :      *  the mask, using kA8_Format
      58             :      */
      59             :     void copyToMask(SkMask*) const;
      60             : 
      61             :     // called internally
      62             : 
      63             :     bool quickContains(int left, int top, int right, int bottom) const;
      64         149 :     bool quickContains(const SkIRect& r) const {
      65         149 :         return this->quickContains(r.fLeft, r.fTop, r.fRight, r.fBottom);
      66             :     }
      67             : 
      68             :     const uint8_t* findRow(int y, int* lastYForRow = nullptr) const;
      69             :     const uint8_t* findX(const uint8_t data[], int x, int* initialCount = nullptr) const;
      70             : 
      71             :     class Iter;
      72             :     struct RunHead;
      73             :     struct YOffset;
      74             :     class Builder;
      75             : 
      76             : #ifdef SK_DEBUG
      77             :     void validate() const;
      78             :     void debug(bool compress_y=false) const;
      79             : #else
      80             :     void validate() const {}
      81             :     void debug(bool compress_y=false) const {}
      82             : #endif
      83             : 
      84             : private:
      85             :     SkIRect  fBounds;
      86             :     RunHead* fRunHead;
      87             : 
      88             :     void freeRuns();
      89             :     bool trimBounds();
      90             :     bool trimTopBottom();
      91             :     bool trimLeftRight();
      92             : 
      93             :     friend class Builder;
      94             :     class BuilderBlitter;
      95             :     friend class BuilderBlitter;
      96             : };
      97             : 
      98             : ///////////////////////////////////////////////////////////////////////////////
      99             : 
     100             : class SkAAClipBlitter : public SkBlitter {
     101             : public:
     102         197 :     SkAAClipBlitter() : fScanlineScratch(nullptr) {}
     103             :     ~SkAAClipBlitter() override;
     104             : 
     105         168 :     void init(SkBlitter* blitter, const SkAAClip* aaclip) {
     106         168 :         SkASSERT(aaclip && !aaclip->isEmpty());
     107         168 :         fBlitter = blitter;
     108         168 :         fAAClip = aaclip;
     109         168 :         fAAClipBounds = aaclip->getBounds();
     110         168 :     }
     111             : 
     112             :     void blitH(int x, int y, int width) override;
     113             :     void blitAntiH(int x, int y, const SkAlpha[], const int16_t runs[]) override;
     114             :     void blitV(int x, int y, int height, SkAlpha alpha) override;
     115             :     void blitRect(int x, int y, int width, int height) override;
     116             :     void blitMask(const SkMask&, const SkIRect& clip) override;
     117             :     const SkPixmap* justAnOpaqueColor(uint32_t* value) override;
     118             : 
     119             : private:
     120             :     SkBlitter*      fBlitter;
     121             :     const SkAAClip* fAAClip;
     122             :     SkIRect         fAAClipBounds;
     123             : 
     124             :     // point into fScanlineScratch
     125             :     int16_t*        fRuns;
     126             :     SkAlpha*        fAA;
     127             : 
     128             :     enum {
     129             :         kSize = 32 * 32
     130             :     };
     131             :     SkAutoSMalloc<kSize> fGrayMaskScratch;  // used for blitMask
     132             :     void* fScanlineScratch;  // enough for a mask at 32bit, or runs+aa
     133             : 
     134             :     void ensureRunsAndAA();
     135             : };
     136             : 
     137             : #endif

Generated by: LCOV version 1.13