mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-04-22 18:11:06 +00:00
Improve window frame saving
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@5195 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
d397d9872f
commit
fae5235486
3 changed files with 130 additions and 11 deletions
|
@ -1,3 +1,10 @@
|
|||
Tue Nov 16 7:05:00 1999 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||
|
||||
* Source/NSApplication.m: ([-run]) make sure user defaults are
|
||||
up to date on exit.
|
||||
* Source/NSWindow.m: various changes to sving window frame info.
|
||||
Use top-left as window origin, and save in OPENSTEP format.
|
||||
|
||||
Mon Nov 15 21:29:00 1999 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||
|
||||
* Headers/gnustep/gui/NSMenu.h: Make menu window inherit from NSPanel
|
||||
|
|
|
@ -540,6 +540,7 @@ static NSCell* tileCell = nil;
|
|||
}
|
||||
|
||||
[GSCurrentContext() destroyContext];
|
||||
[[NSUserDefaults standardUserDefaults] synchronize];
|
||||
NSDebugLog(@"NSApplication end of run loop\n");
|
||||
}
|
||||
|
||||
|
|
|
@ -815,6 +815,7 @@ static NSMapTable* windowmaps = NULL;
|
|||
|
||||
/*
|
||||
* Now we can tell the graphics context to do the actual resizing.
|
||||
* We will recieve an event to tell us when the resize is done.
|
||||
*/
|
||||
[GSCurrentContext() _setFrame: frameRect forWindow: [self windowNumber]];
|
||||
|
||||
|
@ -1880,6 +1881,10 @@ resetCursorRectsForView(NSView *theView)
|
|||
case GSAppKitWindowResized:
|
||||
frame.size.width = (float)[theEvent data1];
|
||||
frame.size.height = (float)[theEvent data2];
|
||||
if (autosave_name != nil)
|
||||
{
|
||||
[self saveFrameUsingName: autosave_name];
|
||||
}
|
||||
if (content_view)
|
||||
{
|
||||
NSView *wv = [content_view superview];
|
||||
|
@ -2210,25 +2215,115 @@ resetCursorRectsForView(NSView *theView)
|
|||
|
||||
- (void) setFrameFromString: (NSString *)string
|
||||
{
|
||||
NSRect frameRect = NSRectFromString(string);
|
||||
NSScanner *scanner = [NSScanner scannerWithString: string];
|
||||
NSRect nRect;
|
||||
NSRect sRect;
|
||||
NSRect fRect;
|
||||
int value;
|
||||
|
||||
if (maximum_size.width > 0 && frameRect.size.width > maximum_size.width)
|
||||
/*
|
||||
* Scan in the window frame (flipped coordinate system).
|
||||
*/
|
||||
if ([scanner scanInt: &value] == NO)
|
||||
{
|
||||
frameRect.size.width = maximum_size.width;
|
||||
NSLog(@"Bad window frame format - x-coord missing");
|
||||
return;
|
||||
}
|
||||
if (maximum_size.height > 0 && frameRect.size.height > maximum_size.height)
|
||||
fRect.origin.x = value;
|
||||
|
||||
if ([scanner scanInt: &value] == NO)
|
||||
{
|
||||
frameRect.size.height = maximum_size.height;
|
||||
NSLog(@"Bad window frame format - y-coord missing");
|
||||
return;
|
||||
}
|
||||
if (frameRect.size.width < minimum_size.width)
|
||||
fRect.origin.y = value;
|
||||
|
||||
if ([scanner scanInt: &value] == NO)
|
||||
{
|
||||
frameRect.size.width = minimum_size.width;
|
||||
NSLog(@"Bad window frame format - width missing");
|
||||
return;
|
||||
}
|
||||
if (frameRect.size.height < minimum_size.height)
|
||||
fRect.size.width = value;
|
||||
|
||||
if ([scanner scanInt: &value] == NO)
|
||||
{
|
||||
frameRect.size.height = minimum_size.height;
|
||||
NSLog(@"Bad window frame format - height missing");
|
||||
return;
|
||||
}
|
||||
[self setFrame: frameRect display: YES];
|
||||
fRect.size.height = value;
|
||||
|
||||
/*
|
||||
* Scan in the frame for the area the window was placed in in screen.
|
||||
*/
|
||||
if ([scanner scanInt: &value] == NO)
|
||||
{
|
||||
NSLog(@"Bad screen frame format - x-coord missing");
|
||||
return;
|
||||
}
|
||||
sRect.origin.x = value;
|
||||
|
||||
if ([scanner scanInt: &value] == NO)
|
||||
{
|
||||
NSLog(@"Bad screen frame format - y-coord missing");
|
||||
return;
|
||||
}
|
||||
sRect.origin.y = value;
|
||||
|
||||
if ([scanner scanInt: &value] == NO)
|
||||
{
|
||||
NSLog(@"Bad screen frame format - width missing");
|
||||
return;
|
||||
}
|
||||
sRect.size.width = value;
|
||||
|
||||
if ([scanner scanInt: &value] == NO)
|
||||
{
|
||||
NSLog(@"Bad screen frame format - height missing");
|
||||
return;
|
||||
}
|
||||
sRect.size.height = value;
|
||||
|
||||
/*
|
||||
* FIXME - the screen rectangle should give the area of the screen in which
|
||||
* the window could be placed (ie a rectangle excluding the dock), but
|
||||
* there is no API for that yet - so we just use the screen at present.
|
||||
*/
|
||||
nRect = [[NSScreen mainScreen] frame];
|
||||
|
||||
/*
|
||||
* FIXME - if the stored screen area is not the same as that currently
|
||||
* available, we should probably adjust the window frame (position) in
|
||||
* some way to try to amke layout sensible.
|
||||
*/
|
||||
if (NSEqualRects(nRect, sRect) == NO)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert frame from flipped to normal coordinates.
|
||||
*/
|
||||
fRect.origin.y -= fRect.size.height;
|
||||
|
||||
/*
|
||||
* Check and set frame.
|
||||
*/
|
||||
if (maximum_size.width > 0 && fRect.size.width > maximum_size.width)
|
||||
{
|
||||
fRect.size.width = maximum_size.width;
|
||||
}
|
||||
if (maximum_size.height > 0 && fRect.size.height > maximum_size.height)
|
||||
{
|
||||
fRect.size.height = maximum_size.height;
|
||||
}
|
||||
if (fRect.size.width < minimum_size.width)
|
||||
{
|
||||
fRect.size.width = minimum_size.width;
|
||||
}
|
||||
if (fRect.size.height < minimum_size.height)
|
||||
{
|
||||
fRect.size.height = minimum_size.height;
|
||||
}
|
||||
[self setFrame: fRect display: YES];
|
||||
}
|
||||
|
||||
- (BOOL) setFrameUsingName: (NSString *)name
|
||||
|
@ -2248,7 +2343,23 @@ resetCursorRectsForView(NSView *theView)
|
|||
|
||||
- (NSString *) stringWithSavedFrame
|
||||
{
|
||||
return NSStringFromRect(frame);
|
||||
NSRect fRect;
|
||||
NSRect sRect;
|
||||
|
||||
fRect = frame;
|
||||
fRect.origin.y += fRect.size.height; /* Make flipped */
|
||||
/*
|
||||
* FIXME - the screen rectangle should give the area of the screen in which
|
||||
* the window could be placed (ie a rectangle excluding the dock), but
|
||||
* there is no API for that yet - so we just use the screen at present.
|
||||
*/
|
||||
sRect = [[NSScreen mainScreen] frame];
|
||||
|
||||
return [NSString stringWithFormat: @"%d %d %d %d %d %d % d %d",
|
||||
(int)fRect.origin.x, (int)fRect.origin.y,
|
||||
(int)fRect.size.width, (int)fRect.size.height,
|
||||
(int)sRect.origin.x, (int)sRect.origin.y,
|
||||
(int)sRect.size.width, (int)sRect.size.height];
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue