diff options
Diffstat (limited to 'frontends/cocoa/ScrollableView.m')
-rw-r--r-- | frontends/cocoa/ScrollableView.m | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/frontends/cocoa/ScrollableView.m b/frontends/cocoa/ScrollableView.m new file mode 100644 index 000000000..6f20bfe28 --- /dev/null +++ b/frontends/cocoa/ScrollableView.m @@ -0,0 +1,75 @@ +/* + * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com> + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * NetSurf 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#import "cocoa/ScrollableView.h" + +@interface ScrollableView () + +@property (weak, nonatomic) NSView *observedSuperview; + +- (void)frameChangeNotification:(NSNotification *)note; + +@end + +@implementation ScrollableView + +- (void)setMinimumSize:(NSSize)newSize +{ + if (!CGSizeEqualToSize(_minimumSize, newSize)) { + _minimumSize = newSize; + [self adjustFrame]; + } +} + +- (void)adjustFrame +{ + NSSize frameSize = self.enclosingScrollView.contentSize; + [self setFrameSize:NSMakeSize(MAX(self.minimumSize.width, frameSize.width), + MAX(self.minimumSize.height, frameSize.height))]; +} + +- (void)frameChangeNotification:(NSNotification *)note +{ + [self adjustFrame]; +} + +- (void)viewDidMoveToSuperview +{ + NSView *oldSuperview = _observedSuperview; + _observedSuperview = nil; + if (oldSuperview) { + [[NSNotificationCenter defaultCenter] + removeObserver:self + name:NSViewFrameDidChangeNotification + object:oldSuperview]; + } + + NSView *newSuperView = [self superview]; + + if (nil != newSuperView) { + _observedSuperview = newSuperView; + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(frameChangeNotification:) + name:NSViewFrameDidChangeNotification + object:newSuperView]; + newSuperView.postsFrameChangedNotifications = YES; + } +} + +@end |