Annotation of Examples/AppKit/Draw/Circle.m, revision 1.1.1.1

1.1       root        1: #import "draw.h"
                      2: 
                      3: /*
                      4:  * This line is just a stub to get genstrings to generate
                      5:  * a .strings file entry for the name of this type of Graphic.
                      6:  * The name is used in the Undo New <Whatever> menu item.
                      7:  *
                      8:  * NXLocalString("Circle", NULL, "Name of the tool that draws ovals, i.e., the %s of the New %s operation.")
                      9:  */
                     10: 
                     11: @implementation Circle : Graphic
                     12: 
                     13: + initialize
                     14: /*
                     15:  * This bumps the class version so that we can compatibly read
                     16:  * old Graphic objects out of an archive.
                     17:  */
                     18: {
                     19:     [Circle setVersion:1];
                     20:     return self;
                     21: }
                     22: 
                     23: - (Graphic *)colorAcceptorAt:(const NXPoint *)point
                     24: /*
                     25:  * An oval accepts a dropped color if the drop occurs
                     26:  * within the bounds of the circle itself.
                     27:  */
                     28: {
                     29:     if ([self hit:point]) return self;
                     30:     return nil;
                     31: }
                     32: 
                     33: - (float)naturalAspectRatio
                     34: /*
                     35:  * The natural aspect ratio of an oval is 1.0 (a circle).
                     36:  */
                     37: {
                     38:     return 1.0;
                     39: }
                     40: 
                     41: - draw
                     42: {
                     43:     if (bounds.size.width < 1.0 || bounds.size.height < 1.0) return self;
                     44: 
                     45:     if ([self fill]) {
                     46:        PSgsave();
                     47:        [self setFillColor];
                     48:        PSFilledOval(bounds.origin.x, bounds.origin.y, bounds.size.width, bounds.size.height);
                     49:        PSgrestore();
                     50:     }
                     51:     if (!gFlags.nooutline) {
                     52:        [self setLineColor];
                     53:        PSFramedOval(bounds.origin.x, bounds.origin.y, bounds.size.width, bounds.size.height);
                     54:     }
                     55: 
                     56:     return self;
                     57: }
                     58: 
                     59: - (BOOL)hit:(const NXPoint *)p
                     60: /*
                     61:  * Hit only if inside the interior of the oval.
                     62:  */
                     63: {
                     64:     NXCoord x, y;
                     65:     NXPoint center;
                     66:     double angle, radius, diameter;
                     67: 
                     68:     if ([super hit:p]) {
                     69:        center.x = bounds.origin.x + bounds.size.width / 2.0;
                     70:        center.y = bounds.origin.y + bounds.size.height / 2.0;
                     71:        diameter = MIN(bounds.size.width, bounds.size.height);
                     72:        x = fabs(center.x - p->x) / (bounds.size.width / diameter);
                     73:        y = fabs(center.y - p->y) / (bounds.size.height / diameter);
                     74:        angle = atan2(y, x);
                     75:        radius = diameter / 2.0;
                     76:        return(x < radius * cos(angle) && y < radius * sin(angle));
                     77:     } else {
                     78:        return NO;
                     79:     }
                     80: }
                     81: 
                     82: 
                     83: @end
                     84: 

unix.superglobalmegacorp.com

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