Patch title: Release 85 bulk changes
Abstract:
File: /pliant/appli/photo/print.page
Key:
    Removed line
    Added line
module "/pliant/language/unsafe.pli"
module "/pliant/fullpliant/this_computer.pli"
module "env.pli"
module "load.pli"
module "/pliant/protocol/http/cache.pli"
module "/pliant/graphic/color/gamut.pli"
module "/pliant/graphic/image/prototype.pli"
module "/pliant/graphic/draw/prototype.pli"
module "/pliant/graphic/draw/displaylist.pli"
module "/pliant/math/transform.pli"
module "/pliant/graphic/image/pixmap.pli"
module "/pliant/protocol/lpr/spool.pli"
module "/pliant/protocol/lpr/spool2.pli"


title "Print selected photos"

var Str root_path := this_computer:env:"pliant":"photo":"root"
var Int columns := max (min icon_columns 100) 1
var Int aa_x := max (min resample_antialiasing_x 1) 8
var Int aa_y := max (min resample_antialiasing_y 1) 8
table columns columns border 0
  each selected print_selected
    cell
      var Str icon := photo_cache root_path+keyof:selected ".icon/" "jpeg" "resample "+string:icon_size_x+" "+string:icon_size_y+" antialiasing "+string:aa_x+" "+string:aa_y+" quality "+string:icon_quality
      var Str url := image_cache_record icon "" "jpeg" ""
      var Str target := keyof selected
      icon url
        goto_url target
      # image files:i:name+"?icon+"+generate_id files:i:name

para
  var Int nb_photo := print_selected size
  var Int nb_page := (nb_photo+print_nb_x*print_nb_y-1)\(print_nb_x*print_nb_y)
  if nb_photo>1
    text "There are "+string:nb_photo+" selected photos" ; eol
  if nb_page>1
    text "Printing will consume "+string:nb_page+" pages" ; eol

para
  page button "print now"
    var Int count := 0
    while print_selected:size<>0
      count += 1
      var Link:DrawDisplayList draw :> new DrawDisplayList
      draw setup (image_prototype 0 0 print_page_x print_page_y undefined undefined color_gamut:"rgb") ""
      var Int ix := 0 ; var Int iy := 0
      each selected print_selected filter iy<print_nb_y
        var Float mm_x := print_page_x/print_nb_x-2*print_border
        var Float mm_y := print_page_y/print_nb_y-2*print_border
        if (photo_load root_path+keyof:selected "no_rotate" (var Link:ImagePrototype photo))=success
          if (shunt mm_y>mm_x 1 0)<>(shunt photo:y1-photo:y0>photo:x1-photo:x0 1 0)
            photo_load root_path+keyof:selected "rotate_left" (var Link:ImagePrototype photo)
          part correct "correct photo "+(string ix+iy*print_nb_x+1)+" on page "+string:count
            var Link:ImagePixmap pixmap :> new ImagePixmap
            pixmap setup (image_prototype (min photo:x0 photo:x1) (min photo:y0 photo:y1) (max photo:x0 photo:x1) (max photo:y0 photo:y1) photo:size_x photo:size_y photo:gamut) ""
            for (var Int y) 0 pixmap:size_y-1
              var Address adr := pixmap write_map 0 y pixmap:size_x pixmap:size_x (var Int map_count)
              photo read 0 y pixmap:size_x adr
              pixmap write_unmap 0 y pixmap:size_x adr
          var Float scale := min mm_x/(abs pixmap:x1-pixmap:x0) mm_y/(abs pixmap:y1-pixmap:y0)
          draw image pixmap (transform print_border+ix*print_page_x/print_nb_x-pixmap:x0 print_border+iy*print_page_y/print_nb_y-pixmap:y0 scale scale 0 0)
          ix += 1
          if ix>=print_nb_x
            ix := 0 ; iy += 1
        print_selected delete keyof:selected
      part print "print photos page "+string:count+"/"+string:nb_page
        lpr_print draw "printer "+string:default_printer+" title "+(string "photos page "+string:count+"/"+string:nb_page)
    reload_page