blob: 6186ef2b8ec3534cc97f7c6eef53a69f7ec9aec4 [file] [log] [blame] [edit]
// Copyright 2016 The PDFium Authors
// 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/cfx_substfont.h"
CFX_SubstFont::CFX_SubstFont() = default;
CFX_SubstFont::~CFX_SubstFont() = default;
#if defined(PDF_USE_SKIA)
int CFX_SubstFont::GetOriginalWeight() const {
int weight = weight_;
// Perform the inverse weight adjustment of UseChromeSerif() to get the
// original font weight.
if (family_ == "Chrome Serif") {
weight = weight * 5 / 4;
}
return weight;
}
#endif
void CFX_SubstFont::UseChromeSerif() {
weight_ = weight_ * 4 / 5;
family_ = "Chrome Serif";
}
// The following is not a perfect solution and can be further improved.
// For example, if `this` is "Book" and the `base_font_name` is "Bookman",
// this function will return "true" even though the actual font "Bookman"
// is not loaded.
// An exact string match is not possible here, because `subst_font_name`
// will be the same value for different postscript names.
// For example: "Times New Roman" as `subst_font_name` for all of these
// `base_font_name` values: "TimesNewRoman,Bold", "TimesNewRomanPS-Bold",
// "TimesNewRomanBold" and "TimesNewRoman-Bold".
bool CFX_SubstFont::IsActualFontLoaded(const ByteString& base_font_name) const {
// Skip if we loaded the actual font.
// example: TimesNewRoman,Bold -> Times New Roman
ByteString subst_font_name = family_;
subst_font_name.Remove(' ');
subst_font_name.MakeLower();
std::optional<size_t> find =
base_font_name.Find(subst_font_name.AsStringView());
return find.has_value() && find.value() == 0;
}