Chromium Code Reviews| 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 #import "chrome/browser/ui/cocoa/dev_tools_controller.h" | 5 #import "chrome/browser/ui/cocoa/dev_tools_controller.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 | 9 |
| 10 #include <Cocoa/Cocoa.h> | 10 #include <Cocoa/Cocoa.h> |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 23 using content::WebContents; | 23 using content::WebContents; |
| 24 | 24 |
| 25 @interface DevToolsContainerView : BaseView { | 25 @interface DevToolsContainerView : BaseView { |
| 26 DevToolsContentsResizingStrategy strategy_; | 26 DevToolsContentsResizingStrategy strategy_; |
| 27 | 27 |
| 28 // Weak references. Ownership via -subviews. | 28 // Weak references. Ownership via -subviews. |
| 29 NSView* devToolsView_; | 29 NSView* devToolsView_; |
| 30 NSView* contentsView_; | 30 NSView* contentsView_; |
| 31 } | 31 } |
| 32 | 32 |
| 33 - (void)setContentsResizingStrategy: | 33 - (void)setDevToolsView:(NSView*)devToolsView withStrategy: |
| 34 (const DevToolsContentsResizingStrategy&)strategy; | 34 (const DevToolsContentsResizingStrategy&)strategy; |
|
Alexei Svitkine (slow)
2014/07/15 14:02:19
Nit: Wrap before "withStrategy:" and align the :'s
dgozman
2014/07/15 14:38:41
Done.
| |
| 35 - (void)adjustSubviews; | 35 - (void)adjustSubviews; |
| 36 - (void)showDevTools:(NSView*)devToolsView; | 36 - (BOOL)hasDevToolsView; |
| 37 - (void)hideDevTools; | |
| 38 | 37 |
| 39 @end | 38 @end |
| 40 | 39 |
| 41 | 40 |
| 42 @implementation DevToolsContainerView | 41 @implementation DevToolsContainerView |
| 43 | 42 |
| 44 - (void)setContentsResizingStrategy: | 43 - (void)setDevToolsView:(NSView*)devToolsView withStrategy: |
|
Alexei Svitkine (slow)
2014/07/15 14:02:19
Nit: Ditto.
dgozman
2014/07/15 14:38:41
Done.
| |
| 45 (const DevToolsContentsResizingStrategy&)strategy { | 44 (const DevToolsContentsResizingStrategy&)strategy { |
| 46 strategy_.CopyFrom(strategy); | 45 strategy_.CopyFrom(strategy); |
| 46 | |
| 47 if (devToolsView == devToolsView_) | |
| 48 return; | |
| 49 | |
| 50 if (devToolsView_) { | |
| 51 DCHECK_EQ(2u, [[self subviews] count]); | |
| 52 [devToolsView_ removeFromSuperview]; | |
| 53 contentsView_ = nil; | |
| 54 devToolsView_ = nil; | |
| 55 } | |
| 56 | |
| 57 if (devToolsView) { | |
| 58 NSArray* subviews = [self subviews]; | |
| 59 DCHECK_EQ(1u, [subviews count]); | |
| 60 contentsView_ = [subviews objectAtIndex:0]; | |
| 61 devToolsView_ = devToolsView; | |
| 62 // Place DevTools under contents. | |
| 63 [self addSubview:devToolsView positioned:NSWindowBelow relativeTo:nil]; | |
| 64 } | |
| 47 } | 65 } |
| 48 | 66 |
| 49 - (void)resizeSubviewsWithOldSize:(NSSize)oldBoundsSize { | 67 - (void)resizeSubviewsWithOldSize:(NSSize)oldBoundsSize { |
| 50 [self adjustSubviews]; | 68 [self adjustSubviews]; |
| 51 } | 69 } |
| 52 | 70 |
| 53 - (void)showDevTools:(NSView*)devToolsView { | 71 - (BOOL)hasDevToolsView { |
| 54 NSArray* subviews = [self subviews]; | 72 return devToolsView_ != nil; |
| 55 DCHECK_EQ(1u, [subviews count]); | |
| 56 contentsView_ = [subviews objectAtIndex:0]; | |
| 57 devToolsView_ = devToolsView; | |
| 58 // Place DevTools under contents. | |
| 59 [self addSubview:devToolsView positioned:NSWindowBelow relativeTo:nil]; | |
| 60 } | |
| 61 | |
| 62 - (void)hideDevTools { | |
| 63 DCHECK_EQ(2u, [[self subviews] count]); | |
| 64 [devToolsView_ removeFromSuperview]; | |
| 65 contentsView_ = nil; | |
| 66 devToolsView_ = nil; | |
| 67 } | 73 } |
| 68 | 74 |
| 69 - (void)adjustSubviews { | 75 - (void)adjustSubviews { |
| 70 if (![[self subviews] count]) | 76 if (![[self subviews] count]) |
| 71 return; | 77 return; |
| 72 | 78 |
| 73 if (!devToolsView_) { | 79 if (!devToolsView_) { |
| 74 DCHECK_EQ(1u, [[self subviews] count]); | 80 DCHECK_EQ(1u, [[self subviews] count]); |
| 75 NSView* contents = [[self subviews] objectAtIndex:0]; | 81 NSView* contents = [[self subviews] objectAtIndex:0]; |
| 76 [contents setFrame:[self bounds]]; | 82 [contents setFrame:[self bounds]]; |
| 77 return; | 83 return; |
| 78 } | 84 } |
| 79 | 85 |
| 80 DCHECK_EQ(2u, [[self subviews] count]); | 86 DCHECK_EQ(2u, [[self subviews] count]); |
| 81 | 87 |
| 82 gfx::Rect new_devtools_bounds; | 88 gfx::Rect new_devtools_bounds; |
| 83 gfx::Rect new_contents_bounds; | 89 gfx::Rect new_contents_bounds; |
| 84 ApplyDevToolsContentsResizingStrategy( | 90 ApplyDevToolsContentsResizingStrategy( |
| 85 strategy_, gfx::Size(NSSizeToCGSize([self bounds].size)), | 91 strategy_, gfx::Size(NSSizeToCGSize([self bounds].size)), |
| 86 [self flipNSRectToRect:[devToolsView_ bounds]], | 92 [self flipNSRectToRect:[devToolsView_ bounds]], |
| 87 [self flipNSRectToRect:[contentsView_ bounds]], | 93 [self flipNSRectToRect:[contentsView_ bounds]], |
| 88 &new_devtools_bounds, &new_contents_bounds); | 94 &new_devtools_bounds, &new_contents_bounds); |
| 89 [devToolsView_ setFrame:[self flipRectToNSRect:new_devtools_bounds]]; | 95 [devToolsView_ setFrame:[self flipRectToNSRect:new_devtools_bounds]]; |
| 90 [contentsView_ setFrame:[self flipRectToNSRect:new_contents_bounds]]; | 96 [contentsView_ setFrame:[self flipRectToNSRect:new_contents_bounds]]; |
| 91 } | 97 } |
| 92 | 98 |
| 93 @end | 99 @end |
| 94 | 100 |
| 95 @interface DevToolsController (Private) | |
| 96 - (void)showDevToolsView; | |
| 97 - (void)hideDevToolsView; | |
| 98 @end | |
| 99 | |
| 100 | 101 |
| 101 @implementation DevToolsController | 102 @implementation DevToolsController |
| 102 | 103 |
| 103 - (id)init { | 104 - (id)init { |
| 104 if ((self = [super init])) { | 105 if ((self = [super init])) { |
| 105 devToolsContainerView_.reset( | 106 devToolsContainerView_.reset( |
| 106 [[DevToolsContainerView alloc] initWithFrame:NSZeroRect]); | 107 [[DevToolsContainerView alloc] initWithFrame:NSZeroRect]); |
| 107 [devToolsContainerView_ | 108 [devToolsContainerView_ |
| 108 setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable]; | 109 setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable]; |
| 109 } | 110 } |
| 110 return self; | 111 return self; |
| 111 } | 112 } |
| 112 | 113 |
| 113 - (NSView*)view { | 114 - (NSView*)view { |
| 114 return devToolsContainerView_.get(); | 115 return devToolsContainerView_.get(); |
| 115 } | 116 } |
| 116 | 117 |
| 117 - (void)updateDevToolsForWebContents:(WebContents*)contents | 118 - (void)updateDevToolsForWebContents:(WebContents*)contents |
| 118 withProfile:(Profile*)profile { | 119 withProfile:(Profile*)profile { |
| 119 DevToolsContentsResizingStrategy strategy; | 120 DevToolsContentsResizingStrategy strategy; |
| 120 WebContents* devTools = DevToolsWindow::GetInTabWebContents( | 121 WebContents* devTools = DevToolsWindow::GetInTabWebContents( |
| 121 contents, &strategy); | 122 contents, &strategy); |
| 122 | 123 |
| 123 // Make sure we do not draw any transient arrangements of views. | 124 // Make sure we do not draw any transient arrangements of views. |
| 124 gfx::ScopedNSDisableScreenUpdates disabler; | 125 gfx::ScopedNSDisableScreenUpdates disabler; |
| 125 bool shouldHide = devTools_ && devTools_ != devTools; | |
| 126 bool shouldShow = devTools && devTools_ != devTools; | |
| 127 | 126 |
| 128 if (shouldHide) | 127 if (devTools && ![devToolsContainerView_ hasDevToolsView]) { |
| 129 [self hideDevToolsView]; | 128 focusTracker_.reset( |
| 130 | 129 [[FocusTracker alloc] initWithWindow:[devToolsContainerView_ window]]); |
| 131 devTools_ = devTools; | |
| 132 if (devTools_) { | |
| 133 devTools_->SetOverlayView( | |
| 134 contents, | |
| 135 gfx::Point(strategy.insets().left(), strategy.insets().top())); | |
| 136 [devToolsContainerView_ setContentsResizingStrategy:strategy]; | |
| 137 } else { | |
| 138 DevToolsContentsResizingStrategy zeroStrategy; | |
| 139 [devToolsContainerView_ setContentsResizingStrategy:zeroStrategy]; | |
| 140 } | 130 } |
| 141 | 131 |
| 142 if (shouldShow) | 132 if (!devTools && [devToolsContainerView_ hasDevToolsView]) { |
| 143 [self showDevToolsView]; | 133 [focusTracker_ restoreFocusInWindow:[devToolsContainerView_ window]]; |
| 134 focusTracker_.reset(); | |
| 135 } | |
| 144 | 136 |
| 137 NSView* devToolsView = devTools ? devTools->GetNativeView() : nil; | |
|
Alexei Svitkine (slow)
2014/07/15 14:02:19
Nit: Given that you have an "if (devTools)" right
dgozman
2014/07/15 14:38:41
Done.
| |
| 138 if (devTools) { | |
| 139 // |devToolsView| is a WebContentsViewCocoa object, whose ViewID was | |
| 140 // set to VIEW_ID_TAB_CONTAINER initially, so we need to change it to | |
| 141 // VIEW_ID_DEV_TOOLS_DOCKED here. | |
| 142 view_id_util::SetID(devToolsView, VIEW_ID_DEV_TOOLS_DOCKED); | |
| 143 | |
| 144 devTools->SetAllowOtherViews(true); | |
| 145 contents->SetAllowOtherViews(true); | |
| 146 } else { | |
| 147 contents->SetAllowOtherViews(false); | |
| 148 } | |
| 149 | |
| 150 [devToolsContainerView_ setDevToolsView: devToolsView withStrategy: strategy]; | |
|
Alexei Svitkine (slow)
2014/07/15 14:02:19
Nit: Remove spaces after :'s.
dgozman
2014/07/15 14:38:41
Done.
| |
| 145 [devToolsContainerView_ adjustSubviews]; | 151 [devToolsContainerView_ adjustSubviews]; |
| 146 } | 152 } |
| 147 | 153 |
| 148 - (void)showDevToolsView { | |
| 149 focusTracker_.reset( | |
| 150 [[FocusTracker alloc] initWithWindow:[devToolsContainerView_ window]]); | |
| 151 | |
| 152 // |devToolsView| is a WebContentsViewCocoa object, whose ViewID was | |
| 153 // set to VIEW_ID_TAB_CONTAINER initially, so we need to change it to | |
| 154 // VIEW_ID_DEV_TOOLS_DOCKED here. | |
| 155 NSView* devToolsView = devTools_->GetNativeView(); | |
| 156 view_id_util::SetID(devToolsView, VIEW_ID_DEV_TOOLS_DOCKED); | |
| 157 | |
| 158 [devToolsContainerView_ showDevTools:devToolsView]; | |
| 159 } | |
| 160 | |
| 161 - (void)hideDevToolsView { | |
| 162 devTools_->RemoveOverlayView(); | |
| 163 [devToolsContainerView_ hideDevTools]; | |
| 164 [focusTracker_ restoreFocusInWindow:[devToolsContainerView_ window]]; | |
| 165 focusTracker_.reset(); | |
| 166 } | |
| 167 | |
| 168 @end | 154 @end |
| OLD | NEW |