let ask_position ~n ~m ~s () =
Graphics.set_window_title "Projet Puzzle : ou placer cette piece ? (Cliquer sur une case du plateau, ou 'Echap' pour annuler)";
zenity_info "Projet Puzzle : où placer cette pièce ? (Cliquer sur une case du plateau, ou 'Echap' pour annuler)";
let (x_loc, y_loc) = (ref 0, ref 0) in
let f_key = function
|'\027' -> raise Fin;
| _ -> ();
in
let f_mouse x y =
x_loc := x; y_loc := y;
Graphics.moveto x y;
raise Fin;
in
(try
while true do
try
let s = Graphics.wait_next_event [Graphics.Button_down; Graphics.Key_pressed]
in
if s.Graphics.keypressed then f_key s.Graphics.key
else
if s.Graphics.button
then f_mouse s.Graphics.mouse_x s.Graphics.mouse_y
with
| Fin -> raise Fin
done
with Fin -> () ;
);
print_string ("Vous avez cliqué en x="^(string_of_int !x_loc)^", et y="^(string_of_int !y_loc)^". Cela vous conviend ?");
let (i, j) = ( ((!x_loc - 10) / (2*s+4)), ((!y_loc - 10) / (2*s+4))) in
if ((i < 0) || (i >= m)) then (
zenity_info "Projet Puzzle : où placer cette pièce ? La coordonnée horizontale n'est pas valide";
raise Fin;
);
if ((j < 0) || (j >= n)) then (
zenity_info "Projet Puzzle : où placer cette pièce ? La coordonnée verticale n'est pas valide";
raise Fin;
);
(i, j)