Re: Preventing default drawing of slider bar in custom NSSlider class
Re: Preventing default drawing of slider bar in custom NSSlider class
- Subject: Re: Preventing default drawing of slider bar in custom NSSlider class
- From: Ken Tozier <email@hidden>
- Date: Sat, 17 Mar 2007 18:10:10 -0400
Thanks Micke that works
It seems really dumb though that Apple doesn't expose "- (BOOL)
_usesCustomTrackImage" It's a very elegant way to override drawing of
the default track bar. The alternative from that link (By Dominik Pich)
- (void) drawWithFrame: (NSRect)cellFrame inView: (NSView*)controlView
{
cellFrame = [self drawingRectForBounds: cellFrame];
[super setTrackRect: cellFrame]; //need to access private member
[self drawBarInside: cellFrame flipped: [controlView isFlipped]];
[self drawKnob];
}
@interface NSSliderCell (SetTrackRect)
@end
@implementation NSSliderCell (SetTrackRect)
- (void) setTrackRect: (NSRect)theRect {
_trackRect = theRect;
}
@end
May work but why force developers to write all that override code
when they could just use "_usesCustomTrackImage"?
I can't think of a single good reason to hide this method. Apple
overrides sliders all the time in their own apps. Why make it such a
headache for everyone else?
/rant
-Ken
On Mar 17, 2007, at 4:16 PM, Mikael Gransell wrote:
Hi Ken
Check out this link for a solution and description of your problem.
http://www.cocoabuilder.com/archive/message/cocoa/2007/1/16/177288
Cheers,
Micke
On Mar 17, 2007, at 9:01 PM, Ken Tozier wrote:
Hi
I wrote a custom NSSlider and NSSliderCell, overrode the
"drawKnob:" and "drawBarInside:flipped:" of the NSSliderCell and
got the stuff I want to draw working correctly, but I'm still
getting the default slider bar behind my slider bar. I
intentionally don't call the NSSliderCell's superclass which I
thought would do the trick, but no luck. How can I get rid of the
default?
Thanks for any help
Ken
Here's the slider bar draw method
- (void) drawBarInside:(NSRect) inRect
flipped:(BOOL) inFlipped
{
NSRect adjustedRect = NSMakeRect(inRect.origin.x
+ 10, 0, inRect.size.width - 20, inRect.size.height);
float rectHeight = inRect.size.height,
leftWidth = [gSliderTrackLeft size].width,
rightWidth = [gSliderTrackRight
size].width,
centerWidth = adjustedRect.size.width -
leftWidth - rightWidth,
adjustedRight = adjustedRect.origin.x +
adjustedRect.size.width,
yOffset = (rectHeight -
DefaultSliderBarHeight) / 2;
NSRect leftRect = NSMakeRect
(adjustedRect.origin.x, adjustedRect.origin.y + yOffset,
leftWidth, DefaultSliderBarHeight),
rightRect = NSMakeRect(adjustedRight -
rightWidth, adjustedRect.origin.y + yOffset, rightWidth,
DefaultSliderBarHeight),
centerRect = NSMakeRect
(leftRect.origin.x + leftRect.size.width, adjustedRect.origin.y +
yOffset, centerWidth, DefaultSliderBarHeight);
minXOrigin = 10;
maxXOrigin = adjustedRight;
[gSliderTrackLeft drawInRect: leftRect
fromRect: NSZeroRect
operation: NSCompositeSourceOver
fraction: 1.0];
[gSliderTrackCenter drawInRect: centerRect
fromRect: NSZeroRect
operation: NSCompositeSourceOver
fraction: 1.0];
[gSliderTrackRight drawInRect: rightRect
fromRect: NSZeroRect
operation: NSCompositeSourceOver
fraction: 1.0];
}
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
40ardendo.se
This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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