drawWithFrame NSOutlineView Flickr - PullRequest
       2

drawWithFrame NSOutlineView Flickr

1 голос
/ 01 декабря 2011

У меня есть собственный класс ячейки для NSOutlineView. В классе ячейки я реализовал drawWithFrame.Предоставленный прямоугольник (cellFrame) Я делю на 3 части (a) Изображение (b) Текст (c) Darwing (эллипс / круг / прямоугольник)

Изображение рисуется с помощью операции [imagepositToPoint: imageFrame.origin:NSCompositeSourceOver];Эллипс рисуется с помощью [[NSBezierPath bezierPathWithRoundedRect: ellipseRect xRadius: 10 yRadius: 10] fill];

Текстовый прямоугольник передается суперклассу для рисования текста [super drawInteriorWithFrame: newFrame inView: controlView];

Теперь моя проблема заключается в том, что при развертывании любой ячейки контурного вида все рисунки (эллипсы и т. Д.) Мерцают и кажутся перерисованными, даже если ячейка не была развернута.

Может кто-нибудьпомогите мне решить эту проблему ..

Вот код

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView*)controlView
{
    //cellFrame.size.height -=16;
    Option *ol = [self representedObject];

    uint64_t sz;
    int fontSize=10;
    NSString *sizeText;
    MyFile *tmpf;
    //NSImage *image = [ol getImage];

    if (image != nil)
    {
        // the cell has an image: draw the normal item cell
        NSSize imageSize;
        NSRect imageFrame;

        imageSize = [image size];
        NSDivideRect(cellFrame, &imageFrame, &cellFrame, 3 + imageSize.width, NSMinXEdge);

        imageFrame.origin.x += kImageOriginXOffset;
        imageFrame.origin.y -= kImageOriginYOffset;
        imageFrame.size = NSMakeSize(12,12);

        if ([controlView isFlipped])
            imageFrame.origin.y += ceil((cellFrame.size.height + imageFrame.size.height) / 2);
        else
            imageFrame.origin.y += ceil((cellFrame.size.height - imageFrame.size.height) / 2);

        [image compositeToPoint:imageFrame.origin operation:NSCompositeSourceOver];

        imageFrame.origin.y+=18;
        imageFrame.size.width = cellFrame.size.width - 18;
        imageFrame.origin.x+=18;

        sz = [ol getsize];
        /////////////////////////////////

        NSRect newFrame = cellFrame;
        newFrame.origin.x += kTextOriginXOffset;
        newFrame.origin.y += kTextOriginYOffset;
        newFrame.size.height -= kTextHeightAdjust;
        newFrame.size.width -= 65;

        if(sz) 
        {
            //newFrame.origin.x += 65;
            NSRect tmpframe = newFrame;
            NSRect ellipseRect = NSMakeRect(tmpframe.origin.x+tmpframe.size.width+1, 
                                            tmpframe.origin.y+ kTextOriginYOffset,
                                            60,16);

            //////// ****ALLOC ********
            tmpf = [[MyFile alloc] init];
            [tmpf setfsize:sz];
            sizeText = [tmpf getFormattedfize];

            //  [NSShadow setShadowWithOffset:NSMakeSize(0, -8 * 1) blurRadius:12 * 1
            //                          color:[NSColor colorWithCalibratedWhite:0 alpha:0.75]];
            [[NSColor colorWithCalibratedWhite:0.9 alpha:1.0] set];
            [[NSBezierPath bezierPathWithRoundedRect:ellipseRect xRadius:10 yRadius:10] fill];
            //  [NSShadow clearShadow];
            TextAttributes = [NSDictionary dictionaryWithObjectsAndKeys: [NSColor textColor], 
                              NSForegroundColorAttributeName,
                              [NSFont systemFontOfSize:10], 
                              NSFontAttributeName, nil];    

            [sizeText drawAtPoint:NSMakePoint(ellipseRect.origin.x+3, ellipseRect.origin.y+2)   
                   withAttributes:TextAttributes];

            //////// ****RELEASE *******
            [tmpf release];
        }
        [super drawInteriorWithFrame:newFrame inView:controlView];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...