> Bonjour à tous,
>
> J'ai une petite question au sujet de SVG, ECMA, XML et compagnie...
>
> J'ai besoin de projeter du contenu graphique et "dynamique" sur grand
> écran... (Dynamique entre guillement puisqu'il s'agit plus d'un
> rafraichissement (1 à 5 secondes) : Positionnement, Graphiques etc... mais
> avec pas mal d'éléments...)
>
> J'ai donc pensé à SVG mais il me manque un interpreteur qui soit
> indépendant de la surface d'affichage et du système de fenêtrage.... Je ne
> sais pas non plus si l'interprétation sera suffisamment rapide...
>
> L'idée de manipuler la structure du fichier SVG (par libxml, libsvg,
> librsvg) me semble super pratique mais il existe peu être des
> implementations pour faire ça tout en mémoire qui seraient plus rapide ou
> plus appropriées au rendu sur écran ??
>
> (J'avais aussi pensé à X11 mais XML me semble tellement pratique...)
>
> Connaissez-vous des interpréteurs ou librairies de ce genre ??
>
> Toutes idées sous tous systèmes est la bienvenue :)
Peut-être pourrais-tu t'en sortir assez facilement de façon élégante et
évolutive par la suite en utilisant le widget SVG de GTK, GTK pouvant être
utilisé à partir du langage de script haut niveau de ton choix.
L'avantage d'une telle solution c'est que c'est pratiquement tout en un :
la rasterisation du SVG, son affichage graphique, possibilité d'interaction
avec l'utilisateur (appuyer sur la barre d'espace pour aller à la frame
suivante, ou bien utiliser le timer pour régler le temps d'affichage de
chaque frame, appuyer sur + ou - pour accélérer ou ralentir la cadence...)
et je crois que le widget fournit la possibilité de lire soit du SVG à partir
d'un fichier, soit contenu dans une variable (donc tout en mémoire)...
Dans les fichiers d'exemples du wraper GTK d'un langage de script j'ai trouvé
çà :
(je ne donne pas cet exemple pour l'utiliser absoluement, c'est juste pour
donner une idée, un aperçu de ce type de solution)
let zoom = ref None
let dpi = ref None
let fname = ref ""
let _ =
let cli_args = [
("-zoom", Arg.Float (fun v -> zoom := Some v), "zoom factor");
("-dpi" , Arg.Float (fun v -> dpi := Some v), "") ]
and usg_msg =
Printf.sprintf "usage: %s [options] <file>\n"
(Filename.basename Sys.executable_name) in
Arg.parse cli_args ((:=) fname) usg_msg;
if not (Sys.file_exists !fname)
then begin
Arg.usage cli_args usg_msg;
exit 2
end
let pb =
let gz =
Filename.check_suffix !fname ".svgz" ||
Filename.check_suffix !fname ".svg.gz" in
let size_cb = match !zoom with
| None -> None
| Some z -> Some (Rsvg.at_zoom z z) in
Rsvg.render_from_file ~gz ?dpi:!dpi ?size_cb !fname
let w = GWindow.window ~allow_grow:false ~title:!fname ()
let i = GMisc.image ~packing:w#add ()
let () =
i#set_pixbuf pb;
w#connect#destroy GMain.quit;
w#show();
GMain.main()
_____