Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(301)

Unified Diff: chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm

Issue 10823195: Draggable region support for frameless app window on Mac. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/cocoa/extensions/shell_window_cocoa.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 4bf6254ae98e0f00f6756cdde5220ca1c84242a7..0097e41b9e362492ec52697025944501ddb15525 100644
--- a/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm
+++ b/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm
@@ -13,6 +13,7 @@
#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 "content/public/common/draggable_region.h"
#import "ui/base/cocoa/underlay_opengl_hosting_window.h"
@interface NSWindow (NSPrivateApis)
@@ -139,18 +140,6 @@ ShellWindowCocoa::ShellWindowCocoa(Profile* profile,
NSView* view = web_contents()->GetView()->GetNativeView();
[view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
- if (!has_frame_) {
- // TODO(jeremya): this is a temporary hack to allow moving the window while
- // we still don't have proper draggable region support.
- NSView* controlRegion = [[ControlRegionView alloc] init];
- [controlRegion setFrame:NSMakeRect(0, 0, NSWidth([view bounds]),
- NSHeight([view bounds]) - 20)];
- [controlRegion setAutoresizingMask:
- NSViewWidthSizable | NSViewHeightSizable];
- [view addSubview:controlRegion];
- [controlRegion release];
- }
-
InstallView();
[[window_controller_ window] setDelegate:window_controller_];
@@ -343,6 +332,44 @@ void ShellWindowCocoa::SetDraggableRegion(SkRegion* region) {
// TODO: implement
}
+void ShellWindowCocoa::UpdateDraggableRegions(
+ const std::vector<content::DraggableRegion>& regions) {
+ // Draggable region is not supported for non-frameless window.
+ if (has_frame_)
+ return;
+
+ NSView* frameView = [[window() contentView] superview];
+ int frameHeight = NSHeight([frameView bounds]);
+
+ // Remove all ControlRegionView that are added last time.
+ // Note that we need to copy subviews because [frameView subviews] returns the
+ // view's mutable internal array and we do not want to mutate the array while
+ // enumerating it.
+ NSArray* subviews = [[frameView subviews] copy];
+ for (NSView* subview in subviews) {
+ if ([subview isKindOfClass:[ControlRegionView class]]) {
+ [subview setHidden:YES];
+ [subview removeFromSuperview];
+ }
+ }
+ [subviews release];
+
+ // Create and add ControlRegionView for each region that needs to be excluded
+ // from the dragging.
+ for (std::vector<content::DraggableRegion>::const_iterator iter =
+ regions.begin();
+ iter != regions.end(); ++iter) {
+ const content::DraggableRegion& region = *iter;
+ NSView* controlRegion = [[ControlRegionView alloc] init];
+ [controlRegion setFrame:NSMakeRect(region.bounds.x(),
+ frameHeight - region.bounds.bottom(),
+ region.bounds.width(),
+ region.bounds.height())];
+ [frameView addSubview:controlRegion];
jeremya 2012/08/07 00:38:53 We should add the ControlRegionViews as children o
jianli 2012/08/08 21:26:31 Done.
+ [controlRegion release];
+ }
+}
+
void ShellWindowCocoa::FlashFrame(bool flash) {
if (flash) {
attention_request_id_ = [NSApp requestUserAttention:NSInformationalRequest];
« no previous file with comments | « chrome/browser/ui/cocoa/extensions/shell_window_cocoa.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698