working popups for moving/resizing
This commit is contained in:
parent
225d4302d0
commit
bb6ac36d41
6 changed files with 77 additions and 4 deletions
|
@ -29,10 +29,37 @@ void FocusLabel::setStyle(RenderStyle *style)
|
||||||
setUnfocusTexture(style->labelUnfocusBackground());
|
setUnfocusTexture(style->labelUnfocusBackground());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FocusLabel::fitString(const std::string &str)
|
||||||
|
{
|
||||||
|
const Font *ft = style()->labelFont();
|
||||||
|
fitSize(ft->measureString(str), ft->height());
|
||||||
|
}
|
||||||
|
|
||||||
|
void FocusLabel::fitSize(int w, int h)
|
||||||
|
{
|
||||||
|
unsigned int sidemargin = style()->bevelWidth() * 2;
|
||||||
|
resize(w + sidemargin * 2, h);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FocusLabel::update()
|
||||||
|
{
|
||||||
|
if (_dirty) {
|
||||||
|
int w = _rect.width(), h = _rect.height();
|
||||||
|
const Font *ft = style()->labelFont();
|
||||||
|
unsigned int sidemargin = style()->bevelWidth() * 2;
|
||||||
|
if (!_fixed_width)
|
||||||
|
w = ft->measureString(_text) + sidemargin * 2;
|
||||||
|
if (!_fixed_height)
|
||||||
|
h = ft->height();
|
||||||
|
internalResize(w, h);
|
||||||
|
}
|
||||||
|
FocusWidget::update();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void FocusLabel::renderForeground()
|
void FocusLabel::renderForeground()
|
||||||
{
|
{
|
||||||
otk::Widget::renderForeground();
|
FocusWidget::renderForeground();
|
||||||
|
|
||||||
const Font *ft = style()->labelFont();
|
const Font *ft = style()->labelFont();
|
||||||
RenderColor *text_color = (isFocused() ? style()->textFocusColor()
|
RenderColor *text_color = (isFocused() ? style()->textFocusColor()
|
||||||
|
|
|
@ -18,6 +18,11 @@ public:
|
||||||
|
|
||||||
virtual void renderForeground();
|
virtual void renderForeground();
|
||||||
|
|
||||||
|
virtual void update();
|
||||||
|
|
||||||
|
void fitString(const std::string &str);
|
||||||
|
void fitSize(int w, int h);
|
||||||
|
|
||||||
virtual void setStyle(RenderStyle *style);
|
virtual void setStyle(RenderStyle *style);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
29
otk/label.cc
29
otk/label.cc
|
@ -25,10 +25,37 @@ void Label::setStyle(RenderStyle *style)
|
||||||
setTexture(style->labelUnfocusBackground());
|
setTexture(style->labelUnfocusBackground());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Label::fitString(const std::string &str)
|
||||||
|
{
|
||||||
|
const Font *ft = style()->labelFont();
|
||||||
|
fitSize(ft->measureString(str), ft->height());
|
||||||
|
}
|
||||||
|
|
||||||
|
void Label::fitSize(int w, int h)
|
||||||
|
{
|
||||||
|
unsigned int sidemargin = style()->bevelWidth() * 2;
|
||||||
|
resize(w + sidemargin * 2, h);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Label::update()
|
||||||
|
{
|
||||||
|
if (_dirty) {
|
||||||
|
int w = _rect.width(), h = _rect.height();
|
||||||
|
const Font *ft = style()->labelFont();
|
||||||
|
unsigned int sidemargin = style()->bevelWidth() * 2;
|
||||||
|
if (!_fixed_width)
|
||||||
|
w = ft->measureString(_text) + sidemargin * 2;
|
||||||
|
if (!_fixed_height)
|
||||||
|
h = ft->height();
|
||||||
|
internalResize(w, h);
|
||||||
|
}
|
||||||
|
Widget::update();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Label::renderForeground(void)
|
void Label::renderForeground(void)
|
||||||
{
|
{
|
||||||
otk::Widget::renderForeground();
|
Widget::renderForeground();
|
||||||
|
|
||||||
const Font *ft = style()->labelFont();
|
const Font *ft = style()->labelFont();
|
||||||
unsigned int sidemargin = style()->bevelWidth() * 2;
|
unsigned int sidemargin = style()->bevelWidth() * 2;
|
||||||
|
|
|
@ -18,6 +18,11 @@ public:
|
||||||
|
|
||||||
virtual void renderForeground(void);
|
virtual void renderForeground(void);
|
||||||
|
|
||||||
|
virtual void update();
|
||||||
|
|
||||||
|
void fitString(const std::string &str);
|
||||||
|
void fitSize(int w, int h);
|
||||||
|
|
||||||
virtual void setStyle(RenderStyle *style);
|
virtual void setStyle(RenderStyle *style);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -203,12 +203,12 @@ def _create_popup_list(data):
|
||||||
t = t[:24] + "..." + t[-24:]
|
t = t[:24] + "..." + t[-24:]
|
||||||
titles.append(t)
|
titles.append(t)
|
||||||
_list_windows.append(c)
|
_list_windows.append(c)
|
||||||
l = font.measureString(t) + 10 # add margin
|
l = font.measureString(t)
|
||||||
if l > longest: longest = l
|
if l > longest: longest = l
|
||||||
if len(titles) > 1:
|
if len(titles) > 1:
|
||||||
for t in titles:
|
for t in titles:
|
||||||
w = otk.FocusLabel(_list_widget)
|
w = otk.FocusLabel(_list_widget)
|
||||||
w.resize(longest, height)
|
w.fitSize(longest, height)
|
||||||
w.setText(t)
|
w.setText(t)
|
||||||
w.unfocus()
|
w.unfocus()
|
||||||
_list_labels.append(w)
|
_list_labels.append(w)
|
||||||
|
|
|
@ -569,6 +569,15 @@ BB @param window The window id that the Client class should handle
|
||||||
//! Returns the window's stacking layer
|
//! Returns the window's stacking layer
|
||||||
inline StackLayer layer() const { return _layer; }
|
inline StackLayer layer() const { return _layer; }
|
||||||
|
|
||||||
|
//! Returns the logical size of the window
|
||||||
|
/*!
|
||||||
|
The "logical" size of the window is refers to the user's perception of the
|
||||||
|
size of the window, and is the value that should be displayed to the user.
|
||||||
|
For example, with xterms, this value it the number of characters being
|
||||||
|
displayed in the terminal, instead of the number of pixels.
|
||||||
|
*/
|
||||||
|
const otk::Point &logicalSize() const { return _logical_size; }
|
||||||
|
|
||||||
//! Applies the states requested when the window mapped
|
//! Applies the states requested when the window mapped
|
||||||
/*!
|
/*!
|
||||||
This should be called only once, during the window mapping process. It
|
This should be called only once, during the window mapping process. It
|
||||||
|
|
Loading…
Reference in a new issue