This is IconView.m in view mode; [Download] [Up]
//************************************************************************ // // IconView.m. // // Displays an image in the app Icon // // by Felipe A. Rodriguez // // This code is supplied "as is" the author makes no warranty as to its // suitability for any purpose. This code is free and may be distributed // in accordance with the terms of the: // // GNU GENERAL PUBLIC LICENSE // Version 2, June 1991 // copyright (C) 1989, 1991 Free Software Foundation, Inc. // 675 Mass Ave, Cambridge, MA 02139, USA // //************************************************************************ #import "IconView.h" @implementation IconView //***************************************************************************** // // init the appIconView // //***************************************************************************** - initFrame:(const NXRect *)bRect { [super initFrame:bRect]; [super setAutodisplay:YES]; [super notifyAncestorWhenFrameChanged:YES]; appTile = [NXImage findImageNamed: "NXAppTile"]; [self getFrame:&aRect]; // setup a timeCell = [[TextFieldCell alloc] initTextCell:" "]; // transparent [timeCell setBackgroundTransparent:YES]; // textcell [timeCell setTextColor:NX_COLORGREEN]; // for display timeFont = [Font newFont:"Ohlfs" size:14]; // of time in [timeCell setFont:timeFont]; // appIcon [timeCell setAlignment:NX_CENTERED]; // center text horiz NXOffsetRect(&aRect, 0, -22); // magic number center text vert mailIcon = [NXImage findImageNamed: "mailq"]; Image = [NXImage findImageNamed: "GateKeeper"]; return self; } //************************************************************************ // // app Icon handling Methods // //************************************************************************ - (NXPoint) _centerPoint:anImage { NXSize appTileSize; NXSize imageSize; NXPoint centerPoint; // You must center the composited image within the contentView of the // appIcon window. [appTile getSize: &appTileSize]; [anImage getSize: &imageSize]; // center image and add offset to compensate for location of subview if( imageSize.width < appTileSize.width ) centerPoint.x += ((appTileSize.width - imageSize.width ) / 2.0) - 1.0; if( imageSize.height < appTileSize.height ) centerPoint.y += ((appTileSize.height - imageSize.height) / 2.0) - 1.0; return centerPoint; } //************************************************************************ // // NXAppTile is composited first at 0,0 of the icon window's content view // (this is required in order to maintain the NeXT icon look). 'anImage' // is then composited at center (centering is also a requirement). // //************************************************************************ - _display:anImage { NXPoint contentViewOrigin = {-1.0, -1.0 }; NXPoint centerPoint = [self _centerPoint: anImage]; [appTile composite:NX_SOVER toPoint:&contentViewOrigin]; [anImage composite:NX_SOVER toPoint:¢erPoint]; [timeCell drawSelf:&aRect inView:self]; // draw 1st NXOffsetRect(&aRect, 1, 0); // offset trick to make font BOLD [timeCell drawSelf:&aRect inView:self]; // draw 2nd w/off NXOffsetRect(&aRect, -1, 0); // return offset to orginal if(mailFlag) [mailIcon composite:NX_SOVER toPoint:¢erPoint]; return self; } - drawSelf:(const NXRect *)rects :(int)rectCount { [self _display:Image]; return self; } //***************************************************************************** // // we will display the NXImage we are passed // //***************************************************************************** - setImage:theImage { oldImage = Image; Image = theImage; [self display]; return oldImage; } //***************************************************************************** // // set whether we will display mail icon in corner of app icon // //***************************************************************************** - setMailFlag:(BOOL)flag { if(mailFlag != flag) { mailFlag = flag; [self display]; } return self; } //***************************************************************************** // // return the text Cell within the app Icon Tile // //***************************************************************************** - getTextCell { return timeCell; } //************************************************************************ // // free simply gets rid of everything we created // This is how nice objects clean up. // //************************************************************************ - free { [timeCell free]; return [super free]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.