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