2010-09-03 10 views
4

Je développe un programme GLUT sur un mac. Les Mac semblent passer des modificateurs à travers GLUT d'une manière amusante. Les touches Alt et Ctrl ne sont pas capturées par glutGetModifiers(), elles sont plutôt traduites dans le bouton int. La clé de commande ne semble pas être capturée par glutGetModifiers() ou par le bouton int. En outre, il n'apparaît pas comme une clé dans mon glutKeyboardFunc (...).Comment détecter une clé de commande en tant que modificateur dans un programme glut exécuté sur un mac?

Existe-t-il un moyen de capturer/détecter la clé de commande (pomme) dans GLUT? Ne détecte que CTRL, ALT et SHIFT, et non la clé

+0

Quelle implémentation de GLUT utilisez-vous? – genpfault

+0

OpenGL sur le mac est beaucoup plus facile si vous utilisez Cocoa. – mk12

+0

Oui, j'aimerais avoir quelque chose de similaire à la façon dont Qt gère la clé de commande. Il est traité comme la clé de contrôle Windows. De cette façon, mon application sur Mac fonctionnera comme * sur * les fenêtres. Je ne veux pas utiliser de cacao parce que j'aimerais toujours pouvoir l'utiliser sur PC/Linux si cela se résume à ça. J'ai déjà utilisé Qt mais c'est vraiment exagéré pour ma petite application. J'utilise tout ce que GLUT est implémenté dans le framework mac. –

Répondre

2

glutGetModifiers

La seule façon que je sais comment faire est d'utiliser Carbon,

#include <Carbon/Carbon.h> 

KeyMap keyStates ; 
bool IS_KEYDOWN(uint16_t vKey) 
{ 
    uint8_t index = vKey/32 ; 
    uint8_t shift = vKey % 32 ; 
    return keyStates[index].bigEndianValue & (1 << shift) ; 
} 

void checkInput() 
{ 
    // This grabs all key states, then checks if you were holding down ⌘ or not 
    GetKeys(keyStates) ; 
    if(IS_KEYDOWN(kVK_Command)) 
    puts("⌘") ; 
} 
0

Alors que la solution de carbone est meilleure dans certains cas, on peut aussi patcher et remplacer directement le cadre de GLUT sur mac os x à soutenir la clé de commande. saisit la clé de commande et définit un masque de modification respectif GLUT_ACTIVE_COMMAND.