home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Pascal / Games / Glypha II 1.21 / source / Code ƒ / PaletteUtils.p < prev   
Encoding:
Text File  |  1991-04-30  |  3.1 KB  |  152 lines  |  [TEXT/PJMM]

  1. unit PaletteUtils;
  2.  
  3. interface
  4.     uses
  5.         Palettes;
  6.  
  7.     function UnSignedMult (A, B: Integer): Integer;
  8.     function UnSignedDiv (A, den: Integer): Integer;
  9.     function UnSignedAdd (A, B: Integer): Integer;
  10.     function UnSignedSub (A, B: Integer): Integer;
  11.  
  12.     procedure SetRGB (var RGB: RGBColor; R, G, B: Integer);
  13.     procedure CopyRGB (RGBSrc: RGBColor; var RGBDest: RGBColor);
  14.  
  15.     procedure FadeEntryToBlack (theWindow: WindowPtr; whichEntry: Integer);
  16.     procedure FadeEntryToColor (theWindow: WindowPtr; whichEntry: Integer; whatColor: RGBColor);
  17.  
  18. implementation
  19.  
  20. {============================}
  21.  
  22.     function UnSignedMult;
  23.         var
  24.             num: LongInt;
  25.     begin
  26.         if (a < 0) then
  27.             num := A + 65536
  28.         else
  29.             num := A;
  30.         UnSignedMult := LoWord(num * B);
  31.     end;
  32.  
  33. {============================}
  34.  
  35.     function UnSignedDiv;
  36.         var
  37.             num: LongInt;
  38.     begin
  39.         if (a < 0) then
  40.             num := A + 65536
  41.         else
  42.             num := A;
  43.         UnSignedDiv := LoWord(num div den);
  44.     end;
  45.  
  46. {============================}
  47.  
  48.     function UnSignedAdd;
  49.         var
  50.             sum: LongInt;
  51.     begin
  52.         if (a < 0) then
  53.             sum := A + 65536 + B
  54.         else
  55.             sum := A + B;
  56.         UnSignedAdd := LoWord(sum);
  57.     end;
  58.  
  59. {============================}
  60.  
  61.     function UnSignedSub;
  62.         var
  63.             diff: LongInt;
  64.     begin
  65.         if (a < 0) then
  66.             diff := A + 65536 - B
  67.         else
  68.             diff := A - B;
  69.         UnSignedSub := Integer(LoWord(diff));
  70.     end;
  71.  
  72. {============================}
  73.  
  74.     procedure SetRGB;
  75.     begin
  76.         RGB.Red := R;
  77.         RGB.Green := G;
  78.         RGB.Blue := B;
  79.     end;
  80.  
  81. {============================}
  82.  
  83.     procedure CopyRGB;
  84.     begin
  85.         RGBDest.Red := RGBSrc.Red;
  86.         RGBDest.Green := RGBSrc.Green;
  87.         RGBDest.Blue := RGBSrc.Blue;
  88.     end;
  89.  
  90. {============================}
  91.  
  92.     procedure FadeEntryToBlack;
  93.         const
  94.             kFadeStep = 30;
  95.         var
  96.             step: Integer;
  97.             dummyLong: LongInt;
  98.             Buffer, Inc: RGBColor;
  99.     begin
  100.  
  101.         GetEntryColor(GetPalette(theWindow), whichEntry, Buffer);
  102.         Inc.red := UnsignedDiv(Buffer.red, kFadeStep);
  103.         Inc.green := UnsignedDiv(Buffer.green, kFadeStep);
  104.         Inc.blue := UnsignedDiv(Buffer.blue, kFadeStep);
  105.  
  106. {Fade to Black}
  107.         for step := kFadeStep - 1 downto 1 do
  108.             begin
  109.                 Buffer.red := UnsignedSub(Buffer.red, Inc.red);
  110.                 Buffer.green := UnsignedSub(Buffer.green, Inc.green);
  111.                 Buffer.blue := UnsignedSub(Buffer.blue, Inc.blue);
  112.                 AnimateEntry(theWindow, whichEntry, Buffer);
  113.             end;
  114.     end;
  115.  
  116. {============================}
  117.  
  118.     procedure FadeEntryToColor;
  119.         const
  120.             kFadeStep = 180;
  121.         var
  122.             step: Integer;
  123.             tempLong: LongInt;
  124.             Inc, Buffer: RGBColor;
  125.     begin
  126.         Inc.red := UnsignedDiv(whatColor.red, kFadeStep);
  127.         Inc.green := UnsignedDiv(whatColor.green, kFadeStep);
  128.         Inc.blue := UnsignedDiv(whatColor.blue, kFadeStep);
  129.  
  130.         Buffer := whatColor;
  131.         for step := 1 to kFadeStep do
  132.             begin
  133.                 Buffer.red := UnsignedSub(Buffer.red, Inc.red);
  134.                 Buffer.green := UnsignedSub(Buffer.green, Inc.green);
  135.                 Buffer.blue := UnsignedSub(Buffer.blue, Inc.blue);
  136.             end;
  137.  
  138.         AnimateEntry(theWindow, whichEntry, Buffer);
  139.  
  140. {Fade to Color}
  141.         for step := 1 to kFadeStep do
  142.             begin
  143.                 Buffer.red := UnsignedAdd(Buffer.red, Inc.red);
  144.                 Buffer.green := UnsignedAdd(Buffer.green, Inc.green);
  145.                 Buffer.blue := UnsignedAdd(Buffer.blue, Inc.blue);
  146.                 AnimateEntry(theWindow, whichEntry, Buffer);
  147.             end;
  148.     end;
  149.  
  150. {============================}
  151.  
  152. end.