Domanda

Sto usando il inputmethodkit e sto cercando di posizionare una finestra sotto del testo.

_currentclient è un'istanza IMKTextInput

I candidati sono un'istanza IMKCandidates

// Get the current location to place the window
NSRect tempRect = NSMakeRect(0, 0, 0, 0);
NSDictionary* clientData = [_currentClient attributesForCharacterIndex:0 lineHeightRectangle:&tempRect];
NSPoint* windowInsertionPoint = (NSPoint*)[clientData objectForKey:@"IMKBaseline"];
...
[candidates setCandidateFrameTopLeft:*windowInsertionPoint];
[candidates showCandidates];
.

Ora, so che la variabile windowInsertionPoint va bene, quando Debug debug posso vedere il suo valore, ad esempio: nspoint: {647,365}

Comunque quando lo uso, la finestra del candidato mostra solo nell'angolo in basso a sinistra dello schermo.Non ho lavorato con il posizionamento dello schermo di cose prima, quindi l'aiuto è apprezzato.

Se passerò in valori statici arbitrari a setCandidateFrameTopLeft, viene inserito nello schermo.Le seguenti opere:

[candidates setCandidateFrameTopLeft:NSMakePoint(401, 354)];
.

è un problema del puntatore?

È stato utile?

Soluzione

OK, la soluzione a questo è che sono un idiota.Ecco il codice di cui hai bisogno:

NSRect tempRect;
NSDictionary* clientData = [_currentClient attributesForCharacterIndex:0 lineHeightRectangle:&tempRect];
NSPoint windowInsertionPoint = NSMakePoint(NSMinX(tempRect), NSMinY(tempRect));
.

La documentazione per imktextinput attributiFaracracterIndex dice

.

Linerect: On Restituisci, un rettangolo che cornica un rettangolo a un pixel con l'altezza della linea.Questo rettangolo è orientato allo stesso modo in cui la linea è orientata.

Ciò significa che restituisce un NSrect nella variabile il tuo passò per il valore lineHeightRectangle.Il punto importante è che la posizione di quella NSRECT è la posizione del personaggio che stai cercando.Quindi, allora devi semplicemente creare un punto da quel rettangolo e utilizzare NSminy per il valore Y.Il rettangolo è solo un singolo pixel largo così min / max per x sono fondamentalmente lo stesso.

Altri suggerimenti

Probabilmente non hai più questo problema, ma anche questo funziona, per il futuro:

            [candidates show:kIMKLocateCandidatesBelowHint];
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top