This change implements a first pass in the effort to remove the dependency of PlatformDevice within Chrome. The Skia library now provides multiple back-ends for the SkDevice class, so PlatformDevice's inheritance of SkDevice, and the assumption of instances of PlatformDevice limits the use of these new back-ends.
A new set of helper functions is provided for the PlatformDevice entry points. Upon construction of a PlatformDevice, a pointer to the interface is cached in the parent SkDevice's SkMetaData. The new helper functions forward calls to the interface cached in the metadata. BUG=NONE TEST=NONE Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=86625 Reverted: http://src.chromium.org/viewvc/chrome?view=rev&revision=86625 Review URL: http://codereview.chromium.org/7019013 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86823 0039d316-1c4b-4281-b951-d872f2087c98
This commit is contained in:
chrome
content
browser
plugin
renderer
ppapi/proxy
printing
emf_win.ccemf_win.himage_win.ccmetafile.hpdf_metafile_cairo_linux.ccpdf_metafile_cairo_linux.hpdf_metafile_cg_mac.ccpdf_metafile_cg_mac.hpdf_metafile_skia.ccpdf_metafile_skia.hprinted_document_win.ccprinting_context_win.cc
skia
ext
bitmap_platform_device.ccbitmap_platform_device_linux.hbitmap_platform_device_mac.ccbitmap_platform_device_mac.hbitmap_platform_device_win.ccbitmap_platform_device_win.hcanvas_paint_linux.hcanvas_paint_mac.hcanvas_paint_win.hplatform_canvas.ccplatform_canvas.hplatform_canvas_linux.ccplatform_canvas_mac.ccplatform_canvas_unittest.ccplatform_canvas_win.ccplatform_device.ccplatform_device.hplatform_device_linux.ccplatform_device_linux.hplatform_device_mac.ccplatform_device_mac.hplatform_device_win.ccplatform_device_win.hskia_utils_mac.mmvector_canvas.ccvector_canvas.hvector_canvas_unittest.ccvector_platform_device_emf_win.ccvector_platform_device_emf_win.hvector_platform_device_skia.ccvector_platform_device_skia.h
skia.gypui
base
gfx
views
controls
widget
webkit
@ -1244,7 +1244,7 @@ bool AeroPeekManager::GetTabPreview(int tab_id, SkBitmap* preview) {
|
||||
&canvas))
|
||||
return false;
|
||||
|
||||
const SkBitmap& bitmap = canvas.getTopPlatformDevice().accessBitmap(false);
|
||||
const SkBitmap& bitmap = skia::GetTopDevice(canvas)->accessBitmap(false);
|
||||
bitmap.copyTo(preview, SkBitmap::kARGB_8888_Config);
|
||||
return true;
|
||||
}
|
||||
|
@ -1205,7 +1205,7 @@ bool CaptureVisibleTabFunction::CaptureSnapshotFromBackingStore(
|
||||
VLOG(1) << "captureVisibleTab() got image from backing store.";
|
||||
|
||||
SendResultFromBitmap(
|
||||
temp_canvas.getTopPlatformDevice().accessBitmap(false));
|
||||
skia::GetTopDevice(temp_canvas)->accessBitmap(false));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -169,20 +169,22 @@ void DrawDeemphasized(const SkColor& color,
|
||||
HDC backing_store_dc,
|
||||
HDC paint_dc) {
|
||||
gfx::CanvasSkia canvas(paint_rect.width(), paint_rect.height(), true);
|
||||
HDC dc = canvas.beginPlatformPaint();
|
||||
BitBlt(dc,
|
||||
0,
|
||||
0,
|
||||
paint_rect.width(),
|
||||
paint_rect.height(),
|
||||
backing_store_dc,
|
||||
paint_rect.x(),
|
||||
paint_rect.y(),
|
||||
SRCCOPY);
|
||||
canvas.endPlatformPaint();
|
||||
{
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(&canvas);
|
||||
HDC dc = scoped_platform_paint.GetPlatformSurface();
|
||||
BitBlt(dc,
|
||||
0,
|
||||
0,
|
||||
paint_rect.width(),
|
||||
paint_rect.height(),
|
||||
backing_store_dc,
|
||||
paint_rect.x(),
|
||||
paint_rect.y(),
|
||||
SRCCOPY);
|
||||
}
|
||||
canvas.FillRectInt(color, 0, 0, paint_rect.width(), paint_rect.height());
|
||||
canvas.getTopPlatformDevice().drawToHDC(paint_dc, paint_rect.x(),
|
||||
paint_rect.y(), NULL);
|
||||
skia::DrawToNativeContext(&canvas, paint_dc, paint_rect.x(),
|
||||
paint_rect.y(), NULL);
|
||||
}
|
||||
|
||||
// The plugin wrapper window which lives in the browser process has this proc
|
||||
@ -961,8 +963,8 @@ void RenderWidgetHostViewWin::DrawBackground(const RECT& dirty_rect,
|
||||
dc_rect.right - dc_rect.left,
|
||||
dc_rect.bottom - dc_rect.top);
|
||||
|
||||
canvas.getTopPlatformDevice().drawToHDC(*dc, dirty_rect.left,
|
||||
dirty_rect.top, NULL);
|
||||
skia::DrawToNativeContext(&canvas, *dc, dirty_rect.left, dirty_rect.top,
|
||||
NULL);
|
||||
} else {
|
||||
HBRUSH white_brush = reinterpret_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
|
||||
dc->FillRect(&dirty_rect, white_brush);
|
||||
|
@ -21,7 +21,6 @@
|
||||
#include "content/browser/tab_contents/tab_contents.h"
|
||||
#include "content/common/notification_service.h"
|
||||
#include "googleurl/src/gurl.h"
|
||||
#include "skia/ext/bitmap_platform_device.h"
|
||||
#include "skia/ext/image_operations.h"
|
||||
#include "skia/ext/platform_canvas.h"
|
||||
#include "third_party/skia/include/core/SkBitmap.h"
|
||||
@ -80,7 +79,7 @@ SkBitmap GetBitmapForBackingStore(
|
||||
if (!backing_store->CopyFromBackingStore(gfx::Rect(backing_store->size()),
|
||||
&temp_canvas))
|
||||
return result;
|
||||
const SkBitmap& bmp = temp_canvas.getTopPlatformDevice().accessBitmap(false);
|
||||
const SkBitmap& bmp = skia::GetTopDevice(temp_canvas)->accessBitmap(false);
|
||||
|
||||
// Check if a clipped thumbnail is requested.
|
||||
if (options & ThumbnailGenerator::kClippedThumbnail) {
|
||||
|
@ -103,11 +103,11 @@ class ThumbnailGeneratorTest : public testing::Test {
|
||||
transport_dib_->GetPlatformCanvas(kBitmapWidth, kBitmapHeight));
|
||||
switch (type) {
|
||||
case TRANSPORT_BLACK:
|
||||
canvas->getTopPlatformDevice().accessBitmap(true).eraseARGB(
|
||||
skia::GetTopDevice(*canvas)->accessBitmap(true).eraseARGB(
|
||||
0xFF, 0, 0, 0);
|
||||
break;
|
||||
case TRANSPORT_WHITE:
|
||||
canvas->getTopPlatformDevice().accessBitmap(true).eraseARGB(
|
||||
skia::GetTopDevice(*canvas)->accessBitmap(true).eraseARGB(
|
||||
0xFF, 0xFF, 0xFF, 0xFF);
|
||||
break;
|
||||
case TRANSPORT_OTHER:
|
||||
@ -211,7 +211,7 @@ TEST(ThumbnailGeneratorSimpleTest, CalculateBoringScore_SingleColor) {
|
||||
// Fill all pixesl in black.
|
||||
canvas.FillRectInt(kBlack, 0, 0, kSize.width(), kSize.height());
|
||||
|
||||
SkBitmap bitmap = canvas.getTopPlatformDevice().accessBitmap(false);
|
||||
SkBitmap bitmap = skia::GetTopDevice(canvas)->accessBitmap(false);
|
||||
// The thumbnail should deserve the highest boring score.
|
||||
EXPECT_DOUBLE_EQ(1.0, ThumbnailGenerator::CalculateBoringScore(&bitmap));
|
||||
}
|
||||
@ -227,7 +227,7 @@ TEST(ThumbnailGeneratorSimpleTest, CalculateBoringScore_TwoColors) {
|
||||
// Fill the left half pixels in white.
|
||||
canvas.FillRectInt(kWhite, 0, 0, kSize.width() / 2, kSize.height());
|
||||
|
||||
SkBitmap bitmap = canvas.getTopPlatformDevice().accessBitmap(false);
|
||||
SkBitmap bitmap = skia::GetTopDevice(canvas)->accessBitmap(false);
|
||||
ASSERT_EQ(kSize.width(), bitmap.width());
|
||||
ASSERT_EQ(kSize.height(), bitmap.height());
|
||||
// The thumbnail should be less boring because two colors are used.
|
||||
@ -237,7 +237,7 @@ TEST(ThumbnailGeneratorSimpleTest, CalculateBoringScore_TwoColors) {
|
||||
TEST(ThumbnailGeneratorSimpleTest, GetClippedBitmap_TallerThanWide) {
|
||||
// The input bitmap is vertically long.
|
||||
gfx::CanvasSkia canvas(40, 90, true);
|
||||
const SkBitmap bitmap = canvas.getTopPlatformDevice().accessBitmap(false);
|
||||
const SkBitmap bitmap = skia::GetTopDevice(canvas)->accessBitmap(false);
|
||||
|
||||
// The desired size is square.
|
||||
ThumbnailGenerator::ClipResult clip_result = ThumbnailGenerator::kNotClipped;
|
||||
@ -253,7 +253,7 @@ TEST(ThumbnailGeneratorSimpleTest, GetClippedBitmap_TallerThanWide) {
|
||||
TEST(ThumbnailGeneratorSimpleTest, GetClippedBitmap_WiderThanTall) {
|
||||
// The input bitmap is horizontally long.
|
||||
gfx::CanvasSkia canvas(90, 40, true);
|
||||
const SkBitmap bitmap = canvas.getTopPlatformDevice().accessBitmap(false);
|
||||
const SkBitmap bitmap = skia::GetTopDevice(canvas)->accessBitmap(false);
|
||||
|
||||
// The desired size is square.
|
||||
ThumbnailGenerator::ClipResult clip_result = ThumbnailGenerator::kNotClipped;
|
||||
@ -269,7 +269,7 @@ TEST(ThumbnailGeneratorSimpleTest, GetClippedBitmap_WiderThanTall) {
|
||||
TEST(ThumbnailGeneratorSimpleTest, GetClippedBitmap_NotClipped) {
|
||||
// The input bitmap is square.
|
||||
gfx::CanvasSkia canvas(40, 40, true);
|
||||
const SkBitmap bitmap = canvas.getTopPlatformDevice().accessBitmap(false);
|
||||
const SkBitmap bitmap = skia::GetTopDevice(canvas)->accessBitmap(false);
|
||||
|
||||
// The desired size is square.
|
||||
ThumbnailGenerator::ClipResult clip_result = ThumbnailGenerator::kNotClipped;
|
||||
@ -285,7 +285,7 @@ TEST(ThumbnailGeneratorSimpleTest, GetClippedBitmap_NotClipped) {
|
||||
TEST(ThumbnailGeneratorSimpleTest, GetClippedBitmap_NonSquareOutput) {
|
||||
// The input bitmap is square.
|
||||
gfx::CanvasSkia canvas(40, 40, true);
|
||||
const SkBitmap bitmap = canvas.getTopPlatformDevice().accessBitmap(false);
|
||||
const SkBitmap bitmap = skia::GetTopDevice(canvas)->accessBitmap(false);
|
||||
|
||||
// The desired size is horizontally long.
|
||||
ThumbnailGenerator::ClipResult clip_result = ThumbnailGenerator::kNotClipped;
|
||||
|
@ -655,7 +655,8 @@ SkBitmap TabRendererGtk::PaintBitmap() {
|
||||
cairo_surface_t* TabRendererGtk::PaintToSurface() {
|
||||
gfx::CanvasSkia canvas(width(), height(), false);
|
||||
Paint(&canvas);
|
||||
return cairo_surface_reference(cairo_get_target(canvas.beginPlatformPaint()));
|
||||
return cairo_surface_reference(cairo_get_target(
|
||||
skia::BeginPlatformPaint(&canvas)));
|
||||
}
|
||||
|
||||
void TabRendererGtk::SchedulePaint() {
|
||||
|
@ -2315,7 +2315,7 @@ void OmniboxViewWin::DrawSlashForInsecureScheme(HDC hdc,
|
||||
}
|
||||
|
||||
// Now copy what we drew to the target HDC.
|
||||
canvas.getTopPlatformDevice().drawToHDC(hdc,
|
||||
skia::DrawToNativeContext(&canvas, hdc,
|
||||
scheme_rect.left + canvas_paint_clip_rect.left - canvas_clip_rect.left,
|
||||
std::max(scheme_rect.top, client_rect.top) + canvas_paint_clip_rect.top -
|
||||
canvas_clip_rect.top, &canvas_paint_clip_rect);
|
||||
|
@ -135,7 +135,7 @@ void DraggedTabView::PaintDetachedView(gfx::Canvas* canvas) {
|
||||
gfx::Size ps = GetPreferredSize();
|
||||
gfx::CanvasSkia scale_canvas(ps.width(), ps.height(), false);
|
||||
SkBitmap& bitmap_device = const_cast<SkBitmap&>(
|
||||
scale_canvas.getTopPlatformDevice().accessBitmap(true));
|
||||
skia::GetTopDevice(scale_canvas)->accessBitmap(true));
|
||||
bitmap_device.eraseARGB(0, 0, 0, 0);
|
||||
|
||||
int tab_height = renderer_bounds_.back().height();
|
||||
|
@ -110,9 +110,9 @@ void NativeViewPhotoboothWin::PaintScreenshotIntoCanvas(
|
||||
SRCCOPY);
|
||||
// Windows screws up the alpha channel on all text it draws, and so we need
|
||||
// to call makeOpaque _after_ the blit to correct for this.
|
||||
canvas->AsCanvasSkia()->getTopPlatformDevice().makeOpaque(
|
||||
target_bounds.x(), target_bounds.y(), target_bounds.width(),
|
||||
target_bounds.height());
|
||||
skia::MakeOpaque(canvas->AsCanvasSkia(), target_bounds.x(),
|
||||
target_bounds.y(), target_bounds.width(),
|
||||
target_bounds.height());
|
||||
ReleaseDC(current_hwnd_, source_dc);
|
||||
canvas->EndPlatformPaint();
|
||||
}
|
||||
|
@ -9,7 +9,6 @@
|
||||
#include <atltheme.h>
|
||||
|
||||
#include "base/logging.h"
|
||||
#include "skia/ext/bitmap_platform_device_win.h"
|
||||
#include "third_party/skia/include/effects/SkGradientShader.h"
|
||||
#include "ui/gfx/canvas_skia.h"
|
||||
|
||||
@ -32,10 +31,10 @@ void GetRebarGradientColors(int width, int x1, int x2,
|
||||
// On Windows XP+, if using a Theme, we can ask the theme to render the
|
||||
// gradient for us.
|
||||
if (!theme.IsThemeNull()) {
|
||||
HDC dc = canvas.beginPlatformPaint();
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(&canvas);
|
||||
HDC dc = scoped_platform_paint.GetPlatformSurface();
|
||||
RECT rect = { 0, 0, width, 1 };
|
||||
theme.DrawThemeBackground(dc, 0, 0, &rect, NULL);
|
||||
canvas.endPlatformPaint();
|
||||
} else {
|
||||
// On Windows 2000 or Windows XP+ with the Classic theme selected, we need
|
||||
// to build our own gradient using system colors.
|
||||
@ -64,11 +63,12 @@ void GetRebarGradientColors(int width, int x1, int x2,
|
||||
// Extract the color values from the selected pixels
|
||||
// The | in the following operations forces the alpha to 0xFF. This is
|
||||
// needed as windows sets the alpha to 0 when it renders.
|
||||
skia::BitmapPlatformDevice& device =
|
||||
static_cast<skia::BitmapPlatformDevice&>(
|
||||
canvas.getTopPlatformDevice());
|
||||
*c1 = 0xFF000000 | device.getColorAt(x1, 0);
|
||||
*c2 = 0xFF000000 | device.getColorAt(x2, 0);
|
||||
SkDevice* device = skia::GetTopDevice(canvas);
|
||||
const SkBitmap& bitmap = device->accessBitmap(false);
|
||||
SkAutoLockPixels lock(bitmap);
|
||||
|
||||
*c1 = 0xFF000000 | bitmap.getColor(x1, 0);
|
||||
*c2 = 0xFF000000 | bitmap.getColor(x2, 0);
|
||||
}
|
||||
|
||||
void GetDarkLineColor(SkColor* dark_color) {
|
||||
|
@ -26,7 +26,6 @@
|
||||
#include "content/renderer/content_renderer_client.h"
|
||||
#include "googleurl/src/gurl.h"
|
||||
#include "net/base/data_url.h"
|
||||
#include "skia/ext/bitmap_platform_device.h"
|
||||
#include "skia/ext/image_operations.h"
|
||||
#include "skia/ext/platform_canvas.h"
|
||||
#include "third_party/WebKit/Source/WebKit/chromium/public/WebCString.h"
|
||||
@ -595,10 +594,9 @@ bool ChromeRenderViewObserver::CaptureFrameThumbnail(WebView* view,
|
||||
if (!PaintViewIntoCanvas(view, canvas))
|
||||
return false;
|
||||
|
||||
skia::BitmapPlatformDevice& device =
|
||||
static_cast<skia::BitmapPlatformDevice&>(canvas.getTopPlatformDevice());
|
||||
SkDevice* device = skia::GetTopDevice(canvas);
|
||||
|
||||
const SkBitmap& src_bmp = device.accessBitmap(false);
|
||||
const SkBitmap& src_bmp = device->accessBitmap(false);
|
||||
|
||||
SkRect dest_rect = { 0, 0, SkIntToScalar(w), SkIntToScalar(h) };
|
||||
float dest_aspect = dest_rect.width() / dest_rect.height();
|
||||
@ -633,7 +631,7 @@ bool ChromeRenderViewObserver::CaptureFrameThumbnail(WebView* view,
|
||||
score->at_top = (view->mainFrame()->scrollOffset().height == 0);
|
||||
|
||||
SkBitmap subset;
|
||||
device.accessBitmap(false).extractSubset(&subset, src_rect);
|
||||
device->accessBitmap(false).extractSubset(&subset, src_rect);
|
||||
|
||||
// First do a fast downsample by powers of two to get close to the final size.
|
||||
SkBitmap downsampled_subset =
|
||||
@ -659,10 +657,9 @@ bool ChromeRenderViewObserver::CaptureSnapshot(WebView* view,
|
||||
if (!PaintViewIntoCanvas(view, canvas))
|
||||
return false;
|
||||
|
||||
skia::BitmapPlatformDevice& device =
|
||||
static_cast<skia::BitmapPlatformDevice&>(canvas.getTopPlatformDevice());
|
||||
SkDevice* device = skia::GetTopDevice(canvas);
|
||||
|
||||
const SkBitmap& bitmap = device.accessBitmap(false);
|
||||
const SkBitmap& bitmap = device->accessBitmap(false);
|
||||
if (!bitmap.copyTo(snapshot, SkBitmap::kARGB_8888_Config))
|
||||
return false;
|
||||
|
||||
|
@ -220,7 +220,7 @@ void PrintWebViewHelper::PrintPageInternal(
|
||||
gfx::Rect content_area(margin_left_in_points, margin_top_in_points,
|
||||
content_width_in_points, content_height_in_points);
|
||||
|
||||
skia::PlatformDevice* device = metafile->StartPageForVectorCanvas(
|
||||
SkDevice* device = metafile->StartPageForVectorCanvas(
|
||||
page_size, content_area, 1.0f);
|
||||
if (!device)
|
||||
return;
|
||||
|
@ -81,7 +81,7 @@ void PrintWebViewHelper::PrintPageInternal(
|
||||
scoped_ptr<Metafile> metafile(new printing::NativeMetafile);
|
||||
metafile->Init();
|
||||
DCHECK(metafile->context());
|
||||
skia::PlatformDevice::InitializeDC(metafile->context());
|
||||
skia::InitializeDC(metafile->context());
|
||||
|
||||
int page_number = params.page_number;
|
||||
|
||||
@ -228,7 +228,7 @@ void PrintWebViewHelper::RenderPage(
|
||||
static_cast<int>(margin_top_in_points),
|
||||
static_cast<int>(content_width_in_points),
|
||||
static_cast<int>(content_height_in_points));
|
||||
skia::PlatformDevice* device = (*metafile)->StartPageForVectorCanvas(
|
||||
SkDevice* device = (*metafile)->StartPageForVectorCanvas(
|
||||
page_size, content_area, frame->getPrintPageShrink(page_number));
|
||||
DCHECK(device);
|
||||
// The printPage method may take a reference to the canvas we pass down, so it
|
||||
@ -290,7 +290,7 @@ void PrintWebViewHelper::RenderPage(
|
||||
metafile2->Init();
|
||||
HDC hdc = metafile2->context();
|
||||
DCHECK(hdc);
|
||||
skia::PlatformDevice::InitializeDC(hdc);
|
||||
skia::InitializeDC(hdc);
|
||||
|
||||
RECT metafile_bounds = (*metafile)->GetPageBounds(1).ToRECT();
|
||||
// Process the old metafile, placing all non-AlphaBlend calls into the
|
||||
|
@ -8,7 +8,6 @@
|
||||
#include "base/metrics/histogram.h"
|
||||
#include "base/time.h"
|
||||
#include "content/renderer/render_view.h"
|
||||
#include "skia/ext/bitmap_platform_device.h"
|
||||
#include "skia/ext/image_operations.h"
|
||||
#include "skia/ext/platform_canvas.h"
|
||||
#include "third_party/skia/include/core/SkBitmap.h"
|
||||
@ -53,12 +52,11 @@ SkBitmap GrabPhishingThumbnail(RenderView* render_view,
|
||||
view->paint(webkit_glue::ToWebCanvas(&canvas),
|
||||
WebRect(0, 0, view_size.width(), view_size.height()));
|
||||
|
||||
skia::BitmapPlatformDevice& device =
|
||||
static_cast<skia::BitmapPlatformDevice&>(canvas.getTopPlatformDevice());
|
||||
SkDevice* device = skia::GetTopDevice(canvas);
|
||||
|
||||
// Now resize the thumbnail to the right size. Note: it is important that we
|
||||
// use this resize algorithm here.
|
||||
const SkBitmap& bitmap = device.accessBitmap(false);
|
||||
const SkBitmap& bitmap = device->accessBitmap(false);
|
||||
SkBitmap thumbnail = skia::ImageOperations::Resize(
|
||||
bitmap,
|
||||
skia::ImageOperations::RESIZE_LANCZOS3,
|
||||
|
@ -123,14 +123,14 @@ bool BackingStoreMac::CopyFromBackingStore(const gfx::Rect& rect,
|
||||
if (!output->initialize(rect.width(), rect.height(), true))
|
||||
return false;
|
||||
|
||||
CGContextRef temp_context = output->beginPlatformPaint();
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(output);
|
||||
CGContextRef temp_context = scoped_platform_paint.GetPlatformSurface();
|
||||
CGContextSaveGState(temp_context);
|
||||
CGContextTranslateCTM(temp_context, 0.0, size().height());
|
||||
CGContextScaleCTM(temp_context, 1.0, -1.0);
|
||||
CGContextDrawLayerAtPoint(temp_context, CGPointMake(rect.x(), rect.y()),
|
||||
cg_layer());
|
||||
CGContextRestoreGState(temp_context);
|
||||
output->endPlatformPaint();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -72,7 +72,7 @@ void BackingStoreSkia::PaintToBackingStore(
|
||||
SkRect dstrect = SkRect::MakeXYWH(
|
||||
SkIntToScalar(copy_rect.x()), SkIntToScalar(copy_rect.y()),
|
||||
SkIntToScalar(w), SkIntToScalar(h));
|
||||
SkBitmap b = p_canvas->getTopPlatformDevice().accessBitmap(false);
|
||||
SkBitmap b = skia::GetTopDevice(*p_canvas)->accessBitmap(false);
|
||||
canvas_.get()->drawBitmapRect(b, &srcrect, dstrect);
|
||||
}
|
||||
}
|
||||
@ -95,7 +95,7 @@ bool BackingStoreSkia::CopyFromBackingStore(const gfx::Rect& rect,
|
||||
if (!output->initialize(width, height, true))
|
||||
return false;
|
||||
|
||||
SkBitmap bitmap = output->getTopPlatformDevice().accessBitmap(true);
|
||||
SkBitmap bitmap = skia::GetTopDevice(*output)->accessBitmap(true);
|
||||
SkIRect skrect = SkIRect::MakeXYWH(rect.x(), rect.y(), width, height);
|
||||
SkBitmap b;
|
||||
if (!canvas_->readPixels(skrect, &b))
|
||||
|
@ -158,10 +158,10 @@ bool BackingStoreWin::CopyFromBackingStore(const gfx::Rect& rect,
|
||||
if (!output->initialize(rect.width(), rect.height(), true))
|
||||
return false;
|
||||
|
||||
HDC temp_dc = output->beginPlatformPaint();
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(output);
|
||||
HDC temp_dc = scoped_platform_paint.GetPlatformSurface();
|
||||
BitBlt(temp_dc, 0, 0, rect.width(), rect.height(),
|
||||
hdc(), rect.x(), rect.y(), SRCCOPY);
|
||||
output->endPlatformPaint();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -375,7 +375,7 @@ bool BackingStoreX::CopyFromBackingStore(const gfx::Rect& rect,
|
||||
// it and copy each row out, only up to the pixels we're actually
|
||||
// using. This code assumes a visual mode where a pixel is
|
||||
// represented using a 32-bit unsigned int, with a byte per component.
|
||||
SkBitmap bitmap = output->getTopPlatformDevice().accessBitmap(true);
|
||||
SkBitmap bitmap = skia::GetTopDevice(*output)->accessBitmap(true);
|
||||
for (int y = 0; y < height; y++) {
|
||||
const uint32* src_row = reinterpret_cast<uint32*>(
|
||||
&image->data[image->bytes_per_line * y]);
|
||||
|
@ -374,7 +374,7 @@ void WebPluginProxy::Paint(const gfx::Rect& rect) {
|
||||
// into (which is windowless_canvas_) so it can do blending. So we copy the
|
||||
// background bitmap into the windowless_canvas_.
|
||||
const SkBitmap& background_bitmap =
|
||||
background_canvas_->getTopPlatformDevice().accessBitmap(false);
|
||||
skia::GetTopDevice(*background_canvas_)->accessBitmap(false);
|
||||
windowless_canvas_->drawBitmap(background_bitmap, 0, 0);
|
||||
} else {
|
||||
// In non-transparent mode, the plugin doesn't care what's underneath, so we
|
||||
|
@ -549,7 +549,7 @@ void RenderWidget::PaintRect(const gfx::Rect& rect,
|
||||
webwidget_->paint(webkit_glue::ToWebCanvas(canvas), rect);
|
||||
|
||||
// Flush to underlying bitmap. TODO(darin): is this needed?
|
||||
canvas->getTopPlatformDevice().accessBitmap(false);
|
||||
skia::GetTopDevice(*canvas)->accessBitmap(false);
|
||||
}
|
||||
|
||||
PaintDebugBorder(rect, canvas);
|
||||
|
@ -728,7 +728,9 @@ void WebPluginDelegateProxy::Paint(WebKit::WebCanvas* canvas,
|
||||
|
||||
// We're using the native OS APIs from here on out.
|
||||
#if WEBKIT_USING_SKIA
|
||||
gfx::NativeDrawingContext context = skia::BeginPlatformPaint(canvas);
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(canvas);
|
||||
gfx::NativeDrawingContext context =
|
||||
scoped_platform_paint.GetPlatformSurface();
|
||||
#elif WEBKIT_USING_CG
|
||||
gfx::NativeDrawingContext context = canvas;
|
||||
#endif
|
||||
@ -764,10 +766,6 @@ void WebPluginDelegateProxy::Paint(WebKit::WebCanvas* canvas,
|
||||
invalidate_pending_ = false;
|
||||
Send(new PluginMsg_DidPaint(instance_id_));
|
||||
}
|
||||
|
||||
#if WEBKIT_USING_SKIA
|
||||
skia::EndPlatformPaint(canvas);
|
||||
#endif
|
||||
}
|
||||
|
||||
bool WebPluginDelegateProxy::BackgroundChanged(
|
||||
@ -850,8 +848,10 @@ bool WebPluginDelegateProxy::BackgroundChanged(
|
||||
int page_start_x = content_rect.x() - context_offset_x;
|
||||
int page_start_y = content_rect.y() - context_offset_y;
|
||||
|
||||
CGContextRef bg_context =
|
||||
background_store_canvas_->getTopPlatformDevice().GetBitmapContext();
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(
|
||||
background_store_canvas_.get());
|
||||
CGContextRef bg_context = scoped_platform_paint.GetPlatformSurface();
|
||||
|
||||
DCHECK_EQ(CGBitmapContextGetBitsPerPixel(context),
|
||||
CGBitmapContextGetBitsPerPixel(bg_context));
|
||||
const unsigned char* bg_bytes = static_cast<const unsigned char*>(
|
||||
@ -869,9 +869,10 @@ bool WebPluginDelegateProxy::BackgroundChanged(
|
||||
int page_start_x = static_cast<int>(page_x_double);
|
||||
int page_start_y = static_cast<int>(page_y_double);
|
||||
|
||||
skia::PlatformDevice& device =
|
||||
background_store_canvas_->getTopPlatformDevice();
|
||||
cairo_surface_t* bg_surface = cairo_get_target(device.BeginPlatformPaint());
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(
|
||||
background_store_canvas_.get());
|
||||
cairo_surface_t* bg_surface =cairo_get_target(
|
||||
scoped_platform_paint.GetPlatformSurface());
|
||||
DCHECK_EQ(cairo_surface_get_type(bg_surface), CAIRO_SURFACE_TYPE_IMAGE);
|
||||
DCHECK_EQ(cairo_image_surface_get_format(bg_surface), CAIRO_FORMAT_ARGB32);
|
||||
cairo_surface_flush(bg_surface);
|
||||
|
@ -97,7 +97,7 @@ void* ImageData::Map() {
|
||||
return NULL;
|
||||
}
|
||||
const SkBitmap& bitmap =
|
||||
mapped_canvas_->getTopPlatformDevice().accessBitmap(true);
|
||||
skia::GetTopDevice(*mapped_canvas_)->accessBitmap(true);
|
||||
|
||||
bitmap.lockPixels();
|
||||
return bitmap.getAddr(0, 0);
|
||||
|
@ -403,7 +403,7 @@ bool Emf::Record::SafePlayback(const XFORM* base_matrix) const {
|
||||
return res;
|
||||
}
|
||||
|
||||
skia::PlatformDevice* Emf::StartPageForVectorCanvas(
|
||||
SkDevice* Emf::StartPageForVectorCanvas(
|
||||
const gfx::Size& page_size, const gfx::Rect& content_area,
|
||||
const float& scale_factor) {
|
||||
if (!StartPage(page_size, content_area, scale_factor))
|
||||
|
@ -45,7 +45,7 @@ class Emf : public Metafile {
|
||||
virtual bool Init();
|
||||
virtual bool InitFromData(const void* src_buffer, uint32 src_buffer_size);
|
||||
|
||||
virtual skia::PlatformDevice* StartPageForVectorCanvas(
|
||||
virtual SkDevice* StartPageForVectorCanvas(
|
||||
const gfx::Size& page_size, const gfx::Rect& content_area,
|
||||
const float& scale_factor);
|
||||
// Inserts a custom GDICOMMENT records indicating StartPage/EndPage calls
|
||||
|
@ -69,7 +69,7 @@ bool Image::LoadMetafile(const Metafile& metafile) {
|
||||
DCHECK(bitmap);
|
||||
DCHECK(SelectObject(hdc, bitmap));
|
||||
|
||||
skia::PlatformDevice::InitializeDC(hdc);
|
||||
skia::InitializeDC(hdc);
|
||||
|
||||
bool success = metafile.Playback(hdc, NULL);
|
||||
|
||||
|
@ -25,9 +25,7 @@ class Rect;
|
||||
class Size;
|
||||
}
|
||||
|
||||
namespace skia {
|
||||
class PlatformDevice;
|
||||
}
|
||||
class SkDevice;
|
||||
|
||||
#if defined(OS_CHROMEOS)
|
||||
namespace base {
|
||||
@ -56,7 +54,7 @@ class Metafile {
|
||||
// This method calls StartPage and then returns an appropriate
|
||||
// VectorPlatformDevice implementation bound to the context created by
|
||||
// StartPage or NULL on error.
|
||||
virtual skia::PlatformDevice* StartPageForVectorCanvas(
|
||||
virtual SkDevice* StartPageForVectorCanvas(
|
||||
const gfx::Size& page_size,
|
||||
const gfx::Rect& content_area,
|
||||
const float& scale_factor) = 0;
|
||||
|
@ -118,7 +118,7 @@ bool PdfMetafileCairo::InitFromData(const void* src_buffer,
|
||||
return true;
|
||||
}
|
||||
|
||||
skia::PlatformDevice* PdfMetafileCairo::StartPageForVectorCanvas(
|
||||
SkDevice* PdfMetafileCairo::StartPageForVectorCanvas(
|
||||
const gfx::Size& page_size, const gfx::Rect& content_area,
|
||||
const float& scale_factor) {
|
||||
if (!StartPage(page_size, content_area, scale_factor))
|
||||
|
@ -36,9 +36,10 @@ class PdfMetafileCairo : public Metafile {
|
||||
// continues on the surface returned by a previous call to Init().
|
||||
virtual bool InitFromData(const void* src_buffer, uint32 src_buffer_size);
|
||||
|
||||
virtual skia::PlatformDevice* StartPageForVectorCanvas(
|
||||
virtual SkDevice* StartPageForVectorCanvas(
|
||||
const gfx::Size& page_size, const gfx::Rect& content_area,
|
||||
const float& scale_factor);
|
||||
|
||||
virtual bool StartPage(const gfx::Size& page_size,
|
||||
const gfx::Rect& content_area,
|
||||
const float& scale_factor);
|
||||
|
@ -118,7 +118,7 @@ bool PdfMetafileCg::InitFromData(const void* src_buffer,
|
||||
return true;
|
||||
}
|
||||
|
||||
skia::PlatformDevice* PdfMetafileCg::StartPageForVectorCanvas(
|
||||
SkDevice* PdfMetafileCg::StartPageForVectorCanvas(
|
||||
const gfx::Size& page_size, const gfx::Rect& content_area,
|
||||
const float& scale_factor) {
|
||||
NOTIMPLEMENTED();
|
||||
|
@ -35,7 +35,7 @@ class PdfMetafileCg : public Metafile, public base::ThreadChecker {
|
||||
virtual bool InitFromData(const void* src_buffer, uint32 src_buffer_size);
|
||||
|
||||
// Not implemented on mac.
|
||||
virtual skia::PlatformDevice* StartPageForVectorCanvas(
|
||||
virtual SkDevice* StartPageForVectorCanvas(
|
||||
const gfx::Size& page_size, const gfx::Rect& content_area,
|
||||
const float& scale_factor);
|
||||
virtual bool StartPage(const gfx::Size& page_size,
|
||||
|
@ -36,7 +36,7 @@ bool PdfMetafileSkia::InitFromData(const void* src_buffer,
|
||||
return data_->pdf_stream_.write(src_buffer, src_buffer_size);
|
||||
}
|
||||
|
||||
skia::PlatformDevice* PdfMetafileSkia::StartPageForVectorCanvas(
|
||||
SkDevice* PdfMetafileSkia::StartPageForVectorCanvas(
|
||||
const gfx::Size& page_size, const gfx::Rect& content_area,
|
||||
const float& scale_factor) {
|
||||
DCHECK(data_->current_page_.get() == NULL);
|
||||
|
@ -29,10 +29,11 @@ class PdfMetafileSkia : public Metafile {
|
||||
virtual bool Init();
|
||||
virtual bool InitFromData(const void* src_buffer, uint32 src_buffer_size);
|
||||
|
||||
virtual skia::PlatformDevice* StartPageForVectorCanvas(
|
||||
virtual SkDevice* StartPageForVectorCanvas(
|
||||
const gfx::Size& page_size,
|
||||
const gfx::Rect& content_area,
|
||||
const float& scale_factor);
|
||||
|
||||
virtual bool StartPage(const gfx::Size& page_size,
|
||||
const gfx::Rect& content_area,
|
||||
const float& scale_factor);
|
||||
|
@ -98,7 +98,7 @@ void PrintedDocument::RenderPrintedPage(
|
||||
// the device context.
|
||||
int saved_state = SaveDC(context);
|
||||
DCHECK_NE(saved_state, 0);
|
||||
skia::PlatformDevice::InitializeDC(context);
|
||||
skia::InitializeDC(context);
|
||||
{
|
||||
// Save the state (again) to apply the necessary world transformation.
|
||||
int saved_state = SaveDC(context);
|
||||
|
@ -17,7 +17,7 @@
|
||||
#include "printing/print_job_constants.h"
|
||||
#include "printing/print_settings_initializer_win.h"
|
||||
#include "printing/printed_document.h"
|
||||
#include "skia/ext/platform_device_win.h"
|
||||
#include "skia/ext/platform_device.h"
|
||||
|
||||
using base::Time;
|
||||
|
||||
@ -549,7 +549,7 @@ bool PrintingContextWin::InitializeSettings(const DEVMODE& dev_mode,
|
||||
const PRINTPAGERANGE* ranges,
|
||||
int number_ranges,
|
||||
bool selection_only) {
|
||||
skia::PlatformDevice::InitializeDC(context_);
|
||||
skia::InitializeDC(context_);
|
||||
DCHECK(GetDeviceCaps(context_, CLIPCAPS));
|
||||
DCHECK(GetDeviceCaps(context_, RASTERCAPS) & RC_STRETCHDIB);
|
||||
DCHECK(GetDeviceCaps(context_, RASTERCAPS) & RC_BITMAP64);
|
||||
|
@ -40,7 +40,7 @@ bool Constrain(int available_size, int* position, int *size) {
|
||||
|
||||
namespace skia {
|
||||
|
||||
void BitmapPlatformDevice::makeOpaque(int x, int y, int width, int height) {
|
||||
void BitmapPlatformDevice::MakeOpaque(int x, int y, int width, int height) {
|
||||
const SkBitmap& bitmap = accessBitmap(true);
|
||||
SkASSERT(bitmap.config() == SkBitmap::kARGB_8888_Config);
|
||||
|
||||
|
@ -88,7 +88,7 @@ class BitmapPlatformDevice : public PlatformDevice {
|
||||
static BitmapPlatformDevice* Create(int width, int height,
|
||||
bool is_opaque, uint8_t* data);
|
||||
|
||||
virtual void makeOpaque(int x, int y, int width, int height);
|
||||
virtual void MakeOpaque(int x, int y, int width, int height);
|
||||
|
||||
// Overridden from SkDevice:
|
||||
virtual void setMatrixClip(const SkMatrix& transform, const SkRegion& region,
|
||||
|
@ -226,8 +226,8 @@ void BitmapPlatformDevice::setMatrixClip(const SkMatrix& transform,
|
||||
data_->SetMatrixClip(transform, region);
|
||||
}
|
||||
|
||||
void BitmapPlatformDevice::DrawToContext(CGContextRef context, int x, int y,
|
||||
const CGRect* src_rect) {
|
||||
void BitmapPlatformDevice::DrawToNativeContext(CGContextRef context, int x,
|
||||
int y, const CGRect* src_rect) {
|
||||
bool created_dc = false;
|
||||
if (!data_->bitmap_context()) {
|
||||
created_dc = true;
|
||||
@ -261,14 +261,6 @@ bool BitmapPlatformDevice::IsVectorial() {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Returns the color value at the specified location.
|
||||
SkColor BitmapPlatformDevice::getColorAt(int x, int y) {
|
||||
const SkBitmap& bitmap = accessBitmap(true);
|
||||
SkAutoLockPixels lock(bitmap);
|
||||
uint32_t* data = bitmap.getAddr32(0, 0);
|
||||
return static_cast<SkColor>(data[x + y * width()]);
|
||||
}
|
||||
|
||||
void BitmapPlatformDevice::onAccessBitmap(SkBitmap*) {
|
||||
// Not needed in CoreGraphics
|
||||
}
|
||||
|
@ -61,18 +61,16 @@ class BitmapPlatformDevice : public PlatformDevice {
|
||||
// See warning for copy constructor above.
|
||||
BitmapPlatformDevice& operator=(const BitmapPlatformDevice& other);
|
||||
|
||||
// PlatformDevice overrides
|
||||
virtual CGContextRef GetBitmapContext();
|
||||
virtual void setMatrixClip(const SkMatrix& transform, const SkRegion& region,
|
||||
const SkClipStack&);
|
||||
|
||||
virtual void DrawToContext(CGContextRef context, int x, int y,
|
||||
const CGRect* src_rect);
|
||||
virtual void makeOpaque(int x, int y, int width, int height);
|
||||
virtual void DrawToNativeContext(CGContextRef context, int x, int y,
|
||||
const CGRect* src_rect);
|
||||
virtual void MakeOpaque(int x, int y, int width, int height);
|
||||
virtual bool IsVectorial();
|
||||
|
||||
// Returns the color value at the specified location. This does not
|
||||
// consider any transforms that may be set on the device.
|
||||
SkColor getColorAt(int x, int y);
|
||||
// SkDevice overrides
|
||||
virtual void setMatrixClip(const SkMatrix& transform, const SkRegion& region,
|
||||
const SkClipStack&);
|
||||
|
||||
protected:
|
||||
// Reference counted data that can be shared between multiple devices. This
|
||||
|
@ -220,8 +220,8 @@ void BitmapPlatformDevice::setMatrixClip(const SkMatrix& transform,
|
||||
data_->SetMatrixClip(transform, region);
|
||||
}
|
||||
|
||||
void BitmapPlatformDevice::drawToHDC(HDC dc, int x, int y,
|
||||
const RECT* src_rect) {
|
||||
void BitmapPlatformDevice::DrawToNativeContext(HDC dc, int x, int y,
|
||||
const RECT* src_rect) {
|
||||
bool created_dc = !data_->IsBitmapDCCreated();
|
||||
HDC source_dc = BeginPlatformPaint();
|
||||
|
||||
@ -275,14 +275,6 @@ void BitmapPlatformDevice::drawToHDC(HDC dc, int x, int y,
|
||||
data_->ReleaseBitmapDC();
|
||||
}
|
||||
|
||||
// Returns the color value at the specified location.
|
||||
SkColor BitmapPlatformDevice::getColorAt(int x, int y) {
|
||||
const SkBitmap& bitmap = accessBitmap(false);
|
||||
SkAutoLockPixels lock(bitmap);
|
||||
uint32_t* data = bitmap.getAddr32(0, 0);
|
||||
return static_cast<SkColor>(data[x + y * width()]);
|
||||
}
|
||||
|
||||
void BitmapPlatformDevice::onAccessBitmap(SkBitmap* bitmap) {
|
||||
// FIXME(brettw) OPTIMIZATION: We should only flush if we know a GDI
|
||||
// operation has occurred on our DC.
|
||||
|
@ -69,24 +69,21 @@ class SK_API BitmapPlatformDevice : public PlatformDevice {
|
||||
// See warning for copy constructor above.
|
||||
BitmapPlatformDevice& operator=(const BitmapPlatformDevice& other);
|
||||
|
||||
// PlatformDevice overrides
|
||||
// Retrieves the bitmap DC, which is the memory DC for our bitmap data. The
|
||||
// bitmap DC is lazy created.
|
||||
virtual PlatformSurface BeginPlatformPaint();
|
||||
virtual void EndPlatformPaint();
|
||||
|
||||
virtual void DrawToNativeContext(HDC dc, int x, int y, const RECT* src_rect);
|
||||
virtual void MakeOpaque(int x, int y, int width, int height);
|
||||
virtual bool IsVectorial() { return false; }
|
||||
|
||||
// Loads the given transform and clipping region into the HDC. This is
|
||||
// overridden from SkDevice.
|
||||
virtual void setMatrixClip(const SkMatrix& transform, const SkRegion& region,
|
||||
const SkClipStack&);
|
||||
|
||||
virtual void drawToHDC(HDC dc, int x, int y, const RECT* src_rect);
|
||||
virtual void makeOpaque(int x, int y, int width, int height);
|
||||
virtual bool IsVectorial() { return false; }
|
||||
|
||||
// Returns the color value at the specified location. This does not
|
||||
// consider any transforms that may be set on the device.
|
||||
SkColor getColorAt(int x, int y);
|
||||
|
||||
protected:
|
||||
// Flushes the Windows device context so that the pixel data can be accessed
|
||||
// directly by Skia. Overridden from SkDevice, this is called when Skia
|
||||
|
@ -92,7 +92,7 @@ class CanvasPaintT : public T {
|
||||
// surface.
|
||||
T::translate(-SkIntToScalar(bounds.x), -SkIntToScalar(bounds.y));
|
||||
|
||||
context_ = T::getTopPlatformDevice().BeginPlatformPaint();
|
||||
context_ = BeginPlatformPaint(GetTopDevice(*this));
|
||||
}
|
||||
|
||||
cairo_t* context_;
|
||||
|
@ -92,7 +92,7 @@ class CanvasPaintT : public T {
|
||||
T::translate(-SkDoubleToScalar(rectangle_.origin.x),
|
||||
-SkDoubleToScalar(rectangle_.origin.y));
|
||||
|
||||
context_ = T::getTopPlatformDevice().GetBitmapContext();
|
||||
context_ = GetBitmapContext(GetTopDevice(*this));
|
||||
}
|
||||
|
||||
CGContext* context_;
|
||||
|
@ -62,9 +62,8 @@ class CanvasPaintT : public T {
|
||||
if (!isEmpty()) {
|
||||
restoreToCount(1);
|
||||
// Commit the drawing to the screen
|
||||
getTopPlatformDevice().drawToHDC(paint_dc_,
|
||||
ps_.rcPaint.left, ps_.rcPaint.top,
|
||||
NULL);
|
||||
skia::DrawToNativeContext(this, paint_dc_, ps_.rcPaint.left,
|
||||
ps_.rcPaint.top, NULL);
|
||||
}
|
||||
if (for_paint_)
|
||||
EndPaint(hwnd_, &ps_);
|
||||
|
@ -7,14 +7,6 @@
|
||||
#include "skia/ext/bitmap_platform_device.h"
|
||||
#include "third_party/skia/include/core/SkTypes.h"
|
||||
|
||||
namespace {
|
||||
skia::PlatformDevice* GetTopPlatformDevice(const SkCanvas* canvas) {
|
||||
// All of our devices should be our special PlatformDevice.
|
||||
SkCanvas::LayerIter iter(const_cast<SkCanvas*>(canvas), false);
|
||||
return static_cast<skia::PlatformDevice*>(iter.device());
|
||||
}
|
||||
}
|
||||
|
||||
namespace skia {
|
||||
|
||||
PlatformCanvas::PlatformCanvas() {
|
||||
@ -29,10 +21,6 @@ SkDevice* PlatformCanvas::setBitmapDevice(const SkBitmap&) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
PlatformDevice& PlatformCanvas::getTopPlatformDevice() const {
|
||||
return *GetTopPlatformDevice(this);
|
||||
}
|
||||
|
||||
// static
|
||||
size_t PlatformCanvas::StrideForWidth(unsigned width) {
|
||||
return 4 * width;
|
||||
@ -51,18 +39,32 @@ SkCanvas* CreateBitmapCanvas(int width, int height, bool is_opaque) {
|
||||
return new PlatformCanvas(width, height, is_opaque);
|
||||
}
|
||||
|
||||
bool SupportsPlatformPaint(const SkCanvas* canvas) {
|
||||
// TODO(alokp): Rename PlatformDevice::IsNativeFontRenderingAllowed after
|
||||
// removing these calls from WebKit.
|
||||
return GetTopPlatformDevice(canvas)->IsNativeFontRenderingAllowed();
|
||||
SkDevice* GetTopDevice(const SkCanvas& canvas) {
|
||||
SkCanvas::LayerIter iter(const_cast<SkCanvas*>(&canvas), false);
|
||||
return iter.device();
|
||||
}
|
||||
|
||||
PlatformDevice::PlatformSurface BeginPlatformPaint(SkCanvas* canvas) {
|
||||
return GetTopPlatformDevice(canvas)->BeginPlatformPaint();
|
||||
bool SupportsPlatformPaint(const SkCanvas* canvas) {
|
||||
// TODO(alokp): Rename IsNativeFontRenderingAllowed after removing these
|
||||
// calls from WebKit.
|
||||
return IsNativeFontRenderingAllowed(GetTopDevice(*canvas));
|
||||
}
|
||||
|
||||
PlatformSurface BeginPlatformPaint(SkCanvas* canvas) {
|
||||
return BeginPlatformPaint(GetTopDevice(*canvas));
|
||||
}
|
||||
|
||||
void EndPlatformPaint(SkCanvas* canvas) {
|
||||
GetTopPlatformDevice(canvas)->EndPlatformPaint();
|
||||
EndPlatformPaint(GetTopDevice(*canvas));
|
||||
}
|
||||
|
||||
void DrawToNativeContext(SkCanvas* canvas, PlatformSurface context, int x,
|
||||
int y, const PlatformRect* src_rect) {
|
||||
DrawToNativeContext(GetTopDevice(*canvas), context, x, y, src_rect);
|
||||
}
|
||||
|
||||
void MakeOpaque(SkCanvas* canvas, int x, int y, int width, int height) {
|
||||
MakeOpaque(GetTopDevice(*canvas), x, y, width, height);
|
||||
}
|
||||
|
||||
} // namespace skia
|
||||
|
@ -63,30 +63,6 @@ class SK_API PlatformCanvas : public SkCanvas {
|
||||
|
||||
// Shared --------------------------------------------------------------------
|
||||
|
||||
// These calls should surround calls to platform drawing routines, the
|
||||
// surface returned here can be used with the native platform routines
|
||||
//
|
||||
// Call endPlatformPaint when you are done and want to use Skia operations
|
||||
// after calling the platform-specific beginPlatformPaint; this will
|
||||
// synchronize the bitmap to OS if necessary.
|
||||
PlatformDevice::PlatformSurface beginPlatformPaint() const;
|
||||
void endPlatformPaint() const;
|
||||
|
||||
// Returns the platform device pointer of the topmost rect with a non-empty
|
||||
// clip. In practice, this is usually either the top layer or nothing, since
|
||||
// we usually set the clip to new layers when we make them.
|
||||
//
|
||||
// If there is no layer that is not all clipped out, this will return a
|
||||
// dummy device so callers do not have to check. If you are concerned about
|
||||
// performance, check the clip before doing any painting.
|
||||
//
|
||||
// This is different than SkCanvas' getDevice, because that returns the
|
||||
// bottommost device.
|
||||
//
|
||||
// Danger: the resulting device should not be saved. It will be invalidated
|
||||
// by the next call to save() or restore().
|
||||
PlatformDevice& getTopPlatformDevice() const;
|
||||
|
||||
// Return the stride (length of a line in bytes) for the given width. Because
|
||||
// we use 32-bits per pixel, this will be roughly 4*width. However, for
|
||||
// alignment reasons we may wish to increase that.
|
||||
@ -109,11 +85,26 @@ class SK_API PlatformCanvas : public SkCanvas {
|
||||
// CoreGraphics.
|
||||
virtual SkDevice* setBitmapDevice(const SkBitmap& bitmap);
|
||||
|
||||
// Disallow copy and assign.
|
||||
// Disallow copy and assign
|
||||
PlatformCanvas(const PlatformCanvas&);
|
||||
PlatformCanvas& operator=(const PlatformCanvas&);
|
||||
};
|
||||
|
||||
// Returns the SkDevice pointer of the topmost rect with a non-empty
|
||||
// clip. In practice, this is usually either the top layer or nothing, since
|
||||
// we usually set the clip to new layers when we make them.
|
||||
//
|
||||
// If there is no layer that is not all clipped out, this will return a
|
||||
// dummy device so callers do not have to check. If you are concerned about
|
||||
// performance, check the clip before doing any painting.
|
||||
//
|
||||
// This is different than SkCanvas' getDevice, because that returns the
|
||||
// bottommost device.
|
||||
//
|
||||
// Danger: the resulting device should not be saved. It will be invalidated
|
||||
// by the next call to save() or restore().
|
||||
SK_API SkDevice* GetTopDevice(const SkCanvas& canvas);
|
||||
|
||||
// Creates a canvas with raster bitmap backing.
|
||||
// Set is_opaque if you are going to erase the bitmap and not use
|
||||
// transparency: this will enable some optimizations.
|
||||
@ -124,18 +115,45 @@ SK_API SkCanvas* CreateBitmapCanvas(int width, int height, bool is_opaque);
|
||||
// return NULL PlatformSurface.
|
||||
SK_API bool SupportsPlatformPaint(const SkCanvas* canvas);
|
||||
|
||||
// Draws into the a native platform surface, |context|. Forwards to
|
||||
// DrawToNativeContext on a PlatformDevice instance bound to the top device.
|
||||
// If no PlatformDevice instance is bound, is a no-operation.
|
||||
SK_API void DrawToNativeContext(SkCanvas* canvas, PlatformSurface context,
|
||||
int x, int y, const PlatformRect* src_rect);
|
||||
|
||||
// Sets the opacity of each pixel in the specified region to be opaque.
|
||||
SK_API void MakeOpaque(SkCanvas* canvas, int x, int y, int width, int height);
|
||||
|
||||
// These calls should surround calls to platform drawing routines, the
|
||||
// surface returned here can be used with the native platform routines.
|
||||
//
|
||||
// Call EndPlatformPaint when you are done and want to use skia operations
|
||||
// after calling the platform-specific BeginPlatformPaint; this will
|
||||
// synchronize the bitmap to OS if necessary.
|
||||
//
|
||||
// Note: These functions will eventually replace
|
||||
// PlatformCanvas::beginPlatformPaint and PlatformCanvas::endPlatformPaint.
|
||||
SK_API PlatformDevice::PlatformSurface BeginPlatformPaint(SkCanvas* canvas);
|
||||
SK_API PlatformSurface BeginPlatformPaint(SkCanvas* canvas);
|
||||
SK_API void EndPlatformPaint(SkCanvas* canvas);
|
||||
|
||||
// Helper class for pairing calls to BeginPlatformPaint and EndPlatformPaint.
|
||||
// Upon construction invokes BeginPlatformPaint, and upon destruction invokes
|
||||
// EndPlatformPaint.
|
||||
class SK_API ScopedPlatformPaint {
|
||||
public:
|
||||
explicit ScopedPlatformPaint(SkCanvas* canvas) : canvas_(canvas) {
|
||||
platform_surface_ = BeginPlatformPaint(canvas);
|
||||
}
|
||||
~ScopedPlatformPaint() { EndPlatformPaint(canvas_); }
|
||||
|
||||
// Returns the PlatformSurface to use for native platform drawing calls.
|
||||
PlatformSurface GetPlatformSurface() { return platform_surface_; }
|
||||
private:
|
||||
SkCanvas* canvas_;
|
||||
PlatformSurface platform_surface_;
|
||||
|
||||
// Disallow copy and assign
|
||||
ScopedPlatformPaint(const ScopedPlatformPaint&);
|
||||
ScopedPlatformPaint& operator=(const ScopedPlatformPaint&);
|
||||
};
|
||||
|
||||
} // namespace skia
|
||||
|
||||
#endif // SKIA_EXT_PLATFORM_CANVAS_H_
|
||||
|
@ -6,8 +6,8 @@
|
||||
|
||||
#include <cairo/cairo.h>
|
||||
|
||||
#include "skia/ext/platform_device_linux.h"
|
||||
#include "skia/ext/bitmap_platform_device_linux.h"
|
||||
#include "skia/ext/bitmap_platform_device.h"
|
||||
#include "skia/ext/platform_device.h"
|
||||
#include "third_party/skia/include/core/SkTypes.h"
|
||||
|
||||
namespace skia {
|
||||
@ -33,12 +33,4 @@ bool PlatformCanvas::initialize(int width, int height, bool is_opaque,
|
||||
width, height, is_opaque, data));
|
||||
}
|
||||
|
||||
cairo_t* PlatformCanvas::beginPlatformPaint() const {
|
||||
return getTopPlatformDevice().BeginPlatformPaint();
|
||||
}
|
||||
|
||||
void PlatformCanvas::endPlatformPaint() const {
|
||||
getTopPlatformDevice().EndPlatformPaint();
|
||||
}
|
||||
|
||||
} // namespace skia
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
#include "skia/ext/platform_canvas.h"
|
||||
|
||||
#include "skia/ext/bitmap_platform_device_mac.h"
|
||||
#include "skia/ext/bitmap_platform_device.h"
|
||||
#include "third_party/skia/include/core/SkTypes.h"
|
||||
|
||||
namespace skia {
|
||||
@ -49,12 +49,4 @@ bool PlatformCanvas::initialize(CGContextRef context,
|
||||
context, width, height, is_opaque));
|
||||
}
|
||||
|
||||
CGContextRef PlatformCanvas::beginPlatformPaint() const {
|
||||
return getTopPlatformDevice().BeginPlatformPaint();
|
||||
}
|
||||
|
||||
void PlatformCanvas::endPlatformPaint() const {
|
||||
getTopPlatformDevice().EndPlatformPaint();
|
||||
}
|
||||
|
||||
} // namespace skia
|
||||
|
@ -31,8 +31,8 @@ namespace {
|
||||
bool VerifyRect(const PlatformCanvas& canvas,
|
||||
uint32_t canvas_color, uint32_t rect_color,
|
||||
int x, int y, int w, int h) {
|
||||
PlatformDevice& device = canvas.getTopPlatformDevice();
|
||||
const SkBitmap& bitmap = device.accessBitmap(false);
|
||||
SkDevice* device = skia::GetTopDevice(canvas);
|
||||
const SkBitmap& bitmap = device->accessBitmap(false);
|
||||
SkAutoLockPixels lock(bitmap);
|
||||
|
||||
// For masking out the alpha values.
|
||||
@ -70,8 +70,8 @@ bool IsOfColor(const SkBitmap& bitmap, int x, int y, uint32_t color) {
|
||||
bool VerifyRoundedRect(const PlatformCanvas& canvas,
|
||||
uint32_t canvas_color, uint32_t rect_color,
|
||||
int x, int y, int w, int h) {
|
||||
PlatformDevice& device = canvas.getTopPlatformDevice();
|
||||
const SkBitmap& bitmap = device.accessBitmap(false);
|
||||
SkDevice* device = skia::GetTopDevice(canvas);
|
||||
const SkBitmap& bitmap = device->accessBitmap(false);
|
||||
SkAutoLockPixels lock(bitmap);
|
||||
|
||||
// Check corner points first. They should be of canvas_color.
|
||||
@ -103,7 +103,8 @@ bool VerifyCanvasColor(const PlatformCanvas& canvas, uint32_t canvas_color) {
|
||||
|
||||
#if defined(OS_WIN)
|
||||
void DrawNativeRect(PlatformCanvas& canvas, int x, int y, int w, int h) {
|
||||
HDC dc = canvas.beginPlatformPaint();
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(&canvas);
|
||||
HDC dc = scoped_platform_paint.GetPlatformSurface();
|
||||
|
||||
RECT inner_rc;
|
||||
inner_rc.left = x;
|
||||
@ -111,21 +112,18 @@ void DrawNativeRect(PlatformCanvas& canvas, int x, int y, int w, int h) {
|
||||
inner_rc.right = x + w;
|
||||
inner_rc.bottom = y + h;
|
||||
FillRect(dc, &inner_rc, reinterpret_cast<HBRUSH>(GetStockObject(BLACK_BRUSH)));
|
||||
|
||||
canvas.endPlatformPaint();
|
||||
}
|
||||
#elif defined(OS_MACOSX)
|
||||
void DrawNativeRect(PlatformCanvas& canvas, int x, int y, int w, int h) {
|
||||
CGContextRef context = canvas.beginPlatformPaint();
|
||||
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(&canvas);
|
||||
CGContextRef context = scoped_platform_paint.GetPlatformSurface();
|
||||
|
||||
CGRect inner_rc = CGRectMake(x, y, w, h);
|
||||
// RGBA opaque black
|
||||
CGColorRef black = CGColorCreateGenericRGB(0.0, 0.0, 0.0, 1.0);
|
||||
CGContextSetFillColorWithColor(context, black);
|
||||
CGColorRelease(black);
|
||||
CGContextFillRect(context, inner_rc);
|
||||
|
||||
canvas.endPlatformPaint();
|
||||
}
|
||||
#else
|
||||
void DrawNativeRect(PlatformCanvas& canvas, int x, int y, int w, int h) {
|
||||
@ -244,7 +242,7 @@ TEST(PlatformCanvas, FillLayer) {
|
||||
LayerSaver layer(canvas, kLayerX, kLayerY, kLayerW, kLayerH);
|
||||
DrawNativeRect(canvas, 0, 0, 100, 100);
|
||||
#if defined(OS_WIN)
|
||||
canvas.getTopPlatformDevice().makeOpaque(0, 0, 100, 100);
|
||||
MakeOpaque(&canvas, 0, 0, 100, 100);
|
||||
#endif
|
||||
}
|
||||
EXPECT_TRUE(VerifyBlackRect(canvas, kLayerX, kLayerY, kLayerW, kLayerH));
|
||||
@ -255,8 +253,7 @@ TEST(PlatformCanvas, FillLayer) {
|
||||
LayerSaver layer(canvas, kLayerX, kLayerY, kLayerW, kLayerH);
|
||||
DrawNativeRect(canvas, kInnerX, kInnerY, kInnerW, kInnerH);
|
||||
#if defined(OS_WIN)
|
||||
canvas.getTopPlatformDevice().makeOpaque(kInnerX, kInnerY,
|
||||
kInnerW, kInnerH);
|
||||
MakeOpaque(&canvas, kInnerX, kInnerY, kInnerW, kInnerH);
|
||||
#endif
|
||||
}
|
||||
EXPECT_TRUE(VerifyBlackRect(canvas, kInnerX, kInnerY, kInnerW, kInnerH));
|
||||
@ -269,8 +266,7 @@ TEST(PlatformCanvas, FillLayer) {
|
||||
AddClip(canvas, kInnerX, kInnerY, kInnerW, kInnerH);
|
||||
DrawNativeRect(canvas, 0, 0, 100, 100);
|
||||
#if defined(OS_WIN)
|
||||
canvas.getTopPlatformDevice().makeOpaque(
|
||||
kInnerX, kInnerY, kInnerW, kInnerH);
|
||||
MakeOpaque(&canvas, kInnerX, kInnerY, kInnerW, kInnerH);
|
||||
#endif
|
||||
canvas.restore();
|
||||
}
|
||||
@ -284,7 +280,7 @@ TEST(PlatformCanvas, FillLayer) {
|
||||
LayerSaver layer(canvas, kLayerX, kLayerY, kLayerW, kLayerH);
|
||||
DrawNativeRect(canvas, 0, 0, 100, 100);
|
||||
#if defined(OS_WIN)
|
||||
canvas.getTopPlatformDevice().makeOpaque(0, 0, 100, 100);
|
||||
MakeOpaque(&canvas, 0, 0, 100, 100);
|
||||
#endif
|
||||
}
|
||||
canvas.restore();
|
||||
@ -305,7 +301,7 @@ TEST(PlatformCanvas, TranslateLayer) {
|
||||
LayerSaver layer(canvas, kLayerX, kLayerY, kLayerW, kLayerH);
|
||||
DrawNativeRect(canvas, 0, 0, 100, 100);
|
||||
#if defined(OS_WIN)
|
||||
canvas.getTopPlatformDevice().makeOpaque(0, 0, 100, 100);
|
||||
MakeOpaque(&canvas, 0, 0, 100, 100);
|
||||
#endif
|
||||
}
|
||||
canvas.restore();
|
||||
@ -320,8 +316,7 @@ TEST(PlatformCanvas, TranslateLayer) {
|
||||
LayerSaver layer(canvas, kLayerX, kLayerY, kLayerW, kLayerH);
|
||||
DrawNativeRect(canvas, kInnerX, kInnerY, kInnerW, kInnerH);
|
||||
#if defined(OS_WIN)
|
||||
canvas.getTopPlatformDevice().makeOpaque(kInnerX, kInnerY,
|
||||
kInnerW, kInnerH);
|
||||
MakeOpaque(&canvas, kInnerX, kInnerY, kInnerW, kInnerH);
|
||||
#endif
|
||||
}
|
||||
canvas.restore();
|
||||
@ -336,8 +331,7 @@ TEST(PlatformCanvas, TranslateLayer) {
|
||||
canvas.translate(1, 1);
|
||||
DrawNativeRect(canvas, kInnerX, kInnerY, kInnerW, kInnerH);
|
||||
#if defined(OS_WIN)
|
||||
canvas.getTopPlatformDevice().makeOpaque(kInnerX, kInnerY,
|
||||
kInnerW, kInnerH);
|
||||
MakeOpaque(&canvas, kInnerX, kInnerY, kInnerW, kInnerH);
|
||||
#endif
|
||||
}
|
||||
canvas.restore();
|
||||
@ -355,8 +349,7 @@ TEST(PlatformCanvas, TranslateLayer) {
|
||||
AddClip(canvas, kInnerX + 1, kInnerY + 1, kInnerW - 1, kInnerH - 1);
|
||||
DrawNativeRect(canvas, 0, 0, 100, 100);
|
||||
#if defined(OS_WIN)
|
||||
canvas.getTopPlatformDevice().makeOpaque(kLayerX, kLayerY,
|
||||
kLayerW, kLayerH);
|
||||
MakeOpaque(&canvas, kLayerX, kLayerY, kLayerW, kLayerH);
|
||||
#endif
|
||||
}
|
||||
canvas.restore();
|
||||
@ -384,8 +377,7 @@ TEST(PlatformCanvas, TranslateLayer) {
|
||||
|
||||
DrawNativeRect(canvas, 0, 0, 100, 100);
|
||||
#if defined(OS_WIN)
|
||||
canvas.getTopPlatformDevice().makeOpaque(kLayerX, kLayerY,
|
||||
kLayerW, kLayerH);
|
||||
MakeOpaque(&canvas, kLayerX, kLayerY, kLayerW, kLayerH);
|
||||
#endif
|
||||
}
|
||||
canvas.restore();
|
||||
|
@ -106,12 +106,4 @@ bool PlatformCanvas::initialize(int width,
|
||||
width, height, is_opaque, shared_section));
|
||||
}
|
||||
|
||||
HDC PlatformCanvas::beginPlatformPaint() const {
|
||||
return getTopPlatformDevice().BeginPlatformPaint();
|
||||
}
|
||||
|
||||
void PlatformCanvas::endPlatformPaint() const {
|
||||
return getTopPlatformDevice().EndPlatformPaint();
|
||||
}
|
||||
|
||||
} // namespace skia
|
||||
|
74
skia/ext/platform_device.cc
Normal file
74
skia/ext/platform_device.cc
Normal file
@ -0,0 +1,74 @@
|
||||
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "skia/ext/platform_device.h"
|
||||
|
||||
#include "third_party/skia/include/core/SkMetaData.h"
|
||||
|
||||
namespace skia {
|
||||
|
||||
namespace {
|
||||
const char* kDevicePlatformBehaviour = "CrDevicePlatformBehaviour";
|
||||
}
|
||||
|
||||
void SetPlatformDevice(SkDevice* device, PlatformDevice* platform_behaviour) {
|
||||
SkMetaData& meta_data = device->getMetaData();
|
||||
meta_data.setPtr(kDevicePlatformBehaviour, platform_behaviour);
|
||||
}
|
||||
|
||||
PlatformDevice* GetPlatformDevice(SkDevice* device) {
|
||||
SkMetaData& meta_data = device->getMetaData();
|
||||
PlatformDevice* device_behaviour = NULL;
|
||||
if (meta_data.findPtr(kDevicePlatformBehaviour,
|
||||
reinterpret_cast<void**>(&device_behaviour)))
|
||||
return device_behaviour;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
PlatformSurface BeginPlatformPaint(SkDevice* device) {
|
||||
PlatformDevice* platform_device = GetPlatformDevice(device);
|
||||
if (platform_device)
|
||||
return platform_device->BeginPlatformPaint();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void EndPlatformPaint(SkDevice* device) {
|
||||
PlatformDevice* platform_device = GetPlatformDevice(device);
|
||||
if (platform_device)
|
||||
return platform_device->EndPlatformPaint();
|
||||
}
|
||||
|
||||
bool IsVectorial(SkDevice* device) {
|
||||
PlatformDevice* platform_device = GetPlatformDevice(device);
|
||||
if (platform_device)
|
||||
return platform_device->IsVectorial();
|
||||
|
||||
return device->getDeviceCapabilities() & SkDevice::kVector_Capability;
|
||||
}
|
||||
|
||||
bool IsNativeFontRenderingAllowed(SkDevice* device) {
|
||||
PlatformDevice* platform_device = GetPlatformDevice(device);
|
||||
if (platform_device)
|
||||
return platform_device->IsNativeFontRenderingAllowed();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void DrawToNativeContext(SkDevice* device, PlatformSurface context,
|
||||
int x, int y, const PlatformRect* src_rect) {
|
||||
PlatformDevice* platform_device = GetPlatformDevice(device);
|
||||
if (platform_device)
|
||||
platform_device->DrawToNativeContext(context, x, y, src_rect);
|
||||
}
|
||||
|
||||
void MakeOpaque(SkDevice* device, int x, int y, int width, int height) {
|
||||
PlatformDevice* platform_device = GetPlatformDevice(device);
|
||||
if (platform_device)
|
||||
platform_device->MakeOpaque(x, y, width, height);
|
||||
}
|
||||
|
||||
} // namespace skia
|
||||
|
@ -9,6 +9,81 @@
|
||||
// This file provides an easy way to include the appropriate PlatformDevice
|
||||
// header file for your platform.
|
||||
|
||||
#if defined(WIN32)
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#include "third_party/skia/include/core/SkPreConfig.h"
|
||||
#include "third_party/skia/include/core/SkColor.h"
|
||||
|
||||
|
||||
class SkDevice;
|
||||
struct SkIRect;
|
||||
|
||||
#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__)
|
||||
typedef struct _cairo cairo_t;
|
||||
typedef struct _cairo_rectangle cairo_rectangle_t;
|
||||
#elif defined(__APPLE__)
|
||||
typedef struct CGContext* CGContextRef;
|
||||
typedef struct CGRect CGRect;
|
||||
#endif
|
||||
|
||||
namespace skia {
|
||||
|
||||
class PlatformDevice;
|
||||
|
||||
#if defined(WIN32)
|
||||
typedef HDC PlatformSurface;
|
||||
typedef RECT PlatformRect;
|
||||
#elif defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__)
|
||||
typedef cairo_t* PlatformSurface;
|
||||
typedef cairo_rectangle_t PlatformRect;
|
||||
#elif defined(__APPLE__)
|
||||
typedef CGContextRef PlatformSurface;
|
||||
typedef CGRect PlatformRect;
|
||||
#endif
|
||||
|
||||
// The following routines provide accessor points for the functionality
|
||||
// exported by the various PlatformDevice ports. The PlatformDevice, and
|
||||
// BitmapPlatformDevice classes inherit directly from SkDevice, which is no
|
||||
// longer a supported usage-pattern for skia. In preparation of the removal of
|
||||
// these classes, all calls to PlatformDevice::* should be routed through these
|
||||
// helper functions.
|
||||
|
||||
// Bind a PlatformDevice instance, |platform_device| to |device|. Subsequent
|
||||
// calls to the functions exported below will forward the request to the
|
||||
// corresponding method on the bound PlatformDevice instance. If no
|
||||
// PlatformDevice has been bound to the SkDevice passed, then the routines are
|
||||
// NOPS.
|
||||
SK_API void SetPlatformDevice(SkDevice* device,
|
||||
PlatformDevice* platform_device);
|
||||
SK_API PlatformDevice* GetPlatformDevice(SkDevice* device);
|
||||
|
||||
// Returns if the preferred rendering engine is vectorial or bitmap based.
|
||||
// Forwards to PlatformDevice::IsVectorial, if a PlatformDevice is bound,
|
||||
// otherwise falls-back to the SkDevice::getDeviceCapabilities routine.
|
||||
SK_API bool IsVectorial(SkDevice* device);
|
||||
|
||||
// Returns if the native font rendering engine is allowed to render text to
|
||||
// this device.
|
||||
SK_API bool IsNativeFontRenderingAllowed(SkDevice* device);
|
||||
|
||||
// Returns the PlatformSurface used for native rendering into the device.
|
||||
SK_API PlatformSurface BeginPlatformPaint(SkDevice* device);
|
||||
|
||||
// Finish a previous call to BeginPlatformPaint.
|
||||
SK_API void EndPlatformPaint(SkDevice* device);
|
||||
|
||||
// Draws to the given PlatformSurface, |context|. Forwards to the
|
||||
// PlatformDevice bound to |device|. Otherwise is a NOP.
|
||||
SK_API void DrawToNativeContext(SkDevice* device, PlatformSurface context,
|
||||
int x, int y, const PlatformRect* src_rect);
|
||||
|
||||
// Sets the opacity of each pixel in the specified region to be opaque.
|
||||
SK_API void MakeOpaque(SkDevice* device, int x, int y, int width, int height);
|
||||
|
||||
} // namespace skia
|
||||
|
||||
#if defined(WIN32)
|
||||
#include "skia/ext/platform_device_win.h"
|
||||
#elif defined(__APPLE__)
|
||||
|
@ -2,12 +2,13 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "skia/ext/platform_device_linux.h"
|
||||
#include "skia/ext/platform_device.h"
|
||||
|
||||
namespace skia {
|
||||
|
||||
PlatformDevice::PlatformDevice(const SkBitmap& bitmap)
|
||||
: SkDevice(NULL, bitmap, /*isForLayer=*/false) {
|
||||
SetPlatformDevice(this, this);
|
||||
}
|
||||
|
||||
bool PlatformDevice::IsNativeFontRenderingAllowed() {
|
||||
@ -18,4 +19,10 @@ void PlatformDevice::EndPlatformPaint() {
|
||||
// We don't need to do anything on Linux here.
|
||||
}
|
||||
|
||||
void PlatformDevice::DrawToNativeContext(PlatformSurface surface, int x, int y,
|
||||
const PlatformRect* src_rect) {
|
||||
// Should never be called on Linux.
|
||||
SkASSERT(false);
|
||||
}
|
||||
|
||||
} // namespace skia
|
||||
|
@ -6,10 +6,9 @@
|
||||
#define SKIA_EXT_PLATFORM_DEVICE_LINUX_H_
|
||||
#pragma once
|
||||
|
||||
#include "skia/ext/platform_device.h"
|
||||
#include "third_party/skia/include/core/SkDevice.h"
|
||||
|
||||
typedef struct _cairo cairo_t;
|
||||
|
||||
namespace skia {
|
||||
|
||||
// Blindly copying the mac hierarchy.
|
||||
@ -26,6 +25,12 @@ class PlatformDevice : public SkDevice {
|
||||
virtual PlatformSurface BeginPlatformPaint() = 0;
|
||||
virtual void EndPlatformPaint();
|
||||
|
||||
virtual void DrawToNativeContext(PlatformSurface surface, int x, int y,
|
||||
const PlatformRect* src_rect );
|
||||
|
||||
// Sets the opacity of each pixel in the specified region to be opaque.
|
||||
virtual void MakeOpaque(int x, int y, int width, int height) { }
|
||||
|
||||
protected:
|
||||
// Forwards |bitmap| to SkDevice's constructor.
|
||||
explicit PlatformDevice(const SkBitmap& bitmap);
|
||||
|
@ -2,7 +2,8 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "skia/ext/bitmap_platform_device_mac.h"
|
||||
#include "skia/ext/platform_device.h"
|
||||
#include "skia/ext/bitmap_platform_device.h"
|
||||
|
||||
#import <ApplicationServices/ApplicationServices.h>
|
||||
#include "skia/ext/skia_utils_mac.h"
|
||||
@ -13,28 +14,17 @@
|
||||
|
||||
namespace skia {
|
||||
|
||||
namespace {
|
||||
CGContextRef GetBitmapContext(SkDevice* device) {
|
||||
PlatformDevice* platform_device = GetPlatformDevice(device);
|
||||
if (platform_device)
|
||||
return platform_device->GetBitmapContext();
|
||||
|
||||
// Constrains position and size to fit within available_size.
|
||||
bool constrain(int available_size, int* position, int *size) {
|
||||
if (*position < 0) {
|
||||
*size += *position;
|
||||
*position = 0;
|
||||
}
|
||||
if (*size > 0 && *position < available_size) {
|
||||
int overflow = (*position + *size) - available_size;
|
||||
if (overflow > 0) {
|
||||
*size -= overflow;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
PlatformDevice::PlatformDevice(const SkBitmap& bitmap)
|
||||
: SkDevice(NULL, bitmap, /*isForLayer=*/false) {
|
||||
SetPlatformDevice(this, this);
|
||||
}
|
||||
|
||||
bool PlatformDevice::IsNativeFontRenderingAllowed() {
|
||||
|
@ -17,6 +17,10 @@ class SkRegion;
|
||||
|
||||
namespace skia {
|
||||
|
||||
// Returns the CGContext that backing the SkDevice. Forwards to the bound
|
||||
// PlatformDevice. Returns NULL if no PlatformDevice is bound.
|
||||
CGContextRef GetBitmapContext(SkDevice* device);
|
||||
|
||||
// A device is basically a wrapper around SkBitmap that provides a surface for
|
||||
// SkCanvas to draw into. Our device provides a surface CoreGraphics can also
|
||||
// write to. It also provides functionality to play well with CG drawing
|
||||
@ -37,8 +41,11 @@ class PlatformDevice : public SkDevice {
|
||||
// context, it will be more efficient if you don't free it until after this
|
||||
// call so it doesn't have to be created twice. If src_rect is null, then
|
||||
// the entirety of the source device will be copied.
|
||||
virtual void DrawToContext(CGContextRef context, int x, int y,
|
||||
const CGRect* src_rect) = 0;
|
||||
virtual void DrawToNativeContext(CGContextRef context, int x, int y,
|
||||
const CGRect* src_rect) = 0;
|
||||
|
||||
// Sets the opacity of each pixel in the specified region to be opaque.
|
||||
virtual void MakeOpaque(int x, int y, int width, int height) { }
|
||||
|
||||
// Returns if the preferred rendering engine is vectorial or bitmap based.
|
||||
virtual bool IsVectorial() = 0;
|
||||
|
@ -2,7 +2,7 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "skia/ext/platform_device_win.h"
|
||||
#include "skia/ext/platform_device.h"
|
||||
|
||||
#include "skia/ext/skia_utils_win.h"
|
||||
#include "third_party/skia/include/core/SkMatrix.h"
|
||||
@ -12,17 +12,7 @@
|
||||
|
||||
namespace skia {
|
||||
|
||||
PlatformDevice::PlatformDevice(const SkBitmap& bitmap)
|
||||
: SkDevice(NULL, bitmap, /*isForLayer=*/false) {
|
||||
}
|
||||
|
||||
void PlatformDevice::EndPlatformPaint() {
|
||||
// We don't clear the DC here since it will be likely to be used again.
|
||||
// Flushing will be done in onAccessBitmap.
|
||||
}
|
||||
|
||||
// static
|
||||
void PlatformDevice::InitializeDC(HDC context) {
|
||||
void InitializeDC(HDC context) {
|
||||
// Enables world transformation.
|
||||
// If the GM_ADVANCED graphics mode is set, GDI always draws arcs in the
|
||||
// counterclockwise direction in logical space. This is equivalent to the
|
||||
@ -61,6 +51,16 @@ void PlatformDevice::InitializeDC(HDC context) {
|
||||
SkASSERT(res != 0);
|
||||
}
|
||||
|
||||
PlatformDevice::PlatformDevice(const SkBitmap& bitmap)
|
||||
: SkDevice(NULL, bitmap, /*isForLayer=*/false) {
|
||||
SetPlatformDevice(this, this);
|
||||
}
|
||||
|
||||
void PlatformDevice::EndPlatformPaint() {
|
||||
// We don't clear the DC here since it will be likely to be used again.
|
||||
// Flushing will be done in onAccessBitmap.
|
||||
}
|
||||
|
||||
// static
|
||||
void PlatformDevice::LoadPathToDC(HDC context, const SkPath& path) {
|
||||
switch (path.getFillType()) {
|
||||
|
@ -18,6 +18,9 @@ class SkRegion;
|
||||
|
||||
namespace skia {
|
||||
|
||||
// Initializes the default settings and colors in a device context.
|
||||
SK_API void InitializeDC(HDC context);
|
||||
|
||||
// A device is basically a wrapper around SkBitmap that provides a surface for
|
||||
// SkCanvas to draw into. Our device provides a surface Windows can also write
|
||||
// to. It also provides functionality to play well with GDI drawing functions.
|
||||
@ -40,10 +43,11 @@ class SK_API PlatformDevice : public SkDevice {
|
||||
// be more efficient if you don't free it until after this call so it doesn't
|
||||
// have to be created twice. If src_rect is null, then the entirety of the
|
||||
// source device will be copied.
|
||||
virtual void drawToHDC(HDC dc, int x, int y, const RECT* src_rect) = 0;
|
||||
virtual void DrawToNativeContext(HDC dc, int x, int y,
|
||||
const RECT* src_rect) = 0;
|
||||
|
||||
// Sets the opacity of each pixel in the specified region to be opaque.
|
||||
virtual void makeOpaque(int x, int y, int width, int height) { }
|
||||
virtual void MakeOpaque(int x, int y, int width, int height) { }
|
||||
|
||||
// Returns if the preferred rendering engine is vectorial or bitmap based.
|
||||
virtual bool IsVectorial() = 0;
|
||||
@ -51,9 +55,6 @@ class SK_API PlatformDevice : public SkDevice {
|
||||
// Returns if GDI is allowed to render text to this device.
|
||||
virtual bool IsNativeFontRenderingAllowed() { return true; }
|
||||
|
||||
// Initializes the default settings and colors in a device context.
|
||||
static void InitializeDC(HDC context);
|
||||
|
||||
// Loads a SkPath into the GDI context. The path can there after be used for
|
||||
// clipping or as a stroke.
|
||||
static void LoadPathToDC(HDC context, const SkPath& path);
|
||||
|
@ -193,10 +193,10 @@ SkBitmap CGImageToSkBitmap(CGImageRef image) {
|
||||
int width = CGImageGetWidth(image);
|
||||
int height = CGImageGetHeight(image);
|
||||
|
||||
scoped_ptr<skia::BitmapPlatformDevice> device(
|
||||
scoped_ptr<SkDevice> device(
|
||||
skia::BitmapPlatformDevice::Create(NULL, width, height, false));
|
||||
|
||||
CGContextRef context = device->GetBitmapContext();
|
||||
CGContextRef context = skia::GetBitmapContext(device.get());
|
||||
|
||||
// We need to invert the y-axis of the canvas so that Core Graphics drawing
|
||||
// happens right-side up. Skia has an upper-left origin and CG has a lower-
|
||||
|
@ -3,10 +3,11 @@
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "skia/ext/vector_canvas.h"
|
||||
#include "third_party/skia/include/core/SkDevice.h"
|
||||
|
||||
namespace skia {
|
||||
|
||||
VectorCanvas::VectorCanvas(PlatformDevice* device)
|
||||
VectorCanvas::VectorCanvas(SkDevice* device)
|
||||
: PlatformCanvas(device->getDeviceFactory()) {
|
||||
setDevice(device)->unref(); // Created with refcount 1, and setDevice refs.
|
||||
}
|
||||
@ -30,7 +31,7 @@ SkDrawFilter* VectorCanvas::setDrawFilter(SkDrawFilter* filter) {
|
||||
}
|
||||
|
||||
bool VectorCanvas::IsTopDeviceVectorial() const {
|
||||
return getTopPlatformDevice().IsVectorial();
|
||||
return IsVectorial(GetTopDevice(*this));
|
||||
}
|
||||
|
||||
} // namespace skia
|
||||
|
@ -8,9 +8,9 @@
|
||||
|
||||
#include "skia/ext/platform_canvas.h"
|
||||
|
||||
namespace skia {
|
||||
class SkDevice;
|
||||
|
||||
class PlatformDevice;
|
||||
namespace skia {
|
||||
|
||||
// This class is a specialization of the regular PlatformCanvas. It is designed
|
||||
// to work with a VectorDevice to manage platform-specific drawing. It allows
|
||||
@ -19,7 +19,7 @@ class PlatformDevice;
|
||||
class SK_API VectorCanvas : public PlatformCanvas {
|
||||
public:
|
||||
// Ownership of |device| is transfered to VectorCanvas.
|
||||
explicit VectorCanvas(PlatformDevice* device);
|
||||
explicit VectorCanvas(SkDevice* device);
|
||||
virtual ~VectorCanvas();
|
||||
|
||||
virtual SkBounder* setBounder(SkBounder* bounder);
|
||||
|
@ -96,10 +96,11 @@ class Image {
|
||||
}
|
||||
|
||||
// Loads the image from a canvas.
|
||||
Image(const skia::PlatformCanvas& canvas) : ignore_alpha_(true) {
|
||||
Image(skia::PlatformCanvas& canvas) : ignore_alpha_(true) {
|
||||
// Use a different way to access the bitmap. The normal way would be to
|
||||
// query the SkBitmap.
|
||||
HDC context = canvas.beginPlatformPaint();
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(&canvas);
|
||||
HDC context = scoped_platform_paint.GetPlatformSurface();
|
||||
HGDIOBJ bitmap = GetCurrentObject(context, OBJ_BITMAP);
|
||||
EXPECT_TRUE(bitmap != NULL);
|
||||
// Initialize the clip region to the entire bitmap.
|
||||
@ -111,7 +112,6 @@ class Image {
|
||||
size_t size = row_length_ * height_;
|
||||
data_.resize(size);
|
||||
memcpy(&*data_.begin(), bitmap_data.bmBits, size);
|
||||
canvas.endPlatformPaint();
|
||||
}
|
||||
|
||||
// Loads the image from a canvas.
|
||||
@ -267,7 +267,7 @@ class ImageTest : public testing::Test {
|
||||
// kGenerating value. Returns 0 on success or any positive value between ]0,
|
||||
// 100] on failure. The return value is the percentage of difference between
|
||||
// the image in the file and the image in the canvas.
|
||||
double ProcessCanvas(const skia::PlatformCanvas& canvas,
|
||||
double ProcessCanvas(skia::PlatformCanvas& canvas,
|
||||
FilePath::StringType filename) const {
|
||||
filename = filename + FILE_PATH_LITERAL(".png");
|
||||
switch (action_) {
|
||||
@ -286,7 +286,7 @@ class ImageTest : public testing::Test {
|
||||
|
||||
// Compares the bitmap currently loaded in the context with the file. Returns
|
||||
// the percentage of pixel difference between both images, between 0 and 100.
|
||||
double CompareImage(const skia::PlatformCanvas& canvas,
|
||||
double CompareImage(skia::PlatformCanvas& canvas,
|
||||
const FilePath::StringType& filename) const {
|
||||
Image image1(canvas);
|
||||
Image image2(test_file(filename));
|
||||
@ -295,7 +295,7 @@ class ImageTest : public testing::Test {
|
||||
}
|
||||
|
||||
// Saves the bitmap currently loaded in the context into the file.
|
||||
void SaveImage(const skia::PlatformCanvas& canvas,
|
||||
void SaveImage(skia::PlatformCanvas& canvas,
|
||||
const FilePath::StringType& filename) const {
|
||||
Image(canvas).SaveToFile(test_file(filename));
|
||||
}
|
||||
|
@ -435,8 +435,8 @@ void VectorPlatformDeviceEmf::setMatrixClip(const SkMatrix& transform,
|
||||
LoadClipRegion();
|
||||
}
|
||||
|
||||
void VectorPlatformDeviceEmf::drawToHDC(HDC dc, int x, int y,
|
||||
const RECT* src_rect) {
|
||||
void VectorPlatformDeviceEmf::DrawToNativeContext(HDC dc, int x, int y,
|
||||
const RECT* src_rect) {
|
||||
SkASSERT(false);
|
||||
}
|
||||
|
||||
|
@ -73,7 +73,7 @@ class VectorPlatformDeviceEmf : public PlatformDevice {
|
||||
|
||||
virtual void setMatrixClip(const SkMatrix& transform, const SkRegion& region,
|
||||
const SkClipStack&);
|
||||
virtual void drawToHDC(HDC dc, int x, int y, const RECT* src_rect);
|
||||
virtual void DrawToNativeContext(HDC dc, int x, int y, const RECT* src_rect);
|
||||
virtual bool IsVectorial() { return true; }
|
||||
|
||||
void LoadClipRegion();
|
||||
|
@ -209,10 +209,10 @@ void VectorPlatformDeviceSkia::drawDevice(const SkDraw& draw,
|
||||
}
|
||||
|
||||
#if defined(OS_WIN)
|
||||
void VectorPlatformDeviceSkia::drawToHDC(HDC dc,
|
||||
int x,
|
||||
int y,
|
||||
const RECT* src_rect) {
|
||||
void VectorPlatformDeviceSkia::DrawToNativeContext(HDC dc,
|
||||
int x,
|
||||
int y,
|
||||
const RECT* src_rect) {
|
||||
SkASSERT(false);
|
||||
}
|
||||
#endif
|
||||
|
@ -84,7 +84,7 @@ class VectorPlatformDeviceSkia : public PlatformDevice {
|
||||
const SkPaint&);
|
||||
|
||||
#if defined(OS_WIN)
|
||||
virtual void drawToHDC(HDC dc, int x, int y, const RECT* src_rect);
|
||||
virtual void DrawToNativeContext(HDC dc, int x, int y, const RECT* src_rect);
|
||||
#endif
|
||||
|
||||
protected:
|
||||
|
@ -661,11 +661,12 @@
|
||||
'ext/image_operations.cc',
|
||||
'ext/image_operations.h',
|
||||
'ext/SkThread_chrome.cc',
|
||||
'ext/platform_canvas.h',
|
||||
'ext/platform_canvas.cc',
|
||||
'ext/platform_canvas.h',
|
||||
'ext/platform_canvas_linux.cc',
|
||||
'ext/platform_canvas_mac.cc',
|
||||
'ext/platform_canvas_win.cc',
|
||||
'ext/platform_device.cc',
|
||||
'ext/platform_device.h',
|
||||
'ext/platform_device_linux.cc',
|
||||
'ext/platform_device_linux.h',
|
||||
|
@ -388,10 +388,10 @@ SkBitmap Clipboard::ReadImage(Buffer buffer) const {
|
||||
gfx::CanvasSkia canvas(gdk_pixbuf_get_width(pixbuf.get()),
|
||||
gdk_pixbuf_get_height(pixbuf.get()),
|
||||
false);
|
||||
cairo_t* context = canvas.beginPlatformPaint();
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(&canvas);
|
||||
cairo_t* context = scoped_platform_paint.GetPlatformSurface();
|
||||
gdk_cairo_set_source_pixbuf(context, pixbuf.get(), 0.0, 0.0);
|
||||
cairo_paint(context);
|
||||
canvas.endPlatformPaint();
|
||||
return canvas.ExtractBitmap();
|
||||
}
|
||||
|
||||
|
@ -253,7 +253,8 @@ SkBitmap Clipboard::ReadImage(Buffer buffer) const {
|
||||
int height = [image size].height;
|
||||
|
||||
gfx::CanvasSkia canvas(width, height, false);
|
||||
CGContextRef gc = canvas.beginPlatformPaint();
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(&canvas);
|
||||
CGContextRef gc = scoped_platform_paint.GetPlatformSurface();
|
||||
NSGraphicsContext* cocoa_gc =
|
||||
[NSGraphicsContext graphicsContextWithGraphicsPort:gc flipped:NO];
|
||||
[NSGraphicsContext setCurrentContext:cocoa_gc];
|
||||
@ -262,7 +263,6 @@ SkBitmap Clipboard::ReadImage(Buffer buffer) const {
|
||||
operation:NSCompositeCopy
|
||||
fraction:1.0];
|
||||
[NSGraphicsContext restoreGraphicsState];
|
||||
canvas.endPlatformPaint();
|
||||
return canvas.ExtractBitmap();
|
||||
}
|
||||
return SkBitmap();
|
||||
|
@ -456,9 +456,9 @@ SkBitmap Clipboard::ReadImage(Buffer buffer) const {
|
||||
|
||||
gfx::CanvasSkia canvas(width, height, false);
|
||||
|
||||
HDC destination_dc = canvas.beginPlatformPaint();
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(&canvas);
|
||||
HDC destination_dc = scoped_platform_paint.GetPlatformSurface();
|
||||
::BitBlt(destination_dc, 0, 0, width, height, source_dc, 0, 0, SRCCOPY);
|
||||
canvas.endPlatformPaint();
|
||||
return canvas.ExtractBitmap();
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,7 @@ bool HasClipOrTransform(const skia::PlatformCanvas& canvas) {
|
||||
|
||||
// Now we know the clip is a regular rectangle, make sure it covers the
|
||||
// entire canvas.
|
||||
const SkBitmap& bitmap = canvas.getTopPlatformDevice().accessBitmap(false);
|
||||
const SkBitmap& bitmap = skia::GetTopDevice(canvas)->accessBitmap(false);
|
||||
const SkIRect& clip_bounds = clip_region.getBounds();
|
||||
if (clip_bounds.fLeft != 0 || clip_bounds.fTop != 0 ||
|
||||
clip_bounds.fRight != bitmap.width() ||
|
||||
@ -95,9 +95,9 @@ void BlitContextToCanvas(skia::PlatformCanvas *dst_canvas,
|
||||
const Rect& dst_rect,
|
||||
NativeDrawingContext src_context,
|
||||
const Point& src_origin) {
|
||||
BlitContextToContext(dst_canvas->beginPlatformPaint(), dst_rect,
|
||||
BlitContextToContext(skia::BeginPlatformPaint(dst_canvas), dst_rect,
|
||||
src_context, src_origin);
|
||||
dst_canvas->endPlatformPaint();
|
||||
skia::EndPlatformPaint(dst_canvas);
|
||||
}
|
||||
|
||||
void BlitCanvasToContext(NativeDrawingContext dst_context,
|
||||
@ -105,18 +105,18 @@ void BlitCanvasToContext(NativeDrawingContext dst_context,
|
||||
skia::PlatformCanvas *src_canvas,
|
||||
const Point& src_origin) {
|
||||
BlitContextToContext(dst_context, dst_rect,
|
||||
src_canvas->beginPlatformPaint(), src_origin);
|
||||
src_canvas->endPlatformPaint();
|
||||
skia::BeginPlatformPaint(src_canvas), src_origin);
|
||||
skia::EndPlatformPaint(src_canvas);
|
||||
}
|
||||
|
||||
void BlitCanvasToCanvas(skia::PlatformCanvas *dst_canvas,
|
||||
const Rect& dst_rect,
|
||||
skia::PlatformCanvas *src_canvas,
|
||||
const Point& src_origin) {
|
||||
BlitContextToContext(dst_canvas->beginPlatformPaint(), dst_rect,
|
||||
src_canvas->beginPlatformPaint(), src_origin);
|
||||
src_canvas->endPlatformPaint();
|
||||
dst_canvas->endPlatformPaint();
|
||||
BlitContextToContext(skia::BeginPlatformPaint(dst_canvas), dst_rect,
|
||||
skia::BeginPlatformPaint(src_canvas), src_origin);
|
||||
skia::EndPlatformPaint(src_canvas);
|
||||
skia::EndPlatformPaint(dst_canvas);
|
||||
}
|
||||
|
||||
#if defined(OS_WIN)
|
||||
@ -125,13 +125,12 @@ void ScrollCanvas(skia::PlatformCanvas* canvas,
|
||||
const gfx::Rect& clip,
|
||||
const gfx::Point& amount) {
|
||||
DCHECK(!HasClipOrTransform(*canvas)); // Don't support special stuff.
|
||||
HDC hdc = canvas->beginPlatformPaint();
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(canvas);
|
||||
HDC hdc = scoped_platform_paint.GetPlatformSurface();
|
||||
|
||||
RECT damaged_rect;
|
||||
RECT r = clip.ToRECT();
|
||||
ScrollDC(hdc, amount.x(), amount.y(), NULL, &r, NULL, &damaged_rect);
|
||||
|
||||
canvas->endPlatformPaint();
|
||||
}
|
||||
|
||||
#elif defined(OS_POSIX)
|
||||
@ -144,7 +143,7 @@ void ScrollCanvas(skia::PlatformCanvas* canvas,
|
||||
const gfx::Point& amount) {
|
||||
DCHECK(!HasClipOrTransform(*canvas)); // Don't support special stuff.
|
||||
SkBitmap& bitmap = const_cast<SkBitmap&>(
|
||||
canvas->getTopPlatformDevice().accessBitmap(true));
|
||||
skia::GetTopDevice(*canvas)->accessBitmap(true));
|
||||
SkAutoLockPixels lock(bitmap);
|
||||
|
||||
// We expect all coords to be inside the canvas, so clip here.
|
||||
|
@ -20,7 +20,7 @@ namespace {
|
||||
template<int w, int h>
|
||||
void SetToCanvas(skia::PlatformCanvas* canvas, uint8 values[h][w]) {
|
||||
SkBitmap& bitmap = const_cast<SkBitmap&>(
|
||||
canvas->getTopPlatformDevice().accessBitmap(true));
|
||||
skia::GetTopDevice(*canvas)->accessBitmap(true));
|
||||
SkAutoLockPixels lock(bitmap);
|
||||
ASSERT_EQ(w, bitmap.width());
|
||||
ASSERT_EQ(h, bitmap.height());
|
||||
@ -40,7 +40,7 @@ void SetToCanvas(skia::PlatformCanvas* canvas, uint8 values[h][w]) {
|
||||
template<int w, int h>
|
||||
void VerifyCanvasValues(skia::PlatformCanvas* canvas, uint8 values[h][w]) {
|
||||
SkBitmap& bitmap = const_cast<SkBitmap&>(
|
||||
canvas->getTopPlatformDevice().accessBitmap(true));
|
||||
skia::GetTopDevice(*canvas)->accessBitmap(true));
|
||||
SkAutoLockPixels lock(bitmap);
|
||||
ASSERT_EQ(w, bitmap.width());
|
||||
ASSERT_EQ(h, bitmap.height());
|
||||
|
@ -324,11 +324,11 @@ void CanvasSkia::TileImageInt(const SkBitmap& bitmap,
|
||||
}
|
||||
|
||||
gfx::NativeDrawingContext CanvasSkia::BeginPlatformPaint() {
|
||||
return beginPlatformPaint();
|
||||
return skia::BeginPlatformPaint(this);
|
||||
}
|
||||
|
||||
void CanvasSkia::EndPlatformPaint() {
|
||||
endPlatformPaint();
|
||||
skia::EndPlatformPaint(this);
|
||||
}
|
||||
|
||||
void CanvasSkia::Transform(const ui::Transform& transform) {
|
||||
|
@ -208,7 +208,7 @@ DrawStringContext::DrawStringContext(gfx::CanvasSkia* canvas,
|
||||
text_height_(0) {
|
||||
DCHECK(!bounds_.IsEmpty());
|
||||
|
||||
cr_ = canvas_->beginPlatformPaint();
|
||||
cr_ = skia::BeginPlatformPaint(canvas_);
|
||||
layout_ = pango_cairo_create_layout(cr_);
|
||||
|
||||
SetupPangoLayout(layout_, text, font, bounds_.width(), flags_);
|
||||
@ -246,8 +246,10 @@ DrawStringContext::~DrawStringContext() {
|
||||
}
|
||||
cairo_restore(cr_);
|
||||
|
||||
skia::EndPlatformPaint(canvas_);
|
||||
|
||||
g_object_unref(layout_);
|
||||
// NOTE: beginPlatformPaint returned its surface, we shouldn't destroy it.
|
||||
// NOTE: BeginPlatformPaint returned its surface, we shouldn't destroy it.
|
||||
}
|
||||
|
||||
void DrawStringContext::Draw(const SkColor& text_color) {
|
||||
@ -266,32 +268,33 @@ void DrawStringContext::DrawWithHalo(const SkColor& text_color,
|
||||
text_canvas.FillRectInt(static_cast<SkColor>(0),
|
||||
0, 0, bounds_.width() + 2, bounds_.height() + 2);
|
||||
|
||||
cairo_t* text_cr = text_canvas.beginPlatformPaint();
|
||||
{
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(&text_canvas);
|
||||
cairo_t* text_cr = scoped_platform_paint.GetPlatformSurface();
|
||||
|
||||
cairo_move_to(text_cr, 2, 1);
|
||||
pango_cairo_layout_path(text_cr, layout_);
|
||||
cairo_move_to(text_cr, 2, 1);
|
||||
pango_cairo_layout_path(text_cr, layout_);
|
||||
|
||||
cairo_set_source_rgba(text_cr,
|
||||
SkColorGetR(halo_color) / 255.0,
|
||||
SkColorGetG(halo_color) / 255.0,
|
||||
SkColorGetB(halo_color) / 255.0,
|
||||
SkColorGetA(halo_color) / 255.0);
|
||||
cairo_set_line_width(text_cr, 2.0);
|
||||
cairo_set_line_join(text_cr, CAIRO_LINE_JOIN_ROUND);
|
||||
cairo_stroke_preserve(text_cr);
|
||||
cairo_set_source_rgba(text_cr,
|
||||
SkColorGetR(halo_color) / 255.0,
|
||||
SkColorGetG(halo_color) / 255.0,
|
||||
SkColorGetB(halo_color) / 255.0,
|
||||
SkColorGetA(halo_color) / 255.0);
|
||||
cairo_set_line_width(text_cr, 2.0);
|
||||
cairo_set_line_join(text_cr, CAIRO_LINE_JOIN_ROUND);
|
||||
cairo_stroke_preserve(text_cr);
|
||||
|
||||
cairo_set_operator(text_cr, CAIRO_OPERATOR_SOURCE);
|
||||
cairo_set_source_rgba(text_cr,
|
||||
SkColorGetR(text_color) / 255.0,
|
||||
SkColorGetG(text_color) / 255.0,
|
||||
SkColorGetB(text_color) / 255.0,
|
||||
SkColorGetA(text_color) / 255.0);
|
||||
cairo_fill(text_cr);
|
||||
|
||||
text_canvas.endPlatformPaint();
|
||||
cairo_set_operator(text_cr, CAIRO_OPERATOR_SOURCE);
|
||||
cairo_set_source_rgba(text_cr,
|
||||
SkColorGetR(text_color) / 255.0,
|
||||
SkColorGetG(text_color) / 255.0,
|
||||
SkColorGetB(text_color) / 255.0,
|
||||
SkColorGetA(text_color) / 255.0);
|
||||
cairo_fill(text_cr);
|
||||
}
|
||||
|
||||
const SkBitmap& text_bitmap = const_cast<SkBitmap&>(
|
||||
text_canvas.getTopPlatformDevice().accessBitmap(false));
|
||||
skia::GetTopDevice(text_canvas)->accessBitmap(false));
|
||||
canvas_->DrawBitmapInt(text_bitmap, text_x_ - 1, text_y_ - 1);
|
||||
}
|
||||
|
||||
@ -379,7 +382,8 @@ void CanvasSkia::DrawGdkPixbuf(GdkPixbuf* pixbuf, int x, int y) {
|
||||
return;
|
||||
}
|
||||
|
||||
cairo_t* cr = beginPlatformPaint();
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(this);
|
||||
cairo_t* cr = scoped_platform_paint.GetPlatformSurface();
|
||||
gdk_cairo_set_source_pixbuf(cr, pixbuf, x, y);
|
||||
cairo_paint(cr);
|
||||
}
|
||||
|
@ -48,7 +48,8 @@ void CanvasSkia::DrawStringInt(const string16& text,
|
||||
if (!IntersectsClipRectInt(x, y, w, h))
|
||||
return;
|
||||
|
||||
CGContextRef context = beginPlatformPaint();
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(this);
|
||||
CGContextRef context = scoped_platform_paint.GetPlatformSurface();
|
||||
CGContextSaveGState(context);
|
||||
|
||||
NSColor* ns_color = [NSColor colorWithDeviceRed:SkColorGetR(color) / 255.0
|
||||
@ -83,7 +84,6 @@ void CanvasSkia::DrawStringInt(const string16& text,
|
||||
CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL));
|
||||
CTFrameDraw(frame, context);
|
||||
CGContextRestoreGState(context);
|
||||
endPlatformPaint();
|
||||
}
|
||||
|
||||
ui::TextureID CanvasSkia::GetTextureID() {
|
||||
|
@ -138,7 +138,7 @@ int ComputeFormatFlags(int flags, const string16& text) {
|
||||
// Changes the alpha of the given bitmap.
|
||||
// If |fade_to_right| is true then the rect fades from opaque to clear,
|
||||
// otherwise the rect fades from clear to opaque.
|
||||
void FadeBitmapRect(skia::BitmapPlatformDevice& bmp_device,
|
||||
void FadeBitmapRect(SkDevice& bmp_device,
|
||||
const gfx::Rect& rect,
|
||||
bool fade_to_right) {
|
||||
SkBitmap bmp = bmp_device.accessBitmap(true);
|
||||
@ -164,14 +164,14 @@ void FadeBitmapRect(skia::BitmapPlatformDevice& bmp_device,
|
||||
// this function draws black on white. It then uses the intensity of black
|
||||
// to determine how much alpha to use. The text is drawn in |gfx_text_rect| and
|
||||
// clipped to |gfx_draw_rect|.
|
||||
void DrawTextAndClearBackground(skia::BitmapPlatformDevice& bmp_device,
|
||||
void DrawTextAndClearBackground(SkDevice& bmp_device,
|
||||
HFONT font,
|
||||
COLORREF text_color,
|
||||
const string16& text,
|
||||
int flags,
|
||||
const gfx::Rect& gfx_text_rect,
|
||||
const gfx::Rect& gfx_draw_rect) {
|
||||
HDC hdc = bmp_device.BeginPlatformPaint();
|
||||
HDC hdc = skia::BeginPlatformPaint(&bmp_device);
|
||||
|
||||
// Clear the background by filling with white.
|
||||
HBRUSH fill_brush = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
|
||||
@ -218,14 +218,14 @@ void DrawTextAndClearBackground(skia::BitmapPlatformDevice& bmp_device,
|
||||
}
|
||||
}
|
||||
|
||||
bmp_device.EndPlatformPaint();
|
||||
skia::EndPlatformPaint(&bmp_device);
|
||||
}
|
||||
|
||||
// Draws the given text with a fade out gradient. |bmp_device| is a bitmap
|
||||
// that is used to temporary drawing. The text is drawn in |text_rect| and
|
||||
// clipped to |draw_rect|.
|
||||
void DrawTextGradientPart(HDC hdc,
|
||||
skia::BitmapPlatformDevice& bmp_device,
|
||||
SkDevice& bmp_device,
|
||||
const string16& text,
|
||||
const SkColor& color,
|
||||
HFONT font,
|
||||
@ -238,11 +238,11 @@ void DrawTextGradientPart(HDC hdc,
|
||||
FadeBitmapRect(bmp_device, draw_rect, fade_to_right);
|
||||
BLENDFUNCTION blend = {AC_SRC_OVER, 0, 255, AC_SRC_ALPHA};
|
||||
|
||||
HDC bmp_hdc = bmp_device.BeginPlatformPaint();
|
||||
HDC bmp_hdc = skia::BeginPlatformPaint(&bmp_device);
|
||||
AlphaBlend(hdc, draw_rect.x(), draw_rect.y(), draw_rect.width(),
|
||||
draw_rect.height(), bmp_hdc, draw_rect.x(), draw_rect.y(),
|
||||
draw_rect.width(), draw_rect.height(), blend);
|
||||
bmp_device.EndPlatformPaint();
|
||||
skia::EndPlatformPaint(&bmp_device);
|
||||
}
|
||||
|
||||
enum PrimarySide {
|
||||
@ -347,16 +347,20 @@ void CanvasSkia::DrawStringInt(const string16& text,
|
||||
const int kMaxStringLength = 32768 - 1; // So the trailing \0 fits in 32K.
|
||||
string16 clamped_string(text.substr(0, kMaxStringLength));
|
||||
|
||||
HDC dc = beginPlatformPaint();
|
||||
SetBkMode(dc, TRANSPARENT);
|
||||
HFONT old_font = (HFONT)SelectObject(dc, font);
|
||||
COLORREF brush_color = RGB(SkColorGetR(color), SkColorGetG(color),
|
||||
SkColorGetB(color));
|
||||
SetTextColor(dc, brush_color);
|
||||
HDC dc;
|
||||
HFONT old_font;
|
||||
{
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(this);
|
||||
dc = scoped_platform_paint.GetPlatformSurface();
|
||||
SetBkMode(dc, TRANSPARENT);
|
||||
old_font = (HFONT)SelectObject(dc, font);
|
||||
COLORREF brush_color = RGB(SkColorGetR(color), SkColorGetG(color),
|
||||
SkColorGetB(color));
|
||||
SetTextColor(dc, brush_color);
|
||||
|
||||
int f = ComputeFormatFlags(flags, clamped_string);
|
||||
DoDrawText(dc, clamped_string, &text_bounds, f);
|
||||
endPlatformPaint();
|
||||
int f = ComputeFormatFlags(flags, clamped_string);
|
||||
DoDrawText(dc, clamped_string, &text_bounds, f);
|
||||
}
|
||||
|
||||
// Restore the old font. This way we don't have to worry if the caller
|
||||
// deletes the font and the DC lives longer.
|
||||
@ -365,8 +369,8 @@ void CanvasSkia::DrawStringInt(const string16& text,
|
||||
// Windows will have cleared the alpha channel of the text we drew. Assume
|
||||
// we're drawing to an opaque surface, or at least the text rect area is
|
||||
// opaque.
|
||||
getTopPlatformDevice().makeOpaque(clip.fLeft, clip.fTop,
|
||||
clip.width(), clip.height());
|
||||
skia::MakeOpaque(this, clip.fLeft, clip.fTop, clip.width(),
|
||||
clip.height());
|
||||
}
|
||||
|
||||
void CanvasSkia::DrawStringInt(const string16& text,
|
||||
@ -430,11 +434,11 @@ void CanvasSkia::DrawStringWithHalo(const string16& text,
|
||||
// opaque. We have to do this first since pixelShouldGetHalo will check for
|
||||
// 0 to see if a pixel has been modified to transparent, and black text that
|
||||
// Windows draw will look transparent to it!
|
||||
text_canvas.getTopPlatformDevice().makeOpaque(0, 0, w + 2, h + 2);
|
||||
skia::MakeOpaque(&text_canvas, 0, 0, w + 2, h + 2);
|
||||
|
||||
uint32_t halo_premul = SkPreMultiplyColor(halo_color);
|
||||
SkBitmap& text_bitmap = const_cast<SkBitmap&>(
|
||||
text_canvas.getTopPlatformDevice().accessBitmap(true));
|
||||
skia::GetTopDevice(text_canvas)->accessBitmap(true));
|
||||
for (int cur_y = 0; cur_y < h + 2; cur_y++) {
|
||||
uint32_t* text_row = text_bitmap.getAddr32(0, cur_y);
|
||||
for (int cur_x = 0; cur_x < w + 2; cur_x++) {
|
||||
@ -553,21 +557,23 @@ void CanvasSkia::DrawFadeTruncatingString(
|
||||
text_rect.set_width(text_rect.width() + offset_x);
|
||||
|
||||
// Create a temporary bitmap to draw the gradient to.
|
||||
scoped_ptr<skia::BitmapPlatformDevice> gradient_bitmap(
|
||||
scoped_ptr<SkDevice> gradient_bitmap(
|
||||
skia::BitmapPlatformDevice::create(
|
||||
display_rect.width(), display_rect.height(), false, NULL));
|
||||
DCHECK(gradient_bitmap.get());
|
||||
|
||||
HDC hdc = beginPlatformPaint();
|
||||
if (is_truncating_head)
|
||||
DrawTextGradientPart(hdc, *gradient_bitmap, text, color,
|
||||
font.GetNativeFont(), text_rect, head_part, is_rtl,
|
||||
flags);
|
||||
if (is_truncating_tail)
|
||||
DrawTextGradientPart(hdc, *gradient_bitmap, text, color,
|
||||
font.GetNativeFont(), text_rect, tail_part, !is_rtl,
|
||||
flags);
|
||||
endPlatformPaint();
|
||||
{
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(this);
|
||||
HDC hdc = scoped_platform_paint.GetPlatformSurface();
|
||||
if (is_truncating_head)
|
||||
DrawTextGradientPart(hdc, *gradient_bitmap, text, color,
|
||||
font.GetNativeFont(), text_rect, head_part, is_rtl,
|
||||
flags);
|
||||
if (is_truncating_tail)
|
||||
DrawTextGradientPart(hdc, *gradient_bitmap, text, color,
|
||||
font.GetNativeFont(), text_rect, tail_part, !is_rtl,
|
||||
flags);
|
||||
}
|
||||
|
||||
// Draw the solid part.
|
||||
save(kClip_SaveFlag);
|
||||
|
@ -132,7 +132,8 @@ void NativeThemeWin::Paint(SkCanvas* canvas,
|
||||
State state,
|
||||
const gfx::Rect& rect,
|
||||
const ExtraParams& extra) const {
|
||||
HDC hdc = skia::BeginPlatformPaint(canvas);
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(canvas);
|
||||
HDC hdc = scoped_platform_paint.GetPlatformSurface();
|
||||
|
||||
switch (part) {
|
||||
case kCheckbox:
|
||||
@ -212,8 +213,6 @@ void NativeThemeWin::Paint(SkCanvas* canvas,
|
||||
// unsupported parts will DCHECK here.
|
||||
DCHECK(false);
|
||||
}
|
||||
|
||||
skia::EndPlatformPaint(canvas);
|
||||
}
|
||||
|
||||
HRESULT NativeThemeWin::PaintScrollbarArrow(
|
||||
|
@ -188,9 +188,10 @@ class MenuHostWindow : public ui::WindowImpl {
|
||||
gfx::CanvasSkia canvas(data->icon.width(), data->icon.height(), false);
|
||||
canvas.drawColor(SK_ColorBLACK, SkXfermode::kClear_Mode);
|
||||
canvas.DrawBitmapInt(data->icon, 0, 0);
|
||||
canvas.getTopPlatformDevice().drawToHDC(hDC, lpdis->rcItem.left +
|
||||
kItemLeftMargin, lpdis->rcItem.top + (lpdis->rcItem.bottom -
|
||||
lpdis->rcItem.top - data->icon.height()) / 2, NULL);
|
||||
skia::DrawToNativeContext(
|
||||
&canvas, hDC, lpdis->rcItem.left + kItemLeftMargin,
|
||||
lpdis->rcItem.top + (lpdis->rcItem.bottom - lpdis->rcItem.top -
|
||||
data->icon.height()) / 2, NULL);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
@ -250,8 +250,8 @@ class NativeMenuWin::MenuHostWindow {
|
||||
gfx::CanvasSkia canvas(icon.width(), icon.height(), false);
|
||||
canvas.drawColor(SK_ColorBLACK, SkXfermode::kClear_Mode);
|
||||
canvas.DrawBitmapInt(icon, 0, 0);
|
||||
canvas.getTopPlatformDevice().drawToHDC(dc,
|
||||
draw_item_struct->rcItem.left + kItemLeftMargin,
|
||||
skia::DrawToNativeContext(
|
||||
&canvas, dc, draw_item_struct->rcItem.left + kItemLeftMargin,
|
||||
draw_item_struct->rcItem.top + (draw_item_struct->rcItem.bottom -
|
||||
draw_item_struct->rcItem.top - icon.height()) / 2, NULL);
|
||||
} else if (type == ui::MenuModel::TYPE_CHECK &&
|
||||
@ -283,7 +283,7 @@ class NativeMenuWin::MenuHostWindow {
|
||||
&canvas, NativeTheme::kMenuCheck, state, bounds, extra);
|
||||
|
||||
// Draw checkbox to menu.
|
||||
canvas.getTopPlatformDevice().drawToHDC(dc,
|
||||
skia::DrawToNativeContext(&canvas, dc,
|
||||
draw_item_struct->rcItem.left + kItemLeftMargin,
|
||||
draw_item_struct->rcItem.top + (draw_item_struct->rcItem.bottom -
|
||||
draw_item_struct->rcItem.top - config.check_height) / 2, NULL);
|
||||
|
@ -548,10 +548,9 @@ LRESULT NativeTableWin::OnCustomDraw(NMLVCUSTOMDRAW* draw_info) {
|
||||
(intersection.right - intersection.left);
|
||||
to_draw.bottom = to_draw.top +
|
||||
(intersection.bottom - intersection.top);
|
||||
canvas.getTopPlatformDevice().drawToHDC(draw_info->nmcd.hdc,
|
||||
intersection.left,
|
||||
intersection.top,
|
||||
&to_draw);
|
||||
skia::DrawToNativeContext(&canvas, draw_info->nmcd.hdc,
|
||||
intersection.left, intersection.top,
|
||||
&to_draw);
|
||||
r = CDRF_SKIPDEFAULT;
|
||||
}
|
||||
}
|
||||
|
@ -1158,7 +1158,7 @@ void TableView::PaintAltText() {
|
||||
canvas.DrawStringWithHalo(alt_text_, font, SK_ColorDKGRAY, SK_ColorWHITE, 1,
|
||||
1, bounds.width() - 2, bounds.height() - 2,
|
||||
gfx::CanvasSkia::DefaultCanvasTextAlignment());
|
||||
canvas.getTopPlatformDevice().drawToHDC(dc, bounds.x(), bounds.y(), NULL);
|
||||
skia::DrawToNativeContext(&canvas, dc, bounds.x(), bounds.y(), NULL);
|
||||
ReleaseDC(GetNativeControlHWND(), dc);
|
||||
}
|
||||
|
||||
@ -1273,10 +1273,9 @@ LRESULT TableView::OnCustomDraw(NMLVCUSTOMDRAW* draw_info) {
|
||||
(intersection.right - intersection.left);
|
||||
to_draw.bottom = to_draw.top +
|
||||
(intersection.bottom - intersection.top);
|
||||
canvas.getTopPlatformDevice().drawToHDC(draw_info->nmcd.hdc,
|
||||
intersection.left,
|
||||
intersection.top,
|
||||
&to_draw);
|
||||
skia::DrawToNativeContext(&canvas, draw_info->nmcd.hdc,
|
||||
intersection.left, intersection.top,
|
||||
&to_draw);
|
||||
r = CDRF_SKIPDEFAULT;
|
||||
}
|
||||
}
|
||||
|
@ -755,7 +755,7 @@ LRESULT CALLBACK TreeView::TreeWndProc(HWND window,
|
||||
if (canvas.isEmpty())
|
||||
return 0;
|
||||
|
||||
HDC dc = canvas.beginPlatformPaint();
|
||||
HDC dc = skia::BeginPlatformPaint(&canvas);
|
||||
if (base::i18n::IsRTL()) {
|
||||
// gfx::CanvasSkia ends up configuring the DC with a mode of
|
||||
// GM_ADVANCED. For some reason a graphics mode of ADVANCED triggers
|
||||
@ -789,7 +789,7 @@ LRESULT CALLBACK TreeView::TreeWndProc(HWND window,
|
||||
// over we copy the right bits.
|
||||
SetViewportOrgEx(dc, 0, 0, NULL);
|
||||
}
|
||||
canvas.endPlatformPaint();
|
||||
skia::EndPlatformPaint(&canvas);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1120,13 +1120,13 @@ void NativeWidgetWin::RedrawLayeredWindowContents() {
|
||||
GetWindowRect(&wr);
|
||||
SIZE size = {wr.right - wr.left, wr.bottom - wr.top};
|
||||
POINT position = {wr.left, wr.top};
|
||||
HDC dib_dc = layered_window_contents_->beginPlatformPaint();
|
||||
HDC dib_dc = skia::BeginPlatformPaint(layered_window_contents_.get());
|
||||
POINT zero = {0, 0};
|
||||
BLENDFUNCTION blend = {AC_SRC_OVER, 0, layered_alpha_, AC_SRC_ALPHA};
|
||||
UpdateLayeredWindow(hwnd(), NULL, &position, &size, dib_dc, &zero,
|
||||
RGB(0xFF, 0xFF, 0xFF), &blend, ULW_ALPHA);
|
||||
invalid_rect_.SetRect(0, 0, 0, 0);
|
||||
layered_window_contents_->endPlatformPaint();
|
||||
skia::EndPlatformPaint(layered_window_contents_.get());
|
||||
}
|
||||
|
||||
void NativeWidgetWin::ClientAreaSizeChanged() {
|
||||
|
@ -403,7 +403,7 @@ WebCanvas* ToWebCanvas(skia::PlatformCanvas* canvas) {
|
||||
#if WEBKIT_USING_SKIA
|
||||
return canvas;
|
||||
#elif WEBKIT_USING_CG
|
||||
return canvas->getTopPlatformDevice().GetBitmapContext();
|
||||
return skia::GetBitmapContext(skia::GetTopDevice(*canvas));
|
||||
#else
|
||||
NOTIMPLEMENTED();
|
||||
return NULL;
|
||||
|
@ -687,8 +687,8 @@ void WebMediaPlayerImpl::paint(WebCanvas* canvas,
|
||||
|
||||
// Copy the frame rendered to our temporary skia canvas onto the passed in
|
||||
// canvas.
|
||||
skia_canvas_->getTopPlatformDevice().DrawToContext(canvas, 0, 0,
|
||||
&normalized_cgrect);
|
||||
skia::DrawToNativeContext(skia_canvas_.get(), canvas, 0, 0,
|
||||
&normalized_cgrect);
|
||||
|
||||
CGContextRestoreGState(canvas);
|
||||
#else
|
||||
|
@ -111,9 +111,9 @@ void WebPluginDelegateImpl::Paint(WebKit::WebCanvas* canvas,
|
||||
const gfx::Rect& rect) {
|
||||
if (!windowless_)
|
||||
return;
|
||||
cairo_t* context = skia::BeginPlatformPaint(canvas);
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(canvas);
|
||||
cairo_t* context = scoped_platform_paint.GetPlatformSurface();
|
||||
WindowlessPaint(context, rect);
|
||||
skia::EndPlatformPaint(canvas);
|
||||
}
|
||||
|
||||
void WebPluginDelegateImpl::InstallMissingPlugin() {
|
||||
|
@ -463,9 +463,9 @@ void WebPluginDelegateImpl::PlatformDestroyInstance() {
|
||||
void WebPluginDelegateImpl::Paint(WebKit::WebCanvas* canvas,
|
||||
const gfx::Rect& rect) {
|
||||
if (windowless_) {
|
||||
HDC hdc = skia::BeginPlatformPaint(canvas);
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(canvas);
|
||||
HDC hdc = scoped_platform_paint.GetPlatformSurface();
|
||||
WindowlessPaint(hdc, rect);
|
||||
skia::EndPlatformPaint(canvas);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1476,7 +1476,8 @@ bool PluginInstance::DrawJPEGToPlatformDC(
|
||||
return false;
|
||||
}
|
||||
|
||||
HDC dc = skia::BeginPlatformPaint(canvas);
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(canvas);
|
||||
HDC dc = scoped_platform_paint.GetPlatformSurface();
|
||||
// TODO(sanjeevr): This is a temporary hack. If we output a JPEG
|
||||
// to the EMF, the EnumEnhMetaFile call fails in the browser
|
||||
// process. The failure also happens if we output nothing here.
|
||||
@ -1495,7 +1496,6 @@ bool PluginInstance::DrawJPEGToPlatformDC(
|
||||
&compressed_image.front(),
|
||||
reinterpret_cast<const BITMAPINFO*>(&bmi),
|
||||
DIB_RGB_COLORS, SRCCOPY);
|
||||
skia::EndPlatformPaint(canvas);
|
||||
return true;
|
||||
}
|
||||
#endif // OS_WIN
|
||||
|
@ -106,7 +106,7 @@ void* PPB_ImageData_Impl::Map() {
|
||||
return NULL;
|
||||
}
|
||||
const SkBitmap& bitmap =
|
||||
mapped_canvas_->getTopPlatformDevice().accessBitmap(true);
|
||||
skia::GetTopDevice(*mapped_canvas_)->accessBitmap(true);
|
||||
|
||||
// Our platform bitmaps are set to opaque by default, which we don't want.
|
||||
const_cast<SkBitmap&>(bitmap).setIsOpaque(false);
|
||||
@ -129,7 +129,7 @@ int PPB_ImageData_Impl::GetSharedMemoryHandle(uint32* byte_count) const {
|
||||
const SkBitmap* PPB_ImageData_Impl::GetMappedBitmap() const {
|
||||
if (!mapped_canvas_.get())
|
||||
return NULL;
|
||||
return &mapped_canvas_->getTopPlatformDevice().accessBitmap(false);
|
||||
return &skia::GetTopDevice(*mapped_canvas_)->accessBitmap(false);
|
||||
}
|
||||
|
||||
void PPB_ImageData_Impl::Swap(PPB_ImageData_Impl* other) {
|
||||
|
@ -153,7 +153,7 @@ PP_Resource GetResourceImage(PP_Instance instance_id,
|
||||
|
||||
skia::PlatformCanvas* canvas = image_data->mapped_canvas();
|
||||
SkBitmap& ret_bitmap =
|
||||
const_cast<SkBitmap&>(canvas->getTopPlatformDevice().accessBitmap(true));
|
||||
const_cast<SkBitmap&>(skia::GetTopDevice(*canvas)->accessBitmap(true));
|
||||
if (!res_bitmap->copyTo(&ret_bitmap, SkBitmap::kARGB_8888_Config, NULL)) {
|
||||
return 0;
|
||||
}
|
||||
|
@ -178,8 +178,8 @@ bool PPB_Scrollbar_Impl::Paint(const PP_Rect* rect, PPB_ImageData_Impl* image) {
|
||||
|
||||
#if defined(OS_WIN)
|
||||
if (base::win::GetVersion() == base::win::VERSION_XP) {
|
||||
canvas->getTopPlatformDevice().makeOpaque(
|
||||
gfx_rect.x(), gfx_rect.y(), gfx_rect.width(), gfx_rect.height());
|
||||
skia::MakeOpaque(canvas, gfx_rect.x(), gfx_rect.y(),
|
||||
gfx_rect.width(), gfx_rect.height());
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -38,9 +38,10 @@ void PaintSadPlugin(WebKit::WebCanvas* webcanvas,
|
||||
// then copy that to the screen than to use the native APIs. The small speed
|
||||
// penalty is not important when drawing crashed plugins.
|
||||
#if WEBKIT_USING_SKIA
|
||||
gfx::NativeDrawingContext context = skia::BeginPlatformPaint(webcanvas);
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(webcanvas);
|
||||
gfx::NativeDrawingContext context =
|
||||
scoped_platform_paint.GetPlatformSurface();
|
||||
BlitCanvasToContext(context, plugin_rect, &canvas, gfx::Point(0, 0));
|
||||
skia::EndPlatformPaint(webcanvas);
|
||||
#elif WEBKIT_USING_CG
|
||||
BlitCanvasToContext(webcanvas, plugin_rect, &canvas, gfx::Point(0, 0));
|
||||
#endif
|
||||
|
@ -179,7 +179,7 @@ void WebWidgetHost::Paint() {
|
||||
|
||||
// make sure webkit draws into our bitmap, not the window
|
||||
CGContextRef bitmap_context =
|
||||
canvas_->getTopPlatformDevice().GetBitmapContext();
|
||||
skia::GetBitmapContext(skia::GetTopDevice(*canvas_));
|
||||
[NSGraphicsContext setCurrentContext:
|
||||
[NSGraphicsContext graphicsContextWithGraphicsPort:bitmap_context
|
||||
flipped:YES]];
|
||||
@ -221,8 +221,8 @@ void WebWidgetHost::Paint() {
|
||||
int bitmap_width = CGBitmapContextGetWidth(bitmap_context);
|
||||
CGRect bitmap_rect = { { 0, 0 },
|
||||
{ bitmap_width, bitmap_height } };
|
||||
canvas_->getTopPlatformDevice().DrawToContext(
|
||||
context, 0, client_rect.height() - bitmap_height, &bitmap_rect);
|
||||
skia::DrawToNativeContext(canvas_.get(), context, 0,
|
||||
client_rect.height() - bitmap_height, &bitmap_rect);
|
||||
|
||||
[view_ unlockFocus];
|
||||
}
|
||||
|
@ -246,7 +246,7 @@ void Control::draw() {
|
||||
// Indents for the the slider track.
|
||||
const int kSliderIndent = 2;
|
||||
|
||||
skia::BeginPlatformPaint(canvas_);
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(canvas_);
|
||||
switch (type_) {
|
||||
case kUnknown_Type:
|
||||
NOTREACHED();
|
||||
@ -391,7 +391,6 @@ void Control::draw() {
|
||||
}
|
||||
|
||||
markState();
|
||||
skia::EndPlatformPaint(canvas_);
|
||||
}
|
||||
|
||||
// Because rendering a text field is dependent on input
|
||||
@ -401,7 +400,7 @@ void Control::drawTextField(bool draw_edges, bool fill_content_area,
|
||||
SkColor color) {
|
||||
SkPaint paint;
|
||||
|
||||
skia::BeginPlatformPaint(canvas_);
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(canvas_);
|
||||
if (fill_content_area) {
|
||||
paint.setColor(color);
|
||||
paint.setStyle(SkPaint::kFill_Style);
|
||||
@ -414,14 +413,13 @@ void Control::drawTextField(bool draw_edges, bool fill_content_area,
|
||||
}
|
||||
|
||||
markState();
|
||||
skia::EndPlatformPaint(canvas_);
|
||||
}
|
||||
|
||||
void
|
||||
Control::drawProgressBar(const SkIRect& fill_rect) {
|
||||
SkPaint paint;
|
||||
|
||||
skia::BeginPlatformPaint(canvas_);
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(canvas_);
|
||||
paint.setColor(bg_color_);
|
||||
paint.setStyle(SkPaint::kFill_Style);
|
||||
canvas_->drawIRect(irect_, paint);
|
||||
@ -434,7 +432,6 @@ Control::drawProgressBar(const SkIRect& fill_rect) {
|
||||
canvas_->drawIRect(tofill, paint);
|
||||
|
||||
markState();
|
||||
skia::EndPlatformPaint(canvas_);
|
||||
}
|
||||
|
||||
} // namespace TestShellWebTheme
|
||||
|
@ -402,7 +402,8 @@ void WebWidgetHost::Paint() {
|
||||
gdk_window_begin_paint_rect(window, &grect);
|
||||
|
||||
// BitBlit to the gdk window.
|
||||
cairo_t* source_surface = canvas_->beginPlatformPaint();
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(canvas_.get());
|
||||
cairo_t* source_surface = scoped_platform_paint.GetPlatformSurface();
|
||||
cairo_t* cairo_drawable = gdk_cairo_create(window);
|
||||
cairo_set_source_surface(cairo_drawable, cairo_get_target(source_surface),
|
||||
0, 0);
|
||||
|
@ -251,13 +251,13 @@ void WebWidgetHost::Paint() {
|
||||
// Scroll the canvas if necessary
|
||||
scroll_rect_ = client_rect.Intersect(scroll_rect_);
|
||||
if (!scroll_rect_.IsEmpty()) {
|
||||
HDC hdc = canvas_->beginPlatformPaint();
|
||||
skia::ScopedPlatformPaint scoped_platform_paint(canvas_.get());
|
||||
HDC hdc = scoped_platform_paint.GetPlatformSurface();
|
||||
|
||||
RECT damaged_rect, r = scroll_rect_.ToRECT();
|
||||
ScrollDC(hdc, scroll_dx_, scroll_dy_, NULL, &r, NULL, &damaged_rect);
|
||||
|
||||
PaintRect(gfx::Rect(damaged_rect));
|
||||
canvas_->endPlatformPaint();
|
||||
}
|
||||
ResetScrollRect();
|
||||
|
||||
@ -279,10 +279,8 @@ void WebWidgetHost::Paint() {
|
||||
// Paint to the screen
|
||||
PAINTSTRUCT ps;
|
||||
BeginPaint(view_, &ps);
|
||||
canvas_->getTopPlatformDevice().drawToHDC(ps.hdc,
|
||||
ps.rcPaint.left,
|
||||
ps.rcPaint.top,
|
||||
&ps.rcPaint);
|
||||
skia::DrawToNativeContext(canvas_.get(), ps.hdc, ps.rcPaint.left,
|
||||
ps.rcPaint.top, &ps.rcPaint);
|
||||
EndPaint(view_, &ps);
|
||||
|
||||
// Draw children
|
||||
|
Reference in New Issue
Block a user