]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/style.cpp
Convert loops and iterators to use C++11 features
[libs/gltk.git] / source / style.cpp
index 369559d8095b358bac335e2fb2c5727eabbe0206..acbdff54febbda18dce5df7a7cc265fb16e2a647 100644 (file)
@@ -1,3 +1,4 @@
+#include <msp/core/algorithm.h>
 #include "resources.h"
 #include "style.h"
 
@@ -8,7 +9,8 @@ namespace GLtk {
 
 Style::Style():
        font(0),
-       font_size(0)
+       font_size(0),
+       sampler(0)
 { }
 
 const GL::Font &Style::get_font() const
@@ -20,19 +22,40 @@ 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];
 }
 
+const GL::Sampler &Style::get_sampler() const
+{
+       if(!sampler)
+               throw logic_error("!sampler");
+       return *sampler;
+}
+
 const Part *Style::get_part(const string &name) const
 {
-       for(PartSeq::const_iterator i=parts.begin(); i!=parts.end(); ++i)
-               if(i->get_name()==name)
-                       return &*i;
+       auto i = find_if(parts, [&name](const Part &p){ return p.get_name()==name; });
+       return (i!=parts.end() ? &*i : 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(const Part &p: parts)
+               if(p.get_graphic(s1)!=p.get_graphic(s2))
+                       return true;
 
-       return 0;
+       return false;
 }
 
 
@@ -44,6 +67,8 @@ Style::Loader::Loader(Style &s, Resources &r):
                obj.font = &get_collection().get_default_font();
                obj.font_size = obj.font->get_native_size();
        }
+       if(!obj.sampler)
+               obj.sampler = &get_collection().get<GL::Sampler>("linear_clamp.samp");
 
        add("font",       &Loader::font);
        add("font_color", &Loader::font_color_normal);
@@ -51,6 +76,7 @@ Style::Loader::Loader(Style &s, Resources &r):
        add("font_size",  &Style::font_size);
        add("part",       &Loader::part);
        add("part",       &Loader::unnamed_part);
+       add("sampler",    &Style::sampler);
 }
 
 void Style::Loader::font(const string &n)