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 static SkImage_Base* as_IB(SkImage* image) { 14 return static_cast<SkImage_Base*>(image); 15 } 16 17 static const SkImage_Base* as_IB(const SkImage* image) { 18 return static_cast<const SkImage_Base*>(image); 19 } 20 21 uint32_t SkImage::NextUniqueID() { 22 static int32_t gUniqueID; 23 24 // never return 0; 25 uint32_t id; 26 do { 27 id = sk_atomic_inc(&gUniqueID) + 1; 28 } while (0 == id); 29 return id; 30 } 31 32 void SkImage::draw(SkCanvas* canvas, SkScalar x, SkScalar y, 33 const SkPaint* paint) { 34 as_IB(this)->onDraw(canvas, x, y, paint); 35 } 36 37 void SkImage::draw(SkCanvas* canvas, const SkRect* src, const SkRect& dst, 38 const SkPaint* paint) { 39 as_IB(this)->onDrawRectToRect(canvas, src, dst, paint); 40 } 41 42 GrTexture* SkImage::getTexture() { 43 return as_IB(this)->onGetTexture(); 44 } 45 46 SkData* SkImage::encode(SkImageEncoder::Type type, int quality) const { 47 SkBitmap bm; 48 if (as_IB(this)->getROPixels(&bm)) { 49 return SkImageEncoder::EncodeData(bm, type, quality); 50 } 51 return NULL; 52 } 53