Toolbar resizing: If there are flexible items and flexible space the items will be expanded

first.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@30381 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
fredkiefer 2010-05-13 16:29:38 +00:00
parent d8a5434efb
commit 85253f4282
2 changed files with 65 additions and 76 deletions

View file

@ -2,7 +2,8 @@
* Source/NSToolbarItem.m (-_isFlexibleSpace): Simplify this method.
* Source/GSToolbarView.m: Clean up toolbar item resizing, this now
allows for resizable item other than flexible space.
allows for resizable item other than flexible space. If there are
flexible items and flexible space the items will be expanded first.
2010-05-13 Wolfgang Lux <wolfgang.lux@gmail.com>

View file

@ -652,25 +652,33 @@ static void initSystemExtensionsColors(void)
- (void) _takeInAccountFlexibleSpaces
{
// Borrow this from NSToolbarItem.m
static const int InsetItemViewX = 10;
NSArray *items = [_toolbar items];
NSEnumerator *e = [items objectEnumerator];
NSEnumerator *e;
NSToolbarItem *item;
NSRect lastBackViewFrame;
float lengthAvailable;
unsigned int flexibleSpaceItemsNumber = 0;
BOOL mustAdjustNext = NO;
CGFloat x = 0.0;
CGFloat maxX = 0.0;
CGFloat currX;
// resizement of a flexible item
CGFloat rel = 1.0;
// Width of a flexible space
CGFloat flexWidth = 0.0;
if ([items count] == 0)
return;
lastBackViewFrame = [[[items lastObject] _backView] frame];
lengthAvailable = [self frame].size.width - NSMaxX(lastBackViewFrame);
currX = NSMaxX([[[items lastObject] _backView] frame]);
lengthAvailable = NSWidth([self frame]) - currX;
if (lengthAvailable < 1)
return;
e = [items objectEnumerator];
while ((item = [e nextObject]) != nil)
{
if ([item _isFlexibleSpace])
@ -681,7 +689,7 @@ static void initSystemExtensionsColors(void)
// Currently only item with a view are resizable
if ([item view] != nil)
{
maxX += [item maxSize].width;
maxX += [item maxSize].width + 2 * InsetItemViewX;
}
else
{
@ -689,56 +697,39 @@ static void initSystemExtensionsColors(void)
}
}
if (flexibleSpaceItemsNumber > 0)
{
if (lengthAvailable < flexibleSpaceItemsNumber)
return;
e = [items objectEnumerator];
while ((item = [e nextObject]) != nil)
{
NSView *backView = [item _backView];
if ([item _isFlexibleSpace])
{
NSRect backViewFrame = [backView frame];
[backView setFrame: NSMakeRect(x, backViewFrame.origin.y,
lengthAvailable / flexibleSpaceItemsNumber,
backViewFrame.size.height)];
mustAdjustNext = YES;
}
else if (mustAdjustNext)
{
NSRect backViewFrame = [backView frame];
[backView setFrame: NSMakeRect(x, backViewFrame.origin.y,
backViewFrame.size.width, backViewFrame.size.height)];
}
x += [backView frame].size.width;
}
}
else
{
// No flexible space
// Could the items fill more space?
if (maxX >= NSMaxX(lastBackViewFrame))
if (maxX >= currX)
{
CGFloat rel = lengthAvailable / (maxX - NSMaxX(lastBackViewFrame));
rel = lengthAvailable / (maxX - currX);
if (rel > 1.0)
rel = 1.0;
}
// Are there any flexible spaces to fill the rest?
if (flexibleSpaceItemsNumber > 0)
{
flexWidth = (NSWidth([self frame]) - maxX) / flexibleSpaceItemsNumber;
if (flexWidth < 0.0)
flexWidth = 0.0;
}
e = [items objectEnumerator];
while ((item = [e nextObject]) != nil)
{
NSView *view = [item view];
NSView *backView = [item _backView];
if (view != nil)
{
CGFloat diff = [item maxSize].width - [item minSize].width;
if (diff > 0)
if ([item _isFlexibleSpace])
{
NSRect backViewFrame = [backView frame];
[backView setFrame: NSMakeRect(x, backViewFrame.origin.y,
flexWidth, backViewFrame.size.height)];
mustAdjustNext = YES;
}
if ((view != nil) && (diff > 0))
{
NSRect backViewFrame = [backView frame];
NSRect viewFrame = [view frame];
@ -748,7 +739,7 @@ static void initSystemExtensionsColors(void)
backViewFrame.size.height)];
// Subtract InsetItemViewX
viewFrame.size.width = (rel * diff) + [item minSize].width
- 2 * 10;
- 2 * InsetItemViewX;
[view setFrame: viewFrame];
mustAdjustNext = YES;
}
@ -759,11 +750,8 @@ static void initSystemExtensionsColors(void)
[backView setFrame: NSMakeRect(x, backViewFrame.origin.y,
backViewFrame.size.width, backViewFrame.size.height)];
}
}
x += NSWidth([backView frame]);
}
}
}
}
- (void) _handleViewsVisibility