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
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