IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flex Discussion :

Paramétrage d'un "Custom Cursor"


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Par défaut Paramétrage d'un "Custom Cursor"
    Bonjour,

    Je développe une petite appli de dessin en flex. Un peu comme dans MS Paint, l'utilisateur est amené à utiliser différents outils. Pour chaque outil, je fais en sorte d'afficher un curseur particulier (un crayon pour le dessin libre, une gomme pour effacer...). Par ailleurs, l'utilisateur peut choisir un niveau de zoom pour la zone de dessin (50%, 100%, page entière ...). Je précise que le dessin est "vectoriel" : mon modèle de données consiste donc essentiellement en une collection de "paths" (séries de points) qui correspondent aux différents "traits" du dessin. J'ai donc recours à une transformation affine pour passer des points du modèle aux points de la vue (et vice versa).

    Le cas qui me préoccupe est celui du curseur de la gomme : pour l'instant j'utilise une classe de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class EraserToolIcon extends Sprite {
    	public function EraserToolIcon() {
    		graphics.clear();
    		graphics.lineStyle(1, 0x000000);
    		graphics.drawRect(-5, -5, 11, 11);
    		var iconClass:Class = IconBundle.getIcon("util.eraser");
    		var iconImpl:DisplayObject = new iconClass();
    		iconImpl.x = 0;
    		iconImpl.y = 0;
    		addChild(iconImpl);
    	}
    }
    }
    (l' IconBundle est juste un resource bundle qui renvoie les icônes de mon projet)

    Mon problème, c'est que le rectangle qui apparaît sous le dessin de la gomme et qui est censé montrer à l'utilisateur la délimitation de la zone qui va être effacée est défini dans le repère de la vue. Cela signifie donc que, vis à vis des points du modèle, la gomme devient plus "précise" si le zoom augmente. Je voudrais, à l'inverse, que le rectangle ait une taille dépendante du niveau de zoom actuel (c'est-à-dire une taille constante dans le repère du modèle).

    J'ai bien essayé d'utiliser un Sprite simple pour le rectangle et qui "suivrait" les mouvements de la souris mais après quelques tests, je me suis rendu compte qu'il y avait beaucoup trop de décalage (le rectangle prend parfois un peu de retard et ça se voit).

    J'ai vite écarté la solution peu élégante consistant à développer plusieurs classes EraserToolIcon50, EraserToolIcon100, EraserToolIcon200 qui correspondraient aux différents niveaux de zoom possibles car elle ne permet évidemment pas de gérer le cas du zoom "pleine page".

    Le problème revient donc à essayer de passer un paramètre à l'instance de EraserToolIcon créée par le CursorManager. Pour cela, j'ai pensé créer une classe dont l'unique but serait de stocker la valeur courante du zoom (problème évident à terme si je décide d'avoir plusieurs zone de dessin).

    Ma question est donc la suivante : y a-t-il un moyen de "paramétrer" la construction d'un curseur par le CursorManager autre qu'en utilisant une variable globale ?

    Question subsidiaire : pourquoi n'ont-ils pas fait comme pour l'itemRenderer d'une liste qui prend en paramètre une ClassFactory pour laquelle on a au moins la possibilité de spécifier des propriétés ?

    Merci d'avance,

    Pierre.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Par défaut
    Bon... j'ai utilisé la solution du Sprite qui se balade en même temps que la souris. Ça n'est pas l'idéal mais ça marche à peu près bien.

    Pierre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quote et double quote
    Par aktos dans le forum Langage
    Réponses: 8
    Dernier message: 05/01/2007, 19h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo