]> icculus.org git repositories - mikachu/openbox.git/blob - otk/button.cc
use the same alogo to pick a color in allocateColor as in reduceDepth, break it off...
[mikachu/openbox.git] / otk / button.cc
1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
2
3 #include "config.h"
4
5 #include "button.hh"
6
7 namespace otk {
8
9 Button::Button(Widget *parent)
10   : Label(parent),
11     _pressed(false)
12 {
13   setHorizontalJustify(RenderStyle::CenterJustify);
14   setVerticalJustify(RenderStyle::CenterJustify);
15   styleChanged(*RenderStyle::style(screen()));
16 }
17
18 Button::~Button()
19 {
20 }
21
22 void Button::press(unsigned int mouse_button)
23 {
24   if (_pressed) return;
25
26   _pressed = true;
27   _mouse_button = mouse_button;
28
29   styleChanged(*RenderStyle::style(screen()));
30   refresh();
31 }
32
33 void Button::release(unsigned int mouse_button)
34 {
35   if (!_pressed || _mouse_button != mouse_button) return; // wrong button
36
37   _pressed = false;
38
39   styleChanged(*RenderStyle::style(screen()));
40   refresh();
41 }
42
43 void Button::buttonPressHandler(const XButtonEvent &e)
44 {
45   Widget::buttonPressHandler(e);
46   press(e.button);
47 }
48
49 void Button::buttonReleaseHandler(const XButtonEvent &e)
50 {
51   Widget::buttonReleaseHandler(e);
52   release(e.button);
53 }
54
55 void Button::styleChanged(const RenderStyle &style)
56 {
57   if (isHighlighted()) {
58     if (_pressed)
59       _texture = style.buttonPressFocusBackground();
60     else
61       _texture = style.buttonUnpressFocusBackground();
62     _forecolor = style.buttonFocusColor();
63   } else {
64     if (_pressed)
65       _texture = style.buttonPressUnfocusBackground();
66     else
67       _texture = style.buttonUnpressUnfocusBackground();
68     _forecolor = style.buttonUnfocusColor();
69   }
70   refresh();
71 }
72
73 }