blob: c8559e65338cd86615eb93ee04d6a5f365e9a13c [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
commit-bot@chromium.org6e3e4222013-11-06 10:08:30 +000015bool operator==(const SkImageInfo& lhs, const SkImageInfo& rhs) {
16 return 0 == memcmp(&lhs, &rhs, sizeof(SkImageInfo));
17}
18bool operator!=(const SkImageInfo& lhs, const SkImageInfo& rhs) {
19 return 0 != memcmp(&lhs, &rhs, sizeof(SkImageInfo));
20}
21
22
scroggo@google.com7def5e12013-05-31 14:00:10 +000023static SkImage_Base* as_IB(SkImage* image) {
reed@google.comf6627b72012-07-27 18:02:50 +000024 return static_cast<SkImage_Base*>(image);
25}
26
scroggo@google.com7def5e12013-05-31 14:00:10 +000027static const SkImage_Base* as_IB(const SkImage* image) {
28 return static_cast<const SkImage_Base*>(image);
29}
30
reed@google.comf6627b72012-07-27 18:02:50 +000031uint32_t SkImage::NextUniqueID() {
32 static int32_t gUniqueID;
33
34 // never return 0;
35 uint32_t id;
36 do {
37 id = sk_atomic_inc(&gUniqueID) + 1;
38 } while (0 == id);
39 return id;
40}
41
42void SkImage::draw(SkCanvas* canvas, SkScalar x, SkScalar y,
43 const SkPaint* paint) {
scroggo@google.com7def5e12013-05-31 14:00:10 +000044 as_IB(this)->onDraw(canvas, x, y, paint);
reed@google.comf6627b72012-07-27 18:02:50 +000045}
junov@chromium.orgda904742013-05-01 22:38:16 +000046
commit-bot@chromium.orgdfec28d2013-07-23 15:52:16 +000047void SkImage::draw(SkCanvas* canvas, const SkRect* src, const SkRect& dst,
48 const SkPaint* paint) {
49 as_IB(this)->onDrawRectToRect(canvas, src, dst, paint);
50}
51
junov@chromium.orgda904742013-05-01 22:38:16 +000052GrTexture* SkImage::getTexture() {
scroggo@google.com7def5e12013-05-31 14:00:10 +000053 return as_IB(this)->onGetTexture();
54}
55
56SkData* SkImage::encode(SkImageEncoder::Type type, int quality) const {
57 SkBitmap bm;
58 if (as_IB(this)->getROPixels(&bm)) {
59 return SkImageEncoder::EncodeData(bm, type, quality);
60 }
61 return NULL;
junov@chromium.orgda904742013-05-01 22:38:16 +000062}