| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/views/controls/menu/menu_controller.h" | 5 #include "ui/views/controls/menu/menu_controller.h" |
| 6 | 6 |
| 7 #include "base/i18n/case_conversion.h" | 7 #include "base/i18n/case_conversion.h" |
| 8 #include "base/i18n/rtl.h" | 8 #include "base/i18n/rtl.h" |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| (...skipping 1932 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1943 // simply opening the menu (bug 142992). | 1943 // simply opening the menu (bug 142992). |
| 1944 if (menu_config.offset_context_menus && state_.context_menu) | 1944 if (menu_config.offset_context_menus && state_.context_menu) |
| 1945 x += 1; | 1945 x += 1; |
| 1946 | 1946 |
| 1947 y = state_.initial_bounds.bottom(); | 1947 y = state_.initial_bounds.bottom(); |
| 1948 if (state_.anchor == MENU_ANCHOR_TOPRIGHT) { | 1948 if (state_.anchor == MENU_ANCHOR_TOPRIGHT) { |
| 1949 x = x + state_.initial_bounds.width() - pref.width(); | 1949 x = x + state_.initial_bounds.width() - pref.width(); |
| 1950 if (menu_config.offset_context_menus && state_.context_menu) | 1950 if (menu_config.offset_context_menus && state_.context_menu) |
| 1951 x -= 1; | 1951 x -= 1; |
| 1952 } else if (state_.anchor == MENU_ANCHOR_BOTTOMCENTER) { | 1952 } else if (state_.anchor == MENU_ANCHOR_BOTTOMCENTER) { |
| 1953 x = x - (pref.width() - state_.initial_bounds.width()) / 2; | 1953 x += (state_.initial_bounds.width() - pref.width()) / 2; |
| 1954 if (pref.height() > | 1954 if (pref.height() > |
| 1955 state_.initial_bounds.y() + kCenteredContextMenuYOffset) { | 1955 state_.initial_bounds.y() + kCenteredContextMenuYOffset) { |
| 1956 // Menu does not fit above the anchor. We move it to below. | 1956 // Place the menu below if it does not fit above. |
| 1957 y = state_.initial_bounds.y() - kCenteredContextMenuYOffset; | 1957 y = state_.initial_bounds.y() - kCenteredContextMenuYOffset; |
| 1958 } else { | 1958 } else { |
| 1959 y = std::max(0, state_.initial_bounds.y() - pref.height()) + | 1959 y = std::max(0, state_.initial_bounds.y() - pref.height()) + |
| 1960 kCenteredContextMenuYOffset; | 1960 kCenteredContextMenuYOffset; |
| 1961 } | 1961 } |
| 1962 } else if (state_.anchor == MENU_ANCHOR_FIXED_BOTTOMCENTER) { |
| 1963 x += (state_.initial_bounds.width() - pref.width()) / 2; |
| 1964 } else if (state_.anchor == MENU_ANCHOR_SIDECENTER) { |
| 1965 y += (state_.initial_bounds.height() - pref.height()) / 2; |
| 1962 } | 1966 } |
| 1963 | 1967 |
| 1964 if (!state_.monitor_bounds.IsEmpty() && | 1968 if (!state_.monitor_bounds.IsEmpty() && |
| 1965 y + pref.height() > state_.monitor_bounds.bottom()) { | 1969 y + pref.height() > state_.monitor_bounds.bottom()) { |
| 1966 // The menu doesn't fit fully below the button on the screen. The menu | 1970 // The menu doesn't fit fully below the button on the screen. The menu |
| 1967 // position with respect to the bounds will be preserved if it has | 1971 // position with respect to the bounds will be preserved if it has |
| 1968 // already been drawn. When the requested positioning is below the bounds | 1972 // already been drawn. When the requested positioning is below the bounds |
| 1969 // it will shrink the menu to make it fit below. | 1973 // it will shrink the menu to make it fit below. |
| 1970 // If the requested positioning is best fit, it will first try to fit the | 1974 // If the requested positioning is best fit, it will first try to fit the |
| 1971 // menu below. If that does not fit it will try to place it above. If | 1975 // menu below. If that does not fit it will try to place it above. If |
| (...skipping 738 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2710 if (hot_button_) | 2714 if (hot_button_) |
| 2711 hot_button_->SetHotTracked(false); | 2715 hot_button_->SetHotTracked(false); |
| 2712 hot_button_ = hot_button; | 2716 hot_button_ = hot_button; |
| 2713 if (hot_button) { | 2717 if (hot_button) { |
| 2714 hot_button->SetHotTracked(true); | 2718 hot_button->SetHotTracked(true); |
| 2715 hot_button->NotifyAccessibilityEvent(ui::AX_EVENT_SELECTION, true); | 2719 hot_button->NotifyAccessibilityEvent(ui::AX_EVENT_SELECTION, true); |
| 2716 } | 2720 } |
| 2717 } | 2721 } |
| 2718 | 2722 |
| 2719 } // namespace views | 2723 } // namespace views |
| OLD | NEW |