]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/style.cpp
Update loaders to use ObjectLoader as base class
[libs/gltk.git] / source / style.cpp
index 0138ec2af1a20f401b262b2b7d1bffefeac2a6eb..da772dc8d21051148ff1aa22f372e3a6590812cc 100644 (file)
@@ -6,10 +6,18 @@ using namespace std;
 namespace Msp {
 namespace GLtk {
 
-Style::Style(Resources &r):
-       font(&r.get_default_font())
+Style::Style():
+       font(0),
+       font_size(0)
 { }
 
+const GL::Font &Style::get_font() const
+{
+       if(!font)
+               throw logic_error("!font");
+       return *font;
+}
+
 const Part *Style::get_part(const string &name) const
 {
        for(PartSeq::const_iterator i=parts.begin(); i!=parts.end(); ++i)
@@ -21,20 +29,32 @@ const Part *Style::get_part(const string &name) const
 
 
 Style::Loader::Loader(Style &s, Resources &r):
-       style(s),
-       res(r)
+       DataFile::CollectionObjectLoader<Style, Resources>(s, &r)
 {
-       add("font",       &Style::font);
+       if(!obj.font)
+       {
+               obj.font = &get_collection().get_default_font();
+               obj.font_size = obj.font->get_native_size();
+       }
+
+       add("font",       &Loader::font);
        add("font_color", &Loader::font_color);
+       add("font_size",  &Style::font_size);
        add("part",       static_cast<void (Loader::*)()>(&Loader::part));
        add("part",       static_cast<void (Loader::*)(const std::string &)>(&Loader::part));
        // Deprecated alias
        add("special",    static_cast<void (Loader::*)(const std::string &)>(&Loader::part));
 }
 
+void Style::Loader::font(const string &n)
+{
+       obj.font = &get_collection().get<GL::Font>(n);
+       obj.font_size = obj.font->get_native_size();
+}
+
 void Style::Loader::font_color(float r, float g, float b)
 {
-       style.font_color = GL::Color(r, g, b);
+       obj.font_color = GL::Color(r, g, b);
 }
 
 void Style::Loader::part()
@@ -45,8 +65,8 @@ void Style::Loader::part()
 void Style::Loader::part(const string &n)
 {
        Part p(n);
-       load_sub(p, res);
-       style.parts.push_back(p);
+       load_sub(p, get_collection());
+       obj.parts.push_back(p);
 }
 
 } // namespace GLtk