Patch title: Release 95 bulk changes
Abstract:
File: /pliant/graphic/browser/client/window.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/compiler.pli"
module "/pliant/language/stream.pli"
module "/pliant/graphic/layout/prototype.pli"
module "/pliant/graphic/layout/helper/position.pli"
module "/pliant/graphic/draw/image.pli"
module "/pliant/graphic/image/pixmap.pli"
module "/pliant/graphic/image/antialiasing.pli"
module "/pliant/graphic/console/prototype.pli"
module "context.pli"
module "connect.pli"
module "/pliant/graphic/layout/restyle.pli"
module "/pliant/language/compiler.pli"
module "/pliant/language/stream.pli"
module "/pliant/graphic/layout/prototype.pli"
module "/pliant/graphic/layout/helper/position.pli"
module "/pliant/graphic/draw/image.pli"
module "/pliant/graphic/image/pixmap.pli"
module "/pliant/graphic/image/antialiasing.pli"
module "/pliant/graphic/console/prototype.pli"
module "context.pli"
module "connect.pli"
module "/pliant/graphic/layout/restyle.pli"
module "/pliant/graphic/layout/sequence.pli"


method w focus_area x0 y0 x1 y1
  arg_rw BrowserWindow w ; arg Float x0 y0 x1 y1
  var Pointer:BrowserSession s :> w session


method w focus_area x0 y0 x1 y1
  arg_rw BrowserWindow w ; arg Float x0 y0 x1 y1
  var Pointer:BrowserSession s :> w session
  var Pointer:BrowserConsole c :> s console
  check w:x0<>undefined and addressof:w=(addressof s:focus_w
  var Int ix0 := cast x0/c:unit_x-0.5 Int
  var Int iy0 := cast y0/c:unit_y-0.5 Int
  var Int ix1 := cast x1/c:unit_x-0.5 Int
  var Int iy1 := cast y1/c:unit_y-0.5 Int
  var Int sx := w scroll_x
  var Int sy := w scroll_y
  sx := min sx ix1-(w:x1-w:x0)\12
  sy := min sy iy1-(w:y1-w:y0)\12
  sx := max sx ix0-(w:x1-w:x0)*11\12
  sy := max sy iy0-(w:y1-w:y0)*11\12
  s focus_scroll_x := sx
  s focus_scroll_y := sy
  s focus_scroll_stage := 1
  if s:focus_scroll_stage<>2
    var Pointer:BrowserConsole c :> s console
    check w:x0<>undefined and addressof:w=(addressof s:focus_window)
    var Int ix0 := cast x0/c:unit_x-0.5 Int
    var Int iy0 := cast y0/c:unit_y-0.5 Int
    var Int ix1 := cast x1/c:unit_x-0.5 Int
    var Int iy1 := cast y1/c:unit_y-0.5 Int
    var Int sx := w scroll_x
    var Int sy := w scroll_y
    sx := min sx ix1-(w:x1-w:x0)\12
    sy := min sy iy1-(w:y1-w:y0)\12
    sx := max sx ix0-(w:x1-w:x0)*11\12
    sy := max sy iy0-(w:y1-w:y0)*11\12
    s focus_scroll_x := sx
    s focus_scroll_y := sy
    s focus_scroll_stage := 1

method s focus_scroll
  arg_rw BrowserSession s
  if not (exists s:focus_target) or s:focus_scroll_stage=2
    return
  if s:focus_scroll_stage=0
    var Pointer:BrowserWindow w :> s focus_window
    var Pointer:BrowserConsole c :> s console
    var LayoutDC dc
    dc style :> restyle_enter c:default_style s:focus_target
    dc gamut :> c gamut
    dc window :> w
    var Link:ImagePixmap pm :> new ImagePixmap
    pm setup (image_prototype w:x0-2 w:y0-2 w:x0-1 w:y0-1 1 
    var Link:DrawImage d :> new DrawImage
    d bind pm ""

method s focus_scroll
  arg_rw BrowserSession s
  if not (exists s:focus_target) or s:focus_scroll_stage=2
    return
  if s:focus_scroll_stage=0
    var Pointer:BrowserWindow w :> s focus_window
    var Pointer:BrowserConsole c :> s console
    var LayoutDC dc
    dc style :> restyle_enter c:default_style s:focus_target
    dc gamut :> c gamut
    dc window :> w
    var Link:ImagePixmap pm :> new ImagePixmap
    pm setup (image_prototype w:x0-2 w:y0-2 w:x0-1 w:y0-1 1 
    var Link:DrawImage d :> new DrawImage
    d bind pm ""
    dc:bbox x0 := pm x0 ; dc:bbox y0 := pm y0 ; dc:bbox x1 :
    var Pointer:LayoutPrototype p :> s focus_target
    while exists:p and { var Pointer:Type t :> entry_type addressof:p ; t<>LayoutSection and t<>LayoutSequence }
      p :> p parent
    if exists:p
      dc bbox := (addressof:p map LayoutSection) bbox
    else
      dc:bbox x0 := w:bbox x0 ; dc:bbox y0 := w:bbox y0 ; dc:bbox x1 := w:bbox x1 ; dc:bbox y1 := w:bbox y1
    dc focus_scroll_study := true
    s:focus_target draw d dc
    restyle_leave c:default_style s:focus_target
  if s:focus_scroll_stage=1
    s:focus_window scroll s:focus_scroll_x s:focus_scroll_y
    s focus_scroll_stage := 2
    dc focus_scroll_study := true
    s:focus_target draw d dc
    restyle_leave c:default_style s:focus_target
  if s:focus_scroll_stage=1
    s:focus_window scroll s:focus_scroll_x s:focus_scroll_y
    s focus_scroll_stage := 2
  else
    console "failed to discover focus position" eol



method c lazy_display
  arg_rw BrowserConsole c



method c lazy_display
  arg_rw BrowserConsole c
  # console "display" eol
  if verify
    for (var Int i) 0 c:zorder:size-1
      var Pointer:BrowserSession s :> c:session c:zorder:i
      each w s:windows
        if (exists w:root)
          if (addressof w:root:parent)<>null
            error "bad root"
          w:root check_parent
        if (exists w:overlay)
          if (addressof w:overlay:parent)<>null
            error "bad overlay"
          w:overlay check_parent
  if verify
    for (var Int i) 0 c:zorder:size-1
      var Pointer:BrowserSession s :> c:session c:zorder:i
      each w s:windows
        if (exists w:root)
          if (addressof w:root:parent)<>null
            error "bad root"
          w:root check_parent
        if (exists w:overlay)
          if (addressof w:overlay:parent)<>null
            error "bad overlay"
          w:overlay check_parent
  if c:canceled
  c lazy_display_mark := true
  if c:canceled or not (exists c:console)
    return
  part display
    c cancelable := c:last_full_cycle<>undefined and datetim
    for (var Int i) 0 c:zorder:size-1
      var Pointer:BrowserSession s :> c:session c:zorder:i
      each w s:windows
        if w:refresh or w:orefresh
          w redraw := var List:BrowserRedraw empty_redraw_li
        else
          while { var Pointer:BrowserRedraw d :> w:redraw fi
            # var DateTime dt := datetime
            w draw d:x0 d:y0 d:x1 d:y1
            if c:canceled
              leave display
            # console "draw " d:surface " -> " (string datet
            w redraw -= d
    if flick
      var DateTime dt0 := datetime
      var Str cmd := ""
    c apply_zorder
    for (var Int i) 0 c:zorder:size-1
      var Pointer:BrowserSession s :> c:session c:zorder:i
      each w s:windows
        if w:x0<>undefined and (w:refresh or w:orefresh) and
          w position (shunt w:name="left" or w:name="right" 
          if flick
            cmd += " pos0:"+w:name
          if c:canceled
            leave display
    c cancelable := false # FIXME: replace with later redraw
    c adjust_windows_size
    c cancelable := true
    if c:canceled
      leave display
    for (var Int i) 0 c:zorder:size-1
      var Pointer:BrowserSession s :> c:session c:zorder:i
      each w s:windows
        if w:x0<>undefined and (w:refresh or w:orefresh)
          w position 0
          if flick
            cmd += " pos:"+w:name
          if c:canceled
            leave display
      s focus_scroll
      if c:canceled
        leave display
    if flick
      var DateTime dt1 := datetime
    c draw 0 0 c:size_x c:size_y false
    if c:canceled
      leave display
    c brefresh := false
    for (var Int i) 0 11
      var Pointer:BrowserSession s :> c:session i
      each w s:windows
        if flick and (w:refresh or w:orefresh)
          cmd += " draw:"+w:name
        w refresh := false
        w orefresh := false
    if flick and cmd<>""
      var DateTime dt2 := datetime
      console dt2 cmd " -> " (string 1000*(dt1:seconds-dt0:s
    c last_full_cycle := datetime
  c cancelable := false


    return
  part display
    c cancelable := c:last_full_cycle<>undefined and datetim
    for (var Int i) 0 c:zorder:size-1
      var Pointer:BrowserSession s :> c:session c:zorder:i
      each w s:windows
        if w:refresh or w:orefresh
          w redraw := var List:BrowserRedraw empty_redraw_li
        else
          while { var Pointer:BrowserRedraw d :> w:redraw fi
            # var DateTime dt := datetime
            w draw d:x0 d:y0 d:x1 d:y1
            if c:canceled
              leave display
            # console "draw " d:surface " -> " (string datet
            w redraw -= d
    if flick
      var DateTime dt0 := datetime
      var Str cmd := ""
    c apply_zorder
    for (var Int i) 0 c:zorder:size-1
      var Pointer:BrowserSession s :> c:session c:zorder:i
      each w s:windows
        if w:x0<>undefined and (w:refresh or w:orefresh) and
          w position (shunt w:name="left" or w:name="right" 
          if flick
            cmd += " pos0:"+w:name
          if c:canceled
            leave display
    c cancelable := false # FIXME: replace with later redraw
    c adjust_windows_size
    c cancelable := true
    if c:canceled
      leave display
    for (var Int i) 0 c:zorder:size-1
      var Pointer:BrowserSession s :> c:session c:zorder:i
      each w s:windows
        if w:x0<>undefined and (w:refresh or w:orefresh)
          w position 0
          if flick
            cmd += " pos:"+w:name
          if c:canceled
            leave display
      s focus_scroll
      if c:canceled
        leave display
    if flick
      var DateTime dt1 := datetime
    c draw 0 0 c:size_x c:size_y false
    if c:canceled
      leave display
    c brefresh := false
    for (var Int i) 0 11
      var Pointer:BrowserSession s :> c:session i
      each w s:windows
        if flick and (w:refresh or w:orefresh)
          cmd += " draw:"+w:name
        w refresh := false
        w orefresh := false
    if flick and cmd<>""
      var DateTime dt2 := datetime
      console dt2 cmd " -> " (string 1000*(dt1:seconds-dt0:s
    c last_full_cycle := datetime
  c cancelable := false