Home | History | Annotate | Download | only in image
      1 /*
      2  * Copyright 2012 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "SkBitmap.h"
      9 #include "SkCanvas.h"
     10 #include "SkImagePriv.h"
     11 #include "SkImage_Base.h"
     12 
     13 SK_DEFINE_INST_COUNT(SkImage)
     14 
     15 static SkImage_Base* as_IB(SkImage* image) {
     16     return static_cast<SkImage_Base*>(image);
     17 }
     18 
     19 static const SkImage_Base* as_IB(const SkImage* image) {
     20     return static_cast<const SkImage_Base*>(image);
     21 }
     22 
     23 uint32_t SkImage::NextUniqueID() {
     24     static int32_t gUniqueID;
     25 
     26     // never return 0;
     27     uint32_t id;
     28     do {
     29         id = sk_atomic_inc(&gUniqueID) + 1;
     30     } while (0 == id);
     31     return id;
     32 }
     33 
     34 void SkImage::draw(SkCanvas* canvas, SkScalar x, SkScalar y,
     35                    const SkPaint* paint) {
     36     as_IB(this)->onDraw(canvas, x, y, paint);
     37 }
     38 
     39 void SkImage::draw(SkCanvas* canvas, const SkRect* src, const SkRect& dst,
     40                    const SkPaint* paint) {
     41     as_IB(this)->onDrawRectToRect(canvas, src, dst, paint);
     42 }
     43 
     44 GrTexture* SkImage::getTexture() {
     45     return as_IB(this)->onGetTexture();
     46 }
     47 
     48 SkData* SkImage::encode(SkImageEncoder::Type type, int quality) const {
     49     SkBitmap bm;
     50     if (as_IB(this)->getROPixels(&bm)) {
     51         return SkImageEncoder::EncodeData(bm, type, quality);
     52     }
     53     return NULL;
     54 }
     55