|
Packit |
bd2e5d |
(***********************************************************************)
|
|
Packit |
bd2e5d |
(* *)
|
|
Packit |
bd2e5d |
(* MLTk, Tcl/Tk interface of OCaml *)
|
|
Packit |
bd2e5d |
(* *)
|
|
Packit |
bd2e5d |
(* Francois Rouaix, Francois Pessaux, Jun Furuse and Pierre Weis *)
|
|
Packit |
bd2e5d |
(* projet Cristal, INRIA Rocquencourt *)
|
|
Packit |
bd2e5d |
(* Jacques Garrigue, Kyoto University RIMS *)
|
|
Packit |
bd2e5d |
(* *)
|
|
Packit |
bd2e5d |
(* Copyright 2002 Institut National de Recherche en Informatique et *)
|
|
Packit |
bd2e5d |
(* en Automatique and Kyoto University. All rights reserved. *)
|
|
Packit |
bd2e5d |
(* This file is distributed under the terms of the GNU Library *)
|
|
Packit |
bd2e5d |
(* General Public License, with the special exception on linking *)
|
|
Packit |
bd2e5d |
(* described in file LICENSE found in the OCaml source tree. *)
|
|
Packit |
bd2e5d |
(* *)
|
|
Packit |
bd2e5d |
(***********************************************************************)
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
(* The eyes of OCaml (CamlTk) *)
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
open Camltk;;
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
let create_eye canvas cx cy wx wy ewx ewy bnd =
|
|
Packit |
bd2e5d |
let _oval2 =
|
|
Packit |
bd2e5d |
Canvas.create_oval canvas
|
|
Packit |
bd2e5d |
(Pixels (cx - wx)) (Pixels (cy - wy))
|
|
Packit |
bd2e5d |
(Pixels (cx + wx)) (Pixels (cy + wy))
|
|
Packit |
bd2e5d |
[Outline (NamedColor "black"); Width (Pixels 7);
|
|
Packit |
bd2e5d |
FillColor (NamedColor "white"); ]
|
|
Packit |
bd2e5d |
and oval =
|
|
Packit |
bd2e5d |
Canvas.create_oval canvas
|
|
Packit |
bd2e5d |
(Pixels (cx - ewx)) (Pixels (cy - ewy))
|
|
Packit |
bd2e5d |
(Pixels (cx + ewx)) (Pixels (cy + ewy))
|
|
Packit |
bd2e5d |
[FillColor (NamedColor "black")] in
|
|
Packit |
bd2e5d |
let curx = ref cx
|
|
Packit |
bd2e5d |
and cury = ref cy in
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
let treat_event e =
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
let xdiff = e.ev_MouseX - cx
|
|
Packit |
bd2e5d |
and ydiff = e.ev_MouseY - cy in
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
let diff =
|
|
Packit |
bd2e5d |
sqrt ((float xdiff /. (float wx *. bnd)) ** 2.0 +.
|
|
Packit |
bd2e5d |
(float ydiff /. (float wy *. bnd)) ** 2.0) in
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
let nx, ny =
|
|
Packit |
bd2e5d |
if diff <= 1.0 then e.ev_MouseX, e.ev_MouseY else
|
|
Packit |
bd2e5d |
truncate ((float xdiff) *. (1.0 /. diff)) + cx,
|
|
Packit |
bd2e5d |
truncate ((float ydiff) *. (1.0 /. diff)) + cy in
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
Canvas.move canvas oval (Pixels (nx - !curx)) (Pixels (ny - !cury));
|
|
Packit |
bd2e5d |
curx := nx;
|
|
Packit |
bd2e5d |
cury := ny; in
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
bind canvas [[], Motion] (
|
|
Packit |
bd2e5d |
BindExtend ([Ev_MouseX; Ev_MouseY], treat_event)
|
|
Packit |
bd2e5d |
)
|
|
Packit |
bd2e5d |
;;
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
let main () =
|
|
Packit |
bd2e5d |
let top = opentk () in
|
|
Packit |
bd2e5d |
let fw = Frame.create top [] in
|
|
Packit |
bd2e5d |
pack [fw] [];
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
let canvas = Canvas.create fw [Width (Pixels 200); Height (Pixels 200)] in
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
create_eye canvas 60 100 30 40 5 6 0.6;
|
|
Packit |
bd2e5d |
create_eye canvas 140 100 30 40 5 6 0.6;
|
|
Packit |
bd2e5d |
pack [canvas] [];
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
mainLoop ();
|
|
Packit |
bd2e5d |
;;
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
Printexc.print main ();;
|
|
Packit |
bd2e5d |
|