| Index: dm/DMSrcSink.cpp
|
| diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
|
| index 5ca66c50e207c4809f41396e907d354d4d78a17d..91f4e238c28b2aa96ec761b019f3816ffc8f171f 100644
|
| --- a/dm/DMSrcSink.cpp
|
| +++ b/dm/DMSrcSink.cpp
|
| @@ -7,6 +7,7 @@
|
| #include "SkMultiPictureDraw.h"
|
| #include "SkNullCanvas.h"
|
| #include "SkOSFile.h"
|
| +#include "SkPictureData.h"
|
| #include "SkPictureRecorder.h"
|
| #include "SkRandom.h"
|
| #include "SkSVGCanvas.h"
|
| @@ -177,8 +178,19 @@ Error SKPSrc::draw(SkCanvas* canvas) const {
|
| }
|
|
|
| SkISize SKPSrc::size() const {
|
| - // This may be unnecessarily large.
|
| - return kSKPViewport.roundOut().size();
|
| + SkAutoTDelete<SkStream> stream(SkStream::NewFromFile(fPath.c_str()));
|
| + if (!stream) {
|
| + return SkISize::Make(0,0);
|
| + }
|
| + SkPictInfo info;
|
| + if (!SkPicture::InternalOnly_StreamIsSKP(stream, &info)) {
|
| + return SkISize::Make(0,0);
|
| + }
|
| + SkRect viewport = kSKPViewport;
|
| + if (!viewport.intersect(info.fCullRect)) {
|
| + return SkISize::Make(0,0);
|
| + }
|
| + return viewport.roundOut().size();
|
| }
|
|
|
| Name SKPSrc::name() const { return SkOSPath::Basename(fPath.c_str()); }
|
|
|