/* * Copyright 2006-2015 Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: * Stefano Ceccherini (stefano.ceccherini@gmail.com) */ #ifndef __MENU_PRIVATE_H #define __MENU_PRIVATE_H #include enum menu_states { MENU_STATE_TRACKING = 0, MENU_STATE_TRACKING_SUBMENU = 1, MENU_STATE_KEY_TO_SUBMENU = 2, MENU_STATE_KEY_LEAVE_SUBMENU = 3, MENU_STATE_CLOSED = 5 }; class BBitmap; class BMenu; class BWindow; namespace BPrivate { extern const char* kEmptyMenuLabel; class MenuPrivate { public: MenuPrivate(BMenu* menu); menu_layout Layout() const; void SetLayout(menu_layout layout); void ItemMarked(BMenuItem* item); void CacheFontInfo(); float FontHeight() const; float Ascent() const; BRect Padding() const; void GetItemMargins(float*, float*, float*, float*) const; int State(BMenuItem** item = NULL) const; void Install(BWindow* window); void Uninstall(); void SetSuper(BMenu* menu); void SetSuperItem(BMenuItem* item); void InvokeItem(BMenuItem* item, bool now = false); void QuitTracking(bool thisMenuOnly = true); static status_t CreateBitmaps(); static void DeleteBitmaps(); static const BBitmap* MenuItemShift(); static const BBitmap* MenuItemControl(); static const BBitmap* MenuItemOption(); static const BBitmap* MenuItemCommand(); static const BBitmap* MenuItemMenu(); private: BMenu* fMenu; static BBitmap* sMenuItemShift; static BBitmap* sMenuItemControl; static BBitmap* sMenuItemOption; static BBitmap* sMenuItemAlt; static BBitmap* sMenuItemMenu; }; }; // namespace BPrivate // Note: since sqrt is slow, we don't use it and return the square of the // distance #define square(x) ((x) * (x)) static inline float point_distance(const BPoint &pointA, const BPoint &pointB) { return square(pointA.x - pointB.x) + square(pointA.y - pointB.y); } #undef square #endif // __MENU_PRIVATE_H