Re: Drawing customized window
Re: Drawing customized window
- Subject: Re: Drawing customized window
- From: Nick <email@hidden>
- Date: Wed, 31 Oct 2012 18:30:32 +0200
Forgot to add, the slowness on 10.7/10.8 can be seen in Activity monitor
during video playback (I am playing a QTMovie onto QTMovieLayer). While
QuickTime player takes 30%, my app takes up to 100% of the CPU power to
play the same video.. That's where I checked the app using Instruments - I
am getting 30-40% of time spent in QuickTime decoding functions, and the
rest of the time - deep inside RunLoop... It is slow like that only on Lion
and Moutain Lion. As soon as comment out this methods swizzling (that lets
me to draw a customized window NSThemeFrame), the performance increases
significantly..
Why might this happen?
2012/10/31 Nick <email@hidden>
> Hello
>
> I am attempting to create an application with custom looking windows
> (similar to new iCalendar on mountain lion, or QuickTime player). I am
> targeting systems from Snow Leopard to Mountain Lion.
>
> So far I've been customizing the window using the idea described at
> http://parmanoir.com/Custom_NSThemeFrame
> (basically I set the window to be Textured, and swizzle the draw Rect
> method of the [[window contentView] superview] (which is an instance of
> NSThemeFrame), then draw some nice gradient in that new drawRect
> implementation, and a custom gradiented toolbar.
> The advantage of this method is that I do not have to bother with resizing
> (even the resizing mark in the bottom right corner is drawn automatically)
> and manually drawing titlebar buttons (albeit they have a gray shadow,
> despite i need a black one). Another advantage is that NSToolbar works
> normally with it, and looks nicely with this customly drawn theme frame.
>
> This works fine on Leopard and Snow Leopard, but not on Lion/Mountain
> Lion. Somehow, the application becomes very slow there (Instruments says
> that the application spends a whole bunch of time in some timer event
> somewhere deep in the AppKit, even though I do not use any timers in my
> app). Apart from the windows, on Lion/ML the sheets and the panels get this
> custom drawn background with a titlebar.
>
> I am wondering if anyone created customized windows like this or reverse
> engineered this NSThemeFrame? Maybe there are any articles on the internet
> that I have missed (actually the link I gave in the beginning is the only
> one I have found on this topic). Somehow Apple's iCalendar works pretty
> fast on 10.7, while my app doesn't..
>
> If there's no way to fix this for 10.7/10.8, I guess I will have to draw
> my windows from scratch using NSBorderlessWindowMask, but I think it is
> very difficult to completely mimic the original window's behavior:
> borderless windows do not support NSToolBar (i.e., I have to create my own
> one from scratch), on different OS the windows look/behave differently
> (10.6 - large titlebar buttons, resizing only using right-bottom corner,
> while 10.7 and 10.8 - small titlebar buttons, resizing using any edge),
> etc..
>
>
> Thank you,
> Nicolas
>
_______________________________________________
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