Patch title: Release 84 bulk changes
Abstract:
File: /pliant/graphic/color/adjust.pli
Key:
    Removed line
    Added line
   
module "/pliant/math/functions.pli"
module "spectrum.pli"
module "color.pli"
module "database.pli"



function color_do_adjust xyz options
  arg_rw ColorXYZ xyz ; arg Str options
module "/pliant/math/functions.pli"
module "spectrum.pli"
module "color.pli"
module "database.pli"



function color_do_adjust xyz options
  arg_rw ColorXYZ xyz ; arg Str options
  if options:len=0
    return
  var ColorXYZn xyzn := cast xyz ColorXYZn
  var Float dull := options option "dull" Float
  if dull=defined and dull<0
    var Float z := options option "dull_X" Float dull ; xyzn
    var Float z := options option "dull_Y" Float dull ; xyzn
    var Float z := options option "dull_Z" Float dull ; xyzn
  var ColorXYZn xyzn := cast xyz ColorXYZn
  var Float dull := options option "dull" Float
  if dull=defined and dull<0
    var Float z := options option "dull_X" Float dull ; xyzn
    var Float z := options option "dull_Y" Float dull ; xyzn
    var Float z := options option "dull_Z" Float dull ; xyzn
  xyzn X := exposure xyzn:X 0.25
  xyzn Y := exposure xyzn:Y 0.25
  xyzn Z := exposure xyzn:Z 0.25
  var Float exposure := options option "exposure" Float
  var Float exposure := options option "exposure" Float
  if exposure=defined
    xyzn X := exposure xyzn:X exposure
    xyzn Y := exposure xyzn:Y exposure
    xyzn Z := exposure xyzn:Z exposure
  var Float dark := options option "dark" Float
  var Float dark := options option "dark" Float
  if dark=defined
    var Float f := xyzn:X ^ (1+dark) ; if f=defined { xyzn X
    var Float f := xyzn:Y ^ (1+dark) ; if f=defined { xyzn Y
    var Float f := xyzn:Z ^ (1+dark) ; if f=defined { xyzn Z
  var Float light := options option "light" Float
  var Float light := options option "light" Float
  if light=defined
    var Float f := (1-xyzn:X) ^ (1+light) ; if f=defined { x
    var Float f := (1-xyzn:Y) ^ (1+light) ; if f=defined { x
    var Float f := (1-xyzn:Z) ^ (1+light) ; if f=defined { x
  var Float contrast := options option "contrast" Float
  var Float contrast := options option "contrast" Float
  if contrast=defined
    xyzn X := contrast xyzn:X contrast
    xyzn Y := contrast xyzn:Y contrast
    xyzn Z := contrast xyzn:Z contrast
  xyzn X := unexposure xyzn:X 0.25
  xyzn Y := unexposure xyzn:Y 0.25
  xyzn Z := unexposure xyzn:Z 0.25
  if exposure=defined or dark=defined or light=defined or contrast=defined
    xyzn X := exposure xyzn:X 0.25
    xyzn Y := exposure xyzn:Y 0.25
    xyzn Z := exposure xyzn:Z 0.25
    if exposure=defined
      xyzn X := exposure xyzn:X exposure
      xyzn Y := exposure xyzn:Y exposure
      xyzn Z := exposure xyzn:Z exposure
    if dark=defined
      var Float f := xyzn:X ^ (1+dark) ; if f=defined { xyzn X := f }
      var Float f := xyzn:Y ^ (1+dark) ; if f=defined { xyzn Y := f }
      var Float f := xyzn:Z ^ (1+dark) ; if f=defined { xyzn Z := f }
    if light=defined
      var Float f := (1-xyzn:X) ^ (1+light) ; if f=defined { xyzn X := 1-f }
      var Float f := (1-xyzn:Y) ^ (1+light) ; if f=defined { xyzn Y := 1-f }
      var Float f := (1-xyzn:Z) ^ (1+light) ; if f=defined { xyzn Z := 1-f }
    if contrast=defined
      var Float f := (xyzn:Y-0.5)*contrast
      xyzn X := exposure xyzn:X f
      xyzn Y := exposure xyzn:Y f
      xyzn Z := exposure xyzn:Z f
    xyzn X := unexposure xyzn:X 0.25
    xyzn Y := unexposure xyzn:Y 0.25
    xyzn Z := unexposure xyzn:Z 0.25
  if dull=defined and dull>0
    var Float z := options option "dull_X" Float dull ; xyzn
    var Float z := options option "dull_Y" Float dull ; xyzn
    var Float z := options option "dull_Z" Float dull ; xyzn
  if dull=defined and dull>0
    var Float z := options option "dull_X" Float dull ; xyzn
    var Float z := options option "dull_Y" Float dull ; xyzn
    var Float z := options option "dull_Z" Float dull ; xyzn
  var ColorSpectrum32 s := cast 1 ColorSpectrum32 ; var CBoo
  var ColorSpectrum32 so := cast 1 ColorSpectrum32
  var Float s_temperature := options option "source_temperat
  var Float temperature := options option "temperature" Floa
  var Float s_temperature := options option "source_temperat
  var Float temperature := options option "temperature" Floa
  if temperature<>s_temperature
    s *= (planckian_radiator temperature)/(planckian_radiato
  var Float s_orthogonal := options option "source_orthogona
  var Float orthogonal := options option "orthogonal" Float 
  var Float s_orthogonal := options option "source_orthogona
  var Float orthogonal := options option "orthogonal" Float 
  if orthogonal<>s_orthogonal
    so *= (planckian_radiator orthogonal)/(planckian_radiato
  for (var Int i) 0 3
    var Str color := shunt i=0 "cyan" i=1 "magenta" i=2 "yel
    var Float extra := options option "grey_"+color Float
    if extra=defined
      var Data:ColorChannel primary :> color_database:data:d
      s *= (primary:s100/primary:s0)^extra ; modified := tru
  if modified
  if temperature<>s_temperature or orthogonal<>s_orthogonal or (options search "grey_" -1)<>(-1)
    var ColorSpectrum32 s := cast 1 ColorSpectrum32
    var ColorSpectrum32 so := cast 1 ColorSpectrum32
    if temperature<>s_temperature
      s *= (planckian_radiator temperature)/(planckian_radiator s_temperature)
    if orthogonal<>s_orthogonal
      so *= (planckian_radiator orthogonal)/(planckian_radiator s_orthogonal)
    for (var Int i) 0 3
      var Str color := shunt i=0 "cyan" i=1 "magenta" i=2 "yellow" "black"
      var Float extra := options option "grey_"+color Float
      if extra=defined
        var Data:ColorChannel primary :> color_database:data:device:"default":channel:color
        s *= (primary:s100/primary:s0)^extra
    var ColorXYZn filter := cast filter_XYZ:s ColorXYZn
    var ColorXYZn filtero := cast filter_XYZ:so ColorXYZn
    xyzn X := exposure xyzn:X (filter:X/filter:Y-1)/2-(filte
    xyzn Z := exposure xyzn:Z (filter:Z/filter:Y-1)/2+(filte
  var Float saturation
  if ((options (options option_position "saturation" options
    var Float l := exposure xyzn:Y 0.25
    saturation := (1-l)*saturation0+l*saturation1
  else
    saturation := options option "saturation" Float
  if saturation=defined
    xyzn X := xyzn:X*(1+saturation)-saturation*xyzn:Y
    xyzn Z := xyzn:Z*(1+saturation)-saturation*xyzn:Y
  xyz := cast xyzn ColorXYZ


export color_adjust
    var ColorXYZn filter := cast filter_XYZ:s ColorXYZn
    var ColorXYZn filtero := cast filter_XYZ:so ColorXYZn
    xyzn X := exposure xyzn:X (filter:X/filter:Y-1)/2-(filte
    xyzn Z := exposure xyzn:Z (filter:Z/filter:Y-1)/2+(filte
  var Float saturation
  if ((options (options option_position "saturation" options
    var Float l := exposure xyzn:Y 0.25
    saturation := (1-l)*saturation0+l*saturation1
  else
    saturation := options option "saturation" Float
  if saturation=defined
    xyzn X := xyzn:X*(1+saturation)-saturation*xyzn:Y
    xyzn Z := xyzn:Z*(1+saturation)-saturation*xyzn:Y
  xyz := cast xyzn ColorXYZ


export color_adjust