• 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: Drawing graphics into a view in AppleScript Studio
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Drawing graphics into a view in AppleScript Studio


  • Subject: Re: Drawing graphics into a view in AppleScript Studio
  • From: Jeffrey Mattox <email@hidden>
  • Date: Wed, 28 Jan 2004 22:13:11 -0600

Kerry:

That was helpful. But should clarify the problem. When I use your advice and make the effort to avoid unnecessarily redrawing my graphic items, I find that they all disappear because ASS is redrawing the window background (before my drawRect: is called), forcing me to redraw everything. This happens even when there is no obvious need to redraw the window; for example, if I just click on a button.

What I need to do is figure out how to prevent ASS from redrawing the window.

I've experimented with setting/clearing properties of my window. I'm hoping that somebody knows a shortcut to using trial and error (which, unfortunately is SOP when programming in AppleScript!).

Jeff



At 5:32 PM -0700 1/28/04, Kerry Hazelgren wrote:
Jeff,

On Jan 28, 2004, at 4:59 PM, Jeffrey Mattox wrote:

At 12:29 AM -0700 1/17/04, Kerry Hazelgren wrote:
AppleScript Studio is really just Xcode with support for AppleScript thrown in, so why not use the standard Xcode/IB process for creating, overriding, and drawing into a view?

I have figured out how to subclass NSView and use Cocoa to draw graphics inside a window that is set up by AppleScript Studio. So, now I can draw into my view and it stays there.

But, I don't want to redraw everything each time my drawRect: is called because much of it has not changed (too slow). However, if I don't redraw everything, my prior strokes are overwritten before my drawRect: is invoked. Something is clobbering my view and replacing my prior strokes with the standard window background.

Indeed, it is best NOT to redraw everything every time that -drawRect is called. To optimize things, your -drawRect method can check to see what areas inside the view need to be drawn, and then draw those. Take a look at the header for NSView.h, and look at -getRectsBeingDrawn:count: and -needsToDrawRect. You can view the documentation for them by option+double-clicking on the name of the method.

These two methods will help you to determine what areas (rects) in you view need to be drawn for a given call to your -drawRect method.


I have no commands in my drawRect: that refer to any other views or windows, and I'm just drawing hundreds of lines and circles.


For a bit of explanation, the process of drawing in a view starts when that view is invalidated, in whole (by calling -setNeedsDisplay:) or in part (by calling -setNeedsDisplayInRect:). In Cocoa, you don't explicitly erase views, as was the case in Carbon. The system then attempts to redraw those views. It starts with the hindmost view, sending a -drawRect message to that view. It should only redraw the portions that both (1) have been invalidated, and (2) are visible. This continues until the frontmost view has been redrawn, after which nothing happens until another view is invalidated.

How do I prevent the window background from clobbering my view before my drawRect: is invoked?

If you are seeing the window background in your view in places where your drawing should be, it means that your -drawRect method is not drawing in all of the places that it should. This makes sense if you consider that the content view of the window was redrawn, and then your view was redrawn, but didn't draw everything, leaving portions of the window background still visible.


Jeff

Hope this helps,

Kerry Hazelgren
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.

  • Follow-Ups:
    • Re: Drawing graphics into a view in AppleScript Studio
      • From: Public Look <email@hidden>
References: 
 >Drawing graphics into a view in AppleScript Studio (From: Jeffrey Mattox <email@hidden>)
 >Re: Drawing graphics into a view in AppleScript Studio (From: Jeffrey Mattox <email@hidden>)

  • Prev by Date: two-part question: stylistic question+joint style
  • Next by Date: Re: "check spelling as you type" persistence
  • Previous by thread: Re: Drawing graphics into a view in AppleScript Studio
  • Next by thread: Re: Drawing graphics into a view in AppleScript Studio
  • Index(es):
    • Date
    • Thread