]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/toggle.cpp
Render text in Dropdown directly from the List
[libs/gltk.git] / source / toggle.cpp
index 2e3488ac24a465fe890820d2dff877cfdb2bfc7d..dd6ce359cad95ef691884b1e67128fcebafb81be 100644 (file)
@@ -13,36 +13,39 @@ namespace GLtk {
 
 Toggle::Toggle(const Resources &r):
        Widget(r),
+       pressed(false),
        value(false)
 {
        update_style();
 }
 
-void Toggle::button_release(int x, int y, unsigned btn)
+void Toggle::set_value(bool v)
+{
+       value=v;
+       if(value)
+               state|=ACTIVE;
+       else
+               state&=~ACTIVE;
+}
+
+void Toggle::button_press(int, int, unsigned btn)
 {
        if(btn==1)
+               pressed=true;
+}
+
+void Toggle::button_release(int x, int y, unsigned btn)
+{
+       if(pressed && btn==1)
        {
                if(geom.is_inside_relative(x, y))
                {
-                       value=!value;
-                       state=(value ? ACTIVE : HOVER);
+                       set_value(!value);
                        signal_toggled.emit(value);
                }
-               else
-                       state=NORMAL;
-       }
-}
 
-void Toggle::pointer_enter()
-{
-       if(!value)
-               state=HOVER;
-}
-
-void Toggle::pointer_leave()
-{
-       if(!value)
-               state=NORMAL;
+               pressed=false;
+       }
 }
 
 void Toggle::render_special(const Part &part) const
@@ -64,5 +67,14 @@ Toggle &Toggle::Loader::get_object() const
        return static_cast<Toggle &>(wdg);
 }
 
+void Toggle::Loader::finish()
+{
+       Toggle &tgl=static_cast<Toggle &>(wdg);
+       if(tgl.value)
+               tgl.state|=ACTIVE;
+       else
+               tgl.state&=~ACTIVE;
+}
+
 } // namespace GLtk
 } // namespace Msp