]> icculus.org git repositories - mikachu/openbox.git/blob - otk/button.cc
new authors. this is how we dooo iiiit...
[mikachu/openbox.git] / otk / button.cc
1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
2
3 #ifdef HAVE_CONFIG_H
4 # include "../config.h"
5 #endif
6
7 #include "button.hh"
8
9 namespace otk {
10
11 Button::Button(Widget *parent)
12   : FocusLabel(parent), _pressed(false), _pressed_focus_tx(0),
13     _pressed_unfocus_tx(0), _unpr_focus_tx(0), _unpr_unfocus_tx(0)
14 {
15 }
16
17 Button::~Button()
18 {
19 }
20
21
22 void Button::setStyle(Style *style)
23 {
24   FocusLabel::setStyle(style);
25   
26   setTexture(style->getButtonFocus());
27   setUnfocusTexture(style->getButtonUnfocus());
28   _pressed_focus_tx = style->getButtonPressedFocus();
29   _pressed_unfocus_tx = style->getButtonPressedUnfocus();
30 }
31
32
33 void Button::press(unsigned int mouse_button)
34 {
35   if (_pressed) return;
36
37   if (_pressed_focus_tx)
38     FocusWidget::setTexture(_pressed_focus_tx);
39   if (_pressed_unfocus_tx)
40     FocusWidget::setUnfocusTexture(_pressed_unfocus_tx);
41   _pressed = true;
42   _mouse_button = mouse_button;
43 }
44
45 void Button::release(unsigned int mouse_button)
46 {
47   if (_mouse_button != mouse_button) return; // wrong button
48
49   FocusWidget::setTexture(_unpr_focus_tx);
50   FocusWidget::setUnfocusTexture(_unpr_unfocus_tx);
51   _pressed = false;
52 }
53
54 void Button::setTexture(Texture *texture)
55 {
56   FocusWidget::setTexture(texture);
57   _unpr_focus_tx = texture;
58 }
59
60 void Button::setUnfocusTexture(Texture *texture)
61 {
62   FocusWidget::setUnfocusTexture(texture);
63   _unpr_unfocus_tx = texture;
64 }
65
66 void Button::buttonPressHandler(const XButtonEvent &e)
67 {
68   press(e.button);
69   update();
70   FocusWidget::buttonPressHandler(e);
71 }
72
73 void Button::buttonReleaseHandler(const XButtonEvent &e)
74 {
75   release(e.button);
76   update();
77   FocusWidget::buttonReleaseHandler(e);
78 }
79
80 }