| Index: chrome/views/chrome_menu.cc
|
| ===================================================================
|
| --- chrome/views/chrome_menu.cc (revision 3391)
|
| +++ chrome/views/chrome_menu.cc (working copy)
|
| @@ -25,6 +25,9 @@
|
| #include "chrome/views/root_view.h"
|
| #include "generated_resources.h"
|
|
|
| +#undef min
|
| +#undef max
|
| +
|
| // Margins between the top of the item and the label.
|
| static const int kItemTopMargin = 3;
|
|
|
| @@ -95,7 +98,7 @@
|
|
|
| // Max width of a menu. There does not appear to be an OS value for this, yet
|
| // both IE and FF restrict the max width of a menu.
|
| -static const LONG kMaxMenuWidth = 400;
|
| +static const int kMaxMenuWidth = 400;
|
|
|
| // Period of the scroll timer (in milliseconds).
|
| static const int kScrollTimerMS = 30;
|
| @@ -167,11 +170,9 @@
|
|
|
| ReleaseDC(NULL, dc);
|
|
|
| - CSize pref;
|
| MenuItemView menu_item(NULL);
|
| menu_item.SetTitle(L"blah"); // Text doesn't matter here.
|
| - menu_item.GetPreferredSize(&pref);
|
| - pref_menu_height = pref.cy;
|
| + pref_menu_height = menu_item.GetPreferredSize().height();
|
| }
|
|
|
| namespace {
|
| @@ -279,9 +280,8 @@
|
| pref_height_(pref_menu_height) {
|
| }
|
|
|
| - virtual void GetPreferredSize(CSize* out) {
|
| - out->cx = kScrollArrowHeight * 2 - 1;
|
| - out->cy = pref_height_;
|
| + virtual gfx::Size GetPreferredSize() {
|
| + return gfx::Size(kScrollArrowHeight * 2 - 1, pref_height_);
|
| }
|
|
|
| virtual bool CanDrop(const OSExchangeData& data) {
|
| @@ -367,10 +367,9 @@
|
| View* child = GetContents();
|
| // Convert y to view's coordinates.
|
| y -= child->y();
|
| - CSize pref;
|
| - child->GetPreferredSize(&pref);
|
| + gfx::Size pref = child->GetPreferredSize();
|
| // Constrain y to make sure we don't show past the bottom of the view.
|
| - y = std::max(0, std::min(static_cast<int>(pref.cy) - this->height(), y));
|
| + y = std::max(0, std::min(pref.height() - this->height(), y));
|
| child->SetY(-y);
|
| }
|
|
|
| @@ -428,34 +427,32 @@
|
| return;
|
| }
|
|
|
| - CSize pref;
|
| - scroll_up_button_->GetPreferredSize(&pref);
|
| - scroll_up_button_->SetBounds(x, y, width, pref.cy);
|
| - content_height -= pref.cy;
|
| + gfx::Size pref = scroll_up_button_->GetPreferredSize();
|
| + scroll_up_button_->SetBounds(x, y, width, pref.height());
|
| + content_height -= pref.height();
|
|
|
| - const int scroll_view_y = y + pref.cy;
|
| + const int scroll_view_y = y + pref.height();
|
|
|
| - scroll_down_button_->GetPreferredSize(&pref);
|
| - scroll_down_button_->SetBounds(x, height() - pref.cy - insets.top(),
|
| - width, pref.cy);
|
| - content_height -= pref.cy;
|
| + pref = scroll_down_button_->GetPreferredSize();
|
| + scroll_down_button_->SetBounds(x, height() - pref.height() - insets.top(),
|
| + width, pref.height());
|
| + content_height -= pref.height();
|
|
|
| scroll_view_->SetBounds(x, scroll_view_y, width, content_height);
|
| scroll_view_->Layout();
|
| }
|
|
|
| virtual void DidChangeBounds(const CRect& previous, const CRect& current) {
|
| - CSize content_pref;
|
| - scroll_view_->GetContents()->GetPreferredSize(&content_pref);
|
| - scroll_up_button_->SetVisible(content_pref.cy > height());
|
| - scroll_down_button_->SetVisible(content_pref.cy > height());
|
| + gfx::Size content_pref = scroll_view_->GetContents()->GetPreferredSize();
|
| + scroll_up_button_->SetVisible(content_pref.height() > height());
|
| + scroll_down_button_->SetVisible(content_pref.height() > height());
|
| }
|
|
|
| - virtual void GetPreferredSize(CSize* out) {
|
| - scroll_view_->GetContents()->GetPreferredSize(out);
|
| + virtual gfx::Size GetPreferredSize() {
|
| + gfx::Size prefsize = scroll_view_->GetContents()->GetPreferredSize();
|
| gfx::Insets insets = GetInsets();
|
| - out->cx += insets.width();
|
| - out->cy += insets.height();
|
| + prefsize.Enlarge(insets.width(), insets.height());
|
| + return prefsize;
|
| }
|
|
|
| private:
|
| @@ -500,9 +497,9 @@
|
| canvas->endPlatformPaint();
|
| }
|
|
|
| - void GetPreferredSize(CSize* out) {
|
| - out->cx = 10; // Just in case we're the only item in a menu.
|
| - out->cy = separator_height;
|
| + gfx::Size GetPreferredSize() {
|
| + return gfx::Size(10, // Just in case we're the only item in a menu.
|
| + separator_height);
|
| }
|
|
|
| private:
|
| @@ -802,9 +799,7 @@
|
| View* parent = GetParent();
|
| if (!parent)
|
| return;
|
| - CSize pref;
|
| - GetPreferredSize(&pref);
|
| - SetBounds(x(), y(), parent->width(), pref.cy);
|
| + SetBounds(x(), y(), parent->width(), GetPreferredSize().height());
|
|
|
| gfx::Insets insets = GetInsets();
|
| int x = insets.left();
|
| @@ -812,30 +807,26 @@
|
| int menu_item_width = width() - insets.width();
|
| for (int i = 0; i < GetChildViewCount(); ++i) {
|
| View* child = GetChildViewAt(i);
|
| - CSize child_pref_size;
|
| - child->GetPreferredSize(&child_pref_size);
|
| - child->SetBounds(x, y, menu_item_width, child_pref_size.cy);
|
| - y += child_pref_size.cy;
|
| + gfx::Size child_pref_size = child->GetPreferredSize();
|
| + child->SetBounds(x, y, menu_item_width, child_pref_size.height());
|
| + y += child_pref_size.height();
|
| }
|
| }
|
|
|
| -void SubmenuView::GetPreferredSize(CSize* out) {
|
| - if (GetChildViewCount() == 0) {
|
| - out->SetSize(0, 0);
|
| - return;
|
| - }
|
| +gfx::Size SubmenuView::GetPreferredSize() {
|
| + if (GetChildViewCount() == 0)
|
| + return gfx::Size();
|
|
|
| int max_width = 0;
|
| int height = 0;
|
| for (int i = 0; i < GetChildViewCount(); ++i) {
|
| View* child = GetChildViewAt(i);
|
| - CSize child_pref_size;
|
| - child->GetPreferredSize(&child_pref_size);
|
| - max_width = std::max(max_width, static_cast<int>(child_pref_size.cx));
|
| - height += child_pref_size.cy;
|
| + gfx::Size child_pref_size = child->GetPreferredSize();
|
| + max_width = std::max(max_width, child_pref_size.width());
|
| + height += child_pref_size.height();
|
| }
|
| gfx::Insets insets = GetInsets();
|
| - out->SetSize(max_width + insets.width(), height + insets.height());
|
| + return gfx::Size(max_width + insets.width(), height + insets.height());
|
| }
|
|
|
| void SubmenuView::DidChangeBounds(const CRect& previous, const CRect& current) {
|
| @@ -1165,9 +1156,10 @@
|
| Paint(canvas, false);
|
| }
|
|
|
| -void MenuItemView::GetPreferredSize(CSize* out) {
|
| - out->cx = font_.GetStringWidth(title_) + label_start + item_right_margin;
|
| - out->cy = font_.height() + kItemBottomMargin + kItemTopMargin;
|
| +gfx::Size MenuItemView::GetPreferredSize() {
|
| + return gfx::Size(
|
| + font_.GetStringWidth(title_) + label_start + item_right_margin,
|
| + font_.height() + kItemBottomMargin + kItemTopMargin);
|
| }
|
|
|
| MenuController* MenuItemView::GetMenuController() {
|
| @@ -2415,15 +2407,13 @@
|
| SubmenuView* submenu = item->GetSubmenu();
|
| DCHECK(submenu);
|
|
|
| - CSize pref;
|
| - submenu->GetScrollViewContainer()->GetPreferredSize(&pref);
|
| + gfx::Size pref = submenu->GetScrollViewContainer()->GetPreferredSize();
|
|
|
| // Don't let the menu go to wide. This is some where between what IE and FF
|
| // do.
|
| - pref.cx = std::min(pref.cx, kMaxMenuWidth);
|
| + pref.set_width(std::min(pref.width(), kMaxMenuWidth));
|
| if (!state_.monitor_bounds.IsEmpty())
|
| - pref.cx = std::min(pref.cx,
|
| - static_cast<LONG>(state_.monitor_bounds.width()));
|
| + pref.set_width(std::min(pref.width(), state_.monitor_bounds.width()));
|
|
|
| // Assume we can honor prefer_leading.
|
| *is_leading = prefer_leading;
|
| @@ -2435,21 +2425,21 @@
|
| x = state_.initial_bounds.x();
|
| y = state_.initial_bounds.bottom();
|
| if (state_.anchor == MenuItemView::TOPRIGHT)
|
| - x = x + state_.initial_bounds.width() - pref.cx;
|
| + x = x + state_.initial_bounds.width() - pref.width();
|
| if (!state_.monitor_bounds.IsEmpty() &&
|
| - y + pref.cy > state_.monitor_bounds.bottom()) {
|
| + y + pref.height() > state_.monitor_bounds.bottom()) {
|
| // The menu doesn't fit on screen. If the first location is above the
|
| // half way point, show from the mouse location to bottom of screen.
|
| // Otherwise show from the top of the screen to the location of the mouse.
|
| // While odd, this behavior matches IE.
|
| if (y < (state_.monitor_bounds.y() +
|
| state_.monitor_bounds.height() / 2)) {
|
| - pref.cy = std::min(pref.cy,
|
| - static_cast<LONG>(state_.monitor_bounds.bottom() - y));
|
| + pref.set_height(std::min(pref.height(),
|
| + state_.monitor_bounds.bottom() - y));
|
| } else {
|
| - pref.cy = std::min(pref.cy, static_cast<LONG>(
|
| + pref.set_height(std::min(pref.height(),
|
| state_.initial_bounds.y() - state_.monitor_bounds.y()));
|
| - y = state_.initial_bounds.y() - pref.cy;
|
| + y = state_.initial_bounds.y() - pref.height();
|
| }
|
| }
|
| } else {
|
| @@ -2468,15 +2458,15 @@
|
| if (create_on_the_right) {
|
| x = item_loc.x() + item->width() - kSubmenuHorizontalInset;
|
| if (state_.monitor_bounds.width() != 0 &&
|
| - x + pref.cx > state_.monitor_bounds.right()) {
|
| + x + pref.width() > state_.monitor_bounds.right()) {
|
| if (layout_is_rtl)
|
| *is_leading = true;
|
| else
|
| *is_leading = false;
|
| - x = item_loc.x() - pref.cx + kSubmenuHorizontalInset;
|
| + x = item_loc.x() - pref.width() + kSubmenuHorizontalInset;
|
| }
|
| } else {
|
| - x = item_loc.x() - pref.cx + kSubmenuHorizontalInset;
|
| + x = item_loc.x() - pref.width() + kSubmenuHorizontalInset;
|
| if (state_.monitor_bounds.width() != 0 && x < state_.monitor_bounds.x()) {
|
| if (layout_is_rtl)
|
| *is_leading = false;
|
| @@ -2487,22 +2477,21 @@
|
| }
|
| y = item_loc.y() - kSubmenuBorderSize;
|
| if (state_.monitor_bounds.width() != 0) {
|
| - pref.cy = std::min(pref.cy,
|
| - static_cast<LONG>(state_.monitor_bounds.height()));
|
| - if (y + pref.cy > state_.monitor_bounds.bottom())
|
| - y = state_.monitor_bounds.bottom() - pref.cy;
|
| + pref.set_height(std::min(pref.height(), state_.monitor_bounds.height()));
|
| + if (y + pref.height() > state_.monitor_bounds.bottom())
|
| + y = state_.monitor_bounds.bottom() - pref.height();
|
| if (y < state_.monitor_bounds.y())
|
| y = state_.monitor_bounds.y();
|
| }
|
| }
|
|
|
| if (state_.monitor_bounds.width() != 0) {
|
| - if (x + pref.cx > state_.monitor_bounds.right())
|
| - x = state_.monitor_bounds.right() - pref.cx;
|
| + if (x + pref.width() > state_.monitor_bounds.right())
|
| + x = state_.monitor_bounds.right() - pref.width();
|
| if (x < state_.monitor_bounds.x())
|
| x = state_.monitor_bounds.x();
|
| }
|
| - return gfx::Rect(x, y, pref.cx, pref.cy);
|
| + return gfx::Rect(x, y, pref.width(), pref.height());
|
| }
|
|
|
| // static
|
|
|