OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 10 matching lines...) Expand all Loading... |
21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | 21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
22 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 22 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
23 */ | 23 */ |
24 | 24 |
25 #include "config.h" | 25 #include "config.h" |
26 | 26 |
27 #include "PlatformContextSkia.h" | 27 #include "PlatformContextSkia.h" |
28 | 28 |
29 #include "BitmapImageSingleFrameSkia.h" | 29 #include "BitmapImageSingleFrameSkia.h" |
30 #include "GraphicsContext.h" | 30 #include "GraphicsContext.h" |
| 31 #include "ImageBuffer.h" |
31 #include "NativeImageSkia.h" | 32 #include "NativeImageSkia.h" |
32 #include "SkCanvas.h" | 33 #include "SkCanvas.h" |
33 #include <gtest/gtest.h> | 34 #include <gtest/gtest.h> |
34 | 35 |
35 using namespace WebCore; | 36 using namespace WebCore; |
36 | 37 |
37 namespace { | 38 namespace { |
38 | 39 |
39 #define EXPECT_EQ_RECT(a, b) \ | 40 #define EXPECT_EQ_RECT(a, b) \ |
40 EXPECT_EQ(a.x(), b.x()); \ | 41 EXPECT_EQ(a.x(), b.x()); \ |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 | 105 |
105 context.fillRect(FloatRect(10, 10, 390, 50), alpha, ColorSpaceDeviceRGB); | 106 context.fillRect(FloatRect(10, 10, 390, 50), alpha, ColorSpaceDeviceRGB); |
106 EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), platformContext.opaqueRegion().asR
ect()); | 107 EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), platformContext.opaqueRegion().asR
ect()); |
107 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); | 108 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); |
108 | 109 |
109 context.fillRect(FloatRect(10, 10, 390, 50), opaque, ColorSpaceDeviceRGB, Co
mpositeSourceOver); | 110 context.fillRect(FloatRect(10, 10, 390, 50), opaque, ColorSpaceDeviceRGB, Co
mpositeSourceOver); |
110 EXPECT_EQ_RECT(IntRect(30, 10, 290, 310), platformContext.opaqueRegion().asR
ect()); | 111 EXPECT_EQ_RECT(IntRect(30, 10, 290, 310), platformContext.opaqueRegion().asR
ect()); |
111 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); | 112 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); |
112 } | 113 } |
113 | 114 |
| 115 TEST(PlatformContextSkiaTest, trackOpaqueClipTest) |
| 116 { |
| 117 SkBitmap bitmap; |
| 118 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); |
| 119 bitmap.allocPixels(); |
| 120 SkCanvas canvas(bitmap); |
| 121 |
| 122 PlatformContextSkia platformContext(&canvas); |
| 123 platformContext.setTrackOpaqueRegion(true); |
| 124 GraphicsContext context(&platformContext); |
| 125 |
| 126 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
| 127 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
| 128 |
| 129 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); |
| 130 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec
t()); |
| 131 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); |
| 132 |
| 133 context.clearRect(FloatRect(10, 10, 90, 90)); |
| 134 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); |
| 135 |
| 136 context.save(); |
| 137 context.clip(FloatRect(0, 0, 10, 10)); |
| 138 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); |
| 139 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); |
| 140 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); |
| 141 context.restore(); |
| 142 |
| 143 context.clearRect(FloatRect(10, 10, 90, 90)); |
| 144 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); |
| 145 |
| 146 context.save(); |
| 147 context.clip(FloatRect(20, 20, 10, 10)); |
| 148 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); |
| 149 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), platformContext.opaqueRegion().asRec
t()); |
| 150 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); |
| 151 |
| 152 context.clearRect(FloatRect(10, 10, 90, 90)); |
| 153 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); |
| 154 |
| 155 // The intersection of the two clips becomes empty. |
| 156 context.clip(FloatRect(30, 20, 10, 10)); |
| 157 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); |
| 158 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); |
| 159 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); |
| 160 context.restore(); |
| 161 |
| 162 context.clearRect(FloatRect(10, 10, 90, 90)); |
| 163 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); |
| 164 |
| 165 Path path; |
| 166 path.moveTo(FloatPoint(0, 0)); |
| 167 path.addLineTo(FloatPoint(100, 0)); |
| 168 |
| 169 // Non-rectangular clips just cause the paint to be considered non-opaque. |
| 170 context.save(); |
| 171 context.clipPath(path, RULE_EVENODD); |
| 172 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); |
| 173 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); |
| 174 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); |
| 175 context.restore(); |
| 176 |
| 177 // Another non-rectangular clip. |
| 178 context.save(); |
| 179 context.clip(IntRect(30, 30, 20, 20)); |
| 180 context.clipOut(IntRect(30, 30, 10, 10)); |
| 181 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); |
| 182 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); |
| 183 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); |
| 184 context.restore(); |
| 185 |
| 186 OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100)); |
| 187 alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha, ColorSpaceDe
viceRGB); |
| 188 |
| 189 // Clipping with a non-opaque Image (there is no way to mark an ImageBuffer
as opaque today). |
| 190 context.save(); |
| 191 context.clipToImageBuffer(alphaImage.get(), FloatRect(30, 30, 10, 10)); |
| 192 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); |
| 193 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); |
| 194 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); |
| 195 context.restore(); |
| 196 } |
| 197 |
114 TEST(PlatformContextSkiaTest, trackOpaqueJoinTest) | 198 TEST(PlatformContextSkiaTest, trackOpaqueJoinTest) |
115 { | 199 { |
116 SkBitmap bitmap; | 200 SkBitmap bitmap; |
117 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); | 201 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); |
118 bitmap.allocPixels(); | 202 bitmap.allocPixels(); |
119 SkCanvas canvas(bitmap); | 203 SkCanvas canvas(bitmap); |
120 | 204 |
121 PlatformContextSkia platformContext(&canvas); | 205 PlatformContextSkia platformContext(&canvas); |
122 platformContext.setTrackOpaqueRegion(true); | 206 platformContext.setTrackOpaqueRegion(true); |
123 GraphicsContext context(&platformContext); | 207 GraphicsContext context(&platformContext); |
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
455 EXPECT_EQ_RECT(IntRect(40, 41, 60, 59), platformContext.opaqueRegion().asRec
t()); | 539 EXPECT_EQ_RECT(IntRect(40, 41, 60, 59), platformContext.opaqueRegion().asRec
t()); |
456 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); | 540 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); |
457 | 541 |
458 context.setFillColor(alpha, ColorSpaceDeviceRGB); | 542 context.setFillColor(alpha, ColorSpaceDeviceRGB); |
459 context.drawEllipse(IntRect(20, 10, 30, 50)); | 543 context.drawEllipse(IntRect(20, 10, 30, 50)); |
460 EXPECT_EQ_RECT(IntRect(51, 41, 49, 59), platformContext.opaqueRegion().asRec
t()); | 544 EXPECT_EQ_RECT(IntRect(51, 41, 49, 59), platformContext.opaqueRegion().asRec
t()); |
461 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); | 545 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); |
462 } | 546 } |
463 | 547 |
464 } // namespace | 548 } // namespace |
OLD | NEW |