#include <msp/core/maputils.h>
#include <msp/datafile/collection.h>
-#include "bindable.h"
-#include "gl.h"
+#include <msp/fs/utils.h>
#include "font.h"
#include "primitivebuilder.h"
#include "texture2d.h"
namespace Msp {
namespace GL {
-Font::Font():
- native_size(1),
- ascent(1),
- descent(0),
- cap_height(1),
- x_height(0.5)
-{ }
-
-// Avoid synthesizing ~RefPtr in files including font.h
-Font::~Font()
-{ }
-
void Font::set_texture(const Texture2D &t)
{
texture = &t;
- texture.keep();
}
const Texture2D &Font::get_texture() const
float x = 0;
unsigned prev = 0;
- for(string::const_iterator i=str.begin(); i!=str.end();)
+ for(auto i=str.begin(); i!=str.end();)
{
unsigned c = dec.decode_char(str, i);
if(prev)
unsigned prev = 0;
unsigned next = 0;
- for(string::const_iterator i=str.begin(); (next || i!=str.end());)
+ for(auto i=str.begin(); (next || i!=str.end());)
{
unsigned c = (next ? next : dec.decode_char(str, i));
next = (i!=str.end() ? dec.decode_char(str, i) : 0);
next = 0;
}
- GlyphMap::const_iterator j = glyphs.find(c);
+ auto j = glyphs.find(c);
if(j==glyphs.end())
continue;
float Font::get_glyph_advance(unsigned code, unsigned next) const
{
- GlyphMap::const_iterator i = glyphs.find(code);
+ auto i = glyphs.find(code);
if(i==glyphs.end())
return 0;
if(next)
{
- KerningMap::const_iterator j = kerning.find(CodePair(code, next));
+ auto j = kerning.find(CodePair(code, next));
if(j!=kerning.end())
advance += j->second;
}
unsigned Font::get_ligature(unsigned code, unsigned next) const
{
- LigatureMap::const_iterator i = ligatures.find(CodePair(code, next));
+ auto i = ligatures.find(CodePair(code, next));
return (i!=ligatures.end() ? i->second : 0);
}
-Font::Glyph::Glyph():
- code(0),
- x1(0),
- y1(0),
- x2(1),
- y2(1),
- w(1),
- h(1),
- off_x(0),
- off_y(0),
- advance(1)
-{ }
-
-
-Font::Loader::Loader(Font &f):
- DataFile::CollectionObjectLoader<Font>(f, 0)
-{
- init();
-}
-
Font::Loader::Loader(Font &f, Collection &c):
DataFile::CollectionObjectLoader<Font>(f, &c)
-{
- init();
-}
-
-void Font::Loader::init()
{
add("native_size", &Font::native_size);
add("ascent", &Font::ascent);
{
RefPtr<Texture2D> tex = new Texture2D;
load_sub(*tex);
- obj.texture = tex;
+ get_collection().add(FS::basename(get_source())+".tex", tex.get());
+ obj.texture = tex.release();
}
void Font::Loader::texture_ref(const string &name)
{
obj.texture = &get_collection().get<Texture2D>(name);
- obj.texture.keep();
}