SkImage.cpp revision dfec28d4a9e05d1d525f377b380b4df3c5e07c7b
16997ebbe5cf06c938cc893e1d0217dc4048edf82reed@google.com/* 26997ebbe5cf06c938cc893e1d0217dc4048edf82reed@google.com * Copyright 2012 Google Inc. 36997ebbe5cf06c938cc893e1d0217dc4048edf82reed@google.com * 46997ebbe5cf06c938cc893e1d0217dc4048edf82reed@google.com * Use of this source code is governed by a BSD-style license that can be 56997ebbe5cf06c938cc893e1d0217dc4048edf82reed@google.com * found in the LICENSE file. 66997ebbe5cf06c938cc893e1d0217dc4048edf82reed@google.com */ 76997ebbe5cf06c938cc893e1d0217dc4048edf82reed@google.com 8f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.com#include "SkBitmap.h" 970e359055240d0de93da4ba71bf5833164fb394cmike@reedtribe.org#include "SkCanvas.h" 107def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.com#include "SkImagePriv.h" 117def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.com#include "SkImage_Base.h" 12f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.com 13fd875e80142c5c494ab95f0885b78e8a8ffc8716reed@google.comSK_DEFINE_INST_COUNT(SkImage) 14a22e2117e44efa4298dd0eb6df304a8166c8e9c3robertphillips@google.com 157def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.comstatic SkImage_Base* as_IB(SkImage* image) { 16f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.com return static_cast<SkImage_Base*>(image); 17f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.com} 18f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.com 197def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.comstatic const SkImage_Base* as_IB(const SkImage* image) { 207def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.com return static_cast<const SkImage_Base*>(image); 217def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.com} 227def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.com 23f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.comuint32_t SkImage::NextUniqueID() { 24f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.com static int32_t gUniqueID; 25f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.com 26f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.com // never return 0; 27f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.com uint32_t id; 28f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.com do { 29f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.com id = sk_atomic_inc(&gUniqueID) + 1; 30f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.com } while (0 == id); 31f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.com return id; 32f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.com} 33f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.com 34f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.comvoid SkImage::draw(SkCanvas* canvas, SkScalar x, SkScalar y, 35f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.com const SkPaint* paint) { 367def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.com as_IB(this)->onDraw(canvas, x, y, paint); 37f6627b78f933b77b358ac0791c520f99b0e79fcareed@google.com} 38da90474b5fcc019fb0971d12360bd05213ad4dc8junov@chromium.org 39dfec28d4a9e05d1d525f377b380b4df3c5e07c7bcommit-bot@chromium.orgvoid SkImage::draw(SkCanvas* canvas, const SkRect* src, const SkRect& dst, 40dfec28d4a9e05d1d525f377b380b4df3c5e07c7bcommit-bot@chromium.org const SkPaint* paint) { 41dfec28d4a9e05d1d525f377b380b4df3c5e07c7bcommit-bot@chromium.org as_IB(this)->onDrawRectToRect(canvas, src, dst, paint); 42dfec28d4a9e05d1d525f377b380b4df3c5e07c7bcommit-bot@chromium.org} 43dfec28d4a9e05d1d525f377b380b4df3c5e07c7bcommit-bot@chromium.org 44da90474b5fcc019fb0971d12360bd05213ad4dc8junov@chromium.orgGrTexture* SkImage::getTexture() { 457def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.com return as_IB(this)->onGetTexture(); 467def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.com} 477def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.com 487def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.comSkData* SkImage::encode(SkImageEncoder::Type type, int quality) const { 497def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.com SkBitmap bm; 507def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.com if (as_IB(this)->getROPixels(&bm)) { 517def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.com return SkImageEncoder::EncodeData(bm, type, quality); 527def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.com } 537def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.com return NULL; 54da90474b5fcc019fb0971d12360bd05213ad4dc8junov@chromium.org} 55