Override puaComboBox recalc_bbox, ignore the popup-menu
This commit is contained in:
parent
59a22860ff
commit
2c175f57ae
4 changed files with 38 additions and 2 deletions
|
@ -818,6 +818,7 @@ void ScrolledWaypointList::setScrollPercent(float v)
|
||||||
void ScrolledWaypointList::setSize(int w, int h)
|
void ScrolledWaypointList::setSize(int w, int h)
|
||||||
{
|
{
|
||||||
updateWantsScroll(w, h);
|
updateWantsScroll(w, h);
|
||||||
|
puGroup::setSize(w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScrolledWaypointList::updateWantsScroll(int w, int h)
|
void ScrolledWaypointList::updateWantsScroll(int w, int h)
|
||||||
|
|
|
@ -1376,4 +1376,36 @@ int fgComboBox::checkHit(int b, int up, int x, int y)
|
||||||
return r;
|
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
|
// end of dialog.cxx
|
||||||
|
|
|
@ -266,8 +266,11 @@ public:
|
||||||
|
|
||||||
void update();
|
void update();
|
||||||
|
|
||||||
|
virtual void setSize(int w, int h);
|
||||||
|
|
||||||
virtual int checkHit(int b, int up, int x, int y);
|
virtual int checkHit(int b, int up, int x, int y);
|
||||||
|
|
||||||
|
virtual void recalc_bbox();
|
||||||
private:
|
private:
|
||||||
bool _inHit;
|
bool _inHit;
|
||||||
};
|
};
|
||||||
|
|
|
@ -80,7 +80,7 @@ void LayoutWidget::calcPrefSize(int* w, int* h)
|
||||||
if(getBool("vertical")) *w = 4*UNIT;
|
if(getBool("vertical")) *w = 4*UNIT;
|
||||||
else *h = 4*UNIT;
|
else *h = 4*UNIT;
|
||||||
} else if (isType("list") || isType("airport-list")
|
} else if (isType("list") || isType("airport-list")
|
||||||
|| isType("property-list") || isType("dial")) {
|
|| isType("property-list") || isType("dial") || isType("waypointlist")) {
|
||||||
*w = *h = 12*UNIT;
|
*w = *h = 12*UNIT;
|
||||||
} else if (isType("hrule")) {
|
} else if (isType("hrule")) {
|
||||||
*h = 1;
|
*h = 1;
|
||||||
|
|
Loading…
Add table
Reference in a new issue