Change ImageBrowserCell highlight dimension

326 views Asked by At

I want to resize the standard IKImageBrowserCell highlight dimension. I found a similar question on stackoverflow here (at the link you can see the standard IKImageBrowserCell selection highlight).

I' ve found some apple sample code that customize completely the IKImageBrowserCell and also the highlight dimension. these are the two overidden methods that set the frames

- (NSRect) imageFrame
{
//  //get default imageFrame and aspect ratio
    NSRect imageFrame = [super imageFrame];

    if(imageFrame.size.height == 0 || imageFrame.size.width == 0) return NSZeroRect;

    float aspectRatio =  imageFrame.size.width / imageFrame.size.height;

    // compute the rectangle included in container with a margin of at least 10 pixel at the bottom, 5 pixel at the top and keep a correct  aspect ratio
    NSRect container = [self imageContainerFrame];
    container = NSInsetRect(container, 8, 8);

    if(container.size.height <= 0) return NSZeroRect;

    float containerAspectRatio = container.size.width / container.size.height;

    if(containerAspectRatio > aspectRatio){
        imageFrame.size.height = container.size.height;
        imageFrame.origin.y = container.origin.y;
        imageFrame.size.width = imageFrame.size.height * aspectRatio;
        imageFrame.origin.x = container.origin.x + (container.size.width - imageFrame.size.width)*0.5;
    }
    else{
        imageFrame.size.width = container.size.width;
        imageFrame.origin.x = container.origin.x;       
        imageFrame.size.height = imageFrame.size.width / aspectRatio;
        imageFrame.origin.y = container.origin.y + container.size.height - imageFrame.size.height;
    }

    //round it
    imageFrame.origin.x = floorf(imageFrame.origin.x);
    imageFrame.origin.y = floorf(imageFrame.origin.y);
    imageFrame.size.width = ceilf(imageFrame.size.width);
    imageFrame.size.height = ceilf(imageFrame.size.height);

    return imageFrame;
}

//---------------------------------------------------------------------------------
// imageContainerFrame
//
// override the default image container frame
//---------------------------------------------------------------------------------
- (NSRect) imageContainerFrame
{
    NSRect container = [super frame];

    //make the image container 15 pixels up
    container.origin.y += 15;
    container.size.height -= 15;

    return container;
}

And this is the code that' s generates the selection highlight

/* selection layer */
if(type == IKImageBrowserCellSelectionLayer){

    //create a selection layer
    CALayer *selectionLayer = [CALayer layer];

    selectionLayer.frame = CGRectMake(0, 0, frame.size.height, frame.size.height);

    float fillComponents[4] = {1.0, 0, 0.5, 0.3};
    float strokeComponents[4] = {1.0, 0.0, 0.5, 1};

    //set a background color
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    color = CGColorCreate(colorSpace, fillComponents);
    [selectionLayer setBackgroundColor:color];
    CFRelease(color);

    //set a border color
    color = CGColorCreate(colorSpace, strokeComponents);
    [selectionLayer setBorderColor:color];
    CFRelease(color);

    [selectionLayer setBorderWidth:2.0];
    [selectionLayer setCornerRadius:5];

    return selectionLayer;
}

this is the result of that code:

enter image description here

as you can see the frame of the selection is changed but I can' t modify it in the way I wan' t. I simply want to have the highlight as the same size as the image thumbnail. I' ve tried to modify the selection code (selectionLayer.frame = CGRectMake(0, 0, frame.size.height, frame.size.height);) but nothing happens. Anyone can help me? Thanks!

1

There are 1 answers

0
Vincent Wayne On

To custom your selection frame layout, you must override -[IKImageBrowserCell selectionFrame]


Here are the methods that you may want to override if you want to custom the layout of IKImageBrowserCell.

- (NSRect) imageContainerFrame; 
- (NSRect) imageFrame; 
- (NSRect) selectionFrame;
- (NSRect) titleFrame;
- (NSRect) subtitleFrame;   
- (NSImageAlignment) imageAlignment; 

Here are the methods that you may want to override if you want to custom the appearance of IKImageBrowserCell

- (CGFloat) opacity;
- (CALayer *) layerForType:(NSString *) type;