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 13SK_DEFINE_INST_COUNT(SkImage) 14 15static SkImage_Base* as_IB(SkImage* image) { 16 return static_cast<SkImage_Base*>(image); 17} 18 19static const SkImage_Base* as_IB(const SkImage* image) { 20 return static_cast<const SkImage_Base*>(image); 21} 22 23uint32_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 34void SkImage::draw(SkCanvas* canvas, SkScalar x, SkScalar y, 35 const SkPaint* paint) { 36 as_IB(this)->onDraw(canvas, x, y, paint); 37} 38 39void 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 44GrTexture* SkImage::getTexture() { 45 return as_IB(this)->onGetTexture(); 46} 47 48SkData* 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