>From memory I think the drawing problems only happened when I was trying to 
>use overlay scrollers.

With my own scroller implementation, I wondered what was going on, and I see 
that the backtrace is totally different when I am using overlay scrollers:
    frame #0: 0x0000000100463304 NovaMind5`-[NMPresentableScroller drawRect:] + 
148 at NMPresentableScroller.m:90
    frame #1: 0x00007fff838870b2 AppKit`-[NSSurface displayIfNeeded] + 266
    frame #2: 0x00007fff839a9d0d AppKit`-[NSView 
_recursiveSyncAndDisplayViewBackingSurfacesIfNeeded:] + 212
    frame #3: 0x00007fff87e2f0b6 CoreFoundation`__NSArrayEnumerate + 582
    frame #4: 0x00007fff839a9df6 AppKit`-[NSView 
_recursiveSyncAndDisplayViewBackingSurfacesIfNeeded:] + 445
    frame #5: 0x00007fff87e2f0b6 CoreFoundation`__NSArrayEnumerate + 582
    frame #6: 0x00007fff839a9df6 AppKit`-[NSView 
_recursiveSyncAndDisplayViewBackingSurfacesIfNeeded:] + 445
    frame #7: 0x00007fff87e2f0b6 CoreFoundation`__NSArrayEnumerate + 582
    frame #8: 0x00007fff839a9df6 AppKit`-[NSView 
_recursiveSyncAndDisplayViewBackingSurfacesIfNeeded:] + 445
    frame #9: 0x00007fff87e2f0b6 CoreFoundation`__NSArrayEnumerate + 582
    frame #10: 0x00007fff839a9df6 AppKit`-[NSView 
_recursiveSyncAndDisplayViewBackingSurfacesIfNeeded:] + 445
    frame #11: 0x00007fff87e2f0b6 CoreFoundation`__NSArrayEnumerate + 582
    frame #12: 0x00007fff839a9df6 AppKit`-[NSView 
_recursiveSyncAndDisplayViewBackingSurfacesIfNeeded:] + 445
    frame #13: 0x00007fff87e2f0b6 CoreFoundation`__NSArrayEnumerate + 582
    frame #14: 0x00007fff839a9df6 AppKit`-[NSView 
_recursiveSyncAndDisplayViewBackingSurfacesIfNeeded:] + 445
    frame #15: 0x00007fff83a20683 AppKit`-[NSView 
_recursiveSyncDisplayAndFlushViewBackingSurfacesIfNeeded] + 96
    frame #16: 0x00007fff83970c8a AppKit`-[NSView 
_displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] + 1168
    frame #17: 0x00007fff8393b993 AppKit`-[NSView displayIfNeeded] + 1830

versus normal drawing:
    frame #0: 0x0000000100463304 NovaMind5`-[NMPresentableScroller drawRect:] + 
148 at NMPresentableScroller.m:90
    frame #1: 0x00007fff83979e20 AppKit`-[NSView _drawRect:clip:] + 4437
    frame #2: 0x00007fff83976c93 AppKit`-[NSView 
_recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
 + 3058
    frame #3: 0x00007fff83977724 AppKit`-[NSView 
_recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
 + 5763
    frame #4: 0x00007fff83977724 AppKit`-[NSView 
_recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
 + 5763
    frame #5: 0x00007fff83977724 AppKit`-[NSView 
_recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
 + 5763
    frame #6: 0x00007fff83977724 AppKit`-[NSView 
_recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
 + 5763
    frame #7: 0x00007fff83977724 AppKit`-[NSView 
_recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
 + 5763
    frame #8: 0x00007fff83977724 AppKit`-[NSView 
_recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
 + 5763
    frame #9: 0x00007fff83975e23 AppKit`-[NSThemeFrame 
_recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
 + 314
    frame #10: 0x00007fff83971a3d AppKit`-[NSView 
_displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] + 4675
    frame #11: 0x00007fff8393b993 AppKit`-[NSView displayIfNeeded] + 1830

So I wondered what would happen if I used setWantsLayer:YES on my accessory 
view, and low and behold it is now drawn on my 10.7+ style overlay views! Yay!

It doesn't auto-hide, and it only actually works when the scrollers are shown, 
so I'm not sure that it's going to be that useful anyway. I thought the 
auto-hiding might be done through the opacity of a backing layer on the view, 
but there is apparently no layer on this view (!). I logged setAlphaValue: and 
it wasn't called, so am not sure where the opacity is coming from.

If I can get it to auto-hide with the scroller, and make the scrollers stay 
visible when the control is in use (it's sometimes a popup button, and 
sometimes a text field), then it may work out well. Otherwise, I may just have 
to stick with using either always visible scrollers, or find another location 
for my zoom controls.

At least I 

Regards

Gideon

On 08/07/2012, at 12:21 PM, Graham Cox <graham....@bigpond.com> wrote:

> 
> On 08/07/2012, at 12:13 PM, Gideon King wrote:
> 
>> Yes, I was using that type of code before too, but it didn't work with the 
>> new scrollbar styles (drawing artifacts on resize, not automatically 
>> hiding), which is what prompted me to look at subclassing the scroller 
>> itself instead. Unfortunately it still only works with the legacy style 
>> scrollers and not overlays as per my previous message.
> 
> 
> That's right. If you do anything to modify the position of the scrollers, it 
> will revert to the legacy scrollbars. That's the way NSScroller works now. 
> AFAIK, you can't have it both ways - add a placard and have overlay 
> scrollers. That's why I moved my placard elsewhere. That said I never 
> experienced drawing artefacts or other problems, it just used the old 
> scrollbars.
> 
> --Graham
> 
> 

_______________________________________________

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

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

Reply via email to