| 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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 bitmap.allocPixels(); | 69 bitmap.allocPixels(); |
| 70 bitmap.eraseColor(0); | 70 bitmap.eraseColor(0); |
| 71 SkCanvas canvas(bitmap); | 71 SkCanvas canvas(bitmap); |
| 72 | 72 |
| 73 GraphicsContext context(&canvas); | 73 GraphicsContext context(&canvas); |
| 74 context.setTrackOpaqueRegion(true); | 74 context.setTrackOpaqueRegion(true); |
| 75 | 75 |
| 76 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); | 76 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
| 77 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); | 77 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
| 78 | 78 |
| 79 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 79 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 80 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 80 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 81 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 81 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 82 | 82 |
| 83 context.fillRect(FloatRect(10, 10, 90, 90), alpha, ColorSpaceDeviceRGB, Comp
ositeSourceOver); | 83 context.fillRect(FloatRect(10, 10, 90, 90), alpha, CompositeSourceOver); |
| 84 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 84 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 85 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 85 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 86 | 86 |
| 87 context.fillRect(FloatRect(99, 13, 10, 90), opaque, ColorSpaceDeviceRGB, Com
positePlusLighter); | 87 context.fillRect(FloatRect(99, 13, 10, 90), opaque, CompositePlusLighter); |
| 88 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 88 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 89 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 89 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 90 | 90 |
| 91 context.fillRect(FloatRect(99, 13, 10, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceIn); | 91 context.fillRect(FloatRect(99, 13, 10, 90), opaque, CompositeSourceIn); |
| 92 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 92 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 93 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 93 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 94 | 94 |
| 95 context.fillRect(FloatRect(99, 13, 10, 90), alpha, ColorSpaceDeviceRGB, Comp
ositeSourceIn); | 95 context.fillRect(FloatRect(99, 13, 10, 90), alpha, CompositeSourceIn); |
| 96 EXPECT_EQ_RECT(IntRect(10, 10, 89, 90), context.opaqueRegion().asRect()); | 96 EXPECT_EQ_RECT(IntRect(10, 10, 89, 90), context.opaqueRegion().asRect()); |
| 97 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 97 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 98 | 98 |
| 99 context.fillRect(FloatRect(8, 8, 3, 90), opaque, ColorSpaceDeviceRGB, Compos
iteSourceOut); | 99 context.fillRect(FloatRect(8, 8, 3, 90), opaque, CompositeSourceOut); |
| 100 EXPECT_EQ_RECT(IntRect(11, 10, 88, 90), context.opaqueRegion().asRect()); | 100 EXPECT_EQ_RECT(IntRect(11, 10, 88, 90), context.opaqueRegion().asRect()); |
| 101 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 101 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 102 | 102 |
| 103 context.fillRect(FloatRect(30, 30, 290, 290), opaque, ColorSpaceDeviceRGB, C
ompositeSourceOver); | 103 context.fillRect(FloatRect(30, 30, 290, 290), opaque, CompositeSourceOver); |
| 104 EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), context.opaqueRegion().asRect()); | 104 EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), context.opaqueRegion().asRect()); |
| 105 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 105 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 106 | 106 |
| 107 context.fillRect(FloatRect(40, 20, 290, 50), opaque, ColorSpaceDeviceRGB, Co
mpositeSourceOver); | 107 context.fillRect(FloatRect(40, 20, 290, 50), opaque, CompositeSourceOver); |
| 108 EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), context.opaqueRegion().asRect()); | 108 EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), context.opaqueRegion().asRect()); |
| 109 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 109 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 110 | 110 |
| 111 context.fillRect(FloatRect(10, 10, 390, 50), opaque, ColorSpaceDeviceRGB, Co
mpositeSourceIn); | 111 context.fillRect(FloatRect(10, 10, 390, 50), opaque, CompositeSourceIn); |
| 112 EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), context.opaqueRegion().asRect()); | 112 EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), context.opaqueRegion().asRect()); |
| 113 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 113 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 114 | 114 |
| 115 context.fillRect(FloatRect(10, 10, 390, 50), alpha, ColorSpaceDeviceRGB); | 115 context.fillRect(FloatRect(10, 10, 390, 50), alpha); |
| 116 EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), context.opaqueRegion().asRect()); | 116 EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), context.opaqueRegion().asRect()); |
| 117 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 117 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 118 | 118 |
| 119 context.fillRect(FloatRect(10, 10, 390, 50), opaque, ColorSpaceDeviceRGB, Co
mpositeSourceOver); | 119 context.fillRect(FloatRect(10, 10, 390, 50), opaque, CompositeSourceOver); |
| 120 EXPECT_EQ_RECT(IntRect(30, 10, 290, 310), context.opaqueRegion().asRect()); | 120 EXPECT_EQ_RECT(IntRect(30, 10, 290, 310), context.opaqueRegion().asRect()); |
| 121 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 121 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 122 } | 122 } |
| 123 | 123 |
| 124 TEST(PlatformContextSkiaTest, trackOpaqueClipTest) | 124 TEST(PlatformContextSkiaTest, trackOpaqueClipTest) |
| 125 { | 125 { |
| 126 SkBitmap bitmap; | 126 SkBitmap bitmap; |
| 127 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); | 127 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); |
| 128 bitmap.allocPixels(); | 128 bitmap.allocPixels(); |
| 129 SkCanvas canvas(bitmap); | 129 SkCanvas canvas(bitmap); |
| 130 | 130 |
| 131 GraphicsContext context(&canvas); | 131 GraphicsContext context(&canvas); |
| 132 context.setTrackOpaqueRegion(true); | 132 context.setTrackOpaqueRegion(true); |
| 133 | 133 |
| 134 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); | 134 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
| 135 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); | 135 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
| 136 | 136 |
| 137 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 137 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 138 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 138 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 139 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 139 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 140 | 140 |
| 141 context.clearRect(FloatRect(10, 10, 90, 90)); | 141 context.clearRect(FloatRect(10, 10, 90, 90)); |
| 142 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); | 142 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
| 143 | 143 |
| 144 context.save(); | 144 context.save(); |
| 145 context.clip(FloatRect(0, 0, 10, 10)); | 145 context.clip(FloatRect(0, 0, 10, 10)); |
| 146 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 146 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 147 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); | 147 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
| 148 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 148 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 149 context.restore(); | 149 context.restore(); |
| 150 | 150 |
| 151 context.clearRect(FloatRect(10, 10, 90, 90)); | 151 context.clearRect(FloatRect(10, 10, 90, 90)); |
| 152 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); | 152 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
| 153 | 153 |
| 154 context.save(); | 154 context.save(); |
| 155 context.clip(FloatRect(20, 20, 10, 10)); | 155 context.clip(FloatRect(20, 20, 10, 10)); |
| 156 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 156 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 157 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), context.opaqueRegion().asRect()); | 157 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), context.opaqueRegion().asRect()); |
| 158 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 158 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 159 | 159 |
| 160 context.clearRect(FloatRect(10, 10, 90, 90)); | 160 context.clearRect(FloatRect(10, 10, 90, 90)); |
| 161 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); | 161 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
| 162 | 162 |
| 163 // The intersection of the two clips becomes empty. | 163 // The intersection of the two clips becomes empty. |
| 164 context.clip(FloatRect(30, 20, 10, 10)); | 164 context.clip(FloatRect(30, 20, 10, 10)); |
| 165 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 165 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 166 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); | 166 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
| 167 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 167 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 168 context.restore(); | 168 context.restore(); |
| 169 | 169 |
| 170 context.clearRect(FloatRect(10, 10, 90, 90)); | 170 context.clearRect(FloatRect(10, 10, 90, 90)); |
| 171 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); | 171 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
| 172 | 172 |
| 173 // The transform and the clip need to interact correctly (transform first) | 173 // The transform and the clip need to interact correctly (transform first) |
| 174 context.save(); | 174 context.save(); |
| 175 context.translate(10, 10); | 175 context.translate(10, 10); |
| 176 context.clip(FloatRect(20, 20, 10, 10)); | 176 context.clip(FloatRect(20, 20, 10, 10)); |
| 177 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 177 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 178 EXPECT_EQ_RECT(IntRect(30, 30, 10, 10), context.opaqueRegion().asRect()); | 178 EXPECT_EQ_RECT(IntRect(30, 30, 10, 10), context.opaqueRegion().asRect()); |
| 179 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 179 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 180 context.restore(); | 180 context.restore(); |
| 181 | 181 |
| 182 context.clearRect(FloatRect(10, 10, 90, 90)); | 182 context.clearRect(FloatRect(10, 10, 90, 90)); |
| 183 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); | 183 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
| 184 | 184 |
| 185 // The transform and the clip need to interact correctly (clip first) | 185 // The transform and the clip need to interact correctly (clip first) |
| 186 context.save(); | 186 context.save(); |
| 187 context.clip(FloatRect(20, 20, 10, 10)); | 187 context.clip(FloatRect(20, 20, 10, 10)); |
| 188 context.translate(10, 10); | 188 context.translate(10, 10); |
| 189 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 189 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 190 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), context.opaqueRegion().asRect()); | 190 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), context.opaqueRegion().asRect()); |
| 191 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 191 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 192 context.restore(); | 192 context.restore(); |
| 193 | 193 |
| 194 context.clearRect(FloatRect(10, 10, 90, 90)); | 194 context.clearRect(FloatRect(10, 10, 90, 90)); |
| 195 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); | 195 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
| 196 | 196 |
| 197 Path path; | 197 Path path; |
| 198 path.moveTo(FloatPoint(0, 0)); | 198 path.moveTo(FloatPoint(0, 0)); |
| 199 path.addLineTo(FloatPoint(100, 0)); | 199 path.addLineTo(FloatPoint(100, 0)); |
| 200 | 200 |
| 201 // Non-rectangular clips just cause the paint to be considered non-opaque. | 201 // Non-rectangular clips just cause the paint to be considered non-opaque. |
| 202 context.save(); | 202 context.save(); |
| 203 context.clipPath(path, RULE_EVENODD); | 203 context.clipPath(path, RULE_EVENODD); |
| 204 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 204 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 205 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); | 205 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
| 206 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 206 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 207 context.restore(); | 207 context.restore(); |
| 208 | 208 |
| 209 // Another non-rectangular clip. | 209 // Another non-rectangular clip. |
| 210 context.save(); | 210 context.save(); |
| 211 context.clip(IntRect(30, 30, 20, 20)); | 211 context.clip(IntRect(30, 30, 20, 20)); |
| 212 context.clipOut(IntRect(30, 30, 10, 10)); | 212 context.clipOut(IntRect(30, 30, 10, 10)); |
| 213 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 213 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 214 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); | 214 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
| 215 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 215 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 216 context.restore(); | 216 context.restore(); |
| 217 | 217 |
| 218 OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100)); | 218 OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100)); |
| 219 alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha, ColorSpaceDe
viceRGB); | 219 alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha); |
| 220 | 220 |
| 221 // Clipping with a non-opaque Image (there is no way to mark an ImageBuffer
as opaque today). | 221 // Clipping with a non-opaque Image (there is no way to mark an ImageBuffer
as opaque today). |
| 222 context.save(); | 222 context.save(); |
| 223 context.clipToImageBuffer(alphaImage.get(), FloatRect(30, 30, 10, 10)); | 223 context.clipToImageBuffer(alphaImage.get(), FloatRect(30, 30, 10, 10)); |
| 224 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 224 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 225 context.restore(); | 225 context.restore(); |
| 226 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); | 226 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
| 227 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 227 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 228 } | 228 } |
| 229 | 229 |
| 230 TEST(PlatformContextSkiaTest, trackImageMask) | 230 TEST(PlatformContextSkiaTest, trackImageMask) |
| 231 { | 231 { |
| 232 SkBitmap bitmap; | 232 SkBitmap bitmap; |
| 233 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); | 233 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); |
| 234 bitmap.allocPixels(); | 234 bitmap.allocPixels(); |
| 235 bitmap.eraseColor(0); | 235 bitmap.eraseColor(0); |
| 236 SkCanvas canvas(bitmap); | 236 SkCanvas canvas(bitmap); |
| 237 | 237 |
| 238 GraphicsContext context(&canvas); | 238 GraphicsContext context(&canvas); |
| 239 context.setTrackOpaqueRegion(true); | 239 context.setTrackOpaqueRegion(true); |
| 240 | 240 |
| 241 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); | 241 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
| 242 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); | 242 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
| 243 | 243 |
| 244 // Image masks are done by drawing a bitmap into a transparency layer that u
ses DstIn to mask | 244 // Image masks are done by drawing a bitmap into a transparency layer that u
ses DstIn to mask |
| 245 // out a transparency layer below that is filled with the mask color. In the
end this should | 245 // out a transparency layer below that is filled with the mask color. In the
end this should |
| 246 // not be marked opaque. | 246 // not be marked opaque. |
| 247 | 247 |
| 248 context.setCompositeOperation(CompositeSourceOver); | 248 context.setCompositeOperation(CompositeSourceOver); |
| 249 context.beginTransparencyLayer(1); | 249 context.beginTransparencyLayer(1); |
| 250 context.fillRect(FloatRect(10, 10, 10, 10), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 250 context.fillRect(FloatRect(10, 10, 10, 10), opaque, CompositeSourceOver); |
| 251 | 251 |
| 252 context.setCompositeOperation(CompositeDestinationIn); | 252 context.setCompositeOperation(CompositeDestinationIn); |
| 253 context.beginTransparencyLayer(1); | 253 context.beginTransparencyLayer(1); |
| 254 | 254 |
| 255 OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100)); | 255 OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100)); |
| 256 alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha, ColorSpaceDe
viceRGB); | 256 alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha); |
| 257 | 257 |
| 258 context.setCompositeOperation(CompositeSourceOver); | 258 context.setCompositeOperation(CompositeSourceOver); |
| 259 context.drawImageBuffer(alphaImage.get(), ColorSpaceDeviceRGB, FloatRect(10,
10, 10, 10)); | 259 context.drawImageBuffer(alphaImage.get(), FloatRect(10, 10, 10, 10)); |
| 260 | 260 |
| 261 context.endTransparencyLayer(); | 261 context.endTransparencyLayer(); |
| 262 context.endTransparencyLayer(); | 262 context.endTransparencyLayer(); |
| 263 | 263 |
| 264 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); | 264 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
| 265 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); | 265 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); |
| 266 } | 266 } |
| 267 | 267 |
| 268 TEST(PlatformContextSkiaTest, trackImageMaskWithOpaqueRect) | 268 TEST(PlatformContextSkiaTest, trackImageMaskWithOpaqueRect) |
| 269 { | 269 { |
| 270 SkBitmap bitmap; | 270 SkBitmap bitmap; |
| 271 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); | 271 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); |
| 272 bitmap.allocPixels(); | 272 bitmap.allocPixels(); |
| 273 bitmap.eraseColor(0); | 273 bitmap.eraseColor(0); |
| 274 SkCanvas canvas(bitmap); | 274 SkCanvas canvas(bitmap); |
| 275 | 275 |
| 276 GraphicsContext context(&canvas); | 276 GraphicsContext context(&canvas); |
| 277 context.setTrackOpaqueRegion(true); | 277 context.setTrackOpaqueRegion(true); |
| 278 | 278 |
| 279 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); | 279 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
| 280 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); | 280 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
| 281 | 281 |
| 282 // Image masks are done by drawing a bitmap into a transparency layer that u
ses DstIn to mask | 282 // Image masks are done by drawing a bitmap into a transparency layer that u
ses DstIn to mask |
| 283 // out a transparency layer below that is filled with the mask color. In the
end this should | 283 // out a transparency layer below that is filled with the mask color. In the
end this should |
| 284 // not be marked opaque. | 284 // not be marked opaque. |
| 285 | 285 |
| 286 context.setCompositeOperation(CompositeSourceOver); | 286 context.setCompositeOperation(CompositeSourceOver); |
| 287 context.beginTransparencyLayer(1); | 287 context.beginTransparencyLayer(1); |
| 288 context.fillRect(FloatRect(10, 10, 10, 10), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 288 context.fillRect(FloatRect(10, 10, 10, 10), opaque, CompositeSourceOver); |
| 289 | 289 |
| 290 context.setCompositeOperation(CompositeDestinationIn); | 290 context.setCompositeOperation(CompositeDestinationIn); |
| 291 context.beginTransparencyLayer(1); | 291 context.beginTransparencyLayer(1); |
| 292 | 292 |
| 293 OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100)); | 293 OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100)); |
| 294 alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha, ColorSpaceDe
viceRGB); | 294 alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha); |
| 295 | 295 |
| 296 context.setCompositeOperation(CompositeSourceOver); | 296 context.setCompositeOperation(CompositeSourceOver); |
| 297 context.drawImageBuffer(alphaImage.get(), ColorSpaceDeviceRGB, FloatRect(10,
10, 10, 10)); | 297 context.drawImageBuffer(alphaImage.get(), FloatRect(10, 10, 10, 10)); |
| 298 | 298 |
| 299 // We can't have an opaque mask actually, but we can pretend here like it wo
uld look if we did. | 299 // We can't have an opaque mask actually, but we can pretend here like it wo
uld look if we did. |
| 300 context.fillRect(FloatRect(12, 12, 3, 3), opaque, ColorSpaceDeviceRGB, Compo
siteSourceOver); | 300 context.fillRect(FloatRect(12, 12, 3, 3), opaque, CompositeSourceOver); |
| 301 | 301 |
| 302 context.endTransparencyLayer(); | 302 context.endTransparencyLayer(); |
| 303 context.endTransparencyLayer(); | 303 context.endTransparencyLayer(); |
| 304 | 304 |
| 305 EXPECT_EQ_RECT(IntRect(12, 12, 3, 3), context.opaqueRegion().asRect()); | 305 EXPECT_EQ_RECT(IntRect(12, 12, 3, 3), context.opaqueRegion().asRect()); |
| 306 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); | 306 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); |
| 307 } | 307 } |
| 308 | 308 |
| 309 TEST(PlatformContextSkiaTest, trackOpaqueJoinTest) | 309 TEST(PlatformContextSkiaTest, trackOpaqueJoinTest) |
| 310 { | 310 { |
| 311 SkBitmap bitmap; | 311 SkBitmap bitmap; |
| 312 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); | 312 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); |
| 313 bitmap.allocPixels(); | 313 bitmap.allocPixels(); |
| 314 SkCanvas canvas(bitmap); | 314 SkCanvas canvas(bitmap); |
| 315 | 315 |
| 316 GraphicsContext context(&canvas); | 316 GraphicsContext context(&canvas); |
| 317 context.setTrackOpaqueRegion(true); | 317 context.setTrackOpaqueRegion(true); |
| 318 | 318 |
| 319 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); | 319 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
| 320 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); | 320 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
| 321 | 321 |
| 322 context.fillRect(FloatRect(20, 20, 10, 10), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 322 context.fillRect(FloatRect(20, 20, 10, 10), opaque, CompositeSourceOver); |
| 323 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), context.opaqueRegion().asRect()); | 323 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), context.opaqueRegion().asRect()); |
| 324 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 324 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 325 | 325 |
| 326 // Doesn't join | 326 // Doesn't join |
| 327 context.fillRect(FloatRect(31, 20, 10, 10), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 327 context.fillRect(FloatRect(31, 20, 10, 10), opaque, CompositeSourceOver); |
| 328 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), context.opaqueRegion().asRect()); | 328 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), context.opaqueRegion().asRect()); |
| 329 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 329 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 330 | 330 |
| 331 // Does join | 331 // Does join |
| 332 context.fillRect(FloatRect(30, 20, 10, 10), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 332 context.fillRect(FloatRect(30, 20, 10, 10), opaque, CompositeSourceOver); |
| 333 EXPECT_EQ_RECT(IntRect(20, 20, 20, 10), context.opaqueRegion().asRect()); | 333 EXPECT_EQ_RECT(IntRect(20, 20, 20, 10), context.opaqueRegion().asRect()); |
| 334 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 334 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 335 | 335 |
| 336 // Doesn't join | 336 // Doesn't join |
| 337 context.fillRect(FloatRect(20, 31, 20, 10), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 337 context.fillRect(FloatRect(20, 31, 20, 10), opaque, CompositeSourceOver); |
| 338 EXPECT_EQ_RECT(IntRect(20, 20, 20, 10), context.opaqueRegion().asRect()); | 338 EXPECT_EQ_RECT(IntRect(20, 20, 20, 10), context.opaqueRegion().asRect()); |
| 339 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 339 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 340 | 340 |
| 341 // Does join | 341 // Does join |
| 342 context.fillRect(FloatRect(20, 30, 20, 10), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 342 context.fillRect(FloatRect(20, 30, 20, 10), opaque, CompositeSourceOver); |
| 343 EXPECT_EQ_RECT(IntRect(20, 20, 20, 20), context.opaqueRegion().asRect()); | 343 EXPECT_EQ_RECT(IntRect(20, 20, 20, 20), context.opaqueRegion().asRect()); |
| 344 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 344 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 345 | 345 |
| 346 // Doesn't join | 346 // Doesn't join |
| 347 context.fillRect(FloatRect(9, 20, 10, 20), opaque, ColorSpaceDeviceRGB, Comp
ositeSourceOver); | 347 context.fillRect(FloatRect(9, 20, 10, 20), opaque, CompositeSourceOver); |
| 348 EXPECT_EQ_RECT(IntRect(20, 20, 20, 20), context.opaqueRegion().asRect()); | 348 EXPECT_EQ_RECT(IntRect(20, 20, 20, 20), context.opaqueRegion().asRect()); |
| 349 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 349 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 350 | 350 |
| 351 // Does join | 351 // Does join |
| 352 context.fillRect(FloatRect(10, 20, 10, 20), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 352 context.fillRect(FloatRect(10, 20, 10, 20), opaque, CompositeSourceOver); |
| 353 EXPECT_EQ_RECT(IntRect(10, 20, 30, 20), context.opaqueRegion().asRect()); | 353 EXPECT_EQ_RECT(IntRect(10, 20, 30, 20), context.opaqueRegion().asRect()); |
| 354 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 354 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 355 | 355 |
| 356 // Doesn't join | 356 // Doesn't join |
| 357 context.fillRect(FloatRect(10, 9, 30, 10), opaque, ColorSpaceDeviceRGB, Comp
ositeSourceOver); | 357 context.fillRect(FloatRect(10, 9, 30, 10), opaque, CompositeSourceOver); |
| 358 EXPECT_EQ_RECT(IntRect(10, 20, 30, 20), context.opaqueRegion().asRect()); | 358 EXPECT_EQ_RECT(IntRect(10, 20, 30, 20), context.opaqueRegion().asRect()); |
| 359 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 359 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 360 | 360 |
| 361 // Does join | 361 // Does join |
| 362 context.fillRect(FloatRect(10, 10, 30, 10), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 362 context.fillRect(FloatRect(10, 10, 30, 10), opaque, CompositeSourceOver); |
| 363 EXPECT_EQ_RECT(IntRect(10, 10, 30, 30), context.opaqueRegion().asRect()); | 363 EXPECT_EQ_RECT(IntRect(10, 10, 30, 30), context.opaqueRegion().asRect()); |
| 364 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 364 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 365 } | 365 } |
| 366 | 366 |
| 367 TEST(PlatformContextSkiaTest, trackOpaqueLineTest) | 367 TEST(PlatformContextSkiaTest, trackOpaqueLineTest) |
| 368 { | 368 { |
| 369 SkBitmap bitmap; | 369 SkBitmap bitmap; |
| 370 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); | 370 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); |
| 371 bitmap.allocPixels(); | 371 bitmap.allocPixels(); |
| 372 bitmap.eraseColor(0); | 372 bitmap.eraseColor(0); |
| 373 SkCanvas canvas(bitmap); | 373 SkCanvas canvas(bitmap); |
| 374 | 374 |
| 375 GraphicsContext context(&canvas); | 375 GraphicsContext context(&canvas); |
| 376 context.setTrackOpaqueRegion(true); | 376 context.setTrackOpaqueRegion(true); |
| 377 | 377 |
| 378 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); | 378 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
| 379 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); | 379 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
| 380 | 380 |
| 381 context.setShouldAntialias(false); | 381 context.setShouldAntialias(false); |
| 382 context.setMiterLimit(0); | 382 context.setMiterLimit(0); |
| 383 context.setStrokeThickness(4); | 383 context.setStrokeThickness(4); |
| 384 context.setLineCap(SquareCap); | 384 context.setLineCap(SquareCap); |
| 385 context.setStrokeStyle(SolidStroke); | 385 context.setStrokeStyle(SolidStroke); |
| 386 context.setCompositeOperation(CompositeSourceOver); | 386 context.setCompositeOperation(CompositeSourceOver); |
| 387 | 387 |
| 388 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 388 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 389 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 389 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 390 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 390 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 391 | 391 |
| 392 context.setCompositeOperation(CompositeSourceIn); | 392 context.setCompositeOperation(CompositeSourceIn); |
| 393 | 393 |
| 394 context.save(); | 394 context.save(); |
| 395 context.setStrokeColor(alpha, ColorSpaceDeviceRGB); | 395 context.setStrokeColor(alpha); |
| 396 context.drawLine(IntPoint(0, 0), IntPoint(100, 0)); | 396 context.drawLine(IntPoint(0, 0), IntPoint(100, 0)); |
| 397 context.restore(); | 397 context.restore(); |
| 398 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 398 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 399 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 399 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 400 | 400 |
| 401 context.save(); | 401 context.save(); |
| 402 context.setStrokeColor(opaque, ColorSpaceDeviceRGB); | 402 context.setStrokeColor(opaque); |
| 403 context.drawLine(IntPoint(0, 10), IntPoint(100, 10)); | 403 context.drawLine(IntPoint(0, 10), IntPoint(100, 10)); |
| 404 context.restore(); | 404 context.restore(); |
| 405 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 405 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 406 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 406 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 407 | 407 |
| 408 context.save(); | 408 context.save(); |
| 409 context.setStrokeColor(alpha, ColorSpaceDeviceRGB); | 409 context.setStrokeColor(alpha); |
| 410 context.drawLine(IntPoint(0, 10), IntPoint(100, 10)); | 410 context.drawLine(IntPoint(0, 10), IntPoint(100, 10)); |
| 411 context.restore(); | 411 context.restore(); |
| 412 EXPECT_EQ_RECT(IntRect(10, 13, 90, 87), context.opaqueRegion().asRect()); | 412 EXPECT_EQ_RECT(IntRect(10, 13, 90, 87), context.opaqueRegion().asRect()); |
| 413 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 413 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 414 | 414 |
| 415 context.save(); | 415 context.save(); |
| 416 context.setStrokeColor(alpha, ColorSpaceDeviceRGB); | 416 context.setStrokeColor(alpha); |
| 417 context.drawLine(IntPoint(0, 11), IntPoint(100, 11)); | 417 context.drawLine(IntPoint(0, 11), IntPoint(100, 11)); |
| 418 context.restore(); | 418 context.restore(); |
| 419 EXPECT_EQ_RECT(IntRect(10, 14, 90, 86), context.opaqueRegion().asRect()); | 419 EXPECT_EQ_RECT(IntRect(10, 14, 90, 86), context.opaqueRegion().asRect()); |
| 420 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 420 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 421 | 421 |
| 422 context.setShouldAntialias(true); | 422 context.setShouldAntialias(true); |
| 423 context.setCompositeOperation(CompositeSourceOver); | 423 context.setCompositeOperation(CompositeSourceOver); |
| 424 | 424 |
| 425 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 425 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 426 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 426 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 427 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 427 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 428 | 428 |
| 429 context.setCompositeOperation(CompositeSourceIn); | 429 context.setCompositeOperation(CompositeSourceIn); |
| 430 | 430 |
| 431 context.save(); | 431 context.save(); |
| 432 context.setStrokeColor(alpha, ColorSpaceDeviceRGB); | 432 context.setStrokeColor(alpha); |
| 433 context.drawLine(IntPoint(0, 0), IntPoint(100, 0)); | 433 context.drawLine(IntPoint(0, 0), IntPoint(100, 0)); |
| 434 context.restore(); | 434 context.restore(); |
| 435 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 435 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 436 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 436 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 437 | 437 |
| 438 context.setShouldAntialias(false); | 438 context.setShouldAntialias(false); |
| 439 context.save(); | 439 context.save(); |
| 440 context.setStrokeColor(opaque, ColorSpaceDeviceRGB); | 440 context.setStrokeColor(opaque); |
| 441 context.drawLine(IntPoint(0, 10), IntPoint(100, 10)); | 441 context.drawLine(IntPoint(0, 10), IntPoint(100, 10)); |
| 442 context.restore(); | 442 context.restore(); |
| 443 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 443 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 444 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 444 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 445 | 445 |
| 446 context.setShouldAntialias(true); | 446 context.setShouldAntialias(true); |
| 447 context.save(); | 447 context.save(); |
| 448 context.setStrokeColor(opaque, ColorSpaceDeviceRGB); | 448 context.setStrokeColor(opaque); |
| 449 context.drawLine(IntPoint(0, 10), IntPoint(100, 10)); | 449 context.drawLine(IntPoint(0, 10), IntPoint(100, 10)); |
| 450 context.restore(); | 450 context.restore(); |
| 451 EXPECT_EQ_RECT(IntRect(10, 13, 90, 87), context.opaqueRegion().asRect()); | 451 EXPECT_EQ_RECT(IntRect(10, 13, 90, 87), context.opaqueRegion().asRect()); |
| 452 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 452 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 453 | 453 |
| 454 context.save(); | 454 context.save(); |
| 455 context.setStrokeColor(alpha, ColorSpaceDeviceRGB); | 455 context.setStrokeColor(alpha); |
| 456 context.drawLine(IntPoint(0, 11), IntPoint(100, 11)); | 456 context.drawLine(IntPoint(0, 11), IntPoint(100, 11)); |
| 457 context.restore(); | 457 context.restore(); |
| 458 EXPECT_EQ_RECT(IntRect(10, 14, 90, 86), context.opaqueRegion().asRect()); | 458 EXPECT_EQ_RECT(IntRect(10, 14, 90, 86), context.opaqueRegion().asRect()); |
| 459 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 459 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 460 } | 460 } |
| 461 | 461 |
| 462 TEST(PlatformContextSkiaTest, trackOpaquePathTest) | 462 TEST(PlatformContextSkiaTest, trackOpaquePathTest) |
| 463 { | 463 { |
| 464 SkBitmap bitmap; | 464 SkBitmap bitmap; |
| 465 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); | 465 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); |
| 466 bitmap.allocPixels(); | 466 bitmap.allocPixels(); |
| 467 SkCanvas canvas(bitmap); | 467 SkCanvas canvas(bitmap); |
| 468 | 468 |
| 469 GraphicsContext context(&canvas); | 469 GraphicsContext context(&canvas); |
| 470 context.setTrackOpaqueRegion(true); | 470 context.setTrackOpaqueRegion(true); |
| 471 | 471 |
| 472 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); | 472 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
| 473 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); | 473 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
| 474 | 474 |
| 475 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 475 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 476 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 476 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 477 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 477 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 478 | 478 |
| 479 context.setShouldAntialias(false); | 479 context.setShouldAntialias(false); |
| 480 context.setMiterLimit(1); | 480 context.setMiterLimit(1); |
| 481 context.setStrokeThickness(5); | 481 context.setStrokeThickness(5); |
| 482 context.setLineCap(SquareCap); | 482 context.setLineCap(SquareCap); |
| 483 context.setStrokeStyle(SolidStroke); | 483 context.setStrokeStyle(SolidStroke); |
| 484 context.setCompositeOperation(CompositeSourceIn); | 484 context.setCompositeOperation(CompositeSourceIn); |
| 485 | 485 |
| 486 Path path; | 486 Path path; |
| 487 | 487 |
| 488 context.setFillColor(alpha, ColorSpaceDeviceRGB); | 488 context.setFillColor(alpha); |
| 489 path.moveTo(FloatPoint(0, 0)); | 489 path.moveTo(FloatPoint(0, 0)); |
| 490 path.addLineTo(FloatPoint(100, 0)); | 490 path.addLineTo(FloatPoint(100, 0)); |
| 491 context.fillPath(path); | 491 context.fillPath(path); |
| 492 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 492 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 493 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 493 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 494 path.clear(); | 494 path.clear(); |
| 495 | 495 |
| 496 context.setFillColor(opaque, ColorSpaceDeviceRGB); | 496 context.setFillColor(opaque); |
| 497 path.moveTo(FloatPoint(0, 10)); | 497 path.moveTo(FloatPoint(0, 10)); |
| 498 path.addLineTo(FloatPoint(100, 13)); | 498 path.addLineTo(FloatPoint(100, 13)); |
| 499 context.fillPath(path); | 499 context.fillPath(path); |
| 500 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 500 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 501 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 501 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 502 path.clear(); | 502 path.clear(); |
| 503 | 503 |
| 504 context.setFillColor(alpha, ColorSpaceDeviceRGB); | 504 context.setFillColor(alpha); |
| 505 path.moveTo(FloatPoint(0, 10)); | 505 path.moveTo(FloatPoint(0, 10)); |
| 506 path.addLineTo(FloatPoint(100, 13)); | 506 path.addLineTo(FloatPoint(100, 13)); |
| 507 context.fillPath(path); | 507 context.fillPath(path); |
| 508 EXPECT_EQ_RECT(IntRect(10, 13, 90, 87), context.opaqueRegion().asRect()); | 508 EXPECT_EQ_RECT(IntRect(10, 13, 90, 87), context.opaqueRegion().asRect()); |
| 509 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 509 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 510 path.clear(); | 510 path.clear(); |
| 511 | 511 |
| 512 context.setFillColor(alpha, ColorSpaceDeviceRGB); | 512 context.setFillColor(alpha); |
| 513 path.moveTo(FloatPoint(0, 14)); | 513 path.moveTo(FloatPoint(0, 14)); |
| 514 path.addLineTo(FloatPoint(100, 10)); | 514 path.addLineTo(FloatPoint(100, 10)); |
| 515 context.fillPath(path); | 515 context.fillPath(path); |
| 516 EXPECT_EQ_RECT(IntRect(10, 14, 90, 86), context.opaqueRegion().asRect()); | 516 EXPECT_EQ_RECT(IntRect(10, 14, 90, 86), context.opaqueRegion().asRect()); |
| 517 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 517 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 518 path.clear(); | 518 path.clear(); |
| 519 } | 519 } |
| 520 | 520 |
| 521 TEST(PlatformContextSkiaTest, trackOpaqueImageTest) | 521 TEST(PlatformContextSkiaTest, trackOpaqueImageTest) |
| 522 { | 522 { |
| (...skipping 23 matching lines...) Expand all Loading... |
| 546 alphaBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); | 546 alphaBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); |
| 547 alphaBitmap.allocPixels(); | 547 alphaBitmap.allocPixels(); |
| 548 | 548 |
| 549 alphaBitmap.setIsOpaque(false); | 549 alphaBitmap.setIsOpaque(false); |
| 550 for (int y = 0; y < alphaBitmap.height(); ++y) | 550 for (int y = 0; y < alphaBitmap.height(); ++y) |
| 551 for (int x = 0; x < alphaBitmap.width(); ++x) | 551 for (int x = 0; x < alphaBitmap.width(); ++x) |
| 552 *alphaBitmap.getAddr32(x, y) = 0x00000000; | 552 *alphaBitmap.getAddr32(x, y) = 0x00000000; |
| 553 RefPtr<BitmapImage> alphaImage = BitmapImage::create(NativeImageSkia::create
(alphaBitmap)); | 553 RefPtr<BitmapImage> alphaImage = BitmapImage::create(NativeImageSkia::create
(alphaBitmap)); |
| 554 EXPECT_FALSE(alphaImage->currentFrameKnownToBeOpaque()); | 554 EXPECT_FALSE(alphaImage->currentFrameKnownToBeOpaque()); |
| 555 | 555 |
| 556 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 556 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 557 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 557 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 558 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 558 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 559 | 559 |
| 560 context.drawImage(opaqueImage.get(), ColorSpaceDeviceRGB, IntPoint(0, 0)); | 560 context.drawImage(opaqueImage.get(), IntPoint(0, 0)); |
| 561 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 561 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 562 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 562 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 563 context.drawImage(alphaImage.get(), ColorSpaceDeviceRGB, IntPoint(0, 0)); | 563 context.drawImage(alphaImage.get(), IntPoint(0, 0)); |
| 564 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 564 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 565 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 565 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 566 | 566 |
| 567 context.drawImage(opaqueImage.get(), ColorSpaceDeviceRGB, IntPoint(5, 5)); | 567 context.drawImage(opaqueImage.get(), IntPoint(5, 5)); |
| 568 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 568 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 569 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 569 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 570 context.drawImage(alphaImage.get(), ColorSpaceDeviceRGB, IntPoint(5, 5)); | 570 context.drawImage(alphaImage.get(), IntPoint(5, 5)); |
| 571 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 571 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 572 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 572 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 573 | 573 |
| 574 context.drawImage(opaqueImage.get(), ColorSpaceDeviceRGB, IntPoint(10, 10)); | 574 context.drawImage(opaqueImage.get(), IntPoint(10, 10)); |
| 575 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 575 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 576 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 576 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 577 context.drawImage(alphaImage.get(), ColorSpaceDeviceRGB, IntPoint(10, 10)); | 577 context.drawImage(alphaImage.get(), IntPoint(10, 10)); |
| 578 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 578 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 579 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 579 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 580 | 580 |
| 581 context.drawImage(alphaImage.get(), ColorSpaceDeviceRGB, IntPoint(20, 10), C
ompositeSourceIn); | 581 context.drawImage(alphaImage.get(), IntPoint(20, 10), CompositeSourceIn); |
| 582 EXPECT_EQ_RECT(IntRect(10, 20, 90, 80), context.opaqueRegion().asRect()); | 582 EXPECT_EQ_RECT(IntRect(10, 20, 90, 80), context.opaqueRegion().asRect()); |
| 583 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 583 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 584 | 584 |
| 585 context.save(); | 585 context.save(); |
| 586 context.setAlpha(0.5); | 586 context.setAlpha(0.5); |
| 587 context.drawImage(opaqueImage.get(), ColorSpaceDeviceRGB, IntPoint(25, 15),
CompositeSourceIn); | 587 context.drawImage(opaqueImage.get(), IntPoint(25, 15), CompositeSourceIn); |
| 588 context.restore(); | 588 context.restore(); |
| 589 EXPECT_EQ_RECT(IntRect(10, 25, 90, 75), context.opaqueRegion().asRect()); | 589 EXPECT_EQ_RECT(IntRect(10, 25, 90, 75), context.opaqueRegion().asRect()); |
| 590 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 590 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 591 | 591 |
| 592 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 592 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 593 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 593 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 594 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 594 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 595 | 595 |
| 596 context.drawImage(alphaImage.get(), ColorSpaceDeviceRGB, IntPoint(10, 20), C
ompositeSourceIn); | 596 context.drawImage(alphaImage.get(), IntPoint(10, 20), CompositeSourceIn); |
| 597 EXPECT_EQ_RECT(IntRect(20, 10, 80, 90), context.opaqueRegion().asRect()); | 597 EXPECT_EQ_RECT(IntRect(20, 10, 80, 90), context.opaqueRegion().asRect()); |
| 598 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 598 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 599 | 599 |
| 600 context.save(); | 600 context.save(); |
| 601 context.setAlpha(0.5); | 601 context.setAlpha(0.5); |
| 602 context.drawImage(opaqueImage.get(), ColorSpaceDeviceRGB, IntPoint(15, 25),
CompositeSourceIn); | 602 context.drawImage(opaqueImage.get(), IntPoint(15, 25), CompositeSourceIn); |
| 603 context.restore(); | 603 context.restore(); |
| 604 EXPECT_EQ_RECT(IntRect(25, 10, 75, 90), context.opaqueRegion().asRect()); | 604 EXPECT_EQ_RECT(IntRect(25, 10, 75, 90), context.opaqueRegion().asRect()); |
| 605 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 605 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 606 } | 606 } |
| 607 | 607 |
| 608 TEST(PlatformContextSkiaTest, trackOpaqueOvalTest) | 608 TEST(PlatformContextSkiaTest, trackOpaqueOvalTest) |
| 609 { | 609 { |
| 610 SkBitmap bitmap; | 610 SkBitmap bitmap; |
| 611 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); | 611 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); |
| 612 bitmap.allocPixels(); | 612 bitmap.allocPixels(); |
| 613 bitmap.eraseColor(0); | 613 bitmap.eraseColor(0); |
| 614 SkCanvas canvas(bitmap); | 614 SkCanvas canvas(bitmap); |
| 615 | 615 |
| 616 GraphicsContext context(&canvas); | 616 GraphicsContext context(&canvas); |
| 617 context.setTrackOpaqueRegion(true); | 617 context.setTrackOpaqueRegion(true); |
| 618 | 618 |
| 619 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); | 619 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
| 620 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); | 620 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
| 621 | 621 |
| 622 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); | 622 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); |
| 623 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 623 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 624 | 624 |
| 625 context.drawEllipse(IntRect(10, 10, 90, 90)); | 625 context.drawEllipse(IntRect(10, 10, 90, 90)); |
| 626 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); | 626 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); |
| 627 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 627 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 628 | 628 |
| 629 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 629 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 630 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 630 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 631 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 631 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 632 | 632 |
| 633 context.setCompositeOperation(CompositeSourceIn); | 633 context.setCompositeOperation(CompositeSourceIn); |
| 634 | 634 |
| 635 context.setShouldAntialias(false); | 635 context.setShouldAntialias(false); |
| 636 | 636 |
| 637 context.setFillColor(opaque, ColorSpaceDeviceRGB); | 637 context.setFillColor(opaque); |
| 638 context.drawEllipse(IntRect(10, 10, 50, 30)); | 638 context.drawEllipse(IntRect(10, 10, 50, 30)); |
| 639 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 639 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 640 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 640 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 641 | 641 |
| 642 context.setFillColor(alpha, ColorSpaceDeviceRGB); | 642 context.setFillColor(alpha); |
| 643 context.drawEllipse(IntRect(10, 10, 30, 50)); | 643 context.drawEllipse(IntRect(10, 10, 30, 50)); |
| 644 EXPECT_EQ_RECT(IntRect(40, 10, 60, 90), context.opaqueRegion().asRect()); | 644 EXPECT_EQ_RECT(IntRect(40, 10, 60, 90), context.opaqueRegion().asRect()); |
| 645 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 645 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 646 | 646 |
| 647 context.setShouldAntialias(true); | 647 context.setShouldAntialias(true); |
| 648 | 648 |
| 649 context.setFillColor(opaque, ColorSpaceDeviceRGB); | 649 context.setFillColor(opaque); |
| 650 context.drawEllipse(IntRect(10, 10, 50, 30)); | 650 context.drawEllipse(IntRect(10, 10, 50, 30)); |
| 651 EXPECT_EQ_RECT(IntRect(40, 41, 60, 59), context.opaqueRegion().asRect()); | 651 EXPECT_EQ_RECT(IntRect(40, 41, 60, 59), context.opaqueRegion().asRect()); |
| 652 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 652 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 653 | 653 |
| 654 context.setFillColor(alpha, ColorSpaceDeviceRGB); | 654 context.setFillColor(alpha); |
| 655 context.drawEllipse(IntRect(20, 10, 30, 50)); | 655 context.drawEllipse(IntRect(20, 10, 30, 50)); |
| 656 EXPECT_EQ_RECT(IntRect(51, 41, 49, 59), context.opaqueRegion().asRect()); | 656 EXPECT_EQ_RECT(IntRect(51, 41, 49, 59), context.opaqueRegion().asRect()); |
| 657 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 657 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 658 } | 658 } |
| 659 | 659 |
| 660 TEST(PlatformContextSkiaTest, trackOpaqueRoundedRectTest) | 660 TEST(PlatformContextSkiaTest, trackOpaqueRoundedRectTest) |
| 661 { | 661 { |
| 662 SkBitmap bitmap; | 662 SkBitmap bitmap; |
| 663 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); | 663 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); |
| 664 bitmap.allocPixels(); | 664 bitmap.allocPixels(); |
| 665 bitmap.eraseColor(0); | 665 bitmap.eraseColor(0); |
| 666 SkCanvas canvas(bitmap); | 666 SkCanvas canvas(bitmap); |
| 667 | 667 |
| 668 GraphicsContext context(&canvas); | 668 GraphicsContext context(&canvas); |
| 669 context.setTrackOpaqueRegion(true); | 669 context.setTrackOpaqueRegion(true); |
| 670 | 670 |
| 671 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); | 671 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
| 672 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); | 672 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
| 673 IntSize radii(10, 10); | 673 IntSize radii(10, 10); |
| 674 | 674 |
| 675 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); | 675 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); |
| 676 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 676 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 677 | 677 |
| 678 context.fillRoundedRect(IntRect(10, 10, 90, 90), radii, radii, radii, radii,
opaque, ColorSpaceDeviceRGB); | 678 context.fillRoundedRect(IntRect(10, 10, 90, 90), radii, radii, radii, radii,
opaque); |
| 679 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); | 679 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); |
| 680 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 680 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 681 | 681 |
| 682 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 682 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 683 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 683 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 684 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 684 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 685 | 685 |
| 686 context.setCompositeOperation(CompositeSourceIn); | 686 context.setCompositeOperation(CompositeSourceIn); |
| 687 context.setShouldAntialias(false); | 687 context.setShouldAntialias(false); |
| 688 | 688 |
| 689 context.fillRoundedRect(IntRect(10, 10, 50, 30), radii, radii, radii, radii,
opaque, ColorSpaceDeviceRGB); | 689 context.fillRoundedRect(IntRect(10, 10, 50, 30), radii, radii, radii, radii,
opaque); |
| 690 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 690 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 691 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 691 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 692 | 692 |
| 693 context.fillRoundedRect(IntRect(10, 10, 30, 50), radii, radii, radii, radii,
alpha, ColorSpaceDeviceRGB); | 693 context.fillRoundedRect(IntRect(10, 10, 30, 50), radii, radii, radii, radii,
alpha); |
| 694 EXPECT_EQ_RECT(IntRect(40, 10, 60, 90), context.opaqueRegion().asRect()); | 694 EXPECT_EQ_RECT(IntRect(40, 10, 60, 90), context.opaqueRegion().asRect()); |
| 695 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 695 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 696 | 696 |
| 697 context.fillRoundedRect(IntRect(10, 0, 50, 30), radii, radii, radii, radii,
alpha, ColorSpaceDeviceRGB); | 697 context.fillRoundedRect(IntRect(10, 0, 50, 30), radii, radii, radii, radii,
alpha); |
| 698 EXPECT_EQ_RECT(IntRect(40, 30, 60, 70), context.opaqueRegion().asRect()); | 698 EXPECT_EQ_RECT(IntRect(40, 30, 60, 70), context.opaqueRegion().asRect()); |
| 699 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 699 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 700 | 700 |
| 701 context.fillRoundedRect(IntRect(30, 0, 70, 50), radii, radii, radii, radii,
opaque, ColorSpaceDeviceRGB); | 701 context.fillRoundedRect(IntRect(30, 0, 70, 50), radii, radii, radii, radii,
opaque); |
| 702 EXPECT_EQ_RECT(IntRect(40, 30, 60, 70), context.opaqueRegion().asRect()); | 702 EXPECT_EQ_RECT(IntRect(40, 30, 60, 70), context.opaqueRegion().asRect()); |
| 703 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 703 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 704 } | 704 } |
| 705 | 705 |
| 706 TEST(PlatformContextSkiaTest, trackOpaqueTextTest) | 706 TEST(PlatformContextSkiaTest, trackOpaqueTextTest) |
| 707 { | 707 { |
| 708 int width = 200, height = 200; | 708 int width = 200, height = 200; |
| 709 SkBitmap bitmap; | 709 SkBitmap bitmap; |
| 710 bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height); | 710 bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height); |
| 711 bitmap.allocPixels(); | 711 bitmap.allocPixels(); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 725 SkPaint alphaPaint; | 725 SkPaint alphaPaint; |
| 726 alphaPaint.setColor(alpha.rgb()); | 726 alphaPaint.setColor(alpha.rgb()); |
| 727 alphaPaint.setXfermodeMode(SkXfermode::kSrc_Mode); | 727 alphaPaint.setXfermodeMode(SkXfermode::kSrc_Mode); |
| 728 | 728 |
| 729 SkPoint point = SkPoint::Make(0, 0); | 729 SkPoint point = SkPoint::Make(0, 0); |
| 730 SkScalar pointX = 0; | 730 SkScalar pointX = 0; |
| 731 SkPath path; | 731 SkPath path; |
| 732 path.moveTo(SkPoint::Make(0, 0)); | 732 path.moveTo(SkPoint::Make(0, 0)); |
| 733 path.lineTo(SkPoint::Make(100, 0)); | 733 path.lineTo(SkPoint::Make(100, 0)); |
| 734 | 734 |
| 735 context.fillRect(FloatRect(50, 50, 50, 50), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 735 context.fillRect(FloatRect(50, 50, 50, 50), opaque, CompositeSourceOver); |
| 736 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), context.opaqueRegion().asRect()); | 736 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), context.opaqueRegion().asRect()); |
| 737 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 737 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 738 | 738 |
| 739 context.drawPosText("A", 1, &point, textRect, opaquePaint); | 739 context.drawPosText("A", 1, &point, textRect, opaquePaint); |
| 740 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), context.opaqueRegion().asRect()); | 740 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), context.opaqueRegion().asRect()); |
| 741 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 741 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 742 | 742 |
| 743 context.drawPosText("A", 1, &point, textRect, alphaPaint); | 743 context.drawPosText("A", 1, &point, textRect, alphaPaint); |
| 744 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); | 744 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); |
| 745 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 745 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 746 | 746 |
| 747 context.fillRect(FloatRect(50, 50, 50, 50), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 747 context.fillRect(FloatRect(50, 50, 50, 50), opaque, CompositeSourceOver); |
| 748 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), context.opaqueRegion().asRect()); | 748 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), context.opaqueRegion().asRect()); |
| 749 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 749 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 750 | 750 |
| 751 context.drawPosTextH("A", 1, &pointX, 0, textRect, opaquePaint); | 751 context.drawPosTextH("A", 1, &pointX, 0, textRect, opaquePaint); |
| 752 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), context.opaqueRegion().asRect()); | 752 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), context.opaqueRegion().asRect()); |
| 753 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 753 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 754 | 754 |
| 755 context.drawPosTextH("A", 1, &pointX, 0, textRect, alphaPaint); | 755 context.drawPosTextH("A", 1, &pointX, 0, textRect, alphaPaint); |
| 756 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); | 756 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); |
| 757 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 757 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 758 | 758 |
| 759 context.fillRect(FloatRect(50, 50, 50, 50), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 759 context.fillRect(FloatRect(50, 50, 50, 50), opaque, CompositeSourceOver); |
| 760 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), context.opaqueRegion().asRect()); | 760 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), context.opaqueRegion().asRect()); |
| 761 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 761 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 762 | 762 |
| 763 context.drawTextOnPath("A", 1, path, textRect, 0, opaquePaint); | 763 context.drawTextOnPath("A", 1, path, textRect, 0, opaquePaint); |
| 764 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), context.opaqueRegion().asRect()); | 764 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), context.opaqueRegion().asRect()); |
| 765 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 765 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 766 | 766 |
| 767 context.drawTextOnPath("A", 1, path, textRect, 0, alphaPaint); | 767 context.drawTextOnPath("A", 1, path, textRect, 0, alphaPaint); |
| 768 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); | 768 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); |
| 769 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 769 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 798 for (int x = 0; x < alphaBitmap.width(); ++x) | 798 for (int x = 0; x < alphaBitmap.width(); ++x) |
| 799 *alphaBitmap.getAddr32(x, y) = 0x00000000; | 799 *alphaBitmap.getAddr32(x, y) = 0x00000000; |
| 800 | 800 |
| 801 SkPaint paint; | 801 SkPaint paint; |
| 802 paint.setXfermodeMode(SkXfermode::kSrc_Mode); | 802 paint.setXfermodeMode(SkXfermode::kSrc_Mode); |
| 803 | 803 |
| 804 context.writePixels(opaqueBitmap, 50, 50); | 804 context.writePixels(opaqueBitmap, 50, 50); |
| 805 EXPECT_EQ_RECT(IntRect(50, 50, 10, 10), context.opaqueRegion().asRect()); | 805 EXPECT_EQ_RECT(IntRect(50, 50, 10, 10), context.opaqueRegion().asRect()); |
| 806 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 806 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 807 | 807 |
| 808 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 808 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 809 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 809 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 810 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 810 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 811 | 811 |
| 812 context.writePixels(alphaBitmap, 10, 0); | 812 context.writePixels(alphaBitmap, 10, 0); |
| 813 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 813 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 814 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 814 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 815 | 815 |
| 816 context.writePixels(alphaBitmap, 10, 1); | 816 context.writePixels(alphaBitmap, 10, 1); |
| 817 EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), context.opaqueRegion().asRect()); | 817 EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), context.opaqueRegion().asRect()); |
| 818 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 818 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 855 for (int x = 0; x < alphaBitmap.width(); ++x) | 855 for (int x = 0; x < alphaBitmap.width(); ++x) |
| 856 *alphaBitmap.getAddr32(x, y) = 0x00000000; | 856 *alphaBitmap.getAddr32(x, y) = 0x00000000; |
| 857 | 857 |
| 858 SkPaint paint; | 858 SkPaint paint; |
| 859 paint.setXfermodeMode(SkXfermode::kSrc_Mode); | 859 paint.setXfermodeMode(SkXfermode::kSrc_Mode); |
| 860 | 860 |
| 861 context.drawBitmap(opaqueBitmap, 10, 10, &paint); | 861 context.drawBitmap(opaqueBitmap, 10, 10, &paint); |
| 862 EXPECT_EQ_RECT(IntRect(10, 10, 10, 10), context.opaqueRegion().asRect()); | 862 EXPECT_EQ_RECT(IntRect(10, 10, 10, 10), context.opaqueRegion().asRect()); |
| 863 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 863 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 864 | 864 |
| 865 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 865 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
| 866 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 866 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 867 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 867 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 868 | 868 |
| 869 context.drawBitmap(alphaBitmap, 10, 0, &paint); | 869 context.drawBitmap(alphaBitmap, 10, 0, &paint); |
| 870 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); | 870 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
| 871 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 871 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 872 | 872 |
| 873 context.drawBitmap(alphaBitmap, 10, 1, &paint); | 873 context.drawBitmap(alphaBitmap, 10, 1, &paint); |
| 874 EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), context.opaqueRegion().asRect()); | 874 EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), context.opaqueRegion().asRect()); |
| 875 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 875 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 941 SkBitmap bitmap; | 941 SkBitmap bitmap; |
| 942 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); | 942 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); |
| 943 bitmap.allocPixels(); | 943 bitmap.allocPixels(); |
| 944 bitmap.eraseColor(0); | 944 bitmap.eraseColor(0); |
| 945 SkCanvas canvas(bitmap); | 945 SkCanvas canvas(bitmap); |
| 946 | 946 |
| 947 GraphicsContext context(&canvas); | 947 GraphicsContext context(&canvas); |
| 948 context.setTrackOpaqueRegion(true); | 948 context.setTrackOpaqueRegion(true); |
| 949 | 949 |
| 950 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); | 950 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
| 951 context.fillRect(FloatRect(20, 20, 10, 10), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 951 context.fillRect(FloatRect(20, 20, 10, 10), opaque, CompositeSourceOver); |
| 952 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), context.opaqueRegion().asRect()); | 952 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), context.opaqueRegion().asRect()); |
| 953 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 953 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 954 | 954 |
| 955 context.clearRect(FloatRect(20, 20, 10, 10)); | 955 context.clearRect(FloatRect(20, 20, 10, 10)); |
| 956 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); | 956 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
| 957 | 957 |
| 958 context.beginTransparencyLayer(0.5); | 958 context.beginTransparencyLayer(0.5); |
| 959 context.save(); | 959 context.save(); |
| 960 context.fillRect(FloatRect(20, 20, 10, 10), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 960 context.fillRect(FloatRect(20, 20, 10, 10), opaque, CompositeSourceOver); |
| 961 context.restore(); | 961 context.restore(); |
| 962 context.endTransparencyLayer(); | 962 context.endTransparencyLayer(); |
| 963 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); | 963 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
| 964 | 964 |
| 965 context.clearRect(FloatRect(20, 20, 10, 10)); | 965 context.clearRect(FloatRect(20, 20, 10, 10)); |
| 966 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); | 966 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
| 967 | 967 |
| 968 context.beginTransparencyLayer(0.5); | 968 context.beginTransparencyLayer(0.5); |
| 969 context.fillRect(FloatRect(20, 20, 10, 10), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 969 context.fillRect(FloatRect(20, 20, 10, 10), opaque, CompositeSourceOver); |
| 970 context.endTransparencyLayer(); | 970 context.endTransparencyLayer(); |
| 971 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); | 971 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
| 972 } | 972 } |
| 973 | 973 |
| 974 TEST(PlatformContextSkiaTest, UnboundedDrawsAreClipped) | 974 TEST(PlatformContextSkiaTest, UnboundedDrawsAreClipped) |
| 975 { | 975 { |
| 976 SkBitmap bitmap; | 976 SkBitmap bitmap; |
| 977 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); | 977 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); |
| 978 bitmap.allocPixels(); | 978 bitmap.allocPixels(); |
| 979 bitmap.eraseColor(0); | 979 bitmap.eraseColor(0); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 992 context.setLineCap(SquareCap); | 992 context.setLineCap(SquareCap); |
| 993 context.setStrokeStyle(SolidStroke); | 993 context.setStrokeStyle(SolidStroke); |
| 994 | 994 |
| 995 // Make skia unable to compute fast bounds for our paths. | 995 // Make skia unable to compute fast bounds for our paths. |
| 996 DashArray dashArray; | 996 DashArray dashArray; |
| 997 dashArray.append(1); | 997 dashArray.append(1); |
| 998 dashArray.append(0); | 998 dashArray.append(0); |
| 999 context.setLineDash(dashArray, 0); | 999 context.setLineDash(dashArray, 0); |
| 1000 | 1000 |
| 1001 // Make the device opaque in 10,10 40x40. | 1001 // Make the device opaque in 10,10 40x40. |
| 1002 context.fillRect(FloatRect(10, 10, 40, 40), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 1002 context.fillRect(FloatRect(10, 10, 40, 40), opaque, CompositeSourceOver); |
| 1003 EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), context.opaqueRegion().asRect()); | 1003 EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), context.opaqueRegion().asRect()); |
| 1004 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); | 1004 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); |
| 1005 | 1005 |
| 1006 // Clip to the left edge of the opaque area. | 1006 // Clip to the left edge of the opaque area. |
| 1007 context.clip(IntRect(10, 10, 10, 40)); | 1007 context.clip(IntRect(10, 10, 10, 40)); |
| 1008 | 1008 |
| 1009 // Draw a path that gets clipped. This should destroy the opaque area but on
ly inside the clip. | 1009 // Draw a path that gets clipped. This should destroy the opaque area but on
ly inside the clip. |
| 1010 context.setCompositeOperation(CompositeSourceOut); | 1010 context.setCompositeOperation(CompositeSourceOut); |
| 1011 context.setFillColor(alpha, ColorSpaceDeviceRGB); | 1011 context.setFillColor(alpha); |
| 1012 path.moveTo(FloatPoint(10, 10)); | 1012 path.moveTo(FloatPoint(10, 10)); |
| 1013 path.addLineTo(FloatPoint(40, 40)); | 1013 path.addLineTo(FloatPoint(40, 40)); |
| 1014 context.strokePath(path); | 1014 context.strokePath(path); |
| 1015 | 1015 |
| 1016 EXPECT_EQ_RECT(IntRect(20, 10, 30, 40), context.opaqueRegion().asRect()); | 1016 EXPECT_EQ_RECT(IntRect(20, 10, 30, 40), context.opaqueRegion().asRect()); |
| 1017 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); | 1017 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
| 1018 } | 1018 } |
| 1019 | 1019 |
| 1020 TEST(PlatformContextSkiaTest, PreserveOpaqueOnlyMattersForFirstLayer) | 1020 TEST(PlatformContextSkiaTest, PreserveOpaqueOnlyMattersForFirstLayer) |
| 1021 { | 1021 { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1038 context.setLineCap(SquareCap); | 1038 context.setLineCap(SquareCap); |
| 1039 context.setStrokeStyle(SolidStroke); | 1039 context.setStrokeStyle(SolidStroke); |
| 1040 | 1040 |
| 1041 // Make skia unable to compute fast bounds for our paths. | 1041 // Make skia unable to compute fast bounds for our paths. |
| 1042 DashArray dashArray; | 1042 DashArray dashArray; |
| 1043 dashArray.append(1); | 1043 dashArray.append(1); |
| 1044 dashArray.append(0); | 1044 dashArray.append(0); |
| 1045 context.setLineDash(dashArray, 0); | 1045 context.setLineDash(dashArray, 0); |
| 1046 | 1046 |
| 1047 // Make the device opaque in 10,10 40x40. | 1047 // Make the device opaque in 10,10 40x40. |
| 1048 context.fillRect(FloatRect(10, 10, 40, 40), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 1048 context.fillRect(FloatRect(10, 10, 40, 40), opaque, CompositeSourceOver); |
| 1049 EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), context.opaqueRegion().asRect()); | 1049 EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), context.opaqueRegion().asRect()); |
| 1050 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); | 1050 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); |
| 1051 | 1051 |
| 1052 // Begin a layer that preserves opaque. | 1052 // Begin a layer that preserves opaque. |
| 1053 context.setCompositeOperation(CompositeSourceOver); | 1053 context.setCompositeOperation(CompositeSourceOver); |
| 1054 context.beginTransparencyLayer(0.5); | 1054 context.beginTransparencyLayer(0.5); |
| 1055 | 1055 |
| 1056 // Begin a layer that does not preserve opaque. | 1056 // Begin a layer that does not preserve opaque. |
| 1057 context.setCompositeOperation(CompositeSourceOut); | 1057 context.setCompositeOperation(CompositeSourceOut); |
| 1058 context.beginTransparencyLayer(0.5); | 1058 context.beginTransparencyLayer(0.5); |
| 1059 | 1059 |
| 1060 // This should not destroy the device opaqueness. | 1060 // This should not destroy the device opaqueness. |
| 1061 context.fillRect(FloatRect(10, 10, 40, 40), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 1061 context.fillRect(FloatRect(10, 10, 40, 40), opaque, CompositeSourceOver); |
| 1062 | 1062 |
| 1063 // This should not destroy the device opaqueness either. | 1063 // This should not destroy the device opaqueness either. |
| 1064 context.setFillColor(opaque, ColorSpaceDeviceRGB); | 1064 context.setFillColor(opaque); |
| 1065 path.moveTo(FloatPoint(10, 10)); | 1065 path.moveTo(FloatPoint(10, 10)); |
| 1066 path.addLineTo(FloatPoint(40, 40)); | 1066 path.addLineTo(FloatPoint(40, 40)); |
| 1067 context.strokePath(path); | 1067 context.strokePath(path); |
| 1068 | 1068 |
| 1069 context.endTransparencyLayer(); | 1069 context.endTransparencyLayer(); |
| 1070 context.endTransparencyLayer(); | 1070 context.endTransparencyLayer(); |
| 1071 EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), context.opaqueRegion().asRect()); | 1071 EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), context.opaqueRegion().asRect()); |
| 1072 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); | 1072 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); |
| 1073 | 1073 |
| 1074 // Now begin a layer that does not preserve opaque and draw through it to th
e device. | 1074 // Now begin a layer that does not preserve opaque and draw through it to th
e device. |
| 1075 context.setCompositeOperation(CompositeSourceOut); | 1075 context.setCompositeOperation(CompositeSourceOut); |
| 1076 context.beginTransparencyLayer(0.5); | 1076 context.beginTransparencyLayer(0.5); |
| 1077 | 1077 |
| 1078 // This should destroy the device opaqueness. | 1078 // This should destroy the device opaqueness. |
| 1079 context.fillRect(FloatRect(10, 10, 40, 40), opaque, ColorSpaceDeviceRGB, Com
positeSourceOver); | 1079 context.fillRect(FloatRect(10, 10, 40, 40), opaque, CompositeSourceOver); |
| 1080 | 1080 |
| 1081 context.endTransparencyLayer(); | 1081 context.endTransparencyLayer(); |
| 1082 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); | 1082 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
| 1083 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); | 1083 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); |
| 1084 | 1084 |
| 1085 // Now we draw with a path for which it cannot compute fast bounds. This sho
uld destroy the entire opaque region. | 1085 // Now we draw with a path for which it cannot compute fast bounds. This sho
uld destroy the entire opaque region. |
| 1086 | 1086 |
| 1087 context.setCompositeOperation(CompositeSourceOut); | 1087 context.setCompositeOperation(CompositeSourceOut); |
| 1088 context.beginTransparencyLayer(0.5); | 1088 context.beginTransparencyLayer(0.5); |
| 1089 | 1089 |
| 1090 // This should nuke the device opaqueness. | 1090 // This should nuke the device opaqueness. |
| 1091 context.setFillColor(opaque, ColorSpaceDeviceRGB); | 1091 context.setFillColor(opaque); |
| 1092 path.moveTo(FloatPoint(10, 10)); | 1092 path.moveTo(FloatPoint(10, 10)); |
| 1093 path.addLineTo(FloatPoint(40, 40)); | 1093 path.addLineTo(FloatPoint(40, 40)); |
| 1094 context.strokePath(path); | 1094 context.strokePath(path); |
| 1095 | 1095 |
| 1096 context.endTransparencyLayer(); | 1096 context.endTransparencyLayer(); |
| 1097 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); | 1097 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
| 1098 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); | 1098 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); |
| 1099 } | 1099 } |
| 1100 | 1100 |
| 1101 } // namespace | 1101 } // namespace |
| OLD | NEW |