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

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

Issue 1618703006: Remove duplicate typedef (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Try to remove spurious dependency Created 4 years, 10 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
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 "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "build/build_config.h" 13 #include "build/build_config.h"
14 #include "skia/ext/platform_device.h" 14 #include "skia/ext/platform_device.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "third_party/skia/include/core/SkBitmap.h" 16 #include "third_party/skia/include/core/SkBitmap.h"
17 #include "third_party/skia/include/core/SkCanvas.h"
17 #include "third_party/skia/include/core/SkColor.h" 18 #include "third_party/skia/include/core/SkColor.h"
18 #include "third_party/skia/include/core/SkColorPriv.h" 19 #include "third_party/skia/include/core/SkColorPriv.h"
19 #include "third_party/skia/include/core/SkPixelRef.h" 20 #include "third_party/skia/include/core/SkPixelRef.h"
20 21
21 #if defined(OS_MACOSX) 22 #if defined(OS_MACOSX)
22 #import <ApplicationServices/ApplicationServices.h> 23 #import <ApplicationServices/ApplicationServices.h>
23 #endif 24 #endif
24 25
25 #if !defined(OS_WIN) 26 #if !defined(OS_WIN)
26 #include <unistd.h> 27 #include <unistd.h>
27 #endif 28 #endif
28 29
29 namespace skia { 30 namespace skia {
30 31
31 namespace { 32 namespace {
32 33
33 bool IsOfColor(const SkBitmap& bitmap, int x, int y, uint32_t color) { 34 bool IsOfColor(const SkBitmap& bitmap, int x, int y, uint32_t color) {
34 // For masking out the alpha values. 35 // For masking out the alpha values.
35 static uint32_t alpha_mask = 36 static uint32_t alpha_mask =
36 static_cast<uint32_t>(SK_A32_MASK) << SK_A32_SHIFT; 37 static_cast<uint32_t>(SK_A32_MASK) << SK_A32_SHIFT;
37 return (*bitmap.getAddr32(x, y) | alpha_mask) == (color | alpha_mask); 38 return (*bitmap.getAddr32(x, y) | alpha_mask) == (color | alpha_mask);
38 } 39 }
39 40
40 // Return true if the canvas is filled to canvas_color, and contains a single 41 // Return true if the canvas is filled to canvas_color, and contains a single
41 // rectangle filled to rect_color. This function ignores the alpha channel, 42 // rectangle filled to rect_color. This function ignores the alpha channel,
42 // since Windows will sometimes clear the alpha channel when drawing, and we 43 // since Windows will sometimes clear the alpha channel when drawing, and we
43 // will fix that up later in cases it's necessary. 44 // will fix that up later in cases it's necessary.
44 bool VerifyRect(const PlatformCanvas& canvas, 45 bool VerifyRect(const SkCanvas& canvas,
45 uint32_t canvas_color, uint32_t rect_color, 46 uint32_t canvas_color, uint32_t rect_color,
46 int x, int y, int w, int h) { 47 int x, int y, int w, int h) {
47 const SkBitmap bitmap = skia::ReadPixels(const_cast<PlatformCanvas*>(&canvas)) ; 48 const SkBitmap bitmap = skia::ReadPixels(const_cast<SkCanvas*>(&canvas));
48 SkAutoLockPixels lock(bitmap); 49 SkAutoLockPixels lock(bitmap);
49 50
50 for (int cur_y = 0; cur_y < bitmap.height(); cur_y++) { 51 for (int cur_y = 0; cur_y < bitmap.height(); cur_y++) {
51 for (int cur_x = 0; cur_x < bitmap.width(); cur_x++) { 52 for (int cur_x = 0; cur_x < bitmap.width(); cur_x++) {
52 if (cur_x >= x && cur_x < x + w && 53 if (cur_x >= x && cur_x < x + w &&
53 cur_y >= y && cur_y < y + h) { 54 cur_y >= y && cur_y < y + h) {
54 // Inside the square should be rect_color 55 // Inside the square should be rect_color
55 if (!IsOfColor(bitmap, cur_x, cur_y, rect_color)) 56 if (!IsOfColor(bitmap, cur_x, cur_y, rect_color))
56 return false; 57 return false;
57 } else { 58 } else {
58 // Outside the square should be canvas_color 59 // Outside the square should be canvas_color
59 if (!IsOfColor(bitmap, cur_x, cur_y, canvas_color)) 60 if (!IsOfColor(bitmap, cur_x, cur_y, canvas_color))
60 return false; 61 return false;
61 } 62 }
62 } 63 }
63 } 64 }
64 return true; 65 return true;
65 } 66 }
66 67
67 #if !defined(USE_AURA) && !defined(OS_MACOSX) 68 #if !defined(USE_AURA) && !defined(OS_MACOSX)
68 // Return true if canvas has something that passes for a rounded-corner 69 // Return true if canvas has something that passes for a rounded-corner
69 // rectangle. Basically, we're just checking to make sure that the pixels in the 70 // rectangle. Basically, we're just checking to make sure that the pixels in the
70 // middle are of rect_color and pixels in the corners are of canvas_color. 71 // middle are of rect_color and pixels in the corners are of canvas_color.
71 bool VerifyRoundedRect(const PlatformCanvas& canvas, 72 bool VerifyRoundedRect(const SkCanvas& canvas,
72 uint32_t canvas_color, 73 uint32_t canvas_color,
73 uint32_t rect_color, 74 uint32_t rect_color,
74 int x, 75 int x,
75 int y, 76 int y,
76 int w, 77 int w,
77 int h) { 78 int h) {
78 SkBaseDevice* device = skia::GetTopDevice(canvas); 79 SkBaseDevice* device = skia::GetTopDevice(canvas);
79 const SkBitmap& bitmap = device->accessBitmap(false); 80 const SkBitmap& bitmap = device->accessBitmap(false);
80 SkAutoLockPixels lock(bitmap); 81 SkAutoLockPixels lock(bitmap);
81 82
82 // Check corner points first. They should be of canvas_color. 83 // Check corner points first. They should be of canvas_color.
83 if (!IsOfColor(bitmap, x, y, canvas_color)) return false; 84 if (!IsOfColor(bitmap, x, y, canvas_color)) return false;
84 if (!IsOfColor(bitmap, x + w, y, canvas_color)) return false; 85 if (!IsOfColor(bitmap, x + w, y, canvas_color)) return false;
85 if (!IsOfColor(bitmap, x, y + h, canvas_color)) return false; 86 if (!IsOfColor(bitmap, x, y + h, canvas_color)) return false;
86 if (!IsOfColor(bitmap, x + w, y, canvas_color)) return false; 87 if (!IsOfColor(bitmap, x + w, y, canvas_color)) return false;
87 88
88 // Check middle points. They should be of rect_color. 89 // Check middle points. They should be of rect_color.
89 if (!IsOfColor(bitmap, (x + w / 2), y, rect_color)) return false; 90 if (!IsOfColor(bitmap, (x + w / 2), y, rect_color)) return false;
90 if (!IsOfColor(bitmap, x, (y + h / 2), rect_color)) return false; 91 if (!IsOfColor(bitmap, x, (y + h / 2), rect_color)) return false;
91 if (!IsOfColor(bitmap, x + w, (y + h / 2), rect_color)) return false; 92 if (!IsOfColor(bitmap, x + w, (y + h / 2), rect_color)) return false;
92 if (!IsOfColor(bitmap, (x + w / 2), y + h, rect_color)) return false; 93 if (!IsOfColor(bitmap, (x + w / 2), y + h, rect_color)) return false;
93 94
94 return true; 95 return true;
95 } 96 }
96 #endif 97 #endif
97 98
98 // Checks whether there is a white canvas with a black square at the given 99 // Checks whether there is a white canvas with a black square at the given
99 // location in pixels (not in the canvas coordinate system). 100 // location in pixels (not in the canvas coordinate system).
100 bool VerifyBlackRect(const PlatformCanvas& canvas, int x, int y, int w, int h) { 101 bool VerifyBlackRect(const SkCanvas& canvas, int x, int y, int w, int h) {
101 return VerifyRect(canvas, SK_ColorWHITE, SK_ColorBLACK, x, y, w, h); 102 return VerifyRect(canvas, SK_ColorWHITE, SK_ColorBLACK, x, y, w, h);
102 } 103 }
103 104
104 #if !defined(USE_AURA) // http://crbug.com/154358 105 #if !defined(USE_AURA) // http://crbug.com/154358
105 // Check that every pixel in the canvas is a single color. 106 // Check that every pixel in the canvas is a single color.
106 bool VerifyCanvasColor(const PlatformCanvas& canvas, uint32_t canvas_color) { 107 bool VerifyCanvasColor(const SkCanvas& canvas, uint32_t canvas_color) {
107 return VerifyRect(canvas, canvas_color, 0, 0, 0, 0, 0); 108 return VerifyRect(canvas, canvas_color, 0, 0, 0, 0, 0);
108 } 109 }
109 #endif // !defined(USE_AURA) 110 #endif // !defined(USE_AURA)
110 111
111 #if defined(OS_WIN) 112 #if defined(OS_WIN)
112 void DrawNativeRect(PlatformCanvas& canvas, int x, int y, int w, int h) { 113 void DrawNativeRect(SkCanvas& canvas, int x, int y, int w, int h) {
113 skia::ScopedPlatformPaint scoped_platform_paint(&canvas); 114 skia::ScopedPlatformPaint scoped_platform_paint(&canvas);
114 HDC dc = scoped_platform_paint.GetPlatformSurface(); 115 HDC dc = scoped_platform_paint.GetPlatformSurface();
115 116
116 RECT inner_rc; 117 RECT inner_rc;
117 inner_rc.left = x; 118 inner_rc.left = x;
118 inner_rc.top = y; 119 inner_rc.top = y;
119 inner_rc.right = x + w; 120 inner_rc.right = x + w;
120 inner_rc.bottom = y + h; 121 inner_rc.bottom = y + h;
121 FillRect(dc, &inner_rc, reinterpret_cast<HBRUSH>(GetStockObject(BLACK_BRUSH))) ; 122 FillRect(dc, &inner_rc, reinterpret_cast<HBRUSH>(GetStockObject(BLACK_BRUSH))) ;
122 } 123 }
123 #elif defined(OS_MACOSX) 124 #elif defined(OS_MACOSX)
124 void DrawNativeRect(PlatformCanvas& canvas, int x, int y, int w, int h) { 125 void DrawNativeRect(SkCanvas& canvas, int x, int y, int w, int h) {
125 skia::ScopedPlatformPaint scoped_platform_paint(&canvas); 126 skia::ScopedPlatformPaint scoped_platform_paint(&canvas);
126 CGContextRef context = scoped_platform_paint.GetPlatformSurface(); 127 CGContextRef context = scoped_platform_paint.GetPlatformSurface();
127 128
128 CGRect inner_rc = CGRectMake(x, y, w, h); 129 CGRect inner_rc = CGRectMake(x, y, w, h);
129 // RGBA opaque black 130 // RGBA opaque black
130 CGColorRef black = CGColorCreateGenericRGB(0.0, 0.0, 0.0, 1.0); 131 CGColorRef black = CGColorCreateGenericRGB(0.0, 0.0, 0.0, 1.0);
131 CGContextSetFillColorWithColor(context, black); 132 CGContextSetFillColorWithColor(context, black);
132 CGColorRelease(black); 133 CGColorRelease(black);
133 CGContextFillRect(context, inner_rc); 134 CGContextFillRect(context, inner_rc);
134 } 135 }
135 #else 136 #else
136 void DrawNativeRect(PlatformCanvas& canvas, int x, int y, int w, int h) { 137 void DrawNativeRect(SkCanvas& canvas, int x, int y, int w, int h) {
137 NOTIMPLEMENTED(); 138 NOTIMPLEMENTED();
138 } 139 }
139 #endif 140 #endif
140 141
141 // Clips the contents of the canvas to the given rectangle. This will be 142 // Clips the contents of the canvas to the given rectangle. This will be
142 // intersected with any existing clip. 143 // intersected with any existing clip.
143 void AddClip(PlatformCanvas& canvas, int x, int y, int w, int h) { 144 void AddClip(SkCanvas& canvas, int x, int y, int w, int h) {
144 SkRect rect; 145 SkRect rect;
145 rect.set(SkIntToScalar(x), SkIntToScalar(y), 146 rect.set(SkIntToScalar(x), SkIntToScalar(y),
146 SkIntToScalar(x + w), SkIntToScalar(y + h)); 147 SkIntToScalar(x + w), SkIntToScalar(y + h));
147 canvas.clipRect(rect); 148 canvas.clipRect(rect);
148 } 149 }
149 150
150 class LayerSaver { 151 class LayerSaver {
151 public: 152 public:
152 LayerSaver(PlatformCanvas& canvas, int x, int y, int w, int h) 153 LayerSaver(SkCanvas& canvas, int x, int y, int w, int h)
153 : canvas_(canvas), 154 : canvas_(canvas),
154 x_(x), 155 x_(x),
155 y_(y), 156 y_(y),
156 w_(w), 157 w_(w),
157 h_(h) { 158 h_(h) {
158 SkRect bounds; 159 SkRect bounds;
159 bounds.set(SkIntToScalar(x_), SkIntToScalar(y_), 160 bounds.set(SkIntToScalar(x_), SkIntToScalar(y_),
160 SkIntToScalar(right()), SkIntToScalar(bottom())); 161 SkIntToScalar(right()), SkIntToScalar(bottom()));
161 canvas_.saveLayer(&bounds, NULL); 162 canvas_.saveLayer(&bounds, NULL);
162 canvas.clear(SkColorSetARGB(0, 0, 0, 0)); 163 canvas.clear(SkColorSetARGB(0, 0, 0, 0));
163 } 164 }
164 165
165 ~LayerSaver() { 166 ~LayerSaver() {
166 canvas_.restore(); 167 canvas_.restore();
167 } 168 }
168 169
169 int x() const { return x_; } 170 int x() const { return x_; }
170 int y() const { return y_; } 171 int y() const { return y_; }
171 int w() const { return w_; } 172 int w() const { return w_; }
172 int h() const { return h_; } 173 int h() const { return h_; }
173 174
174 // Returns the EXCLUSIVE far bounds of the layer. 175 // Returns the EXCLUSIVE far bounds of the layer.
175 int right() const { return x_ + w_; } 176 int right() const { return x_ + w_; }
176 int bottom() const { return y_ + h_; } 177 int bottom() const { return y_ + h_; }
177 178
178 private: 179 private:
179 PlatformCanvas& canvas_; 180 SkCanvas& canvas_;
180 int x_, y_, w_, h_; 181 int x_, y_, w_, h_;
181 }; 182 };
182 183
183 // Size used for making layers in many of the below tests. 184 // Size used for making layers in many of the below tests.
184 const int kLayerX = 2; 185 const int kLayerX = 2;
185 const int kLayerY = 3; 186 const int kLayerY = 3;
186 const int kLayerW = 9; 187 const int kLayerW = 9;
187 const int kLayerH = 7; 188 const int kLayerH = 7;
188 189
189 // Size used by some tests to draw a rectangle inside the layer. 190 // Size used by some tests to draw a rectangle inside the layer.
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 } 393 }
393 canvas->restore(); 394 canvas->restore();
394 EXPECT_TRUE(VerifyRoundedRect(*canvas, SK_ColorWHITE, SK_ColorBLACK, 395 EXPECT_TRUE(VerifyRoundedRect(*canvas, SK_ColorWHITE, SK_ColorBLACK,
395 kInnerX + 1, kInnerY + 1, kInnerW, kInnerH)); 396 kInnerX + 1, kInnerY + 1, kInnerW, kInnerH));
396 #endif 397 #endif
397 } 398 }
398 399
399 #endif // #if !defined(USE_AURA) 400 #endif // #if !defined(USE_AURA)
400 401
401 } // namespace skia 402 } // namespace skia
OLDNEW
« no previous file with comments | « skia/ext/platform_canvas.h ('k') | ui/gfx/blit_unittest.cc » ('j') | ui/gfx/canvas_paint_mac.mm » ('J')

Powered by Google App Engine
This is Rietveld 408576698