reed@google.com | 6997ebb | 2012-07-30 19:50:31 +0000 | [diff] [blame] | 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 | |
reed@google.com | f6627b7 | 2012-07-27 18:02:50 +0000 | [diff] [blame] | 8 | #include "SkBitmap.h" |
mike@reedtribe.org | 70e3590 | 2012-07-29 20:38:16 +0000 | [diff] [blame] | 9 | #include "SkCanvas.h" |
scroggo@google.com | 7def5e1 | 2013-05-31 14:00:10 +0000 | [diff] [blame] | 10 | #include "SkImagePriv.h" |
| 11 | #include "SkImage_Base.h" |
reed@google.com | f6627b7 | 2012-07-27 18:02:50 +0000 | [diff] [blame] | 12 | |
reed@google.com | fd875e8 | 2012-08-28 12:43:54 +0000 | [diff] [blame] | 13 | SK_DEFINE_INST_COUNT(SkImage) |
robertphillips@google.com | a22e211 | 2012-08-16 14:58:06 +0000 | [diff] [blame] | 14 | |
commit-bot@chromium.org | 6e3e422 | 2013-11-06 10:08:30 +0000 | [diff] [blame^] | 15 | bool operator==(const SkImageInfo& lhs, const SkImageInfo& rhs) { |
| 16 | return 0 == memcmp(&lhs, &rhs, sizeof(SkImageInfo)); |
| 17 | } |
| 18 | bool operator!=(const SkImageInfo& lhs, const SkImageInfo& rhs) { |
| 19 | return 0 != memcmp(&lhs, &rhs, sizeof(SkImageInfo)); |
| 20 | } |
| 21 | |
| 22 | |
scroggo@google.com | 7def5e1 | 2013-05-31 14:00:10 +0000 | [diff] [blame] | 23 | static SkImage_Base* as_IB(SkImage* image) { |
reed@google.com | f6627b7 | 2012-07-27 18:02:50 +0000 | [diff] [blame] | 24 | return static_cast<SkImage_Base*>(image); |
| 25 | } |
| 26 | |
scroggo@google.com | 7def5e1 | 2013-05-31 14:00:10 +0000 | [diff] [blame] | 27 | static const SkImage_Base* as_IB(const SkImage* image) { |
| 28 | return static_cast<const SkImage_Base*>(image); |
| 29 | } |
| 30 | |
reed@google.com | f6627b7 | 2012-07-27 18:02:50 +0000 | [diff] [blame] | 31 | uint32_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 | |
| 42 | void SkImage::draw(SkCanvas* canvas, SkScalar x, SkScalar y, |
| 43 | const SkPaint* paint) { |
scroggo@google.com | 7def5e1 | 2013-05-31 14:00:10 +0000 | [diff] [blame] | 44 | as_IB(this)->onDraw(canvas, x, y, paint); |
reed@google.com | f6627b7 | 2012-07-27 18:02:50 +0000 | [diff] [blame] | 45 | } |
junov@chromium.org | da90474 | 2013-05-01 22:38:16 +0000 | [diff] [blame] | 46 | |
commit-bot@chromium.org | dfec28d | 2013-07-23 15:52:16 +0000 | [diff] [blame] | 47 | void 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.org | da90474 | 2013-05-01 22:38:16 +0000 | [diff] [blame] | 52 | GrTexture* SkImage::getTexture() { |
scroggo@google.com | 7def5e1 | 2013-05-31 14:00:10 +0000 | [diff] [blame] | 53 | return as_IB(this)->onGetTexture(); |
| 54 | } |
| 55 | |
| 56 | SkData* 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.org | da90474 | 2013-05-01 22:38:16 +0000 | [diff] [blame] | 62 | } |