]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/toggle.cpp
Add Dropdown widget
[libs/gltk.git] / source / toggle.cpp
index 2e3488ac24a465fe890820d2dff877cfdb2bfc7d..1495344219f89013e790636e4d621f21e8399013 100644 (file)
@@ -13,23 +13,37 @@ 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;
+       state=(value ? ACTIVE : HOVER);
+}
+
+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;
+
+               pressed=false;
        }
 }
 
@@ -64,5 +78,11 @@ Toggle &Toggle::Loader::get_object() const
        return static_cast<Toggle &>(wdg);
 }
 
+void Toggle::Loader::finish()
+{
+       Toggle &tgl=static_cast<Toggle &>(wdg);
+       tgl.state=(tgl.value ? ACTIVE : NORMAL);
+}
+
 } // namespace GLtk
 } // namespace Msp