| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #import "chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller.h" | 5 #import "chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller.h" |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/mac/bundle_locations.h" | 8 #include "base/mac/bundle_locations.h" |
| 9 #include "base/strings/string16.h" | 9 #include "base/strings/string16.h" |
| 10 #include "base/strings/sys_string_conversions.h" | 10 #include "base/strings/sys_string_conversions.h" |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 #include "content/public/browser/user_metrics.h" | 31 #include "content/public/browser/user_metrics.h" |
| 32 #include "ui/base/l10n/l10n_util.h" | 32 #include "ui/base/l10n/l10n_util.h" |
| 33 #include "ui/base/models/menu_model.h" | 33 #include "ui/base/models/menu_model.h" |
| 34 #include "ui/gfx/geometry/size.h" | 34 #include "ui/gfx/geometry/size.h" |
| 35 | 35 |
| 36 namespace { | 36 namespace { |
| 37 // Padding amounts on the left/right of a custom menu item (like the browser | 37 // Padding amounts on the left/right of a custom menu item (like the browser |
| 38 // actions overflow container). | 38 // actions overflow container). |
| 39 const int kLeftPadding = 16; | 39 const int kLeftPadding = 16; |
| 40 const int kRightPadding = 10; | 40 const int kRightPadding = 10; |
| 41 |
| 42 // In *very* extreme cases, it's possible that there are so many overflowed |
| 43 // actions, we won't be able to show them all. Cap the height so that the |
| 44 // overflow won't make the menu larger than the height of the screen. |
| 45 // Note: With this height, we can show 104 actions. Less than 0.0002% of our |
| 46 // users will be affected. |
| 47 const int kMaxOverflowContainerHeight = 416; |
| 41 } | 48 } |
| 42 | 49 |
| 43 namespace wrench_menu_controller { | 50 namespace wrench_menu_controller { |
| 44 const CGFloat kWrenchBubblePointOffsetY = 6; | 51 const CGFloat kWrenchBubblePointOffsetY = 6; |
| 45 } | 52 } |
| 46 | 53 |
| 47 using base::UserMetricsAction; | 54 using base::UserMetricsAction; |
| 48 | 55 |
| 49 @interface WrenchMenuController (Private) | 56 @interface WrenchMenuController (Private) |
| 50 - (void)createModel; | 57 - (void)createModel; |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 [[self menu] setMinimumWidth:menuWidth]; | 278 [[self menu] setMinimumWidth:menuWidth]; |
| 272 gfx::Size preferredContainerSize = | 279 gfx::Size preferredContainerSize = |
| 273 [browserActionsController_ sizeForOverflowWidth:maxContainerWidth]; | 280 [browserActionsController_ sizeForOverflowWidth:maxContainerWidth]; |
| 274 | 281 |
| 275 // Set the origins and preferred size for the container. | 282 // Set the origins and preferred size for the container. |
| 276 // View hierarchy is as follows (from parent > child): | 283 // View hierarchy is as follows (from parent > child): |
| 277 // |view| > |anonymous view| > containerView. We have to set the origin | 284 // |view| > |anonymous view| > containerView. We have to set the origin |
| 278 // and size of each for it display properly. | 285 // and size of each for it display properly. |
| 279 // The parent views each have a size of the full width of the menu, so we can | 286 // The parent views each have a size of the full width of the menu, so we can |
| 280 // properly position the container. | 287 // properly position the container. |
| 281 NSSize parentSize = NSMakeSize(menuWidth, preferredContainerSize.height()); | 288 NSSize parentSize = NSMakeSize(menuWidth, |
| 289 std::min(preferredContainerSize.height(), |
| 290 kMaxOverflowContainerHeight)); |
| 282 [view setFrameSize:parentSize]; | 291 [view setFrameSize:parentSize]; |
| 283 [[containerView superview] setFrameSize:parentSize]; | 292 [[containerView superview] setFrameSize:parentSize]; |
| 284 | 293 |
| 285 // The container view gets its preferred size. | 294 // The container view gets its preferred size. |
| 286 [containerView setFrameSize:NSMakeSize(preferredContainerSize.width(), | 295 [containerView setFrameSize:NSMakeSize(preferredContainerSize.width(), |
| 287 preferredContainerSize.height())]; | 296 preferredContainerSize.height())]; |
| 288 [browserActionsController_ update]; | 297 [browserActionsController_ update]; |
| 289 | 298 |
| 290 [view setFrameOrigin:NSZeroPoint]; | 299 [view setFrameOrigin:NSZeroPoint]; |
| 291 [[containerView superview] setFrameOrigin:NSZeroPoint]; | 300 [[containerView superview] setFrameOrigin:NSZeroPoint]; |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 549 // (and thus, after all our ability to adjust it normally). Throw in the | 558 // (and thus, after all our ability to adjust it normally). Throw in the |
| 550 // towel, and simply don't let the frame move from where it's supposed to be. | 559 // towel, and simply don't let the frame move from where it's supposed to be. |
| 551 // TODO(devlin): Yet another Cocoa hack. It'd be good to find a workaround, | 560 // TODO(devlin): Yet another Cocoa hack. It'd be good to find a workaround, |
| 552 // but unlikely unless we replace the Cocoa menu implementation. | 561 // but unlikely unless we replace the Cocoa menu implementation. |
| 553 NSView* containerSuperview = [overflowActionsContainerView_ superview]; | 562 NSView* containerSuperview = [overflowActionsContainerView_ superview]; |
| 554 if (NSMinX([containerSuperview frame]) != 0) | 563 if (NSMinX([containerSuperview frame]) != 0) |
| 555 [containerSuperview setFrameOrigin:NSZeroPoint]; | 564 [containerSuperview setFrameOrigin:NSZeroPoint]; |
| 556 } | 565 } |
| 557 | 566 |
| 558 @end // @implementation WrenchMenuButtonViewController | 567 @end // @implementation WrenchMenuButtonViewController |
| OLD | NEW |