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

type DrawTransform
  field Link:DrawPrototype draw
  field Transform2 t

DrawPrototype maybe DrawTransform


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


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


method d setup proto options -> status
  oarg_rw DrawTransform d ; arg ImagePrototype proto ; arg Str options ; arg ExtendedStatus status
  status := d:draw setup proto options


method d image img t
  oarg_rw DrawTransform d ; oarg_rw ImagePrototype img ; arg Transform2 t
  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 Address color
  (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 mode ; arg Transform2 t ; arg Address color
  d:draw fill curves mode (compose t d:t) color


method d text txt font kerning length t color
  oarg_rw DrawTransform d ; arg Str32 txt ; arg Font font ; arg Address kerning ; arg Float length ; arg Transform2 t ; arg Address color
  d:draw text txt font kerning length (compose t d:t) color


method d clip_open x0 y0 x1 y1 -> dc
  oarg_rw DrawTransform d ; arg Float x0 y0 x1 y1 ; arg Link:DrawPrototype dc
  if x0=defined
    apply x0 y0 x1 y1 d:t (var Float tx0) (var Float ty0) (var Float tx1) (var Float ty1)
  else
    tx0 := undefined ; ty0 := undefined ; tx1 := undefined ; ty1 := undefined
  var Link:DrawTransform dct :> new DrawTransform
  dct draw :> d:draw clip_open tx0 ty0 tx1 ty1
  dct t := d t
  dc :> dct

method d clip_close
  oarg_rw DrawTransform d
  d:draw clip_close


method d tag_open id
  oarg_rw DrawTransform d ; arg Str id
  d:draw tag_open id

method d tag_attribute attr value
  oarg_rw DrawTransform d ; arg Str attr value
  d:draw tag_attribute attr value

method d tag_close
  oarg_rw DrawTransform d
  d:draw tag_close


method d warning message
  oarg_rw DrawTransform d ; arg Str message
  d:draw warning message

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

export DrawTransform '. bind'