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