Browse Source

refactor: setup contentView on initialization

Cheng Zhao 7 years ago
parent
commit
ada884a129
1 changed files with 29 additions and 35 deletions
  1. 29 35
      atom/browser/native_window_mac.mm

+ 29 - 35
atom/browser/native_window_mac.mm

@@ -252,8 +252,7 @@ NativeWindowMac::NativeWindowMac(const mate::Dictionary& options,
 
   NSRect main_screen_rect = [[[NSScreen screens] firstObject] frame];
   gfx::Rect bounds(round((NSWidth(main_screen_rect) - width) / 2),
-                   round((NSHeight(main_screen_rect) - height) / 2),
-                   width,
+                   round((NSHeight(main_screen_rect) - height) / 2), width,
                    height);
 
   options.Get(options::kResizable, &resizable_);
@@ -432,19 +431,6 @@ NativeWindowMac::NativeWindowMac(const mate::Dictionary& options,
   // Set maximizable state last to ensure zoom button does not get reset
   // by calls to other APIs.
   SetMaximizable(maximizable);
-}
-
-NativeWindowMac::~NativeWindowMac() {
-  [NSEvent removeMonitor:wheel_event_monitor_];
-}
-
-void NativeWindowMac::SetContentView(
-    brightray::InspectableWebContents* web_contents) {
-  if (content_view_)
-    [content_view_ removeFromSuperview];
-
-  content_view_ = web_contents->GetView()->GetNativeView();
-  [content_view_ setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
 
   // Make sure the bottom corner is rounded for non-modal windows:
   // http://crbug.com/396264. But do not enable it on OS X 10.9 for transparent
@@ -457,10 +443,7 @@ void NativeWindowMac::SetContentView(
     [[window_ contentView] setWantsLayer:YES];
   }
 
-  if (has_frame()) {
-    [content_view_ setFrame:[[window_ contentView] bounds]];
-    [[window_ contentView] addSubview:content_view_];
-  } else {
+  if (!has_frame()) {
     // In OSX 10.10, adding subviews to the root view for the NSView hierarchy
     // produces warnings. To eliminate the warnings, we resize the contentView
     // to fill the window, and add subviews to that.
@@ -469,27 +452,15 @@ void NativeWindowMac::SetContentView(
     [container_view_
         setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
     [container_view_ setFrame:[[[window_ contentView] superview] bounds]];
-
-    // Move the vibrantView from the old content view.
-    if ([window_ vibrantView]) {
-      [[window_ vibrantView] removeFromSuperview];
-      [container_view_ addSubview:[window_ vibrantView]
-                       positioned:NSWindowBelow
-                       relativeTo:nil];
-    }
-
     [window_ setContentView:container_view_];
 
-    [content_view_ setFrame:[container_view_ bounds]];
-    [container_view_ addSubview:content_view_];
-
     // The fullscreen button should always be hidden for frameless window.
     [[window_ standardWindowButton:NSWindowFullScreenButton] setHidden:YES];
 
     if (title_bar_style_ == CUSTOM_BUTTONS_ON_HOVER) {
-      NSView* window_button_view = [[[CustomWindowButtonView alloc]
+      NSView* buttonsView = [[[CustomWindowButtonView alloc]
           initWithFrame:NSZeroRect] autorelease];
-      [container_view_ addSubview:window_button_view];
+      [[window_ contentView] addSubview:buttonsView];
     } else {
       if (title_bar_style_ != NORMAL) {
         if (base::mac::IsOS10_9()) {
@@ -513,6 +484,29 @@ void NativeWindowMac::SetContentView(
   }
 }
 
+NativeWindowMac::~NativeWindowMac() {
+  [NSEvent removeMonitor:wheel_event_monitor_];
+}
+
+void NativeWindowMac::SetContentView(
+    brightray::InspectableWebContents* web_contents) {
+  if (content_view_)
+    [content_view_ removeFromSuperview];
+
+  content_view_ = web_contents->GetView()->GetNativeView();
+  [content_view_ setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
+  [content_view_ setFrame:[[window_ contentView] bounds]];
+
+  if (title_bar_style_ == CUSTOM_BUTTONS_ON_HOVER) {
+    NSView* buttonsView = [[[window_ contentView] subviews] lastObject];
+    [[window_ contentView] addSubview:content_view_
+                           positioned:NSWindowBelow
+                           relativeTo:buttonsView];
+  } else {
+    [[window_ contentView] addSubview:content_view_];
+  }
+}
+
 void NativeWindowMac::Close() {
   // When this is a sheet showing, performClose won't work.
   if (is_modal() && parent() && IsVisible()) {
@@ -984,8 +978,8 @@ void NativeWindowMac::SetBackgroundColor(SkColor color) {
   // views::Widget adds a layer for the content view.
   auto* bridge = views::NativeWidgetMac::GetBridgeForNativeWindow(window_);
   NSView* compositor_superview =
-      static_cast<ui::AcceleratedWidgetMacNSView*>(bridge)->
-          AcceleratedWidgetGetNSView();
+      static_cast<ui::AcceleratedWidgetMacNSView*>(bridge)
+          ->AcceleratedWidgetGetNSView();
   [[compositor_superview layer] setBackgroundColor:cgcolor];
   // When using WebContents as content view, the contentView also has layer.
   if ([[window_ contentView] wantsLayer])