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/bookmarks/bookmark_bar_folder_controller.h" | 5 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.h" |
6 | 6 |
7 #include "base/mac/mac_util.h" | 7 #include "base/mac/mac_util.h" |
8 #include "base/sys_string_conversions.h" | 8 #include "base/sys_string_conversions.h" |
9 #include "chrome/browser/bookmarks/bookmark_model.h" | 9 #include "chrome/browser/bookmarks/bookmark_model.h" |
10 #include "chrome/browser/bookmarks/bookmark_utils.h" | 10 #include "chrome/browser/bookmarks/bookmark_utils.h" |
(...skipping 769 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
780 [self layOutWindowWithHeight:height]; | 780 [self layOutWindowWithHeight:height]; |
781 } | 781 } |
782 | 782 |
783 - (void)layOutWindowWithHeight:(CGFloat)height { | 783 - (void)layOutWindowWithHeight:(CGFloat)height { |
784 // Lay out the window by adjusting all button widths to be consistent, then | 784 // Lay out the window by adjusting all button widths to be consistent, then |
785 // base the window width on this ideal button width. | 785 // base the window width on this ideal button width. |
786 CGFloat buttonWidth = [self adjustButtonWidths]; | 786 CGFloat buttonWidth = [self adjustButtonWidths]; |
787 CGFloat windowWidth = buttonWidth + padding_; | 787 CGFloat windowWidth = buttonWidth + padding_; |
788 NSPoint newWindowTopLeft = [self windowTopLeftForWidth:windowWidth | 788 NSPoint newWindowTopLeft = [self windowTopLeftForWidth:windowWidth |
789 height:height]; | 789 height:height]; |
| 790 |
790 // Make sure as much of a submenu is exposed (which otherwise would be a | 791 // Make sure as much of a submenu is exposed (which otherwise would be a |
791 // problem if the parent button is close to the bottom of the screen). | 792 // problem if the parent button is close to the bottom of the screen). |
792 if ([parentController_ isKindOfClass:[self class]]) { | 793 if ([parentController_ isKindOfClass:[self class]]) { |
793 CGFloat minimumY = NSMinY([[[self window] screen] visibleFrame]) + | 794 CGFloat minimumY = NSMinY([[[self window] screen] visibleFrame]) + |
794 bookmarks::kScrollWindowVerticalMargin + | 795 bookmarks::kScrollWindowVerticalMargin + |
795 height; | 796 height; |
796 newWindowTopLeft.y = MAX(newWindowTopLeft.y, minimumY); | 797 newWindowTopLeft.y = MAX(newWindowTopLeft.y, minimumY); |
797 } | 798 } |
| 799 |
798 NSWindow* window = [self window]; | 800 NSWindow* window = [self window]; |
799 NSRect windowFrame = NSMakeRect(newWindowTopLeft.x, | 801 NSRect windowFrame = NSMakeRect(newWindowTopLeft.x, |
800 newWindowTopLeft.y - height, | 802 newWindowTopLeft.y - height, |
801 windowWidth, height); | 803 windowWidth, height); |
802 [window setFrame:windowFrame display:NO]; | 804 [window setFrame:windowFrame display:NO]; |
| 805 |
803 NSRect folderFrame = NSMakeRect(0, 0, windowWidth, height); | 806 NSRect folderFrame = NSMakeRect(0, 0, windowWidth, height); |
804 [folderView_ setFrame:folderFrame]; | 807 [folderView_ setFrame:folderFrame]; |
| 808 |
| 809 // For some reason, when opening a "large" bookmark folder (containing 12 or |
| 810 // more items) using the keyboard, the scroll view seems to want to be |
| 811 // offset by default: [ http://crbug.com/101099 ]. Explicitly reseting the |
| 812 // scroll position here is a bit hacky, but it does seem to work. |
| 813 [[scrollView_ contentView] scrollToPoint:NSMakePoint(0, 0)]; |
| 814 |
805 NSSize newSize = NSMakeSize(windowWidth, 0.0); | 815 NSSize newSize = NSMakeSize(windowWidth, 0.0); |
806 [self adjustWindowLeft:newWindowTopLeft.x size:newSize scrollingBy:0.0]; | 816 [self adjustWindowLeft:newWindowTopLeft.x size:newSize scrollingBy:0.0]; |
807 [self configureWindowLevel]; | 817 [self configureWindowLevel]; |
| 818 |
808 [window display]; | 819 [window display]; |
809 } | 820 } |
810 | 821 |
811 // TODO(mrossetti): See if the following can be moved into view's viewWillDraw:. | 822 // TODO(mrossetti): See if the following can be moved into view's viewWillDraw:. |
812 - (CGFloat)adjustButtonWidths { | 823 - (CGFloat)adjustButtonWidths { |
813 CGFloat width = bookmarks::kBookmarkMenuButtonMinimumWidth; | 824 CGFloat width = bookmarks::kBookmarkMenuButtonMinimumWidth; |
814 // Use the cell's size as the base for determining the desired width of the | 825 // Use the cell's size as the base for determining the desired width of the |
815 // button rather than the button's current width. -[cell cellSize] always | 826 // button rather than the button's current width. -[cell cellSize] always |
816 // returns the 'optimum' size of the cell based on the cell's contents even | 827 // returns the 'optimum' size of the cell based on the cell's contents even |
817 // if it's less than the current button size. Relying on the button size | 828 // if it's less than the current button size. Relying on the button size |
(...skipping 1168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1986 | 1997 |
1987 - (void)setIgnoreAnimations:(BOOL)ignore { | 1998 - (void)setIgnoreAnimations:(BOOL)ignore { |
1988 ignoreAnimations_ = ignore; | 1999 ignoreAnimations_ = ignore; |
1989 } | 2000 } |
1990 | 2001 |
1991 - (BookmarkButton*)buttonThatMouseIsIn { | 2002 - (BookmarkButton*)buttonThatMouseIsIn { |
1992 return buttonThatMouseIsIn_; | 2003 return buttonThatMouseIsIn_; |
1993 } | 2004 } |
1994 | 2005 |
1995 @end // BookmarkBarFolderController | 2006 @end // BookmarkBarFolderController |
OLD | NEW |