chiark / gitweb /
hostside/gui: allow positioning of 0 and 1 posns of point button separately, and...
[trains.git] / hostside / gui
index 790d168a4a90578bd4bd947e6d1e550c88d49c15..6c4365c4d5e2a0dccc6e36a342c9b95814cd7f9f 100755 (executable)
@@ -225,23 +225,21 @@ register-event ?movpos_*_feat {seg feat posn_new} \
     movpos-button-setdisplay $mid
 }
 
-proc movpos-bindkey-1 {cpage key adjx adjy seg feat} {
+proc movpos-bindkey-1 {cpage key seg feat adj0x adj0y adj1x adj1y} {
     global posdeviation picturepadx picturepady
     manyset [subseg-end-get-centroid $cpage $seg $feat {}] mx my
     set mid $seg/$feat
-    addexpr mx $adjx
-    addexpr my $adjy
     foreach posn {0 1} {
        manyset [subseg-end-get-centroid $cpage $seg $feat $posn] x y
        set dx [expr {$x-$mx}]; set dy [expr {$y-$my}]
        set d [expr {sqrt($dx*$dx + $dy*$dy)}]
        set mul [expr {$posdeviation / ($d + 1e-6)}]
-       set x [expr {$mx + $mul*$dx + $picturepadx}]
-       set y [expr {$my + $mul*$dy + $picturepady}]
+       set x [expr {$mx + $mul*$dx + $picturepadx + [set adj${posn}x]}]
+       set y [expr {$my + $mul*$dy + $picturepady + [set adj${posn}y]}]
        lappend poslocs [list $x $y]
     }
-    lappend poslocs [list [expr {$mx + $picturepadx}] \
-                         [expr {$my + $picturepady}]]
+    lappend poslocs [list [expr {$mx + $picturepadx + ($adj0x+$adj1x)*0.5}] \
+                         [expr {$my + $picturepady + ($adj0y+$adj1y)*0.5}]]
     upvar #0 mp_details($mid) details
     set details [list $cpage $key $seg $feat $poslocs]
 
@@ -298,9 +296,12 @@ proc layout-data {} {
        return
     }
     foreach binding $bindings {
-       if {[regexp {^([A-Z])([-+]\d*)?([-+]\d+)?\=(\w+)/([A-Z]+)$} \
-                $binding dummy key adjx adjy seg feat]} {
-           movpos-bindkey-1 $cpage $key $adjx.0 $adjy.0 $seg $feat
+       if {[regexp \
+   {^([A-Z])([-+]\d*)?([-+]\d*)?([-+]\d*)?([-+]\d*)?\=(\w+)/([A-Z]+)$} \
+                $binding dummy key adj0x adj0y adj1x adj1y seg feat]} {
+           if {![string length $adj1x]} { set adj1x $adj0x; set adj1y $adj0y }
+           movpos-bindkey-1 $cpage $key $seg $feat \
+               $adj0x.0 $adj0y.0 $adj1x.0 $adj1y.0
        } elseif {[regexp {^[A-Z]$} $binding] || [regexp {~} $binding]} {
        } else {
            error "incomprehensible binding $binding on page $cpage"