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 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, -1, -24); // 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).
//
//*****************************************************************************
- drawSelf:(const NXRect *)rects :(int)rectCount
{
NXPoint contentViewOrigin = {-1.0, -1.0 };
NXPoint centerPoint = [self _centerPoint:Image];
[appTile composite:NX_SOVER toPoint:&contentViewOrigin];
[Image 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;
}
//*****************************************************************************
//
// 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.