diff options
author | reed <reed@google.com> | 2015-03-13 08:46:12 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-13 08:46:12 -0700 |
commit | f7076a13e2d4269903b34ef2780e1c84723e4477 (patch) | |
tree | 0341a3d6020bf1d0153f9a882d74080d42435e90 /include/core | |
parent | fd45079314b739979492601fc7a242aff24c58a3 (diff) |
Revert of Revert of Change device creation to see the (optional) layer-paint (patchset #1 id:1 of https://codereview.chromium.org/1008863002/)
Reason for revert:
guard in chrome has landed
Original issue's description:
> Revert of Change device creation to see the (optional) layer-paint (patchset #9 id:160001 of https://codereview.chromium.org/988413003/)
>
> Reason for revert:
> need to have chrome opt-in for the older API before this can land (in chrome)
>
> Original issue's description:
> > Change device creation to see the (optional) layer-paint
> >
> > Motivation:
> >
> > PDFDevice currently relies on 1) being told that the layer's paint has an imagefilter, and in the case, it creates a rasterdevice. It then relies on (2) canvas itself sniffing the layer's paint and offering to apply-the-imagefilter to call drawSprite instead of drawDevice.
> >
> > This subtle interchange is fragile, and also does not support other unsupported PDF features like colorfilters. This CL is a step toward making this use-raster-instead-of-native approach to layers more completely in the subclass' hands.
> >
> > Committed: https://skia.googlesource.com/skia/+/1182d9a96b80bd12183ee7c81325a979a51ee0c0
>
> TBR=halcanary@google.com,senorblanco@google.com,robertphillips@google.com
> NOPRESUBMIT=true
> NOTREECHECKS=true
> NOTRY=true
>
> Committed: https://skia.googlesource.com/skia/+/0e040f7da2fdfeb49aa60d24117306e3b1e6ea90
TBR=halcanary@google.com,senorblanco@google.com,robertphillips@google.com
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
Review URL: https://codereview.chromium.org/1006923002
Diffstat (limited to 'include/core')
-rw-r--r-- | include/core/SkBitmapDevice.h | 8 | ||||
-rw-r--r-- | include/core/SkCanvas.h | 3 | ||||
-rw-r--r-- | include/core/SkDevice.h | 48 |
3 files changed, 30 insertions, 29 deletions
diff --git a/include/core/SkBitmapDevice.h b/include/core/SkBitmapDevice.h index 8ca6a523be..caff6857da 100644 --- a/include/core/SkBitmapDevice.h +++ b/include/core/SkBitmapDevice.h @@ -98,11 +98,7 @@ protected: const SkColor colors[], SkXfermode* xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) SK_OVERRIDE; - /** The SkBaseDevice passed will be an SkBaseDevice which was returned by a call to - onCreateCompatibleDevice on this device with kSaveLayer_Usage. - */ - virtual void drawDevice(const SkDraw&, SkBaseDevice*, int x, int y, - const SkPaint&) SK_OVERRIDE; + virtual void drawDevice(const SkDraw&, SkBaseDevice*, int x, int y, const SkPaint&) SK_OVERRIDE; /////////////////////////////////////////////////////////////////////////// @@ -145,7 +141,7 @@ private: // any clip information. void replaceBitmapBackendForRasterSurface(const SkBitmap&) SK_OVERRIDE; - SkBaseDevice* onCreateCompatibleDevice(const CreateInfo&) SK_OVERRIDE; + SkBaseDevice* onCreateDevice(const CreateInfo&, const SkPaint*) SK_OVERRIDE; SkSurface* newSurface(const SkImageInfo&, const SkSurfaceProps&) SK_OVERRIDE; const void* peekPixels(SkImageInfo*, size_t* rowBytes) SK_OVERRIDE; diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h index 74bf909c21..836f7b1115 100644 --- a/include/core/SkCanvas.h +++ b/include/core/SkCanvas.h @@ -1321,8 +1321,7 @@ private: void internalDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, const SkRect& dst, const SkPaint* paint); void internalDrawPaint(const SkPaint& paint); - void internalSaveLayer(const SkRect* bounds, const SkPaint* paint, - SaveFlags, bool justForImageFilter, SaveLayerStrategy strategy); + void internalSaveLayer(const SkRect* bounds, const SkPaint*, SaveFlags, SaveLayerStrategy); void internalDrawDevice(SkBaseDevice*, int x, int y, const SkPaint*); // shared by save() and saveLayer() diff --git a/include/core/SkDevice.h b/include/core/SkDevice.h index c7c5c30b3a..684a08404c 100644 --- a/include/core/SkDevice.h +++ b/include/core/SkDevice.h @@ -125,10 +125,9 @@ public: }; protected: - enum Usage { - kGeneral_Usage, - kSaveLayer_Usage, // <! internal use only - kImageFilter_Usage // <! internal use only + enum TileUsage { + kPossible_TileUsage, //!< the created device may be drawn tiled + kNever_TileUsage, //!< the created device will never be drawn tiled }; struct TextFlags { @@ -231,7 +230,7 @@ protected: virtual void drawPatch(const SkDraw&, const SkPoint cubics[12], const SkColor colors[4], const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint); /** The SkDevice passed will be an SkDevice which was returned by a call to - onCreateCompatibleDevice on this device with kSaveLayer_Usage. + onCreateDevice on this device with kNeverTile_TileExpectation. */ virtual void drawDevice(const SkDraw&, SkBaseDevice*, int x, int y, const SkPaint&) = 0; @@ -255,14 +254,6 @@ protected: virtual void unlockPixels() {} /** - * Returns true if the device allows processing of this imagefilter. If - * false is returned, then the filter is ignored. This may happen for - * some subclasses that do not support pixel manipulations after drawing - * has occurred (e.g. printing). The default implementation returns true. - */ - virtual bool allowImageFilter(const SkImageFilter*) { return true; } - - /** * Override and return true for filters that the device can handle * intrinsically. Doing so means that SkCanvas will pass-through this * filter to drawSprite and drawDevice (and potentially filterImage). @@ -336,24 +327,39 @@ protected: const SkPaint*); struct CreateInfo { - static SkPixelGeometry AdjustGeometry(const SkImageInfo&, Usage, SkPixelGeometry geo); + static SkPixelGeometry AdjustGeometry(const SkImageInfo&, TileUsage, SkPixelGeometry); - // The construct may change the pixel geometry based on usage as needed. - CreateInfo(const SkImageInfo& info, Usage usage, SkPixelGeometry geo) + // The constructor may change the pixel geometry based on other parameters. + CreateInfo(const SkImageInfo& info, TileUsage tileUsage, SkPixelGeometry geo) : fInfo(info) - , fUsage(usage) - , fPixelGeometry(AdjustGeometry(info, usage, geo)) + , fTileUsage(tileUsage) + , fPixelGeometry(AdjustGeometry(info, tileUsage, geo)) {} - const SkImageInfo fInfo; - const Usage fUsage; - const SkPixelGeometry fPixelGeometry; + const SkImageInfo fInfo; + const TileUsage fTileUsage; + const SkPixelGeometry fPixelGeometry; }; +#ifdef SK_SUPPORT_LEGACY_ONCREATECOMPATIBLEDEVICE + // legacy method name -- please override onCreateDevice instead virtual SkBaseDevice* onCreateCompatibleDevice(const CreateInfo&) { return NULL; } + virtual SkBaseDevice* onCreateDevice(const CreateInfo& cinfo, const SkPaint* layerPaint) { + return this->onCreateCompatibleDevice(cinfo); + } +#else + /** + * Create a new device based on CreateInfo. If the paint is not null, then it represents a + * preview of how the new device will be composed with its creator device (this). + */ + virtual SkBaseDevice* onCreateDevice(const CreateInfo&, const SkPaint*) { + return NULL; + } +#endif + virtual void initForRootLayer(SkPixelGeometry geo); private: |