stacked cycling menu works now. add a highlighted flag to otk widgets
This commit is contained in:
parent
e72d9d90f9
commit
f51f1c775f
5 changed files with 29 additions and 20 deletions
|
@ -9,8 +9,10 @@
|
|||
namespace otk {
|
||||
|
||||
Button::Button(Widget *parent)
|
||||
: Label(parent), _default(false), _pressed(false)
|
||||
: Label(parent),
|
||||
_pressed(false)
|
||||
{
|
||||
setHighlighted(false);
|
||||
setHorizontalJustify(RenderStyle::CenterJustify);
|
||||
setVerticalJustify(RenderStyle::CenterJustify);
|
||||
styleChanged(*RenderStyle::style(screen()));
|
||||
|
@ -53,16 +55,9 @@ void Button::buttonReleaseHandler(const XButtonEvent &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 (isHighlighted()) {
|
||||
if (_pressed)
|
||||
_texture = style.buttonPressFocusBackground();
|
||||
else
|
||||
|
|
|
@ -12,9 +12,6 @@ public:
|
|||
Button(Widget *parent);
|
||||
virtual ~Button();
|
||||
|
||||
virtual inline bool isDefault() const { return _default; }
|
||||
virtual void setDefault(bool d);
|
||||
|
||||
virtual inline bool isPressed() const { return _pressed; }
|
||||
|
||||
virtual void press(unsigned int mouse_button);
|
||||
|
@ -26,7 +23,6 @@ public:
|
|||
virtual void styleChanged(const RenderStyle &style);
|
||||
|
||||
private:
|
||||
bool _default;
|
||||
bool _pressed;
|
||||
unsigned int _mouse_button;
|
||||
};
|
||||
|
|
19
otk/label.cc
19
otk/label.cc
|
@ -16,7 +16,8 @@ Label::Label(Widget *parent)
|
|||
: Widget(parent),
|
||||
_text(""),
|
||||
_justify_horz(RenderStyle::LeftTopJustify),
|
||||
_justify_vert(RenderStyle::LeftTopJustify)
|
||||
_justify_vert(RenderStyle::LeftTopJustify),
|
||||
_highlight(true)
|
||||
{
|
||||
styleChanged(*RenderStyle::style(screen()));
|
||||
}
|
||||
|
@ -37,6 +38,13 @@ void Label::setVerticalJustify(RenderStyle::Justify j)
|
|||
refresh();
|
||||
}
|
||||
|
||||
void Label::setHighlighted(bool h)
|
||||
{
|
||||
_highlight = h;
|
||||
styleChanged(*RenderStyle::style(screen()));
|
||||
refresh();
|
||||
}
|
||||
|
||||
void Label::setText(const ustring &text)
|
||||
{
|
||||
bool utf = text.utf8();
|
||||
|
@ -77,8 +85,13 @@ void Label::calcDefaultSizes()
|
|||
|
||||
void Label::styleChanged(const RenderStyle &style)
|
||||
{
|
||||
_texture = style.labelFocusBackground();
|
||||
_forecolor = style.textFocusColor();
|
||||
if (_highlight) {
|
||||
_texture = style.labelFocusBackground();
|
||||
_forecolor = style.textFocusColor();
|
||||
} else {
|
||||
_texture = style.labelUnfocusBackground();
|
||||
_forecolor = style.textUnfocusColor();
|
||||
}
|
||||
_font = style.labelFont();
|
||||
Widget::styleChanged(style);
|
||||
calcDefaultSizes();
|
||||
|
|
|
@ -20,6 +20,9 @@ public:
|
|||
inline const ustring& getText(void) const { return _text; }
|
||||
void setText(const ustring &text);
|
||||
|
||||
virtual inline bool isHighlighted() const { return _highlight; }
|
||||
virtual void setHighlighted(bool h);
|
||||
|
||||
RenderStyle::Justify horizontalJustify() const { return _justify_horz; }
|
||||
virtual void setHorizontalJustify(RenderStyle::Justify j);
|
||||
RenderStyle::Justify verticalJustify() const { return _justify_vert; }
|
||||
|
@ -53,6 +56,8 @@ private:
|
|||
RenderStyle::Justify _justify_vert;
|
||||
//! The drawing offset for the text
|
||||
int _drawx;
|
||||
//! If the widget is highlighted or not
|
||||
bool _highlight;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -112,10 +112,10 @@ class _cycledata:
|
|||
w = otk.Label(self.widget)
|
||||
if current and c.window() == current.window():
|
||||
self.menupos = i
|
||||
#w.focus() XXX
|
||||
w.setHighlighted(1)
|
||||
pass
|
||||
else:
|
||||
#w.unfocus() XXX
|
||||
w.setHighlighted(0)
|
||||
pass
|
||||
self.menuwidgets.append(w)
|
||||
|
||||
|
@ -192,7 +192,7 @@ class _cycledata:
|
|||
|
||||
if not len(self.clients): return # don't both doing anything
|
||||
|
||||
#self.menuwidgets[self.menupos].unfocus() XXX
|
||||
self.menuwidgets[self.menupos].setHighlighted(0)
|
||||
if forward:
|
||||
self.menupos += 1
|
||||
else:
|
||||
|
@ -200,7 +200,7 @@ class _cycledata:
|
|||
# wrap around
|
||||
if self.menupos < 0: self.menupos = len(self.clients) - 1
|
||||
elif self.menupos >= len(self.clients): self.menupos = 0
|
||||
#self.menuwidgets[self.menupos].focus() XXX
|
||||
self.menuwidgets[self.menupos].setHighlighted(1)
|
||||
if ACTIVATE_WHILE_CYCLING:
|
||||
self.activatetarget(0) # activate, but dont deiconify/unshade/raise
|
||||
|
||||
|
|
Loading…
Reference in a new issue