Patch title: Release 92 bulk changes
Abstract:
File: /graphic/draw/transform.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/compiler.pli"
module "prototype.pli"
module "/pliant/language/compiler.pli"
module "prototype.pli"
module "misc.pli"



type DrawTransform
  field Link:DrawPrototype draw
  field Transform2 t


type DrawTransform
  field Link:DrawPrototype draw
  field Transform2 t


function apply x0 y0 x1 y1 t tx0 ty0 tx1 ty1
  arg Float x0 y0 x1 y1 ; arg Transform2 t ; arg_w Float tx0
  var Point2 p := t (point x0 y0) ; tx0 := p x ; ty0 := p y 
  var Point2 p := t (point x1 y0) ; tx0 := min tx0 p:x ; ty0
  var Point2 p := t (point x1 y1) ; tx0 := min tx0 p:x ; ty0
  var Point2 p := t (point x0 y1) ; tx0 := min tx0 p:x ; ty0


method d bind draw t
  oarg_rw DrawTransform d ; oarg_rw DrawPrototype draw ; arg
  d draw :> draw
  d t := t


method d setup proto options -> status
  oarg_rw DrawTransform d ; arg ImagePrototype proto ; arg S
method d bind draw t
  oarg_rw DrawTransform d ; oarg_rw DrawPrototype draw ; arg
  d draw :> draw
  d t := t


method d setup proto options -> status
  oarg_rw DrawTransform d ; arg ImagePrototype proto ; arg S
  status := d:draw setup proto options
  var ImagePrototype proto2 := proto
  apply proto:x0 proto:y0 proto:x1 proto:y1 d:t proto2:x0 proto2:y0 proto2:x1 proto2:y1
  status := d:draw setup proto2 options




method d bind draw options -> status
  oarg_rw DrawTransform d ; oarg_rw DrawPrototype draw ; arg Str options ; arg ExtendedStatus status
  d draw :> draw
  if (options option "translate") or (options option "scale") or (options option "rotate")
    if not ((options (options option_position "translate" 0) options:len) parse word:"translate" (var Float tx) (var Float ty) any)
      tx := options option "translate" Float 0
      ty := tx
    if not ((options (options option_position "scale" 0) options:len) parse word:"scale" (var Float sx) (var Float sy) any)
      sx := options option "scale" Float 1
      sy := sx
    if not ((options (options option_position "rotate" 0) options:len) parse word:"rotate" (var Float rx) (var Float ry) any)
      rx := options option "rotate" Float 0
      ry := rx
    d t := transform tx ty sx sy rx ry
  else
    d:t xx := options option "xx" Float 1
    d:t xy := options option "xy" Float 0
    d:t xt := options option "xt" Float 0
    d:t yx := options option "yx" Float 0
    d:t yy := options option "yy" Float 1
    d:t yt := options option "yt" Float 0
    d:t compute


method d image_prototype options -> proto
  oarg DrawTransform d ; arg Str options ; arg ImagePrototype proto
  proto := d:draw image_prototype options
  if proto:x0=defined
    var Transform2 r := reverse d:t
    var Float x0 := proto x0
    var Float y0 := proto y0
    var Float x1 := proto x1
    var Float y1 := proto y1
    apply x0 y0 x1 y1 r proto:x0 proto:y0 proto:x1 proto:y1
  

method d image img t
  oarg_rw DrawTransform d ; oarg_rw ImagePrototype img ; arg
  d:draw image img (compose t d:t)


method d rectangle x0 y0 x1 y1 color
  oarg_rw DrawTransform d ; arg Float x0 y0 x1 y1 ; arg Addr
method d image img t
  oarg_rw DrawTransform d ; oarg_rw ImagePrototype img ; arg
  d:draw image img (compose t d:t)


method d rectangle x0 y0 x1 y1 color
  oarg_rw DrawTransform d ; arg Float x0 y0 x1 y1 ; arg Addr
  (var Array:Curve curves) size := 1
  var Pointer:Curve c :> curves 0
  c angle x0 y0
  c angle x1 y0
  c angle x1 y1
  c angle x0 y1
  c compute outline
  d:draw fill curves fill_evenodd d:t color
  if d:t:level<=transform_translate
    var Point2 p0 := d:t (point x0 y0)
    var Point2 p1 := d:t (point x1 y1)
    d:draw rectangle p0:x p0:y p1:x p1:y color
  else
    (var Array:Curve curves) size := 1
    var Pointer:Curve c :> curves 0
    c angle x0 y0
    c angle x1 y0
    c angle x1 y1
    c angle x0 y1
    c compute outline
    d:draw fill curves fill_evenodd d:t color

   
method d fill curves mode t color
  oarg_rw DrawTransform d ; arg Array:Curve curves ; arg Int
  d:draw fill curves mode (compose t d:t) color



   
method d fill curves mode t color
  oarg_rw DrawTransform d ; arg Array:Curve curves ; arg Int
  d:draw fill curves mode (compose t d:t) color



method d trouble_open -> dt
  oarg_rw DrawTransform d ; arg Link:DrawPrototype dt
  var Link:DrawTransform dtt :> new DrawTransform
  dtt draw :> d:draw trouble_open
  dtt t := d t
  dt :> dtt


method d trouble_close
  oarg_rw DrawTransform d
  d:draw trouble_close
method d transform -> tr
  arg DrawTransform d ; arg_C Transform2 tr
  tr :> d t


export DrawTransform '. bind'
export DrawTransform '. bind' '. transform'