diff options
Diffstat (limited to 'otk/focuswidget.cc')
| -rw-r--r-- | otk/focuswidget.cc | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/otk/focuswidget.cc b/otk/focuswidget.cc new file mode 100644 index 00000000..22dd8757 --- /dev/null +++ b/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; +} + +} |
