all repos — openbox @ 99cd843fc6dc7a7f55b6c90fd1162f233853aad2

openbox fork - make it a bit more like ryudo

otk/button.cc (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-

#ifdef HAVE_CONFIG_H
# include "../config.h"
#endif

#include "button.hh"

namespace otk {

Button::Button(Widget *parent)
  : Label(parent), _default(false), _pressed(false)
{
  setHorizontalJustify(RenderStyle::CenterJustify);
  setVerticalJustify(RenderStyle::CenterJustify);
  styleChanged(*RenderStyle::style(screen()));
}

Button::~Button()
{
}

void Button::press(unsigned int mouse_button)
{
  if (_pressed) return;

  _pressed = true;
  _mouse_button = mouse_button;

  styleChanged(*RenderStyle::style(screen()));
  refresh();
}

void Button::release(unsigned int mouse_button)
{
  if (!_pressed || _mouse_button != mouse_button) return; // wrong button

  _pressed = false;

  styleChanged(*RenderStyle::style(screen()));
  refresh();
}

void Button::buttonPressHandler(const XButtonEvent &e)
{
  Widget::buttonPressHandler(e);
  press(e.button);
}

void Button::buttonReleaseHandler(const XButtonEvent &e)
{
  Widget::buttonReleaseHandler(e);
  release(e.button);
}

void Button::setDefault(bool d)
{
  _default = d;
  styleChanged(*RenderStyle::style(screen()));
  refresh();
}

void Button::styleChanged(const RenderStyle &style)
{
  if (_default) {
    if (_pressed)
      _texture = style.buttonPressFocusBackground();
    else
      _texture = style.buttonUnpressFocusBackground();
    _forecolor = style.buttonFocusColor();
  } else {
    if (_pressed)
      _texture = style.buttonPressUnfocusBackground();
    else
      _texture = style.buttonUnpressUnfocusBackground();
    _forecolor = style.buttonUnfocusColor();
  }
  Widget::styleChanged(style);
}

}