Files
cappuccino/Tools/nib2cib/NSView.j
T
Alexandre Wilhelm ef5f26fd81 New: Added support for scaling in CPView
This PR adds the support of scaling in CPView.
There are two new public methods in CPView : -(void)scaleUnitSquareToSize: and -(void)setScaleSize:
-(void)scaleUnitSquareToSize: works exactly as in COCOA, it means if you set a first scale to 0.5 and then 0.5 again, the scaleSize of the view will be 0.25
-(void)setScaleSize: works with the value given. If you set 0.5 after you just seted 0.5 the scaleSize will be 0.5. This method is definitly better in using, specially when using the scaleSize binding with a slider.

Test app in Tests/Manual/ScalingTest
2013-10-15 14:03:26 -07:00

133 lines
3.7 KiB
Plaintext

/*
* NSView.j
* nib2cib
*
* Portions based on NSView.m (09/09/2008) in Cocotron (http://www.cocotron.org/)
* Copyright (c) 2006-2007 Christopher J. W. Lloyd
*
* Created by Francisco Tolmasky.
* Copyright 2008, 280 North, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
@import <AppKit/CPView.j>
var NSViewAutoresizingMask = 0x3F,
NSViewAutoresizesSubviewsMask = 1 << 8,
NSViewHiddenMask = 1 << 31;
@implementation CPView (NSCoding)
- (id)NS_initWithCoder:(CPCoder)aCoder
{
_frame = CGRectMakeZero();
if ([aCoder containsValueForKey:@"NSFrame"])
_frame = [aCoder decodeRectForKey:@"NSFrame"];
else if ([aCoder containsValueForKey:@"NSFrameSize"])
_frame.size = [aCoder decodeSizeForKey:@"NSFrameSize"];
self = [super NS_initWithCoder:aCoder];
if (self)
{
_tag = [aCoder decodeIntForKey:@"NSTag"];
_bounds = CGRectMake(0.0, 0.0, CGRectGetWidth(_frame), CGRectGetHeight(_frame));
_window = [aCoder decodeObjectForKey:@"NSWindow"];
_superview = [aCoder decodeObjectForKey:@"NSSuperview"];
_subviews = [aCoder decodeObjectForKey:@"NSSubviews"];
_hierarchyScaleSize = CGSizeMake(1.0 , 1.0);
_scaleSize = CGSizeMake(1.0, 1.0);
_isScaled = NO;
if (!_subviews)
_subviews = [];
var vFlags = [aCoder decodeIntForKey:@"NSvFlags"];
_autoresizingMask = vFlags & NSViewAutoresizingMask;
_autoresizesSubviews = vFlags & NSViewAutoresizesSubviewsMask;
_hitTests = YES;
_isHidden = vFlags & NSViewHiddenMask;
_opacity = 1.0;//[aCoder decodeIntForKey:CPViewOpacityKey];
_themeClass = [self themeClass];
_themeAttributes = {};
_themeState = CPThemeStateNormal;
[self _loadThemeAttributes];
if ([aCoder containsValueForKey:@"NSReuseIdentifierKey"])
_identifier = [aCoder decodeObjectForKey:@"NSReuseIdentifierKey"];
}
return self;
}
- (BOOL)NS_isFlipped
{
return NO;
}
- (void)awakeFromNib
{
var superview = [self superview];
if (!superview || [superview NS_isFlipped])
return;
var superviewHeight = CGRectGetHeight([superview bounds]),
frame = [self frame];
[self setFrameOrigin:CGPointMake(CGRectGetMinX(frame), superviewHeight - CGRectGetMaxY(frame))];
var NS_autoresizingMask = [self autoresizingMask],
autoresizingMask = NS_autoresizingMask & ~(CPViewMaxYMargin | CPViewMinYMargin);
if (!(NS_autoresizingMask & (CPViewMaxYMargin | CPViewMinYMargin | CPViewHeightSizable)))
autoresizingMask |= CPViewMinYMargin;
else
{
if (NS_autoresizingMask & CPViewMaxYMargin)
autoresizingMask |= CPViewMinYMargin;
if (NS_autoresizingMask & CPViewMinYMargin)
autoresizingMask |= CPViewMaxYMargin;
}
[self setAutoresizingMask:autoresizingMask];
}
@end
@implementation NSView : CPView
- (id)initWithCoder:(CPCoder)aCoder
{
return [self NS_initWithCoder:aCoder];
}
- (Class)classForKeyedArchiver
{
return [CPView class];
}
@end