architectural tweaks

This commit is contained in:
Jack Andersen 2015-11-21 18:32:12 -10:00
parent 2f1b7cfc40
commit 2df0f7873d
7 changed files with 83 additions and 10 deletions

View File

@ -10,9 +10,20 @@ if(NOT DEFINED BOO_INCLUDE_DIR)
BOO_INCLUDE_DIR set") BOO_INCLUDE_DIR set")
endif() endif()
if(NOT DEFINED ATHENA_INCLUDE_DIR)
message(FATAL_ERROR "Specter may only be built as a sub-project containing Athena with
ATHENA_INCLUDE_DIR set")
endif()
if(NOT DEFINED LOG_VISOR_INCLUDE_DIR)
message(FATAL_ERROR "Specter may only be built as a sub-project containing LogVisor with
LOG_VISOR_INCLUDE_DIR set")
endif()
add_subdirectory(resources/fonts) add_subdirectory(resources/fonts)
include_directories(include ${HECL_INCLUDE_DIR} ${BOO_INCLUDE_DIR} include_directories(include ${HECL_INCLUDE_DIR} ${BOO_INCLUDE_DIR}
${LOG_VISOR_INCLUDE_DIR} ${ATHENA_INCLUDE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/freetype2/include) ${CMAKE_CURRENT_SOURCE_DIR}/freetype2/include)
list(APPEND SPECTER_HEADERS list(APPEND SPECTER_HEADERS

View File

@ -4,11 +4,35 @@
#include <ft2build.h> #include <ft2build.h>
#include FT_FREETYPE_H #include FT_FREETYPE_H
#include <boo/boo.hpp>
#include <HECL/Runtime.hpp>
namespace Specter namespace Specter
{ {
class FontHandle
{
};
class FontAtlas
{
FT_Face m_face;
std::vector<boo::ITextureS*> m_texs;
};
class FontCache class FontCache
{ {
const HECL::Runtime::FileStoreManager& m_fileMgr;
FT_Library m_fontLib;
FT_Face m_regFace;
FT_Face m_monoFace;
public:
FontCache(const HECL::Runtime::FileStoreManager& fileMgr);
~FontCache();
FontHandle prepMainFont(float points=10.0);
FontHandle prepMonoFont(float points=10.0);
FontHandle prepCustomFont(FT_Face face, float points=10.0);
}; };
} }

View File

@ -2,19 +2,17 @@
#define SPECTER_ROOTVIEW_HPP #define SPECTER_ROOTVIEW_HPP
#include "View.hpp" #include "View.hpp"
#include "FontCache.hpp"
#include <boo/boo.hpp> #include <boo/boo.hpp>
#include <ft2build.h>
#include FT_FREETYPE_H
namespace Specter namespace Specter
{ {
class RootView : public View, public boo::IWindowCallback class RootView : public View, public boo::IWindowCallback
{ {
FontCache& m_fontCache;
boo::IWindow* m_window = nullptr; boo::IWindow* m_window = nullptr;
FT_Library m_ftLib; float m_scale = 1.0;
void setWindow(boo::IWindow* window);
void resized(const boo::SWindowRect& rect); void resized(const boo::SWindowRect& rect);
void mouseDown(const boo::SWindowCoord& coord, boo::EMouseButton button, boo::EModifierKey mods); void mouseDown(const boo::SWindowCoord& coord, boo::EMouseButton button, boo::EModifierKey mods);
@ -36,6 +34,10 @@ class RootView : public View, public boo::IWindowCallback
void modKeyUp(boo::EModifierKey mod); void modKeyUp(boo::EModifierKey mod);
void draw(boo::IGraphicsCommandQueue* gfxQ); void draw(boo::IGraphicsCommandQueue* gfxQ);
public:
RootView(FontCache& fontCache) : m_fontCache(fontCache) {}
void setWindow(boo::IWindow* window, float userScale);
}; };
} }

View File

@ -14,5 +14,6 @@
#include "Menu.hpp" #include "Menu.hpp"
#include "Node.hpp" #include "Node.hpp"
#include "NodeSocket.hpp" #include "NodeSocket.hpp"
#include "FontCache.hpp"
#endif // SPECTER_HPP #endif // SPECTER_HPP

View File

@ -0,0 +1,34 @@
#include "Specter/FontCache.hpp"
#include <LogVisor/LogVisor.hpp>
#include <stdint.h>
extern "C" uint8_t* DROIDSANS_PERMISSIVE;
extern "C" size_t DROIDSANS_PERMISSIVE_SZ;
extern "C" uint8_t* BMONOFONT;
extern "C" size_t BMONOFONT_SZ;
namespace Specter
{
static LogVisor::LogModule Log("Specter::FontCache");
FontCache::FontCache(const HECL::Runtime::FileStoreManager& fileMgr)
: m_fileMgr(fileMgr)
{
FT_Error err = FT_Init_FreeType(&m_fontLib);
if (err)
Log.report(LogVisor::FatalError, "unable to FT_Init_FreeType");
err = FT_New_Memory_Face(m_fontLib, DROIDSANS_PERMISSIVE, DROIDSANS_PERMISSIVE_SZ, 0, &m_regFace);
if (err)
Log.report(LogVisor::FatalError, "unable to FT_New_Memory_Face for main UI font");
err = FT_New_Memory_Face(m_fontLib, BMONOFONT, BMONOFONT_SZ, 0, &m_monoFace);
if (err)
Log.report(LogVisor::FatalError, "unable to FT_New_Memory_Face for mono UI font");
}
FontCache::~FontCache()
{
FT_Done_FreeType(m_fontLib);
}
}

View File

@ -3,10 +3,11 @@
namespace Specter namespace Specter
{ {
void RootView::setWindow(boo::IWindow* window) void RootView::setWindow(boo::IWindow* window, float userScale)
{ {
window->setCallback(this);
m_window = window; m_window = window;
float pf = window->getVirtualPixelFactor(); m_scale = window->getVirtualPixelFactor() * userScale;
} }
void RootView::resized(const boo::SWindowRect& rect) void RootView::resized(const boo::SWindowRect& rect)

View File

@ -1,3 +1,3 @@
bintoc(droidsans-permissive.cpp droidsans-permissive.ttf.gz DROIDSANS_PERMISSIVE) bintoc(droidsans-permissive.c droidsans-permissive.ttf.gz DROIDSANS_PERMISSIVE)
bintoc(bmonofont-i18n.cpp bmonofont-i18n.ttf.gz BMONOFONT) bintoc(bmonofont-i18n.c bmonofont-i18n.ttf.gz BMONOFONT)
add_library(SpecterFonts droidsans-permissive.cpp bmonofont-i18n.cpp) add_library(SpecterFonts droidsans-permissive.c bmonofont-i18n.c)