summaryrefslogtreecommitdiffstats
path: root/skia/ext/platform_canvas.cc
diff options
context:
space:
mode:
authorreed@google.com <reed@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-31 18:15:09 +0000
committerreed@google.com <reed@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-31 18:15:09 +0000
commit6a736e9e6db9c688a1c0ddbb1a56bd9d4785a0ea (patch)
tree9538533f08a7b8ac719a97791083ab88088177c4 /skia/ext/platform_canvas.cc
parentcb90452a7ce186deb3257ca73ec169d3a91f8f36 (diff)
downloadchromium_src-6a736e9e6db9c688a1c0ddbb1a56bd9d4785a0ea.zip
chromium_src-6a736e9e6db9c688a1c0ddbb1a56bd9d4785a0ea.tar.gz
chromium_src-6a736e9e6db9c688a1c0ddbb1a56bd9d4785a0ea.tar.bz2
implement MakeOpaque at the canvas level, respecting matrix and clip
Review URL: http://codereview.chromium.org/7799023 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@99009 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'skia/ext/platform_canvas.cc')
-rw-r--r--skia/ext/platform_canvas.cc19
1 files changed, 16 insertions, 3 deletions
diff --git a/skia/ext/platform_canvas.cc b/skia/ext/platform_canvas.cc
index 279af45..f4510744 100644
--- a/skia/ext/platform_canvas.cc
+++ b/skia/ext/platform_canvas.cc
@@ -76,10 +76,23 @@ void DrawToNativeContext(SkCanvas* canvas, PlatformSurface context, int x,
platform_device->DrawToNativeContext(context, x, y, src_rect);
}
+static SkPMColor MakeOpaqueXfermodeProc(SkPMColor src, SkPMColor dst) {
+ return dst | (0xFF << SK_A32_SHIFT);
+}
+
void MakeOpaque(SkCanvas* canvas, int x, int y, int width, int height) {
- PlatformDevice* platform_device = GetPlatformDevice(GetTopDevice(*canvas));
- if (platform_device)
- platform_device->MakeOpaque(x, y, width, height);
+ if (width <= 0 || height <= 0)
+ return;
+
+ SkRect rect;
+ rect.setXYWH(SkIntToScalar(x), SkIntToScalar(y),
+ SkIntToScalar(width), SkIntToScalar(height));
+ SkPaint paint;
+ // so we don't draw anything on a device that ignores xfermodes
+ paint.setColor(0);
+ // install our custom mode
+ paint.setXfermode(new SkProcXfermode(MakeOpaqueXfermodeProc))->unref();
+ canvas->drawRect(rect, paint);
}
} // namespace skia