summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa
diff options
context:
space:
mode:
authorrohitrao@chromium.org <rohitrao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-26 21:07:12 +0000
committerrohitrao@chromium.org <rohitrao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-26 21:07:12 +0000
commitaed1b0de668037c45b39d4a41fbdbd6300a8b942 (patch)
treee7b5d6b40557794ac316d2b499f8e4b2f55b02db /chrome/browser/cocoa
parentfb56c27c85e46336d505cf51047345c5389cedba (diff)
downloadchromium_src-aed1b0de668037c45b39d4a41fbdbd6300a8b942.zip
chromium_src-aed1b0de668037c45b39d4a41fbdbd6300a8b942.tar.gz
chromium_src-aed1b0de668037c45b39d4a41fbdbd6300a8b942.tar.bz2
[Mac] New base class for FramedBrowserWindow and FullscreenWindow. Move common funtionality (theming and hole punching) into this base class.
BUG=53449,53991 TEST=Run with --enable-accelerated-compositing. Go to http://webkit.org/blog/386/3d-transforms/. Go fullscreen. Should see the webpage, not pure black. TEST=Go fullscreen with the Android Robot theme installed. Tab text for unselected tabs should be grey, not black. Review URL: http://codereview.chromium.org/3210004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@57577 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/cocoa')
-rw-r--r--chrome/browser/cocoa/chrome_browser_window.h28
-rw-r--r--chrome/browser/cocoa/chrome_browser_window.mm52
-rw-r--r--chrome/browser/cocoa/chrome_browser_window_unittest.mm44
-rw-r--r--chrome/browser/cocoa/framed_browser_window.h10
-rw-r--r--chrome/browser/cocoa/framed_browser_window.mm39
-rw-r--r--chrome/browser/cocoa/fullscreen_window.h14
-rw-r--r--chrome/browser/cocoa/fullscreen_window.mm21
7 files changed, 133 insertions, 75 deletions
diff --git a/chrome/browser/cocoa/chrome_browser_window.h b/chrome/browser/cocoa/chrome_browser_window.h
new file mode 100644
index 0000000..488bf0b
--- /dev/null
+++ b/chrome/browser/cocoa/chrome_browser_window.h
@@ -0,0 +1,28 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_COCOA_CHROME_BROWSER_WINDOW_H_
+#define CHROME_BROWSER_COCOA_CHROME_BROWSER_WINDOW_H_
+#pragma once
+
+#import <Cocoa/Cocoa.h>
+
+#include "chrome/browser/cocoa/chrome_event_processing_window.h"
+
+// Common base class for chrome browser windows. Contains methods relating to
+// theming and hole punching that are shared between framed and fullscreen
+// windows.
+@interface ChromeBrowserWindow : ChromeEventProcessingWindow {
+ @private
+ int underlaySurfaceCount_;
+}
+
+// Informs the window that an underlay surface has been added/removed. The
+// window is non-opaque while underlay surfaces are present.
+- (void)underlaySurfaceAdded;
+- (void)underlaySurfaceRemoved;
+
+@end
+
+#endif // CHROME_BROWSER_COCOA_CHROME_BROWSER_WINDOW_H_
diff --git a/chrome/browser/cocoa/chrome_browser_window.mm b/chrome/browser/cocoa/chrome_browser_window.mm
new file mode 100644
index 0000000..6dc6cea
--- /dev/null
+++ b/chrome/browser/cocoa/chrome_browser_window.mm
@@ -0,0 +1,52 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "chrome/browser/cocoa/chrome_browser_window.h"
+
+#include "base/logging.h"
+#import "chrome/browser/cocoa/themed_window.h"
+#include "chrome/browser/themes/browser_theme_provider.h"
+
+@implementation ChromeBrowserWindow
+
+- (void)underlaySurfaceAdded {
+ DCHECK_GE(underlaySurfaceCount_, 0);
+ ++underlaySurfaceCount_;
+
+ // We're having the OpenGL surface render under the window, so the window
+ // needs to be not opaque.
+ if (underlaySurfaceCount_ == 1)
+ [self setOpaque:NO];
+}
+
+- (void)underlaySurfaceRemoved {
+ --underlaySurfaceCount_;
+ DCHECK_GE(underlaySurfaceCount_, 0);
+
+ if (underlaySurfaceCount_ == 0)
+ [self setOpaque:YES];
+}
+
+- (ThemeProvider*)themeProvider {
+ id delegate = [self delegate];
+ if (![delegate respondsToSelector:@selector(themeProvider)])
+ return NULL;
+ return [delegate themeProvider];
+}
+
+- (ThemedWindowStyle)themedWindowStyle {
+ id delegate = [self delegate];
+ if (![delegate respondsToSelector:@selector(themedWindowStyle)])
+ return THEMED_NORMAL;
+ return [delegate themedWindowStyle];
+}
+
+- (NSPoint)themePatternPhase {
+ id delegate = [self delegate];
+ if (![delegate respondsToSelector:@selector(themePatternPhase)])
+ return NSMakePoint(0, 0);
+ return [delegate themePatternPhase];
+}
+
+@end
diff --git a/chrome/browser/cocoa/chrome_browser_window_unittest.mm b/chrome/browser/cocoa/chrome_browser_window_unittest.mm
new file mode 100644
index 0000000..2b82f79
--- /dev/null
+++ b/chrome/browser/cocoa/chrome_browser_window_unittest.mm
@@ -0,0 +1,44 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import <Cocoa/Cocoa.h>
+
+#import "chrome/browser/cocoa/chrome_browser_window.h"
+#import "chrome/browser/cocoa/cocoa_test_helper.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#import "testing/gtest_mac.h"
+#include "testing/platform_test.h"
+
+class ChromeBrowserWindowTest : public CocoaTest {
+ public:
+ virtual void SetUp() {
+ CocoaTest::SetUp();
+ // Create a window.
+ const NSUInteger mask = NSTitledWindowMask | NSClosableWindowMask |
+ NSMiniaturizableWindowMask | NSResizableWindowMask;
+ window_ = [[ChromeBrowserWindow alloc]
+ initWithContentRect:NSMakeRect(0, 0, 800, 600)
+ styleMask:mask
+ backing:NSBackingStoreBuffered
+ defer:NO];
+ if (DebugUtil::BeingDebugged()) {
+ [window_ orderFront:nil];
+ } else {
+ [window_ orderBack:nil];
+ }
+ }
+
+ virtual void TearDown() {
+ [window_ close];
+ CocoaTest::TearDown();
+ }
+
+ ChromeBrowserWindow* window_;
+};
+
+// Baseline test that the window creates, displays, closes, and
+// releases.
+TEST_F(ChromeBrowserWindowTest, ShowAndClose) {
+ [window_ display];
+}
diff --git a/chrome/browser/cocoa/framed_browser_window.h b/chrome/browser/cocoa/framed_browser_window.h
index adaf1e0..80d0815 100644
--- a/chrome/browser/cocoa/framed_browser_window.h
+++ b/chrome/browser/cocoa/framed_browser_window.h
@@ -9,7 +9,7 @@
#import <Cocoa/Cocoa.h>
#include "base/scoped_nsobject.h"
-#include "chrome/browser/cocoa/chrome_event_processing_window.h"
+#include "chrome/browser/cocoa/chrome_browser_window.h"
// Offset from the top of the window frame to the top of the window controls
// (zoom, close, miniaturize) for a window with a tabstrip.
@@ -30,7 +30,7 @@ const NSInteger kFramedWindowButtonsInterButtonSpacing = 7;
// We need to override NSWindow with our own class since we need access to all
// unhandled keyboard events and subclassing NSWindow is the only method to do
// this. We also handle our own window controls and custom window frame drawing.
-@interface FramedBrowserWindow : ChromeEventProcessingWindow {
+@interface FramedBrowserWindow : ChromeBrowserWindow {
@private
BOOL shouldHideTitle_;
NSButton* closeButton_;
@@ -38,7 +38,6 @@ const NSInteger kFramedWindowButtonsInterButtonSpacing = 7;
NSButton* zoomButton_;
BOOL entered_;
scoped_nsobject<NSTrackingArea> widgetTrackingArea_;
- int underlaySurfaceCount_;
}
// Tells the window to suppress title drawing.
@@ -51,11 +50,6 @@ const NSInteger kFramedWindowButtonsInterButtonSpacing = 7;
// Update the tracking areas for our window widgets as appropriate.
- (void)updateTrackingAreas;
-// Informs the window that an underlay surface has been added/removed. The
-// window is non-opaque while underlay surfaces are present.
-- (void)underlaySurfaceAdded;
-- (void)underlaySurfaceRemoved;
-
@end
@interface NSWindow (UndocumentedAPI)
diff --git a/chrome/browser/cocoa/framed_browser_window.mm b/chrome/browser/cocoa/framed_browser_window.mm
index ef246b6..4ca7ba2 100644
--- a/chrome/browser/cocoa/framed_browser_window.mm
+++ b/chrome/browser/cocoa/framed_browser_window.mm
@@ -243,24 +243,6 @@ namespace {
}
}
-- (void)underlaySurfaceAdded {
- DCHECK_GE(underlaySurfaceCount_, 0);
- ++underlaySurfaceCount_;
-
- // We're having the OpenGL surface render under the window, so the window
- // needs to be not opaque.
- if (underlaySurfaceCount_ == 1)
- [self setOpaque:NO];
-}
-
-- (void)underlaySurfaceRemoved {
- --underlaySurfaceCount_;
- DCHECK_GE(underlaySurfaceCount_, 0);
-
- if (underlaySurfaceCount_ == 0)
- [self setOpaque:YES];
-}
-
- (void)windowMainStatusChanged {
[closeButton_ setNeedsDisplay];
[zoomButton_ setNeedsDisplay];
@@ -365,25 +347,4 @@ namespace {
return [super constrainFrameRect:frame toScreen:screen];
}
-- (ThemeProvider*)themeProvider {
- id delegate = [self delegate];
- if (![delegate respondsToSelector:@selector(themeProvider)])
- return NULL;
- return [delegate themeProvider];
-}
-
-- (ThemedWindowStyle)themedWindowStyle {
- id delegate = [self delegate];
- if (![delegate respondsToSelector:@selector(themedWindowStyle)])
- return THEMED_NORMAL;
- return [delegate themedWindowStyle];
-}
-
-- (NSPoint)themePatternPhase {
- id delegate = [self delegate];
- if (![delegate respondsToSelector:@selector(themePatternPhase)])
- return NSMakePoint(0, 0);
- return [delegate themePatternPhase];
-}
-
@end
diff --git a/chrome/browser/cocoa/fullscreen_window.h b/chrome/browser/cocoa/fullscreen_window.h
index d43059d..ba01abf 100644
--- a/chrome/browser/cocoa/fullscreen_window.h
+++ b/chrome/browser/cocoa/fullscreen_window.h
@@ -3,14 +3,14 @@
// found in the LICENSE file.
#include <Cocoa/Cocoa.h>
-#import "chrome/browser/cocoa/chrome_event_processing_window.h"
+#import "chrome/browser/cocoa/chrome_browser_window.h"
-// A FullscreenWindow is a borderless window suitable for going
-// fullscreen. The returned window is NOT release when closed and is
-// not initially visible.
-// FullscreenWindow derives from ChromeEventProcessingWindow to inherit
-// special event handling (e.g. handleExtraKeyboardShortcut).
-@interface FullscreenWindow : ChromeEventProcessingWindow
+// A FullscreenWindow is a borderless window suitable for going fullscreen. The
+// returned window is NOT release when closed and is not initially visible.
+// FullscreenWindow derives from ChromeBrowserWindow to inherit hole punching,
+// theming methods, and special event handling
+// (e.g. handleExtraKeyboardShortcut).
+@interface FullscreenWindow : ChromeBrowserWindow
// Initialize a FullscreenWindow for the given screen.
// Designated initializer.
diff --git a/chrome/browser/cocoa/fullscreen_window.mm b/chrome/browser/cocoa/fullscreen_window.mm
index 15c2ee8..d0fb304 100644
--- a/chrome/browser/cocoa/fullscreen_window.mm
+++ b/chrome/browser/cocoa/fullscreen_window.mm
@@ -82,25 +82,4 @@
return [super validateUserInterfaceItem:item];
}
-- (ThemeProvider*)themeProvider {
- id delegate = [self delegate];
- if (![delegate respondsToSelector:@selector(themeProvider)])
- return NULL;
- return [delegate themeProvider];
-}
-
-- (ThemedWindowStyle)themedWindowStyle {
- id delegate = [self delegate];
- if (![delegate respondsToSelector:@selector(themedWindowStyle)])
- return THEMED_NORMAL;
- return [delegate themedWindowStyle];
-}
-
-- (NSPoint)themePatternPhase {
- id delegate = [self delegate];
- if (![delegate respondsToSelector:@selector(themePatternPhase)])
- return NSMakePoint(0, 0);
- return [delegate themePatternPhase];
-}
-
@end