webengine/osswebengine/WebKit/Carbon/CarbonWindowFrame.m
changeset 0 dd21522fd290
equal deleted inserted replaced
-1:000000000000 0:dd21522fd290
       
     1 /*
       
     2  * Copyright (C) 2005 Apple Computer, Inc.  All rights reserved.
       
     3  *
       
     4  * Redistribution and use in source and binary forms, with or without
       
     5  * modification, are permitted provided that the following conditions
       
     6  * are met:
       
     7  *
       
     8  * 1.  Redistributions of source code must retain the above copyright
       
     9  *     notice, this list of conditions and the following disclaimer. 
       
    10  * 2.  Redistributions in binary form must reproduce the above copyright
       
    11  *     notice, this list of conditions and the following disclaimer in the
       
    12  *     documentation and/or other materials provided with the distribution. 
       
    13  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
       
    14  *     its contributors may be used to endorse or promote products derived
       
    15  *     from this software without specific prior written permission. 
       
    16  *
       
    17  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
       
    18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
       
    19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
       
    20  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
       
    21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
       
    22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
       
    23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
       
    24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
       
    25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
       
    26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
    27  */
       
    28 
       
    29 #ifndef __LP64__
       
    30 
       
    31 #import "CarbonWindowFrame.h"
       
    32 #import "CarbonWindowAdapter.h"
       
    33 #import "CarbonWindowContentView.h"
       
    34 #import <Foundation/NSGeometry.h>
       
    35 #import <Foundation/NSString.h>
       
    36 #import <HIToolbox/MacWindows.h>
       
    37 
       
    38 #import "WebTypesInternal.h"
       
    39 
       
    40 @interface NSView(Secret)
       
    41 - (void)_setWindow:(NSWindow *)window;
       
    42 @end
       
    43 
       
    44 @class NSButton;
       
    45 /*
       
    46 
       
    47 @interface NSThemeFrame(NSHijackedClassMethods)
       
    48 
       
    49 + (float)_titlebarHeight:(unsigned int)style;
       
    50 
       
    51 @end
       
    52 */
       
    53 
       
    54 @implementation CarbonWindowFrame
       
    55 
       
    56 
       
    57 - (NSRect)titlebarRect
       
    58 {
       
    59     NSRect      titlebarRect;
       
    60     NSRect      boundsRect;
       
    61 
       
    62     boundsRect = [self bounds];
       
    63 
       
    64     CarbonWindowAdapter *carbonWindow;
       
    65     carbonWindow = (CarbonWindowAdapter *)[self window];
       
    66     WindowRef windowRef = [carbonWindow windowRef];
       
    67     Rect globalBounds;
       
    68     GetWindowBounds (windowRef, kWindowTitleBarRgn, &globalBounds);
       
    69     
       
    70     titlebarRect.origin.x    = boundsRect.origin.x;
       
    71     titlebarRect.size.width  = boundsRect.size.width;
       
    72     titlebarRect.size.height = globalBounds.bottom - globalBounds.top;
       
    73     titlebarRect.origin.y    = NSMaxY(boundsRect) - titlebarRect.size.height;
       
    74 
       
    75     return titlebarRect;
       
    76 }
       
    77 
       
    78 // Given a content rectangle and style mask, return a corresponding frame rectangle.
       
    79 + (NSRect)frameRectForContentRect:(NSRect)contentRect styleMask:(NSUInteger)style {
       
    80 
       
    81     // We don't bother figuring out a good value, because content rects weren't so meaningful for NSCarbonWindows in the past, but this might not be a good assumption anymore.  M.P. Warning - 12/5/00
       
    82     return contentRect;
       
    83 
       
    84 }
       
    85 
       
    86 + (NSRect)contentRectForFrameRect:(NSRect)frameRect styleMask:(NSUInteger)style {
       
    87 
       
    88     // We don't bother figuring out a good value, because content rects weren't so meaningful for NSCarbonWindows in the past, but this might not be a good assumption anymore.  KW - copied from +frameRectForContentRect:styleMask
       
    89     return frameRect;
       
    90 
       
    91 }
       
    92 
       
    93 + (NSSize)minFrameSizeForMinContentSize:(NSSize)cSize styleMask:(NSUInteger)style {
       
    94     // See comments above.  We don't make any assumptions about the relationship between content rects and frame rects
       
    95     return cSize;
       
    96 }
       
    97 
       
    98 - (NSRect)frameRectForContentRect:(NSRect)cRect styleMask:(NSUInteger)style {
       
    99     return [[self class] frameRectForContentRect: cRect styleMask:style];
       
   100 }
       
   101 - (NSRect)contentRectForFrameRect:(NSRect)fRect styleMask:(NSUInteger)style {
       
   102     return [[self class] contentRectForFrameRect: fRect styleMask:style];
       
   103 }
       
   104 - (NSSize)minFrameSizeForMinContentSize:(NSSize)cSize styleMask:(NSUInteger)style {
       
   105     return [[self class] minFrameSizeForMinContentSize:cSize styleMask: style];
       
   106 }
       
   107 
       
   108 // Initialize.
       
   109 - (id)initWithFrame:(NSRect)inFrameRect styleMask:(unsigned int)inStyleMask owner:(NSWindow *)inOwningWindow {
       
   110 
       
   111     // Parameter check.
       
   112     if (![inOwningWindow isKindOfClass:[CarbonWindowAdapter class]]) NSLog(@"CarbonWindowFrames can only be owned by CarbonWindowAdapters.");
       
   113 
       
   114     // Do the standard Cocoa thing.
       
   115     self = [super initWithFrame:inFrameRect];
       
   116     if (!self) return nil;
       
   117 
       
   118     // Record what we'll need later.
       
   119     _styleMask = inStyleMask;
       
   120 
       
   121     // Do what NSFrameView's method of the same name does.
       
   122     [self _setWindow:inOwningWindow];
       
   123     [self setNextResponder:inOwningWindow];
       
   124 
       
   125     // Done.
       
   126     return self;
       
   127 
       
   128 }
       
   129 
       
   130 
       
   131 // Deallocate.
       
   132 - (void)dealloc {
       
   133 
       
   134     // Simple.
       
   135     [super dealloc];
       
   136     
       
   137 }
       
   138 
       
   139 
       
   140 // Sink a method invocation.
       
   141 - (void)_setFrameNeedsDisplay:(BOOL)needsDisplay {
       
   142     
       
   143 }
       
   144 
       
   145 
       
   146 // Sink a method invocation.
       
   147 - (void)_setSheet:(BOOL)sheetFlag {
       
   148 
       
   149 }
       
   150 
       
   151 
       
   152 // Sink a method invocation.
       
   153 - (void)_updateButtonState {
       
   154 
       
   155 }
       
   156 
       
   157 #if 0
       
   158 // Sink a method invocation.
       
   159 - (void)_windowChangedKeyState {
       
   160 }
       
   161 #endif
       
   162 
       
   163 // Toolbar methods that NSWindow expects to be there.
       
   164 - (BOOL)_canHaveToolbar { return NO; }
       
   165 - (BOOL)_toolbarIsInTransition { return NO; }
       
   166 - (BOOL)_toolbarIsShown { return NO; }
       
   167 - (BOOL)_toolbarIsHidden { return NO; }
       
   168 - (void)_showToolbarWithAnimation:(BOOL)animate {}
       
   169 - (void)_hideToolbarWithAnimation:(BOOL)animate {}
       
   170 - (float)_distanceFromToolbarBaseToTitlebar { return 0; }
       
   171 
       
   172 
       
   173 // Refuse to admit there's a close button on the window.
       
   174 - (NSButton *)closeButton {
       
   175 
       
   176     // Simple.
       
   177     return nil;
       
   178 }
       
   179 
       
   180 
       
   181 // Return what's asked for.
       
   182 - (unsigned int)styleMask {
       
   183 
       
   184     // Simple.
       
   185     return _styleMask;
       
   186 
       
   187 }
       
   188 
       
   189 
       
   190 // Return what's asked for.
       
   191 - (NSRect)dragRectForFrameRect:(NSRect)frameRect {
       
   192 
       
   193     // Do what NSThemeFrame would do.
       
   194     // If we just return NSZeroRect here, _NXMakeWindowVisible() gets all befuddled in the sheet-showing case, a window-moving loop is entered, and the sheet gets moved right off of the screen.  M.P. Warning - 3/23/01
       
   195     NSRect dragRect;
       
   196     dragRect.size.height = 27;//[NSThemeFrame _titlebarHeight:[self styleMask]];
       
   197     dragRect.origin.y = NSMaxY(frameRect) - dragRect.size.height;
       
   198     dragRect.size.width = frameRect.size.width;
       
   199     dragRect.origin.x = frameRect.origin.x;
       
   200     return dragRect;
       
   201     
       
   202 }
       
   203 
       
   204 
       
   205 // Return what's asked for.
       
   206 - (BOOL)isOpaque {
       
   207 
       
   208     // Return a value that will make -[NSWindow displayIfNeeded] on our Carbon window actually work.
       
   209     return YES;
       
   210 
       
   211 }
       
   212 
       
   213 
       
   214 // Refuse to admit there's a minimize button on the window.
       
   215 - (NSButton *)minimizeButton {
       
   216 
       
   217     // Simple.
       
   218     return nil;
       
   219 
       
   220 }
       
   221 
       
   222 
       
   223 // Do the right thing for a Carbon window.
       
   224 - (void)setTitle:(NSString *)title {
       
   225 
       
   226     CarbonWindowAdapter *carbonWindow;
       
   227     OSStatus osStatus;
       
   228     WindowRef windowRef;
       
   229 
       
   230     // Set the Carbon window's title.
       
   231     carbonWindow = (CarbonWindowAdapter *)[self window];
       
   232     windowRef = [carbonWindow windowRef];
       
   233     osStatus = SetWindowTitleWithCFString(windowRef, (CFStringRef)title);
       
   234     if (osStatus!=noErr) NSLog(@"A Carbon window's title couldn't be set.");
       
   235 
       
   236 }
       
   237 
       
   238 
       
   239 // Return what's asked for.
       
   240 - (NSString *)title {
       
   241 
       
   242     CFStringRef windowTitle;
       
   243     CarbonWindowAdapter *carbonWindow;
       
   244     NSString *windowTitleAsNSString;
       
   245     OSStatus osStatus;
       
   246     WindowRef windowRef;
       
   247 
       
   248     // Return the Carbon window's title.
       
   249     carbonWindow = (CarbonWindowAdapter *)[self window];
       
   250     windowRef = [carbonWindow windowRef];
       
   251     osStatus = CopyWindowTitleAsCFString(windowRef, &windowTitle);
       
   252     if (osStatus==noErr) {
       
   253         windowTitleAsNSString = (NSString *)windowTitle;
       
   254     } else {
       
   255         NSLog(@"A Carbon window's title couldn't be gotten.");
       
   256         windowTitleAsNSString = @"";
       
   257     }
       
   258     return [windowTitleAsNSString autorelease];
       
   259 
       
   260 }
       
   261 
       
   262 
       
   263 // Return what's asked for.
       
   264 - (float)_sheetHeightAdjustment {
       
   265 
       
   266     // Do what NSThemeFrame would do.
       
   267     return 22;//[NSThemeFrame _titlebarHeight:([self styleMask] & ~NSDocModalWindowMask)];
       
   268     
       
   269 }
       
   270 
       
   271 // Return what's asked for.
       
   272 - (float)_maxTitlebarTitleRect {
       
   273 
       
   274     // Do what NSThemeFrame would do.
       
   275     return 22;//[NSThemeFrame _titlebarHeight:([self styleMask] & ~NSDocModalWindowMask)];
       
   276     
       
   277 }
       
   278 
       
   279 - (void)_clearDragMargins {
       
   280 }
       
   281 
       
   282 - (void)_resetDragMargins {
       
   283 }
       
   284 
       
   285 
       
   286 @end // implementation NSCarbonWindowFrame
       
   287 
       
   288 #endif