summaryrefslogtreecommitdiffstats
path: root/xbmc/guilib/GUIFontManager.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--xbmc/guilib/GUIFontManager.h140
1 files changed, 140 insertions, 0 deletions
diff --git a/xbmc/guilib/GUIFontManager.h b/xbmc/guilib/GUIFontManager.h
new file mode 100644
index 0000000..5923517
--- /dev/null
+++ b/xbmc/guilib/GUIFontManager.h
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2005-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#pragma once
+
+/*!
+\file GUIFontManager.h
+\brief
+*/
+
+#include "IMsgTargetCallback.h"
+#include "threads/CriticalSection.h"
+#include "threads/SingleLock.h"
+#include "utils/ColorUtils.h"
+#include "utils/GlobalsHandling.h"
+#include "windowing/GraphicContext.h"
+
+#include <utility>
+#include <vector>
+
+// Forward
+class CGUIFont;
+class CGUIFontTTF;
+class CXBMCTinyXML;
+class TiXmlNode;
+class CSetting;
+struct StringSettingOption;
+
+struct OrigFontInfo
+{
+ int size;
+ float aspect;
+ std::string fontFilePath;
+ std::string fileName;
+ RESOLUTION_INFO sourceRes;
+ bool preserveAspect;
+ bool border;
+};
+
+struct FontMetadata
+{
+ FontMetadata(const std::string& filename, const std::string& familyName)
+ : m_filename{filename}, m_familyName{familyName}
+ {
+ }
+
+ std::string m_filename;
+ std::string m_familyName;
+};
+
+/*!
+ \ingroup textures
+ \brief
+ */
+class GUIFontManager : public IMsgTargetCallback
+{
+public:
+ GUIFontManager();
+ ~GUIFontManager() override;
+
+ /*!
+ * \brief Initialize the font manager.
+ * Checks that fonts cache are up to date, otherwise update it.
+ */
+ void Initialize();
+
+ bool IsUpdating() const { return m_critSection.IsLocked(); }
+
+ bool OnMessage(CGUIMessage& message) override;
+
+ void Unload(const std::string& strFontName);
+ void LoadFonts(const std::string& fontSet);
+ CGUIFont* LoadTTF(const std::string& strFontName,
+ const std::string& strFilename,
+ UTILS::COLOR::Color textColor,
+ UTILS::COLOR::Color shadowColor,
+ const int iSize,
+ const int iStyle,
+ bool border = false,
+ float lineSpacing = 1.0f,
+ float aspect = 1.0f,
+ const RESOLUTION_INFO* res = nullptr,
+ bool preserveAspect = false);
+ CGUIFont* GetFont(const std::string& strFontName, bool fallback = true);
+
+ /*! \brief return a default font
+ \param border whether the font should be a font with an outline
+ \return the font. `nullptr` if no default font can be found.
+ */
+ CGUIFont* GetDefaultFont(bool border = false);
+
+ void Clear();
+ void FreeFontFile(CGUIFontTTF* pFont);
+
+ static void SettingOptionsFontsFiller(const std::shared_ptr<const CSetting>& setting,
+ std::vector<StringSettingOption>& list,
+ std::string& current,
+ void* data);
+
+ /*!
+ * \brief Get the list of user fonts as family names from cache
+ * \return The list of available fonts family names
+ */
+ std::vector<std::string> GetUserFontsFamilyNames();
+
+protected:
+ void ReloadTTFFonts();
+ static void RescaleFontSizeAndAspect(CGraphicContext& context,
+ float* size,
+ float* aspect,
+ const RESOLUTION_INFO& sourceRes,
+ bool preserveAspect);
+ void LoadFonts(const TiXmlNode* fontNode);
+ CGUIFontTTF* GetFontFile(const std::string& fontIdent);
+ static void GetStyle(const TiXmlNode* fontNode, int& iStyle);
+
+ std::vector<std::unique_ptr<CGUIFont>> m_vecFonts;
+ std::vector<std::unique_ptr<CGUIFontTTF>> m_vecFontFiles;
+ std::vector<OrigFontInfo> m_vecFontInfo;
+ RESOLUTION_INFO m_skinResolution;
+ bool m_canReload{true};
+
+private:
+ void LoadUserFonts();
+
+ mutable CCriticalSection m_critSection;
+ std::vector<FontMetadata> m_userFontsCache;
+};
+
+/*!
+ \ingroup textures
+ \brief
+ */
+XBMC_GLOBAL_REF(GUIFontManager, g_fontManager);
+#define g_fontManager XBMC_GLOBAL_USE(GUIFontManager)