diff options
author | rohitrao@chromium.org <rohitrao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-26 21:07:12 +0000 |
---|---|---|
committer | rohitrao@chromium.org <rohitrao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-26 21:07:12 +0000 |
commit | aed1b0de668037c45b39d4a41fbdbd6300a8b942 (patch) | |
tree | e7b5d6b40557794ac316d2b499f8e4b2f55b02db /chrome/browser/cocoa | |
parent | fb56c27c85e46336d505cf51047345c5389cedba (diff) | |
download | chromium_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.h | 28 | ||||
-rw-r--r-- | chrome/browser/cocoa/chrome_browser_window.mm | 52 | ||||
-rw-r--r-- | chrome/browser/cocoa/chrome_browser_window_unittest.mm | 44 | ||||
-rw-r--r-- | chrome/browser/cocoa/framed_browser_window.h | 10 | ||||
-rw-r--r-- | chrome/browser/cocoa/framed_browser_window.mm | 39 | ||||
-rw-r--r-- | chrome/browser/cocoa/fullscreen_window.h | 14 | ||||
-rw-r--r-- | chrome/browser/cocoa/fullscreen_window.mm | 21 |
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 |