| // 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]; |
| } |