Index: Source/core/platform/graphics/GraphicsContextTest.cpp |
diff --git a/Source/core/platform/graphics/GraphicsContextTest.cpp b/Source/core/platform/graphics/GraphicsContextTest.cpp |
deleted file mode 100644 |
index b53f27864c45a9e7d4dddfb25c4cbee07426a91d..0000000000000000000000000000000000000000 |
--- a/Source/core/platform/graphics/GraphicsContextTest.cpp |
+++ /dev/null |
@@ -1,1123 +0,0 @@ |
-/* |
- * Copyright (C) 2012 Google Inc. All rights reserved. |
- * |
- * Redistribution and use in source and binary forms, with or without |
- * modification, are permitted provided that the following conditions |
- * are met: |
- * 1. Redistributions of source code must retain the above copyright |
- * notice, this list of conditions and the following disclaimer. |
- * 2. Redistributions in binary form must reproduce the above copyright |
- * notice, this list of conditions and the following disclaimer in the |
- * documentation and/or other materials provided with the distribution. |
- * |
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY |
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY |
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- */ |
- |
-#include "config.h" |
- |
-#include "core/platform/graphics/GraphicsContext.h" |
- |
-#include "SkCanvas.h" |
-#include "core/platform/graphics/BitmapImage.h" |
-#include "core/platform/graphics/ImageBuffer.h" |
-#include "core/platform/graphics/skia/NativeImageSkia.h" |
-#include "platform/graphics/DisplayList.h" |
-#include "third_party/skia/include/core/SkBitmapDevice.h" |
-#include <gtest/gtest.h> |
- |
-using namespace WebCore; |
- |
-namespace { |
- |
-#define EXPECT_EQ_RECT(a, b) \ |
- EXPECT_EQ(a.x(), b.x()); \ |
- EXPECT_EQ(a.y(), b.y()); \ |
- EXPECT_EQ(a.width(), b.width()); \ |
- EXPECT_EQ(a.height(), b.height()); |
- |
-#define EXPECT_PIXELS_MATCH(bitmap, opaqueRect) \ |
-{ \ |
- SkAutoLockPixels locker(bitmap); \ |
- for (int y = opaqueRect.y(); y < opaqueRect.maxY(); ++y) \ |
- for (int x = opaqueRect.x(); x < opaqueRect.maxX(); ++x) { \ |
- int alpha = *bitmap.getAddr32(x, y) >> 24; \ |
- EXPECT_EQ(255, alpha); \ |
- } \ |
-} |
- |
-#define EXPECT_PIXELS_MATCH_EXACT(bitmap, opaqueRect) \ |
-{ \ |
- SkAutoLockPixels locker(bitmap); \ |
- for (int y = 0; y < bitmap.height(); ++y) \ |
- for (int x = 0; x < bitmap.width(); ++x) { \ |
- int alpha = *bitmap.getAddr32(x, y) >> 24; \ |
- bool opaque = opaqueRect.contains(x, y); \ |
- EXPECT_EQ(opaque, alpha == 255); \ |
- } \ |
-} |
- |
-TEST(GraphicsContextTest, trackOpaqueTest) |
-{ |
- SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); |
- bitmap.allocPixels(); |
- bitmap.eraseColor(0); |
- SkCanvas canvas(bitmap); |
- |
- GraphicsContext context(&canvas); |
- context.setTrackOpaqueRegion(true); |
- |
- Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
- Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
- |
- context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRect(FloatRect(10, 10, 90, 90), alpha, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRect(FloatRect(99, 13, 10, 90), opaque, CompositePlusLighter); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRect(FloatRect(99, 13, 10, 90), opaque, CompositeSourceIn); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRect(FloatRect(99, 13, 10, 90), alpha, CompositeSourceIn); |
- EXPECT_EQ_RECT(IntRect(10, 10, 89, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRect(FloatRect(8, 8, 3, 90), opaque, CompositeSourceOut); |
- EXPECT_EQ_RECT(IntRect(11, 10, 88, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRect(FloatRect(30, 30, 290, 290), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRect(FloatRect(40, 20, 290, 50), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRect(FloatRect(10, 10, 390, 50), opaque, CompositeSourceIn); |
- EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRect(FloatRect(10, 10, 390, 50), alpha); |
- EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRect(FloatRect(10, 10, 390, 50), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(30, 10, 290, 310), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
-} |
- |
-TEST(GraphicsContextTest, trackOpaqueClipTest) |
-{ |
- SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); |
- bitmap.allocPixels(); |
- SkCanvas canvas(bitmap); |
- |
- GraphicsContext context(&canvas); |
- context.setTrackOpaqueRegion(true); |
- |
- Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
- Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
- |
- context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.clearRect(FloatRect(10, 10, 90, 90)); |
- EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
- |
- context.save(); |
- context.clip(FloatRect(0, 0, 10, 10)); |
- context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- context.restore(); |
- |
- context.clearRect(FloatRect(10, 10, 90, 90)); |
- EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
- |
- context.save(); |
- context.clip(FloatRect(20, 20, 10, 10)); |
- context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.clearRect(FloatRect(10, 10, 90, 90)); |
- EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
- |
- // The intersection of the two clips becomes empty. |
- context.clip(FloatRect(30, 20, 10, 10)); |
- context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- context.restore(); |
- |
- context.clearRect(FloatRect(10, 10, 90, 90)); |
- EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
- |
- // The transform and the clip need to interact correctly (transform first) |
- context.save(); |
- context.translate(10, 10); |
- context.clip(FloatRect(20, 20, 10, 10)); |
- context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(30, 30, 10, 10), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- context.restore(); |
- |
- context.clearRect(FloatRect(10, 10, 90, 90)); |
- EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
- |
- // The transform and the clip need to interact correctly (clip first) |
- context.save(); |
- context.clip(FloatRect(20, 20, 10, 10)); |
- context.translate(10, 10); |
- context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- context.restore(); |
- |
- context.clearRect(FloatRect(10, 10, 90, 90)); |
- EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
- |
- Path path; |
- path.moveTo(FloatPoint(0, 0)); |
- path.addLineTo(FloatPoint(100, 0)); |
- |
- // Non-rectangular clips just cause the paint to be considered non-opaque. |
- context.save(); |
- context.clipPath(path, RULE_EVENODD); |
- context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- context.restore(); |
- |
- // Another non-rectangular clip. |
- context.save(); |
- context.clip(IntRect(30, 30, 20, 20)); |
- context.clipOut(IntRect(30, 30, 10, 10)); |
- context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- context.restore(); |
-} |
- |
-TEST(GraphicsContextTest, trackImageMask) |
-{ |
- SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); |
- bitmap.allocPixels(); |
- bitmap.eraseColor(0); |
- SkCanvas canvas(bitmap); |
- |
- GraphicsContext context(&canvas); |
- context.setTrackOpaqueRegion(true); |
- |
- Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
- Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
- |
- // Image masks are done by drawing a bitmap into a transparency layer that uses DstIn to mask |
- // out a transparency layer below that is filled with the mask color. In the end this should |
- // not be marked opaque. |
- |
- context.setCompositeOperation(CompositeSourceOver); |
- context.beginTransparencyLayer(1); |
- context.fillRect(FloatRect(10, 10, 10, 10), opaque, CompositeSourceOver); |
- |
- context.setCompositeOperation(CompositeDestinationIn); |
- context.beginTransparencyLayer(1); |
- |
- OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100)); |
- alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha); |
- |
- context.setCompositeOperation(CompositeSourceOver); |
- context.drawImageBuffer(alphaImage.get(), FloatRect(10, 10, 10, 10)); |
- |
- context.endLayer(); |
- context.endLayer(); |
- |
- EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); |
-} |
- |
-TEST(GraphicsContextTest, trackImageMaskWithOpaqueRect) |
-{ |
- SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); |
- bitmap.allocPixels(); |
- bitmap.eraseColor(0); |
- SkCanvas canvas(bitmap); |
- |
- GraphicsContext context(&canvas); |
- context.setTrackOpaqueRegion(true); |
- |
- Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
- Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
- |
- // Image masks are done by drawing a bitmap into a transparency layer that uses DstIn to mask |
- // out a transparency layer below that is filled with the mask color. In the end this should |
- // not be marked opaque. |
- |
- context.setCompositeOperation(CompositeSourceOver); |
- context.beginTransparencyLayer(1); |
- context.fillRect(FloatRect(10, 10, 10, 10), opaque, CompositeSourceOver); |
- |
- context.setCompositeOperation(CompositeDestinationIn); |
- context.beginTransparencyLayer(1); |
- |
- OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100)); |
- alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha); |
- |
- context.setCompositeOperation(CompositeSourceOver); |
- context.drawImageBuffer(alphaImage.get(), FloatRect(10, 10, 10, 10)); |
- |
- // We can't have an opaque mask actually, but we can pretend here like it would look if we did. |
- context.fillRect(FloatRect(12, 12, 3, 3), opaque, CompositeSourceOver); |
- |
- context.endLayer(); |
- context.endLayer(); |
- |
- EXPECT_EQ_RECT(IntRect(12, 12, 3, 3), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); |
-} |
- |
-TEST(GraphicsContextTest, trackOpaqueJoinTest) |
-{ |
- SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); |
- bitmap.allocPixels(); |
- SkCanvas canvas(bitmap); |
- |
- GraphicsContext context(&canvas); |
- context.setTrackOpaqueRegion(true); |
- |
- Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
- Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
- |
- context.fillRect(FloatRect(20, 20, 10, 10), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- // Doesn't join |
- context.fillRect(FloatRect(31, 20, 10, 10), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- // Does join |
- context.fillRect(FloatRect(30, 20, 10, 10), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(20, 20, 20, 10), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- // Doesn't join |
- context.fillRect(FloatRect(20, 31, 20, 10), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(20, 20, 20, 10), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- // Does join |
- context.fillRect(FloatRect(20, 30, 20, 10), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(20, 20, 20, 20), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- // Doesn't join |
- context.fillRect(FloatRect(9, 20, 10, 20), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(20, 20, 20, 20), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- // Does join |
- context.fillRect(FloatRect(10, 20, 10, 20), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(10, 20, 30, 20), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- // Doesn't join |
- context.fillRect(FloatRect(10, 9, 30, 10), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(10, 20, 30, 20), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- // Does join |
- context.fillRect(FloatRect(10, 10, 30, 10), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(10, 10, 30, 30), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
-} |
- |
-TEST(GraphicsContextTest, trackOpaqueLineTest) |
-{ |
- SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); |
- bitmap.allocPixels(); |
- bitmap.eraseColor(0); |
- SkCanvas canvas(bitmap); |
- |
- GraphicsContext context(&canvas); |
- context.setTrackOpaqueRegion(true); |
- |
- Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
- Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
- |
- context.setShouldAntialias(false); |
- context.setMiterLimit(0); |
- context.setStrokeThickness(4); |
- context.setLineCap(SquareCap); |
- context.setStrokeStyle(SolidStroke); |
- context.setCompositeOperation(CompositeSourceOver); |
- |
- context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.setCompositeOperation(CompositeSourceIn); |
- |
- context.save(); |
- context.setStrokeColor(alpha); |
- context.drawLine(IntPoint(0, 0), IntPoint(100, 0)); |
- context.restore(); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.save(); |
- context.setStrokeColor(opaque); |
- context.drawLine(IntPoint(0, 10), IntPoint(100, 10)); |
- context.restore(); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.save(); |
- context.setStrokeColor(alpha); |
- context.drawLine(IntPoint(0, 10), IntPoint(100, 10)); |
- context.restore(); |
- EXPECT_EQ_RECT(IntRect(10, 13, 90, 87), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.save(); |
- context.setStrokeColor(alpha); |
- context.drawLine(IntPoint(0, 11), IntPoint(100, 11)); |
- context.restore(); |
- EXPECT_EQ_RECT(IntRect(10, 14, 90, 86), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.setShouldAntialias(true); |
- context.setCompositeOperation(CompositeSourceOver); |
- |
- context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.setCompositeOperation(CompositeSourceIn); |
- |
- context.save(); |
- context.setStrokeColor(alpha); |
- context.drawLine(IntPoint(0, 0), IntPoint(100, 0)); |
- context.restore(); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.setShouldAntialias(false); |
- context.save(); |
- context.setStrokeColor(opaque); |
- context.drawLine(IntPoint(0, 10), IntPoint(100, 10)); |
- context.restore(); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.setShouldAntialias(true); |
- context.save(); |
- context.setStrokeColor(opaque); |
- context.drawLine(IntPoint(0, 10), IntPoint(100, 10)); |
- context.restore(); |
- EXPECT_EQ_RECT(IntRect(10, 13, 90, 87), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.save(); |
- context.setStrokeColor(alpha); |
- context.drawLine(IntPoint(0, 11), IntPoint(100, 11)); |
- context.restore(); |
- EXPECT_EQ_RECT(IntRect(10, 14, 90, 86), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
-} |
- |
-TEST(GraphicsContextTest, trackOpaquePathTest) |
-{ |
- SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); |
- bitmap.allocPixels(); |
- SkCanvas canvas(bitmap); |
- |
- GraphicsContext context(&canvas); |
- context.setTrackOpaqueRegion(true); |
- |
- Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
- Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
- |
- context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.setShouldAntialias(false); |
- context.setMiterLimit(1); |
- context.setStrokeThickness(5); |
- context.setLineCap(SquareCap); |
- context.setStrokeStyle(SolidStroke); |
- context.setCompositeOperation(CompositeSourceIn); |
- |
- Path path; |
- |
- context.setFillColor(alpha); |
- path.moveTo(FloatPoint(0, 0)); |
- path.addLineTo(FloatPoint(100, 0)); |
- context.fillPath(path); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- path.clear(); |
- |
- context.setFillColor(opaque); |
- path.moveTo(FloatPoint(0, 10)); |
- path.addLineTo(FloatPoint(100, 13)); |
- context.fillPath(path); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- path.clear(); |
- |
- context.setFillColor(alpha); |
- path.moveTo(FloatPoint(0, 10)); |
- path.addLineTo(FloatPoint(100, 13)); |
- context.fillPath(path); |
- EXPECT_EQ_RECT(IntRect(10, 13, 90, 87), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- path.clear(); |
- |
- context.setFillColor(alpha); |
- path.moveTo(FloatPoint(0, 14)); |
- path.addLineTo(FloatPoint(100, 10)); |
- context.fillPath(path); |
- EXPECT_EQ_RECT(IntRect(10, 14, 90, 86), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- path.clear(); |
-} |
- |
-TEST(GraphicsContextTest, trackOpaqueImageTest) |
-{ |
- SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); |
- bitmap.allocPixels(); |
- SkCanvas canvas(bitmap); |
- |
- GraphicsContext context(&canvas); |
- context.setTrackOpaqueRegion(true); |
- |
- Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
- Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
- |
- SkBitmap opaqueBitmap; |
- opaqueBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10, 0, kOpaque_SkAlphaType); |
- opaqueBitmap.allocPixels(); |
- |
- for (int y = 0; y < opaqueBitmap.height(); ++y) |
- for (int x = 0; x < opaqueBitmap.width(); ++x) |
- *opaqueBitmap.getAddr32(x, y) = 0xFFFFFFFF; |
- RefPtr<BitmapImage> opaqueImage = BitmapImage::create(NativeImageSkia::create(opaqueBitmap)); |
- EXPECT_TRUE(opaqueImage->currentFrameKnownToBeOpaque()); |
- |
- SkBitmap alphaBitmap; |
- alphaBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10, 0, kPremul_SkAlphaType); |
- alphaBitmap.allocPixels(); |
- |
- for (int y = 0; y < alphaBitmap.height(); ++y) |
- for (int x = 0; x < alphaBitmap.width(); ++x) |
- *alphaBitmap.getAddr32(x, y) = 0x00000000; |
- RefPtr<BitmapImage> alphaImage = BitmapImage::create(NativeImageSkia::create(alphaBitmap)); |
- EXPECT_FALSE(alphaImage->currentFrameKnownToBeOpaque()); |
- |
- context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawImage(opaqueImage.get(), IntPoint(0, 0)); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- context.drawImage(alphaImage.get(), IntPoint(0, 0)); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawImage(opaqueImage.get(), IntPoint(5, 5)); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- context.drawImage(alphaImage.get(), IntPoint(5, 5)); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawImage(opaqueImage.get(), IntPoint(10, 10)); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- context.drawImage(alphaImage.get(), IntPoint(10, 10)); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawImage(alphaImage.get(), IntPoint(20, 10), CompositeSourceIn); |
- EXPECT_EQ_RECT(IntRect(10, 20, 90, 80), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.save(); |
- context.setAlpha(0.5); |
- context.drawImage(opaqueImage.get(), IntPoint(25, 15), CompositeSourceIn); |
- context.restore(); |
- EXPECT_EQ_RECT(IntRect(10, 25, 90, 75), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawImage(alphaImage.get(), IntPoint(10, 20), CompositeSourceIn); |
- EXPECT_EQ_RECT(IntRect(20, 10, 80, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.save(); |
- context.setAlpha(0.5); |
- context.drawImage(opaqueImage.get(), IntPoint(15, 25), CompositeSourceIn); |
- context.restore(); |
- EXPECT_EQ_RECT(IntRect(25, 10, 75, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
-} |
- |
-TEST(GraphicsContextTest, trackOpaqueOvalTest) |
-{ |
- SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); |
- bitmap.allocPixels(); |
- bitmap.eraseColor(0); |
- SkCanvas canvas(bitmap); |
- |
- GraphicsContext context(&canvas); |
- context.setTrackOpaqueRegion(true); |
- |
- Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
- Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
- |
- EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawEllipse(IntRect(10, 10, 90, 90)); |
- EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.setCompositeOperation(CompositeSourceIn); |
- |
- context.setShouldAntialias(false); |
- |
- context.setFillColor(opaque); |
- context.drawEllipse(IntRect(10, 10, 50, 30)); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.setFillColor(alpha); |
- context.drawEllipse(IntRect(10, 10, 30, 50)); |
- EXPECT_EQ_RECT(IntRect(40, 10, 60, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.setShouldAntialias(true); |
- |
- context.setFillColor(opaque); |
- context.drawEllipse(IntRect(10, 10, 50, 30)); |
- EXPECT_EQ_RECT(IntRect(40, 41, 60, 59), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.setFillColor(alpha); |
- context.drawEllipse(IntRect(20, 10, 30, 50)); |
- EXPECT_EQ_RECT(IntRect(51, 41, 49, 59), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
-} |
- |
-TEST(GraphicsContextTest, trackOpaqueRoundedRectTest) |
-{ |
- SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); |
- bitmap.allocPixels(); |
- bitmap.eraseColor(0); |
- SkCanvas canvas(bitmap); |
- |
- GraphicsContext context(&canvas); |
- context.setTrackOpaqueRegion(true); |
- |
- Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
- Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
- IntSize radii(10, 10); |
- |
- EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRoundedRect(IntRect(10, 10, 90, 90), radii, radii, radii, radii, opaque); |
- EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.setCompositeOperation(CompositeSourceIn); |
- context.setShouldAntialias(false); |
- |
- context.fillRoundedRect(IntRect(10, 10, 50, 30), radii, radii, radii, radii, opaque); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRoundedRect(IntRect(10, 10, 30, 50), radii, radii, radii, radii, alpha); |
- EXPECT_EQ_RECT(IntRect(40, 10, 60, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRoundedRect(IntRect(10, 0, 50, 30), radii, radii, radii, radii, alpha); |
- EXPECT_EQ_RECT(IntRect(40, 30, 60, 70), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRoundedRect(IntRect(30, 0, 70, 50), radii, radii, radii, radii, opaque); |
- EXPECT_EQ_RECT(IntRect(40, 30, 60, 70), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
-} |
- |
-TEST(GraphicsContextTest, trackOpaqueTextTest) |
-{ |
- int width = 200, height = 200; |
- SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height); |
- bitmap.allocPixels(); |
- bitmap.eraseColor(0); |
- SkCanvas canvas(bitmap); |
- SkRect textRect = SkRect::MakeWH(width, height); |
- |
- GraphicsContext context(&canvas); |
- context.setTrackOpaqueRegion(true); |
- |
- Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
- Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
- |
- SkPaint opaquePaint; |
- opaquePaint.setColor(opaque.rgb()); |
- opaquePaint.setXfermodeMode(SkXfermode::kSrc_Mode); |
- SkPaint alphaPaint; |
- alphaPaint.setColor(alpha.rgb()); |
- alphaPaint.setXfermodeMode(SkXfermode::kSrc_Mode); |
- |
- SkPoint point = SkPoint::Make(0, 0); |
- SkScalar pointX = 0; |
- SkPath path; |
- path.moveTo(SkPoint::Make(0, 0)); |
- path.lineTo(SkPoint::Make(100, 0)); |
- |
- context.fillRect(FloatRect(50, 50, 50, 50), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawPosText("A", 1, &point, textRect, opaquePaint); |
- EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawPosText("A", 1, &point, textRect, alphaPaint); |
- EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRect(FloatRect(50, 50, 50, 50), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawPosTextH("A", 1, &pointX, 0, textRect, opaquePaint); |
- EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawPosTextH("A", 1, &pointX, 0, textRect, alphaPaint); |
- EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRect(FloatRect(50, 50, 50, 50), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawTextOnPath("A", 1, path, textRect, 0, opaquePaint); |
- EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawTextOnPath("A", 1, path, textRect, 0, alphaPaint); |
- EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
-} |
- |
-TEST(GraphicsContextTest, trackOpaqueWritePixelsTest) |
-{ |
- SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); |
- bitmap.allocPixels(); |
- bitmap.eraseColor(0); |
- SkCanvas canvas(bitmap); |
- |
- GraphicsContext context(&canvas); |
- context.setTrackOpaqueRegion(true); |
- |
- Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
- |
- SkBitmap opaqueBitmap; |
- opaqueBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10, 0, kOpaque_SkAlphaType); |
- opaqueBitmap.allocPixels(); |
- for (int y = 0; y < opaqueBitmap.height(); ++y) |
- for (int x = 0; x < opaqueBitmap.width(); ++x) |
- *opaqueBitmap.getAddr32(x, y) = 0xFFFFFFFF; |
- |
- SkBitmap alphaBitmap; |
- alphaBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10, 0, kPremul_SkAlphaType); |
- alphaBitmap.allocPixels(); |
- for (int y = 0; y < alphaBitmap.height(); ++y) |
- for (int x = 0; x < alphaBitmap.width(); ++x) |
- *alphaBitmap.getAddr32(x, y) = 0x00000000; |
- |
- SkPaint paint; |
- paint.setXfermodeMode(SkXfermode::kSrc_Mode); |
- |
- context.writePixels(opaqueBitmap, 50, 50); |
- EXPECT_EQ_RECT(IntRect(50, 50, 10, 10), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.writePixels(alphaBitmap, 10, 0); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.writePixels(alphaBitmap, 10, 1); |
- EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.writePixels(alphaBitmap, 0, 10); |
- EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.writePixels(alphaBitmap, 1, 10); |
- EXPECT_EQ_RECT(IntRect(11, 11, 89, 89), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
-} |
- |
-TEST(GraphicsContextTest, trackOpaqueDrawBitmapTest) |
-{ |
- SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); |
- bitmap.allocPixels(); |
- bitmap.eraseColor(0); |
- SkCanvas canvas(bitmap); |
- |
- GraphicsContext context(&canvas); |
- context.setTrackOpaqueRegion(true); |
- |
- Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
- |
- SkBitmap opaqueBitmap; |
- opaqueBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10, 0, kOpaque_SkAlphaType); |
- opaqueBitmap.allocPixels(); |
- for (int y = 0; y < opaqueBitmap.height(); ++y) |
- for (int x = 0; x < opaqueBitmap.width(); ++x) |
- *opaqueBitmap.getAddr32(x, y) = 0xFFFFFFFF; |
- |
- SkBitmap alphaBitmap; |
- alphaBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10, 0, kPremul_SkAlphaType); |
- alphaBitmap.allocPixels(); |
- for (int y = 0; y < alphaBitmap.height(); ++y) |
- for (int x = 0; x < alphaBitmap.width(); ++x) |
- *alphaBitmap.getAddr32(x, y) = 0x00000000; |
- |
- SkPaint paint; |
- paint.setXfermodeMode(SkXfermode::kSrc_Mode); |
- |
- context.drawBitmap(opaqueBitmap, 10, 10, &paint); |
- EXPECT_EQ_RECT(IntRect(10, 10, 10, 10), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawBitmap(alphaBitmap, 10, 0, &paint); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawBitmap(alphaBitmap, 10, 1, &paint); |
- EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawBitmap(alphaBitmap, 0, 10, &paint); |
- EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawBitmap(alphaBitmap, 1, 10, &paint); |
- EXPECT_EQ_RECT(IntRect(11, 11, 89, 89), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
-} |
- |
-TEST(GraphicsContextTest, trackOpaqueDrawBitmapRectTest) |
-{ |
- SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); |
- bitmap.allocPixels(); |
- bitmap.eraseColor(0); |
- SkCanvas canvas(bitmap); |
- |
- GraphicsContext context(&canvas); |
- context.setTrackOpaqueRegion(true); |
- |
- Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
- |
- SkBitmap opaqueBitmap; |
- opaqueBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10, 0, kOpaque_SkAlphaType); |
- opaqueBitmap.allocPixels(); |
- for (int y = 0; y < opaqueBitmap.height(); ++y) |
- for (int x = 0; x < opaqueBitmap.width(); ++x) |
- *opaqueBitmap.getAddr32(x, y) = 0xFFFFFFFF; |
- |
- SkBitmap alphaBitmap; |
- alphaBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10, 0, kPremul_SkAlphaType); |
- alphaBitmap.allocPixels(); |
- for (int y = 0; y < alphaBitmap.height(); ++y) |
- for (int x = 0; x < alphaBitmap.width(); ++x) |
- *alphaBitmap.getAddr32(x, y) = 0x00000000; |
- |
- SkPaint paint; |
- paint.setXfermodeMode(SkXfermode::kSrc_Mode); |
- |
- context.drawBitmapRect(opaqueBitmap, 0, SkRect::MakeXYWH(10, 10, 90, 90), &paint); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawBitmapRect(alphaBitmap, 0, SkRect::MakeXYWH(10, 0, 10, 10), &paint); |
- EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawBitmapRect(alphaBitmap, 0, SkRect::MakeXYWH(10, 0, 10, 11), &paint); |
- EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawBitmapRect(alphaBitmap, 0, SkRect::MakeXYWH(0, 10, 10, 10), &paint); |
- EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.drawBitmapRect(alphaBitmap, 0, SkRect::MakeXYWH(0, 10, 11, 10), &paint); |
- EXPECT_EQ_RECT(IntRect(11, 11, 89, 89), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
-} |
- |
-TEST(GraphicsContextTest, contextTransparencyLayerTest) |
-{ |
- SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); |
- bitmap.allocPixels(); |
- bitmap.eraseColor(0); |
- SkCanvas canvas(bitmap); |
- |
- GraphicsContext context(&canvas); |
- context.setTrackOpaqueRegion(true); |
- |
- Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
- context.fillRect(FloatRect(20, 20, 10, 10), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
- |
- context.clearRect(FloatRect(20, 20, 10, 10)); |
- EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
- |
- context.beginTransparencyLayer(0.5); |
- context.save(); |
- context.fillRect(FloatRect(20, 20, 10, 10), opaque, CompositeSourceOver); |
- context.restore(); |
- context.endLayer(); |
- EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
- |
- context.clearRect(FloatRect(20, 20, 10, 10)); |
- EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
- |
- context.beginTransparencyLayer(0.5); |
- context.fillRect(FloatRect(20, 20, 10, 10), opaque, CompositeSourceOver); |
- context.endLayer(); |
- EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
-} |
- |
-TEST(GraphicsContextTest, UnboundedDrawsAreClipped) |
-{ |
- SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); |
- bitmap.allocPixels(); |
- bitmap.eraseColor(0); |
- SkCanvas canvas(bitmap); |
- |
- GraphicsContext context(&canvas); |
- context.setTrackOpaqueRegion(true); |
- |
- Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
- Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
- |
- Path path; |
- context.setShouldAntialias(false); |
- context.setMiterLimit(1); |
- context.setStrokeThickness(5); |
- context.setLineCap(SquareCap); |
- context.setStrokeStyle(SolidStroke); |
- |
- // Make skia unable to compute fast bounds for our paths. |
- DashArray dashArray; |
- dashArray.append(1); |
- dashArray.append(0); |
- context.setLineDash(dashArray, 0); |
- |
- // Make the device opaque in 10,10 40x40. |
- context.fillRect(FloatRect(10, 10, 40, 40), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); |
- |
- // Clip to the left edge of the opaque area. |
- context.clip(IntRect(10, 10, 10, 40)); |
- |
- // Draw a path that gets clipped. This should destroy the opaque area but only inside the clip. |
- context.setCompositeOperation(CompositeSourceOut); |
- context.setFillColor(alpha); |
- path.moveTo(FloatPoint(10, 10)); |
- path.addLineTo(FloatPoint(40, 40)); |
- context.strokePath(path); |
- |
- EXPECT_EQ_RECT(IntRect(20, 10, 30, 40), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); |
-} |
- |
-TEST(GraphicsContextTest, PreserveOpaqueOnlyMattersForFirstLayer) |
-{ |
- SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); |
- bitmap.allocPixels(); |
- bitmap.eraseColor(0); |
- SkCanvas canvas(bitmap); |
- |
- GraphicsContext context(&canvas); |
- context.setTrackOpaqueRegion(true); |
- |
- Color opaque(1.0f, 0.0f, 0.0f, 1.0f); |
- Color alpha(0.0f, 0.0f, 0.0f, 0.0f); |
- |
- Path path; |
- context.setShouldAntialias(false); |
- context.setMiterLimit(1); |
- context.setStrokeThickness(5); |
- context.setLineCap(SquareCap); |
- context.setStrokeStyle(SolidStroke); |
- |
- // Make skia unable to compute fast bounds for our paths. |
- DashArray dashArray; |
- dashArray.append(1); |
- dashArray.append(0); |
- context.setLineDash(dashArray, 0); |
- |
- // Make the device opaque in 10,10 40x40. |
- context.fillRect(FloatRect(10, 10, 40, 40), opaque, CompositeSourceOver); |
- EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); |
- |
- // Begin a layer that preserves opaque. |
- context.setCompositeOperation(CompositeSourceOver); |
- context.beginTransparencyLayer(0.5); |
- |
- // Begin a layer that does not preserve opaque. |
- context.setCompositeOperation(CompositeSourceOut); |
- context.beginTransparencyLayer(0.5); |
- |
- // This should not destroy the device opaqueness. |
- context.fillRect(FloatRect(10, 10, 40, 40), opaque, CompositeSourceOver); |
- |
- // This should not destroy the device opaqueness either. |
- context.setFillColor(opaque); |
- path.moveTo(FloatPoint(10, 10)); |
- path.addLineTo(FloatPoint(40, 40)); |
- context.strokePath(path); |
- |
- context.endLayer(); |
- context.endLayer(); |
- EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); |
- |
- // Now begin a layer that does not preserve opaque and draw through it to the device. |
- context.setCompositeOperation(CompositeSourceOut); |
- context.beginTransparencyLayer(0.5); |
- |
- // This should destroy the device opaqueness. |
- context.fillRect(FloatRect(10, 10, 40, 40), opaque, CompositeSourceOver); |
- |
- context.endLayer(); |
- EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); |
- |
- // Now we draw with a path for which it cannot compute fast bounds. This should destroy the entire opaque region. |
- |
- context.setCompositeOperation(CompositeSourceOut); |
- context.beginTransparencyLayer(0.5); |
- |
- // This should nuke the device opaqueness. |
- context.setFillColor(opaque); |
- path.moveTo(FloatPoint(10, 10)); |
- path.addLineTo(FloatPoint(40, 40)); |
- context.strokePath(path); |
- |
- context.endLayer(); |
- EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); |
- EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); |
-} |
- |
-#define DISPATCH(c1, c2, op, params) do { c1.op(params); c2.op(params); } while (0); |
- |
-TEST(GraphicsContextTest, RecordingTotalMatrix) |
-{ |
- SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); |
- bitmap.allocPixels(); |
- bitmap.eraseColor(0); |
- SkCanvas canvas(bitmap); |
- GraphicsContext context(&canvas); |
- |
- SkBitmapDevice controlDevice(SkBitmap::kNo_Config, 400, 400); |
- SkCanvas controlCanvas(&controlDevice); |
- GraphicsContext controlContext(&controlCanvas); |
- |
- EXPECT_EQ(context.getCTM(), controlContext.getCTM()); |
- DISPATCH(context, controlContext, scale, FloatSize(2, 2)); |
- EXPECT_EQ(context.getCTM(), controlContext.getCTM()); |
- |
- controlContext.save(); |
- context.beginRecording(FloatRect(0, 0, 200, 200)); |
- DISPATCH(context, controlContext, translate, FloatSize(10, 10)); |
- EXPECT_EQ(context.getCTM(), controlContext.getCTM()); |
- |
- controlContext.save(); |
- context.beginRecording(FloatRect(10, 10, 100, 100)); |
- DISPATCH(context, controlContext, rotate, 45); |
- EXPECT_EQ(context.getCTM(), controlContext.getCTM()); |
- |
- controlContext.restore(); |
- context.endRecording(); |
- EXPECT_EQ(context.getCTM(), controlContext.getCTM()); |
- |
- controlContext.restore(); |
- context.endRecording(); |
- EXPECT_EQ(context.getCTM(), controlContext.getCTM()); |
-} |
- |
-} // namespace |