all repos — openbox @ 09fa1f3a986b0ddf15e1c3669b3545fedf613e8e

openbox fork - make it a bit more like ryudo

initial commit of focus widget
Marius Nita marius@cs.pdx.edu
commit

09fa1f3a986b0ddf15e1c3669b3545fedf613e8e

parent

0da967a8313bad4a9dbcca9b5c760bda32b7981f

2 files changed, 105 insertions(+), 0 deletions(-)

jump to
A otk/focuswidget.cc

@@ -0,0 +1,66 @@

+#include "focuswidget.hh" + +namespace otk { + +OtkFocusWidget::OtkFocusWidget(OtkWidget *parent, Direction direction) + : OtkWidget(parent, direction), _unfocus_texture(0), _focused(true) +{ + _focus_texture = parent->getTexture(); +} + +OtkFocusWidget::OtkFocusWidget(Style *style, Direction direction, + Cursor cursor, int bevel_width) + : OtkWidget(style, direction, cursor, bevel_width), + _unfocus_texture(0), _focused(true) +{ +} + +void OtkFocusWidget::focus(void) +{ + if (_focused) + return; + + assert(_focus_texture); + OtkWidget::setTexture(_focus_texture); + OtkWidget::update(); + + OtkWidget::OtkWidgetList children = OtkWidget::getChildren(); + + OtkWidget::OtkWidgetList::iterator it = children.begin(), + end = children.end(); + + OtkFocusWidget *tmp = 0; + for (; it != end; ++it) { + tmp = dynamic_cast<OtkFocusWidget*>(*it); + if (tmp) tmp->focus(); + } +} + +void OtkFocusWidget::unfocus(void) +{ + if (! _focused) + return; + + assert(_unfocus_texture); + OtkWidget::setTexture(_unfocus_texture); + OtkWidget::update(); + + OtkWidget::OtkWidgetList children = OtkWidget::getChildren(); + + OtkWidget::OtkWidgetList::iterator it = children.begin(), + end = children.end(); + + OtkFocusWidget *tmp = 0; + for (; it != end; ++it) { + tmp = dynamic_cast<OtkFocusWidget*>(*it); + if (tmp) tmp->unfocus(); + } +} + +void OtkFocusWidget::setTexture(BTexture *texture) +{ + OtkWidget::setTexture(texture); + _focus_texture = texture; +} + +}
A otk/focuswidget.hh

@@ -0,0 +1,39 @@

+#ifndef __focuswidget_hh +#define __focuswidget_hh + +#include "widget.hh" + +namespace otk { + +class OtkFocusWidget : public OtkWidget { + +public: + + OtkFocusWidget(OtkWidget *parent, Direction = Horizontal); + OtkFocusWidget(Style *style, Direction direction = Horizontal, + Cursor cursor = 0, int bevel_width = 1); + + virtual void focus(void); + virtual void unfocus(void); + + void setTexture(BTexture *texture); + + inline void setUnfocusTexture(BTexture *texture) + { _unfocus_texture = texture; } + inline BTexture *getUnfocusTexture(void) const + { return _unfocus_texture; } + + inline bool isFocused(void) const { return _focused; } + inline bool isUnfocused(void) const { return !_focused; } + +private: + + BTexture *_unfocus_texture; + BTexture *_focus_texture; + + bool _focused; +}; + +} + +#endif // __focuswidget_hh