NSScrollView, NSView

h2ofactory

Membre enregistré
30 Août 2010
3
0
Bonjour

Pour les besoins d'un projet, je dois recuperer les events souris dans une application compose d'une NSView et d'une NSScrollView. Si la recuperation des events se fait bien, les coordonnes de ces dernieres sont systematiquement inverse dans la scrollview.

J'applique pourtant la conversion suivante :
NSPoint tmp = [theEvent locationInWindow];
NSPoint tmp3 = [self convertPoint:tmp fromView:nil];
Qui devrait me permettre de recuperer les coordonnes dans le bon systeme.

Avez vous une idee de quoi faire pour remedier a mon probleme ?
 
Je ne suis pas sûr de comprendre ce que signifie "les coordonnées sont inverses".
Par défaut, la matrice de transformation d'une NSView fait que son repère cartésien est orienté ainsi:

Bloc de code:
y

^
|
|
|
+----------> x

Tu as sans doute modifié la matrice de transformation de la scroll view pour qu'elle soit ainsi (par exemple pour que le document soit affiché dans le coin supérieur gauche):

Bloc de code:
+---------> x
|
|
|
v

y

Tu vas devoir convertir les coordonnées des points (par exemple avec NSAffineTransform).
 
Le probleme venait en effet de la. Merci bien
Maintenant mes coordonnes sont bonnes dans la scrollview a part si je bouge l'ascenseur sur le cote. Dans sa position initial, tout est bon. Mais des que je le bouge vers le haut par exemple, mes coordonnes en Y prennent aussi sec le decalage de l'ascenseur en addition. Ce qui fait que l'image que je fait apparaitre a l'emplacement de la sourie est trop haute par rapport a cette derniere. Une idee ?
 
Je ne peux pas te dire exactement mais en fait, la NSScrollView contient une NSClipView qui contient ta vue (voir Cocoa Drawing Guide). La NSClipView sert justement au défilement et à faire en sorte que seule la partie visible soit dessinée.
En bougeant l'ascenseur, j'imagine que l'origine du repère de la NSClipView est décalée.

Ce genre de choses est souvent casse-tête. Centrer un document dans une scrollview est par exemple fort complexe.