home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Graphics / Viewers / aa_m68k_Intel_Only / ToyViewer1.2 / Source / TiffSavePanel.m < prev    next >
Encoding:
Text File  |  1995-11-12  |  1.8 KB  |  95 lines

  1. #import  <appkit/Application.h>
  2. #import  <appkit/Control.h>
  3. #import  <appkit/Matrix.h>
  4. #import  <appkit/tiff.h>
  5. #import  "TiffSavePanel.h"
  6.  
  7. #define  Tag_None    0
  8. #define  Tag_LZW    1
  9. #define  Tag_JPEG    2
  10.  
  11. @implementation TiffSavePanel
  12.  
  13.  
  14. #define  SqDelta    0.001
  15.  
  16. static float sqroot(float x) // sqrt() ; low precision
  17. {
  18.     float s, old;
  19.  
  20.     if (x <= SqDelta)
  21.         return 0.0;
  22.     s = (x > 1.0) ? x : 1.0;
  23.     do {
  24.         old = s;
  25.         s = (x / s + s) / 2.0;
  26.     } while (old - s > SqDelta);
  27.     return old;
  28. }
  29.  
  30.  
  31. - init:(float)factor jpeg: (BOOL)flag
  32. {
  33.     if (accessoryView == nil) {
  34.         [NXApp loadNibSection:"TiffAccessory.nib" owner:self];
  35.         [self setAccessoryView: [accessory contentView]];
  36.     }
  37.     if (factor > 255.0) factor = 255.0;
  38.     else if (factor < 0.0) factor = 0.0;
  39.     [JPEGtext setIntValue: (int)factor];
  40.     [JPEGslider setFloatValue: sqroot(factor)];
  41.     JPEGselectable = flag;
  42.     [[compButton findCellWithTag: Tag_JPEG] setEnabled: JPEGselectable];
  43.     [JPEGslider setEnabled: NO];
  44.     return self;
  45. }
  46.  
  47. - compressType:(int *)type with:(float *)factor
  48. {
  49.     *type = NX_TIFF_COMPRESSION_NONE;
  50.  
  51.     *factor = 0.0;
  52.     switch ([compButton selectedTag]) {
  53.     case Tag_None:
  54.         *type = NX_TIFF_COMPRESSION_NONE;
  55.         break;
  56.     case Tag_LZW:
  57.         *type = NX_TIFF_COMPRESSION_LZW;
  58.         break;
  59.     case Tag_JPEG:
  60.         *type = NX_TIFF_COMPRESSION_JPEG;
  61.         *factor = (float)[JPEGtext intValue];
  62.         break;
  63.     }
  64.     return self;
  65. }
  66.  
  67. - takeFloatValueFrom: sender
  68. {
  69.     /* 0 -  6 (0 -  36)   step 1
  70.      *   - 10 (  - 100)   step 2
  71.      *   - 16 (  - 255)   step 5
  72.      */
  73.     int n;
  74.     float r = [sender floatValue];
  75.     if (r <= 6.0) n = (int)(r * r);
  76.     else if (r <= 10.0) n = (int)(r * r) & ~1;
  77.     else {
  78.         n = (int)(r * r) / 5 * 5;
  79.         if (n > 255) n = 255;
  80.     }
  81.     [JPEGtext setIntValue: n];
  82.     return self;
  83. }
  84.  
  85. - buttonChanged: sender
  86. {
  87.     if (JPEGselectable) {
  88.         BOOL flag = ([compButton selectedTag] == Tag_JPEG);
  89.         [JPEGslider setEnabled: flag];
  90.     }
  91.     return self;
  92. }
  93.  
  94. @end
  95.