DEFINITION Rembrandt0; (* portable *)

(* Dieses Modul enthält div. Prozeduren für den Rembrandt-Editor und Farboperationen,
die auch in weiteren
 Modulen gebraucht werden können. Einige Prozeduren und Variablen sind aus dem
Backdrops-Modul übernommen
 worden, da dieses Modul nun auch auf Rembrandt basiert *)
 IMPORT
  Gadgets, Pictures, Objects;

 TYPE
  ColFrame = POINTER TO ColFrameDesc;
  ColFrameDesc = RECORD ( Gadgets.FrameDesc ) 
   col: INTEGER;
  END;

  Color = POINTER TO ColorDesc;
  ColorDesc = RECORD ( Gadgets.ObjDesc ) 
   col: INTEGER
  END;

 VAR 
  color: Color;       (* Aktuelle Farbe für Rembrandt-Editor *)
  noc, maxnoc: INTEGER;  (* Anzahl Farben für Backdrops / Maximale Anzahl
Farben auf Bildschirm verfügbar *)
  coltable: ARRAY  256 OF RECORD
   r, g, b: INTEGER END; (* Farbpalette für Backdrops *)

(* Zufallszahl *)
 PROCEDURE Uniform (): REAL;
 PROCEDURE InitSeed (seed: LONGINT);

(* Dither *)
 PROCEDURE Floyd (S, D: Pictures.Picture);

(* Verändert die Farben eines Pictures mit den gegebenen Parameter *)
 PROCEDURE Reduce (S, D: Pictures.Picture; ds, dv: REAL);

(* Colorgadgets für Farbanzeige im Rembrandt-Panel *)
 PROCEDURE HandleColor (obj: Objects.Object; VAR M: Objects.ObjMsg);
 PROCEDURE NewColorObj;
 PROCEDURE HandleColFrame (F: Objects.Object; VAR M: Objects.ObjMsg);
 PROCEDURE NewColFrame;

(* Verschiedene Operationen auf Picture mit Clipping falls negative Koordinaten
*)
 PROCEDURE CopyBlock (S, D: Pictures.Picture; x, y: INTEGER; w, h, dx, dy, mode: INTEGER);
 PROCEDURE ReplConst (P: Pictures.Picture; col, x, y, w, h: INTEGER);

(* Speicherblock für Picture allozieren oder Fehlermeldung ausgeben *)
 PROCEDURE AllocatePictureMem (VAR P: Pictures.Picture; w, h, d: INTEGER);

(* Best Match für gesuchten Farbwert in der aktuellen Farbpalette *)
 PROCEDURE NearestColor (r, g, b: LONGINT): INTEGER;

(* Farbpalette ändern *)
 PROCEDURE Darken;
 PROCEDURE Lighten;
 PROCEDURE SetColor;
 PROCEDURE ChangeColor;

(* Standardpalette wird neu geladen *)
 PROCEDURE ResetAll;

(* Einzelne Farbe auf Standardwert zurückgesetzt *)
 PROCEDURE ResetOne;

END Rembrandt0.