This is MatrixScroller.m in view mode; [Download] [Up]
#import <appkit/appkit.h> #import "MatrixScroller.h" @implementation Matrix(MatrixScroller) - scrollCellToVisible:(int)number upperOffset:(float)up lowerOffset:(float)low { NXRect visibleRect; NXSize theCellSize; NXPoint doNothingZone; NX_ASSERT(number>=0,"Wrong param scrolling matrix"); [self getVisibleRect:&visibleRect]; [self getCellSize:&theCellSize]; doNothingZone.x=NX_Y(&visibleRect); doNothingZone.y=NX_MAXY(&visibleRect); if(low!=0.0) doNothingZone.y-=low*theCellSize.height; if(up!=0.0) doNothingZone.x+=up*theCellSize.height; if((NX_HEIGHT(&visibleRect)<=4.0*theCellSize.height)|| (number*theCellSize.height<doNothingZone.x)|| ((number+1)*theCellSize.height>doNothingZone.y)){ float new_y; new_y=number*theCellSize.height; new_y-=(NX_HEIGHT(&visibleRect)-theCellSize.height)/2; if(new_y<0.0) new_y=0.0; NX_Y(&visibleRect)=new_y; [self scrollRectToVisible:&visibleRect]; } return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.