// Copyright 2016 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #include "core/fxge/cttfontdesc.h" #include <utility> #include "core/fxge/fx_freetype.h" #include "third_party/base/stl_util.h" CTTFontDesc::CTTFontDesc(std::unique_ptr<uint8_t, FxFreeDeleter> pData) : m_pFontData(std::move(pData)) { for (size_t i = 0; i < FX_ArraySize(m_TTCFaces); i++) m_TTCFaces[i] = nullptr; } CTTFontDesc::~CTTFontDesc() { ASSERT(m_RefCount == 0); for (size_t i = 0; i < FX_ArraySize(m_TTCFaces); i++) { if (m_TTCFaces[i]) FXFT_Done_Face(m_TTCFaces[i]); } } void CTTFontDesc::SetFace(size_t index, FXFT_Face face) { ASSERT(index < FX_ArraySize(m_TTCFaces)); m_TTCFaces[index] = face; } void CTTFontDesc::AddRef() { ASSERT(m_RefCount > 0); ++m_RefCount; } CTTFontDesc::ReleaseStatus CTTFontDesc::ReleaseFace(FXFT_Face face) { if (!pdfium::ContainsValue(m_TTCFaces, face)) return kNotAppropriate; ASSERT(m_RefCount > 0); return --m_RefCount == 0 ? kReleased : kNotReleased; } FXFT_Face CTTFontDesc::GetFace(size_t index) const { ASSERT(index < FX_ArraySize(m_TTCFaces)); return m_TTCFaces[index]; }