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 (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to