That seems to work well. I set a counter that decrements every time the mouseDragged: method is called. When the counter reaches zero, it draws the bezier path (as well as all the other objects in the view). Thanks.
--- On Sun, 10/19/08, Michael Ash <[EMAIL PROTECTED]> wrote: > From: Michael Ash <[EMAIL PROTECTED]> > Subject: Re: Mouse Coalescing > To: "Cocoa Developers" <cocoa-dev@lists.apple.com> > Date: Sunday, October 19, 2008, 7:54 PM > 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/howlewere%40yahoo.com > > This email sent to [EMAIL PROTECTED] _______________________________________________ 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]