]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/style.cpp
Don't rebuild on state change if there are no visual changes
[libs/gltk.git] / source / style.cpp
index 369559d8095b358bac335e2fb2c5727eabbe0206..d53ae240fcea168a1b4659e6d8ac4472ec79f69c 100644 (file)
@@ -20,7 +20,7 @@ const GL::Font &Style::get_font() const
 
 const GL::Color &Style::get_font_color(State s) const
 {
-       if(s>N_STATES_)
+       if(s>=N_STATES_)
                throw invalid_argument("Style::get_font_color");
 
        return font_color[s];
@@ -35,6 +35,23 @@ 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):
        DataFile::CollectionObjectLoader<Style, Resources>(s, &r)