1
0
Fork 0

Override puaComboBox recalc_bbox, ignore the popup-menu

This commit is contained in:
James Turner 2010-12-07 10:33:14 +00:00
parent 59a22860ff
commit 2c175f57ae
4 changed files with 38 additions and 2 deletions

View file

@ -818,6 +818,7 @@ void ScrolledWaypointList::setScrollPercent(float v)
void ScrolledWaypointList::setSize(int w, int h)
{
updateWantsScroll(w, h);
puGroup::setSize(w, h);
}
void ScrolledWaypointList::updateWantsScroll(int w, int h)

View file

@ -1376,4 +1376,36 @@ int fgComboBox::checkHit(int b, int up, int x, int y)
return r;
}
void fgComboBox::setSize(int w, int h)
{
puaComboBox::setSize(w, h);
recalc_bbox();
}
void fgComboBox::recalc_bbox()
{
// bug-fix for issue #192
// http://code.google.com/p/flightgear-bugs/issues/detail?id=192
// puaComboBox is including the height of its popupMenu in the height
// computation, which breaks layout computations.
// this implementation skips popup-menus
puBox contents;
contents.empty();
for (puObject *bo = dlist; bo != NULL; bo = bo -> getNextObject()) {
if (bo->getType() & PUCLASS_POPUPMENU) {
continue;
}
contents.extend (bo -> getBBox()) ;
}
abox.max[0] = abox.min[0] + contents.max[0] ;
abox.max[1] = abox.min[1] + contents.max[1] ;
puObject::recalc_bbox () ;
}
// end of dialog.cxx

View file

@ -266,8 +266,11 @@ public:
void update();
virtual void setSize(int w, int h);
virtual int checkHit(int b, int up, int x, int y);
virtual void recalc_bbox();
private:
bool _inHit;
};

View file

@ -80,7 +80,7 @@ void LayoutWidget::calcPrefSize(int* w, int* h)
if(getBool("vertical")) *w = 4*UNIT;
else *h = 4*UNIT;
} else if (isType("list") || isType("airport-list")
|| isType("property-list") || isType("dial")) {
|| isType("property-list") || isType("dial") || isType("waypointlist")) {
*w = *h = 12*UNIT;
} else if (isType("hrule")) {
*h = 1;