mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-05-31 20:40:47 +00:00
Add a live resize for splitviews. Users can revert to the old behaviour
by doing: defaults write NSGlobalDomain GSUseGhostResize YES git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@28291 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
793ea1b10b
commit
7b6563b013
2 changed files with 294 additions and 223 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2009-05-22 Nicolas Roard <nicolas@roard.com>
|
||||||
|
Add a live resize for splitviews. Users can revert to the old behaviour
|
||||||
|
by doing: defaults write NSGlobalDomain GSUseGhostResize YES
|
||||||
|
* Source/NSSplitView.m: Added live resize of splitviews
|
||||||
|
|
||||||
2009-05-14 Riccardo Mottola <rmottola@users.sf.net>
|
2009-05-14 Riccardo Mottola <rmottola@users.sf.net>
|
||||||
|
|
||||||
* Source/NSApplication.m: fixed allocation of Mutable array instead of Array
|
* Source/NSApplication.m: fixed allocation of Mutable array instead of Array
|
||||||
|
|
|
@ -164,11 +164,241 @@ static NSNotificationCenter *nc = nil;
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility function to draw the xor-ed splitview divider
|
||||||
|
* It is only used in the non-live resize mode.
|
||||||
|
*/
|
||||||
|
- (BOOL) _drawHighlightedDividerWithSize: (NSRect) r
|
||||||
|
andOldSize: (NSRect) oldRect
|
||||||
|
isLit: (BOOL) lit
|
||||||
|
{
|
||||||
|
if (NSEqualRects(r, oldRect) == YES)
|
||||||
|
{
|
||||||
|
return lit;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSDebugLLog(@"NSSplitView", @"drawing divider at %@\n",
|
||||||
|
NSStringFromRect(r));
|
||||||
|
[_dividerColor set];
|
||||||
|
|
||||||
|
|
||||||
|
if (lit == YES)
|
||||||
|
{
|
||||||
|
if (_isVertical == NO)
|
||||||
|
{
|
||||||
|
if ((NSMinY(r) > NSMaxY(oldRect))
|
||||||
|
|| (NSMaxY(r) < NSMinY(oldRect)))
|
||||||
|
// the two rects don't intersect
|
||||||
|
{
|
||||||
|
NSHighlightRect(oldRect);
|
||||||
|
NSHighlightRect(r);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
// the two rects intersect
|
||||||
|
{
|
||||||
|
if (NSMinY(r) > NSMinY(oldRect))
|
||||||
|
{
|
||||||
|
NSRect onRect, offRect;
|
||||||
|
onRect.size.width = r.size.width;
|
||||||
|
onRect.origin.x = r.origin.x;
|
||||||
|
offRect.size.width = r.size.width;
|
||||||
|
offRect.origin.x = r.origin.x;
|
||||||
|
|
||||||
|
offRect.origin.y = NSMinY(oldRect);
|
||||||
|
offRect.size.height =
|
||||||
|
NSMinY(r) - NSMinY(oldRect);
|
||||||
|
|
||||||
|
onRect.origin.y = NSMaxY(oldRect);
|
||||||
|
onRect.size.height =
|
||||||
|
NSMaxY(r) - NSMaxY(oldRect);
|
||||||
|
|
||||||
|
NSHighlightRect(onRect);
|
||||||
|
NSHighlightRect(offRect);
|
||||||
|
|
||||||
|
//NSLog(@"on : %@", NSStringFromRect(onRect));
|
||||||
|
//NSLog(@"off : %@", NSStringFromRect(offRect));
|
||||||
|
//NSLog(@"old : %@", NSStringFromRect(oldRect));
|
||||||
|
//NSLog(@"r : %@", NSStringFromRect(r));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NSRect onRect, offRect;
|
||||||
|
onRect.size.width = r.size.width;
|
||||||
|
onRect.origin.x = r.origin.x;
|
||||||
|
offRect.size.width = r.size.width;
|
||||||
|
offRect.origin.x = r.origin.x;
|
||||||
|
|
||||||
|
offRect.origin.y = NSMaxY(r);
|
||||||
|
offRect.size.height =
|
||||||
|
NSMaxY(oldRect) - NSMaxY(r);
|
||||||
|
|
||||||
|
onRect.origin.y = NSMinY(r);
|
||||||
|
onRect.size.height =
|
||||||
|
NSMinY(oldRect) - NSMinY(r);
|
||||||
|
|
||||||
|
NSHighlightRect(onRect);
|
||||||
|
NSHighlightRect(offRect);
|
||||||
|
|
||||||
|
//NSLog(@"on : %@", NSStringFromRect(onRect));
|
||||||
|
//NSLog(@"off : %@", NSStringFromRect(offRect));
|
||||||
|
//NSLog(@"old : %@", NSStringFromRect(oldRect));
|
||||||
|
//NSLog(@"r : %@", NSStringFromRect(r));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ((NSMinX(r) > NSMaxX(oldRect))
|
||||||
|
|| (NSMaxX(r) < NSMinX(oldRect)))
|
||||||
|
// the two rects don't intersect
|
||||||
|
{
|
||||||
|
NSHighlightRect(oldRect);
|
||||||
|
NSHighlightRect(r);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
// the two rects intersect
|
||||||
|
{
|
||||||
|
if (NSMinX(r) > NSMinX(oldRect))
|
||||||
|
{
|
||||||
|
NSRect onRect, offRect;
|
||||||
|
onRect.size.height = r.size.height;
|
||||||
|
onRect.origin.y = r.origin.y;
|
||||||
|
offRect.size.height = r.size.height;
|
||||||
|
offRect.origin.y = r.origin.y;
|
||||||
|
|
||||||
|
offRect.origin.x = NSMinX(oldRect);
|
||||||
|
offRect.size.width =
|
||||||
|
NSMinX(r) - NSMinX(oldRect);
|
||||||
|
|
||||||
|
onRect.origin.x = NSMaxX(oldRect);
|
||||||
|
onRect.size.width =
|
||||||
|
NSMaxX(r) - NSMaxX(oldRect);
|
||||||
|
|
||||||
|
NSHighlightRect(onRect);
|
||||||
|
NSHighlightRect(offRect);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NSRect onRect, offRect;
|
||||||
|
onRect.size.height = r.size.height;
|
||||||
|
onRect.origin.y = r.origin.y;
|
||||||
|
offRect.size.height = r.size.height;
|
||||||
|
offRect.origin.y = r.origin.y;
|
||||||
|
|
||||||
|
offRect.origin.x = NSMaxX(r);
|
||||||
|
offRect.size.width =
|
||||||
|
NSMaxX(oldRect) - NSMaxX(r);
|
||||||
|
|
||||||
|
onRect.origin.x = NSMinX(r);
|
||||||
|
onRect.size.width =
|
||||||
|
NSMinX(oldRect) - NSMinX(r);
|
||||||
|
|
||||||
|
NSHighlightRect(onRect);
|
||||||
|
NSHighlightRect(offRect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NSHighlightRect(r);
|
||||||
|
}
|
||||||
|
[_window flushWindow];
|
||||||
|
/*
|
||||||
|
if (lit == YES)
|
||||||
|
{
|
||||||
|
NSHighlightRect(oldRect);
|
||||||
|
lit = NO;
|
||||||
|
}
|
||||||
|
NSHighlightRect(r);
|
||||||
|
*/
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility function handling the splitview resize after
|
||||||
|
* the divider has been moved
|
||||||
|
*/
|
||||||
|
- (void) _resize: (id) v withOldSplitView: (id) prev
|
||||||
|
withFrame: (NSRect) r fromPoint: (NSPoint) p
|
||||||
|
withBigRect: (NSRect) bigRect divHorizontal: (float) divHorizontal
|
||||||
|
divVertical: (float) divVertical
|
||||||
|
{
|
||||||
|
NSRect r1 = NSZeroRect;
|
||||||
|
|
||||||
|
[nc postNotificationName: NSSplitViewWillResizeSubviewsNotification
|
||||||
|
object: self];
|
||||||
|
|
||||||
|
/* resize the subviews accordingly */
|
||||||
|
r = [prev frame];
|
||||||
|
if (_isVertical == NO)
|
||||||
|
{
|
||||||
|
r.size.height = p.y - NSMinY(bigRect) - (divVertical/2.);
|
||||||
|
if (NSHeight(r) < 1.)
|
||||||
|
{
|
||||||
|
r.size.height = 1.;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
r.size.width = p.x - NSMinX(bigRect) - (divHorizontal/2.);
|
||||||
|
if (NSWidth(r) < 1.)
|
||||||
|
{
|
||||||
|
r.size.width = 1.;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[prev setFrame: r];
|
||||||
|
NSDebugLLog(@"NSSplitView", @"drawing PREV at x: %d, y: %d, w: %d, h: %d\n",
|
||||||
|
(int)NSMinX(r),(int)NSMinY(r),(int)NSWidth(r),(int)NSHeight(r));
|
||||||
|
|
||||||
|
r1 = [v frame];
|
||||||
|
if (_isVertical == NO)
|
||||||
|
{
|
||||||
|
r1.origin.y = p.y + (divVertical/2.);
|
||||||
|
if (NSMinY(r1) < 0.)
|
||||||
|
{
|
||||||
|
r1.origin.y = 0.;
|
||||||
|
}
|
||||||
|
r1.size.height = NSHeight(bigRect) - NSHeight(r) - divVertical;
|
||||||
|
if (NSHeight(r) < 1.)
|
||||||
|
{
|
||||||
|
r.size.height = 1.;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
r1.origin.x = p.x + (divHorizontal/2.);
|
||||||
|
if (NSMinX(r1) < 0.)
|
||||||
|
{
|
||||||
|
r1.origin.x = 0.;
|
||||||
|
}
|
||||||
|
r1.size.width = NSWidth(bigRect) - NSWidth(r) - divHorizontal;
|
||||||
|
if (NSWidth(r1) < 1.)
|
||||||
|
{
|
||||||
|
r1.size.width = 1.;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[v setFrame: r1];
|
||||||
|
NSDebugLLog(@"NSSplitView", @"drawing LAST at x: %d, y: %d, w: %d, h: %d\n",
|
||||||
|
(int)NSMinX(r1),(int)NSMinY(r1),(int)NSWidth(r1),
|
||||||
|
(int)NSHeight(r1));
|
||||||
|
|
||||||
|
[nc postNotificationName: NSSplitViewDidResizeSubviewsNotification
|
||||||
|
object: self];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* In -mouseDown we intercept the mouse event to handle the
|
||||||
|
* splitview divider move. Moving the divider will do a live
|
||||||
|
* resize of the subviews by default. Users can revert to
|
||||||
|
* a "ghost" display of the splitview (without doing the
|
||||||
|
* resize) by doing:
|
||||||
|
* defaults write NSGlobalDomain GSUseGhostResize YES
|
||||||
|
*/
|
||||||
- (void) mouseDown: (NSEvent*)theEvent
|
- (void) mouseDown: (NSEvent*)theEvent
|
||||||
{
|
{
|
||||||
NSApplication *app = [NSApplication sharedApplication];
|
NSApplication *app = [NSApplication sharedApplication];
|
||||||
static NSRect oldRect; //only one can be dragged at a time
|
|
||||||
static BOOL lit = NO;
|
|
||||||
NSPoint p, op;
|
NSPoint p, op;
|
||||||
NSEvent *e;
|
NSEvent *e;
|
||||||
NSRect r, r1, bigRect, vis;
|
NSRect r, r1, bigRect, vis;
|
||||||
|
@ -185,6 +415,9 @@ static NSNotificationCenter *nc = nil;
|
||||||
SEL constrainSel = @selector(splitView:constrainSplitPosition:ofSubviewAt:);
|
SEL constrainSel = @selector(splitView:constrainSplitPosition:ofSubviewAt:);
|
||||||
typedef float (*floatIMP)(id, SEL, id, float, int);
|
typedef float (*floatIMP)(id, SEL, id, float, int);
|
||||||
floatIMP constrainImp = NULL;
|
floatIMP constrainImp = NULL;
|
||||||
|
BOOL liveResize = ![[NSUserDefaults standardUserDefaults] boolForKey: @"GSUseGhostResize"];
|
||||||
|
NSRect oldRect; //only one can be dragged at a time
|
||||||
|
BOOL lit = NO;
|
||||||
|
|
||||||
/* if there are less the two subviews, there is nothing to do */
|
/* if there are less the two subviews, there is nothing to do */
|
||||||
if (count < 2)
|
if (count < 2)
|
||||||
|
@ -345,12 +578,15 @@ static NSNotificationCenter *nc = nil;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
oldRect = NSZeroRect;
|
if (!liveResize)
|
||||||
[self lockFocus];
|
{
|
||||||
|
oldRect = NSZeroRect;
|
||||||
|
[self lockFocus];
|
||||||
|
[_dividerColor set];
|
||||||
|
}
|
||||||
|
|
||||||
[[NSRunLoop currentRunLoop] limitDateForMode: NSEventTrackingRunLoopMode];
|
[[NSRunLoop currentRunLoop] limitDateForMode: NSEventTrackingRunLoopMode];
|
||||||
|
|
||||||
[_dividerColor set];
|
|
||||||
r.size.width = divHorizontal;
|
r.size.width = divHorizontal;
|
||||||
r.size.height = divVertical;
|
r.size.height = divVertical;
|
||||||
e = [app nextEventMatchingMask: eventMask
|
e = [app nextEventMatchingMask: eventMask
|
||||||
|
@ -363,12 +599,20 @@ static NSNotificationCenter *nc = nil;
|
||||||
constrainImp = (floatIMP)[_delegate methodForSelector: constrainSel];
|
constrainImp = (floatIMP)[_delegate methodForSelector: constrainSel];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save the old position
|
if (!liveResize)
|
||||||
op = p;
|
{
|
||||||
|
// Save the old position
|
||||||
|
op = p;
|
||||||
|
}
|
||||||
|
|
||||||
// user is moving the knob loop until left mouse up
|
// user is moving the knob loop until left mouse up
|
||||||
while ([e type] != NSLeftMouseUp)
|
while ([e type] != NSLeftMouseUp)
|
||||||
{
|
{
|
||||||
|
if (liveResize)
|
||||||
|
{
|
||||||
|
// Save the old position
|
||||||
|
op = p;
|
||||||
|
}
|
||||||
p = [self convertPoint: [e locationInWindow] fromView: nil];
|
p = [self convertPoint: [e locationInWindow] fromView: nil];
|
||||||
if (delegateConstrains)
|
if (delegateConstrains)
|
||||||
{
|
{
|
||||||
|
@ -410,145 +654,12 @@ static NSNotificationCenter *nc = nil;
|
||||||
r.origin.x = p.x - (divHorizontal/2.);
|
r.origin.x = p.x - (divHorizontal/2.);
|
||||||
r.origin.y = NSMinY(vis);
|
r.origin.y = NSMinY(vis);
|
||||||
}
|
}
|
||||||
if (NSEqualRects(r, oldRect) == NO)
|
|
||||||
|
if (!liveResize)
|
||||||
{
|
{
|
||||||
NSDebugLLog(@"NSSplitView", @"drawing divider at %@\n",
|
lit = [self _drawHighlightedDividerWithSize: r
|
||||||
NSStringFromRect(r));
|
andOldSize: oldRect
|
||||||
[_dividerColor set];
|
isLit: lit];
|
||||||
|
|
||||||
|
|
||||||
if (lit == YES)
|
|
||||||
{
|
|
||||||
if (_isVertical == NO)
|
|
||||||
{
|
|
||||||
if ((NSMinY(r) > NSMaxY(oldRect))
|
|
||||||
|| (NSMaxY(r) < NSMinY(oldRect)))
|
|
||||||
// the two rects don't intersect
|
|
||||||
{
|
|
||||||
NSHighlightRect(oldRect);
|
|
||||||
NSHighlightRect(r);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
// the two rects intersect
|
|
||||||
{
|
|
||||||
if (NSMinY(r) > NSMinY(oldRect))
|
|
||||||
{
|
|
||||||
NSRect onRect, offRect;
|
|
||||||
onRect.size.width = r.size.width;
|
|
||||||
onRect.origin.x = r.origin.x;
|
|
||||||
offRect.size.width = r.size.width;
|
|
||||||
offRect.origin.x = r.origin.x;
|
|
||||||
|
|
||||||
offRect.origin.y = NSMinY(oldRect);
|
|
||||||
offRect.size.height =
|
|
||||||
NSMinY(r) - NSMinY(oldRect);
|
|
||||||
|
|
||||||
onRect.origin.y = NSMaxY(oldRect);
|
|
||||||
onRect.size.height =
|
|
||||||
NSMaxY(r) - NSMaxY(oldRect);
|
|
||||||
|
|
||||||
NSHighlightRect(onRect);
|
|
||||||
NSHighlightRect(offRect);
|
|
||||||
|
|
||||||
//NSLog(@"on : %@", NSStringFromRect(onRect));
|
|
||||||
//NSLog(@"off : %@", NSStringFromRect(offRect));
|
|
||||||
//NSLog(@"old : %@", NSStringFromRect(oldRect));
|
|
||||||
//NSLog(@"r : %@", NSStringFromRect(r));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
NSRect onRect, offRect;
|
|
||||||
onRect.size.width = r.size.width;
|
|
||||||
onRect.origin.x = r.origin.x;
|
|
||||||
offRect.size.width = r.size.width;
|
|
||||||
offRect.origin.x = r.origin.x;
|
|
||||||
|
|
||||||
offRect.origin.y = NSMaxY(r);
|
|
||||||
offRect.size.height =
|
|
||||||
NSMaxY(oldRect) - NSMaxY(r);
|
|
||||||
|
|
||||||
onRect.origin.y = NSMinY(r);
|
|
||||||
onRect.size.height =
|
|
||||||
NSMinY(oldRect) - NSMinY(r);
|
|
||||||
|
|
||||||
NSHighlightRect(onRect);
|
|
||||||
NSHighlightRect(offRect);
|
|
||||||
|
|
||||||
//NSLog(@"on : %@", NSStringFromRect(onRect));
|
|
||||||
//NSLog(@"off : %@", NSStringFromRect(offRect));
|
|
||||||
//NSLog(@"old : %@", NSStringFromRect(oldRect));
|
|
||||||
//NSLog(@"r : %@", NSStringFromRect(r));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ((NSMinX(r) > NSMaxX(oldRect))
|
|
||||||
|| (NSMaxX(r) < NSMinX(oldRect)))
|
|
||||||
// the two rects don't intersect
|
|
||||||
{
|
|
||||||
NSHighlightRect(oldRect);
|
|
||||||
NSHighlightRect(r);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
// the two rects intersect
|
|
||||||
{
|
|
||||||
if (NSMinX(r) > NSMinX(oldRect))
|
|
||||||
{
|
|
||||||
NSRect onRect, offRect;
|
|
||||||
onRect.size.height = r.size.height;
|
|
||||||
onRect.origin.y = r.origin.y;
|
|
||||||
offRect.size.height = r.size.height;
|
|
||||||
offRect.origin.y = r.origin.y;
|
|
||||||
|
|
||||||
offRect.origin.x = NSMinX(oldRect);
|
|
||||||
offRect.size.width =
|
|
||||||
NSMinX(r) - NSMinX(oldRect);
|
|
||||||
|
|
||||||
onRect.origin.x = NSMaxX(oldRect);
|
|
||||||
onRect.size.width =
|
|
||||||
NSMaxX(r) - NSMaxX(oldRect);
|
|
||||||
|
|
||||||
NSHighlightRect(onRect);
|
|
||||||
NSHighlightRect(offRect);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
NSRect onRect, offRect;
|
|
||||||
onRect.size.height = r.size.height;
|
|
||||||
onRect.origin.y = r.origin.y;
|
|
||||||
offRect.size.height = r.size.height;
|
|
||||||
offRect.origin.y = r.origin.y;
|
|
||||||
|
|
||||||
offRect.origin.x = NSMaxX(r);
|
|
||||||
offRect.size.width =
|
|
||||||
NSMaxX(oldRect) - NSMaxX(r);
|
|
||||||
|
|
||||||
onRect.origin.x = NSMinX(r);
|
|
||||||
onRect.size.width =
|
|
||||||
NSMinX(oldRect) - NSMinX(r);
|
|
||||||
|
|
||||||
NSHighlightRect(onRect);
|
|
||||||
NSHighlightRect(offRect);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
NSHighlightRect(r);
|
|
||||||
}
|
|
||||||
[_window flushWindow];
|
|
||||||
/*
|
|
||||||
if (lit == YES)
|
|
||||||
{
|
|
||||||
NSHighlightRect(oldRect);
|
|
||||||
lit = NO;
|
|
||||||
}
|
|
||||||
NSHighlightRect(r);
|
|
||||||
*/
|
|
||||||
lit = YES;
|
|
||||||
oldRect = r;
|
oldRect = r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -583,91 +694,46 @@ static NSNotificationCenter *nc = nil;
|
||||||
while (ee != nil);
|
while (ee != nil);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (liveResize)
|
||||||
|
{
|
||||||
|
// If the splitview was moved, we resize the subviews
|
||||||
|
if ((_isVertical == YES && p.x != op.x)
|
||||||
|
|| (_isVertical == NO && p.y != op.y))
|
||||||
|
{
|
||||||
|
[self _resize: v withOldSplitView: prev withFrame: r fromPoint: p
|
||||||
|
withBigRect: bigRect divHorizontal: divHorizontal
|
||||||
|
divVertical: divVertical];
|
||||||
|
[_window invalidateCursorRectsForView: self];
|
||||||
|
[self setNeedsDisplay: YES];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lit == YES)
|
if (!liveResize)
|
||||||
{
|
{
|
||||||
[_dividerColor set];
|
if (lit == YES)
|
||||||
NSHighlightRect(oldRect);
|
|
||||||
lit = NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
[self unlockFocus];
|
|
||||||
|
|
||||||
// Divider position hasn't changed don't try to resize subviews
|
|
||||||
if (_isVertical == YES && p.x == op.x)
|
|
||||||
{
|
|
||||||
[self setNeedsDisplay: YES];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if (_isVertical == NO && p.y == op.y)
|
|
||||||
{
|
|
||||||
[self setNeedsDisplay: YES];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
[nc postNotificationName: NSSplitViewWillResizeSubviewsNotification
|
|
||||||
object: self];
|
|
||||||
|
|
||||||
/* resize the subviews accordingly */
|
|
||||||
r = [prev frame];
|
|
||||||
if (_isVertical == NO)
|
|
||||||
{
|
|
||||||
r.size.height = p.y - NSMinY(bigRect) - (divVertical/2.);
|
|
||||||
if (NSHeight(r) < 1.)
|
|
||||||
{
|
{
|
||||||
r.size.height = 1.;
|
[_dividerColor set];
|
||||||
|
NSHighlightRect(oldRect);
|
||||||
|
lit = NO;
|
||||||
|
}
|
||||||
|
[self unlockFocus];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!liveResize)
|
||||||
|
{
|
||||||
|
// If the splitview was moved, we resize the subviews
|
||||||
|
if ((_isVertical == YES && p.x != op.x)
|
||||||
|
|| (_isVertical == NO && p.y != op.y))
|
||||||
|
{
|
||||||
|
[self _resize: v withOldSplitView: prev withFrame: r fromPoint: p
|
||||||
|
withBigRect: bigRect divHorizontal: divHorizontal
|
||||||
|
divVertical: divVertical];
|
||||||
|
[_window invalidateCursorRectsForView: self];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
r.size.width = p.x - NSMinX(bigRect) - (divHorizontal/2.);
|
|
||||||
if (NSWidth(r) < 1.)
|
|
||||||
{
|
|
||||||
r.size.width = 1.;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[prev setFrame: r];
|
|
||||||
NSDebugLLog(@"NSSplitView", @"drawing PREV at x: %d, y: %d, w: %d, h: %d\n",
|
|
||||||
(int)NSMinX(r),(int)NSMinY(r),(int)NSWidth(r),(int)NSHeight(r));
|
|
||||||
|
|
||||||
r1 = [v frame];
|
|
||||||
if (_isVertical == NO)
|
|
||||||
{
|
|
||||||
r1.origin.y = p.y + (divVertical/2.);
|
|
||||||
if (NSMinY(r1) < 0.)
|
|
||||||
{
|
|
||||||
r1.origin.y = 0.;
|
|
||||||
}
|
|
||||||
r1.size.height = NSHeight(bigRect) - NSHeight(r) - divVertical;
|
|
||||||
if (NSHeight(r) < 1.)
|
|
||||||
{
|
|
||||||
r.size.height = 1.;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
r1.origin.x = p.x + (divHorizontal/2.);
|
|
||||||
if (NSMinX(r1) < 0.)
|
|
||||||
{
|
|
||||||
r1.origin.x = 0.;
|
|
||||||
}
|
|
||||||
r1.size.width = NSWidth(bigRect) - NSWidth(r) - divHorizontal;
|
|
||||||
if (NSWidth(r1) < 1.)
|
|
||||||
{
|
|
||||||
r1.size.width = 1.;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[v setFrame: r1];
|
|
||||||
NSDebugLLog(@"NSSplitView", @"drawing LAST at x: %d, y: %d, w: %d, h: %d\n",
|
|
||||||
(int)NSMinX(r1),(int)NSMinY(r1),(int)NSWidth(r1),
|
|
||||||
(int)NSHeight(r1));
|
|
||||||
|
|
||||||
[_window invalidateCursorRectsForView: self];
|
|
||||||
|
|
||||||
[nc postNotificationName: NSSplitViewDidResizeSubviewsNotification
|
|
||||||
object: self];
|
|
||||||
|
|
||||||
[self _autosaveSubviewProportions];
|
[self _autosaveSubviewProportions];
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue