Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_extended_modifiers_mapper_osx.mm File Reference
#include "kis_extended_modifiers_mapper_osx.h"
import <QDebug>
import <QFlag>
import <qmutex.h>
import <AppKit/AppKit.h>
#include "krita_container_utils.h"

Go to the source code of this file.

Classes

class  ExtendedModifiers
 

Functions

void activateLocalMonitor (bool activate)
 
void processEvent (NSEvent *event)
 
QVector< Qt::Key > queryPressedKeysMac ()
 

Variables

static ExtendedModifiers::Modifiers extendedMods
 
static id localMonitor = 0
 
static QMutex mutex
 

Function Documentation

◆ activateLocalMonitor()

void activateLocalMonitor ( bool activate)

Definition at line 68 of file kis_extended_modifiers_mapper_osx.mm.

69{
70 if (activate) {
71 if (localMonitor) {
72 return;
73 }
74 NSEventMask eventMask = (NSEventMaskFlagsChanged | NSEventMaskKeyDown | NSEventMaskKeyUp | NSEventMaskLeftMouseUp
75 | NSEventMaskLeftMouseDown | NSEventMaskMouseEntered | NSEventMaskMouseExited );
76 localMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:eventMask handler:^(NSEvent *event)
77 {
78 mutex.lock();
79 processEvent(event);
80 mutex.unlock();
81
82 return event;
83 }];
84
85 } else {
87 if (localMonitor) {
88 [NSEvent removeMonitor:localMonitor];
89 localMonitor = 0;
90 }
91 }
92}
void processEvent(NSEvent *event)
static ExtendedModifiers::Modifiers extendedMods
static QMutex mutex

References extendedMods, localMonitor, mutex, ExtendedModifiers::None, and processEvent().

◆ processEvent()

void processEvent ( NSEvent * event)

Definition at line 39 of file kis_extended_modifiers_mapper_osx.mm.

40{
41 unsigned int eventType = [event type];
42
43 if (eventType == NSEventTypeKeyDown || eventType == NSEventTypeKeyUp) {
44 unsigned short keyCode = [event keyCode];
45
46 // virtual kbd codes
47 if(keyCode == 49) {
48 extendedMods.setFlag(ExtendedModifiers::Space, (eventType == NSEventTypeKeyDown));
49 } else if (keyCode == 15) {
50 extendedMods.setFlag(ExtendedModifiers::Key_R, (eventType == NSEventTypeKeyDown));
51 } else if (keyCode == 9) {
52 extendedMods.setFlag(ExtendedModifiers::Key_V, (eventType == NSEventTypeKeyDown));
53 }
54 }
55
56 if (eventType == NSEventTypeFlagsChanged) {
57 NSEventModifierFlags modifiers = [event modifierFlags];
58 extendedMods.setFlag(ExtendedModifiers::Shift, modifiers & NSEventModifierFlagShift);
59 extendedMods.setFlag(ExtendedModifiers::Command, modifiers & NSEventModifierFlagCommand);
60 extendedMods.setFlag(ExtendedModifiers::Control, modifiers & NSEventModifierFlagControl);
61 extendedMods.setFlag(ExtendedModifiers::Option, modifiers & NSEventModifierFlagOption);
62 }
63 if (eventType == NSEventTypeMouseExited) {
65 }
66}

References ExtendedModifiers::Command, ExtendedModifiers::Control, extendedMods, ExtendedModifiers::Key_R, ExtendedModifiers::Key_V, ExtendedModifiers::None, ExtendedModifiers::Option, ExtendedModifiers::Shift, and ExtendedModifiers::Space.

◆ queryPressedKeysMac()

QVector< Qt::Key > queryPressedKeysMac ( )

Definition at line 94 of file kis_extended_modifiers_mapper_osx.mm.

95{
96 QVector<Qt::Key> result;
97
98 mutex.lock();
100 result << Qt::Key_Space;
101 }
103 result << Qt::Key_R;
104 }
106 result << Qt::Key_V;
107 }
108
109 Qt::KeyboardModifiers modifiers = QGuiApplication::queryKeyboardModifiers();
110 if (modifiers.testFlag(Qt::ShiftModifier) || extendedMods.testFlag(ExtendedModifiers::Shift)) {
111 result << Qt::Key_Shift;
112 }
113 if (modifiers.testFlag(Qt::ControlModifier) || extendedMods.testFlag(ExtendedModifiers::Command)) {
114 result << Qt::Key_Control;
115 }
116 if (modifiers.testFlag(Qt::MetaModifier) || extendedMods.testFlag(ExtendedModifiers::Control)) {
117 result << Qt::Key_Meta;
118 }
119 if (modifiers.testFlag(Qt::AltModifier) || extendedMods.testFlag(ExtendedModifiers::Option)) {
120 result << Qt::Key_Alt;
121 }
122 mutex.unlock();
123
125
126 return result;
127}
void makeContainerUnique(C &container)

References ExtendedModifiers::Command, ExtendedModifiers::Control, extendedMods, ExtendedModifiers::Key_R, ExtendedModifiers::Key_V, KritaUtils::makeContainerUnique(), mutex, ExtendedModifiers::Option, ExtendedModifiers::Shift, and ExtendedModifiers::Space.

Variable Documentation

◆ extendedMods

ExtendedModifiers::Modifiers extendedMods
static

Definition at line 36 of file kis_extended_modifiers_mapper_osx.mm.

◆ localMonitor

id localMonitor = 0
static

Definition at line 34 of file kis_extended_modifiers_mapper_osx.mm.

◆ mutex

QMutex mutex
static

Definition at line 37 of file kis_extended_modifiers_mapper_osx.mm.