/* * Copyright 2011 Sven Weidauer * * 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 . */ #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 superview] frame].size; [self setFrameSize:NSMakeSize(MAX(self.minimumSize.width, frameSize.width), MAX(self.minimumSize.height, frameSize.height))]; } - (void)frameChangeNotification:(NSNotification *)note { // TODO: Correctly handle window resizing. // Removing this call is a quick hack to avoid an endless layout loop due to appearing/disappearing // scroll bars. //[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