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