]> git.tdb.fi Git - libs/gltk.git/blob - source/toggle.cpp
Change State into a bitmask to allow more fine-grained control of styles
[libs/gltk.git] / source / toggle.cpp
1 /* $Id$
2
3 This file is part of libmspgltk
4 Copyright © 2007  Mikko Rasa, Mikkosoft Productions
5 Distributed under the LGPL
6 */
7
8 #include "part.h"
9 #include "toggle.h"
10
11 namespace Msp {
12 namespace GLtk {
13
14 Toggle::Toggle(const Resources &r):
15         Widget(r),
16         pressed(false),
17         value(false)
18 {
19         update_style();
20 }
21
22 void Toggle::set_value(bool v)
23 {
24         value=v;
25         if(value)
26                 state|=ACTIVE;
27         else
28                 state&=~ACTIVE;
29 }
30
31 void Toggle::button_press(int, int, unsigned btn)
32 {
33         if(btn==1)
34                 pressed=true;
35 }
36
37 void Toggle::button_release(int x, int y, unsigned btn)
38 {
39         if(pressed && btn==1)
40         {
41                 if(geom.is_inside_relative(x, y))
42                 {
43                         set_value(!value);
44                         signal_toggled.emit(value);
45                 }
46
47                 pressed=false;
48         }
49 }
50
51 void Toggle::render_special(const Part &part) const
52 {
53         if(part.get_name()=="text")
54                 render_text(part, text);
55 }
56
57
58 Toggle::Loader::Loader(Toggle &t):
59         Widget::Loader(t)
60 {
61         add("text",  &Toggle::text);
62         add("value", &Toggle::value);
63 }
64
65 Toggle &Toggle::Loader::get_object() const
66 {
67         return static_cast<Toggle &>(wdg);
68 }
69
70 void Toggle::Loader::finish()
71 {
72         Toggle &tgl=static_cast<Toggle &>(wdg);
73         if(tgl.value)
74                 tgl.state|=ACTIVE;
75         else
76                 tgl.state&=~ACTIVE;
77 }
78
79 } // namespace GLtk
80 } // namespace Msp