This is RotateView.m in view mode; [Download] [Up]
#import "RotateView.h" #import <math.h> #import <dpsclient/wraps.h> #import <appkit/NXImage.h> #import <appkit/Control.h> #import <appkit/TextField.h> #import "../common.h" #import "../ImageOpCtr.h" #import "imageOperation.h" @implementation RotateView /* Overload */ - initFrame:(const NXRect *)frameRect { float min; [super initFrame:frameRect]; min = frameRect->size.width; if (min > frameRect->size.height) min = frameRect->size.height; xc = frameRect->size.width / 2.0; yc = frameRect->size.height / 2.0; x0 = min * -0.35; x1 = min * 0.35; y0 = min * -0.25; y1 = min * 0.25; [self drawIt: nil]; return self; } /* Overload */ - drawSelf:(NXRect *)r :(int) count { int i; PSsetgray(NX_LTGRAY); PSrectfill(0.0, 0.0, bounds.size.width, bounds.size.height); PSsetgray(NX_WHITE); PSnewpath(); PSmoveto(xc + x[0], yc + y[0]); for (i = 1; i < 4; i++) PSlineto(xc + x[i], yc + y[i]); PSfill(); PSsetgray(NX_DKGRAY); PSnewpath(); PSmoveto(xc + x[0], yc + y[0]); PSlineto(xc + x[1], yc + y[1]); PSlineto(xc + (x[2] + x[3])/2.0, yc + (y[2] + y[3])/2.0); PSfill(); return self; } - drawIt: sender { int angle; if (sender == nil) /* initialize */ angle = 0; else angle = [angleSlider intValue]; [angleText setIntValue: angle]; if (angle == 0) { x[0] = x[3] = x0; x[1] = x[2] = x1; y[0] = y[1] = y0; y[2] = y[3] = y1; }else { double si = sin((double)angle * 3.14159265 / 180.0); double co = cos((double)angle * 3.14159265 / 180.0); double xw, xs, yw; x[0] = (xs = x0 * co) - (yw = y0 * si); x[1] = (xw = x1 * co) - yw; x[2] = xw - (yw = y1 * si); x[3] = xs - yw; y[0] = (xs = x0 * si) + (yw = y0 * co); y[1] = (xw = x1 * si) + yw; y[2] = xw + (yw = y1 * co); y[3] = xs + yw; } return [self display]; } - writenAngle: sender { int angle = [angleText intValue]; while (angle < 0) angle += 360; while (angle >= 360) angle -= 360; [angleSlider setIntValue:((angle > 180) ? (angle - 360) : angle)]; [self drawIt: self]; [imageOp rotateAngle: self]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.