| 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/view_id_util.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     // |devtoolsView| is a TabContentsViewCocoa object, whose ViewID was | 
|  | 97     // set to VIEW_ID_TAB_CONTAINER initially, so we need to change it to | 
|  | 98     // VIEW_ID_DEV_TOOLS_DOCKED here. | 
|  | 99     NSView* devtoolsView = devToolsContents->GetNativeView(); | 
|  | 100     view_id_util::SetID(devtoolsView, VIEW_ID_DEV_TOOLS_DOCKED); | 
| 95     if ([subviews count] == 1) { | 101     if ([subviews count] == 1) { | 
| 96       [contentsContainer_ addSubview:devToolsContents->GetNativeView()]; | 102       [contentsContainer_ addSubview:devtoolsView]; | 
| 97     } else { | 103     } else { | 
| 98       DCHECK_EQ([subviews count], 2u); | 104       DCHECK_EQ([subviews count], 2u); | 
| 99       [contentsContainer_ replaceSubview:[subviews objectAtIndex:1] | 105       [contentsContainer_ replaceSubview:[subviews objectAtIndex:1] | 
| 100                                     with:devToolsContents->GetNativeView()]; | 106                                     with:devToolsContents->GetNativeView()]; | 
| 101       // If devtools are already visible, keep the current size. | 107       // If devtools are already visible, keep the current size. | 
| 102       splitOffset = NSHeight([devToolsContents->GetNativeView() frame]); | 108       splitOffset = NSHeight([devtoolsView frame]); | 
| 103     } | 109     } | 
| 104 | 110 | 
| 105     // Make sure |splitOffset| isn't too large or too small. | 111     // Make sure |splitOffset| isn't too large or too small. | 
| 106     splitOffset = MIN(splitOffset, | 112     splitOffset = MIN(splitOffset, | 
| 107                       NSHeight([contentsContainer_ frame]) - kMinWebHeight); | 113                       NSHeight([contentsContainer_ frame]) - kMinWebHeight); | 
| 108     DCHECK_GE(splitOffset, 0) << "kMinWebHeight needs to be smaller than " | 114     DCHECK_GE(splitOffset, 0) << "kMinWebHeight needs to be smaller than " | 
| 109                               << "smallest available tab contents space."; | 115                               << "smallest available tab contents space."; | 
| 110     splitOffset = MAX(0, splitOffset); | 116     splitOffset = MAX(0, splitOffset); | 
| 111 | 117 | 
| 112     // It seems as if |-setPosition:ofDividerAtIndex:| should do what's needed, | 118     // 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. | 119     // but I can't figure out how to use it. Manually resize web and devtools. | 
| 114     NSRect devtoolsFrame = [devToolsContents->GetNativeView() frame]; | 120     NSRect devtoolsFrame = [devtoolsView frame]; | 
| 115     devtoolsFrame.size.height = splitOffset; | 121     devtoolsFrame.size.height = splitOffset; | 
| 116     [devToolsContents->GetNativeView() setFrame:devtoolsFrame]; | 122     [devtoolsView setFrame:devtoolsFrame]; | 
| 117 | 123 | 
| 118     NSRect webFrame = [[subviews objectAtIndex:0] frame]; | 124     NSRect webFrame = [[subviews objectAtIndex:0] frame]; | 
| 119     webFrame.size.height = NSHeight([contentsContainer_ frame]) - | 125     webFrame.size.height = NSHeight([contentsContainer_ frame]) - | 
| 120                            [self devToolsHeight]; | 126                            [self devToolsHeight]; | 
| 121     [[subviews objectAtIndex:0] setFrame:webFrame]; | 127     [[subviews objectAtIndex:0] setFrame:webFrame]; | 
| 122 | 128 | 
| 123     [contentsContainer_ adjustSubviews]; | 129     [contentsContainer_ adjustSubviews]; | 
| 124   } else { | 130   } else { | 
| 125     if ([subviews count] > 1) { | 131     if ([subviews count] > 1) { | 
| 126       NSView* oldDevToolsContentsView = [subviews objectAtIndex:1]; | 132       NSView* oldDevToolsContentsView = [subviews objectAtIndex:1]; | 
| 127       // Store split offset when hiding devtools window only. | 133       // Store split offset when hiding devtools window only. | 
| 128       int splitOffset = NSHeight([oldDevToolsContentsView frame]); | 134       int splitOffset = NSHeight([oldDevToolsContentsView frame]); | 
| 129       g_browser_process->local_state()->SetInteger( | 135       g_browser_process->local_state()->SetInteger( | 
| 130           prefs::kDevToolsSplitLocation, splitOffset); | 136           prefs::kDevToolsSplitLocation, splitOffset); | 
| 131       [oldDevToolsContentsView removeFromSuperview]; | 137       [oldDevToolsContentsView removeFromSuperview]; | 
| 132     } | 138     } | 
| 133   } | 139   } | 
| 134 } | 140 } | 
| 135 | 141 | 
| 136 - (CGFloat)devToolsHeight { | 142 - (CGFloat)devToolsHeight { | 
| 137   NSArray* subviews = [contentsContainer_ subviews]; | 143   NSArray* subviews = [contentsContainer_ subviews]; | 
| 138   if ([subviews count] < 2) | 144   if ([subviews count] < 2) | 
| 139     return 0; | 145     return 0; | 
| 140   return NSHeight([[subviews objectAtIndex:1] frame]) + | 146   return NSHeight([[subviews objectAtIndex:1] frame]) + | 
| 141          [contentsContainer_ dividerThickness]; | 147          [contentsContainer_ dividerThickness]; | 
| 142 } | 148 } | 
| 143 | 149 | 
| 144 @end | 150 @end | 
| OLD | NEW | 
|---|