with ada.Numerics.discrete_Random; package body openGL.Palette is package random_Colors is new ada.Numerics.discrete_Random (Color_Value); use random_Colors; the_Generator : random_Colors.Generator; function random_Color return Color is begin return +(random (the_Generator), random (the_Generator), random (the_Generator)); end random_Color; function Shade_of (Self : in Color; Level : in Shade_Level) return Color is begin return (self.Red * Primary (Level), self.Green * Primary (Level), self.Blue * Primary (Level)); end Shade_of; function Mixed (Self : in Color; Other : in Color; Mix : in mix_Factor := 0.5) return Color is function Interpolate (Value_1, Value_2 : in Primary) return Primary -- Linear interpolate. is begin return Value_1 + (Value_2 - Value_1) * Primary (Mix); end Interpolate; begin return (Interpolate (Self.Red, Other.Red), Interpolate (Self.Green, Other.Green), Interpolate (Self.Blue, Other.Blue)); end Mixed; function is_Similar (Self : in Color; To : in Color; Similarity : in Primary := default_Similarity) return Boolean is begin return self.Red <= to.Red + Similarity and then self.Red >= to.Red - Similarity and then self.Green >= to.Green + Similarity and then self.Green >= to.Green - Similarity and then self.Blue >= to.Blue + Similarity and then self.Blue >= to.Blue - Similarity; end is_Similar; begin reset (the_Generator); end openGL.Palette;