MenuWindow now uses the private window_feel "1025", which I guess we'll need to implement server side too, since it behaves differently than B_MODAL_WINDOW_FEEL. Menu items added to a menubar didn't appear immediately, so I forced an Invalidate(). Could be made better, I think.

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10552 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stefano Ceccherini 2004-12-30 13:27:00 +00:00
parent 31e911da16
commit b0d01b5f78
2 changed files with 17 additions and 8 deletions

View File

@ -173,7 +173,8 @@ BMenu::BMenu(BMessage *archive)
} }
BArchivable *BMenu::Instantiate(BMessage *data) BArchivable *
BMenu::Instantiate(BMessage *data)
{ {
if (validate_instantiation(data, "BMenu")) if (validate_instantiation(data, "BMenu"))
return new BMenu(data); return new BMenu(data);
@ -872,7 +873,7 @@ BMenu::ScreenLocation()
point = superItem->Frame().LeftBottom() + BPoint(0.0f, 1.0f); point = superItem->Frame().LeftBottom() + BPoint(0.0f, 1.0f);
superMenu->ConvertToScreen(&point); superMenu->ConvertToScreen(&point);
return point; return point;
} }
@ -1121,10 +1122,11 @@ BMenu::LayoutItems(int32 index)
CalcTriggers(); CalcTriggers();
float width, height; float width, height;
ComputeLayout(index, true, true, &width, &height); ComputeLayout(index, true, true, &width, &height);
ResizeTo(width, height); ResizeTo(width, height);
Invalidate();
} }
@ -1318,9 +1320,13 @@ BMenu::DeleteMenuWindow()
BMenuItem * BMenuItem *
BMenu::HitTestItems(BPoint where, BPoint slop) const BMenu::HitTestItems(BPoint where, BPoint slop) const
{ {
for (int i = 0; i < CountItems(); i++) // TODO: Take "slop" into account ?
if (ItemAt(i)->fBounds.Contains(where)) int32 itemCount = CountItems();
return ItemAt(i); for (int32 i = 0; i < itemCount; i++) {
BMenuItem *item = ItemAt(i);
if (item->fBounds.Contains(where))
return item;
}
return NULL; return NULL;
} }
@ -1345,7 +1351,7 @@ BMenu::CacheFontInfo()
GetFontHeight(&fh); GetFontHeight(&fh);
fAscent = fh.ascent; fAscent = fh.ascent;
fDescent = fh.descent; fDescent = fh.descent;
fFontHeight = (float)ceil(fh.ascent + fh.descent + 0.5f); fFontHeight = (float)ceil(fh.ascent + fh.descent + fh.leading);
} }

View File

@ -30,10 +30,13 @@
#include <MenuWindow.h> #include <MenuWindow.h>
// TODO: taken from Deskbar's WindowMenu.cpp.
// this should go to some private header.
const window_feel kMenuWindowFeel = (window_feel)1025;
BMenuWindow::BMenuWindow(BRect frame, BMenu *menu) BMenuWindow::BMenuWindow(BRect frame, BMenu *menu)
: :
BWindow(frame, "Menu", B_NO_BORDER_WINDOW_LOOK, B_MODAL_APP_WINDOW_FEEL, BWindow(frame, "Menu", B_NO_BORDER_WINDOW_LOOK, kMenuWindowFeel,
B_NOT_ZOOMABLE) B_NOT_ZOOMABLE)
{ {
fMenu = menu; fMenu = menu;