X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fstyle.cpp;h=a339c0cb2bd913f2e336228cd0fb3fd2c63afb36;hb=81c4024fb6acf37df702a803dc4efdf82a81525a;hp=0bc931188e7e93ee9356cae9e90bf79112d27ecd;hpb=0af3c2393bd00f39db3bfaf5b78a7a44f0fd5ff1;p=libs%2Fgltk.git diff --git a/source/style.cpp b/source/style.cpp index 0bc9311..a339c0c 100644 --- a/source/style.cpp +++ b/source/style.cpp @@ -1,10 +1,4 @@ -/* $Id$ - -This file is part of libmspgltk -Copyright © 2007 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - +#include #include "resources.h" #include "style.h" @@ -13,38 +7,100 @@ using namespace std; namespace Msp { namespace GLtk { -Style::Style(Resources &r): - font(&r.get_default_font()) -{ } +const GL::Font &Style::get_font() const +{ + if(!font) + throw logic_error("!font"); + return *font; +} + +const GL::Color &Style::get_font_color(State s) const +{ + if(s>=N_STATES_) + throw invalid_argument("Style::get_font_color"); + + return font_color[s]; +} + +const GL::Sampler &Style::get_sampler() const +{ + if(!sampler) + throw logic_error("!sampler"); + return *sampler; +} + +const Part *Style::get_part(const string &name) const +{ + auto i = find_if(parts, [&name](const Part &p){ return p.get_name()==name; }); + return (i!=parts.end() ? &*i : nullptr); +} + +bool Style::compare_states(State s1, State s2) const +{ + if(s1>=N_STATES_ || s2>=N_STATES_) + throw invalid_argument("Style::compare_states"); + + const GL::Color &c1 = font_color[s1]; + const GL::Color &c2 = font_color[s2]; + if(c1.r!=c2.r || c1.g!=c2.g || c1.b!=c2.b) + return true; + + for(const Part &p: parts) + if(p.get_graphic(s1)!=p.get_graphic(s2)) + return true; + + return false; +} Style::Loader::Loader(Style &s, Resources &r): - style(s), - res(r) + DataFile::CollectionObjectLoader(s, &r) { - add("font", &Style::font); + if(!obj.font) + { + obj.font = &get_collection().get_default_font(); + obj.font_size = obj.font->get_native_size(); + } + if(!obj.sampler) + obj.sampler = &get_collection().get("linear_clamp.samp"); + + add("font", &Loader::font); + add("font_color", &Loader::font_color_normal); add("font_color", &Loader::font_color); + add("font_size", &Style::font_size); add("part", &Loader::part); - add("special", &Loader::special); + add("part", &Loader::unnamed_part); + add("sampler", &Style::sampler); } -void Style::Loader::font_color(float r, float g, float b) +void Style::Loader::font(const string &n) { - style.font_color = GL::Color(r, g, b); + obj.font = &get_collection().get(n); + obj.font_size = obj.font->get_native_size(); } -void Style::Loader::part() +void Style::Loader::font_color_normal(float r, float g, float b) { - Part p((string())); - load_sub(p, res); - style.parts.push_back(p); + font_color(NORMAL, r, g, b); } -void Style::Loader::special(const string &n) +void Style::Loader::font_color(State s, float r, float g, float b) +{ + for(unsigned i=0; i