| Index: chrome/views/controls/menu/menu.cc
|
| ===================================================================
|
| --- chrome/views/controls/menu/menu.cc (revision 14343)
|
| +++ chrome/views/controls/menu/menu.cc (working copy)
|
| @@ -112,6 +112,9 @@
|
| GetSystemMetrics(SM_CXMENUCHECK);
|
| if (data->submenu)
|
| lpmis->itemWidth += kArrowWidth;
|
| + // If the label contains an accelerator, make room for tab.
|
| + if (data->label.find(L'\t') != std::wstring::npos)
|
| + lpmis->itemWidth += font.GetStringWidth(L" ");
|
| lpmis->itemHeight = font.height() + kItemBottomMargin + kItemTopMargin;
|
| } else {
|
| // Measure separator size.
|
| @@ -139,7 +142,6 @@
|
| if (lpdis->itemData) {
|
| Menu::ItemData* data =
|
| reinterpret_cast<Menu::ItemData*>(lpdis->itemData);
|
| - wchar_t* str = const_cast<wchar_t*>(data->label.c_str());
|
|
|
| // Draw the background.
|
| HBRUSH hbr = CreateSolidBrush(GetBkColor(hDC));
|
| @@ -149,16 +151,39 @@
|
| // Draw the label.
|
| RECT rect = lpdis->rcItem;
|
| rect.top += kItemTopMargin;
|
| + // Should we add kIconWidth only when icon.width() != 0 ?
|
| rect.left += kItemLeftMargin + kIconWidth;
|
| - UINT format = DT_TOP | DT_LEFT | DT_SINGLELINE;
|
| + rect.right -= kItemRightMargin;
|
| + UINT format = DT_TOP | DT_SINGLELINE;
|
| // Check whether the mnemonics should be underlined.
|
| BOOL underline_mnemonics;
|
| SystemParametersInfo(SPI_GETKEYBOARDCUES, 0, &underline_mnemonics, 0);
|
| if (!underline_mnemonics)
|
| format |= DT_HIDEPREFIX;
|
| - DrawTextEx(hDC, str, static_cast<int>(data->label.size()),
|
| - &rect, format, NULL);
|
| + ChromeFont font;
|
| + HGDIOBJ old_font = static_cast<HFONT>(SelectObject(hDC, font.hfont()));
|
| + int fontsize = font.FontSize();
|
|
|
| + // If an accelerator is specified (with a tab delimiting the rest
|
| + // of the label from the accelerator), we have to justify
|
| + // the fist part on the left and the accelerator on the right.
|
| + // TODO(jungshik): This will break in RTL UI. Currently, he/ar
|
| + // use the window system UI font and will not hit here.
|
| + std::wstring label = data->label;
|
| + std::wstring accel;
|
| + std::wstring::size_type tab_pos = label.find(L'\t');
|
| + if (tab_pos != std::wstring::npos) {
|
| + accel = label.substr(tab_pos);
|
| + label = label.substr(0, tab_pos);
|
| + }
|
| + DrawTextEx(hDC, const_cast<wchar_t*>(label.data()),
|
| + static_cast<int>(label.size()), &rect, format | DT_LEFT, NULL);
|
| + if (!accel.empty())
|
| + DrawTextEx(hDC, const_cast<wchar_t*>(accel.data()),
|
| + static_cast<int>(accel.size()), &rect,
|
| + format | DT_RIGHT, NULL);
|
| + SelectObject(hDC, old_font);
|
| +
|
| // Draw the icon after the label, otherwise it would be covered
|
| // by the label.
|
| if (data->icon.width() != 0 && data->icon.height() != 0) {
|
| @@ -219,7 +244,7 @@
|
| anchor_(anchor),
|
| owner_(owner),
|
| is_menu_visible_(false),
|
| - owner_draw_(false) {
|
| + owner_draw_(l10n_util::NeedOverrideDefaultUIFont(NULL, NULL)) {
|
| DCHECK(delegate_);
|
| }
|
|
|
| @@ -229,7 +254,7 @@
|
| anchor_(parent->anchor_),
|
| owner_(parent->owner_),
|
| is_menu_visible_(false),
|
| - owner_draw_(false) {
|
| + owner_draw_(parent->owner_draw_) {
|
| }
|
|
|
| Menu::Menu(HMENU hmenu)
|
|
|
| Property changes on: chrome\views\controls\menu\menu.cc
|
| ___________________________________________________________________
|
| Modified: svn:mergeinfo
|
| Merged /trunk/src/chrome/views/controls/menu/menu.cc:r13773
|
|
|
|
|