From: David C. <dw...@dw...> - 2006-11-11 12:30:35
|
Joe wrote: > I am trying to create a custom NSView subclass that, specifically one > that overrides drawRect. What I am having a problem with is > understanding how to override this function and how to actually get > some custom drawing done. Actually, I;m not even sure if my class is > being instantiated. I slapped a view into the ExpressionParser window, > gave it a custom class with the same name as my class (which would > normally be all I would need to do in Cocoa). Joe, Here's the source for a more complex view that I wrote in Haskell. I can't remember if this compiles/works correctly (it was working at one point, but I started tinkering more), but it should give you something to go on as far as showing how to declare the draw_rect function appropriately. Of particular note, I believe that I had to export the info_drawRect in the $(exportClass) directive in order for the Cocoa system to be able to call the haskellized replacement function. (Also a style note, I was experimenting with some utility functions which use unsafePerformIO; said usage is not recommended... :-D) Additional disclaimer: this code was written about a year ago, so I'm sure there are general improvements which could be made in general. I might make the following changes to your view, just to see if it gives you what you are expecting: --- {-# OPTIONS -fglasgow-exts -fth #-} module EPView where import Cocoa import AppKit.NSView as NSView hiding (print) $(declareClass "EPView" "NSView") $(exportClass "EPView" "ev_" [ InstanceMethod info_drawRect ] ) obj #. var = obj # getIVar var ev_drawRect rect self = do r <- self # NSView.bounds -- proper instance selection. _NSColor # blackColor >>= set -- class selector nsRectFill r return () --- Regards, David Christensen |