metaforce/specter/lib/ViewResources.cpp

78 lines
2.3 KiB
C++
Raw Normal View History

2016-03-04 23:03:47 +00:00
#include "specter/ViewResources.hpp"
2016-03-04 23:03:47 +00:00
namespace specter
{
2016-03-04 23:03:47 +00:00
static logvisor::Module Log("specter::ViewResources");
2018-05-14 03:37:01 +00:00
void ViewResources::init(boo::IGraphicsDataFactory* factory, FontCache* fcache, const IThemeData* theme, float pf)
{
if (!factory || !fcache || !theme)
2016-03-04 23:03:47 +00:00
Log.report(logvisor::Fatal, "all arguments of ViewResources::init() must be non-null");
m_pixelFactor = pf;
m_factory = factory;
2016-03-30 19:15:32 +00:00
m_theme = theme;
2015-12-04 01:35:01 +00:00
m_fcache = fcache;
unsigned dpi = 72.f * m_pixelFactor;
2016-03-30 19:15:32 +00:00
2018-01-10 06:18:56 +00:00
m_curveFont = fcache->prepCurvesFont(AllCharFilter, false, 8.f, dpi);
2016-03-30 19:15:32 +00:00
factory->commitTransaction([&](boo::IGraphicsDataFactory::Context& ctx) {
2018-10-07 02:58:28 +00:00
init(ctx, *theme, fcache);
2016-03-30 19:15:32 +00:00
return true;
} BooTrace);
}
void ViewResources::destroyResData()
{
m_viewRes.destroy();
m_textRes.destroy();
m_splitRes.destroy();
m_toolbarRes.destroy();
m_buttonRes.destroy();
}
void ViewResources::prepFontCacheSync()
2015-12-04 01:35:01 +00:00
{
unsigned dpi = 72.f * m_pixelFactor;
2018-06-02 00:03:08 +00:00
if (m_fcacheInterrupt.load())
2018-05-14 03:37:01 +00:00
return;
2018-01-10 06:18:56 +00:00
m_mainFont = m_fcache->prepMainFont(AllCharFilter, false, 10.f, dpi);
2018-06-02 00:03:08 +00:00
if (m_fcacheInterrupt.load())
2018-05-14 03:37:01 +00:00
return;
m_monoFont10 = m_fcache->prepMonoFont(AllCharFilter, false, 10.f, dpi);
2018-06-02 00:03:08 +00:00
if (m_fcacheInterrupt.load())
2018-05-14 03:37:01 +00:00
return;
m_monoFont18 = m_fcache->prepMonoFont(AllCharFilter, false, 18.f, dpi);
2018-06-02 00:03:08 +00:00
if (m_fcacheInterrupt.load())
2018-05-14 03:37:01 +00:00
return;
2018-01-10 06:18:56 +00:00
m_heading14 = m_fcache->prepMainFont(LatinAndJapaneseCharFilter, false, 14.f, dpi);
2018-06-02 00:03:08 +00:00
if (m_fcacheInterrupt.load())
2018-05-14 03:37:01 +00:00
return;
2018-01-10 06:18:56 +00:00
m_heading18 = m_fcache->prepMainFont(LatinAndJapaneseCharFilter, false, 18.f, dpi);
2018-06-02 00:03:08 +00:00
if (m_fcacheInterrupt.load())
2018-05-14 03:37:01 +00:00
return;
2018-01-10 06:18:56 +00:00
m_titleFont = m_fcache->prepMainFont(LatinCharFilter, false, 36.f, dpi);
2018-06-02 00:03:08 +00:00
if (m_fcacheInterrupt.load())
2018-05-14 03:37:01 +00:00
return;
2015-12-04 01:35:01 +00:00
m_fcache->closeBuiltinFonts();
2018-06-02 00:03:08 +00:00
m_fcacheReady.store(true);
}
void ViewResources::prepFontCacheAsync(boo::IWindow* window)
{
2018-06-02 00:03:08 +00:00
m_fcacheReady.store(false);
m_fcacheThread = std::thread([this]() { prepFontCacheSync(); });
}
void ViewResources::resetPixelFactor(float pf)
{
m_pixelFactor = pf;
unsigned dpi = 72.f * m_pixelFactor;
2018-01-10 06:18:56 +00:00
m_curveFont = m_fcache->prepCurvesFont(AllCharFilter, false, 8.f, dpi);
prepFontCacheSync();
2015-12-04 01:35:01 +00:00
}
2018-05-14 03:37:01 +00:00
void ViewResources::resetTheme(const IThemeData* theme) { m_theme = theme; }
2015-12-04 01:35:01 +00:00
2018-05-14 03:37:01 +00:00
} // namespace specter