]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/ownerdrw.cpp
fixed wxToolBar::DeleteTool and losing the rows number on sys colour change
[wxWidgets.git] / src / msw / ownerdrw.cpp
index b23fb671e2c7d4901f9f67a3be8eed8082a5b4f4..dc65344eef7805e83d85400970666596f156410e 100644 (file)
@@ -71,18 +71,44 @@ size_t wxOwnerDrawn::ms_nLastMarginWidth = ms_nDefaultMarginWidth;
 bool wxOwnerDrawn::OnMeasureItem(size_t *pwidth, size_t *pheight)
 {
   wxMemoryDC dc;
 bool wxOwnerDrawn::OnMeasureItem(size_t *pwidth, size_t *pheight)
 {
   wxMemoryDC dc;
-  dc.SetFont(GetFont());
 
   wxString str = wxStripMenuCodes(m_strName);
 
   // # without this menu items look too tightly packed (at least under Windows)
   str += wxT('W'); // 'W' is typically the widest letter
 
 
   wxString str = wxStripMenuCodes(m_strName);
 
   // # without this menu items look too tightly packed (at least under Windows)
   str += wxT('W'); // 'W' is typically the widest letter
 
+  if (m_font.Ok())
+      dc.SetFont(GetFont());
+
   dc.GetTextExtent(str, (long *)pwidth, (long *)pheight);
 
   // JACS: items still look too tightly packed, so adding 2 pixels.
   (*pheight) = (*pheight) + 2;
 
   dc.GetTextExtent(str, (long *)pwidth, (long *)pheight);
 
   // JACS: items still look too tightly packed, so adding 2 pixels.
   (*pheight) = (*pheight) + 2;
 
+  // Ray Gilbert's changes - Corrects the problem of a BMP
+  // being placed next to text in a menu item, and the BMP does
+  // not match the size expected by the system.  This will 
+  // resize the space so the BMP will fit.  Without this, BMPs
+  // must be no larger or smaller than 16x16.
+  if (m_bmpChecked.Ok())
+  {
+      // Is BMP height larger then text height?
+      size_t adjustedHeight = m_bmpChecked.GetHeight() +
+                              wxSystemSettings::GetSystemMetric(wxSYS_EDGE_Y);
+      if (*pheight < adjustedHeight)
+          *pheight = adjustedHeight;
+      
+      // Does BMP encroach on default check menu position?
+      size_t adjustedWidth = m_bmpChecked.GetWidth() +
+                             (wxSystemSettings::GetSystemMetric(wxSYS_EDGE_X) * 2);
+      if (ms_nDefaultMarginWidth < adjustedWidth)
+          *pwidth += adjustedWidth - ms_nDefaultMarginWidth;
+      
+      // Do we need to widen margin to fit BMP?
+      if ((size_t)GetMarginWidth() < adjustedWidth)
+          SetMarginWidth(adjustedWidth);
+  }
+  
   m_nHeight = *pheight;                // remember height for use in OnDrawItem
 
   return TRUE;
   m_nHeight = *pheight;                // remember height for use in OnDrawItem
 
   return TRUE;
@@ -223,9 +249,13 @@ bool wxOwnerDrawn::OnDrawItem(wxDC& dc, const wxRect& rc, wxODAction act, wxODSt
       // there should be enough place!
       wxASSERT((nBmpWidth <= rc.GetWidth()) && (nBmpHeight <= rc.GetHeight()));
 
       // there should be enough place!
       wxASSERT((nBmpWidth <= rc.GetWidth()) && (nBmpHeight <= rc.GetHeight()));
 
+      int heightDiff = (m_nHeight - nBmpHeight);
+//      if (heightDiff = -1)
+//        heightDiff = -2;
+
       //MT: blit with mask enabled.
       dc.Blit(rc.x + (GetMarginWidth() - nBmpWidth) / 2, 
       //MT: blit with mask enabled.
       dc.Blit(rc.x + (GetMarginWidth() - nBmpWidth) / 2, 
-              rc.y + (m_nHeight - nBmpHeight) /2, 
+              rc.y + heightDiff / 2, 
               nBmpWidth, nBmpHeight, 
               &dcMem, 0, 0, wxCOPY, TRUE);
 
               nBmpWidth, nBmpHeight, 
               &dcMem, 0, 0, wxCOPY, TRUE);