1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_UI_COCOA_FRAMED_BROWSER_WINDOW_H_ 6 #define CHROME_BROWSER_UI_COCOA_FRAMED_BROWSER_WINDOW_H_ 7 8 #import <Cocoa/Cocoa.h> 9 10 #include "chrome/browser/ui/cocoa/chrome_browser_window.h" 11 12 // Offsets from the top/left of the window frame to the top of the window 13 // controls (zoom, close, miniaturize) for a window with a tabstrip. 14 const NSInteger kFramedWindowButtonsWithTabStripOffsetFromTop = 11; 15 const NSInteger kFramedWindowButtonsWithTabStripOffsetFromLeft = 11; 16 17 // Offsets from the top/left of the window frame to the top of the window 18 // controls (zoom, close, miniaturize) for a window without a tabstrip. 19 const NSInteger kFramedWindowButtonsWithoutTabStripOffsetFromTop = 4; 20 const NSInteger kFramedWindowButtonsWithoutTabStripOffsetFromLeft = 8; 21 22 // Cocoa class representing a framed browser window. 23 // We need to override NSWindow with our own class since we need access to all 24 // unhandled keyboard events and subclassing NSWindow is the only method to do 25 // this. We also handle our own window controls and custom window frame drawing. 26 @interface FramedBrowserWindow : ChromeBrowserWindow { 27 @private 28 // Only used from 10.6-10.9. 29 BOOL shouldHideTitle_; 30 BOOL hasTabStrip_; 31 NSButton* closeButton_; 32 NSButton* miniaturizeButton_; 33 NSButton* zoomButton_; 34 35 CGFloat windowButtonsInterButtonSpacing_; 36 } 37 38 // Designated initializer. 39 - (id)initWithContentRect:(NSRect)contentRect 40 hasTabStrip:(BOOL)hasTabStrip; 41 42 // Tells the window to suppress title drawing. 43 - (void)setShouldHideTitle:(BOOL)flag; 44 45 // Returns the desired spacing between window control views. 46 - (CGFloat)windowButtonsInterButtonSpacing; 47 48 // Calls the superclass's implementation of |-toggleFullScreen:|. 49 - (void)toggleSystemFullScreen; 50 51 // Called by CustomFrameView to determine a custom location for the Lion 52 // fullscreen button. Returns NSZeroPoint to use the Lion default. 53 - (NSPoint)fullScreenButtonOriginAdjustment; 54 55 // Draws the window theme into the specified rect. Returns whether a theme was 56 // drawn (whether incognito or full pattern theme; an overlay image doesn't 57 // count). 58 + (BOOL)drawWindowThemeInDirtyRect:(NSRect)dirtyRect 59 forView:(NSView*)view 60 bounds:(NSRect)bounds 61 forceBlackBackground:(BOOL)forceBlackBackground; 62 63 // Gets the color to draw title text. 64 - (NSColor*)titleColor; 65 66 @end 67 68 @interface NSWindow (UndocumentedAPI) 69 70 // Undocumented Cocoa API (10.6-10.9) to suppress drawing of the window's title. 71 // -setTitle: still works, but the title set only applies to the miniwindow and 72 // menus (and, importantly, Expose). Overridden to return |shouldHideTitle_|. 73 -(BOOL)_isTitleHidden; 74 75 @end 76 77 #endif // CHROME_BROWSER_UI_COCOA_FRAMED_BROWSER_WINDOW_H_ 78