Remove MenuLayout in favor of NativeWindowViews::Layout
authorBirunthan Mohanathas <birunthan@mohanathas.com>
Wed, 12 Apr 2017 11:00:00 +0000 (14:00 +0300)
committerBirunthan Mohanathas <birunthan@mohanathas.com>
Wed, 12 Apr 2017 22:27:31 +0000 (01:27 +0300)
atom/browser/native_window_views.cc
atom/browser/native_window_views.h
atom/browser/ui/views/menu_layout.cc [deleted file]
atom/browser/ui/views/menu_layout.h [deleted file]
filenames.gypi

index 68e210a62568299caa28c6e1c38228c898b6007e..8f5072931b1a16348569ea64a6d43280dd07d2f0 100644 (file)
@@ -9,7 +9,6 @@
 
 #include "atom/browser/native_browser_view.h"
 #include "atom/browser/ui/views/menu_bar.h"
-#include "atom/browser/ui/views/menu_layout.h"
 #include "atom/browser/window_list.h"
 #include "atom/common/color_util.h"
 #include "atom/common/draggable_region.h"
@@ -71,6 +70,20 @@ const int kMenuBarHeight = 25;
 #endif
 
 #if defined(OS_WIN)
+gfx::Rect SubtractBorderSize(gfx::Rect bounds) {
+  gfx::Point borderSize = gfx::Point(
+      GetSystemMetrics(SM_CXSIZEFRAME) - 1,   // width
+      GetSystemMetrics(SM_CYSIZEFRAME) - 1);  // height
+  gfx::Point dpiAdjustedSize =
+      display::win::ScreenWin::ScreenToDIPPoint(borderSize);
+
+  bounds.set_x(bounds.x() + dpiAdjustedSize.x());
+  bounds.set_y(bounds.y() + dpiAdjustedSize.y());
+  bounds.set_width(bounds.width() - 2 * dpiAdjustedSize.x());
+  bounds.set_height(bounds.height() - 2 * dpiAdjustedSize.y());
+  return bounds;
+}
+
 void FlipWindowStyle(HWND handle, bool on, DWORD flag) {
   DWORD style = ::GetWindowLong(handle, GWL_STYLE);
   if (on)
@@ -276,9 +289,6 @@ NativeWindowViews::NativeWindowViews(
     SetWindowType(GetAcceleratedWidget(), window_type);
 #endif
 
-  // Add web view.
-  SetLayoutManager(new MenuLayout(this, kMenuBarHeight));
-
   AddChildView(web_view_);
 
 #if defined(OS_WIN)
@@ -1264,6 +1274,31 @@ void NativeWindowViews::HandleKeyboardEvent(
   }
 }
 
+void NativeWindowViews::Layout() {
+#if defined(OS_WIN)
+  // Reserve border space for maximized frameless window so we won't have the
+  // content go outside of screen.
+  if (!has_frame() && IsMaximized()) {
+    gfx::Rect bounds = SubtractBorderSize(GetContentsBounds());
+    web_view_->SetBoundsRect(bounds);
+    return;
+  }
+#endif
+
+  const auto size = GetContentsBounds().size();
+  const auto menu_bar_bounds =
+      menu_bar_ ? gfx::Rect(0, 0, size.width(), kMenuBarHeight) : gfx::Rect();
+  if (menu_bar_) {
+    menu_bar_->SetBoundsRect(menu_bar_bounds);
+  }
+
+  if (web_view_) {
+    web_view_->SetBoundsRect(
+        gfx::Rect(0, menu_bar_bounds.height(), size.width(),
+                  size.height() - menu_bar_bounds.height()));
+  }
+}
+
 gfx::Size NativeWindowViews::GetMinimumSize() {
   return NativeWindow::GetMinimumSize();
 }
index cf605a0231bab586688ae5f1dd73ac83fbcadb30..276cd4adde2d4afb66eec9ba3a1ba9ce7e13cd14 100644 (file)
@@ -177,6 +177,7 @@ class NativeWindowViews : public NativeWindow,
       const content::NativeWebKeyboardEvent& event) override;
 
   // views::View:
+  void Layout() override;
   gfx::Size GetMinimumSize() override;
   gfx::Size GetMaximumSize() override;
   bool AcceleratorPressed(const ui::Accelerator& accelerator) override;
diff --git a/atom/browser/ui/views/menu_layout.cc b/atom/browser/ui/views/menu_layout.cc
deleted file mode 100644 (file)
index d70a465..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright (c) 2014 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "atom/browser/ui/views/menu_layout.h"
-
-#if defined(OS_WIN)
-#include "atom/browser/native_window_views.h"
-#include "ui/display/win/screen_win.h"
-#endif
-
-namespace atom {
-
-namespace {
-
-#if defined(OS_WIN)
-gfx::Rect SubtractBorderSize(gfx::Rect bounds) {
-  gfx::Point borderSize = gfx::Point(
-      GetSystemMetrics(SM_CXSIZEFRAME) - 1,   // width
-      GetSystemMetrics(SM_CYSIZEFRAME) - 1);  // height
-  gfx::Point dpiAdjustedSize =
-      display::win::ScreenWin::ScreenToDIPPoint(borderSize);
-
-  bounds.set_x(bounds.x() + dpiAdjustedSize.x());
-  bounds.set_y(bounds.y() + dpiAdjustedSize.y());
-  bounds.set_width(bounds.width() - 2 * dpiAdjustedSize.x());
-  bounds.set_height(bounds.height() - 2 * dpiAdjustedSize.y());
-  return bounds;
-}
-#endif
-
-}  // namespace
-
-MenuLayout::MenuLayout(NativeWindowViews* window, int menu_height)
-    : window_(window),
-      menu_height_(menu_height) {
-}
-
-MenuLayout::~MenuLayout() {
-}
-
-void MenuLayout::Layout(views::View* host) {
-#if defined(OS_WIN)
-  // Reserve border space for maximized frameless window so we won't have the
-  // content go outside of screen.
-  if (!window_->has_frame() && window_->IsMaximized()) {
-    gfx::Rect bounds = SubtractBorderSize(host->GetContentsBounds());
-    host->child_at(0)->SetBoundsRect(bounds);
-    return;
-  }
-#endif
-
-  if (!HasMenu(host)) {
-    views::FillLayout::Layout(host);
-    return;
-  }
-
-  gfx::Size size = host->GetContentsBounds().size();
-  gfx::Rect menu_Bar_bounds = gfx::Rect(0, 0, size.width(), menu_height_);
-  gfx::Rect web_view_bounds = gfx::Rect(
-      0, menu_height_, size.width(), size.height() - menu_height_);
-
-  views::View* web_view = host->child_at(0);
-  views::View* menu_bar = host->child_at(1);
-  web_view->SetBoundsRect(web_view_bounds);
-  menu_bar->SetBoundsRect(menu_Bar_bounds);
-}
-
-gfx::Size MenuLayout::GetPreferredSize(const views::View* host) const {
-  gfx::Size size = views::FillLayout::GetPreferredSize(host);
-  if (!HasMenu(host))
-    return size;
-
-  size.set_height(size.height() + menu_height_);
-  return size;
-}
-
-int MenuLayout::GetPreferredHeightForWidth(
-    const views::View* host, int width) const {
-  int height = views::FillLayout::GetPreferredHeightForWidth(host, width);
-  if (!HasMenu(host))
-    return height;
-
-  return height + menu_height_;
-}
-
-bool MenuLayout::HasMenu(const views::View* host) const {
-  return host->child_count() == 2;
-}
-
-}  // namespace atom
diff --git a/atom/browser/ui/views/menu_layout.h b/atom/browser/ui/views/menu_layout.h
deleted file mode 100644 (file)
index 0a8464a..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2014 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef ATOM_BROWSER_UI_VIEWS_MENU_LAYOUT_H_
-#define ATOM_BROWSER_UI_VIEWS_MENU_LAYOUT_H_
-
-#include "ui/views/layout/fill_layout.h"
-
-namespace atom {
-
-class NativeWindowViews;
-
-class MenuLayout : public views::FillLayout {
- public:
-  MenuLayout(NativeWindowViews* window, int menu_height);
-  virtual ~MenuLayout();
-
-  // views::LayoutManager:
-  void Layout(views::View* host) override;
-  gfx::Size GetPreferredSize(const views::View* host) const override;
-  int GetPreferredHeightForWidth(
-      const views::View* host, int width) const override;
-
- private:
-  bool HasMenu(const views::View* host) const;
-
-  NativeWindowViews* window_;
-  int menu_height_;
-
-  DISALLOW_COPY_AND_ASSIGN(MenuLayout);
-};
-
-}  // namespace atom
-
-#endif  // ATOM_BROWSER_UI_VIEWS_MENU_LAYOUT_H_
index f9fa4227ea1dec2b517808a9b23e6cafcab364ca..8f14b298837bac45f853718137c646f33bd4b124 100644 (file)
       'atom/browser/ui/views/menu_bar.h',
       'atom/browser/ui/views/menu_delegate.cc',
       'atom/browser/ui/views/menu_delegate.h',
-      'atom/browser/ui/views/menu_layout.cc',
-      'atom/browser/ui/views/menu_layout.h',
       'atom/browser/ui/views/menu_model_adapter.cc',
       'atom/browser/ui/views/menu_model_adapter.h',
       'atom/browser/ui/views/native_frame_view.cc',