X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fresources.cpp;h=b7586e886ee41df0eb711230c1ebe4bfcba8402c;hb=b51fd94242badcd3807a39c339979f4f358120cd;hp=a61566ae2e8556e0bb5327a498fa08dbef183dae;hpb=c1f038acb91eb3bfaa34dfd4729d19ed3f871a42;p=libs%2Fgltk.git diff --git a/source/resources.cpp b/source/resources.cpp index a61566a..b7586e8 100644 --- a/source/resources.cpp +++ b/source/resources.cpp @@ -1,4 +1,4 @@ -#include +#include #include "resources.h" using namespace std; @@ -8,114 +8,51 @@ namespace GLtk { Resources::Resources(): default_font(0) -{ } - -Resources::~Resources() -{ - for(FontMap::iterator i=fonts.begin(); i!=fonts.end(); ++i) - delete i->second; - for(TextureMap::iterator i=textures.begin(); i!=textures.end(); ++i) - delete i->second; -} - -const GL::Font &Resources::get_font(const string &name) const { - FontMap::const_iterator i=fonts.find(name); - if(i==fonts.end()) - throw KeyError("Unknown font "+name); - - return *i->second; + add_type().keyword("graphic"); + add_type().keyword("texture"); + add_type().keyword("font"); } const GL::Font &Resources::get_default_font() const { if(!default_font) - throw InvalidState("No default font"); + throw logic_error("!default_font"); return *default_font; } -const GL::Texture2D &Resources::get_texture(const string &name) const -{ - TextureMap::const_iterator i=textures.find(name); - if(i==textures.end()) - throw KeyError("Unknown texture "+name); - - return *i->second; -} - -const Graphic &Resources::get_graphic(const string &name) const -{ - GraphicMap::const_iterator i=graphics.find(name); - if(i==graphics.end()) - throw KeyError("Unknown graphic "+name); - - return i->second; -} - -const Style &Resources::get_style(const string &wdg, const string &name) const -{ - StyleMap::const_iterator i=styles.find(StyleId(wdg, name)); - if(i==styles.end()) - throw KeyError("Unknown style "+name+" for widget "+wdg); - - return i->second; -} - Resources::Loader::Loader(Resources &r): + Collection::Loader(r), res(r) { - add("font", &Loader::font); - add("texture", &Loader::texture); - add("graphic", &Loader::graphic); - add("style", &Loader::style); -} - -void Resources::Loader::font(const string &fn) -{ - RefPtr fnt=new GL::Font; - Parser::load(*fnt, fn); - - res.fonts.insert(FontMap::value_type(fn.substr(0, fn.rfind('.')), fnt.get())); - if(!res.default_font) - res.default_font=fnt.get(); - fnt.release(); -} - -void Resources::Loader::texture(const string &fn) -{ - RefPtr tex=new GL::Texture2D; - tex->image(fn); - tex->set_min_filter(GL::LINEAR); - - res.textures.insert(TextureMap::value_type(fn.substr(0, fn.rfind('.')), tex.release())); + add("default_font", &Loader::default_font); + add("font", &Loader::font); + add("style", &Loader::style); } -void Resources::Loader::graphic(const std::string &n) +void Resources::Loader::default_font(const string &name) { - Graphic graph(res, n); - load_sub(graph); - if(!graph.get_texture()) - throw Exception("Graphic without texture"); - - res.graphics.insert(GraphicMap::value_type(n, graph)); + res.default_font = &res.get(name); } -void Resources::Loader::style(const string &w, const string &n) +void Resources::Loader::font(const string &name) { - Style stl(res, w, n); - load_sub(stl); - - res.styles.insert(StyleMap::value_type(StyleId(w, n), stl)); + RefPtr fnt = new GL::Font; + load_sub(*fnt, res); + res.add(name, fnt.get()); + if(!res.default_font) + res.default_font = fnt.get(); + fnt.release(); } - -bool Resources::StyleId::operator<(const StyleId &other) const +void Resources::Loader::style(const string &name) { - if(widget stl = new Style(res); + load_sub(*stl, res); + res.add(name, stl.get()); + stl.release(); } } // namespace GLtk