]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/state.h
Change State into a bitmask to allow more fine-grained control of styles
[libs/gltk.git] / source / state.h
index 1f07c5cf21b4a0d8796d939062041caaa6978993..688d8dcb3baa60cbf7afb0f97302f0275545026f 100644 (file)
@@ -1,3 +1,10 @@
+/* $Id$
+
+This file is part of libmspgltk
+Copyright © 2007  Mikko Rasa, Mikkosoft Productions
+Distributed under the LGPL
+*/
+
 #ifndef MSP_GLTK_STATE_H_
 #define MSP_GLTK_STATE_H_
 
@@ -9,23 +16,32 @@ namespace GLtk {
 
 enum State
 {
-       NORMAL,   //< Default state
-       HOVER,    //< Pointer over the widget
-       ACTIVE,   //< Widget is active (e.g. pressed button)
-       DISABLED, //< Widget is unresponsive
-       N_STATES_ //< Sentry value
+       NORMAL=0,   //< Default state
+       HOVER=1,    //< Pointer over the widget
+       ACTIVE=2,   //< Widget is active (e.g. pressed button)
+       FOCUS=4,    //< Widget has input focus
+       DISABLED=8, //< Widget is unresponsive
+       N_STATES_=16 //< Sentry value
 };
 
-extern std::istream &operator>>(std::istream &, State &);
+inline State operator|(State a, State b)
+{ return static_cast<State>(static_cast<int>(a)|static_cast<int>(b)); }
 
-} // namespace GLtk
+inline State operator|=(State &a, State b)
+{ a=a|b; return a; }
 
-namespace DataFile {
+inline State operator&(State a, State b)
+{ return static_cast<State>(static_cast<int>(a)&static_cast<int>(b)); }
 
-template<>
-struct TypeResolver<GLtk::State> { static const Value::Type type=Value::ENUM; };
+inline State operator&=(State &a, State b)
+{ a=a&b; return a; }
 
-} // namespace Parser
+inline State operator~(State a)
+{ return static_cast<State>(~static_cast<int>(a)); }
+
+extern std::istream &operator>>(std::istream &, State &);
+
+} // namespace GLtk
 } // namespace Msp
 
 #endif