diff options
author | Hal Canary <halcanary@google.com> | 2017-02-01 17:04:44 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-02-02 20:22:19 +0000 |
commit | b39b09e4477f5c51b27015a17c7ac699028c4d87 (patch) | |
tree | 57664d81035dff69359985373eb7b5a8aff7c67a /src/xps/SkXPSDevice.cpp | |
parent | 0e86725ba4f667056ff1ef65275165853a47303b (diff) |
SkXPSDevice inherits from SkBaseDevice
Change-Id: I81ed36da33821df36d11806a6349a2ede61c6f73
Reviewed-on: https://skia-review.googlesource.com/7942
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Hal Canary <halcanary@google.com>
Diffstat (limited to 'src/xps/SkXPSDevice.cpp')
-rw-r--r-- | src/xps/SkXPSDevice.cpp | 46 |
1 files changed, 34 insertions, 12 deletions
diff --git a/src/xps/SkXPSDevice.cpp b/src/xps/SkXPSDevice.cpp index 37874337e0..aa6ec7cead 100644 --- a/src/xps/SkXPSDevice.cpp +++ b/src/xps/SkXPSDevice.cpp @@ -30,9 +30,10 @@ #include "SkGeometry.h" #include "SkGlyphCache.h" #include "SkHRESULT.h" +#include "SkIStream.h" #include "SkImage.h" #include "SkImageEncoder.h" -#include "SkIStream.h" +#include "SkImagePriv.h" #include "SkMaskFilter.h" #include "SkPaint.h" #include "SkPathEffect.h" @@ -110,20 +111,16 @@ HRESULT SkXPSDevice::createId(wchar_t* buffer, size_t bufferSize, wchar_t sep) { return S_OK; } -static SkBitmap make_fake_bitmap(int width, int height) { - SkBitmap bitmap; - bitmap.setInfo(SkImageInfo::MakeUnknown(width, height)); - return bitmap; -} - // TODO: should inherit from SkBaseDevice instead of SkBitmapDevice... -SkXPSDevice::SkXPSDevice() - : INHERITED(make_fake_bitmap(10000, 10000), SkSurfaceProps(0, kUnknown_SkPixelGeometry)) +SkXPSDevice::SkXPSDevice(SkISize s) + : INHERITED(SkImageInfo::MakeUnknown(s.width(), s.height()), + SkSurfaceProps(0, kUnknown_SkPixelGeometry)) , fCurrentPage(0) { } -SkXPSDevice::SkXPSDevice(IXpsOMObjectFactory* xpsFactory) - : INHERITED(make_fake_bitmap(10000, 10000), SkSurfaceProps(0, kUnknown_SkPixelGeometry)) +SkXPSDevice::SkXPSDevice(SkISize s, IXpsOMObjectFactory* xpsFactory) + : INHERITED(SkImageInfo::MakeUnknown(s.width(), s.height()), + SkSurfaceProps(0, kUnknown_SkPixelGeometry)) , fCurrentPage(0) { HRVM(CoCreateInstance( @@ -2281,7 +2278,32 @@ SkBaseDevice* SkXPSDevice::onCreateDevice(const CreateInfo& info, const SkPaint* //return dev; } #endif - return new SkXPSDevice(this->fXpsFactory.get()); + return new SkXPSDevice(info.fInfo.dimensions(), this->fXpsFactory.get()); } +void SkXPSDevice::drawOval(const SkDraw& d, const SkRect& o, const SkPaint& p) { + SkPath path; + path.addOval(o); + this->drawPath(d, path, p, nullptr, true); +} + +void SkXPSDevice::drawBitmapRect(const SkDraw& draw, + const SkBitmap& bitmap, + const SkRect* src, + const SkRect& dst, + const SkPaint& paint, + SkCanvas::SrcRectConstraint constraint) { + SkRect srcBounds = src ? *src : SkRect::Make(bitmap.bounds()); + SkMatrix matrix = SkMatrix::MakeRectToRect(srcBounds, dst, SkMatrix::kFill_ScaleToFit); + + auto bitmapShader = SkMakeBitmapShader(bitmap, SkShader::kClamp_TileMode, + SkShader::kClamp_TileMode, &matrix, + kNever_SkCopyPixelsMode, nullptr); + SkASSERT(bitmapShader); + if (!bitmapShader) { return; } + SkPaint paintWithShader(paint); + paintWithShader.setStyle(SkPaint::kFill_Style); + paintWithShader.setShader(std::move(bitmapShader)); + this->drawRect(draw, dst, paintWithShader); +} #endif//defined(SK_BUILD_FOR_WIN32) |