Let me try again to clarify my lack of understanding.
(0) I created a new Document project.
     All I did in IB Inspector pane was to make the window size 500, 500
    and Center Horizontally and Vertically

(1) I added a sub-class of NSButtonCell with a class name of  Class (it will be 
used as the prototype cell)
     (I understand about the convention of 3 char Class prefix but for this 
project I don't need it)
     All I did was add        
        [self setEnabled:YES];
        [self setState:NSOffState];
 to it's init method

(2) I added a sub-class of NSMatrix with a class name of Matrix.
     I overrode             - (void)drawRect:(NSRect)dirtyRect
   and for now just added to it the statement [super drawRect:dirtyRect];

(3) In Document.h I added @property Matrix *theMatrix
     In Document.m I added this code in method
- (void)windowControllerDidLoadNib:(NSWindowController *)aController {
    [super windowControllerDidLoadNib:aController];
    // Get the initial content view size so as to
    // (a)compute where to place the matrix and
    // (b)what size to make the matrix cells
    
    // Local vars for this method
    NSWindow *theWindow = [aController window];
    NSView  *theContentView = theWindow.contentView;
    NSRect frame =[theContentView frame];
    NSRect bounds = [theContentView bounds];
    
    NSRect  theContentFrame = theContentView.frame;
    NSRect  theMatrixFrame = NSInsetRect(theContentFrame, 40.0, 40.);
    Cell    * protoCell = [Cell new];
    
    // Instance vars   
    _theMatrix = [[Matrix alloc]initWithFrame:theMatrixFrame 
        mode:NSListModeMatrix prototype:protoCell 
        numberOfRows:3 numberOfColumns:3];
    
    [theContentView addSubview:_theMatrix];   
}

(4) Running the code produces a window centred horizontally and vertically on 
the screen, as desired,
but with the matrix drawn at the top left of the content view but with the 
origin inset by 40.0, 40.0 from the top left.

Based on my reading of the docs I anticipated that it would be drawn at the 
bottom left with the origin inset by 40.0, 40.0 from the bottom left.
Here are quotes from the View Programming Guide 2013-08-08
"By default, the graphics environment origin (0.0,0.0) is located in the lower 
left,…." page 11  
"The frame rectangle defines the view's location and size in the superview 
using the superview’s coordinate system.
The bounds rectangle defines the interior coordinate system that is used when 
drawing the contents of the view, including the origin and scaling." page 12
"The content view acts as the root of the visible view hierarchy in a window." 
Page 17 

(5) The values of the frame and bounds rects are as follows:
     Document windowControllerDidLoadNib
Frame 0 ,0, 500, 500; Bounds 0, 0, 500, 500

  Matrix drawRect:(NSRect)dirtyRect
Frame 40, 40, 420, 420; Bounds 0, 0, 40, 40

(6) So I must be missing something in my understanding of the documentation.
My thinking is that since the window's contentView is a View and it's graphics 
environment origin is 0.0, 0.0 located in the lower left
the matrix should have been drawn with a lower left origin.

Why am I wrong?

(In pre-OS X days QuickDraw origin was top left based if I recall correctly).


_______________________________________________

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

This email sent to arch...@mail-archive.com

Reply via email to