Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(425)

Side by Side Diff: skia/ext/platform_canvas_unittest.cc

Issue 2332293003: Start enabling platform_canvas_unittests on Linux (Closed)
Patch Set: make gn consistent, turn on clipping test Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « skia/BUILD.gn ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // TODO(awalker): clean up the const/non-const reference handling in this test 5 // TODO(awalker): clean up the const/non-const reference handling in this test
6 6
7 #include "skia/ext/platform_canvas.h" 7 #include "skia/ext/platform_canvas.h"
8 8
9 #include <stdint.h> 9 #include <stdint.h>
10 10
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "build/build_config.h" 12 #include "build/build_config.h"
13 #include "skia/ext/platform_device.h" 13 #include "skia/ext/platform_device.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "third_party/skia/include/core/SkBitmap.h" 15 #include "third_party/skia/include/core/SkBitmap.h"
16 #include "third_party/skia/include/core/SkCanvas.h" 16 #include "third_party/skia/include/core/SkCanvas.h"
17 #include "third_party/skia/include/core/SkColor.h" 17 #include "third_party/skia/include/core/SkColor.h"
18 #include "third_party/skia/include/core/SkColorPriv.h" 18 #include "third_party/skia/include/core/SkColorPriv.h"
19 #include "third_party/skia/include/core/SkPixelRef.h" 19 #include "third_party/skia/include/core/SkPixelRef.h"
20 20
21 #if defined(OS_MACOSX) 21 #if defined(OS_MACOSX)
22 #import <ApplicationServices/ApplicationServices.h> 22 #import <ApplicationServices/ApplicationServices.h>
23 #endif 23 #endif
24 24
25 #if !defined(OS_WIN) 25 #if !defined(OS_WIN)
26 #include <unistd.h> 26 #include <unistd.h>
27 #endif 27 #endif
28 28
29 #if defined(USE_CAIRO)
30 #if defined(OS_OPENBSD)
31 #include <cairo.h>
32 #else
33 #include <cairo/cairo.h>
34 #endif // OS_OPENBSD
35 #endif // USE_CAIRO
36
29 namespace skia { 37 namespace skia {
30 38
31 namespace { 39 namespace {
32 40
33 #if defined(OS_WIN) 41 #if defined(OS_WIN)
34 void MakeOpaque(SkCanvas* canvas, int x, int y, int width, int height) { 42 void MakeOpaque(SkCanvas* canvas, int x, int y, int width, int height) {
35 if (width <= 0 || height <= 0) 43 if (width <= 0 || height <= 0)
36 return; 44 return;
37 45
38 SkRect rect; 46 SkRect rect;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 return true; 117 return true;
110 } 118 }
111 #endif 119 #endif
112 120
113 // Checks whether there is a white canvas with a black square at the given 121 // Checks whether there is a white canvas with a black square at the given
114 // location in pixels (not in the canvas coordinate system). 122 // location in pixels (not in the canvas coordinate system).
115 bool VerifyBlackRect(const SkCanvas& canvas, int x, int y, int w, int h) { 123 bool VerifyBlackRect(const SkCanvas& canvas, int x, int y, int w, int h) {
116 return VerifyRect(canvas, SK_ColorWHITE, SK_ColorBLACK, x, y, w, h); 124 return VerifyRect(canvas, SK_ColorWHITE, SK_ColorBLACK, x, y, w, h);
117 } 125 }
118 126
119 #if !defined(USE_AURA) // http://crbug.com/154358
120 // Check that every pixel in the canvas is a single color. 127 // Check that every pixel in the canvas is a single color.
121 bool VerifyCanvasColor(const SkCanvas& canvas, uint32_t canvas_color) { 128 bool VerifyCanvasColor(const SkCanvas& canvas, uint32_t canvas_color) {
122 return VerifyRect(canvas, canvas_color, 0, 0, 0, 0, 0); 129 return VerifyRect(canvas, canvas_color, 0, 0, 0, 0, 0);
123 } 130 }
124 #endif // !defined(USE_AURA)
125 131
126 #if defined(OS_WIN) 132 #if defined(OS_WIN)
127 void DrawNativeRect(SkCanvas& canvas, int x, int y, int w, int h) { 133 void DrawNativeRect(SkCanvas& canvas, int x, int y, int w, int h) {
128 skia::ScopedPlatformPaint scoped_platform_paint(&canvas); 134 skia::ScopedPlatformPaint scoped_platform_paint(&canvas);
129 HDC dc = scoped_platform_paint.GetPlatformSurface(); 135 HDC dc = scoped_platform_paint.GetPlatformSurface();
130 136
131 RECT inner_rc; 137 RECT inner_rc;
132 inner_rc.left = x; 138 inner_rc.left = x;
133 inner_rc.top = y; 139 inner_rc.top = y;
134 inner_rc.right = x + w; 140 inner_rc.right = x + w;
135 inner_rc.bottom = y + h; 141 inner_rc.bottom = y + h;
136 FillRect(dc, &inner_rc, reinterpret_cast<HBRUSH>(GetStockObject(BLACK_BRUSH))) ; 142 FillRect(dc, &inner_rc, reinterpret_cast<HBRUSH>(GetStockObject(BLACK_BRUSH))) ;
137 } 143 }
138 #elif defined(OS_MACOSX) 144 #elif defined(OS_MACOSX)
139 void DrawNativeRect(SkCanvas& canvas, int x, int y, int w, int h) { 145 void DrawNativeRect(SkCanvas& canvas, int x, int y, int w, int h) {
140 skia::ScopedPlatformPaint scoped_platform_paint(&canvas); 146 skia::ScopedPlatformPaint scoped_platform_paint(&canvas);
141 CGContextRef context = scoped_platform_paint.GetPlatformSurface(); 147 CGContextRef context = scoped_platform_paint.GetPlatformSurface();
142 148
143 CGRect inner_rc = CGRectMake(x, y, w, h); 149 CGRect inner_rc = CGRectMake(x, y, w, h);
144 // RGBA opaque black 150 // RGBA opaque black
145 CGColorRef black = CGColorCreateGenericRGB(0.0, 0.0, 0.0, 1.0); 151 CGColorRef black = CGColorCreateGenericRGB(0.0, 0.0, 0.0, 1.0);
146 CGContextSetFillColorWithColor(context, black); 152 CGContextSetFillColorWithColor(context, black);
147 CGColorRelease(black); 153 CGColorRelease(black);
148 CGContextFillRect(context, inner_rc); 154 CGContextFillRect(context, inner_rc);
149 } 155 }
156 #elif defined(USE_CAIRO)
157 void DrawNativeRect(SkCanvas& canvas, int x, int y, int w, int h) {
158 skia::ScopedPlatformPaint scoped_platform_paint(&canvas);
159 cairo_t* context = scoped_platform_paint.GetPlatformSurface();
160
161 cairo_rectangle(context, x, y, w, h);
162 cairo_set_source_rgb(context, 0.0, 0.0, 0.0);
163 cairo_fill(context);
164 }
150 #else 165 #else
151 void DrawNativeRect(SkCanvas& canvas, int x, int y, int w, int h) { 166 void DrawNativeRect(SkCanvas& canvas, int x, int y, int w, int h) {
152 NOTIMPLEMENTED(); 167 NOTIMPLEMENTED();
153 } 168 }
154 #endif 169 #endif
155 170
156 // Clips the contents of the canvas to the given rectangle. This will be 171 // Clips the contents of the canvas to the given rectangle. This will be
157 // intersected with any existing clip. 172 // intersected with any existing clip.
158 void AddClip(SkCanvas& canvas, int x, int y, int w, int h) { 173 void AddClip(SkCanvas& canvas, int x, int y, int w, int h) {
159 SkRect rect; 174 SkRect rect;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 233
219 // Make a layer and fill it completely to make sure that the bounds are 234 // Make a layer and fill it completely to make sure that the bounds are
220 // correct. 235 // correct.
221 { 236 {
222 LayerSaver layer(*canvas, kLayerX, kLayerY, kLayerW, kLayerH); 237 LayerSaver layer(*canvas, kLayerX, kLayerY, kLayerW, kLayerH);
223 canvas->drawColor(SK_ColorBLACK); 238 canvas->drawColor(SK_ColorBLACK);
224 } 239 }
225 EXPECT_TRUE(VerifyBlackRect(*canvas, kLayerX, kLayerY, kLayerW, kLayerH)); 240 EXPECT_TRUE(VerifyBlackRect(*canvas, kLayerX, kLayerY, kLayerW, kLayerH));
226 } 241 }
227 242
228 #if !defined(USE_AURA) // http://crbug.com/154358
229 // Test native clipping. 243 // Test native clipping.
230 TEST(PlatformCanvas, ClipRegion) { 244 TEST(PlatformCanvas, ClipRegion) {
231 // Initialize a white canvas 245 // Initialize a white canvas
232 sk_sp<SkCanvas> canvas(CreatePlatformCanvas(16, 16, true)); 246 sk_sp<SkCanvas> canvas(CreatePlatformCanvas(16, 16, true));
233 canvas->drawColor(SK_ColorWHITE); 247 canvas->drawColor(SK_ColorWHITE);
234 EXPECT_TRUE(VerifyCanvasColor(*canvas, SK_ColorWHITE)); 248 EXPECT_TRUE(VerifyCanvasColor(*canvas, SK_ColorWHITE));
235 249
236 // Test that initially the canvas has no clip region, by filling it 250 // Test that initially the canvas has no clip region, by filling it
237 // with a black rectangle. 251 // with a black rectangle.
238 // Note: Don't use LayerSaver, since internally it sets a clip region. 252 // Note: Don't use LayerSaver, since internally it sets a clip region.
239 DrawNativeRect(*canvas, 0, 0, 16, 16); 253 DrawNativeRect(*canvas, 0, 0, 16, 16);
240 EXPECT_TRUE(VerifyCanvasColor(*canvas, SK_ColorBLACK)); 254 EXPECT_TRUE(VerifyCanvasColor(*canvas, SK_ColorBLACK));
241 255
242 // Test that intersecting disjoint clip rectangles sets an empty clip region 256 // Test that intersecting disjoint clip rectangles sets an empty clip region
243 canvas->drawColor(SK_ColorWHITE); 257 canvas->drawColor(SK_ColorWHITE);
244 EXPECT_TRUE(VerifyCanvasColor(*canvas, SK_ColorWHITE)); 258 EXPECT_TRUE(VerifyCanvasColor(*canvas, SK_ColorWHITE));
245 { 259 {
246 LayerSaver layer(*canvas, 0, 0, 16, 16); 260 LayerSaver layer(*canvas, 0, 0, 16, 16);
247 AddClip(*canvas, 2, 3, 4, 5); 261 AddClip(*canvas, 2, 3, 4, 5);
248 AddClip(*canvas, 4, 9, 10, 10); 262 AddClip(*canvas, 4, 9, 10, 10);
249 DrawNativeRect(*canvas, 0, 0, 16, 16); 263 DrawNativeRect(*canvas, 0, 0, 16, 16);
250 } 264 }
251 EXPECT_TRUE(VerifyCanvasColor(*canvas, SK_ColorWHITE)); 265 EXPECT_TRUE(VerifyCanvasColor(*canvas, SK_ColorWHITE));
252 } 266 }
253 #endif // !defined(USE_AURA)
254 267
255 // Test the layers get filled properly by native rendering. 268 // Test the layers get filled properly by native rendering.
256 TEST(PlatformCanvas, FillLayer) { 269 TEST(PlatformCanvas, FillLayer) {
257 // Create the canvas initialized to opaque white. 270 // Create the canvas initialized to opaque white.
258 sk_sp<SkCanvas> canvas(CreatePlatformCanvas(16, 16, true)); 271 sk_sp<SkCanvas> canvas(CreatePlatformCanvas(16, 16, true));
259 272
260 // Make a layer and fill it completely to make sure that the bounds are 273 // Make a layer and fill it completely to make sure that the bounds are
261 // correct. 274 // correct.
262 canvas->drawColor(SK_ColorWHITE); 275 canvas->drawColor(SK_ColorWHITE);
263 { 276 {
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 } 420 }
408 canvas->restore(); 421 canvas->restore();
409 EXPECT_TRUE(VerifyRoundedRect(*canvas, SK_ColorWHITE, SK_ColorBLACK, 422 EXPECT_TRUE(VerifyRoundedRect(*canvas, SK_ColorWHITE, SK_ColorBLACK,
410 kInnerX + 1, kInnerY + 1, kInnerW, kInnerH)); 423 kInnerX + 1, kInnerY + 1, kInnerW, kInnerH));
411 #endif 424 #endif
412 } 425 }
413 426
414 #endif // #if !defined(USE_AURA) 427 #endif // #if !defined(USE_AURA)
415 428
416 } // namespace skia 429 } // namespace skia
OLDNEW
« no previous file with comments | « skia/BUILD.gn ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698