blob: 39fd93acc66e7e743145b342157b8267a0a9fcde [file] [log] [blame]
reed@google.com6997ebb2012-07-30 19:50:31 +00001/*
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
reed@google.comf6627b72012-07-27 18:02:50 +00008#include "SkBitmap.h"
mike@reedtribe.org70e35902012-07-29 20:38:16 +00009#include "SkCanvas.h"
scroggo@google.com7def5e12013-05-31 14:00:10 +000010#include "SkImagePriv.h"
11#include "SkImage_Base.h"
reed@google.comf6627b72012-07-27 18:02:50 +000012
reed@google.comfd875e82012-08-28 12:43:54 +000013SK_DEFINE_INST_COUNT(SkImage)
robertphillips@google.coma22e2112012-08-16 14:58:06 +000014
scroggo@google.com7def5e12013-05-31 14:00:10 +000015static SkImage_Base* as_IB(SkImage* image) {
reed@google.comf6627b72012-07-27 18:02:50 +000016 return static_cast<SkImage_Base*>(image);
17}
18
scroggo@google.com7def5e12013-05-31 14:00:10 +000019static const SkImage_Base* as_IB(const SkImage* image) {
20 return static_cast<const SkImage_Base*>(image);
21}
22
reed@google.comf6627b72012-07-27 18:02:50 +000023uint32_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) {
scroggo@google.com7def5e12013-05-31 14:00:10 +000036 as_IB(this)->onDraw(canvas, x, y, paint);
reed@google.comf6627b72012-07-27 18:02:50 +000037}
junov@chromium.orgda904742013-05-01 22:38:16 +000038
commit-bot@chromium.orgdfec28d2013-07-23 15:52:16 +000039void 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
junov@chromium.orgda904742013-05-01 22:38:16 +000044GrTexture* SkImage::getTexture() {
scroggo@google.com7def5e12013-05-31 14:00:10 +000045 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;
junov@chromium.orgda904742013-05-01 22:38:16 +000054}