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