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