X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Fbutton.cc;h=f068d5a5edd03a38cde7a3432df9a7cb24c73b03;hb=213df2814b002da2c5f324210d44559f9d651e21;hp=c70511fc3b98e6c6bb88bbcd56c6407250f42e7c;hpb=a612136ba51c87014e4fba0167aad77bbfdaa753;p=chaz%2Fopenbox diff --git a/otk/button.cc b/otk/button.cc index c70511fc..f068d5a5 100644 --- a/otk/button.cc +++ b/otk/button.cc @@ -1,81 +1,75 @@ // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- -#ifdef HAVE_CONFIG_H -# include "../config.h" -#endif +#include "config.h" #include "button.hh" namespace otk { Button::Button(Widget *parent) - : FocusLabel(parent), _pressed(false), _pressed_focus_tx(0), - _pressed_unfocus_tx(0), _unpr_focus_tx(0), _unpr_unfocus_tx(0) + : Label(parent), + _pressed(false) { - setStyle(_style); + setHorizontalJustify(RenderStyle::CenterJustify); + setVerticalJustify(RenderStyle::CenterJustify); + styleChanged(*RenderStyle::style(screen())); } Button::~Button() { } - -void Button::setStyle(RenderStyle *style) -{ - FocusLabel::setStyle(style); - - setTexture(style->buttonUnpressFocusBackground()); - setUnfocusTexture(style->buttonUnpressUnfocusBackground()); - _pressed_focus_tx = style->buttonPressFocusBackground(); - _pressed_unfocus_tx = style->buttonPressUnfocusBackground(); -} - - void Button::press(unsigned int mouse_button) { if (_pressed) return; - if (_pressed_unfocus_tx) - FocusWidget::setUnfocusTexture(_pressed_unfocus_tx); - if (_pressed_focus_tx) - FocusWidget::setTexture(_pressed_focus_tx); _pressed = true; _mouse_button = mouse_button; + + styleChanged(*RenderStyle::style(screen())); + refresh(); } void Button::release(unsigned int mouse_button) { - if (_mouse_button != mouse_button) return; // wrong button + if (!_pressed || _mouse_button != mouse_button) return; // wrong button - FocusWidget::setUnfocusTexture(_unpr_unfocus_tx); - FocusWidget::setTexture(_unpr_focus_tx); _pressed = false; -} -void Button::setTexture(RenderTexture *texture) -{ - FocusWidget::setTexture(texture); - _unpr_focus_tx = texture; -} + styleChanged(*RenderStyle::style(screen())); + refresh(); -void Button::setUnfocusTexture(RenderTexture *texture) -{ - FocusWidget::setUnfocusTexture(texture); - _unpr_unfocus_tx = texture; + clickHandler(_mouse_button); } void Button::buttonPressHandler(const XButtonEvent &e) { + Widget::buttonPressHandler(e); press(e.button); - update(); - FocusWidget::buttonPressHandler(e); } void Button::buttonReleaseHandler(const XButtonEvent &e) { + Widget::buttonReleaseHandler(e); release(e.button); - update(); - FocusWidget::buttonReleaseHandler(e); +} + +void Button::styleChanged(const RenderStyle &style) +{ + if (isHighlighted()) { + 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(); + } + refresh(); } }