diff options
-rw-r--r-- | src/WinButton.cc | 210 |
1 files changed, 122 insertions, 88 deletions
diff --git a/src/WinButton.cc b/src/WinButton.cc index 2534296..d029ecf 100644 --- a/src/WinButton.cc +++ b/src/WinButton.cc | |||
@@ -19,7 +19,7 @@ | |||
19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
20 | // DEALINGS IN THE SOFTWARE. | 20 | // DEALINGS IN THE SOFTWARE. |
21 | 21 | ||
22 | /// $Id: WinButton.cc,v 1.10 2003/08/22 21:33:13 fluxgen Exp $ | 22 | /// $Id: WinButton.cc,v 1.11 2003/09/12 22:52:22 fluxgen Exp $ |
23 | 23 | ||
24 | #include "WinButton.hh" | 24 | #include "WinButton.hh" |
25 | #include "App.hh" | 25 | #include "App.hh" |
@@ -49,32 +49,38 @@ void WinButton::buttonReleaseEvent(XButtonEvent &event) { | |||
49 | } | 49 | } |
50 | 50 | ||
51 | void WinButton::drawType() { | 51 | void WinButton::drawType() { |
52 | bool used = false; | ||
52 | 53 | ||
53 | switch (m_type) { | 54 | switch (m_type) { |
54 | case MAXIMIZE: | 55 | case MAXIMIZE: |
55 | if (m_theme.maximizePixmap().pixmap().drawable() != 0) { | 56 | |
56 | if (pressed()) { | 57 | if (pressed() && m_theme.maximizePressedPixmap().pixmap().drawable() != 0) { |
57 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | 58 | FbTk::FbWindow::setBackgroundPixmap(m_theme. |
58 | maximizePressedPixmap(). | 59 | maximizePressedPixmap(). |
59 | pixmap().drawable()); | 60 | pixmap().drawable()); |
60 | } else if (m_theme.maximizePixmap().pixmap().drawable()) { | 61 | } else { |
61 | // check focus | 62 | // check focus |
62 | if (!m_listen_to.isFocused() && | 63 | if (!m_listen_to.isFocused()) { |
63 | m_theme.maximizeUnfocusPixmap().pixmap().drawable() != 0) { | 64 | if (m_theme.maximizeUnfocusPixmap().pixmap().drawable() != 0) { |
64 | // not focused | 65 | // not focused |
65 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | 66 | FbTk::FbWindow::setBackgroundPixmap(m_theme. |
66 | maximizeUnfocusPixmap(). | 67 | maximizeUnfocusPixmap(). |
67 | pixmap().drawable()); | 68 | pixmap().drawable()); |
68 | } else { // focused | 69 | used = true; |
69 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | ||
70 | maximizePixmap(). | ||
71 | pixmap().drawable()); | ||
72 | } | 70 | } |
71 | } else if (m_theme.maximizePixmap().pixmap().drawable() != 0) { | ||
72 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | ||
73 | maximizePixmap(). | ||
74 | pixmap().drawable()); | ||
75 | used = true; | ||
73 | } | 76 | } |
74 | 77 | } | |
78 | if (used) | ||
75 | FbTk::FbWindow::clear(); | 79 | FbTk::FbWindow::clear(); |
76 | 80 | ||
77 | } else { | 81 | |
82 | // if no pixmap was used, use old style | ||
83 | if (!used) { | ||
78 | if (gc() == 0) // must have valid graphic context | 84 | if (gc() == 0) // must have valid graphic context |
79 | return; | 85 | return; |
80 | drawRectangle(gc(), | 86 | drawRectangle(gc(), |
@@ -84,29 +90,37 @@ void WinButton::drawType() { | |||
84 | } | 90 | } |
85 | break; | 91 | break; |
86 | case MINIMIZE: | 92 | case MINIMIZE: |
87 | if (m_theme.iconifyPixmap().pixmap().drawable() != 0) { | 93 | |
88 | if (pressed()) { | 94 | if (pressed() && m_theme.iconifyPressedPixmap().pixmap().drawable() != 0) { |
89 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | 95 | FbTk::FbWindow::setBackgroundPixmap(m_theme. |
90 | iconifyPressedPixmap(). | 96 | iconifyPressedPixmap(). |
91 | pixmap().drawable()); | 97 | pixmap().drawable()); |
92 | } else if (m_theme.iconifyPixmap().pixmap().drawable()){ | 98 | used = true; |
99 | } else { | ||
100 | if (m_theme.iconifyPixmap().pixmap().drawable()){ | ||
93 | // check focus | 101 | // check focus |
94 | if (!m_listen_to.isFocused() && | 102 | if (!m_listen_to.isFocused()) { |
95 | m_theme.iconifyUnfocusPixmap().pixmap().drawable() != 0) { | 103 | if (m_theme.iconifyUnfocusPixmap().pixmap().drawable() != 0) { |
96 | // not focused | 104 | // not focused |
97 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | 105 | FbTk::FbWindow::setBackgroundPixmap(m_theme. |
98 | iconifyUnfocusPixmap(). | 106 | iconifyUnfocusPixmap(). |
99 | pixmap().drawable()); | 107 | pixmap().drawable()); |
100 | } else { // focused | 108 | used = true; |
109 | } | ||
110 | } else if (m_theme.iconifyPixmap().pixmap().drawable() != 0) { | ||
101 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | 111 | FbTk::FbWindow::setBackgroundPixmap(m_theme. |
102 | iconifyPixmap(). | 112 | iconifyPixmap(). |
103 | pixmap().drawable()); | 113 | pixmap().drawable()); |
114 | used = true; | ||
104 | } | 115 | } |
105 | } | 116 | } |
117 | |||
118 | if (used) | ||
119 | FbTk::FbWindow::clear(); | ||
106 | 120 | ||
107 | FbTk::FbWindow::clear(); | 121 | } |
108 | 122 | ||
109 | } else { | 123 | if (!used) { |
110 | if (gc() == 0) // must have valid graphic context | 124 | if (gc() == 0) // must have valid graphic context |
111 | return; | 125 | return; |
112 | FbTk::FbWindow::drawRectangle(gc(), | 126 | FbTk::FbWindow::drawRectangle(gc(), |
@@ -114,56 +128,65 @@ void WinButton::drawType() { | |||
114 | } | 128 | } |
115 | break; | 129 | break; |
116 | case STICK: | 130 | case STICK: |
117 | if (m_theme.stickPixmap().pixmap().drawable() != 0) { | 131 | |
118 | if (m_listen_to.isStuck() && | 132 | if (m_listen_to.isStuck() && !pressed()) { |
119 | m_theme.stuckPixmap().pixmap().drawable() && | 133 | if ( m_theme.stuckPixmap().pixmap().drawable() && |
120 | ! pressed()) { // we're using the same pixmap for pressed as in not stuck | 134 | ! pressed()) { // we're using the same pixmap for pressed as in not stuck |
121 | // check focus | 135 | // check focus |
122 | if (!m_listen_to.isFocused() && | 136 | if (!m_listen_to.isFocused()) { |
123 | m_theme.stuckUnfocusPixmap().pixmap().drawable() != 0) { | 137 | if ( m_theme.stuckUnfocusPixmap().pixmap().drawable() != 0) { |
124 | // not focused | 138 | // not focused |
125 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | 139 | FbTk::FbWindow::setBackgroundPixmap(m_theme. |
126 | stuckUnfocusPixmap(). | 140 | stuckUnfocusPixmap(). |
127 | pixmap().drawable()); | 141 | pixmap().drawable()); |
128 | } else { // focused | 142 | used = true; |
143 | } | ||
144 | } else if (m_theme.stuckPixmap().pixmap().drawable() != 0) { | ||
145 | // focused | ||
129 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | 146 | FbTk::FbWindow::setBackgroundPixmap(m_theme. |
130 | stuckPixmap(). | 147 | stuckPixmap(). |
131 | pixmap().drawable()); | 148 | pixmap().drawable()); |
149 | used = true; | ||
132 | } | 150 | } |
133 | } else { // not stuck | 151 | } |
152 | } else { // not stuck and pressed | ||
134 | 153 | ||
135 | if (pressed()) { | 154 | if (pressed()) { |
155 | if (m_theme.stickPressedPixmap().pixmap().drawable() == 0) { | ||
136 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | 156 | FbTk::FbWindow::setBackgroundPixmap(m_theme. |
137 | stickPressedPixmap(). | 157 | stickPressedPixmap(). |
138 | pixmap().drawable()); | 158 | pixmap().drawable()); |
139 | 159 | used = true; | |
140 | } else if (m_theme.stickPixmap().pixmap().drawable()) { | 160 | } |
141 | // check focus | 161 | } else { // not pressed |
142 | if (!m_listen_to.isFocused() && | 162 | // check focus |
143 | m_theme.stickUnfocusPixmap().pixmap().drawable() != 0) { | 163 | if (!m_listen_to.isFocused()) { |
164 | if (m_theme.stickUnfocusPixmap().pixmap().drawable() != 0) { | ||
144 | // not focused | 165 | // not focused |
145 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | 166 | FbTk::FbWindow::setBackgroundPixmap(m_theme. |
146 | stickUnfocusPixmap(). | 167 | stickUnfocusPixmap(). |
147 | pixmap().drawable()); | 168 | pixmap().drawable()); |
148 | } else { // focused | 169 | used = true; |
149 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | ||
150 | stickPixmap(). | ||
151 | pixmap().drawable()); | ||
152 | } | 170 | } |
153 | 171 | } else if (m_theme.stickPixmap().pixmap().drawable()) { // focused | |
172 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | ||
173 | stickPixmap(). | ||
174 | pixmap().drawable()); | ||
175 | used = true; | ||
154 | } | 176 | } |
155 | } // end if stuck | ||
156 | 177 | ||
157 | FbTk::FbWindow::clear(); | 178 | } |
158 | 179 | ||
159 | } else { | 180 | } |
181 | |||
182 | if (used) | ||
183 | FbTk::FbWindow::clear(); | ||
184 | else if (gc() != 0) { | ||
160 | if (m_listen_to.isStuck()) { | 185 | if (m_listen_to.isStuck()) { |
161 | fillRectangle(gc(), | 186 | fillRectangle(gc(), |
162 | width()/2 - width()/4, height()/2 - height()/4, | 187 | width()/2 - width()/4, height()/2 - height()/4, |
163 | width()/2, height()/2); | 188 | width()/2, height()/2); |
164 | } else { | 189 | } else { |
165 | if (gc() == 0) // must have valid graphic context | ||
166 | return; | ||
167 | fillRectangle(gc(), | 190 | fillRectangle(gc(), |
168 | width()/2 - width()/10, height()/2 - height()/10, | 191 | width()/2 - width()/10, height()/2 - height()/10, |
169 | width()/5, height()/5); | 192 | width()/5, height()/5); |
@@ -172,32 +195,36 @@ void WinButton::drawType() { | |||
172 | break; | 195 | break; |
173 | case CLOSE: | 196 | case CLOSE: |
174 | 197 | ||
175 | if (m_theme.closePixmap().pixmap().drawable() != 0) { | 198 | if (pressed()) { |
176 | if (pressed()) { | 199 | if (m_theme.closePressedPixmap().pixmap().drawable()) { |
177 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | 200 | FbTk::FbWindow::setBackgroundPixmap(m_theme. |
178 | closePressedPixmap(). | 201 | closePressedPixmap(). |
179 | pixmap().drawable()); | 202 | pixmap().drawable()); |
180 | 203 | used = true; | |
181 | } else if (m_theme.closePixmap().pixmap().drawable()) { | 204 | } |
182 | // check focus | 205 | } else { // not pressed |
183 | if (!m_listen_to.isFocused() && | 206 | // check focus |
184 | m_theme.closeUnfocusPixmap().pixmap().drawable() != 0) { | 207 | if (!m_listen_to.isFocused()) { |
208 | if (m_theme.closeUnfocusPixmap().pixmap().drawable() != 0) { | ||
185 | // not focused | 209 | // not focused |
186 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | 210 | FbTk::FbWindow::setBackgroundPixmap(m_theme. |
187 | closeUnfocusPixmap(). | 211 | closeUnfocusPixmap(). |
188 | pixmap().drawable()); | 212 | pixmap().drawable()); |
189 | } else { // focused | 213 | used = true; |
190 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | ||
191 | closePixmap(). | ||
192 | pixmap().drawable()); | ||
193 | } | 214 | } |
215 | } else if (m_theme.closePixmap().pixmap().drawable() != 0) { // focused | ||
216 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | ||
217 | closePixmap(). | ||
218 | pixmap().drawable()); | ||
219 | used = true; | ||
194 | } | 220 | } |
221 | } | ||
222 | |||
195 | 223 | ||
196 | FbTk::FbWindow::clear(); | 224 | if (used) |
197 | 225 | FbTk::FbWindow::clear(); | |
198 | } else { | 226 | else if (gc() != 0) { // must have valid graphic context |
199 | if (gc() == 0) // must have valid graphic context | 227 | |
200 | return; | ||
201 | drawLine(gc(), | 228 | drawLine(gc(), |
202 | 2, 2, | 229 | 2, 2, |
203 | width() - 3, height() - 3); | 230 | width() - 3, height() - 3); |
@@ -207,28 +234,35 @@ void WinButton::drawType() { | |||
207 | } | 234 | } |
208 | break; | 235 | break; |
209 | case SHADE: | 236 | case SHADE: |
210 | if (m_theme.shadePixmap().pixmap().drawable() != 0) { | 237 | |
211 | if (pressed()) { | 238 | if (pressed()) { |
239 | if (m_theme.shadePressedPixmap().pixmap().drawable()) { | ||
212 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | 240 | FbTk::FbWindow::setBackgroundPixmap(m_theme. |
213 | shadePressedPixmap(). | 241 | shadePressedPixmap(). |
214 | pixmap().drawable()); | 242 | pixmap().drawable()); |
215 | } else if (m_theme.shadePixmap().pixmap().drawable()) { | 243 | used = true; |
216 | // check focus | 244 | } |
217 | if (!m_listen_to.isFocused() && | 245 | } else { // not pressed |
218 | m_theme.shadeUnfocusPixmap().pixmap().drawable() != 0) { | 246 | // check focus |
247 | if (!m_listen_to.isFocused()) { | ||
248 | if ( m_theme.shadeUnfocusPixmap().pixmap().drawable() != 0) { | ||
219 | // not focused | 249 | // not focused |
220 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | 250 | FbTk::FbWindow::setBackgroundPixmap(m_theme. |
221 | shadeUnfocusPixmap(). | 251 | shadeUnfocusPixmap(). |
222 | pixmap().drawable()); | 252 | pixmap().drawable()); |
223 | } else { // focused | 253 | used = true; |
224 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | ||
225 | shadePixmap(). | ||
226 | pixmap().drawable()); | ||
227 | } | 254 | } |
255 | } else if (m_theme.shadePixmap().pixmap().drawable() != 0) { // focused | ||
256 | FbTk::FbWindow::setBackgroundPixmap(m_theme. | ||
257 | shadePixmap(). | ||
258 | pixmap().drawable()); | ||
259 | used = true; | ||
228 | } | 260 | } |
229 | |||
230 | FbTk::FbWindow::clear(); | ||
231 | } | 261 | } |
262 | |||
263 | |||
264 | FbTk::FbWindow::clear(); | ||
265 | |||
232 | break; | 266 | break; |
233 | } | 267 | } |
234 | } | 268 | } |