home *** CD-ROM | disk | FTP | other *** search
- @class GraphicView;
-
- #define KNOB_DY_ONCE 0x1
- #define KNOB_DY_TWICE 0x2
- #define KNOB_DX_ONCE 0x4
- #define KNOB_DX_TWICE 0x8
-
- /* corners */
-
- #define LOWER_LEFT (0x10)
- #define LEFT_SIDE (KNOB_DY_ONCE)
- #define UPPER_LEFT (LEFT_SIDE|KNOB_DY_TWICE)
- #define TOP_SIDE (UPPER_LEFT|KNOB_DX_ONCE)
- #define UPPER_RIGHT (TOP_SIDE|KNOB_DX_TWICE)
- #define BOTTOM_SIDE (KNOB_DX_ONCE)
- #define LOWER_RIGHT (BOTTOM_SIDE|KNOB_DX_TWICE)
- #define RIGHT_SIDE (LOWER_RIGHT|KNOB_DY_ONCE)
-
- /* special corner which means upper right, but also note that we're creating */
-
- #define CREATE (0x20)
-
- /* corner mask values */
-
- #define LOWER_LEFT_MASK (1 << LOWER_LEFT)
- #define LEFT_SIDE_MASK (1 << LEFT_SIDE)
- #define UPPER_LEFT_MASK (1 << UPPER_LEFT)
- #define TOP_SIDE_MASK (1 << TOP_SIDE)
- #define UPPER_RIGHT_MASK (1 << UPPER_RIGHT)
- #define BOTTOM_SIDE_MASK (1 << BOTTOM_SIDE)
- #define LOWER_RIGHT_MASK (1 << LOWER_RIGHT)
- #define RIGHT_SIDE_MASK (1 << RIGHT_SIDE)
- #define ALL_CORNERS 0xffffffff
-
- /* arrows */
-
- #define ARROW_AT_START 1
- #define ARROW_AT_END 2
- #define ARROW_AT_BOTH 3
-
- /* Fills - These must match up with the order in the PopUpList in the Inspector Panel */
-
- #define FILL_NONE 0
- #define FILL_EO 1
- #define FILL_NZWR 2
-
- extern id CrossCursor;
-
- @interface Graphic : Object
- {
- NXRect bounds; /* the bounds */
- float linewidth; /* linewidth */
- struct _gFlags {
- #ifdef __BIG_ENDIAN__
- unsigned int selected:1; /* whether selected */
- unsigned int active:1; /* whether to really draw in draw: */
- unsigned int eofill:1; /* whether eofilled */
- unsigned int fillColorSet:1; /* whether to put frame around fill */
- unsigned int downhill:1; /* Line: direction line goes */
- unsigned int initialized:1; /* subclass specific */
- unsigned int linewidthSet:1; /* used when archiving only */
- unsigned int lineColorSet:1; /* used when archiving only */
- unsigned int linejoin:2; /* line join */
- unsigned int linecap:2; /* line cap */
- unsigned int fill:1; /* whether filled */
- unsigned int locked:1; /* locked down? */
- unsigned int arrow:2; /* arrow position */
- unsigned int nooutline:1; /* whether the graphic is outlined */
- unsigned int isFormEntry:1; /* whether the graphic is a form entry (TextGraphic only) */
- unsigned int localizeFormEntry:1; /* whether to localize a form entry (TextGraphic only) */
- unsigned int mightBeLinked:1; /* set if Graphic has ever had a link associated with it */
- unsigned int padding:12;
- #else
- unsigned int padding:12;
- unsigned int mightBeLinked:1; /* set if Graphic has ever had a link associated with it */
- unsigned int localizeFormEntry:1; /* whether to localize a form entry (TextGraphic only) */
- unsigned int isFormEntry:1; /* whether the graphic is a form entry (TextGraphic only) */
- unsigned int nooutline:1; /* whether the graphic is outlined */
- unsigned int arrow:2; /* arrow position */
- unsigned int locked:1; /* locked down? */
- unsigned int fill:1; /* whether filled */
- unsigned int linecap:2; /* line cap */
- unsigned int linejoin:2; /* line join */
- unsigned int lineColorSet:1; /* used when archiving only */
- unsigned int linewidthSet:1; /* used when archiving only */
- unsigned int initialized:1; /* subclass specific */
- unsigned int downhill:1; /* Line: direction line goes */
- unsigned int fillColorSet:1; /* whether to put frame around fill */
- unsigned int eofill:1; /* whether eofilled */
- unsigned int active:1; /* whether to really draw in draw: */
- unsigned int selected:1; /* whether selected */
- #endif
- } gFlags;
- NXColor *lineColor;
- NXColor *fillColor;
- int identifier; /* unique identifier */
- }
-
- /* Factory methods */
-
- + showFastKnobFills;
- + initialize;
- + (BOOL)isEditable;
- + cursor;
-
- + (int)currentGraphicIdentifier;
- + updateCurrentGraphicIdentifier:(int)newMaxIdentifier;
-
- /* Initialization method */
-
- - init;
-
- /* Called when a GraphicView is unarchived */
-
- - awake;
-
- /* Private methods (for subclassers only) */
-
- - setGraphicsState;
- - setLineColor;
- - setFillColor;
- - (int)cornerMask;
-
- /* Data link methods */
-
- - setLink:(NXDataLink *)aLink;
- - (NXDataLink *)link;
- - (Graphic *)graphicLinkedBy:(NXDataLink *)aLink;
- - reviveLink:(NXDataLinkManager *)linkManager;
- - (NXSelection *)selection;
- - (BOOL)mightBeLinked;
- - readLinkFromPasteboard:(Pasteboard *)pboard usingManager:(NXDataLinkManager *)linkManager useNewIdentifier:(BOOL)useNewIdentifier;
-
- /* Notification from GraphicView */
-
- - wasRemovedFrom:(GraphicView *)sender;
- - wasAddedTo:(GraphicView *)sender;
-
- /* Methods for uniquely identifying a Graphic. */
-
- - resetIdentifier;
- - (int)identifier;
- - writeIdentifierTo:(char *)buffer;
- - (Graphic *)graphicIdentifiedBy:(int)anIdentifier;
-
- /* Event handling */
-
- - (BOOL)handleEvent:(NXEvent *)event at:(const NXPoint *)p inView:(View *)view;
-
- /* Number of Graphics this Graphic represents (1 for non-Group). */
-
- - (int)graphicCount;
-
- /* Public routines (called mostly by a GraphicView or subclassers). */
-
- - (const char *)title;
- - (BOOL)isSelected;
- - (BOOL)isActive;
- - (BOOL)isLocked;
- - select;
- - deselect;
- - activate;
- - deactivate;
- - lock;
- - unlock;
-
- - (BOOL)isFormEntry;
- - setFormEntry:(int)flag;
- - (BOOL)hasFormEntries;
- - (BOOL)writeFormEntryToStream:(NXStream *)stream;
-
- - setCacheable:(BOOL)flag;
- - (BOOL)isCacheable;
-
- - getBounds:(NXRect *)theRect;
- - setBounds:(const NXRect *)aRect;
- - (NXRect *)getExtendedBounds:(NXRect *)theRect;
-
- - (int)knobHit:(const NXPoint *)point;
-
- - draw:(const NXRect *)rect;
-
- - (BOOL)canEmitEPS;
- - (BOOL)canEmitTIFF;
-
- - moveLeftEdgeTo:(const NXCoord *)x;
- - moveRightEdgeTo:(const NXCoord *)x;
- - moveTopEdgeTo:(const NXCoord *)y;
- - moveBottomEdgeTo:(const NXCoord *)y;
- - moveHorizontalCenterTo:(const NXCoord *)x;
- - moveVerticalCenterTo:(const NXCoord *)y;
- - moveBaselineTo:(const NXCoord *)y;
- - (NXCoord)baseline;
-
- - moveBy:(const NXPoint *)offset;
- - moveTo:(const NXPoint *)p;
- - centerAt:(const NXPoint *)center;
- - sizeTo:(const NXSize *)size;
- - sizeToNaturalAspectRatio;
- - alignToGrid:(GraphicView *)graphicView;
- - sizeToGrid:(GraphicView *)graphicView;
-
- /* Compatibility methods */
-
- - replaceWithImage;
-
- /* Public routines (called mostly by inspectors and the like). */
-
- - setLineWidth:(const float *)value;
- - (float)lineWidth;
- - setLineColor:(const NXColor *)color;
- - (Graphic *)colorAcceptorAt:(const NXPoint *)point;
- - (NXColor)lineColor;
- - setFillColor:(const NXColor *)color;
- - (NXColor)fillColor;
- - changeFont:sender;
- - (Font *)font;
- - setGray:(const float *)value;
- - (float)gray;
- - setFill:(int)mode;
- - (int)fill;
- - setOutlined:(BOOL)outlinedFlag;
- - (BOOL)isOutlined;
- - setLineCap:(int)capValue;
- - (int)lineCap;
- - setLineArrow:(int)arrowValue;
- - (int)lineArrow;
- - setLineJoin:(int)joinValue;
- - (int)lineJoin;
-
- /* Archiving (must be overridden by subclasses with instance variables) */
-
- - write:(NXTypedStream *)stream;
- - read:(NXTypedStream *)stream;
-
- /* Routines intended to be subclassed for different types of Graphics. */
-
- /*
- * Can be overridden to provide more sophisticated size constraining
- * than an aspect ratio (though that is almost always sufficient).
- * For example, Line overrides this to constrain to closes 15 degree angle.
- * constrainByDefault says whether constraining is the default or not for
- * the receiving kind of Graphic.
- */
-
- - (BOOL)constrainByDefault;
- - constrainCorner:(int)corner toAspectRatio:(float)aspect;
-
- /*
- * Can be overridden to resize the Graphic differently than the
- * default (which is to drag out the bounds), or to do something
- * before and/or after the subclass is resized. This is called
- * during the default creation method as well (create:in:).
- */
-
- - resize:(NXEvent *)event by:(int)corner in:(GraphicView *)view;
-
- /*
- * Possible override candidate for different types of Graphics.
- * Should return YES if the Graphic got created okay.
- * The most common need to override this method is if the creation
- * of the Graphic requires multiple mouseUps and mouseDowns (for
- * an arbitrary arc, for example).
- */
-
- - (BOOL)create:(NXEvent *)event in:(GraphicView *)view;
-
- /*
- * Override hit: if you want your subclass to only get selected when the
- * mouse goes down in certain parts of the bounds (not the whole bounds).
- * e.g. Lines only get selected if you click close to them.
- */
-
- - (BOOL)hit:(const NXPoint *)point;
-
- /*
- * Returns YES if this Graphic can't be seen through.
- * Default behaviour is to return YES if the Graphic isFilled.
- */
-
- - (BOOL)isOpaque;
-
- /*
- * Returns YES if the Graphic is properly formed (usually this just
- * refers to whether it is big enough to be a real graphic during creation).
- * This is called by create:in:. By default it returns YES if the Graphic
- * is at least 10.0 by 10.0 pixels in size.
- */
-
- - (BOOL)isValid;
-
- /*
- * This is the Graphic's natural aspect ratio. If it doesn't have a natural
- * aspect ratio, then this method should return zero (the default return).
- */
-
- - (float)naturalAspectRatio;
-
- /*
- * Called repeatedly as the user drags the mouse to create or resize
- * the Graphic. The default implementation does the right thing.
- * The specified corner should be moved to the specified point.
- */
-
- - (int)moveCorner:(int)corner to:(const NXPoint *)point constrain:(BOOL)flag;
-
- /*
- * This routine actually draws the graphic. It should be draw to fit the
- * bounds instance variable. Be sure to use all the parameters listed in
- * the instance variable list (e.g. linewidth, fillgray, etc.) that are
- * appropriate to this object. It is probably a good idea to do a newpath
- * and a closepath at the beginning and the end of draw.
- * If a sublcass just wants to draw a unit-sized version of itself
- * (i.e. it draws itself in a bounding box of {{0.0,0.0},{1.0,1.0}})
- * it can just override unitDraw (and not draw).
- */
-
- - unitDraw;
- - draw;
-
- /*
- * Should return YES iff the Graphic can be "edited." It is up to the
- * subclass of Graphic to determine what this means for it. Usually
- * it means that it has text and allows that text to be edited by the
- * user (e.g. TextGraphic). Default is to do nothing and return NO.
- */
-
- - (BOOL)edit:(NXEvent *)event in:(View *)view;
-
- @end
-