- wxMemoryDC dc;
-
- 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);
-
- if (!m_strAccel.IsEmpty())
- {
- // measure the accelerator string, and add it's width to
- // the total item width, plus 16 (Accelerators are right justified,
- // with the right edge of the text rectangle 16 pixels left of
- // the right edge of the menu)
-
- int accel_width, accel_height;
- dc.GetTextExtent(m_strAccel, &accel_width, &accel_height);
- *pwidth += (accel_width + 16);
- }
-
- // JACS: items still look too tightly packed, so adding 5 pixels.
- (*pheight) = (*pheight) + 5;
-
- // 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::GetMetric(wxSYS_EDGE_Y);
- if (*pheight < adjustedHeight)
- *pheight = adjustedHeight;
-
- // Does BMP encroach on default check menu position?
- size_t adjustedWidth = m_bmpChecked.GetWidth() +
- (wxSystemSettings::GetMetric(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);
- }
-
- // make sure that this item is at least as
- // tall as the user's system settings specify
- if (*pheight < m_nMinHeight)
- *pheight = m_nMinHeight;
-
- m_nHeight = *pheight; // remember height for use in OnDrawItem
-
- return TRUE;
-}