inline void TabMenuDisplay::PaintMainMenuBorder(Canvas &canvas) const { PixelRect rc = GetMainMenuButtonSize(0); rc.bottom = GetMainMenuButtonSize(GetNumMainMenuItems() - 1).bottom; rc.Grow(GetTabLineHeight()); canvas.DrawFilledRectangle(rc, COLOR_BLACK); }
inline void TabMenuDisplay::PaintMainMenuItems(Canvas &canvas, const unsigned CaptionStyle) const { PaintMainMenuBorder(canvas); const bool is_focused = !HasCursorKeys() || HasFocus(); unsigned main_menu_index = 0; for (auto i = main_menu_buttons.begin(), end = main_menu_buttons.end(); i != end; ++i, ++main_menu_index) { const bool isDown = main_menu_index == down_index.main_index && !down_index.IsSub() && !drag_off_button; const bool is_selected = isDown || main_menu_index == GetPageMainIndex(cursor); canvas.SetTextColor(look.list.GetTextColor(is_selected, is_focused, isDown)); canvas.SetBackgroundColor(look.list.GetBackgroundColor(is_selected, is_focused, isDown)); const PixelRect &rc = GetMainMenuButtonSize(main_menu_index); TabDisplay::PaintButton(canvas, CaptionStyle, gettext(GetGroupCaption(main_menu_index)), rc, nullptr, isDown, false); } }
inline const PixelRect & TabMenuDisplay::GetButtonPosition(MenuTabIndex i) const { assert(!i.IsNone()); return i.IsMain() ? GetMainMenuButtonSize(i.main_index) : GetSubMenuButtonSize(GetPageNum(i)); }
TabMenuControl::MenuTabIndex TabMenuControl::IsPointOverButton(RasterPoint Pos, unsigned mainIndex) const { // scan main menu buttons for (unsigned i = 0; i < GetNumMainMenuItems(); i++) if (GetMainMenuButtonSize(i).IsInside(Pos)) return MenuTabIndex(i); // scan visible submenu if (mainIndex < GetNumMainMenuItems()) { const MainMenuButton &main_button = GetMainMenuButton(mainIndex); for (unsigned i = main_button.first_page_index; i <= main_button.last_page_index; ++i) { if (GetSubMenuButtonSize(i).IsInside(Pos)) return MenuTabIndex(mainIndex, i - main_button.first_page_index); } } return MenuTabIndex::None(); }