refactor: use views::Widget on macOS

This commit is contained in:
Cheng Zhao 2018-04-24 17:23:08 +09:00
parent 7c4964fae6
commit 75a624434c
8 changed files with 72 additions and 26 deletions

View file

@ -11,7 +11,8 @@ namespace atom {
class AtomNativeWidgetMac : public views::NativeWidgetMac {
public:
explicit AtomNativeWidgetMac(views::internal::NativeWidgetDelegate* delegate);
AtomNativeWidgetMac(NSUInteger style_mask,
views::internal::NativeWidgetDelegate* delegate);
~AtomNativeWidgetMac() override;
protected:
@ -20,6 +21,8 @@ class AtomNativeWidgetMac : public views::NativeWidgetMac {
const views::Widget::InitParams& params) override;
private:
NSUInteger style_mask_;
DISALLOW_COPY_AND_ASSIGN(AtomNativeWidgetMac);
};

View file

@ -4,17 +4,26 @@
#include "atom/browser/ui/cocoa/atom_native_widget_mac.h"
#include "atom/browser/ui/cocoa/atom_ns_window.h"
#include "ui/base/cocoa/window_size_constants.h"
namespace atom {
AtomNativeWidgetMac::AtomNativeWidgetMac(
NSUInteger style_mask,
views::internal::NativeWidgetDelegate* delegate)
: views::NativeWidgetMac(delegate) {}
: views::NativeWidgetMac(delegate),
style_mask_(style_mask) {}
AtomNativeWidgetMac::~AtomNativeWidgetMac() {}
NativeWidgetMacNSWindow* AtomNativeWidgetMac::CreateNSWindow(
const views::Widget::InitParams& params) {
return views::NativeWidgetMac::CreateNSWindow(params);
return [[[AtomNSWindow alloc]
initWithContentRect:ui::kWindowSizeDeterminedLater
styleMask:style_mask_
backing:NSBackingStoreBuffered
defer:YES] autorelease];
}
} // namespace atom

View file

@ -26,7 +26,7 @@ class ScopedDisableResize {
} // namespace atom
@interface AtomNSWindow : EventDispatchingWindow {
@interface AtomNSWindow : NativeWidgetMacNSWindow {
@private
atom::NativeWindowMac* shell_;
CGFloat windowButtonsInterButtonSpacing_;

View file

@ -13,9 +13,9 @@ namespace atom {
class NativeWindowMac;
}
@interface AtomNSWindowDelegate : NSObject<NSWindowDelegate,
NSTouchBarDelegate,
QLPreviewPanelDataSource> {
@interface AtomNSWindowDelegate :
ViewsNSWindowDelegate<NSTouchBarDelegate,
QLPreviewPanelDataSource> {
@private
atom::NativeWindowMac* shell_;
bool is_zooming_;

View file

@ -9,11 +9,21 @@
#include "atom/browser/ui/cocoa/atom_preview_item.h"
#include "atom/browser/ui/cocoa/atom_touch_bar.h"
#include "base/mac/mac_util.h"
#include "ui/views/widget/native_widget_mac.h"
@implementation AtomNSWindowDelegate
- (id)initWithShell:(atom::NativeWindowMac*)shell {
if ((self = [super init])) {
// The views library assumes the window delegate must be an instance of
// ViewsNSWindowDelegate, since we don't have a way to override the creation
// of NSWindowDelegate, we have to dynamically replace the window delegate
// on the fly.
// TODO(zcbenz): Add interface in NativeWidgetMac to allow overriding creating
// window delegate.
views::BridgedNativeWidget* bridget_view =
views::NativeWidgetMac::GetBridgeForNativeWindow(
shell->GetNativeWindow());
if ((self = [super initWithBridgedNativeWidget:bridget_view])) {
shell_ = shell;
is_zooming_ = false;
level_ = [shell_->GetNativeWindow() level];

View file

@ -16,8 +16,7 @@ ViewsDelegateMac::~ViewsDelegateMac() {}
void ViewsDelegateMac::OnBeforeWidgetInit(
views::Widget::InitParams* params,
views::internal::NativeWidgetDelegate* delegate) {
if (!params->native_widget)
params->native_widget = new views::NativeWidgetMac(delegate);
DCHECK(params->native_widget);
}
ui::ContextFactory* ViewsDelegateMac::GetContextFactory() {