Home | History | Annotate | Download | only in core
      1 
      2 /*
      3  * Copyright 2011 Google Inc.
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 #include "SkPictureFlat.h"
      9 
     10 #include "SkChecksum.h"
     11 #include "SkColorFilter.h"
     12 #include "SkDrawLooper.h"
     13 #include "SkMaskFilter.h"
     14 #include "SkRasterizer.h"
     15 #include "SkShader.h"
     16 #include "SkTypeface.h"
     17 #include "SkXfermode.h"
     18 
     19 ///////////////////////////////////////////////////////////////////////////////
     20 
     21 SkTypefacePlayback::SkTypefacePlayback() : fCount(0), fArray(nullptr) {}
     22 
     23 SkTypefacePlayback::~SkTypefacePlayback() {
     24     this->reset(nullptr);
     25 }
     26 
     27 void SkTypefacePlayback::reset(const SkRefCntSet* rec) {
     28     for (int i = 0; i < fCount; i++) {
     29         SkASSERT(fArray[i]);
     30         fArray[i]->unref();
     31     }
     32     delete[] fArray;
     33 
     34     if (rec!= nullptr && rec->count() > 0) {
     35         fCount = rec->count();
     36         fArray = new SkRefCnt* [fCount];
     37         rec->copyToArray(fArray);
     38         for (int i = 0; i < fCount; i++) {
     39             fArray[i]->ref();
     40         }
     41     } else {
     42         fCount = 0;
     43         fArray = nullptr;
     44     }
     45 }
     46 
     47 void SkTypefacePlayback::setCount(int count) {
     48     this->reset(nullptr);
     49 
     50     fCount = count;
     51     fArray = new SkRefCnt* [count];
     52     sk_bzero(fArray, count * sizeof(SkRefCnt*));
     53 }
     54 
     55 SkRefCnt* SkTypefacePlayback::set(int index, SkRefCnt* obj) {
     56     SkASSERT((unsigned)index < (unsigned)fCount);
     57     SkRefCnt_SafeAssign(fArray[index], obj);
     58     return obj;
     59 }
     60 
     61 ///////////////////////////////////////////////////////////////////////////////
     62 
     63 SkFlatController::SkFlatController(uint32_t writeBufferFlags)
     64 : fBitmapHeap(nullptr)
     65 , fTypefaceSet(nullptr)
     66 , fTypefacePlayback(nullptr)
     67 , fFactorySet(nullptr)
     68 , fWriteBufferFlags(writeBufferFlags) {}
     69 
     70 SkFlatController::~SkFlatController() {
     71     SkSafeUnref(fBitmapHeap);
     72     SkSafeUnref(fTypefaceSet);
     73     SkSafeUnref(fFactorySet);
     74 }
     75 
     76 void SkFlatController::setBitmapHeap(SkBitmapHeap* heap) {
     77     SkRefCnt_SafeAssign(fBitmapHeap, heap);
     78 }
     79 
     80 void SkFlatController::setTypefaceSet(SkRefCntSet *set) {
     81     SkRefCnt_SafeAssign(fTypefaceSet, set);
     82 }
     83 
     84 void SkFlatController::setTypefacePlayback(SkTypefacePlayback* playback) {
     85     fTypefacePlayback = playback;
     86 }
     87 
     88 SkNamedFactorySet* SkFlatController::setNamedFactorySet(SkNamedFactorySet* set) {
     89     SkRefCnt_SafeAssign(fFactorySet, set);
     90     return set;
     91 }
     92