| Index: gm/hardstop_gradients.cpp
|
| diff --git a/gm/hardstop_gradients.cpp b/gm/hardstop_gradients.cpp
|
| index c1baa2f1c652002ae9920092292239a59ece1070..846465ec19d7cde3a34b53024077c90517b75c7f 100644
|
| --- a/gm/hardstop_gradients.cpp
|
| +++ b/gm/hardstop_gradients.cpp
|
| @@ -14,16 +14,25 @@
|
| * order to highlight the differences between tile modes, the gradient
|
| * starts and ends at 30 pixel inset from either side of the rectangle.
|
| *
|
| - * | Clamp Repeat Mirror
|
| - * _____________________|___________________________________________
|
| - * 2-color | rect00 rect01 rect02
|
| - * 3-color | rect10 rect11 rect12
|
| - * 5-color hard stop | rect20 rect21 rect22
|
| - * 5-color edge case 1 | rect30 rect31 rect32
|
| - * 5-color edge case 2 | rect40 rect41 rect42
|
| + * | Clamp Repeat Mirror
|
| + * ___________________________|___________________________________________
|
| + * 2-color | rect00 rect01 rect02
|
| + * 3-color even | rect10 rect11 rect12
|
| + * 3-color texture | rect20 rect21 rect22
|
| + * 5-color hard stop | rect30 rect31 rect32
|
| + * 4-color hard stop centered | rect40 rect41 rect42
|
| + * 3-color hard stop 001 | rect50 rect51 rect52
|
| + * 3-color hard stop 011 | rect60 rect61 rect62
|
| *
|
| - * The LAST two t-values in edge case 1 are the same, while the FIRST
|
| - * two t-values in edge case 2 are the same.
|
| + * The first three rows are cases covered by pre-hard-stop code; simple
|
| + * 2-color gradients, 3-color gradients with the middle color centered,
|
| + * and general gradients that are rendered from a texture atlas.
|
| + *
|
| + * The next four rows all deal with hard stop gradients. The fourth row
|
| + * is a generic hard stop gradient, while the three subsequent rows deal
|
| + * with special cases of hard stop gradients; centered hard stop gradients
|
| + * (with t-values 0, 0.5, 0.5, 1), and two edge cases (with t-values
|
| + * 0, 0, 1 and 0, 1, 1).
|
| */
|
|
|
| #include "gm.h"
|
| @@ -33,7 +42,7 @@
|
| const int WIDTH = 500;
|
| const int HEIGHT = 500;
|
|
|
| -const int NUM_ROWS = 5;
|
| +const int NUM_ROWS = 7;
|
| const int NUM_COLS = 3;
|
|
|
| const int CELL_WIDTH = WIDTH / NUM_COLS;
|
| @@ -60,9 +69,9 @@ static void shade_rect(SkCanvas* canvas, sk_sp<SkShader> shader, int cellRow, in
|
| static void create_gradient_points(int cellRow, int cellCol, SkPoint points[2]) {
|
| const int X_OFFSET = 30;
|
|
|
| - auto x0 = SkIntToScalar(cellCol * CELL_WIDTH + PAD_WIDTH + X_OFFSET);
|
| - auto x1 = SkIntToScalar((cellCol+1) * CELL_WIDTH - PAD_WIDTH - X_OFFSET);
|
| - auto y = SkIntToScalar(cellRow * CELL_HEIGHT + PAD_HEIGHT + RECT_HEIGHT/2);
|
| + auto x0 = SkIntToScalar(cellCol * CELL_WIDTH + PAD_WIDTH + X_OFFSET);
|
| + auto x1 = SkIntToScalar((cellCol+1) * CELL_WIDTH - PAD_WIDTH - X_OFFSET);
|
| + auto y = SkIntToScalar(cellRow * CELL_HEIGHT + PAD_HEIGHT + RECT_HEIGHT/2);
|
|
|
| points[0] = SkPoint::Make(x0, y);
|
| points[1] = SkPoint::Make(x1, y);
|
| @@ -94,27 +103,33 @@ protected:
|
| SK_ColorMAGENTA,
|
| };
|
|
|
| - SkScalar row3[] = {0.00f, 0.25f, 0.50f, 0.50f, 1.00f};
|
| - SkScalar row4[] = {0.00f, 0.25f, 0.50f, 1.00f, 1.00f};
|
| - SkScalar row5[] = {0.00f, 0.00f, 0.50f, 0.50f, 1.00f};
|
| + SkScalar row3[] = {0.00f, 0.25f, 1.00f};
|
| + SkScalar row4[] = {0.00f, 0.25f, 0.50f, 0.50f, 1.00f};
|
| + SkScalar row5[] = {0.00f, 0.50f, 0.50f, 1.00f};
|
| + SkScalar row6[] = {0.00f, 0.00f, 1.00f};
|
| + SkScalar row7[] = {0.00f, 1.00f, 1.00f};
|
|
|
| - SkScalar* positions[] = {
|
| + SkScalar* positions[NUM_ROWS] = {
|
| nullptr,
|
| nullptr,
|
| row3,
|
| row4,
|
| row5,
|
| + row6,
|
| + row7,
|
| };
|
|
|
| - int numGradientColors[] = {
|
| + int numGradientColors[NUM_ROWS] = {
|
| 2,
|
| 3,
|
| + 3,
|
| 5,
|
| - 5,
|
| - 5,
|
| + 4,
|
| + 3,
|
| + 3,
|
| };
|
|
|
| - SkShader::TileMode tilemodes[] = {
|
| + SkShader::TileMode tilemodes[NUM_COLS] = {
|
| SkShader::kClamp_TileMode,
|
| SkShader::kRepeat_TileMode,
|
| SkShader::kMirror_TileMode,
|
|
|