X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fstyle.cpp;h=d53ae240fcea168a1b4659e6d8ac4472ec79f69c;hb=85e27a9f4678a20dc197d1f29fae3d0370e402d9;hp=001b36937e03f4ab03261043d3414ae9ce49060e;hpb=3d84860cb25cf05ed36ee6cbd07d9e58cee52422;p=libs%2Fgltk.git diff --git a/source/style.cpp b/source/style.cpp index 001b369..d53ae24 100644 --- a/source/style.cpp +++ b/source/style.cpp @@ -18,6 +18,14 @@ const GL::Font &Style::get_font() const 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 Part *Style::get_part(const string &name) const { for(PartSeq::const_iterator i=parts.begin(); i!=parts.end(); ++i) @@ -27,40 +35,69 @@ const Part *Style::get_part(const string &name) const return 0; } +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(PartSeq::const_iterator i=parts.begin(); i!=parts.end(); ++i) + if(i->get_graphic(s1)!=i->get_graphic(s2)) + return true; + + return false; +} + Style::Loader::Loader(Style &s, Resources &r): - style(s), - res(r) + DataFile::CollectionObjectLoader(s, &r) { - if(!style.font) + if(!obj.font) { - style.font = &r.get_default_font(); - style.font_size = style.font->get_native_size(); + obj.font = &get_collection().get_default_font(); + obj.font_size = obj.font->get_native_size(); } - add("font", &Style::font); + add("font", &Loader::font); + add("font_color", &Loader::font_color_normal); add("font_color", &Loader::font_color); - add("part", static_cast(&Loader::part)); - add("part", static_cast(&Loader::part)); - // Deprecated alias - add("special", static_cast(&Loader::part)); + add("font_size", &Style::font_size); + add("part", &Loader::part); + add("part", &Loader::unnamed_part); } -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(string()); + font_color(NORMAL, r, g, b); +} + +void Style::Loader::font_color(State s, float r, float g, float b) +{ + for(unsigned i=0; i