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