Adjust menu field's menu bar height in auto mode

On IRC diver pointed out to me that KeymapSwitcher had a menu field that
was drawing as just a line since my recent change to BMenuField. I did a
little research and discovered that this was because the menu field in
KeymapSwitch was not using the layout APIs and it's frame rect was set to
0 height.

I did a little more research and experimented with menu fields in
BeOS R5. I discovered that in R5 if the menu field is set to auto-size
mode then the menu bar inside ignores the height of the menu field frame
and uses the BMenuBar's preferred height instead.

So, I adjusted the BMenuField code in Haiku accordingly. This should make
Haiku match the behavior of BeOS R5 in auto-size mode. For fixed-size mode
it should also work the same, although some more testing is needed to
see if there are any regressions there.
This commit is contained in:
John Scipione 2013-05-15 19:44:52 -04:00
parent ad6158096c
commit 01636e8f2a

View File

@ -11,6 +11,8 @@
#include <BMCPrivate.h>
#include <algorithm>
#include <ControlLook.h>
#include <LayoutUtils.h>
#include <MenuField.h>
@ -137,10 +139,16 @@ _BMCMenuBar_::AttachedToWindow()
void
_BMCMenuBar_::Draw(BRect updateRect)
{
if (fFixedSize || Bounds().Width() > fMenuField->_MenuBarWidth()) {
// Set the width of the menu bar because the menu bar bounds have
// been expanded by the selected menu item.
// Set the width of the menu bar because the menu bar bounds may have
// been expanded by the selected menu item.
if (fFixedSize)
ResizeTo(fMenuField->_MenuBarWidth(), Bounds().Height());
else {
// For compatability with BeOS R5 set the height to the preferred height
// in auto-size mode ignoring the height of the menu field.
float height;
BMenuBar::GetPreferredSize(NULL, &height);
ResizeTo(std::min(Bounds().Width(), fMenuField->_MenuBarWidth()), height);
}
BRect rect(Bounds());
rgb_color base = ui_color(B_MENU_BACKGROUND_COLOR);