On Sun, Oct 19, 2008 at 9:06 PM, Ian was here <[EMAIL PROTECTED]> wrote:
> I have a drawing application that uses a pen tool to do free style drawing. I 
> am using Quartz in OS X 10.4 (NSBezierPath). The initial problem I had was 
> not getting enough points between event cycles if the user moved the mouse 
> too quickly. I turned off mouse coalescing with a call to 
> SetMouseCoalescingEnabled( false, NULL ). This gave me beautiful drawing. 
> Only problem is that it's slow and takes a while to catch up after the mouse 
> up event.
>
> This is kind of an off the wall question, but is there another way to do 
> this? I feel my only other option may be to use OPenGL, where the drawing 
> would happen much faster.

As you hint, the problem is not mouse coalescing but performance.
OpenGL won't help with this, because your drawing performance is going
to be tied to the refresh rate of your monitor anyway.

So how do you fix it? Make your event handler run faster. But how can
you do that if you can't make drawing go faster? Easy: decouple mouse
event handling from drawing.

You'll want to disable coalescing as you have done. But then in the
event handler, you do *not* want to redraw every time you get a mouse
moved event. Doing so guarantees that once the rate of mouse-moved
events exceeds your monitor's refresh rate (or your ability to draw,
if it happens to be worse) then lag will develop.

Instead, do what I'd call "display coalescing". Don't redraw with
every event. Instead, have a drawing flag. When you get a mouse event
and the flag isn't set, set it and then post a custom event to the
event queue. Then when you receive that custom event, redraw. This
will essentially coalesce all the mouse moved events that were
received while drawing so that you stay up to date with them. You will
have to ensure that the non-drawing parts of your code always run
faster than mouse events come in, but that should be trivial if you're
just adding points to some sort of data structure.

Mike
_______________________________________________

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

This email sent to [EMAIL PROTECTED]

Reply via email to