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