Drawing text in a ImageAndTextCell in a nsoutlineview works as desired in Leopard. Broken in Snow Leopard and Lion
Drawing text in a ImageAndTextCell in a nsoutlineview works as desired in Leopard. Broken in Snow Leopard and Lion
- Subject: Drawing text in a ImageAndTextCell in a nsoutlineview works as desired in Leopard. Broken in Snow Leopard and Lion
- From: email@hidden
- Date: Tue, 26 Jul 2011 10:26:46 +0100
I'm having problems with code that works fine on Leopard, slightly
broken in Snow Leopard and even more so in Lion. In Leopard the
drawing of text in a selected cell with a colour label applied is
drawing white instead of black, if the selected cell is the first in a
list of items with a colour label applied. This also happens in Lion
but in Lion if a later item with a colour label is selected then the
text is drawn über black.
Correct behaviour in Leopard:
http://www.yvs.eu.com/files/Leopard.png
http://www.yvs.eu.com/files/Leopard2.png
Correct behaviour in Snow Leopard when it is not the first item with a
colour label selected:
http://www.yvs.eu.com/files/SnowLeopard2.png
Incorrect behaviour in Snow Leopard & Lion when it is the first item
with a colour label selected:
http://www.yvs.eu.com/files/SnowLeopard3.png
Extra broken behaviour in Lion with the über black:
http://www.yvs.eu.com/files/Lion1.png
I have an NSOutlineView and I use a subclass of a view controller to
control it and to be its delegate.
I use a modified version of Apple's ImageAndTextCell class to draw
each item in the single column outline view. The image and text cell
class draws the image and a colour label where necessary like those
applied in Finder and then asks super (NSTextCell) to draw the text.
In the controller and delegate I have implemented the delegate method
where I set the colour label if necessary:
- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell
forTableColumn:(NSTableColumn *)tableColumn
item:(id)item
{
MYImageAndTextCell *imgTxtCell = cell;
MyNode *myNode = item;
// The if is strictly not necessary but highlights that the label
name is NULL when there is no label.
if ([myNode colourLabel])
[cell setLabelName:[myNode colourLabel]];
else
[cell setLabelName:NULL];
}
In the ImageAndTextCell I have gone over the top in trying to apply
the correct background style when I have a colour label applied
(NSBackgroundStyleLight which previously resulted in the text drawn
black). I have overridden interiorBackgroundStyle
drawWithFrame:cellFrame:inView and drawInteriorWithFrame:inView
- (NSBackgroundStyle)interiorBackgroundStyle
{
if ([self labelName])
return NSBackgroundStyleLight;
return [super interiorBackgroundStyle];
}
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView*)controlView
{
if ([self labelName])
{
...
NSDrawThreePartImage(labelFrame, leftEndCapImage, middleImage,
rightEndCapImage, FALSE, NSCompositeSourceOver,
1.0, TRUE);
[self setBackgroundStyle:NSBackgroundStyleLight];
}
// super will draw the text
[super drawInteriorWithFrame:cellFrame inView:controlView];
}
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView*)controlView
{
// Carve up the cell so that part of the cell is the image, and
the other part is the text cell.
NSSize imageSize [[self image] size] ;
NSRect imageFrame;
NSRect textFrame;
NSDivideRect(cellFrame, &imageFrame, &textFrame, 5 +
imageSize.width, NSMinXEdge);
[[self image] compositeToPoint:imageFrame.origin
operation:NSCompositeSourceOver];
if ([self labelName])
[self setBackgroundStyle:NSBackgroundStyleLight];
[super drawWithFrame:textFrame inView:controlView];
}
What changed in snow leopard to override setting the background style
to NSBackgroundStyleLight for the first item and why do I get the über
black text in Lion? What am I doing wrong?
Kevin
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden