⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 macosx_input.m

📁 quakeIII源码这个不用我多说吧
💻 M
📖 第 1 页 / 共 3 页
字号:
    if ((vid_screen = Cvar_Get("vid_screen", "-1", CVAR_ARCHIVE)))
        displayIndex = vid_screen->integer;
    else
        displayIndex = -1;
        
    if (displayIndex < 0 || displayIndex >= displayCount)
        // This is documented (in CGDirectDisplay.h) to be the main display.  We want to
        // return this instead of kCGDirectMainDisplay since this will allow us to compare
        // display IDs.
        displayToUse = displays[0];
    else
        displayToUse = displays[displayIndex];

    return displayToUse;
}

void Sys_SetMouseInputRect(CGRect newRect)
{
    inputRectValid = YES;
    inputRect = newRect;
    //Com_Printf("**** inputRect = (%f, %f, %f, %f)\n", newRect.origin.x, newRect.origin.y, newRect.size.width, newRect.size.height);
    
    if (mouseactive)
        Sys_LockMouseInInputRect(inputRect);
}


static void Sys_ProcessMouseMovedEvent(NSEvent *mouseMovedEvent, int currentTime)
{
    float dx, dy;
    
    if (!mouseactive)
        return;
        
    dx = [mouseMovedEvent deltaX];
    dy = [mouseMovedEvent deltaY];
    
    if (in_showevents->integer)
        Com_Printf("MOUSE MOVED: %d, %d\n", dx, dy);

    Sys_QueEvent(currentTime, SE_MOUSE, dx, dy, 0, NULL );
}

// If we are 'paused' (i.e., in any state that our normal key bindings aren't in effect), then interpret cmd-h and cmd-tab as hiding the application.
static qboolean maybeHide()
{
    if ((currentModifierFlags & NSCommandKeyMask) == 0)
        return qfalse;

    return Sys_Hide();
}

static inline void sendEventForCharacter(NSEvent *event, unichar character, qboolean keyDownFlag, int currentTime)
{
    if (in_showevents->integer)
        Com_Printf("CHARACTER: 0x%02x down=%d\n", character, keyDownFlag);
        
#ifdef OMNI_TIMER
    if (character == NSF9FunctionKey && !keyDownFlag) {
        // Log and reset the root timer.  We should currently only have the root on the stack.
        OTStackPopRoot();
        OTStackReportResults(NULL);
        OTStackReset();
        OTStackPushRoot(rootNode);
    }
#endif

    switch (character) {
        case 0x03:
            Sys_QueEvent(currentTime, SE_KEY, K_KP_ENTER, keyDownFlag, 0, NULL);
            break;
        case '\b':
        case '\177':
            Sys_QueEvent(currentTime, SE_KEY, K_BACKSPACE, keyDownFlag, 0, NULL);
            if (keyDownFlag) {
               Sys_QueEvent(currentTime, SE_CHAR, '\b', 0, 0, NULL);
            }
            break;
        case '\t':
            if (maybeHide())
                return;
            Sys_QueEvent(currentTime, SE_KEY, K_TAB, keyDownFlag, 0, NULL);
            if (keyDownFlag) {
                Sys_QueEvent(currentTime, SE_CHAR, '\t', 0, 0, NULL);
            }
            break;
        case '\r':
        case '\n':
            Sys_QueEvent(currentTime, SE_KEY, K_ENTER, keyDownFlag, 0, NULL);
            if (keyDownFlag) {
                Sys_QueEvent(currentTime, SE_CHAR, '\r', 0, 0, NULL);
            }
            break;
        case '\033':
            Sys_QueEvent(currentTime, SE_KEY, K_ESCAPE, keyDownFlag, 0, NULL);
            break;
        case ' ':
            Sys_QueEvent(currentTime, SE_KEY, K_SPACE, keyDownFlag, 0, NULL);
            if (keyDownFlag) {
                Sys_QueEvent(currentTime, SE_CHAR, ' ', 0, 0, NULL);
            }
            break;
        case NSUpArrowFunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_UPARROW, keyDownFlag, 0, NULL);
            break;
        case NSDownArrowFunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_DOWNARROW, keyDownFlag, 0, NULL);
            break;
        case NSLeftArrowFunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_LEFTARROW, keyDownFlag, 0, NULL);
            break;
        case NSRightArrowFunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_RIGHTARROW, keyDownFlag, 0, NULL);
            break;
        case NSF1FunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_F1, keyDownFlag, 0, NULL);
            break;
        case NSF2FunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_F2, keyDownFlag, 0, NULL);
            break;
        case NSF3FunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_F3, keyDownFlag, 0, NULL);
            break;
        case NSF4FunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_F4, keyDownFlag, 0, NULL);
            break;
        case NSF5FunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_F5, keyDownFlag, 0, NULL);
            break;
        case NSF6FunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_F6, keyDownFlag, 0, NULL);
            break;
        case NSF7FunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_F7, keyDownFlag, 0, NULL);
            break;
        case NSF8FunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_F8, keyDownFlag, 0, NULL);
            break;
        case NSF9FunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_F9, keyDownFlag, 0, NULL);
            break;
        case NSF10FunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_F10, keyDownFlag, 0, NULL);
            break;
        case NSF11FunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_F11, keyDownFlag, 0, NULL);
            break;
        case NSF12FunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_F12, keyDownFlag, 0, NULL);
            break;
        case NSF13FunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, '`', keyDownFlag, 0, NULL);
            if (keyDownFlag) {
                Sys_QueEvent(currentTime, SE_CHAR, '`', 0, 0, NULL);
            }
            break;
        case NSInsertFunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_INS, keyDownFlag, 0, NULL);
            break;
        case NSDeleteFunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_DEL, keyDownFlag, 0, NULL);
            break;
        case NSPageDownFunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_PGDN, keyDownFlag, 0, NULL);
            break;
        case NSPageUpFunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_PGUP, keyDownFlag, 0, NULL);
            break;
        case NSHomeFunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_HOME, keyDownFlag, 0, NULL);
            break;
        case NSEndFunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_END, keyDownFlag, 0, NULL);
            break;
        case NSPauseFunctionKey:
            Sys_QueEvent(currentTime, SE_KEY, K_PAUSE, keyDownFlag, 0, NULL);
            break;
        default:
            if ([event modifierFlags] & NSNumericPadKeyMask) {
                switch (character) {
                    case '0':
                        Sys_QueEvent(currentTime, SE_KEY, K_KP_INS, keyDownFlag, 0, NULL);
                        break;
                    case '1':
                        Sys_QueEvent(currentTime, SE_KEY, K_KP_END, keyDownFlag, 0, NULL);
                        break;
                    case '2':
                        Sys_QueEvent(currentTime, SE_KEY, K_KP_DOWNARROW, keyDownFlag, 0, NULL);
                        break;
                    case '3':
                        Sys_QueEvent(currentTime, SE_KEY, K_KP_PGDN, keyDownFlag, 0, NULL);
                        break;
                    case '4':
                        Sys_QueEvent(currentTime, SE_KEY, K_KP_LEFTARROW, keyDownFlag, 0, NULL);
                        break;
                    case '5':
                        Sys_QueEvent(currentTime, SE_KEY, K_KP_5, keyDownFlag, 0, NULL);
                        break;
                    case '6':
                        Sys_QueEvent(currentTime, SE_KEY, K_KP_RIGHTARROW, keyDownFlag, 0, NULL);
                        break;
                    case '7':
                        Sys_QueEvent(currentTime, SE_KEY, K_KP_HOME, keyDownFlag, 0, NULL);
                        break;
                    case '8':
                        Sys_QueEvent(currentTime, SE_KEY, K_KP_UPARROW, keyDownFlag, 0, NULL);
                        break;
                    case '9':
                        Sys_QueEvent(currentTime, SE_KEY, K_KP_PGUP, keyDownFlag, 0, NULL);
                        break;
                    case '.':
                    case ',':
                        Sys_QueEvent(currentTime, SE_KEY, K_KP_DEL, keyDownFlag, 0, NULL);
                        break;
                    case '+':
                        Sys_QueEvent(currentTime, SE_KEY, K_KP_PLUS, keyDownFlag, 0, NULL);
                        break;
                    case '-':
                        Sys_QueEvent(currentTime, SE_KEY, K_KP_MINUS, keyDownFlag, 0, NULL);
                        break;
                    case '*':
                        Sys_QueEvent(currentTime, SE_KEY, K_KP_STAR, keyDownFlag, 0, NULL);
                        break;
                    case '/':
                        Sys_QueEvent(currentTime, SE_KEY, K_KP_SLASH, keyDownFlag, 0, NULL);
                        break;
                    case '=':
                        Sys_QueEvent(currentTime, SE_KEY, K_KP_EQUALS, keyDownFlag, 0, NULL);
                        break;
                    default:
                        //NSLog(@"TODO: Implement character %d", (int)character);
                        break;
                 }       
            } else if (character >= 'a' && character <= 'z') {
                if (character == 'h') {
                    if (maybeHide())
                        return;
                }
                Sys_QueEvent(currentTime, SE_KEY, character, keyDownFlag, 0, NULL);
                if (keyDownFlag) {
                    Sys_QueEvent(currentTime, SE_CHAR, (char)character, 0, 0, NULL);
                }
            } else if (character >= 'A' && character <= 'Z') {
                Sys_QueEvent(currentTime, SE_KEY, 'a' + (character - 'A'), keyDownFlag, 0, NULL);
                if (keyDownFlag) {
                    Sys_QueEvent(currentTime, SE_CHAR, character, 0, 0, NULL);
                }
            } else if (character >= 32 && character < 127) {
                Sys_QueEvent(currentTime, SE_KEY, character, keyDownFlag, 0, NULL);
                if (keyDownFlag) {
                    Sys_QueEvent(currentTime, SE_CHAR, (char)character, 0, 0, NULL);
                }
            } else {
                //NSLog(@"TODO: Implement character %d", (int)character);
            }
            break;
    }
}

static inline void processKeyEvent(NSEvent *keyEvent, qboolean keyDownFlag, int currentTime)
{
    NSEventType eventType;
    NSString *characters;
    unsigned int characterIndex, characterCount;

    eventType = [keyEvent type];
    characters = [keyEvent charactersIgnoringModifiers];
    characterCount = [characters length];

    for (characterIndex = 0; characterIndex < characterCount; characterIndex++) {
        sendEventForCharacter(keyEvent, [characters characterAtIndex:characterIndex], keyDownFlag, currentTime);
    }
}

static inline void sendEventForMaskChangeInFlags(int quakeKey, unsigned int modifierMask, unsigned int newModifierFlags, int currentTime)
{
    BOOL oldHadModifier, newHasModifier;

    oldHadModifier = (currentModifierFlags & modifierMask) != 0;
    newHasModifier = (newModifierFlags & modifierMask) != 0;
    if (oldHadModifier != newHasModifier) {
        // NSLog(@"Key %d posted for modifier mask modifierMask", quakeKey);
        Sys_QueEvent(currentTime, SE_KEY, quakeKey, newHasModifier, 0, NULL);
    }
}

static inline void processFlagsChangedEvent(NSEvent *flagsChangedEvent, int currentTime)
{
    int newModifierFlags;

    newModifierFlags = [flagsChangedEvent modifierFlags];
    sendEventForMaskChangeInFlags(K_COMMAND, NSCommandKeyMask, newModifierFlags, currentTime);
    sendEventForMaskChangeInFlags(K_CAPSLOCK, NSAlphaShiftKeyMask, newModifierFlags, currentTime);
    sendEventForMaskChangeInFlags(K_ALT, NSAlternateKeyMask, newModifierFlags, currentTime);
    sendEventForMaskChangeInFlags(K_CTRL, NSControlKeyMask, newModifierFlags, currentTime);
    sendEventForMaskChangeInFlags(K_SHIFT, NSShiftKeyMask, newModifierFlags, currentTime);
    currentModifierFlags = newModifierFlags;
}

static inline void processSystemDefinedEvent(NSEvent *systemDefinedEvent, int currentTime)
{
    static int oldButtons = 0;
    int buttonsDelta;
    int buttons;
    int isDown;
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -