This is FontWell.m in view mode; [Download] [Up]
/* This file has been modified by Rohit Khare, 10/31/94 */
/*
* Copyright (c) 1992 Athena Design, Inc. and David Pollak
*
* ALL RIGHTS RESERVED
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the company (Athena Design) nor the names of its
* employees may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY ATHENA DESIGN ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL ATHENA DESIGN BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#import <appkit/publicWraps.h>
#import <appkit/Font.h>
#import <dpsclient/psops.h>
#import <appkit/ActionCell.h>
#import <appkit/FontManager.h>
#import <appkit/Application.h>
#import "FontWell.h"
#import "DPFontPanel.h"
inline double max(double n1,double n2)
{
if (n1 > n2) return n1;
return n2;
}
@implementation FontWell
- initFrame:(const NXRect *)re
{
[super initFrame:re];
[self setCell:[[ActionCell alloc] init]];
theFont = [Font userFontOfSize:12.0 matrix:NX_IDENTITYMATRIX];
[self setFlipped:NO];
return self;
}
- drawSelf:(const NXRect *)re :(int)n
{
NXRect r1;
char tmp[200];
if (fontObj) return self;
PSgsave();
PSrectclip(re -> origin.x,re -> origin.y,re -> size.width,re -> size.height);
//NXEraseRect(re);
[self getBounds:&r1];
NXDrawWhiteBezel(&r1, re);
NXSetColor(NX_COLORBLACK);
[theFont set];
PSrectclip(re -> origin.x + 2,re -> origin.y + 2,re -> size.width - 4,
re -> size.height - 4);
if (theStr) {
sprintf(tmp,"%s %g pt. is %s",
[theFont name], [theFont pointSize],theStr);
} else {
sprintf(tmp,"%s %g pt.",[theFont name],[theFont pointSize]);
}
PSmoveto(max(2.0, (bounds.size.width-[theFont getWidthOf:tmp])/2.0),
max(2.0, (bounds.size.height - [theFont pointSize])/2.0));
PSshow(tmp);
//PScharpath(tmp,1);
//PSfill();
PSgrestore();
PSflush();
return self;
}
- font
{
return fontObj ? [superview font] : theFont;
}
// proprietary extensions, RK, 10/31/94
id proposedFont; // Global
- proposedFont {return proposedFont;}
- acceptFont:font atPoint:(NXPoint *)p
{
id tid;
if (![self isEnabled]) return nil;
proposedFont = font;
if ([self action] && [self target]) {
if ([self sendAction:[self action] to:[self target]] == nil)
return self;
}
[self setFont:font];
if (fontObj) {
tid = [superview font];
if ([tid matrix] != NX_IDENTITYMATRIX)
tid = [Font newFont:[tid name] size:[tid pointSize] matrix:NX_IDENTITYMATRIX];
if (font != tid) [[FontManager new] setSelFont:font isMultiple:NO];
}
return self;
}
- setFont:font
{
if (![self isEnabled]) return nil;
if ([font matrix] != NX_IDENTITYMATRIX)
font = [Font newFont:[font name] size:[font pointSize] matrix:NX_IDENTITYMATRIX];
theFont = font;
[self display];
return self;
}
- mouseDown:(NXEvent *)ev
{
[DPFontPanel dragFont:(fontObj ? [superview font] : theFont) withEvent:ev fromView:self];
return self;
}
- setFontObj:(id *)fo
{
fontObj = fo;
return self;
}
- setLastPreview:(char **)lp
{
lastPreview = lp;
return self;
}
- setStr:(NXAtom)newStr
{
theStr=newStr;
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.