Window frame handling fixups (bug #17377)

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@23399 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2006-09-06 11:29:20 +00:00
parent 7d001ccf0c
commit 17d346b3e5
7 changed files with 246 additions and 257 deletions

View file

@ -1,3 +1,16 @@
2006-09-06 Richard Frith-Macdonald <rfm@gnu.org>
* Headers/AppKit/NSWindow.h: Add some documentation about what
frame management methods should do. Remove some bogus additional
methods for messing with frames.
* Source/NSWindow.m: ([cascadeTopLeftFromPoint:]) implement to match
MacOS-X specification. Remove unused additional frame methods.
* Source/GSWindowDecorationView.h:
* Source/GSWindowDecorationView.m:
* Source/GSStandardWindowDecorationView.m:
Remove unused/unnecessary methods and simplify.
NB. These fixups require corresponding fixups in the backend.
2006-09-05 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSBitmapImageRep+JPEG.m: Fix declaration position causing

View file

@ -106,29 +106,21 @@ APPKIT_EXPORT NSSize NSTokenSize;
/*
A window really has three interesting frames:
The screen frame. This is the frame of the _entire_ window on the screen,
The window frame. This is the frame of the _entire_ window on the screen,
including all decorations and borders (regardless of where they come from).
(On X, we can only guess what the screen frame is.)
The window frame. This is the frame of the backend window for this window,
The backend frame. This is the frame of the backend window for this window,
and is thus the base of the coordinate system for the window. IOW, it's
the frame of the area we can draw into.
the frame of the area the gui library internals can draw into.
The contect rect. This is the frame of the content view.
The contect rect. This is the frame of the content view ... ie the frame
that an application using the GUI/AppKit API can draw into.
Wrt. size, ScreenFrame >= WindowFrame >= ContentRect. When -gui doesn't
manage the window decorations, WindowFrame == ContentRect. When -gui does
manage the window decorations, WindowFrame will include the decorations,
and ScreenFrame == WindowFrame.
Wrt. size, Frame >= BackendFrame >= ContentRect. When -gui doesn't
manage the window decorations, BackendFrame == ContentRect. When -gui does
manage the window decorations, BackendFrame will include the decorations,
and Frame == BackendFrame.
To get coordinate transforms and stuff right wrt. OpenStep, we really want
the window frame here.
For hysterical reasons, _frame used to be the screen frame. However, the
resulting inconsistencies caused a bunch of problems. Thus, _frame is the
window frame. The other rectangles/sizes passed around in NSWindow
methods are supposed to all be window frames.
*/
NSRect _frame;
@ -219,21 +211,27 @@ APPKIT_EXPORT NSSize NSTokenSize;
* Computing frame and content rectangles
*/
/* These methods convert between the various frames discussed above. */
/**
* Returns the rectangle which would be used for the content view of
* a window whose on-screen size and position is specified by aRect
* and which is decorated with the border and title etc given by aStyle.
*/
+ (NSRect) contentRectForFrameRect: (NSRect)aRect
styleMask: (unsigned int)aStyle;
/**
* Returns the rectangle which would be used for the on-screen frame of
* a window if that window had a content view occupying the rectangle aRect
* and was decorated with the border and title etc given by aStyle.
*/
+ (NSRect) frameRectForContentRect: (NSRect)aRect
styleMask: (unsigned int)aStyle;
+ (NSRect) screenRectForFrameRect: (NSRect)aRect
styleMask: (unsigned int)aStyle;
+ (NSRect) frameRectForScreenRect: (NSRect)aRect
styleMask: (unsigned int)aStyle;
/* Returns the smallest window width that will fit the given title and
style. */
/**
* Returns the smallest frame width that will fit the given title
* and style. This is the on-screen width of the window including
* decorations.
*/
+ (float) minFrameWidthWithTitle: (NSString *)aTitle
styleMask: (unsigned int)aStyle;
@ -252,22 +250,66 @@ style. */
defer: (BOOL)flag
screen: (NSScreen*)aScreen;
/*
* Converting coordinates
/**
* Converts aPoint from the base coordinate system of the receiver
* to a point in the screen coordinate system.
*/
- (NSPoint) convertBaseToScreen: (NSPoint)aPoint;
/**
* Converts aPoint from the screen coordinate system to a point in
* the base coordinate system of the receiver.
*/
- (NSPoint) convertScreenToBase: (NSPoint)aPoint;
/*
* Moving and resizing the window
/**
* Returns the frame of the receiver ... the rectangular area that the window
* (including any border, title, and other decorations) occupies on screen.
*/
- (NSRect) frame;
/**
* <p>Sets the frame for the receiver to frameRect and if flag is YES causes
* the window contents to be refreshed. The value of frameRect is the
* desired on-screen size and position of the window including all
* border/decoration.
* </p>
* <p>The size of the frame is constrained to the minimum and maximum
* sizes set for the receiver (if any).<br />
* Its position is constrained to be on screen if it is a titled window.
* </p>
*/
- (void) setFrame: (NSRect)frameRect
display: (BOOL)flag;
/**
* Sets the origin (bottom left corner) of the receiver's frame to be the
* specified point (in screen coordinates).
*/
- (void) setFrameOrigin: (NSPoint)aPoint;
/**
* Sets the top left corner of the receiver's frame to be the
* specified point (in screen coordinates).
*/
- (void) setFrameTopLeftPoint: (NSPoint)aPoint;
/**
* Sets the size of the receiver's content view to aSize, implicitly
* adjusting the size of the receiver's frame to match.
*/
- (void) setContentSize: (NSSize)aSize;
/**
* Positions the receiver at topLeftPoint (or if topLeftPoint is NSZeroPoint,
* leaves the receiver unmoved except for any necessary constraint to fit
* on screen).<br />
* Returns the position of the top left corner of the receivers content
* view (after repositioning), so that another window cascaded at the
* returned point will not obscure the title bar of the receiver.
*/
- (NSPoint) cascadeTopLeftFromPoint: (NSPoint)topLeftPoint;
- (void) center;
- (int) resizeFlags;
#ifndef STRICT_OPENSTEP
@ -309,7 +351,7 @@ style. */
- (NSString*) stringWithSavedFrame;
#ifndef STRICT_OPENSTEP
- (BOOL) setFrameUsingName: (NSString *)name
force: (BOOL)force;
force: (BOOL)force;
#endif
/*
@ -556,7 +598,7 @@ style. */
- (void) print: (id)sender;
- (NSData*) dataWithEPSInsideRect: (NSRect)rect;
#ifndef STRICT_OPENSTEP
- (NSData *)dataWithPDFInsideRect:(NSRect)aRect;
- (NSData*) dataWithPDFInsideRect:(NSRect)aRect;
#endif
/*

View file

@ -44,18 +44,22 @@
#define TITLE_HEIGHT 23.0
#define RESIZE_HEIGHT 9.0
+(void) offsets: (float *)l : (float *)r : (float *)t : (float *)b
forStyleMask: (unsigned int)style
+ (void) offsets: (float *)l : (float *)r : (float *)t : (float *)b
forStyleMask: (unsigned int)style
{
if (style
& (NSTitledWindowMask | NSClosableWindowMask
| NSMiniaturizableWindowMask | NSResizableWindowMask))
*l = *r = *t = *b = 1.0;
& (NSTitledWindowMask | NSClosableWindowMask
| NSMiniaturizableWindowMask | NSResizableWindowMask))
{
*l = *r = *t = *b = 1.0;
}
else
*l = *r = *t = *b = 0.0;
{
*l = *r = *t = *b = 0.0;
}
if (style
& (NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask))
& (NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask))
{
*t = TITLE_HEIGHT;
}
@ -65,24 +69,19 @@
}
}
+(void) screenOffsets: (float *)l : (float *)r : (float *)t : (float *)b
forStyleMask: (unsigned int)style
{
*l = *r = *r = *b = 0.0;
}
+ (float) minFrameWidthWithTitle: (NSString *)aTitle
styleMask: (unsigned int)aStyle
{
float l, r, t, b, width;
[self offsets: &l : &r : &t : &b
forStyleMask: aStyle];
[self offsets: &l : &r : &t : &b forStyleMask: aStyle];
width = l + r;
if (aStyle & NSTitledWindowMask)
width += [aTitle sizeWithAttributes: nil].width;
{
width += [aTitle sizeWithAttributes: nil].width;
}
return width;
}
@ -90,14 +89,17 @@
static NSDictionary *titleTextAttributes[3];
static NSColor *titleColor[3];
-(void) updateRects
- (void) updateRects
{
if (hasTitleBar)
titleBarRect = NSMakeRect(0.0, _frame.size.height - TITLE_HEIGHT,
_frame.size.width, TITLE_HEIGHT);
{
titleBarRect = NSMakeRect(0.0, _frame.size.height - TITLE_HEIGHT,
_frame.size.width, TITLE_HEIGHT);
}
if (hasResizeBar)
resizeBarRect = NSMakeRect(0.0, 0.0, _frame.size.width, RESIZE_HEIGHT);
{
resizeBarRect = NSMakeRect(0.0, 0.0, _frame.size.width, RESIZE_HEIGHT);
}
if (hasCloseButton)
{
closeButtonRect = NSMakeRect(
@ -107,18 +109,18 @@ static NSColor *titleColor[3];
if (hasMiniaturizeButton)
{
miniaturizeButtonRect = NSMakeRect(4, _frame.size.height - 15 - 4,
15, 15);
miniaturizeButtonRect = NSMakeRect(
4, _frame.size.height - 15 - 4, 15, 15);
[miniaturizeButton setFrame: miniaturizeButtonRect];
}
}
- initWithFrame: (NSRect)frame
window: (NSWindow *)w
- (id) initWithFrame: (NSRect)frame
window: (NSWindow *)w
{
if (!titleTextAttributes[0])
{
NSMutableParagraphStyle *p;
NSMutableParagraphStyle *p;
p = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
[p setLineBreakMode: NSLineBreakByClipping];
@ -129,12 +131,14 @@ static NSColor *titleColor[3];
[NSColor windowFrameTextColor], NSForegroundColorAttributeName,
p, NSParagraphStyleAttributeName,
nil];
titleTextAttributes[1] = [[NSMutableDictionary alloc]
initWithObjectsAndKeys:
[NSFont titleBarFontOfSize: 0], NSFontAttributeName,
[NSColor blackColor], NSForegroundColorAttributeName, /* TODO: need a named color for this */
p, NSParagraphStyleAttributeName,
nil];
titleTextAttributes[2] = [[NSMutableDictionary alloc]
initWithObjectsAndKeys:
[NSFont titleBarFontOfSize: 0], NSFontAttributeName,
@ -148,18 +152,18 @@ static NSColor *titleColor[3];
titleColor[2] = RETAIN([NSColor darkGrayColor]);
}
self = [super initWithFrame: frame
window: w];
self = [super initWithFrame: frame window: w];
if (!self) return nil;
if ([w styleMask]
& (NSTitledWindowMask | NSClosableWindowMask
| NSMiniaturizableWindowMask))
& (NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask))
{
hasTitleBar = YES;
}
if ([w styleMask] & NSTitledWindowMask)
isTitled = YES;
{
isTitled = YES;
}
if ([w styleMask] & NSClosableWindowMask)
{
hasCloseButton = YES;
@ -200,17 +204,18 @@ static NSColor *titleColor[3];
RELEASE(miniaturizeButton);
}
if ([w styleMask] & NSResizableWindowMask)
hasResizeBar = YES;
{
hasResizeBar = YES;
}
[self updateRects];
return self;
}
-(void) drawTitleBar
- (void) drawTitleBar
{
static const NSRectEdge edges[4] = {NSMinXEdge, NSMaxYEdge,
static const NSRectEdge edges[4] = {NSMinXEdge, NSMaxYEdge,
NSMaxXEdge, NSMinYEdge};
float grays[3][4] =
{{NSLightGray, NSLightGray, NSDarkGray, NSDarkGray},
@ -271,7 +276,7 @@ static const NSRectEdge edges[4] = {NSMinXEdge, NSMaxYEdge,
}
}
-(void) drawResizeBar
- (void) drawResizeBar
{
[[NSColor lightGrayColor] set];
PSrectfill(1.0, 1.0, resizeBarRect.size.width - 2.0, RESIZE_HEIGHT - 3.0);
@ -313,7 +318,7 @@ static const NSRectEdge edges[4] = {NSMinXEdge, NSMaxYEdge,
PSstroke();
}
-(void) drawRect: (NSRect)rect
- (void) drawRect: (NSRect)rect
{
if (hasTitleBar && NSIntersectsRect(rect, titleBarRect))
{
@ -359,14 +364,14 @@ static const NSRectEdge edges[4] = {NSMinXEdge, NSMaxYEdge,
}
-(void) setTitle: (NSString *)newTitle
- (void) setTitle: (NSString *)newTitle
{
if (isTitled)
[self setNeedsDisplayInRect: titleBarRect];
[super setTitle: newTitle];
}
-(void) setInputState: (int)state
- (void) setInputState: (int)state
{
NSAssert(state >= 0 && state <= 2, @"Invalid state!");
[super setInputState: state];
@ -374,7 +379,7 @@ static const NSRectEdge edges[4] = {NSMinXEdge, NSMaxYEdge,
[self setNeedsDisplayInRect: titleBarRect];
}
-(void) setDocumentEdited: (BOOL)flag
- (void) setDocumentEdited: (BOOL)flag
{
if (flag)
{
@ -392,14 +397,14 @@ static const NSRectEdge edges[4] = {NSMinXEdge, NSMaxYEdge,
}
-(NSPoint) mouseLocationOnScreenOutsideOfEventStream
- (NSPoint) mouseLocationOnScreenOutsideOfEventStream
{
int screen = [[window screen] screenNumber];
return [GSServerForWindow(window) mouseLocationOnScreen: screen
window: NULL];
}
-(void) moveWindowStartingWithEvent: (NSEvent *)event
- (void) moveWindowStartingWithEvent: (NSEvent *)event
{
unsigned int mask = NSLeftMouseDraggedMask | NSLeftMouseUpMask;
NSEvent *currentEvent = event;
@ -436,8 +441,9 @@ static const NSRectEdge edges[4] = {NSMinXEdge, NSMaxYEdge,
}
static NSRect calc_new_frame(NSRect frame, NSPoint point, NSPoint firstPoint,
int mode, NSSize minSize, NSSize maxSize)
static NSRect
calc_new_frame(NSRect frame, NSPoint point, NSPoint firstPoint,
int mode, NSSize minSize, NSSize maxSize)
{
NSRect newFrame = frame;
newFrame.origin.y = point.y - firstPoint.y;
@ -473,7 +479,7 @@ static NSRect calc_new_frame(NSRect frame, NSPoint point, NSPoint firstPoint,
return newFrame;
}
-(void) resizeWindowStartingWithEvent: (NSEvent *)event
- (void) resizeWindowStartingWithEvent: (NSEvent *)event
{
unsigned int mask = NSLeftMouseDraggedMask | NSLeftMouseUpMask;
NSEvent *currentEvent = event;
@ -517,7 +523,8 @@ static NSRect calc_new_frame(NSRect frame, NSPoint point, NSPoint firstPoint,
}
point = [self mouseLocationOnScreenOutsideOfEventStream];
newFrame = calc_new_frame(frame, point, firstPoint, mode, minSize, maxSize);
newFrame
= calc_new_frame(frame, point, firstPoint, mode, minSize, maxSize);
if (currentEvent && [currentEvent type] == NSLeftMouseUp)
break;
@ -532,12 +539,12 @@ static NSRect calc_new_frame(NSRect frame, NSPoint point, NSPoint firstPoint,
[window setFrame: newFrame display: YES];
}
-(BOOL) acceptsFirstMouse: (NSEvent*)theEvent
- (BOOL) acceptsFirstMouse: (NSEvent*)theEvent
{
return YES;
}
-(void) mouseDown: (NSEvent *)event
- (void) mouseDown: (NSEvent *)event
{
NSPoint p = [self convertPoint: [event locationInWindow] fromView: nil];

View file

@ -39,10 +39,6 @@
styleMask: (unsigned int)aStyle;
- (NSRect) frameRectForContentRect: (NSRect)aRect
styleMask: (unsigned int)aStyle;
- (NSRect) screenRectForFrameRect: (NSRect)aRect
styleMask: (unsigned int)aStyle;
- (NSRect) frameRectForScreenRect: (NSRect)aRect
styleMask: (unsigned int)aStyle;
- (float) minFrameWidthWithTitle: (NSString *)aTitle
styleMask: (unsigned int)aStyle;
@end
@ -63,23 +59,22 @@ this, either directly, or indirectly (by using the backend).
int inputState;
BOOL documentEdited;
}
+(id<GSWindowDecorator>) windowDecorator;
+ (id<GSWindowDecorator>) windowDecorator;
- initWithFrame: (NSRect)frame
window: (NSWindow *)w;
- (id) initWithFrame: (NSRect)frame window: (NSWindow *)w;
-(void) setContentView: (NSView *)contentView;
- (void) setBackgroundColor: (NSColor *)color;
- (void) setContentView: (NSView *)contentView;
- (void) setDocumentEdited: (BOOL)flag;
- (void) setInputState: (int)state;
- (void) setTitle: (NSString *)title;
/*
Called when the backend window is created or destroyed. When it's destroyed,
windowNumber will be 0.
*/
-(void) setWindowNumber: (int)windowNumber;
- (void) setWindowNumber: (int)windowNumber;
-(void) setTitle: (NSString *)title;
-(void) setInputState: (int)state;
-(void) setDocumentEdited: (BOOL)flag;
-(void) setBackgroundColor: (NSColor *)color;
@end

View file

@ -38,20 +38,16 @@ struct NSWindow_struct
};
/*
Manage window decorations by using the backend functions. This only works
on backends that can handle window decorations.
*/
/* Manage window decorations by using the backend functions. This only works
* on backends that can handle window decorations.
*/
@interface GSBackendWindowDecorationView : GSWindowDecorationView
@end
/*
GSWindowDecorationView implementation.
*/
@implementation GSWindowDecorationView
+(id<GSWindowDecorator>) windowDecorator
+ (id<GSWindowDecorator>) windowDecorator
{
if ([GSCurrentServer() handlesWindowDecorations])
return [GSBackendWindowDecorationView self];
@ -60,22 +56,16 @@ GSWindowDecorationView implementation.
}
+(id) newWindowDecorationViewWithFrame: (NSRect)frame
window: (NSWindow *)aWindow
+ (id) newWindowDecorationViewWithFrame: (NSRect)frame
window: (NSWindow *)aWindow
{
return [[self alloc] initWithFrame: frame
window: aWindow];
}
+(void) offsets: (float *)l : (float *)r : (float *)t : (float *)b
forStyleMask: (unsigned int)style
{
[self subclassResponsibility: _cmd];
}
+(void) screenOffsets: (float *)l : (float *)r : (float *)t : (float *)b
forStyleMask: (unsigned int)style
+ (void) offsets: (float *)l : (float *)r : (float *)t : (float *)b
forStyleMask: (unsigned int)style
{
[self subclassResponsibility: _cmd];
}
@ -85,8 +75,7 @@ GSWindowDecorationView implementation.
{
float t, b, l, r;
[self offsets: &l : &r : &t : &b
forStyleMask: aStyle];
[self offsets: &l : &r : &t : &b forStyleMask: aStyle];
aRect.size.width -= l + r;
aRect.size.height -= t + b;
aRect.origin.x += l;
@ -99,8 +88,7 @@ GSWindowDecorationView implementation.
{
float t, b, l, r;
[self offsets: &l : &r : &t : &b
forStyleMask: aStyle];
[self offsets: &l : &r : &t : &b forStyleMask: aStyle];
aRect.size.width += l + r;
aRect.size.height += t + b;
aRect.origin.x -= l;
@ -108,34 +96,6 @@ GSWindowDecorationView implementation.
return aRect;
}
+ (NSRect) screenRectForFrameRect: (NSRect)aRect
styleMask: (unsigned int)aStyle
{
float t, b, l, r;
[self screenOffsets: &l : &r : &t : &b
forStyleMask: aStyle];
aRect.size.width += l + r;
aRect.size.height += t + b;
aRect.origin.x -= l;
aRect.origin.y -= b;
return aRect;
}
+ (NSRect) frameRectForScreenRect: (NSRect)aRect
styleMask: (unsigned int)aStyle
{
float t, b, l, r;
[self screenOffsets: &l : &r : &t : &b
forStyleMask: aStyle];
aRect.size.width -= l + r;
aRect.size.height -= t + b;
aRect.origin.x += l;
aRect.origin.y += b;
return aRect;
}
+ (float) minFrameWidthWithTitle: (NSString *)aTitle
styleMask: (unsigned int)aStyle
{
@ -144,73 +104,46 @@ GSWindowDecorationView implementation.
}
/*
Internal helpers.
Returns the internal window frame rect for a given (screen) frame.
*/
+(NSRect) windowFrameRectForFrameRect: (NSRect)aRect
+ (NSRect) decorationRectForFrameRect: (NSRect)aRect
styleMask: (unsigned int)aStyle
{
aRect.origin = NSZeroPoint;
return aRect;
}
/*
Returns the content rect for a given window frame.
*/
+(NSRect) contentRectForWindowFrameRect: (NSRect)aRect
+ (NSRect) contentRectForDecorationRect: (NSRect)aRect
styleMask: (unsigned int)aStyle
{
return [self contentRectForFrameRect: aRect styleMask: aStyle];
}
- initWithFrame: (NSRect)frame
- (id) initWithFrame: (NSRect)frame
{
NSAssert(NO, @"Tried to create GSWindowDecorationView without a window!");
return nil;
}
- initWithFrame: (NSRect)frame
window: (NSWindow *)w
- (id) initWithFrame: (NSRect)frame
window: (NSWindow *)w
{
frame = [isa windowFrameRectForFrameRect: frame
styleMask: [w styleMask]];
unsigned int styleMask = [w styleMask];
frame = [isa decorationRectForFrameRect: frame
styleMask: styleMask];
self = [super initWithFrame: frame];
if (!self)
return nil;
window = w;
contentRect = frame;
contentRect =
[isa contentRectForWindowFrameRect: contentRect
styleMask: [window styleMask]];
if (self != nil)
{
contentRect = [isa contentRectForDecorationRect: frame
styleMask: styleMask];
window = w;
}
return self;
}
/*
* Special setFrame: implementation - a minimal autoresize mechanism
*/
- (void) setFrame: (NSRect)frameRect
- (void) setBackgroundColor: (NSColor *)color
{
NSSize oldSize = _frame.size;
NSView *cv = [_window contentView];
frameRect = [isa windowFrameRectForFrameRect: frameRect
styleMask: [window styleMask]];
_autoresizes_subviews = NO;
[super setFrame: frameRect];
contentRect = [isa contentRectForWindowFrameRect: frameRect
styleMask: [window styleMask]];
// Safety Check.
[cv setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];
[cv resizeWithOldSuperviewSize: oldSize];
[self setNeedsDisplayInRect: contentRect];
}
- (void) setContentView: (NSView *)contentView
@ -228,7 +161,49 @@ Returns the content rect for a given window frame.
contentRect.origin.y)];
}
-(void) setWindowNumber: (int)theWindowNumber
- (void) setDocumentEdited: (BOOL)flag
{
documentEdited = flag;
if (windowNumber)
[GSServerForWindow(window) docedited: documentEdited : windowNumber];
}
/*
* Special setFrame: implementation - a minimal autoresize mechanism
*/
- (void) setFrame: (NSRect)frameRect
{
NSSize oldSize = _frame.size;
NSView *cv = [_window contentView];
frameRect = [isa decorationRectForFrameRect: frameRect
styleMask: [window styleMask]];
_autoresizes_subviews = NO;
[super setFrame: frameRect];
contentRect = [isa contentRectForDecorationRect: frameRect
styleMask: [window styleMask]];
// Safety Check.
[cv setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];
[cv resizeWithOldSuperviewSize: oldSize];
}
- (void) setInputState: (int)state
{
inputState = state;
if (windowNumber)
[GSServerForWindow(window) setinputstate: inputState : windowNumber];
}
- (void) setTitle: (NSString *)title
{
if (windowNumber)
[GSServerForWindow(window) titlewindow: title : windowNumber];
}
- (void) setWindowNumber: (int)theWindowNumber
{
windowNumber = theWindowNumber;
if (!windowNumber)
@ -239,29 +214,6 @@ Returns the content rect for a given window frame.
[GSServerForWindow(window) docedited: documentEdited : windowNumber];
}
-(void) setTitle: (NSString *)title
{
if (windowNumber)
[GSServerForWindow(window) titlewindow: title : windowNumber];
}
-(void) setInputState: (int)state
{
inputState = state;
if (windowNumber)
[GSServerForWindow(window) setinputstate: inputState : windowNumber];
}
-(void) setDocumentEdited: (BOOL)flag
{
documentEdited = flag;
if (windowNumber)
[GSServerForWindow(window) docedited: documentEdited : windowNumber];
}
-(void) setBackgroundColor: (NSColor *)color
{
[self setNeedsDisplayInRect: contentRect];
}
- (BOOL) isOpaque
{
@ -279,14 +231,13 @@ Returns the content rect for a given window frame.
}
}
- initWithCoder: (NSCoder*)aCoder
- (id) initWithCoder: (NSCoder*)aCoder
{
NSAssert(NO, @"The top-level window view should never be encoded.");
return nil;
}
-(void) encodeWithCoder: (NSCoder*)aCoder
- (void) encodeWithCoder: (NSCoder*)aCoder
{
NSAssert(NO, @"The top-level window view should never be encoded.");
}
@ -297,14 +248,8 @@ Returns the content rect for a given window frame.
@implementation GSBackendWindowDecorationView
+(void) offsets: (float *)l : (float *)r : (float *)t : (float *)b
forStyleMask: (unsigned int)style
{
*l = *r = *t = *b = 0.0;
}
+(void) screenOffsets: (float *)l : (float *)r : (float *)t : (float *)b
forStyleMask: (unsigned int)style
+ (void) offsets: (float *)l : (float *)r : (float *)t : (float *)b
forStyleMask: (unsigned int)style
{
[GSCurrentServer() styleoffsets: l : r : t : b : style];
}
@ -316,21 +261,19 @@ Returns the content rect for a given window frame.
return 0.0;
}
+(NSRect) windowFrameRectForFrameRect: (NSRect)aRect
+ (NSRect) decorationRectForFrameRect: (NSRect)aRect
styleMask: (unsigned int)aStyle
{
float l, r, t, b;
[self offsets: &l : &r : &t : &b forStyleMask: aStyle];
aRect.size.width -= l + r;
aRect.size.height -= t + b;
return aRect;
}
/*
Returns the content rect for a given window frame.
*/
+(NSRect) contentRectForWindowFrameRect: (NSRect)aRect
styleMask: (unsigned int)aStyle
+ (NSRect) contentRectForDecorationRect: (NSRect)aRect
styleMask: (unsigned int)aStyle
{
return aRect;
}

View file

@ -307,7 +307,12 @@ static NSMutableArray *screenArray = nil;
switch (NSInterfaceStyleForKey(@"NSMenuInterfaceStyle", nil))
{
case NSMacintoshInterfaceStyle:
if ([NSApp mainMenu] != nil)
if ([NSApp mainMenu] == nil)
{
// No menu yet ... assume a standard height
visFrame.size.height -= 23.0;
}
else
{
float menuHeight = [[[NSApp mainMenu] window] frame].size.height;

View file

@ -616,26 +616,6 @@ static NSNotificationCenter *nc = nil;
styleMask: aStyle];
}
+ (NSRect) screenRectForFrameRect: (NSRect)aRect
styleMask: (unsigned int)aStyle
{
if (!windowDecorator)
windowDecorator = [GSWindowDecorationView windowDecorator];
return [windowDecorator screenRectForFrameRect: aRect
styleMask: aStyle];
}
+ (NSRect) frameRectForScreenRect: (NSRect)aRect
styleMask: (unsigned int)aStyle
{
if (!windowDecorator)
windowDecorator = [GSWindowDecorationView windowDecorator];
return [windowDecorator frameRectForScreenRect: aRect
styleMask: aStyle];
}
+ (float) minFrameWidthWithTitle: (NSString *)aTitle
styleMask: (unsigned int)aStyle
{
@ -1706,16 +1686,20 @@ many times.
}
}
/*
* Moving and resizing the window
*/
- (NSPoint) cascadeTopLeftFromPoint: (NSPoint)topLeftPoint
{
// FIXME: As we know nothing about the other window we can only guess
topLeftPoint.x += 20;
topLeftPoint.y += 20;
NSRect cRect;
if (NSEqualPoints(topLeftPoint, NSZeroPoint) == YES)
{
topLeftPoint.x = _frame.origin.x;
topLeftPoint.y = _frame.origin.y + _frame.size.height;
}
[self setFrameTopLeftPoint: topLeftPoint];
cRect = [isa contentRectForFrameRect: _frame styleMask: _styleMask];
topLeftPoint.x = cRect.origin.x;
topLeftPoint.y = cRect.origin.y + cRect.size.height;
return topLeftPoint;
}
@ -4061,7 +4045,7 @@ resetCursorRectsForView(NSView *theView)
[_wv convertRect: rect fromView: nil]];
}
- (NSData *)dataWithPDFInsideRect:(NSRect)aRect
- (NSData *) dataWithPDFInsideRect:(NSRect)aRect
{
return [_wv dataWithPDFInsideRect:
[_wv convertRect: aRect fromView: nil]];