LCOV - code coverage report
Current view: top level - gfx/skia/skia/src/pathops - SkPathOpsQuad.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 23 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 9 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright 2012 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 SkPathOpsQuad_DEFINED
       9             : #define SkPathOpsQuad_DEFINED
      10             : 
      11             : #include "SkPathOpsPoint.h"
      12             : 
      13             : struct SkOpCurve;
      14             : 
      15             : struct SkDQuadPair {
      16             :     const SkDQuad& first() const { return (const SkDQuad&) pts[0]; }
      17             :     const SkDQuad& second() const { return (const SkDQuad&) pts[2]; }
      18             :     SkDPoint pts[5];
      19             : };
      20             : 
      21             : struct SkDQuad {
      22             :     static const int kPointCount = 3;
      23             :     static const int kPointLast = kPointCount - 1;
      24             :     static const int kMaxIntersections = 4;
      25             : 
      26             :     SkDPoint fPts[kPointCount];
      27             : 
      28           0 :     bool collapsed() const {
      29           0 :         return fPts[0].approximatelyEqual(fPts[1]) && fPts[0].approximatelyEqual(fPts[2]);
      30             :     }
      31             : 
      32           0 :     bool controlsInside() const {
      33           0 :         SkDVector v01 = fPts[0] - fPts[1];
      34           0 :         SkDVector v02 = fPts[0] - fPts[2];
      35           0 :         SkDVector v12 = fPts[1] - fPts[2];
      36           0 :         return v02.dot(v01) > 0 && v02.dot(v12) > 0;
      37             :     }
      38             : 
      39           0 :     void debugInit() {
      40           0 :         sk_bzero(fPts, sizeof(fPts));
      41           0 :     }
      42             : 
      43             :     void debugSet(const SkDPoint* pts);
      44             : 
      45             :     SkDQuad flip() const {
      46             :         SkDQuad result = {{fPts[2], fPts[1], fPts[0]}  SkDEBUGPARAMS(fDebugGlobalState) };
      47             :         return result;
      48             :     }
      49             : 
      50           0 :     static bool IsConic() { return false; }
      51             : 
      52           0 :     const SkDQuad& set(const SkPoint pts[kPointCount]
      53             :             SkDEBUGPARAMS(SkOpGlobalState* state = nullptr)) {
      54           0 :         fPts[0] = pts[0];
      55           0 :         fPts[1] = pts[1];
      56           0 :         fPts[2] = pts[2];
      57           0 :         SkDEBUGCODE(fDebugGlobalState = state);
      58           0 :         return *this;
      59             :     }
      60             : 
      61           0 :     const SkDPoint& operator[](int n) const { SkASSERT(n >= 0 && n < kPointCount); return fPts[n]; }
      62           0 :     SkDPoint& operator[](int n) { SkASSERT(n >= 0 && n < kPointCount); return fPts[n]; }
      63             : 
      64             :     static int AddValidTs(double s[], int realRoots, double* t);
      65             :     void align(int endIndex, SkDPoint* dstPt) const;
      66             :     SkDQuadPair chopAt(double t) const;
      67             :     SkDVector dxdyAtT(double t) const;
      68             :     static int FindExtrema(const double src[], double tValue[1]);
      69             : 
      70             : #ifdef SK_DEBUG
      71           0 :     SkOpGlobalState* globalState() const { return fDebugGlobalState; }
      72             : #endif
      73             : 
      74             :     /**
      75             :      *  Return the number of valid roots (0 < root < 1) for this cubic intersecting the
      76             :      *  specified horizontal line.
      77             :      */
      78             :     int horizontalIntersect(double yIntercept, double roots[2]) const;
      79             : 
      80             :     bool hullIntersects(const SkDQuad& , bool* isLinear) const;
      81             :     bool hullIntersects(const SkDConic& , bool* isLinear) const;
      82             :     bool hullIntersects(const SkDCubic& , bool* isLinear) const;
      83             :     bool isLinear(int startIndex, int endIndex) const;
      84             :     bool monotonicInX() const;
      85             :     bool monotonicInY() const;
      86             :     void otherPts(int oddMan, const SkDPoint* endPt[2]) const;
      87             :     SkDPoint ptAtT(double t) const;
      88             :     static int RootsReal(double A, double B, double C, double t[2]);
      89             :     static int RootsValidT(const double A, const double B, const double C, double s[2]);
      90             :     static void SetABC(const double* quad, double* a, double* b, double* c);
      91             :     SkDQuad subDivide(double t1, double t2) const;
      92             :     static SkDQuad SubDivide(const SkPoint a[kPointCount], double t1, double t2) {
      93             :         SkDQuad quad;
      94             :         quad.set(a);
      95             :         return quad.subDivide(t1, t2);
      96             :     }
      97             :     SkDPoint subDivide(const SkDPoint& a, const SkDPoint& c, double t1, double t2) const;
      98           0 :     static SkDPoint SubDivide(const SkPoint pts[kPointCount], const SkDPoint& a, const SkDPoint& c,
      99             :                               double t1, double t2) {
     100             :         SkDQuad quad;
     101           0 :         quad.set(pts);
     102           0 :         return quad.subDivide(a, c, t1, t2);
     103             :     }
     104             : 
     105             :     /**
     106             :      *  Return the number of valid roots (0 < root < 1) for this cubic intersecting the
     107             :      *  specified vertical line.
     108             :      */
     109             :     int verticalIntersect(double xIntercept, double roots[2]) const;
     110             : 
     111             :     SkDCubic debugToCubic() const;
     112             :     // utilities callable by the user from the debugger when the implementation code is linked in
     113             :     void dump() const;
     114             :     void dumpID(int id) const;
     115             :     void dumpInner() const;
     116             : 
     117             :     SkDEBUGCODE(SkOpGlobalState* fDebugGlobalState);
     118             : };
     119             : 
     120             : #endif

Generated by: LCOV version 1.13