home *** CD-ROM | disk | FTP | other *** search
/ Big Green CD 8 / BGCD_8_Dev.iso / NEXTSTEP / Graphics / ToyViewer-2.6a / src / ImageSave.bproj / JpegSavePanel.m < prev    next >
Encoding:
Text File  |  1996-09-16  |  1.3 KB  |  81 lines

  1. #import  "JpegSavePanel.h"
  2. #import  <appkit/Application.h>
  3. #import  <appkit/Control.h>
  4. #import  <appkit/Button.h>
  5. #import  <appkit/Matrix.h>
  6. #import  <appkit/tiff.h>
  7.  
  8.  
  9. @implementation JpegSavePanel
  10.  
  11. static BOOL prev = NO;
  12.  
  13. #define  SqDelta    0.001
  14.  
  15. static float sqroot(float x) // sqrt() ; low precision
  16. {
  17.     float s, old;
  18.  
  19.     if (x <= SqDelta)
  20.         return 0.0;
  21.     s = (x > 1.0) ? x : 1.0;
  22.     do {
  23.         old = s;
  24.         s = (x / s + s) / 2.0;
  25.     } while (old - s > SqDelta);
  26.     return old;
  27. }
  28.  
  29.  
  30. - initFactor:(float)factor
  31. {
  32.     [self loadNib];
  33.     if (factor > 255.0) factor = 255.0;
  34.     else if (factor < 0.0) factor = 0.0;
  35.     [JPEGtext setIntValue: (int)factor];
  36.     [JPEGslider setFloatValue: sqroot(factor)];
  37.     return self;
  38. }
  39.  
  40. - loadNib
  41. {
  42.     if (accessoryView == nil) {
  43.         [NXApp loadNibSection:"JpegAccessory.nib" owner:self];
  44.         [self setAccessoryView: [accessory contentView]];
  45.     }
  46.     [progrSW setState: prev];
  47.     return self;
  48. }
  49.  
  50.  
  51. - (float)compressFactor
  52. {
  53.     return (float)[JPEGtext intValue];
  54. }
  55.  
  56.  
  57. - (BOOL)progressive
  58. {
  59.     return (prev = [progrSW state]);
  60. }
  61.  
  62. - takeFloatValueFrom: sender
  63. {
  64.     /* 0 -  6 (0 -  36)   step 1
  65.      *   - 10 (  - 100)   step 2
  66.      *   - 16 (  - 255)   step 5
  67.      */
  68.     int n;
  69.     float r = [sender floatValue];
  70.     if (r <= 6.0) n = (int)(r * r);
  71.     else if (r <= 10.0) n = (int)(r * r) & ~1;
  72.     else {
  73.         n = (int)(r * r) / 5 * 5;
  74.         if (n > 255) n = 255;
  75.     }
  76.     [JPEGtext setIntValue: n];
  77.     return self;
  78. }
  79.  
  80. @end
  81.