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