Annotation of Examples/AppKit/Draw/Graphic.h, revision 1.1.1.1

1.1       root        1: @class GraphicView;
                      2: 
                      3: #define KNOB_DY_ONCE  0x1
                      4: #define KNOB_DY_TWICE 0x2
                      5: #define KNOB_DX_ONCE  0x4
                      6: #define KNOB_DX_TWICE 0x8
                      7: 
                      8: /* corners */
                      9: 
                     10: #define LOWER_LEFT     (0x10)
                     11: #define LEFT_SIDE      (KNOB_DY_ONCE)
                     12: #define UPPER_LEFT     (LEFT_SIDE|KNOB_DY_TWICE)
                     13: #define TOP_SIDE       (UPPER_LEFT|KNOB_DX_ONCE)
                     14: #define UPPER_RIGHT    (TOP_SIDE|KNOB_DX_TWICE)
                     15: #define BOTTOM_SIDE    (KNOB_DX_ONCE)
                     16: #define LOWER_RIGHT    (BOTTOM_SIDE|KNOB_DX_TWICE)
                     17: #define RIGHT_SIDE     (LOWER_RIGHT|KNOB_DY_ONCE)
                     18: 
                     19: /* special corner which means upper right, but also note that we're creating */
                     20: 
                     21: #define CREATE         (0x20)
                     22: 
                     23: /* corner mask values */
                     24: 
                     25: #define LOWER_LEFT_MASK                (1 << LOWER_LEFT)
                     26: #define LEFT_SIDE_MASK         (1 << LEFT_SIDE)
                     27: #define UPPER_LEFT_MASK                (1 << UPPER_LEFT)
                     28: #define TOP_SIDE_MASK          (1 << TOP_SIDE)
                     29: #define UPPER_RIGHT_MASK       (1 << UPPER_RIGHT)
                     30: #define BOTTOM_SIDE_MASK       (1 << BOTTOM_SIDE)
                     31: #define LOWER_RIGHT_MASK       (1 << LOWER_RIGHT)
                     32: #define RIGHT_SIDE_MASK                (1 << RIGHT_SIDE)
                     33: #define ALL_CORNERS            0xffffffff
                     34: 
                     35: /* arrows */
                     36: 
                     37: #define ARROW_AT_START 1
                     38: #define ARROW_AT_END   2
                     39: #define ARROW_AT_BOTH  3
                     40: 
                     41: /* Fills - These must match up with the order in the PopUpList in the Inspector Panel */
                     42: 
                     43: #define FILL_NONE      0
                     44: #define FILL_EO                1
                     45: #define FILL_NZWR      2
                     46: 
                     47: extern id CrossCursor;
                     48: 
                     49: @interface Graphic : Object
                     50: {
                     51:     NXRect bounds;                     /* the bounds */
                     52:     float linewidth;                   /* linewidth */
                     53:     struct _gFlags {
                     54: #ifdef __BIG_ENDIAN__
                     55:        unsigned int selected:1;        /* whether selected */
                     56:        unsigned int active:1;          /* whether to really draw in draw: */
                     57:        unsigned int eofill:1;          /* whether eofilled */
                     58:        unsigned int fillColorSet:1;    /* whether to put frame around fill */
                     59:        unsigned int downhill:1;        /* Line: direction line goes */
                     60:        unsigned int initialized:1;     /* subclass specific */
                     61:        unsigned int linewidthSet:1;    /* used when archiving only */
                     62:        unsigned int lineColorSet:1;    /* used when archiving only */
                     63:        unsigned int linejoin:2;        /* line join */
                     64:        unsigned int linecap:2;         /* line cap */
                     65:        unsigned int fill:1;            /* whether filled */
                     66:        unsigned int locked:1;          /* locked down? */
                     67:        unsigned int arrow:2;           /* arrow position */
                     68:        unsigned int nooutline:1;       /* whether the graphic is outlined */
                     69:        unsigned int isFormEntry:1;     /* whether the graphic is a form entry (TextGraphic only) */
                     70:        unsigned int localizeFormEntry:1; /* whether to localize a form entry (TextGraphic only) */
                     71:        unsigned int mightBeLinked:1;   /* set if Graphic has ever had a link associated with it */
                     72:        unsigned int padding:12;
                     73: #else
                     74:        unsigned int padding:12;
                     75:        unsigned int mightBeLinked:1;   /* set if Graphic has ever had a link associated with it */
                     76:        unsigned int localizeFormEntry:1; /* whether to localize a form entry (TextGraphic only) */
                     77:        unsigned int isFormEntry:1;     /* whether the graphic is a form entry (TextGraphic only) */
                     78:        unsigned int nooutline:1;       /* whether the graphic is outlined */
                     79:        unsigned int arrow:2;           /* arrow position */
                     80:        unsigned int locked:1;          /* locked down? */
                     81:        unsigned int fill:1;            /* whether filled */
                     82:        unsigned int linecap:2;         /* line cap */
                     83:        unsigned int linejoin:2;        /* line join */
                     84:        unsigned int lineColorSet:1;    /* used when archiving only */
                     85:        unsigned int linewidthSet:1;    /* used when archiving only */
                     86:        unsigned int initialized:1;     /* subclass specific */
                     87:        unsigned int downhill:1;        /* Line: direction line goes */
                     88:        unsigned int fillColorSet:1;    /* whether to put frame around fill */
                     89:        unsigned int eofill:1;          /* whether eofilled */
                     90:        unsigned int active:1;          /* whether to really draw in draw: */
                     91:        unsigned int selected:1;        /* whether selected */
                     92: #endif
                     93:     } gFlags;
                     94:     NXColor *lineColor;
                     95:     NXColor *fillColor;
                     96:     int identifier;                    /* unique identifier */
                     97: }
                     98: 
                     99: /* Factory methods */
                    100: 
                    101: + showFastKnobFills;
                    102: + initialize;
                    103: + (BOOL)isEditable;
                    104: + cursor;
                    105: 
                    106: + (int)currentGraphicIdentifier;
                    107: + updateCurrentGraphicIdentifier:(int)newMaxIdentifier;
                    108: 
                    109: /* Initialization method */
                    110: 
                    111: - init;
                    112: 
                    113: /* Called when a GraphicView is unarchived */
                    114: 
                    115: - awake;
                    116: 
                    117: /* Private methods (for subclassers only) */
                    118: 
                    119: - setGraphicsState;
                    120: - setLineColor;
                    121: - setFillColor;
                    122: - (int)cornerMask;
                    123: 
                    124: /* Data link methods */
                    125: 
                    126: - setLink:(NXDataLink *)aLink;
                    127: - (NXDataLink *)link;
                    128: - (Graphic *)graphicLinkedBy:(NXDataLink *)aLink;
                    129: - reviveLink:(NXDataLinkManager *)linkManager;
                    130: - (NXSelection *)selection;
                    131: - (BOOL)mightBeLinked;
                    132: - readLinkFromPasteboard:(Pasteboard *)pboard usingManager:(NXDataLinkManager *)linkManager useNewIdentifier:(BOOL)useNewIdentifier;
                    133: 
                    134: /* Notification from GraphicView */
                    135: 
                    136: - wasRemovedFrom:(GraphicView *)sender;
                    137: - wasAddedTo:(GraphicView *)sender;
                    138: 
                    139: /* Methods for uniquely identifying a Graphic. */
                    140: 
                    141: - resetIdentifier;
                    142: - (int)identifier;
                    143: - writeIdentifierTo:(char *)buffer;
                    144: - (Graphic *)graphicIdentifiedBy:(int)anIdentifier;
                    145: 
                    146: /* Event handling */
                    147: 
                    148: - (BOOL)handleEvent:(NXEvent *)event at:(const NXPoint *)p inView:(View *)view;
                    149: 
                    150: /* Number of Graphics this Graphic represents (1 for non-Group). */
                    151: 
                    152: - (int)graphicCount;
                    153: 
                    154: /* Public routines (called mostly by a GraphicView or subclassers). */
                    155: 
                    156: - (const char *)title;
                    157: - (BOOL)isSelected;
                    158: - (BOOL)isActive;
                    159: - (BOOL)isLocked;
                    160: - select;
                    161: - deselect;
                    162: - activate;
                    163: - deactivate;
                    164: - lock;
                    165: - unlock;
                    166: 
                    167: - (BOOL)isFormEntry;
                    168: - setFormEntry:(int)flag;
                    169: - (BOOL)hasFormEntries;
                    170: - (BOOL)writeFormEntryToStream:(NXStream *)stream;
                    171: 
                    172: - setCacheable:(BOOL)flag;
                    173: - (BOOL)isCacheable;
                    174: 
                    175: - getBounds:(NXRect *)theRect;
                    176: - setBounds:(const NXRect *)aRect;
                    177: - (NXRect *)getExtendedBounds:(NXRect *)theRect;
                    178: 
                    179: - (int)knobHit:(const NXPoint *)point;
                    180: 
                    181: - draw:(const NXRect *)rect;
                    182: 
                    183: - (BOOL)canEmitEPS;
                    184: - (BOOL)canEmitTIFF;
                    185: 
                    186: - moveLeftEdgeTo:(const NXCoord *)x;
                    187: - moveRightEdgeTo:(const NXCoord *)x;
                    188: - moveTopEdgeTo:(const NXCoord *)y;
                    189: - moveBottomEdgeTo:(const NXCoord *)y;
                    190: - moveHorizontalCenterTo:(const NXCoord *)x;
                    191: - moveVerticalCenterTo:(const NXCoord *)y;
                    192: - moveBaselineTo:(const NXCoord *)y;
                    193: - (NXCoord)baseline;
                    194: 
                    195: - moveBy:(const NXPoint *)offset;
                    196: - moveTo:(const NXPoint *)p;
                    197: - centerAt:(const NXPoint *)center;
                    198: - sizeTo:(const NXSize *)size;
                    199: - sizeToNaturalAspectRatio;
                    200: - alignToGrid:(GraphicView *)graphicView;
                    201: - sizeToGrid:(GraphicView *)graphicView;
                    202: 
                    203: /* Compatibility methods */
                    204: 
                    205: - replaceWithImage;
                    206: 
                    207: /* Public routines (called mostly by inspectors and the like). */
                    208: 
                    209: - setLineWidth:(const float *)value;
                    210: - (float)lineWidth;
                    211: - setLineColor:(const NXColor *)color;
                    212: - (Graphic *)colorAcceptorAt:(const NXPoint *)point;
                    213: - (NXColor)lineColor;
                    214: - setFillColor:(const NXColor *)color;
                    215: - (NXColor)fillColor;
                    216: - changeFont:sender;
                    217: - (Font *)font;
                    218: - setGray:(const float *)value;
                    219: - (float)gray;
                    220: - setFill:(int)mode;
                    221: - (int)fill;
                    222: - setOutlined:(BOOL)outlinedFlag;
                    223: - (BOOL)isOutlined;
                    224: - setLineCap:(int)capValue;
                    225: - (int)lineCap;
                    226: - setLineArrow:(int)arrowValue;
                    227: - (int)lineArrow;
                    228: - setLineJoin:(int)joinValue;
                    229: - (int)lineJoin;
                    230: 
                    231: /* Archiving (must be overridden by subclasses with instance variables) */
                    232: 
                    233: - write:(NXTypedStream *)stream;
                    234: - read:(NXTypedStream *)stream;
                    235: 
                    236: /* Routines intended to be subclassed for different types of Graphics. */
                    237: 
                    238: /*
                    239:  * Can be overridden to provide more sophisticated size constraining
                    240:  * than an aspect ratio (though that is almost always sufficient).
                    241:  * For example, Line overrides this to constrain to closes 15 degree angle.
                    242:  * constrainByDefault says whether constraining is the default or not for
                    243:  * the receiving kind of Graphic.
                    244:  */
                    245: 
                    246: - (BOOL)constrainByDefault;
                    247: - constrainCorner:(int)corner toAspectRatio:(float)aspect;
                    248: 
                    249: /*
                    250:  * Can be overridden to resize the Graphic differently than the
                    251:  * default (which is to drag out the bounds), or to do something
                    252:  * before and/or after the subclass is resized.  This is called
                    253:  * during the default creation method as well (create:in:).
                    254:  */
                    255: 
                    256: - resize:(NXEvent *)event by:(int)corner in:(GraphicView *)view;
                    257: 
                    258: /*
                    259:  * Possible override candidate for different types of Graphics.
                    260:  * Should return YES if the Graphic got created okay.
                    261:  * The most common need to override this method is if the creation
                    262:  * of the Graphic requires multiple mouseUps and mouseDowns (for
                    263:  * an arbitrary arc, for example).
                    264:  */
                    265: 
                    266: - (BOOL)create:(NXEvent *)event in:(GraphicView *)view;
                    267: 
                    268: /*
                    269:  * Override hit: if you want your subclass to only get selected when the
                    270:  * mouse goes down in certain parts of the bounds (not the whole bounds).
                    271:  * e.g. Lines only get selected if you click close to them.
                    272:  */
                    273: 
                    274: - (BOOL)hit:(const NXPoint *)point;
                    275: 
                    276: /*
                    277:  * Returns YES if this Graphic can't be seen through.
                    278:  * Default behaviour is to return YES if the Graphic isFilled.
                    279:  */
                    280: 
                    281: - (BOOL)isOpaque;
                    282: 
                    283: /*
                    284:  * Returns YES if the Graphic is properly formed (usually this just
                    285:  * refers to whether it is big enough to be a real graphic during creation).
                    286:  * This is called by create:in:.  By default it returns YES if the Graphic
                    287:  * is at least 10.0 by 10.0 pixels in size.
                    288:  */
                    289: 
                    290: - (BOOL)isValid;
                    291: 
                    292: /*
                    293:  * This is the Graphic's natural aspect ratio.  If it doesn't have a natural
                    294:  * aspect ratio, then this method should return zero (the default return).
                    295:  */
                    296: 
                    297: - (float)naturalAspectRatio;
                    298: 
                    299: /*
                    300:  * Called repeatedly as the user drags the mouse to create or resize
                    301:  * the Graphic.  The default implementation does the right thing.
                    302:  * The specified corner should be moved to the specified point.
                    303:  */
                    304: 
                    305: - (int)moveCorner:(int)corner to:(const NXPoint *)point constrain:(BOOL)flag;
                    306: 
                    307: /*
                    308:  * This routine actually draws the graphic.  It should be draw to fit the
                    309:  * bounds instance variable.  Be sure to use all the parameters listed in
                    310:  * the instance variable list (e.g. linewidth, fillgray, etc.) that are
                    311:  * appropriate to this object.  It is probably a good idea to do a newpath
                    312:  * and a closepath at the beginning and the end of draw.
                    313:  * If a sublcass just wants to draw a unit-sized version of itself
                    314:  * (i.e. it draws itself in a bounding box of {{0.0,0.0},{1.0,1.0}})
                    315:  * it can just override unitDraw (and not draw).
                    316:  */
                    317: 
                    318: - unitDraw;
                    319: - draw;
                    320: 
                    321: /*
                    322:  * Should return YES iff the Graphic can be "edited."  It is up to the
                    323:  * subclass of Graphic to determine what this means for it.  Usually
                    324:  * it means that it has text and allows that text to be edited by the
                    325:  * user (e.g. TextGraphic).  Default is to do nothing and return NO.
                    326:  */
                    327: 
                    328: - (BOOL)edit:(NXEvent *)event in:(View *)view;
                    329: 
                    330: @end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.