This is Graphic.m in view mode; [Download] [Up]
/* * (a) (C) 1990 by Adobe Systems Incorporated. All rights reserved. * * (b) If this Sample Code is distributed as part of the Display PostScript * System Software Development Kit from Adobe Systems Incorporated, * then this copy is designated as Development Software and its use is * subject to the terms of the License Agreement attached to such Kit. * * (c) If this Sample Code is distributed independently, then the following * terms apply: * * (d) This file may be freely copied and redistributed as long as: * 1) Parts (a), (d), (e) and (f) continue to be included in the file, * 2) If the file has been modified in any way, a notice of such * modification is conspicuously indicated. * * (e) PostScript, Display PostScript, and Adobe are registered trademarks of * Adobe Systems Incorporated. * * (f) THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO * CHANGE WITHOUT NOTICE, AND SHOULD NOT BE CONSTRUED * AS A COMMITMENT BY ADOBE SYSTEMS INCORPORATED. * ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY * OR LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO * WARRANTY OF ANY KIND (EXPRESS, IMPLIED OR STATUTORY) * WITH RESPECT TO THIS INFORMATION, AND EXPRESSLY * DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY, * FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. */ /* * Graphic.m * * Version: 2.0 * Author: Ken Fromm * History: * 03-07-91 Added this comment. */ #import "Graphic.h" #import "DrawingViewWraps.h" #import <appkit/defaults.h> #import <appkit/nextstd.h> #import <dpsclient/wraps.h> extern void makeRedBook(UPath *aUpath); void initGparms(GParms *gParms) { gParms->path_type = STROKE; gParms->color = NX_COLORBLACK; gParms->linewidth = 1; gParms->miterlimit = 10; gParms->linejoin = gParms->linecap = 0; } void setGparms(GParms *gParms) { PSWSetParameters((int)gParms->linejoin, (int) gParms->linecap, gParms->linewidth, gParms->miterlimit); } @implementation Graphic : Object + new { self = [super new]; initGparms(&parms); return self; } - free { if (path.pts) NX_FREE(path.pts); if (path.ops) NX_FREE(path.ops); return self; } - installGparms:(const GParms *) gParm { parms = *gParm; return self; } - installUpath:(const UPath *) aUpath andBounds:(const NXRect *) aRect { NX_MALLOC(path.pts, float, aUpath->num_pts+4); NX_MALLOC(path.ops, char, aUpath->num_ops+1); bcopy(aUpath->pts, &path.pts[4], aUpath->num_pts * sizeof(float)/sizeof(char)); path.num_pts = aUpath->num_pts + 4; path.ops[0] = dps_ucache; bcopy(aUpath->ops, &path.ops[1], aUpath->num_ops); path.num_ops = aUpath->num_ops + 1; bounds = *aRect; path.pts[0] = bounds.origin.x; path.pts[1] = bounds.origin.y; path.pts[2] = bounds.origin.x + bounds.size.width; path.pts[3] = bounds.origin.y + bounds.size.height; return self; } - getBounds:(NXRect *)theRect { *theRect = bounds; return self; } /* Private methods sometimes overridden by subclassers */ - setPSState:(GParms *) gParms { if (!gParms) setGparms(&parms); else { if (parms.linewidth != gParms->linewidth) PSsetlinewidth(parms.linewidth); if (parms.linejoin != gParms->linejoin) PSsetlinejoin((int) parms.linejoin); if (parms.linecap != gParms->linecap) PSsetlinecap((int) parms.linecap); if (parms.miterlimit != gParms->miterlimit) PSsetmiterlimit(parms.miterlimit); } if (!gParms || !NXEqualColor(gParms->color, parms.color)) NXSetColor(parms.color); if (gParms) *gParms = parms; return self; } /* Public routines. */ - setPathType:(int) value { parms.path_type = (unsigned char) value; return self; } - (int)pathType { return (int)parms.path_type; } - setLineWidth:(float) value { parms.linewidth = value; return self; } - (float)lineWidth { return parms.linewidth; } - setLineJoin:(int) value { parms.linejoin = (unsigned char) value; return self; } - (int)lineJoin { return (int) parms.linejoin; } - setLineCap:(int) value { parms.linecap = (unsigned char) value; return self; } - (int)lineCap { return (int) parms.linecap; } - setMiterLimit:(float) value { parms.miterlimit = value; return self; } - (float) miterLimit { return parms.miterlimit; } - (float)gray { float value; NXConvertColorToGray(parms.color, &value); return value; } - setGray:(float) aGray { parms.color = NXConvertGrayToColor(aGray); return self; } - (NXColor) color; { return parms.color; } - setColor:(NXColor)aColor { parms.color = aColor; return self; } /* * Returns the user path description for the user path. If a * rectangle is passed in then the user path is returned only * if it lies within the rectangle. */ - getUpath:(UPath **) aUpath forRect:(NXRect *) r { if (!r || NXIntersectsRect(r, &bounds)) *aUpath = &path; else *aUpath = NULL; return self; } /* * Draws the graphic. */ - drawObject:(NXRect *) r currentParms:(GParms *) gParms withManner:(int) manner timingInfo:(Timing *) timing { int path_type; if (!r || NXIntersectsRect(r, &bounds)) { timing->num_subpaths++; if (parms.path_type == FILL) { timing->num_fills++; path_type = dps_ufill; } else { timing->num_strokes++; path_type = dps_ustroke; } [self setPSState:gParms]; if (manner == REDBOOK) { makeRedBook(&path); if (parms.path_type == FILL) PSfill(); else PSstroke(); } else { if (manner == UCACHE) DPSDoUserPath(&path.pts[4], path.num_pts-4, dps_float, &path.ops[0], path.num_ops, path.pts, path_type); else DPSDoUserPath(&path.pts[4], path.num_pts-4, dps_float, &path.ops[1], path.num_ops-1, path.pts, path_type); } } return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.