]> git.saurik.com Git - wxWidgets.git/blobdiff - src/univ/menu.cpp
New positioning code, eliminating a lot of extra, unnecessary methods
[wxWidgets.git] / src / univ / menu.cpp
index b72b959215b10230476b8bba069826ae178968e1..e5bf6a9e66d299344596545217dd711cd36173a5 100644 (file)
@@ -98,7 +98,7 @@ private:
     {
         wxSize size;
         wxClientDC dc(menubar);
     {
         wxSize size;
         wxClientDC dc(menubar);
-        dc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
+        dc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
         dc.GetTextExtent(m_label, &size.x, &size.y);
 
         // adjust for the renderer we use and store the width
         dc.GetTextExtent(m_label, &size.x, &size.y);
 
         // adjust for the renderer we use and store the width
@@ -352,14 +352,9 @@ void wxPopupMenuWindow::ChangeCurrent(wxMenuItemList::Node *node)
 
 wxMenuItemList::Node *wxPopupMenuWindow::GetPrevNode() const
 {
 
 wxMenuItemList::Node *wxPopupMenuWindow::GetPrevNode() const
 {
-    wxMenuItemList::Node *node = m_nodeCurrent;
-    if ( !node )
-    {
-        // start from the end if no current item
-        node = m_menu->GetMenuItems().GetLast();
-    }
-
-    return GetPrevNode(node);
+    // return the last node if there had been no previously selected one
+    return m_nodeCurrent ? GetPrevNode(m_nodeCurrent)
+                         : m_menu->GetMenuItems().GetLast();
 }
 
 wxMenuItemList::Node *
 }
 
 wxMenuItemList::Node *
@@ -380,14 +375,9 @@ wxPopupMenuWindow::GetPrevNode(wxMenuItemList::Node *node) const
 
 wxMenuItemList::Node *wxPopupMenuWindow::GetNextNode() const
 {
 
 wxMenuItemList::Node *wxPopupMenuWindow::GetNextNode() const
 {
-    wxMenuItemList::Node *node = m_nodeCurrent;
-    if ( !node )
-    {
-        // start from the beginning if no current item
-        node = m_menu->GetMenuItems().GetFirst();
-    }
-
-    return GetNextNode(node);
+    // return the first node if there had been no previously selected one
+    return m_nodeCurrent ? GetNextNode(m_nodeCurrent)
+                         : m_menu->GetMenuItems().GetFirst();
 }
 
 wxMenuItemList::Node *
 }
 
 wxMenuItemList::Node *
@@ -530,7 +520,7 @@ void wxPopupMenuWindow::DoDraw(wxControlRenderer *renderer)
     // never partially covered as it is always on top of everything
 
     wxDC& dc = renderer->GetDC();
     // never partially covered as it is always on top of everything
 
     wxDC& dc = renderer->GetDC();
-    dc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
+    dc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
 
     // FIXME: this should be done in the renderer, however when it is fixed
     //        wxPopupMenuWindow::RefreshItem() should be changed too!
 
     // FIXME: this should be done in the renderer, however when it is fixed
     //        wxPopupMenuWindow::RefreshItem() should be changed too!
@@ -1547,7 +1537,7 @@ void wxMenuBar::Attach(wxFrame *frame)
 
         SetCursor(wxCURSOR_ARROW);
 
 
         SetCursor(wxCURSOR_ARROW);
 
-        SetFont(wxSystemSettings::GetSystemFont(wxSYS_SYSTEM_FONT));
+        SetFont(wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT));
 
         // calculate and set our height (it won't be changed any more)
         SetSize(-1, GetBestSize().y);
 
         // calculate and set our height (it won't be changed any more)
         SetSize(-1, GetBestSize().y);
@@ -1715,7 +1705,7 @@ void wxMenuBar::RefreshItem(size_t pos)
 void wxMenuBar::DoDraw(wxControlRenderer *renderer)
 {
     wxDC& dc = renderer->GetDC();
 void wxMenuBar::DoDraw(wxControlRenderer *renderer)
 {
     wxDC& dc = renderer->GetDC();
-    dc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
+    dc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
 
     // redraw only the items which must be redrawn
 
 
     // redraw only the items which must be redrawn
 
@@ -1800,7 +1790,7 @@ wxSize wxMenuBar::DoGetBestClientSize() const
     if ( GetMenuCount() > 0 )
     {
         wxClientDC dc(wxConstCast(this, wxMenuBar));
     if ( GetMenuCount() > 0 )
     {
         wxClientDC dc(wxConstCast(this, wxMenuBar));
-        dc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
+        dc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
         dc.GetTextExtent(GetLabelTop(0), &size.x, &size.y);
 
         // adjust for the renderer we use
         dc.GetTextExtent(GetLabelTop(0), &size.x, &size.y);
 
         // adjust for the renderer we use
@@ -2295,7 +2285,8 @@ void wxMenuBar::OnDismissMenu(bool dismissMenuBar)
 
 void wxMenuBar::OnDismiss()
 {
 
 void wxMenuBar::OnDismiss()
 {
-    GetCapture()->ReleaseMouse();
+    if ( GetCapture() )
+        GetCapture()->ReleaseMouse();
 
     if ( m_current != -1 )
     {
 
     if ( m_current != -1 )
     {