1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "skia/ext/vector_platform_device_skia.h" 6 7#include "skia/ext/bitmap_platform_device.h" 8#include "third_party/skia/include/core/SkClipStack.h" 9#include "third_party/skia/include/core/SkDraw.h" 10#include "third_party/skia/include/core/SkRect.h" 11#include "third_party/skia/include/core/SkRegion.h" 12#include "third_party/skia/include/core/SkScalar.h" 13 14namespace skia { 15 16static inline SkBitmap makeABitmap(int width, int height) { 17 SkBitmap bitmap; 18 bitmap.setConfig(SkBitmap::kNo_Config, width, height); 19 return bitmap; 20} 21 22VectorPlatformDeviceSkia::VectorPlatformDeviceSkia( 23 const SkISize& pageSize, 24 const SkISize& contentSize, 25 const SkMatrix& initialTransform) 26 : SkPDFDevice(pageSize, contentSize, initialTransform) { 27 SetPlatformDevice(this, this); 28} 29 30VectorPlatformDeviceSkia::~VectorPlatformDeviceSkia() { 31} 32 33bool VectorPlatformDeviceSkia::SupportsPlatformPaint() { 34 return false; 35} 36 37PlatformSurface VectorPlatformDeviceSkia::BeginPlatformPaint() { 38 // Even when drawing a vector representation of the page, we have to 39 // provide a raster surface for plugins to render into - they don't have 40 // a vector interface. Therefore we create a BitmapPlatformDevice here 41 // and return the context from it, then layer on the raster data as an 42 // image in EndPlatformPaint. 43 DCHECK(raster_surface_ == NULL); 44 raster_surface_ = skia::AdoptRef( 45 BitmapPlatformDevice::CreateAndClear(width(), height(), false)); 46 return raster_surface_->BeginPlatformPaint(); 47} 48 49void VectorPlatformDeviceSkia::EndPlatformPaint() { 50 DCHECK(raster_surface_ != NULL); 51 SkPaint paint; 52 // SkPDFDevice checks the passed SkDraw for an empty clip (only). Fake 53 // it out by setting a non-empty clip. 54 SkDraw draw; 55 SkRegion clip(SkIRect::MakeWH(width(), height())); 56 draw.fClip=&clip; 57 drawSprite(draw, raster_surface_->accessBitmap(false), 0, 0, paint); 58 // BitmapPlatformDevice matches begin and end calls. 59 raster_surface_->EndPlatformPaint(); 60 raster_surface_.clear(); 61} 62 63#if defined(OS_WIN) 64void VectorPlatformDeviceSkia::DrawToNativeContext(HDC dc, 65 int x, 66 int y, 67 const RECT* src_rect) { 68 SkASSERT(false); 69} 70#elif defined(OS_MACOSX) 71void VectorPlatformDeviceSkia::DrawToNativeContext(CGContext* context, int x, 72 int y, const CGRect* src_rect) { 73 SkASSERT(false); 74} 75 76CGContextRef VectorPlatformDeviceSkia::GetBitmapContext() { 77 SkASSERT(false); 78 return NULL; 79} 80#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_OPENBSD) 81void VectorPlatformDeviceSkia::DrawToNativeContext( 82 PlatformSurface surface, int x, int y, const PlatformRect* src_rect) { 83 // Should never be called on Linux. 84 SkASSERT(false); 85} 86#endif 87 88} // namespace skia 89