]> Dogcows Code - chaz/openbox/blob - otk/button.cc
formatting
[chaz/openbox] / 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 : Label(parent), _default(false), _pressed(false)
13 {
14 setHorizontalJustify(RenderStyle::CenterJustify);
15 setVerticalJustify(RenderStyle::CenterJustify);
16 styleChanged(*RenderStyle::style(screen()));
17 }
18
19 Button::~Button()
20 {
21 }
22
23 void Button::press(unsigned int mouse_button)
24 {
25 if (_pressed) return;
26
27 _pressed = true;
28 _mouse_button = mouse_button;
29
30 styleChanged(*RenderStyle::style(screen()));
31 refresh();
32 }
33
34 void Button::release(unsigned int mouse_button)
35 {
36 if (!_pressed || _mouse_button != mouse_button) return; // wrong button
37
38 _pressed = false;
39
40 styleChanged(*RenderStyle::style(screen()));
41 refresh();
42 }
43
44 void Button::buttonPressHandler(const XButtonEvent &e)
45 {
46 Widget::buttonPressHandler(e);
47 press(e.button);
48 }
49
50 void Button::buttonReleaseHandler(const XButtonEvent &e)
51 {
52 Widget::buttonReleaseHandler(e);
53 release(e.button);
54 }
55
56 void Button::setDefault(bool d)
57 {
58 _default = d;
59 styleChanged(*RenderStyle::style(screen()));
60 refresh();
61 }
62
63 void Button::styleChanged(const RenderStyle &style)
64 {
65 if (_default) {
66 if (_pressed)
67 _texture = style.buttonPressFocusBackground();
68 else
69 _texture = style.buttonUnpressFocusBackground();
70 _forecolor = style.buttonFocusColor();
71 } else {
72 if (_pressed)
73 _texture = style.buttonPressUnfocusBackground();
74 else
75 _texture = style.buttonUnpressUnfocusBackground();
76 _forecolor = style.buttonUnfocusColor();
77 }
78 Widget::styleChanged(style);
79 }
80
81 }
This page took 0.035719 seconds and 4 git commands to generate.