| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/cocoa/tab_contents_controller.h" | 5 #import "chrome/browser/cocoa/tab_contents_controller.h" |
| 6 | 6 |
| 7 #include "base/mac_util.h" | 7 #include "base/mac_util.h" |
| 8 #include "base/sys_string_conversions.h" | 8 #include "base/sys_string_conversions.h" |
| 9 #include "chrome/browser/browser_process.h" | 9 #include "chrome/browser/browser_process.h" |
| 10 #include "chrome/browser/bookmarks/bookmark_model.h" | 10 #include "chrome/browser/bookmarks/bookmark_model.h" |
| 11 #import "chrome/browser/cocoa/base_view.h" |
| 11 #include "chrome/browser/pref_service.h" | 12 #include "chrome/browser/pref_service.h" |
| 12 #include "chrome/browser/renderer_host/render_view_host.h" | 13 #include "chrome/browser/renderer_host/render_view_host.h" |
| 13 #include "chrome/browser/tab_contents/tab_contents.h" | 14 #include "chrome/browser/tab_contents/tab_contents.h" |
| 14 #include "chrome/common/pref_names.h" | 15 #include "chrome/common/pref_names.h" |
| 15 | 16 |
| 16 // Default offset of the contents splitter in pixels. | 17 // Default offset of the contents splitter in pixels. |
| 17 static const int kDefaultContentsSplitOffset = 400; | 18 static const int kDefaultContentsSplitOffset = 400; |
| 18 | 19 |
| 19 // Never make the web part of the tab contents smaller than this (needed if the | 20 // Never make the web part of the tab contents smaller than this (needed if the |
| 20 // window is only a few pixels high). | 21 // window is only a few pixels high). |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 | 86 |
| 86 // Load the default split offset. If we are already showing devtools, we | 87 // Load the default split offset. If we are already showing devtools, we |
| 87 // will replace the default with the current devtools height. | 88 // will replace the default with the current devtools height. |
| 88 CGFloat splitOffset = g_browser_process->local_state()->GetInteger( | 89 CGFloat splitOffset = g_browser_process->local_state()->GetInteger( |
| 89 prefs::kDevToolsSplitLocation); | 90 prefs::kDevToolsSplitLocation); |
| 90 if (splitOffset == -1) { | 91 if (splitOffset == -1) { |
| 91 // Initial load, set to default value. | 92 // Initial load, set to default value. |
| 92 splitOffset = kDefaultContentsSplitOffset; | 93 splitOffset = kDefaultContentsSplitOffset; |
| 93 } | 94 } |
| 94 | 95 |
| 96 BaseView* devtoolsView = |
| 97 static_cast<BaseView*>(devToolsContents->GetNativeView()); |
| 98 DCHECK([devtoolsView isKindOfClass:[BaseView class]]); |
| 99 [devtoolsView setViewID:VIEW_ID_DEV_TOOLS_DOCKED]; |
| 95 if ([subviews count] == 1) { | 100 if ([subviews count] == 1) { |
| 96 [contentsContainer_ addSubview:devToolsContents->GetNativeView()]; | 101 [contentsContainer_ addSubview:devtoolsView]; |
| 97 } else { | 102 } else { |
| 98 DCHECK_EQ([subviews count], 2u); | 103 DCHECK_EQ([subviews count], 2u); |
| 99 [contentsContainer_ replaceSubview:[subviews objectAtIndex:1] | 104 [contentsContainer_ replaceSubview:[subviews objectAtIndex:1] |
| 100 with:devToolsContents->GetNativeView()]; | 105 with:devtoolsView]; |
| 101 // If devtools are already visible, keep the current size. | 106 // If devtools are already visible, keep the current size. |
| 102 splitOffset = NSHeight([devToolsContents->GetNativeView() frame]); | 107 splitOffset = NSHeight([devtoolsView frame]); |
| 103 } | 108 } |
| 104 | 109 |
| 105 // Make sure |splitOffset| isn't too large or too small. | 110 // Make sure |splitOffset| isn't too large or too small. |
| 106 splitOffset = MIN(splitOffset, | 111 splitOffset = MIN(splitOffset, |
| 107 NSHeight([contentsContainer_ frame]) - kMinWebHeight); | 112 NSHeight([contentsContainer_ frame]) - kMinWebHeight); |
| 108 DCHECK_GE(splitOffset, 0) << "kMinWebHeight needs to be smaller than " | 113 DCHECK_GE(splitOffset, 0) << "kMinWebHeight needs to be smaller than " |
| 109 << "smallest available tab contents space."; | 114 << "smallest available tab contents space."; |
| 110 splitOffset = MAX(0, splitOffset); | 115 splitOffset = MAX(0, splitOffset); |
| 111 | 116 |
| 112 // It seems as if |-setPosition:ofDividerAtIndex:| should do what's needed, | 117 // It seems as if |-setPosition:ofDividerAtIndex:| should do what's needed, |
| 113 // but I can't figure out how to use it. Manually resize web and devtools. | 118 // but I can't figure out how to use it. Manually resize web and devtools. |
| 114 NSRect devtoolsFrame = [devToolsContents->GetNativeView() frame]; | 119 NSRect devtoolsFrame = [devtoolsView frame]; |
| 115 devtoolsFrame.size.height = splitOffset; | 120 devtoolsFrame.size.height = splitOffset; |
| 116 [devToolsContents->GetNativeView() setFrame:devtoolsFrame]; | 121 [devtoolsView setFrame:devtoolsFrame]; |
| 117 | 122 |
| 118 NSRect webFrame = [[subviews objectAtIndex:0] frame]; | 123 NSRect webFrame = [[subviews objectAtIndex:0] frame]; |
| 119 webFrame.size.height = NSHeight([contentsContainer_ frame]) - | 124 webFrame.size.height = NSHeight([contentsContainer_ frame]) - |
| 120 [self devToolsHeight]; | 125 [self devToolsHeight]; |
| 121 [[subviews objectAtIndex:0] setFrame:webFrame]; | 126 [[subviews objectAtIndex:0] setFrame:webFrame]; |
| 122 | 127 |
| 123 [contentsContainer_ adjustSubviews]; | 128 [contentsContainer_ adjustSubviews]; |
| 124 } else { | 129 } else { |
| 125 if ([subviews count] > 1) { | 130 if ([subviews count] > 1) { |
| 126 NSView* oldDevToolsContentsView = [subviews objectAtIndex:1]; | 131 NSView* oldDevToolsContentsView = [subviews objectAtIndex:1]; |
| 127 // Store split offset when hiding devtools window only. | 132 // Store split offset when hiding devtools window only. |
| 128 int splitOffset = NSHeight([oldDevToolsContentsView frame]); | 133 int splitOffset = NSHeight([oldDevToolsContentsView frame]); |
| 129 g_browser_process->local_state()->SetInteger( | 134 g_browser_process->local_state()->SetInteger( |
| 130 prefs::kDevToolsSplitLocation, splitOffset); | 135 prefs::kDevToolsSplitLocation, splitOffset); |
| 131 [oldDevToolsContentsView removeFromSuperview]; | 136 [oldDevToolsContentsView removeFromSuperview]; |
| 132 } | 137 } |
| 133 } | 138 } |
| 134 } | 139 } |
| 135 | 140 |
| 136 - (CGFloat)devToolsHeight { | 141 - (CGFloat)devToolsHeight { |
| 137 NSArray* subviews = [contentsContainer_ subviews]; | 142 NSArray* subviews = [contentsContainer_ subviews]; |
| 138 if ([subviews count] < 2) | 143 if ([subviews count] < 2) |
| 139 return 0; | 144 return 0; |
| 140 return NSHeight([[subviews objectAtIndex:1] frame]) + | 145 return NSHeight([[subviews objectAtIndex:1] frame]) + |
| 141 [contentsContainer_ dividerThickness]; | 146 [contentsContainer_ dividerThickness]; |
| 142 } | 147 } |
| 143 | 148 |
| 144 @end | 149 @end |
| OLD | NEW |