[Xulfr] XBL et SVG.
René-Luc
rldhont at no-log.org
Ven 5 Jan 14:44:31 CET 2007
Salut,
Oui ça me parle, j'ai déjà eu ce genre de soucis et bien sûr j'utilise
les mêmes tours de passe passe.
Paul Rouget a écrit :
> Salut la liste.
>
> Désolé pour le contenu HTML, mais ça me permet de simplifier la mise
> en page.
>
> Je ne cherche pas obligatoirement les solutions à mes problèmes, mais
> des pistes,
> des conseils pour continuer à debuger tout ça. Si vous pouviez me dire
> ce que vous
> inspire tout ça, ça m'aiderait grandement:
>
> Bon... j'ai un soucis pour binder un élément créé dynamiquement.
> Voilà le contexte:
>
> Je suis dans le chrome.
> XulRunner 1.8.0.4
> J'ai une fenêtre XUL bourrée de XBL.
> Du SVG dans tous les sens.
>
> Voici mon DOM énormément simplifié, en rouge, le contenu anonyme:
>
> * * xul:audio*
> o svg:svg
> + ...
> + svg:zoomArea inherits svg:generic
> # svg:svg
> * *svg:Area* inherits svg:generic
> o svg:g
> + *svg:Section* inherits
> svg:generic
> # svg:rect
> # svg:g
> * *svg:Section*
> inherits svg:generic
> o svg:rect
> * *svg:Section*
> inherits svg:generic
> o svg:rect
>
>
> Et j'ai une jolie feuille de style qui me permet de styler tout ça, et
> aussi qui bind tout ces
> éléments (-moz-binding).
>
> J'ai un truc qui ressemble à ça dans mon css:
>
> section rect {
> fill: red;
> }
> section[checked="true"] rect {
> fill: green;
> }
>
>
> Ok, jusque là, tout va bien.
>
> Si, dynamiquement, dans mon code JS je modifie l'attribut checked
> d'une section pour qu'il passe à true, mon rect anonyme de devient pas
> vert. Par contre, si juste après je passe le ownerSVGElt (élément
> svg:svg pere du section) en visbility
> "hidden" puis "visible", mon rect devient bien vert. Je peux en conclure,
> peut être à tord que Gecko n'applique pas dans mon cas (parce qu'en
> général, ça fonctionne)
> le css après une modification dynamique du DOM svg.
>
> C'est mon premier soucis, mais à la limitte, ce workaround ne me dérange
> pas trop.
>
> Soucis suivant, là aussi ça va. Je crée dynamquement un élément svg:line.
> Il ne s'affiche pas mais est présent dans le DOM. Basculé le
> visibility ne change rien. Par contre, basculer
> le display (none/block) du ownerSvgElt me fait apparaitre mon line.
>
> Par contre, troisème problème, bien plus embètant:
> Accrochez vous:
> Je crée dynamiquement un élément section (createElementNS(svg ns)).
> je suis dans une fonction hors de mon XBL (une méthode d'un window XUL
> classic appelé quand j'appuie sur un bouton).
> Je fais donc mon createElementNS.
> Le résultat de mon createElementNS est affecté à une variable:
> var aSection = document.createElementNS("http://www.w3.org/2000/svg",
> "section");
> Le binding est effectué de manière asynchrone, mais, en gros, 6
> secondes après !!!
> Pourtant, ma machine est vraiment très puissante, cet élément section
> ne fait rien
> de vraiment extraordinaire, et, de plus, à la base, au chargement de
> l'appli, il existe
> 17 section, et ça ne lui pause aucun soucis (chargement de l'appli en
> 3 secondes, chargement
> de xulrunner inclu).
> Petit truc étrange:
> Si aSection est une variable globale (window.aSection) , le binding
> n'est *jamais* appliqué. Quel rapport me direz vous ?
> Je ne sais pas non plus! (je vous avais dit de vous accrocher).
> Mais continuons.
> Alors... quand je dis que le binding est appliqué, je veux dire que
> les fonctions apportées par ce binding
> sont présentes (après mon timeout de 6s, j'appelle une de celles ci,
> et elle fonctionne, c'est comme ça que
> je teste). Par contre, graphiquement, l'élément n'est pas présent.
> Pfiou...
> Donc, je teste mon super workaround. Idem, ne fonctionne pas en
> visibility, mais fonctionne avec display.
> Par contre, si je fais imédiatement un display none/block après le
> append, alors mon binding est appliqué
> de manière asynchrone, mais immédiatement (timeout de zero).
>
> Bon... comme vous l'avez vu, c'est le bordel, et tout cela vient d'un
> soucis de prise en compte du css
> par gecko dans le cas de modif du DOM dans un context SVG et XBL. J'ai
> déjà fait des applis bien complexes
> en SVG & XBL, sans avoir ce genre de soucis. Est-ce que celà vous
> cause ? Avez vous une piste ? N'importe
> quoi qui pourra m'aider à comprendre ce qu'il se passe.
>
> J'espère avoir été clair.
>
> Toute piste m'intéresse.
>
> Merci de m'avoir lu ^^
> --
> Paul Rouget
>
> http://www.xulfr.org - Technologies Mozilla
> http://blog.sexylizard.org
>
> _______________________________________________
> Xulfr mailing list
> Xulfr at lists.xulfr.org
> http://lists.xulfr.org/mailman/listinfo/xulfr
>
Plus d'informations sur la liste de diffusion Xulfr