a few optimizations to layouts/rendering
This commit is contained in:
parent
503638dbc6
commit
b3a87e3a6f
2 changed files with 26 additions and 37 deletions
|
@ -86,11 +86,9 @@ void Widget::show(bool children)
|
|||
}
|
||||
}
|
||||
if (!_visible) {
|
||||
_visible = true;
|
||||
if (_parent) _parent->calcDefaultSizes();
|
||||
else {
|
||||
resize(_area.size());
|
||||
}
|
||||
else resize(_area.size()); // constrain sizes
|
||||
_visible = true;
|
||||
XMapWindow(**display, _window);
|
||||
update();
|
||||
}
|
||||
|
@ -133,13 +131,14 @@ void Widget::moveresize(const Rect &r)
|
|||
w = std::max(std::min(r.width(), maxSize().width()), minSize().width());
|
||||
h = std::max(std::min(r.height(), maxSize().height()), minSize().height());
|
||||
|
||||
if (r.x() == area().x() && r.y() == area().y() &&
|
||||
w == area().width() && h == area().height()) {
|
||||
bool sizechange = !(w == area().width() && h == area().height());
|
||||
|
||||
if (r.x() == area().x() && r.y() == area().y() && !sizechange)
|
||||
return; // no change, don't cause a big layout chain to occur!
|
||||
}
|
||||
|
||||
internal_moveresize(r.x(), r.y(), w, h);
|
||||
|
||||
if (sizechange)
|
||||
update();
|
||||
}
|
||||
|
||||
|
@ -297,13 +296,10 @@ void Widget::layoutHorz()
|
|||
std::list<Widget*>::iterator it, end;
|
||||
|
||||
// work with just the visible children
|
||||
std::list<Widget*> visible = _children;
|
||||
for (it = visible.begin(), end = visible.end(); it != end;) {
|
||||
std::list<Widget*>::iterator next = it; ++next;
|
||||
if (!(*it)->visible())
|
||||
visible.erase(it);
|
||||
it = next;
|
||||
}
|
||||
std::list<Widget*> visible;
|
||||
for (it = _children.begin(), end = _children.end(); it != end; ++it)
|
||||
if ((*it)->visible())
|
||||
visible.push_back(*it);
|
||||
|
||||
if (visible.empty()) return;
|
||||
|
||||
|
@ -317,16 +313,14 @@ void Widget::layoutHorz()
|
|||
if (free < 0) free = 0;
|
||||
int each;
|
||||
|
||||
std::list<Widget*> adjustable = visible;
|
||||
std::list<Widget*> adjustable;
|
||||
|
||||
// find the 'free' space, and how many children will be using it
|
||||
for (it = adjustable.begin(), end = adjustable.end(); it != end;) {
|
||||
std::list<Widget*>::iterator next = it; ++next;
|
||||
for (it = visible.begin(), end = visible.end(); it != end; ++it) {
|
||||
free -= (*it)->minSize().width();
|
||||
if (free < 0) free = 0;
|
||||
if ((*it)->maxSize().width() - (*it)->minSize().width() <= 0)
|
||||
adjustable.erase(it);
|
||||
it = next;
|
||||
if ((*it)->maxSize().width() - (*it)->minSize().width() > 0)
|
||||
adjustable.push_back(*it);
|
||||
}
|
||||
// some widgets may have max widths that restrict them, find the 'true'
|
||||
// amount of free space after these widgets are not included
|
||||
|
@ -393,13 +387,10 @@ void Widget::layoutVert()
|
|||
std::list<Widget*>::iterator it, end;
|
||||
|
||||
// work with just the visible children
|
||||
std::list<Widget*> visible = _children;
|
||||
for (it = visible.begin(), end = visible.end(); it != end;) {
|
||||
std::list<Widget*>::iterator next = it; ++next;
|
||||
if (!(*it)->visible())
|
||||
visible.erase(it);
|
||||
it = next;
|
||||
}
|
||||
std::list<Widget*> visible;
|
||||
for (it = _children.begin(), end = _children.end(); it != end; ++it)
|
||||
if ((*it)->visible())
|
||||
visible.push_back(*it);
|
||||
|
||||
if (visible.empty()) return;
|
||||
|
||||
|
@ -413,16 +404,14 @@ void Widget::layoutVert()
|
|||
if (free < 0) free = 0;
|
||||
int each;
|
||||
|
||||
std::list<Widget*> adjustable = visible;
|
||||
std::list<Widget*> adjustable;
|
||||
|
||||
// find the 'free' space, and how many children will be using it
|
||||
for (it = adjustable.begin(), end = adjustable.end(); it != end;) {
|
||||
std::list<Widget*>::iterator next = it; ++next;
|
||||
for (it = visible.begin(), end = visible.end(); it != end; ++it) {
|
||||
free -= (*it)->minSize().height();
|
||||
if (free < 0) free = 0;
|
||||
if ((*it)->maxSize().height() - (*it)->minSize().height() <= 0)
|
||||
adjustable.erase(it);
|
||||
it = next;
|
||||
if ((*it)->maxSize().height() - (*it)->minSize().height() > 0)
|
||||
adjustable.push_back(*it);
|
||||
}
|
||||
// some widgets may have max heights that restrict them, find the 'true'
|
||||
// amount of free space after these widgets are not included
|
||||
|
|
|
@ -52,7 +52,7 @@ public:
|
|||
inline bool visible() const { return _visible; }
|
||||
|
||||
virtual void update();
|
||||
virtual void refresh() { _dirty = true; render(); }
|
||||
virtual void refresh() { if (_visible) { _dirty = true; render(); } }
|
||||
|
||||
virtual void setBevel(int b);
|
||||
inline int bevel() const { return _bevel; }
|
||||
|
|
Loading…
Reference in a new issue