This is JpegSavePanel.m in view mode; [Download] [Up]
#import "JpegSavePanel.h" #import <appkit/Application.h> #import <appkit/Control.h> #import <appkit/Button.h> #import <appkit/Matrix.h> #import <appkit/tiff.h> @implementation JpegSavePanel static BOOL prev = NO; #define SqDelta 0.001 static float sqroot(float x) // sqrt() ; low precision { float s, old; if (x <= SqDelta) return 0.0; s = (x > 1.0) ? x : 1.0; do { old = s; s = (x / s + s) / 2.0; } while (old - s > SqDelta); return old; } - initFactor:(float)factor { [self loadNib]; if (factor > 255.0) factor = 255.0; else if (factor < 0.0) factor = 0.0; [JPEGtext setIntValue: (int)factor]; [JPEGslider setFloatValue: sqroot(factor)]; return self; } - loadNib { if (accessoryView == nil) { [NXApp loadNibSection:"JpegAccessory.nib" owner:self]; [self setAccessoryView: [accessory contentView]]; } [progrSW setState: prev]; return self; } - (float)compressFactor { return (float)[JPEGtext intValue]; } - (BOOL)progressive { return (prev = [progrSW state]); } - takeFloatValueFrom: sender { /* 0 - 6 (0 - 36) step 1 * - 10 ( - 100) step 2 * - 16 ( - 255) step 5 */ int n; float r = [sender floatValue]; if (r <= 6.0) n = (int)(r * r); else if (r <= 10.0) n = (int)(r * r) & ~1; else { n = (int)(r * r) / 5 * 5; if (n > 255) n = 255; } [JPEGtext setIntValue: n]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.