Index: chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm |
diff --git a/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm b/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm |
index 70f678c1efc0d148a4832c0a7bc9c06b5ade2024..f9375e0f67de0217a02a72ac641c98a57d476e96 100644 |
--- a/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm |
+++ b/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm |
@@ -17,7 +17,6 @@ |
#include "content/public/browser/render_widget_host_view.h" |
#include "content/public/browser/web_contents.h" |
#include "content/public/browser/web_contents_view.h" |
-#include "third_party/skia/include/core/SkRegion.h" |
@interface NSWindow (NSPrivateApis) |
- (void)setBottomCornerRounded:(BOOL)rounded; |
@@ -167,10 +166,8 @@ |
- (NSView*)hitTest:(NSPoint)aPoint { |
if (shellWindow_->use_system_drag()) |
return nil; |
- if (!shellWindow_->draggable_region() || |
- !shellWindow_->draggable_region()->contains(aPoint.x, aPoint.y)) { |
+ if (!shellWindow_->IsInsideDraggableRegions(aPoint.x, aPoint.y)) |
return nil; |
- } |
return self; |
} |
@@ -190,8 +187,8 @@ |
ShellWindowCocoa::ShellWindowCocoa(ShellWindow* shell_window, |
const ShellWindow::CreateParams& params) |
- : shell_window_(shell_window), |
- has_frame_(params.frame == ShellWindow::CreateParams::FRAME_CHROME), |
+ : NativeShellWindow(params), |
+ shell_window_(shell_window), |
attention_request_id_(0), |
use_system_drag_(true) { |
// Flip coordinates based on the primary screen. |
@@ -214,14 +211,14 @@ ShellWindowCocoa::ShellWindowCocoa(ShellWindow* shell_window, |
NSMiniaturizableWindowMask | NSResizableWindowMask | |
NSTexturedBackgroundWindowMask; |
scoped_nsobject<NSWindow> window; |
- if (has_frame_) { |
- window.reset([[ShellNSWindow alloc] |
+ if (frameless()) { |
+ window.reset([[ShellFramelessNSWindow alloc] |
initWithContentRect:cocoa_bounds |
styleMask:style_mask |
backing:NSBackingStoreBuffered |
defer:NO]); |
} else { |
- window.reset([[ShellFramelessNSWindow alloc] |
+ window.reset([[ShellNSWindow alloc] |
initWithContentRect:cocoa_bounds |
styleMask:style_mask |
backing:NSBackingStoreBuffered |
@@ -250,7 +247,7 @@ ShellWindowCocoa::ShellWindowCocoa(ShellWindow* shell_window, |
[view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; |
// By default, the whole frameless window is not draggable. |
- if (!has_frame_) { |
+ if (frameless()) { |
gfx::Rect window_bounds( |
0, 0, NSWidth(cocoa_bounds), NSHeight(cocoa_bounds)); |
system_drag_exclude_areas_.push_back(window_bounds); |
@@ -270,10 +267,7 @@ ShellWindowCocoa::ShellWindowCocoa(ShellWindow* shell_window, |
void ShellWindowCocoa::InstallView() { |
NSView* view = web_contents()->GetView()->GetNativeView(); |
- if (has_frame_) { |
- [view setFrame:[[window() contentView] bounds]]; |
- [[window() contentView] addSubview:view]; |
- } else { |
+ if (frameless()) { |
// TODO(jeremya): find a cleaner way to send this information to the |
// WebContentsViewCocoa view. |
DCHECK([view |
@@ -289,6 +283,9 @@ void ShellWindowCocoa::InstallView() { |
[[window() standardWindowButton:NSWindowCloseButton] setHidden:YES]; |
InstallDraggableRegionViews(); |
+ } else { |
+ [view setFrame:[[window() contentView] bounds]]; |
+ [[window() contentView] addSubview:view]; |
} |
} |
@@ -464,7 +461,7 @@ void ShellWindowCocoa::UpdateWindowTitle() { |
void ShellWindowCocoa::UpdateDraggableRegions( |
const std::vector<extensions::DraggableRegion>& regions) { |
// Draggable region is not supported for non-frameless window. |
- if (has_frame_) |
+ if (!frameless()) |
return; |
// To use system drag, the window has to be marked as draggable with |
@@ -583,36 +580,7 @@ void ShellWindowCocoa::UpdateDraggableRegionsForCustomDrag( |
// Aggregate the draggable areas and non-draggable areas such that hit test |
// could be performed easily. |
- SkRegion* draggable_region = new SkRegion; |
- for (std::vector<extensions::DraggableRegion>::const_iterator iter = |
- regions.begin(); |
- iter != regions.end(); |
- ++iter) { |
- const extensions::DraggableRegion& region = *iter; |
- draggable_region->op( |
- region.bounds.x(), |
- region.bounds.y(), |
- region.bounds.right(), |
- region.bounds.bottom(), |
- region.draggable ? SkRegion::kUnion_Op : SkRegion::kDifference_Op); |
- } |
- draggable_region_.reset(draggable_region); |
-} |
- |
-void ShellWindowCocoa::UpdateLegacyDraggableRegions( |
- const std::vector<extensions::DraggableRegion>& regions) { |
- // Draggable region is not supported for non-frameless window. |
- if (has_frame_) |
- return; |
- |
- system_drag_exclude_areas_.clear(); |
- for (std::vector<extensions::DraggableRegion>::const_iterator iter = |
- regions.begin(); |
- iter != regions.end(); |
- ++iter) { |
- system_drag_exclude_areas_.push_back(iter->bounds); |
- } |
- InstallDraggableRegionViews(); |
+ NativeShellWindow::UpdateDraggableRegions(regions); |
} |
void ShellWindowCocoa::HandleKeyboardEvent( |
@@ -625,7 +593,7 @@ void ShellWindowCocoa::HandleKeyboardEvent( |
} |
void ShellWindowCocoa::InstallDraggableRegionViews() { |
- DCHECK(!has_frame_); |
+ DCHECK(frameless()); |
// All ControlRegionViews should be added as children of the WebContentsView, |
// because WebContentsView will be removed and re-added when entering and |