Patch title: Release 85 bulk changes
Abstract:
File: /pliant/graphic/image/transparency.pli
Key:
    Removed line
    Added line
module "/pliant/language/compiler.pli"
module "prototype.pli"
module "/pliant/language/compiler/type/inherit.pli"
module "/pliant/graphic/color/gamut.pli"
module "/pliant/graphic/misc/mtbuffer.pli"


type ImageTransparency
  inherit ImagePrototype
  field Link:ImagePrototype image
  field MtBuffer buffers

ImagePrototype maybe ImageTransparency


method t bind image options -> status
  oarg_rw ImageTransparency t ; oarg ImagePrototype image ; arg Str options ; arg ExtendedStatus status
  if image:gamut:transparency<>image:gamut:dimension or image:gamut:pixel_size<>image:gamut:dimension+image:gamut:transparency
    return failure:"The underlying image must have per channel transparency"
  addressof:t map ImagePrototype := addressof:image map ImagePrototype
  t image :> image
  t:buffers size := image line_size
  status := success


method t write x y count adr
  oarg_rw ImageTransparency t ; arg Int x y count ; arg Address adr
  var Int dim := t:gamut dimension ; var Int psize := t pixel_size
  var Address buffer := t:buffers allocate
  t:image read x y count buffer
  var Address src := adr
  var Address dest := buffer
  for (var Int i) 0 count-1
    for (var Int j) 0 dim-1
      var Int transp := src map uInt8 dim+j
      if transp=0
        void
      eif transp=255
        dest map uInt8 j := src map uInt8 j
        dest map uInt8 dim+j := 255
      else
        error error_id_missing "Partial transparency is not implemented yet"
    src := src translate Byte psize
    dest := dest translate Byte psize
  t:image write x y count buffer
  t:buffers free buffer


method t fill x y count pixel
  oarg_rw ImageTransparency t ; arg Int x y count ; arg Address pixel
  var Address buffer := t:buffers allocate
  t:image read x y count buffer
  var Int psize := t:gamut pixel_size
  for (var Int i) 0 t:gamut:transparency-1
    var Int transp := pixel map uInt8 t:gamut:dimension+i    
    if transp=0
      void
    eif transp=255
      var Int color := pixel map uInt8 i
      var Address a := buffer translate uInt8 i
      for (var Int j) 1 count
        a map uInt8 := color
        a := a translate uInt8 psize
      var Address a := buffer translate uInt8 t:gamut:dimension+i
      for (var Int j) 1 count
        a map uInt8 := 255
        a := a translate uInt8 psize
    else
      error error_id_missing "Partial transparency is not implemented yet"
  t:image write x y count buffer
  t:buffers free buffer


export ImageTransparency '. bind'