1 /* 2 * Copyright 2015 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 GrTestUtils_DEFINED 9 #define GrTestUtils_DEFINED 10 11 #include "SkTypes.h" 12 13 #ifdef GR_TEST_UTILS 14 15 #include "GrColor.h" 16 #include "SkRandom.h" 17 #include "SkStrokeRec.h" 18 19 class GrStrokeInfo; 20 class SkMatrix; 21 class SkPath; 22 class SkRRect; 23 struct SkRect; 24 25 namespace GrTest { 26 /** 27 * A helper for use in Test functions. 28 */ 29 const SkMatrix& TestMatrix(SkRandom*); 30 const SkMatrix& TestMatrixPreservesRightAngles(SkRandom*); 31 const SkMatrix& TestMatrixRectStaysRect(SkRandom*); 32 const SkMatrix& TestMatrixInvertible(SkRandom*); 33 const SkRect& TestRect(SkRandom*); 34 const SkRect& TestSquare(SkRandom*); 35 const SkRRect& TestRRectSimple(SkRandom*); 36 const SkPath& TestPath(SkRandom*); 37 const SkPath& TestPathConvex(SkRandom*); 38 SkStrokeRec TestStrokeRec(SkRandom*); 39 GrStrokeInfo TestStrokeInfo(SkRandom*); 40 41 } 42 43 static inline GrColor GrRandomColor(SkRandom* random) { 44 // There are only a few cases of random colors which interest us 45 enum ColorMode { 46 kAllOnes_ColorMode, 47 kAllZeros_ColorMode, 48 kAlphaOne_ColorMode, 49 kRandom_ColorMode, 50 kLast_ColorMode = kRandom_ColorMode 51 }; 52 53 ColorMode colorMode = ColorMode(random->nextULessThan(kLast_ColorMode + 1)); 54 GrColor color; 55 switch (colorMode) { 56 case kAllOnes_ColorMode: 57 color = GrColorPackRGBA(0xFF, 0xFF, 0xFF, 0xFF); 58 break; 59 case kAllZeros_ColorMode: 60 color = GrColorPackRGBA(0, 0, 0, 0); 61 break; 62 case kAlphaOne_ColorMode: 63 color = GrColorPackRGBA(random->nextULessThan(256), 64 random->nextULessThan(256), 65 random->nextULessThan(256), 66 0xFF); 67 break; 68 case kRandom_ColorMode: { 69 uint8_t alpha = random->nextULessThan(256); 70 color = GrColorPackRGBA(random->nextRangeU(0, alpha), 71 random->nextRangeU(0, alpha), 72 random->nextRangeU(0, alpha), 73 alpha); 74 break; 75 } 76 } 77 GrColorIsPMAssert(color); 78 return color; 79 } 80 81 static inline uint8_t GrRandomCoverage(SkRandom* random) { 82 enum CoverageMode { 83 kZero_CoverageMode, 84 kAllOnes_CoverageMode, 85 kRandom_CoverageMode, 86 kLast_CoverageMode = kRandom_CoverageMode 87 }; 88 89 CoverageMode colorMode = CoverageMode(random->nextULessThan(kLast_CoverageMode + 1)); 90 uint8_t coverage; 91 switch (colorMode) { 92 case kZero_CoverageMode: 93 coverage = 0; 94 break; 95 case kAllOnes_CoverageMode: 96 coverage = 0xff; 97 break; 98 case kRandom_CoverageMode: 99 coverage = random->nextULessThan(256); 100 break; 101 } 102 return coverage; 103 } 104 105 #endif 106 #endif 107