| Index: include/core/SkDevice.h
 | 
| ===================================================================
 | 
| --- include/core/SkDevice.h	(revision 10994)
 | 
| +++ include/core/SkDevice.h	(working copy)
 | 
| @@ -25,59 +25,23 @@
 | 
|  
 | 
|  class GrRenderTarget;
 | 
|  
 | 
| -class SK_API SkDevice : public SkRefCnt {
 | 
| +class SK_API SkBaseDevice : public SkRefCnt {
 | 
|  public:
 | 
| -    SK_DECLARE_INST_COUNT(SkDevice)
 | 
| +    SK_DECLARE_INST_COUNT(SkBaseDevice)
 | 
|  
 | 
|      /**
 | 
| -     *  Construct a new device with the specified bitmap as its backend. It is
 | 
| -     *  valid for the bitmap to have no pixels associated with it. In that case,
 | 
| -     *  any drawing to this device will have no effect.
 | 
| +     *  Construct a new device.
 | 
|      */
 | 
| -    SkDevice(const SkBitmap& bitmap);
 | 
| +    SkBaseDevice();
 | 
|  
 | 
|      /**
 | 
| -     *  Construct a new device with the specified bitmap as its backend. It is
 | 
| -     *  valid for the bitmap to have no pixels associated with it. In that case,
 | 
| -     *  any drawing to this device will have no effect.
 | 
| +     *  Construct a new device.
 | 
|      */
 | 
| -    SkDevice(const SkBitmap& bitmap, const SkDeviceProperties& deviceProperties);
 | 
| +    SkBaseDevice(const SkDeviceProperties& deviceProperties);
 | 
|  
 | 
| -    /**
 | 
| -     *  Create a new raster device and have the pixels be automatically
 | 
| -     *  allocated. The rowBytes of the device will be computed automatically
 | 
| -     *  based on the config and the width.
 | 
| -     *
 | 
| -     *  @param config   The desired config for the pixels. If the request cannot
 | 
| -     *                  be met, the closest matching support config will be used.
 | 
| -     *  @param width    width (in pixels) of the device
 | 
| -     *  @param height   height (in pixels) of the device
 | 
| -     *  @param isOpaque Set to true if it is known that all of the pixels will
 | 
| -     *                  be drawn to opaquely. Used as an accelerator when drawing
 | 
| -     *                  these pixels to another device.
 | 
| -     */
 | 
| -    SkDevice(SkBitmap::Config config, int width, int height, bool isOpaque = false);
 | 
| +    virtual ~SkBaseDevice();
 | 
|  
 | 
|      /**
 | 
| -     *  Create a new raster device and have the pixels be automatically
 | 
| -     *  allocated. The rowBytes of the device will be computed automatically
 | 
| -     *  based on the config and the width.
 | 
| -     *
 | 
| -     *  @param config   The desired config for the pixels. If the request cannot
 | 
| -     *                  be met, the closest matching support config will be used.
 | 
| -     *  @param width    width (in pixels) of the device
 | 
| -     *  @param height   height (in pixels) of the device
 | 
| -     *  @param isOpaque Set to true if it is known that all of the pixels will
 | 
| -     *                  be drawn to opaquely. Used as an accelerator when drawing
 | 
| -     *                  these pixels to another device.
 | 
| -     *  @param deviceProperties Properties which affect compositing.
 | 
| -     */
 | 
| -    SkDevice(SkBitmap::Config config, int width, int height, bool isOpaque,
 | 
| -             const SkDeviceProperties& deviceProperties);
 | 
| -
 | 
| -    virtual ~SkDevice();
 | 
| -
 | 
| -    /**
 | 
|       *  Creates a device that is of the same type as this device (e.g. SW-raster,
 | 
|       *  GPU, or PDF). The backing store for this device is created automatically
 | 
|       *  (e.g. offscreen pixels or FBO or whatever is appropriate).
 | 
| @@ -88,9 +52,9 @@
 | 
|       *                  draw into this device such that all of the pixels will
 | 
|       *                  be opaque.
 | 
|       */
 | 
| -    SkDevice* createCompatibleDevice(SkBitmap::Config config,
 | 
| -                                     int width, int height,
 | 
| -                                     bool isOpaque);
 | 
| +    SkBaseDevice* createCompatibleDevice(SkBitmap::Config config,
 | 
| +                                         int width, int height,
 | 
| +                                         bool isOpaque);
 | 
|  
 | 
|      SkMetaData& getMetaData();
 | 
|  
 | 
| @@ -99,14 +63,14 @@
 | 
|          kVector_Capability = 0x2,  //!< mask indicating a vector representation
 | 
|          kAll_Capabilities  = 0x3
 | 
|      };
 | 
| -    virtual uint32_t getDeviceCapabilities() { return 0; }
 | 
| +    virtual uint32_t getDeviceCapabilities() = 0;
 | 
|  
 | 
|      /** Return the width of the device (in pixels).
 | 
|      */
 | 
| -    virtual int width() const { return fBitmap.width(); }
 | 
| +    virtual int width() const = 0;
 | 
|      /** Return the height of the device (in pixels).
 | 
|      */
 | 
| -    virtual int height() const { return fBitmap.height(); }
 | 
| +    virtual int height() const = 0;
 | 
|  
 | 
|      /** Return the image properties of the device. */
 | 
|      virtual const SkDeviceProperties& getDeviceProperties() const {
 | 
| @@ -119,17 +83,17 @@
 | 
|       *  canvas. The root device will have its top-left at 0,0, but other devices
 | 
|       *  such as those associated with saveLayer may have a non-zero origin.
 | 
|       */
 | 
| -    void getGlobalBounds(SkIRect* bounds) const;
 | 
| +    virtual void getGlobalBounds(SkIRect* bounds) const = 0;
 | 
|  
 | 
|      /** Returns true if the device's bitmap's config treats every pixels as
 | 
|          implicitly opaque.
 | 
|      */
 | 
| -    bool isOpaque() const { return fBitmap.isOpaque(); }
 | 
| +    virtual bool isOpaque() const = 0;
 | 
| +    
 | 
| +    /** DEPRECATED - Return the bitmap config of the device's pixels
 | 
| +     */
 | 
| +    virtual SkBitmap::Config config() const = 0;
 | 
|  
 | 
| -    /** Return the bitmap config of the device's pixels
 | 
| -    */
 | 
| -    SkBitmap::Config config() const { return fBitmap.getConfig(); }
 | 
| -
 | 
|      /** Return the bitmap associated with this device. Call this each time you need
 | 
|          to access the bitmap, as it notifies the subclass to perform any flushing
 | 
|          etc. before you examine the pixels.
 | 
| @@ -154,12 +118,12 @@
 | 
|       *  not kARGB_8888_Config then this parameter is ignored.
 | 
|       */
 | 
|      virtual void writePixels(const SkBitmap& bitmap, int x, int y,
 | 
| -                             SkCanvas::Config8888 config8888 = SkCanvas::kNative_Premul_Config8888);
 | 
| +                             SkCanvas::Config8888 config8888 = SkCanvas::kNative_Premul_Config8888) = 0;
 | 
|  
 | 
|      /**
 | 
|       * Return the device's associated gpu render target, or NULL.
 | 
|       */
 | 
| -    virtual GrRenderTarget* accessRenderTarget() { return NULL; }
 | 
| +    virtual GrRenderTarget* accessRenderTarget() = 0;
 | 
|  
 | 
|  
 | 
|      /**
 | 
| @@ -171,7 +135,7 @@
 | 
|      /**
 | 
|       * onAttachToCanvas is invoked whenever a device is installed in a canvas
 | 
|       * (i.e., setDevice, saveLayer (for the new device created by the save),
 | 
| -     * and SkCanvas' SkDevice & SkBitmap -taking ctors). It allows the
 | 
| +     * and SkCanvas' SkBaseDevice & SkBitmap -taking ctors). It allows the
 | 
|       * devices to prepare for drawing (e.g., locking their pixels, etc.)
 | 
|       */
 | 
|      virtual void onAttachToCanvas(SkCanvas*) {
 | 
| @@ -213,9 +177,9 @@
 | 
|       *  textflags parameter (output) and return true. If the paint is fine as
 | 
|       *  is, then ignore the textflags parameter and return false.
 | 
|       *
 | 
| -     *  The baseclass SkDevice filters based on its depth and blitters.
 | 
| +     *  The baseclass SkBaseDevice filters based on its depth and blitters.
 | 
|       */
 | 
| -    virtual bool filterTextFlags(const SkPaint& paint, TextFlags*);
 | 
| +    virtual bool filterTextFlags(const SkPaint& paint, TextFlags*) = 0;
 | 
|  
 | 
|      /**
 | 
|       *
 | 
| @@ -234,12 +198,12 @@
 | 
|       *  passed in).
 | 
|       */
 | 
|       virtual void setMatrixClip(const SkMatrix&, const SkRegion&,
 | 
| -                                const SkClipStack&);
 | 
| +                                const SkClipStack&) {};
 | 
|  
 | 
|      /** Clears the entire device to the specified color (including alpha).
 | 
|       *  Ignores the clip.
 | 
|       */
 | 
| -    virtual void clear(SkColor color);
 | 
| +    virtual void clear(SkColor color) = 0;
 | 
|  
 | 
|      /**
 | 
|       * Deprecated name for clear.
 | 
| @@ -251,15 +215,15 @@
 | 
|       and are handling any looping from the paint, and any effects from the
 | 
|       DrawFilter.
 | 
|       */
 | 
| -    virtual void drawPaint(const SkDraw&, const SkPaint& paint);
 | 
| +    virtual void drawPaint(const SkDraw&, const SkPaint& paint) = 0;
 | 
|      virtual void drawPoints(const SkDraw&, SkCanvas::PointMode mode, size_t count,
 | 
| -                            const SkPoint[], const SkPaint& paint);
 | 
| +                            const SkPoint[], const SkPaint& paint) = 0;
 | 
|      virtual void drawRect(const SkDraw&, const SkRect& r,
 | 
| -                          const SkPaint& paint);
 | 
| +                          const SkPaint& paint) = 0;
 | 
|      virtual void drawOval(const SkDraw&, const SkRect& oval,
 | 
| -                          const SkPaint& paint);
 | 
| +                          const SkPaint& paint) = 0;
 | 
|      virtual void drawRRect(const SkDraw&, const SkRRect& rr,
 | 
| -                           const SkPaint& paint);
 | 
| +                           const SkPaint& paint) = 0;
 | 
|  
 | 
|      /**
 | 
|       *  If pathIsMutable, then the implementation is allowed to cast path to a
 | 
| @@ -275,11 +239,11 @@
 | 
|      virtual void drawPath(const SkDraw&, const SkPath& path,
 | 
|                            const SkPaint& paint,
 | 
|                            const SkMatrix* prePathMatrix = NULL,
 | 
| -                          bool pathIsMutable = false);
 | 
| +                          bool pathIsMutable = false) = 0;
 | 
|      virtual void drawBitmap(const SkDraw&, const SkBitmap& bitmap,
 | 
| -                            const SkMatrix& matrix, const SkPaint& paint);
 | 
| +                            const SkMatrix& matrix, const SkPaint& paint) = 0;
 | 
|      virtual void drawSprite(const SkDraw&, const SkBitmap& bitmap,
 | 
| -                            int x, int y, const SkPaint& paint);
 | 
| +                            int x, int y, const SkPaint& paint) = 0;
 | 
|  
 | 
|      /**
 | 
|       *  The default impl. will create a bitmap-shader from the bitmap,
 | 
| @@ -288,35 +252,35 @@
 | 
|      virtual void drawBitmapRect(const SkDraw&, const SkBitmap&,
 | 
|                                  const SkRect* srcOrNull, const SkRect& dst,
 | 
|                                  const SkPaint& paint,
 | 
| -                                SkCanvas::DrawBitmapRectFlags flags);
 | 
| +                                SkCanvas::DrawBitmapRectFlags flags) = 0;
 | 
|  
 | 
|      /**
 | 
|       *  Does not handle text decoration.
 | 
|       *  Decorations (underline and stike-thru) will be handled by SkCanvas.
 | 
|       */
 | 
|      virtual void drawText(const SkDraw&, const void* text, size_t len,
 | 
| -                          SkScalar x, SkScalar y, const SkPaint& paint);
 | 
| +                          SkScalar x, SkScalar y, const SkPaint& paint) = 0;
 | 
|      virtual void drawPosText(const SkDraw&, const void* text, size_t len,
 | 
|                               const SkScalar pos[], SkScalar constY,
 | 
| -                             int scalarsPerPos, const SkPaint& paint);
 | 
| +                             int scalarsPerPos, const SkPaint& paint) = 0;
 | 
|      virtual void drawTextOnPath(const SkDraw&, const void* text, size_t len,
 | 
|                                  const SkPath& path, const SkMatrix* matrix,
 | 
| -                                const SkPaint& paint);
 | 
| +                                const SkPaint& paint) = 0;
 | 
|  #ifdef SK_BUILD_FOR_ANDROID
 | 
|      virtual void drawPosTextOnPath(const SkDraw& draw, const void* text, size_t len,
 | 
|                                     const SkPoint pos[], const SkPaint& paint,
 | 
| -                                   const SkPath& path, const SkMatrix* matrix);
 | 
| +                                   const SkPath& path, const SkMatrix* matrix) = 0;
 | 
|  #endif
 | 
|      virtual void drawVertices(const SkDraw&, SkCanvas::VertexMode, int vertexCount,
 | 
|                                const SkPoint verts[], const SkPoint texs[],
 | 
|                                const SkColor colors[], SkXfermode* xmode,
 | 
|                                const uint16_t indices[], int indexCount,
 | 
| -                              const SkPaint& paint);
 | 
| +                              const SkPaint& paint) = 0;
 | 
|      /** The SkDevice passed will be an SkDevice which was returned by a call to
 | 
|          onCreateCompatibleDevice on this device with kSaveLayer_Usage.
 | 
|       */
 | 
| -    virtual void drawDevice(const SkDraw&, SkDevice*, int x, int y,
 | 
| -                            const SkPaint&);
 | 
| +    virtual void drawDevice(const SkDraw&, SkBaseDevice*, int x, int y,
 | 
| +                            const SkPaint&) = 0;
 | 
|  
 | 
|      /**
 | 
|       *  On success (returns true), copy the device pixels into the bitmap.
 | 
| @@ -352,21 +316,11 @@
 | 
|      ///////////////////////////////////////////////////////////////////////////
 | 
|  
 | 
|      /** Update as needed the pixel value in the bitmap, so that the caller can
 | 
| -        access the pixels directly. Note: only the pixels field should be
 | 
| -        altered. The config/width/height/rowbytes must remain unchanged.
 | 
| -        @param bitmap The device's bitmap
 | 
| -        @return Echo the bitmap parameter, or an alternate (shadow) bitmap
 | 
| -            maintained by the subclass.
 | 
| +        access the pixels directly. 
 | 
| +        @return The device contents as a bitmap
 | 
|      */
 | 
| -    virtual const SkBitmap& onAccessBitmap(SkBitmap*);
 | 
| +    virtual const SkBitmap& onAccessBitmap() = 0;
 | 
|  
 | 
| -    SkPixelRef* getPixelRef() const { return fBitmap.pixelRef(); }
 | 
| -    // just for subclasses, to assign a custom pixelref
 | 
| -    SkPixelRef* setPixelRef(SkPixelRef* pr, size_t offset) {
 | 
| -        fBitmap.setPixelRef(pr, offset);
 | 
| -        return pr;
 | 
| -    }
 | 
| -
 | 
|      /**
 | 
|       * Implements readPixels API. The caller will ensure that:
 | 
|       *  1. bitmap has pixel config kARGB_8888_Config.
 | 
| @@ -376,13 +330,13 @@
 | 
|       */
 | 
|      virtual bool onReadPixels(const SkBitmap& bitmap,
 | 
|                                int x, int y,
 | 
| -                              SkCanvas::Config8888 config8888);
 | 
| +                              SkCanvas::Config8888 config8888) = 0;
 | 
|  
 | 
|      /** Called when this device is installed into a Canvas. Balanaced by a call
 | 
|          to unlockPixels() when the device is removed from a Canvas.
 | 
|      */
 | 
| -    virtual void lockPixels();
 | 
| -    virtual void unlockPixels();
 | 
| +    virtual void lockPixels() = 0;
 | 
| +    virtual void unlockPixels() = 0;
 | 
|  
 | 
|      /**
 | 
|       *  Returns true if the device allows processing of this imagefilter. If
 | 
| @@ -390,7 +344,7 @@
 | 
|       *  some subclasses that do not support pixel manipulations after drawing
 | 
|       *  has occurred (e.g. printing). The default implementation returns true.
 | 
|       */
 | 
| -    virtual bool allowImageFilter(SkImageFilter*);
 | 
| +    virtual bool allowImageFilter(SkImageFilter*) = 0;
 | 
|  
 | 
|      /**
 | 
|       *  Override and return true for filters that the device can handle
 | 
| @@ -399,7 +353,7 @@
 | 
|       *  Returning false means the SkCanvas will have apply the filter itself,
 | 
|       *  and just pass the resulting image to the device.
 | 
|       */
 | 
| -    virtual bool canHandleImageFilter(SkImageFilter*);
 | 
| +    virtual bool canHandleImageFilter(SkImageFilter*) = 0;
 | 
|  
 | 
|      /**
 | 
|       *  Related (but not required) to canHandleImageFilter, this method returns
 | 
| @@ -409,7 +363,7 @@
 | 
|       *  it just returns false and leaves result and offset unchanged.
 | 
|       */
 | 
|      virtual bool filterImage(SkImageFilter*, const SkBitmap&, const SkMatrix&,
 | 
| -                             SkBitmap* result, SkIPoint* offset);
 | 
| +                             SkBitmap* result, SkIPoint* offset) = 0;
 | 
|  
 | 
|      // This is equal kBGRA_Premul_Config8888 or kRGBA_Premul_Config8888 if
 | 
|      // either is identical to kNative_Premul_Config8888. Otherwise, -1.
 | 
| @@ -424,31 +378,31 @@
 | 
|      friend class SkDeviceImageFilterProxy;
 | 
|  
 | 
|      friend class SkSurface_Raster;
 | 
| +
 | 
|      // used to change the backend's pixels (and possibly config/rowbytes)
 | 
|      // but cannot change the width/height, so there should be no change to
 | 
|      // any clip information.
 | 
| -    void replaceBitmapBackendForRasterSurface(const SkBitmap&);
 | 
| +    virtual void replaceBitmapBackendForRasterSurface(const SkBitmap&) = 0;
 | 
|  
 | 
|      // just called by SkCanvas when built as a layer
 | 
|      void setOrigin(int x, int y) { fOrigin.set(x, y); }
 | 
|      // just called by SkCanvas for saveLayer
 | 
| -    SkDevice* createCompatibleDeviceForSaveLayer(SkBitmap::Config config,
 | 
| -                                                 int width, int height,
 | 
| -                                                 bool isOpaque);
 | 
| +    SkBaseDevice* createCompatibleDeviceForSaveLayer(SkBitmap::Config config,
 | 
| +                                                     int width, int height,
 | 
| +                                                     bool isOpaque);
 | 
|  
 | 
|      /**
 | 
|       * Subclasses should override this to implement createCompatibleDevice.
 | 
|       */
 | 
| -    virtual SkDevice* onCreateCompatibleDevice(SkBitmap::Config config,
 | 
| -                                               int width, int height,
 | 
| -                                               bool isOpaque,
 | 
| -                                               Usage usage);
 | 
| +    virtual SkBaseDevice* onCreateCompatibleDevice(SkBitmap::Config config,
 | 
| +                                                   int width, int height,
 | 
| +                                                   bool isOpaque,
 | 
| +                                                   Usage usage) = 0;
 | 
|  
 | 
|      /** Causes any deferred drawing to the device to be completed.
 | 
|       */
 | 
| -    virtual void flush() {}
 | 
| +    virtual void flush() = 0;
 | 
|  
 | 
| -    SkBitmap    fBitmap;
 | 
|      SkIPoint    fOrigin;
 | 
|      SkMetaData* fMetaData;
 | 
|      /**
 | 
| @@ -466,6 +420,4 @@
 | 
|      typedef SkRefCnt INHERITED;
 | 
|  };
 | 
|  
 | 
| -typedef SkDevice SkBaseDevice;
 | 
| -
 | 
|  #endif
 | 
| 
 |