IPB     Il futuro di Tevac dipende da te!  

Benvenuto Visitatore ( Log In | Registrati )

  · · · · · · · · · · · ·
Reply to this topicStart new topic
> [Cocoa] Questioni di coordinate...
gennaro_mac
messaggio 4 Apr 2007, 17:10
Messaggio #1


Level 3/11
***

Gruppo: Forum User +
Messaggi: 165
Iscritto il: 8-June 03
Da: Roma
Utente Nr.: 246



Salve a tutti,
è da un po' che sto giochicchiando con Cocoa e dopo le prime difficoltà (provengo "programmaticamente" da Windows ahimé, anche se il Mac è sempre stato il mio computer personale), ci sto prendendo seriamente gusto.

Veniamo subito al sodo ... sto giocando con l'intercettazione degli eventi ... nel caso specifico il click del mouse dentro una NSView. Volevo far si che il punto della NSView dove vado a cliccare, fosse il punto in cui far comparire la classica nuvoletta tipo quando togliamo un elemento dal dock.

Bene, vi mostro subito il codice che ho scritto:

CODICE
- (void)mouseDown:(NSEvent *)theEvent
{
    NSPoint myPoint;

    myPoint = [self convertPoint:[theEvent locationInWindow] fromView:nil];

    NSShowAnimationEffect(NSAnimationEffectPoof, myPoint, NSZeroSize, nil, nil, nil);
}


Il problema sta che il myPoint non viene contestualizzato nella NSView, ma è espresso in coordinate assolute del monitor ...

Come faccio a prendere la risoluzione del monitor così da fare una trasformazione di coordinate?

Nel frattempo m'era venuta un'altra idea ... con le API di Windows è molto facile "seguire" la posizione del puntatore del mouse ed eventualmente verificare dove vado a cliccare (parlo sempre di coordinate). E' possibile fare sicuramente la stessa cosa anche con Cocoa (se no il mela-shift-4-spazio non funzionerebbe icon_razz.gif) ... avete idea del come farlo?

Grazie 1000 anticipatamente a tutti!


--------------------
Ci saranno sempre scettici
Ci saranno sempre dubbiosi
E ci sarà sempre Apple per dimostrare che si sbagliano!
Go to the top of the page
 
+Quote Post
poweruser
messaggio 4 Apr 2007, 17:44
Messaggio #2


MacInATopic
Gruppo icone

Gruppo: Team Moderatori
Messaggi: 24.319
Iscritto il: 27-July 03
Da: Maglie (LE)
Utente Nr.: 440



Non so rispondere alla domanda, ma ti suggerisco di guardare il video Session 106 - Taking Advantage of Leopard Features in Cocoa (non so se il link funziona, ma lo trovi facilmente) su ADC on iTunes. Nella sessione viene mostrato come cambieranno le cose con le coordinate a causa della Resolution Independence introdotta in Leopard. Meglio prendere le buone abitudini subito icon_biggrin.gif.

Ciao
Paolo


--------------------
Paolo Portaluri

guru, n: A computer owner who can read the manual.
Go to the top of the page
 
+Quote Post
MacMomo
messaggio 5 Apr 2007, 07:47
Messaggio #3


Level 5/11
*****

Gruppo: Forum User +
Messaggi: 728
Iscritto il: 21-June 05
Da: Ostra Vetere (AN)
Utente Nr.: 3.979



La butto lì...
Non puoi farti dare la posizione della tua NSView e calcolare la posizione relativa ad essa?
In questo modo non ti dovrebbe servire sapere la risoluzione del monitor.

Esempio:
posizioneTuaView = {250, 130}
puntoClick = {280, 160}
puntoClickRispettoAllaView = {280 -250, 160 -130} = {30, 30}

Spero di non aver detto una castroneria. icon_wink.gif
...e naturalmente non è scritta sotto forma di codice.


--------------------
Marco *
MacBook Nero 2.2 GHz Intel Core 2 Duo - 4 GB RAM
Go to the top of the page
 
+Quote Post
gennaro_mac
messaggio 5 Apr 2007, 08:20
Messaggio #4


Level 3/11
***

Gruppo: Forum User +
Messaggi: 165
Iscritto il: 8-June 03
Da: Roma
Utente Nr.: 246



CITAZIONE(MacMomo @ 5 Apr 2007, 08:47) *
La butto lì...
Non puoi farti dare la posizione della tua NSView e calcolare la posizione relativa ad essa?
In questo modo non ti dovrebbe servire sapere la risoluzione del monitor.

Esempio:
posizioneTuaView = {250, 130}
puntoClick = {280, 160}
puntoClickRispettoAllaView = {280 -250, 160 -130} = {30, 30}

Spero di non aver detto una castroneria. icon_wink.gif
...e naturalmente non è scritta sotto forma di codice.


Assolutamente, la soluzione più immediata sarebbe proprio quella di conoscere nelle coordinate generali del monitor la posizione dell'origine della mia NSView ... ma come si fa?

Ammetto che ieri sera non c'ho giocato affatto ... c'era la Magica che giocava icon_razz.gif


--------------------
Ci saranno sempre scettici
Ci saranno sempre dubbiosi
E ci sarà sempre Apple per dimostrare che si sbagliano!
Go to the top of the page
 
+Quote Post
djzero00
messaggio 5 Apr 2007, 09:27
Messaggio #5


Level 4/11
****

Gruppo: Forum User +
Messaggi: 402
Iscritto il: 14-November 03
Da: Treviso
Utente Nr.: 936



CITAZIONE(gennaro_mac @ 4 Apr 2007, 18:10) *
CODICE
- (void)mouseDown:(NSEvent *)theEvent
{
    NSPoint myPoint = [self convertPoint:[theEvent locationInWindow] fromView:nil];
    NSShowAnimationEffect(NSAnimationEffectPoof, myPoint, NSZeroSize, nil, nil, nil);
}


Chi e' self? Ovvero, a quale classe appartiene questo metodo?
il metodo [ miavista convertPoint: miopunto fromView: nil ];
traduce le coordinate del punto miopunto dalle coordinate della finestra nelle coordinate di miavista.
Se miavista NON è la vista di interesse, non funziona bene.
Ho il sospetto che self sia, ad esempio, qualche altro oggetto (che so, la finestra, eccetera).
convertPoint: è il metodo da utilizzare ai tuoi scopi.
Ogni altra soluzione (finestra, coordinate, eccetera) prospettata nelle risposte, è solo reinventare la ruota.


--------------------
Arrivederci e grazie per tutto il pesce
Macocoa, Megaphone, Flickr, Anobii
Go to the top of the page
 
+Quote Post
MacMomo
messaggio 5 Apr 2007, 09:30
Messaggio #6


Level 5/11
*****

Gruppo: Forum User +
Messaggi: 728
Iscritto il: 21-June 05
Da: Ostra Vetere (AN)
Utente Nr.: 3.979



CITAZIONE(gennaro_mac @ 5 Apr 2007, 09:20) *
Assolutamente, la soluzione più immediata sarebbe proprio quella di conoscere nelle coordinate generali del monitor la posizione dell'origine della mia NSView ... ma come si fa?

Ammetto che ieri sera non c'ho giocato affatto ... c'era la Magica che giocava icon_razz.gif

Dalla documentazione Apple:
CITAZIONE
bounds

- (NSRect)bounds

Returns the receiver’s bounds rectangle, which expresses its location and size in its own coordinate system. The bounds rectangle may be rotated; use the boundsRotation method to check this.


--------------------
Marco *
MacBook Nero 2.2 GHz Intel Core 2 Duo - 4 GB RAM
Go to the top of the page
 
+Quote Post
Tom
messaggio 5 Apr 2007, 18:38
Messaggio #7


Level 4/11
****

Gruppo: Forum User +
Messaggi: 304
Iscritto il: 28-October 05
Da: Bologna
Utente Nr.: 4.683



CITAZIONE(gennaro_mac @ 4 Apr 2007, 17:10) *
Salve a tutti,
è da un po' che sto giochicchiando con Cocoa e dopo le prime difficoltà (provengo "programmaticamente" da Windows ahimé, anche se il Mac è sempre stato il mio computer personale), ci sto prendendo seriamente gusto.

Veniamo subito al sodo ... sto giocando con l'intercettazione degli eventi ... nel caso specifico il click del mouse dentro una NSView. Volevo far si che il punto della NSView dove vado a cliccare, fosse il punto in cui far comparire la classica nuvoletta tipo quando togliamo un elemento dal dock.

Bene, vi mostro subito il codice che ho scritto:

CODICE
- (void)mouseDown:(NSEvent *)theEvent
{
    NSPoint myPoint;

    myPoint = [self convertPoint:[theEvent locationInWindow] fromView:nil];

    NSShowAnimationEffect(NSAnimationEffectPoof, myPoint, NSZeroSize, nil, nil, nil);
}


Il problema sta che il myPoint non viene contestualizzato nella NSView, ma è espresso in coordinate assolute del monitor ...

Come faccio a prendere la risoluzione del monitor così da fare una trasformazione di coordinate?


Secondo quanto credo di aver capito dalla documentazione Apple se fai una cosa come

CODICE
[[self window] convertBaseToScreen:myPoint];


otteni le coordinate dello schermo, cosa che è richesta da NSShowAnimationEffect()

CITAZIONE(gennaro_mac @ 4 Apr 2007, 17:10) *
Nel frattempo m'era venuta un'altra idea ... con le API di Windows è molto facile "seguire" la posizione del puntatore del mouse ed eventualmente verificare dove vado a cliccare (parlo sempre di coordinate). E' possibile fare sicuramente la stessa cosa anche con Cocoa (se no il mela-shift-4-spazio non funzionerebbe icon_razz.gif) ... avete idea del come farlo?

Grazie 1000 anticipatamente a tutti!


Io ho visto che la posizione del mouse in coordinate schermiche la puoi ottenere con

CODICE
[NSEvent mouseLocation]


--------------------
iMac G4 700Mhz che va a Cacao, Carbone e Acqua
Go to the top of the page
 
+Quote Post
gennaro_mac
messaggio 6 Apr 2007, 08:39
Messaggio #8


Level 3/11
***

Gruppo: Forum User +
Messaggi: 165
Iscritto il: 8-June 03
Da: Roma
Utente Nr.: 246



CITAZIONE(Tom @ 5 Apr 2007, 19:38) *
Io ho visto che la posizione del mouse in coordinate schermiche la puoi ottenere con

CODICE
[NSEvent mouseLocation]


Grazie Tom, solo che intercetto l'evento quand'ho a che fare con un'istanza di classe ... che ne so ... metto una NSView su una finestra cui collego una mia custon class nella quale implemento il metodo che mi permette di accedere agli eventi del mouse.

Ma in un'area potenzialmente vuota dello schermo?

Per il problema delle coordinate grazie a tutti ... effettivamente ho risolto con una

CODICE
myPoint = [self convertPoint:[theEvent locationInWindow] fromView:nil];
myPoint = [[self window] convertBaseToScreen:myPoint];


--------------------
Ci saranno sempre scettici
Ci saranno sempre dubbiosi
E ci sarà sempre Apple per dimostrare che si sbagliano!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic

 

Collapse

> 

    Titolo discussione Risposte Autore discussione Visite Ultima azione
No New Posts 4 monegasque 97 12 December 2008 - 21:56
Ultimo messaggio di: sirguich_
No New Posts   3 Bezier 167 9 September 2008 - 11:46
Ultimo messaggio di: poweruser
No New Posts   4 NSLuca 251 4 August 2008 - 14:25
Ultimo messaggio di: NSLuca
No new   11 marg 970 2 July 2008 - 07:11
Ultimo messaggio di: marg
No New Posts   4 germinara 238 22 June 2008 - 13:29
Ultimo messaggio di: sirguich_
No New Posts   2 sirguich_ 230 9 June 2008 - 22:14
Ultimo messaggio di: sirguich_
No new   10 Ale93 278 1 June 2008 - 22:15
Ultimo messaggio di: Ale93
No new   11 Cpu86 555 23 March 2008 - 10:14
Ultimo messaggio di: Cpu86
No New Posts   2 nutsmuggler 358 12 March 2008 - 15:17
Ultimo messaggio di: nutsmuggler
No new   10 marg 424 25 February 2008 - 21:10
Ultimo messaggio di: marg
No New Posts   4 Gojca 242 25 February 2008 - 17:37
Ultimo messaggio di: Gojca
No new   11 Lorenzo 569 17 February 2008 - 20:08
Ultimo messaggio di: Lorenzo

Modalità di visualizzazione: Normale · Passa a: Lineare · Passa a: Outline


RSS Versione Lo-Fi Oggi è il: 8 January 2009 - 18:02
IP.Board Skin Developed By Creative Networks