aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/xps/SkXPSDevice.cpp
diff options
context:
space:
mode:
authorGravatar Hal Canary <halcanary@google.com>2017-02-01 17:04:44 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-02-02 20:22:19 +0000
commitb39b09e4477f5c51b27015a17c7ac699028c4d87 (patch)
tree57664d81035dff69359985373eb7b5a8aff7c67a /src/xps/SkXPSDevice.cpp
parent0e86725ba4f667056ff1ef65275165853a47303b (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.cpp46
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)