]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/style.cpp
Change Style so it doesn't need a special loading function
[libs/gltk.git] / source / style.cpp
index 3f276ed409add4799212373abbfd2c45202b0deb..001b36937e03f4ab03261043d3414ae9ce49060e 100644 (file)
@@ -6,36 +6,60 @@ using namespace std;
 namespace Msp {
 namespace GLtk {
 
-Style::Style(const Resources &r, const string &w, const string &n):
-       res(r),
-       widget(w),
-       name(n),
-       font(&res.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;
+}
 
-Style::Loader::Loader(Style &s):
-       style(s)
+const Part *Style::get_part(const string &name) const
 {
-       add("font", &Loader::font);
-       add("font_color", &Loader::font_color);
-       add("part", &Loader::part);
+       for(PartSeq::const_iterator i=parts.begin(); i!=parts.end(); ++i)
+               if(i->get_name()==name)
+                       return &*i;
+
+       return 0;
 }
 
-void Style::Loader::font(const string &f)
+
+Style::Loader::Loader(Style &s, Resources &r):
+       style(s),
+       res(r)
 {
-       style.font=&style.res.get_font(f);
+       if(!style.font)
+       {
+               style.font = &r.get_default_font();
+               style.font_size = style.font->get_native_size();
+       }
+
+       add("font",       &Style::font);
+       add("font_color", &Loader::font_color);
+       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_color(float r, float g, float b)
 {
-       style.font_color=Color(r, g, b);
+       style.font_color = GL::Color(r, g, b);
+}
+
+void Style::Loader::part()
+{
+       part(string());
 }
 
 void Style::Loader::part(const string &n)
 {
-       Part p(style.res, n);
-       load_sub(p);
+       Part p(n);
+       load_sub(p, res);
        style.parts.push_back(p);
 }