Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "skia/ext/vector_platform_device_skia.h" | 5 #include "skia/ext/vector_platform_device_skia.h" |
| 6 | 6 |
| 7 #include "skia/ext/bitmap_platform_device.h" | 7 #include "skia/ext/bitmap_platform_device.h" |
| 8 #include "skia/ext/platform_canvas.h" | |
| 8 #include "third_party/skia/include/core/SkClipStack.h" | 9 #include "third_party/skia/include/core/SkClipStack.h" |
| 9 #include "third_party/skia/include/core/SkDraw.h" | 10 #include "third_party/skia/include/core/SkDraw.h" |
| 10 #include "third_party/skia/include/core/SkRect.h" | 11 #include "third_party/skia/include/core/SkRect.h" |
| 11 #include "third_party/skia/include/core/SkRegion.h" | 12 #include "third_party/skia/include/core/SkRegion.h" |
| 12 #include "third_party/skia/include/core/SkScalar.h" | 13 #include "third_party/skia/include/core/SkScalar.h" |
| 13 | 14 |
| 14 namespace skia { | 15 namespace skia { |
| 15 | 16 |
| 16 static inline SkBitmap makeABitmap(int width, int height) { | 17 static inline SkBitmap makeABitmap(int width, int height) { |
| 17 SkBitmap bitmap; | 18 SkBitmap bitmap; |
| 18 bitmap.setConfig(SkBitmap::kNo_Config, width, height); | 19 bitmap.setConfig(SkBitmap::kNo_Config, width, height); |
| 19 return bitmap; | 20 return bitmap; |
| 20 } | 21 } |
| 21 | 22 |
| 22 VectorPlatformDeviceSkia::VectorPlatformDeviceSkia(SkPDFDevice* pdf_device) | 23 VectorPlatformDeviceSkia::VectorPlatformDeviceSkia(SkPDFDevice* pdf_device) |
| 23 : PlatformDevice(makeABitmap(pdf_device->width(), pdf_device->height())), | 24 : PlatformDevice(pdf_device) {//PlatformDevice(makeABitmap(pdf_device->width (), pdf_device->height())), |
| 24 pdf_device_(pdf_device) { | 25 //pdf_device_(pdf_device) { |
| 25 } | 26 } |
| 26 | 27 |
| 27 VectorPlatformDeviceSkia::~VectorPlatformDeviceSkia() { | 28 VectorPlatformDeviceSkia::~VectorPlatformDeviceSkia() { |
| 28 } | 29 } |
| 29 | 30 |
| 30 bool VectorPlatformDeviceSkia::IsNativeFontRenderingAllowed() { | 31 bool VectorPlatformDeviceSkia::IsNativeFontRenderingAllowed() { |
| 31 return false; | 32 return false; |
| 32 } | 33 } |
| 33 | 34 |
| 34 PlatformDevice::PlatformSurface VectorPlatformDeviceSkia::BeginPlatformPaint() { | 35 PlatformDevice::PlatformSurface VectorPlatformDeviceSkia::BeginPlatformPaint() { |
| 35 // Even when drawing a vector representation of the page, we have to | 36 // Even when drawing a vector representation of the page, we have to |
| 36 // provide a raster surface for plugins to render into - they don't have | 37 // provide a raster surface for plugins to render into - they don't have |
| 37 // a vector interface. Therefore we create a BitmapPlatformDevice here | 38 // a vector interface. Therefore we create a BitmapPlatformDevice here |
| 38 // and return the context from it, then layer on the raster data as an | 39 // and return the context from it, then layer on the raster data as an |
| 39 // image in EndPlatformPaint. | 40 // image in EndPlatformPaint. |
| 40 DCHECK(raster_surface_ == NULL); | 41 DCHECK(raster_surface_ == NULL); |
| 41 #if defined(OS_WIN) | 42 #if defined(OS_WIN) |
| 42 raster_surface_ = BitmapPlatformDevice::create(pdf_device_->width(), | 43 raster_surface_ = BitmapPlatformDevice::create(GetOwningDevice()->width(), |
| 43 pdf_device_->height(), | 44 GetOwningDevice()->height(), |
| 44 false, /* not opaque */ | 45 false, /* not opaque */ |
| 45 NULL); | 46 NULL); |
| 46 #elif defined(OS_POSIX) && !defined(OS_MACOSX) | 47 #elif defined(OS_POSIX) && !defined(OS_MACOSX) |
| 47 raster_surface_ = BitmapPlatformDevice::Create(pdf_device_->width(), | 48 raster_surface_ = BitmapPlatformDevice::Create(GetOwningDevice()->width(), |
| 48 pdf_device_->height(), | 49 GetOwningDevice()->height(), |
| 49 false /* not opaque */); | 50 false /* not opaque */); |
| 50 #endif | 51 #endif |
| 51 raster_surface_->unref(); // SkRefPtr and create both took a reference. | 52 raster_surface_->unref(); // SkRefPtr and create both took a reference. |
| 52 | 53 |
| 53 SkCanvas canvas(raster_surface_.get()); | 54 //SkCanvas canvas(raster_surface_.get()); |
| 54 return raster_surface_->BeginPlatformPaint(); | 55 raster_canvas_ = new SkCanvas(raster_surface_.get()); |
| 56 //return raster_surface_->BeginPlatformPaint(); | |
| 57 return skia::BeginPlatformPaint(raster_canvas_.get()); | |
| 55 } | 58 } |
| 56 | 59 |
| 57 void VectorPlatformDeviceSkia::EndPlatformPaint() { | 60 void VectorPlatformDeviceSkia::EndPlatformPaint() { |
| 58 DCHECK(raster_surface_ != NULL); | 61 DCHECK(raster_surface_ != NULL); |
| 62 | |
| 63 // BitmapPlatformDevice matches begin and end calls. | |
| 64 skia::EndPlatformPaint(raster_canvas_.get()); | |
|
Jeff Timanus
2011/08/12 23:59:22
This was an example of where BitmapPlatformDevice:
| |
| 59 SkPaint paint; | 65 SkPaint paint; |
| 60 // SkPDFDevice checks the passed SkDraw for an empty clip (only). Fake | 66 // SkPDFDevice checks the passed SkDraw for an empty clip (only). Fake |
| 61 // it out by setting a non-empty clip. | 67 // it out by setting a non-empty clip. |
| 62 SkDraw draw; | 68 SkDraw draw; |
| 63 SkRegion clip(SkIRect::MakeWH(pdf_device_->width(), pdf_device_->height())); | 69 SkRegion clip(SkIRect::MakeWH(GetOwningDevice()->width(), |
| 70 GetOwningDevice()->height())); | |
| 64 draw.fClip=&clip; | 71 draw.fClip=&clip; |
| 65 pdf_device_->drawSprite(draw, raster_surface_->accessBitmap(false), 0, 0, | 72 |
| 66 paint); | 73 SkCanvas pdf_canvas(GetOwningDevice()); |
|
vandebo (ex-Chrome)
2011/08/15 19:52:10
Will using two different canvases (with different
Jeff Timanus
2011/08/15 20:06:25
A third option is to make drawSprite a public entr
vandebo (ex-Chrome)
2011/08/15 20:13:56
I don't think either of these are particularly cle
| |
| 67 // BitmapPlatformDevice matches begin and end calls. | 74 pdf_canvas.drawSprite(raster_surface_->accessBitmap(false), 0, 0, &paint); |
| 68 raster_surface_->EndPlatformPaint(); | 75 #if 0 |
| 76 GetOwningDevice()->drawSprite( | |
| 77 draw, | |
| 78 raster_surface_->accessBitmap(false), 0, 0, paint); | |
| 79 #endif | |
| 80 //raster_surface_->EndPlatformPaint(); | |
| 81 raster_canvas_ = NULL; | |
| 69 raster_surface_ = NULL; | 82 raster_surface_ = NULL; |
| 70 } | 83 } |
| 71 | 84 |
| 85 #if 0 | |
| 72 uint32_t VectorPlatformDeviceSkia::getDeviceCapabilities() { | 86 uint32_t VectorPlatformDeviceSkia::getDeviceCapabilities() { |
| 73 return SkDevice::getDeviceCapabilities() | kVector_Capability; | 87 return SkDevice::getDeviceCapabilities() | kVector_Capability; |
| 74 } | 88 } |
| 75 | 89 |
| 76 int VectorPlatformDeviceSkia::width() const { | 90 int VectorPlatformDeviceSkia::width() const { |
| 77 return pdf_device_->width(); | 91 return pdf_device_->width(); |
| 78 } | 92 } |
| 79 | 93 |
| 80 int VectorPlatformDeviceSkia::height() const { | 94 int VectorPlatformDeviceSkia::height() const { |
| 81 return pdf_device_->height(); | 95 return pdf_device_->height(); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 183 SkDevice* real_device = device; | 197 SkDevice* real_device = device; |
| 184 if ((device->getDeviceCapabilities() & kVector_Capability)) { | 198 if ((device->getDeviceCapabilities() & kVector_Capability)) { |
| 185 // Assume that a vectorial device means a VectorPlatformDeviceSkia, we need | 199 // Assume that a vectorial device means a VectorPlatformDeviceSkia, we need |
| 186 // to unwrap the embedded SkPDFDevice. | 200 // to unwrap the embedded SkPDFDevice. |
| 187 VectorPlatformDeviceSkia* vector_device = | 201 VectorPlatformDeviceSkia* vector_device = |
| 188 static_cast<VectorPlatformDeviceSkia*>(device); | 202 static_cast<VectorPlatformDeviceSkia*>(device); |
| 189 real_device = vector_device->pdf_device_.get(); | 203 real_device = vector_device->pdf_device_.get(); |
| 190 } | 204 } |
| 191 pdf_device_->drawDevice(draw, real_device, x, y, paint); | 205 pdf_device_->drawDevice(draw, real_device, x, y, paint); |
| 192 } | 206 } |
| 207 #endif | |
| 193 | 208 |
| 194 #if defined(OS_WIN) | 209 #if defined(OS_WIN) |
| 195 void VectorPlatformDeviceSkia::DrawToNativeContext(HDC dc, | 210 void VectorPlatformDeviceSkia::DrawToNativeContext(HDC dc, |
| 196 int x, | 211 int x, |
| 197 int y, | 212 int y, |
| 198 const RECT* src_rect) { | 213 const RECT* src_rect) { |
| 199 SkASSERT(false); | 214 SkASSERT(false); |
| 200 } | 215 } |
| 201 #elif defined(OS_MACOSX) | 216 #elif defined(OS_MACOSX) |
| 202 void VectorPlatformDeviceSkia::DrawToNativeContext(CGContext* context, int x, | 217 void VectorPlatformDeviceSkia::DrawToNativeContext(CGContext* context, int x, |
| 203 int y, const CGRect* src_rect) { | 218 int y, const CGRect* src_rect) { |
| 204 SkASSERT(false); | 219 SkASSERT(false); |
| 205 } | 220 } |
| 206 | 221 |
| 207 CGContextRef VectorPlatformDeviceSkia::GetBitmapContext() { | 222 CGContextRef VectorPlatformDeviceSkia::GetBitmapContext() { |
| 208 SkASSERT(false); | 223 SkASSERT(false); |
| 209 return NULL; | 224 return NULL; |
| 210 } | 225 } |
| 211 | 226 |
| 212 #endif | 227 #endif |
| 213 | 228 |
| 229 #if 0 | |
| 214 SkDevice* VectorPlatformDeviceSkia::onCreateCompatibleDevice( | 230 SkDevice* VectorPlatformDeviceSkia::onCreateCompatibleDevice( |
| 215 SkBitmap::Config config, int width, int height, bool isOpaque, | 231 SkBitmap::Config config, int width, int height, bool isOpaque, |
| 216 Usage /*usage*/) { | 232 Usage /*usage*/) { |
| 217 SkAutoTUnref<SkDevice> dev(pdf_device_->createCompatibleDevice(config, width, | 233 SkAutoTUnref<SkDevice> dev(pdf_device_->createCompatibleDevice(config, width, |
| 218 height, | 234 height, |
| 219 isOpaque)); | 235 isOpaque)); |
| 220 return new VectorPlatformDeviceSkia(static_cast<SkPDFDevice*>(dev.get())); | 236 return new VectorPlatformDeviceSkia(static_cast<SkPDFDevice*>(dev.get())); |
| 221 } | 237 } |
| 238 #endif | |
| 222 | 239 |
| 223 } // namespace skia | 240 } // namespace skia |
| OLD | NEW |