Blame examples_camltk/eyes.ml

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