1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPictureFlat.h"
98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
10ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org#include "SkChecksum.h"
118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkColorFilter.h"
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawLooper.h"
138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkMaskFilter.h"
148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkRasterizer.h"
158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkShader.h"
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkTypeface.h"
178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkXfermode.h"
188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com///////////////////////////////////////////////////////////////////////////////
208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
2121830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comSkTypefacePlayback::SkTypefacePlayback() : fCount(0), fArray(NULL) {}
228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
2321830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comSkTypefacePlayback::~SkTypefacePlayback() {
248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    this->reset(NULL);
258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
2721830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comvoid SkTypefacePlayback::reset(const SkRefCntSet* rec) {
288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    for (int i = 0; i < fCount; i++) {
298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        SkASSERT(fArray[i]);
308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        fArray[i]->unref();
318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkDELETE_ARRAY(fArray);
33fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
341554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com    if (rec!= NULL && rec->count() > 0) {
358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        fCount = rec->count();
368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        fArray = SkNEW_ARRAY(SkRefCnt*, fCount);
37e9e08cc7b29f97ee9e823e68c3daf0f55c84b21amike@reedtribe.org        rec->copyToArray(fArray);
388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        for (int i = 0; i < fCount; i++) {
398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            fArray[i]->ref();
408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        }
418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    } else {
428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        fCount = 0;
438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        fArray = NULL;
448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
4721830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comvoid SkTypefacePlayback::setCount(int count) {
488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    this->reset(NULL);
49fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    fCount = count;
518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    fArray = SkNEW_ARRAY(SkRefCnt*, count);
524516f4786f5dda1b86a8f825b9e8e910d9c2363creed@android.com    sk_bzero(fArray, count * sizeof(SkRefCnt*));
538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
5521830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comSkRefCnt* SkTypefacePlayback::set(int index, SkRefCnt* obj) {
568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkASSERT((unsigned)index < (unsigned)fCount);
578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkRefCnt_SafeAssign(fArray[index], obj);
588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    return obj;
598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
61d2700eec7eb2e26beb206b88a0f0b6f3c5f49118djsollen@google.com///////////////////////////////////////////////////////////////////////////////
62d2700eec7eb2e26beb206b88a0f0b6f3c5f49118djsollen@google.com
63a2bd2d12ad9504583e9311404fcd82b40df49d30commit-bot@chromium.orgSkFlatController::SkFlatController(uint32_t writeBufferFlags)
6421830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com: fBitmapHeap(NULL)
651554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com, fTypefaceSet(NULL)
661554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com, fTypefacePlayback(NULL)
67664fab1b3454faea01cbae2f1dc2777c5afb9998scroggo@google.com, fFactorySet(NULL)
68a2bd2d12ad9504583e9311404fcd82b40df49d30commit-bot@chromium.org, fWriteBufferFlags(writeBufferFlags) {}
691554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com
701554360a9511d996e1618d19c163c810ef3f128cscroggo@google.comSkFlatController::~SkFlatController() {
7121830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com    SkSafeUnref(fBitmapHeap);
721554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com    SkSafeUnref(fTypefaceSet);
731554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com    SkSafeUnref(fFactorySet);
741554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com}
751554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com
7621830d90096d2dccc4168d99a427e78035ce942adjsollen@google.comvoid SkFlatController::setBitmapHeap(SkBitmapHeap* heap) {
7721830d90096d2dccc4168d99a427e78035ce942adjsollen@google.com    SkRefCnt_SafeAssign(fBitmapHeap, heap);
781554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com}
791554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com
801554360a9511d996e1618d19c163c810ef3f128cscroggo@google.comvoid SkFlatController::setTypefaceSet(SkRefCntSet *set) {
811554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com    SkRefCnt_SafeAssign(fTypefaceSet, set);
821554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com}
831554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com
841554360a9511d996e1618d19c163c810ef3f128cscroggo@google.comvoid SkFlatController::setTypefacePlayback(SkTypefacePlayback* playback) {
851554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com    fTypefacePlayback = playback;
861554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com}
871554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com
881554360a9511d996e1618d19c163c810ef3f128cscroggo@google.comSkNamedFactorySet* SkFlatController::setNamedFactorySet(SkNamedFactorySet* set) {
891554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com    SkRefCnt_SafeAssign(fFactorySet, set);
901554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com    return set;
911554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com}
92