ftp.nice.ch/pub/next/connectivity/news/Alexandra.0.82.s.tar.gz#/alex8/MatrixScroller.m

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.