mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-04-23 07:00:46 +00:00
* Source/NSScreen.m: Read -userSpaceScaleFactor from the GSScaleFactor
user default. * Source/GSWindowDecorationView.m: Apply -[NSScreen userSpaceScaleFactor] in +frameRectForContentRect and +contentRectForFrameRect, as well as setting a scaled bounds size in -layout. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@32898 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
346f604cb7
commit
d92c92984d
3 changed files with 67 additions and 11 deletions
|
@ -1,3 +1,11 @@
|
|||
2011-04-19 Eric Wasylishen <ewasylishen@gmail.com>
|
||||
|
||||
* Source/NSScreen.m: Read -userSpaceScaleFactor from the GSScaleFactor
|
||||
user default.
|
||||
* Source/GSWindowDecorationView.m: Apply -[NSScreen userSpaceScaleFactor]
|
||||
in +frameRectForContentRect and +contentRectForFrameRect, as well as
|
||||
setting a scaled bounds size in -layout.
|
||||
|
||||
2011-04-18 Eric Wasylishen <ewasylishen@gmail.com>
|
||||
|
||||
* Source/NSWindow.m: Remove unnecessary FIXMEs related to
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#import "AppKit/NSColor.h"
|
||||
#import "AppKit/NSGraphics.h"
|
||||
#import "AppKit/NSMenuView.h"
|
||||
#import "AppKit/NSScreen.h"
|
||||
#import "AppKit/NSWindow.h"
|
||||
#import "GNUstepGUI/GSDisplayServer.h"
|
||||
#import "GNUstepGUI/GSTheme.h"
|
||||
|
@ -39,6 +40,14 @@
|
|||
|
||||
@implementation GSWindowDecorationView
|
||||
|
||||
static inline NSRect RectWithSizeScaledByFactor(NSRect aRect, CGFloat factor)
|
||||
{
|
||||
return NSMakeRect(aRect.origin.x,
|
||||
aRect.origin.y,
|
||||
aRect.size.width * factor,
|
||||
aRect.size.height * factor);
|
||||
}
|
||||
|
||||
+ (id<GSWindowDecorator>) windowDecorator
|
||||
{
|
||||
if ([GSCurrentServer() handlesWindowDecorations])
|
||||
|
@ -72,7 +81,16 @@
|
|||
aRect.size.height -= t + b;
|
||||
aRect.origin.x += l;
|
||||
aRect.origin.y += b;
|
||||
return aRect;
|
||||
|
||||
if (0 == (aStyle & NSUnscaledWindowMask))
|
||||
{
|
||||
// FIXME: This method should probably take a screen parameter
|
||||
// rather than assuming the mainScreen
|
||||
|
||||
CGFloat factor = [[NSScreen mainScreen] userSpaceScaleFactor];
|
||||
aRect = RectWithSizeScaledByFactor(aRect, 1/factor);
|
||||
}
|
||||
return aRect;
|
||||
}
|
||||
|
||||
+ (NSRect) frameRectForContentRect: (NSRect)aRect
|
||||
|
@ -81,10 +99,20 @@
|
|||
float t = 0.0, b = 0.0, l = 0.0, r = 0.0;
|
||||
|
||||
[self offsets: &l : &r : &t : &b forStyleMask: aStyle];
|
||||
if (0 == (aStyle & NSUnscaledWindowMask))
|
||||
{
|
||||
// FIXME: This method should probably take a screen parameter
|
||||
// rather than assuming the mainScreen
|
||||
|
||||
CGFloat factor = [[NSScreen mainScreen] userSpaceScaleFactor];
|
||||
aRect = RectWithSizeScaledByFactor(aRect, factor);
|
||||
}
|
||||
|
||||
aRect.size.width += l + r;
|
||||
aRect.size.height += t + b;
|
||||
aRect.origin.x -= l;
|
||||
aRect.origin.y -= b;
|
||||
|
||||
return aRect;
|
||||
}
|
||||
|
||||
|
@ -286,6 +314,13 @@
|
|||
contentViewFrame.size.height -= newToolbarViewHeight;
|
||||
}
|
||||
|
||||
if (0 == ([window styleMask] & NSUnscaledWindowMask))
|
||||
{
|
||||
CGFloat factor = [window userSpaceScaleFactor];
|
||||
NSRect aRect = RectWithSizeScaledByFactor([self frame], 1/factor);
|
||||
[self setBoundsSize: aRect.size];
|
||||
}
|
||||
|
||||
if ([windowContentView superview] == self)
|
||||
{
|
||||
[windowContentView setFrame:contentViewFrame];
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#import <Foundation/NSGeometry.h>
|
||||
#import <Foundation/NSNotification.h>
|
||||
#import <Foundation/NSValue.h>
|
||||
#import <Foundation/NSUserDefaults.h>
|
||||
#import "AppKit/AppKitExceptions.h"
|
||||
#import "AppKit/NSApplication.h"
|
||||
#import "AppKit/NSInterfaceStyle.h"
|
||||
|
@ -414,19 +415,31 @@ static NSMutableArray *screenArray = nil;
|
|||
|
||||
- (float) userSpaceScaleFactor
|
||||
{
|
||||
GSDisplayServer *srv;
|
||||
NSSize dpi;
|
||||
NSNumber *factor = [[NSUserDefaults standardUserDefaults]
|
||||
objectForKey: @"GSScaleFactor"];
|
||||
|
||||
srv = GSCurrentServer();
|
||||
//if (srv != nil)
|
||||
// {
|
||||
// dpi = [GSCurrentServer() resolutionForScreen: _screenNumber];
|
||||
// // take average for 72dpi
|
||||
// return (dpi.width + dpi.height) / 144;
|
||||
// }
|
||||
//else
|
||||
if (factor != nil)
|
||||
{
|
||||
return [factor floatValue];
|
||||
}
|
||||
else
|
||||
{
|
||||
return 1.0;
|
||||
|
||||
// FIXME: The following is commented out for now because
|
||||
// it might cause the UI to be scaled unexpectedly.
|
||||
|
||||
//GSDisplayServer *srv = GSCurrentServer();
|
||||
//if (srv != nil)
|
||||
//{
|
||||
// NSSize dpi = [GSCurrentServer() resolutionForScreen: _screenNumber];
|
||||
// // take average for 72dpi
|
||||
// return (dpi.width + dpi.height) / 144;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// return 1.0;
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue