blob: 475e38a6a11d50034aebaf1145973dbfd16726df [file] [log] [blame]
joshualitt4eaf9ce2015-04-28 13:31:18 -07001/*
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
joshualitt3f655f32015-04-29 10:01:22 -070011#include "SkTypes.h"
12
13#ifdef GR_TEST_UTILS
14
joshualitt4eaf9ce2015-04-28 13:31:18 -070015#include "GrColor.h"
16#include "SkRandom.h"
joshualitt21279c72015-05-11 07:21:37 -070017#include "SkStrokeRec.h"
joshualitt4eaf9ce2015-04-28 13:31:18 -070018
senorblancob4f9d0e2015-08-06 10:28:55 -070019class GrStrokeInfo;
joshualitt4eaf9ce2015-04-28 13:31:18 -070020class SkMatrix;
joshualitt40ded322015-05-02 07:07:17 -070021class SkPath;
joshualitt3e708c52015-04-30 13:49:27 -070022class SkRRect;
joshualitt3f655f32015-04-29 10:01:22 -070023struct SkRect;
joshualitt4eaf9ce2015-04-28 13:31:18 -070024
25namespace GrTest {
26/**
27 * A helper for use in Test functions.
28 */
29const SkMatrix& TestMatrix(SkRandom*);
joshualittfa2008f2015-04-29 11:32:05 -070030const SkMatrix& TestMatrixPreservesRightAngles(SkRandom*);
joshualitt3e708c52015-04-30 13:49:27 -070031const SkMatrix& TestMatrixRectStaysRect(SkRandom*);
joshualitt2fbd4062015-05-07 13:06:41 -070032const SkMatrix& TestMatrixInvertible(SkRandom*);
joshualitt3f655f32015-04-29 10:01:22 -070033const SkRect& TestRect(SkRandom*);
joshualitt6c891102015-05-13 08:51:49 -070034const SkRect& TestSquare(SkRandom*);
joshualitt3e708c52015-04-30 13:49:27 -070035const SkRRect& TestRRectSimple(SkRandom*);
joshualitt40ded322015-05-02 07:07:17 -070036const SkPath& TestPath(SkRandom*);
joshualitt8e5c1772015-05-11 08:58:52 -070037const SkPath& TestPathConvex(SkRandom*);
joshualitt21279c72015-05-11 07:21:37 -070038SkStrokeRec TestStrokeRec(SkRandom*);
senorblancob4f9d0e2015-08-06 10:28:55 -070039GrStrokeInfo TestStrokeInfo(SkRandom*);
joshualitt4eaf9ce2015-04-28 13:31:18 -070040
41}
42
43static 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));
robertphillips73add932016-04-07 09:01:20 -070054 GrColor color SK_INIT_TO_AVOID_WARNING;
joshualitt4eaf9ce2015-04-28 13:31:18 -070055 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;
joshualitt3f655f32015-04-29 10:01:22 -070068 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);
joshualitt4eaf9ce2015-04-28 13:31:18 -070074 break;
joshualitt3f655f32015-04-29 10:01:22 -070075 }
joshualitt4eaf9ce2015-04-28 13:31:18 -070076 }
77 GrColorIsPMAssert(color);
78 return color;
79}
80
81static 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));
robertphillips73add932016-04-07 09:01:20 -070090 uint8_t coverage SK_INIT_TO_AVOID_WARNING;
joshualitt4eaf9ce2015-04-28 13:31:18 -070091 switch (colorMode) {
92 case kZero_CoverageMode:
93 coverage = 0;
tzikbc7d2352016-01-05 00:35:50 -080094 break;
joshualitt4eaf9ce2015-04-28 13:31:18 -070095 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
joshualitt3f655f32015-04-29 10:01:22 -0700106#endif