• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: NSScroller question
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: NSScroller question


  • Subject: Re: NSScroller question
  • From: Troy Stephens <email@hidden>
  • Date: Fri, 28 Mar 2008 09:44:39 -0700

As Hamish Allan pointed out, a scroller has logical "parts", but they are not subviews. -rectForPart: returns the bounding rects that are used for hit-testing those parts. In the olden days of OpenStep-style Scrollers and their purely rectangular parts, these were exact and the same rects used for drawing. On Mac OS X, they are only hit testing bounding rects (since Scrollers now have curved parts), and do not affect drawing of the Scroller, only hit-testing.

So all that rectForPart:NSScrollerNoParts is telling you is that there's a skinny rect at the top of the scroller that is not sensitive to hit-testing. That makes sense, since there is a nonreactive end cap on the scroll track that has no arrow (when Appearance prefs are set for the scroll arrows to be shown "Together" at the other end). This isn't an "empty" space when you let the scroller draw normally though -- there's art there, or at least there should be. If you're seeing otherwise, something else must be wrong. Can you clarify whether you're seeing this when the scroller draws normally, or only with your test drawing based on the -rectForPart: results in place?

If your goal is to subclass NSScroller to customize its appearance, I should add that the -drawParts and -drawArrow:highlight: methods are obsolete and is no longer invoked by NSScroller's drawing code. Those methods should be deprecated. There are some other difficulties with customizing Scroller appearance using the existing API, and we have at least one request to make that easier in the future.

On Mar 27, 2008, at 6:17 PM, email@hidden wrote:
Yes, I meant scroller, not slider. Just had a glass of wine too much :-)

Actually I don't want to add an accessory view, I want to get rid of
the one that appears to be there by default. I have attached a
screenshot showing what I'm talking about. The yellow part is the
knob, drawn by filling the rect return by calling [self
rectForPart:NSScrollerKnob]. The green part is the slot,  [self
rectForPart:NSScrollerKnobSlot]. The white part above the slot is by
default black, but here I made it white by filling the rect returned
by calling [self rectForPart:NSScrollerNoParts].

I can move the knob/slot upwards by tampering with their designated
rects ("rect.origin.y -= 5"), thus hiding the white part. But that
messes up the drawing when the view is updated.

I figured the white part was a view, but since you are telling me
NSScroller has no subviews I really don't know what to think. Maybe
there is something wrong with my implementation?

@implementation TestScroller

- (void)drawRect:(NSRect)rect
{
	[self drawKnobSlot];
	[self drawKnob];
}

- (void)drawKnob
{
	NSRect rect = [self rectForPart:NSScrollerKnob];
	[[NSColor yellowColor] set];
	[NSBezierPath fillRect:rect];
}

- (void)drawKnobSlot
{
	NSRect rect = [self rectForPart:NSScrollerKnobSlot];
	[[NSColor greenColor] set];
	[NSBezierPath fillRect:rect];
}

@end

On Fri, Mar 28, 2008 at 12:41 AM, Troy Stephens <email@hidden> wrote:

On Mar 27, 2008, at 4:26 PM, email@hidden wrote:
Thanks, but the corner view is the right side corner of the header
view, right? I was talking about the small view just below it, on top
of the vertical slider and part of the slider itself. It's a tiny view
of about 2 pixels height. I believe it corresponds to
NSScrollerNoPart, but I'm not sure.

(By "slider" I take it you really mean "scroller", as NSSlider is something else entirely. :-)

An NSScroller (currently) has no subviews, but if your aim is to add
one or more accessory views above the scroller, that can be done by
subclassing NSScrollView. The key is to override NSScrollView's - tile
method to invoke [super tile], and then adjust the layout to
accommodate your accessory subview(s). Figure out where you want your
accessory subview(s) to go, set their frame(s), and change the
ScrollView's verticalScroller's frame (shrink and move down, since
ScrollViews are flipped) to make room for them.






On Thu, Mar 27, 2008 at 9:53 PM, Troy Stephens <email@hidden>
wrote:

On Mar 27, 2008, at 9:50 AM, email@hidden wrote:
Hi,

NSScroller has a small view, by default two pixels high, just above
the scroller and below the NSTableHeaderView's corner view. How
can I
get at this view? If you look at the XCode interface you can see
they
have put an icon in this view (the one that splits the editor view)
and made it larger. I would like to remove the view completely so
the
scroller goes all the way up to the edge of the corner view.


This question has been addressed before in the archives, but
unfortunately the link pointing to an answer is no longer valid.

Thanks.
F.

See NSTableView.h:

/* Get and set the cornerView. The cornerView is the view that
appears
directly to the right of the headerView above the vertical
NSScroller.
The scroller must be present for the cornerView to be shown.
Calling -
setCornerView: may have the side effect of tiling the
enclosingScrollView to accomodate the size change. The default value
is an internal class that properly fills in the corner.
*/
- (void)setCornerView:(NSView *)cornerView;
- (NSView *)cornerView;


--
Troy Stephens
Cocoa Frameworks
Apple, Inc.






--
Troy Stephens
Cocoa Frameworks
Apple, Inc.




<Picture 2.png>


--
Troy Stephens
Cocoa Frameworks
Apple, Inc.



_______________________________________________

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


  • Follow-Ups:
    • Re: NSScroller question
      • From: email@hidden
References: 
 >NSScroller question (From: email@hidden)
 >Re: NSScroller question (From: Troy Stephens <email@hidden>)
 >Re: NSScroller question (From: email@hidden)
 >Re: NSScroller question (From: Troy Stephens <email@hidden>)
 >Re: NSScroller question (From: email@hidden)

  • Prev by Date: Re: iPod Notifications
  • Next by Date: Re: changing NSNumber from within another function
  • Previous by thread: Re: NSScroller question
  • Next by thread: Re: NSScroller question
  • Index(es):
    • Date
    • Thread