1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "skia/ext/platform_canvas.h"
7 #include "skia/ext/bitmap_platform_device.h"
8 #include "third_party/skia/include/core/SkTypes.h"
12 SkBaseDevice
* GetTopDevice(const SkCanvas
& canvas
) {
13 return canvas
.getTopDevice(true);
16 bool SupportsPlatformPaint(const SkCanvas
* canvas
) {
17 PlatformDevice
* platform_device
= GetPlatformDevice(GetTopDevice(*canvas
));
18 return platform_device
&& platform_device
->SupportsPlatformPaint();
21 PlatformSurface
BeginPlatformPaint(SkCanvas
* canvas
) {
22 PlatformDevice
* platform_device
= GetPlatformDevice(GetTopDevice(*canvas
));
24 return platform_device
->BeginPlatformPaint();
29 void EndPlatformPaint(SkCanvas
* canvas
) {
30 PlatformDevice
* platform_device
= GetPlatformDevice(GetTopDevice(*canvas
));
32 platform_device
->EndPlatformPaint();
35 void DrawToNativeContext(SkCanvas
* canvas
, PlatformSurface context
, int x
,
36 int y
, const PlatformRect
* src_rect
) {
37 PlatformDevice
* platform_device
= GetPlatformDevice(GetTopDevice(*canvas
));
39 platform_device
->DrawToNativeContext(context
, x
, y
, src_rect
);
42 void MakeOpaque(SkCanvas
* canvas
, int x
, int y
, int width
, int height
) {
43 if (width
<= 0 || height
<= 0)
47 rect
.setXYWH(SkIntToScalar(x
), SkIntToScalar(y
),
48 SkIntToScalar(width
), SkIntToScalar(height
));
50 paint
.setColor(SK_ColorBLACK
);
51 paint
.setXfermodeMode(SkXfermode::kDstATop_Mode
);
52 canvas
->drawRect(rect
, paint
);
55 size_t PlatformCanvasStrideForWidth(unsigned width
) {
59 SkCanvas
* CreateCanvas(const skia::RefPtr
<SkBaseDevice
>& device
, OnFailureType failureType
) {
61 if (CRASH_ON_FAILURE
== failureType
)
65 return new SkCanvas(device
.get());
68 PlatformBitmap::PlatformBitmap() : surface_(0), platform_extra_(0) {}