blob: 0e2f370e885a1d3ea54a489e391f14d56aa3c474 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CC_PAINT_PAINT_TYPEFACE_H_
#define CC_PAINT_PAINT_TYPEFACE_H_
#include "base/logging.h"
#include "cc/paint/paint_export.h"
#include "third_party/skia/include/core/SkTypeface.h"
namespace cc {
class CC_PAINT_EXPORT PaintTypeface {
public:
enum class Type : uint8_t {
kTestTypeface, // This should only be used in tests.
kSkTypeface,
kFontConfigInterfaceIdAndTtcIndex,
kFilenameAndTtcIndex,
kFamilyNameAndFontStyle,
// We need to update this if the list is modified.
kLastType = kFamilyNameAndFontStyle
};
static PaintTypeface TestTypeface();
static PaintTypeface FromSkTypeface(const sk_sp<SkTypeface>& typeface);
static PaintTypeface FromFontConfigInterfaceIdAndTtcIndex(int config_id,
int ttc_index);
static PaintTypeface FromFilenameAndTtcIndex(const std::string& filename,
int ttc_index);
static PaintTypeface FromFamilyNameAndFontStyle(
const std::string& family_name,
const SkFontStyle& font_style);
// TODO(vmpstr): Need to add FromWebFont?
PaintTypeface();
PaintTypeface(const PaintTypeface& other);
PaintTypeface(PaintTypeface&& other);
~PaintTypeface();
PaintTypeface& operator=(const PaintTypeface& other);
PaintTypeface& operator=(PaintTypeface&& other);
operator bool() const { return !!sk_typeface_; }
// This is used when deserialized to force a different typeface id so that it
// can be matched from SkTextBlob deserialization.
void SetSkId(SkFontID id) { sk_id_ = id; }
SkFontID sk_id() const { return sk_id_; }
const sk_sp<SkTypeface>& ToSkTypeface() const { return sk_typeface_; }
Type type() const { return type_; }
int font_config_interface_id() const { return font_config_interface_id_; }
int ttc_index() const { return ttc_index_; }
const std::string& filename() const { return filename_; }
const std::string& family_name() const { return family_name_; }
const SkFontStyle font_style() const { return font_style_; }
private:
void CreateSkTypeface();
// This is the font ID that should be used by this PaintTypeface, regardless
// of the sk_typeface_ on the deserialized end. This value is initialized but
// can be overridden by SetSkId().
SkFontID sk_id_;
sk_sp<SkTypeface> sk_typeface_;
Type type_ = Type::kSkTypeface;
int font_config_interface_id_ = 0;
int ttc_index_ = 0;
std::string filename_;
std::string family_name_;
SkFontStyle font_style_;
};
} // namespace cc
#endif // CC_PAINT_PAINT_TYPEFACE_H_