Warning, file /graphics/glaxnimate/src/core/model/custom_font.hpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002  * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #pragma once
0008 
0009 #include <set>
0010 #include <memory>
0011 #include <unordered_map>
0012 
0013 #include <QRawFont>
0014 #include <QObject>
0015 
0016 #include "app/utils/qstring_hash.hpp"
0017 
0018 namespace glaxnimate::model {
0019 
0020 class CustomFont;
0021 
0022 enum class FontFileFormat
0023 {
0024     Unknown,
0025     TrueType,
0026     OpenType,
0027     Woff2,
0028     Woff
0029 };
0030 
0031 
0032 class CustomFontDatabase : public QObject
0033 {
0034     Q_OBJECT
0035 
0036 public:
0037     static CustomFontDatabase& instance();
0038     static FontFileFormat font_data_format(const QByteArray& data);
0039 
0040     CustomFont add_font(const QString& name_alias, const QByteArray& ttf_data);
0041     CustomFont get_font(int database_index);
0042     std::vector<CustomFont> fonts() const;
0043 
0044     QFont font(const QString& family, const QString& style_name, qreal size) const;
0045     std::unordered_map<QString, std::set<QString>> aliases() const;
0046 
0047 private:
0048     CustomFontDatabase();
0049     ~CustomFontDatabase();
0050     CustomFontDatabase(const CustomFontDatabase&) = delete;
0051     CustomFontDatabase& operator=(const CustomFontDatabase&) = delete;
0052 
0053     class Private;
0054     class CustomFontData;
0055     std::unique_ptr<Private> d;
0056     using DataPtr = std::shared_ptr<CustomFontData>;
0057     friend CustomFont;
0058 };
0059 
0060 class CustomFont
0061 {
0062 public:
0063     explicit CustomFont(int database_index);
0064     CustomFont(CustomFontDatabase::DataPtr d);
0065     CustomFont();
0066     ~CustomFont();
0067 
0068     bool is_valid() const;
0069     QString family() const;
0070     QString style_name() const;
0071     int database_index() const;
0072     QFont font(int size) const;
0073     const QRawFont& raw_font() const;
0074     QByteArray data() const;
0075 
0076     const QString& source_url() const;
0077     const QString& css_url() const;
0078 
0079     void set_source_url(const QString& url);
0080     void set_css_url(const QString& url);
0081 
0082 private:
0083     CustomFontDatabase::DataPtr d;
0084 };
0085 
0086 } // namespace glaxnimate::model
0087