72 lines
2.5 KiB
OCaml
72 lines
2.5 KiB
OCaml
(***********************************************************************)
|
|
(* *)
|
|
(* MLTk, Tcl/Tk interface of Objective Caml *)
|
|
(* *)
|
|
(* Francois Rouaix, Francois Pessaux, Jun Furuse and Pierre Weis *)
|
|
(* projet Cristal, INRIA Rocquencourt *)
|
|
(* Jacques Garrigue, Kyoto University RIMS *)
|
|
(* *)
|
|
(* Copyright 2002 Institut National de Recherche en Informatique et *)
|
|
(* en Automatique and Kyoto University. All rights reserved. *)
|
|
(* This file is distributed under the terms of the GNU Library *)
|
|
(* General Public License, with the special exception on linking *)
|
|
(* described in file LICENSE found in the Objective Caml source tree. *)
|
|
(* *)
|
|
(***********************************************************************)
|
|
open Camltk
|
|
open Widget
|
|
open Tkanim
|
|
open Tk
|
|
|
|
let main () =
|
|
let file = ref "" in
|
|
Arg.parse [] (fun s -> file := s)
|
|
"usage: gifanimtest file (animated gif)\n\
|
|
\tbutton 1 toggles the animation,\n\
|
|
\tbutton 2 displays the next frame,\n\
|
|
\tbutton 3 quits.";
|
|
let t = openTk () in
|
|
|
|
(* First of all, you must initialize the extension. *)
|
|
Tkanim.init ();
|
|
|
|
prerr_endline !file;
|
|
|
|
(* Then load the animated gif. *)
|
|
let anim = Tkanim.create !file in
|
|
prerr_endline "load done";
|
|
|
|
(* Check it is really animated or not. *)
|
|
match anim with
|
|
| Still x ->
|
|
(* Use whatever you want in CamlTk with this ImagePhoto. *)
|
|
prerr_endline "Sorry, it is not an animated GIF."
|
|
|
|
| Animated x ->
|
|
(* OK, let's animate it. *)
|
|
let l = Label.create t [] in
|
|
pack [l] [];
|
|
|
|
(* animate returns an interface function. *)
|
|
let f = animate l x in
|
|
|
|
(* Button1 toggles the animation *)
|
|
bind l [[], ButtonPressDetail 1] (BindSet ([], (fun _ ->
|
|
f false)));
|
|
|
|
(* Button2 displays the next frame. *)
|
|
bind l [[], ButtonPressDetail 2] (BindSet ([], (fun _ ->
|
|
f true)));
|
|
|
|
(* Button3 quits. *)
|
|
bind l [[], ButtonPressDetail 3] (BindSet ([], (fun _ ->
|
|
closeTk ())));
|
|
|
|
(* start the animation *)
|
|
f false;
|
|
|
|
(* Go to the main loop. *)
|
|
mainLoop ()
|
|
|
|
let _ = Printexc.print main ()
|