• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2011 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 #include "SkPictureFlat.h"
8 
9 #include "SkChecksum.h"
10 #include "SkColorFilter.h"
11 #include "SkDrawLooper.h"
12 #include "SkMaskFilter.h"
13 #include "SkRasterizer.h"
14 #include "SkShader.h"
15 #include "SkTypeface.h"
16 
17 ///////////////////////////////////////////////////////////////////////////////
18 
SkTypefacePlayback()19 SkTypefacePlayback::SkTypefacePlayback() : fCount(0), fArray(nullptr) {}
20 
~SkTypefacePlayback()21 SkTypefacePlayback::~SkTypefacePlayback() {
22     this->reset(nullptr);
23 }
24 
reset(const SkRefCntSet * rec)25 void SkTypefacePlayback::reset(const SkRefCntSet* rec) {
26     for (int i = 0; i < fCount; i++) {
27         SkASSERT(fArray[i]);
28         fArray[i]->unref();
29     }
30     delete[] fArray;
31 
32     if (rec!= nullptr && rec->count() > 0) {
33         fCount = rec->count();
34         fArray = new SkRefCnt* [fCount];
35         rec->copyToArray(fArray);
36         for (int i = 0; i < fCount; i++) {
37             fArray[i]->ref();
38         }
39     } else {
40         fCount = 0;
41         fArray = nullptr;
42     }
43 }
44 
setCount(int count)45 void SkTypefacePlayback::setCount(int count) {
46     this->reset(nullptr);
47 
48     fCount = count;
49     fArray = new SkRefCnt* [count];
50     sk_bzero(fArray, count * sizeof(SkRefCnt*));
51 }
52 
set(int index,SkRefCnt * obj)53 SkRefCnt* SkTypefacePlayback::set(int index, SkRefCnt* obj) {
54     SkASSERT((unsigned)index < (unsigned)fCount);
55     SkRefCnt_SafeAssign(fArray[index], obj);
56     return obj;
57 }
58