X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Fbutton.cc;h=bc994b2fc0a4b5f3c3ea47f4a63bed24e3932fd5;hb=0dcbf985c11c850b30b2983e1e20cd8cf033f054;hp=c88fc707c3fa631657ba8e4cd71d792d004ca42f;hpb=cbf9dd0c4c8669392d9c7c8461d1af411f0ab0a4;p=chaz%2Fopenbox diff --git a/otk/button.cc b/otk/button.cc index c88fc707..bc994b2f 100644 --- a/otk/button.cc +++ b/otk/button.cc @@ -1,31 +1,80 @@ +// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- + +#ifdef HAVE_CONFIG_H +# include "../config.h" +#endif + #include "button.hh" namespace otk { -OtkButton::OtkButton(OtkWidget *parent) - : OtkWidget(parent), _text(""), _pressed(false), - _unfocus_tx(OtkWidget::getStyle()->getButtonUnfocus()) +Button::Button(Widget *parent) + : FocusLabel(parent), _pressed(false), _pressed_focus_tx(0), + _pressed_unfocus_tx(0), _unpr_focus_tx(0), _unpr_unfocus_tx(0) { } -OtkButton::~OtkButton() +Button::~Button() { +} + +void Button::setStyle(Style *style) +{ + FocusLabel::setStyle(style); + + setTexture(style->getButtonFocus()); + setUnfocusTexture(style->getButtonUnfocus()); + _pressed_focus_tx = style->getButtonPressedFocus(); + _pressed_unfocus_tx = style->getButtonPressedUnfocus(); } -void OtkButton::setText(const std::string &text) + +void Button::press(unsigned int mouse_button) { - std::string a = text; + if (_pressed) return; + + if (_pressed_focus_tx) + FocusWidget::setTexture(_pressed_focus_tx); + if (_pressed_unfocus_tx) + FocusWidget::setUnfocusTexture(_pressed_unfocus_tx); + _pressed = true; + _mouse_button = mouse_button; } -void OtkButton::press(void) +void Button::release(unsigned int mouse_button) { + if (_mouse_button != mouse_button) return; // wrong button + FocusWidget::setTexture(_unpr_focus_tx); + FocusWidget::setUnfocusTexture(_unpr_unfocus_tx); + _pressed = false; } -void OtkButton::release(void) +void Button::setTexture(Texture *texture) { + FocusWidget::setTexture(texture); + _unpr_focus_tx = texture; +} +void Button::setUnfocusTexture(Texture *texture) +{ + FocusWidget::setUnfocusTexture(texture); + _unpr_unfocus_tx = texture; +} + +void Button::buttonPressHandler(const XButtonEvent &e) +{ + press(e.button); + update(); + FocusWidget::buttonPressHandler(e); +} + +void Button::buttonReleaseHandler(const XButtonEvent &e) +{ + release(e.button); + update(); + FocusWidget::buttonReleaseHandler(e); } }