Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit d947ff4

Browse filesBrowse files
committed
Construct events with kwargs in macosx.
1 parent 33a0599 commit d947ff4
Copy full SHA for d947ff4

File tree

Expand file treeCollapse file tree

1 file changed

+63
-28
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+63
-28
lines changed

‎src/_macosx.m

Copy file name to clipboardExpand all lines: src/_macosx.m
+63-28Lines changed: 63 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -254,19 +254,30 @@ static void gil_call_method(PyObject* obj, const char* name)
254254
PyGILState_Release(gstate);
255255
}
256256

257-
#define PROCESS_EVENT(cls_name, fmt, ...) \
258-
{ \
259-
PyGILState_STATE gstate = PyGILState_Ensure(); \
260-
PyObject* module = NULL, * event = NULL, * result = NULL; \
261-
if (!(module = PyImport_ImportModule("matplotlib.backend_bases")) \
262-
|| !(event = PyObject_CallMethod(module, cls_name, fmt, __VA_ARGS__)) \
263-
|| !(result = PyObject_CallMethod(event, "_process", ""))) { \
264-
PyErr_Print(); \
265-
} \
266-
Py_XDECREF(module); \
267-
Py_XDECREF(event); \
268-
Py_XDECREF(result); \
269-
PyGILState_Release(gstate); \
257+
void process_event(char const* cls_name, char const* fmt, ...)
258+
{
259+
PyGILState_STATE gstate = PyGILState_Ensure();
260+
PyObject* module = NULL, * cls = NULL,
261+
* args = NULL, * kwargs = NULL,
262+
* event = NULL, * result = NULL;
263+
va_list argp;
264+
va_start(argp, fmt);
265+
if (!(module = PyImport_ImportModule("matplotlib.backend_bases"))
266+
|| !(cls = PyObject_GetAttrString(module, cls_name))
267+
|| !(args = PyTuple_New(0))
268+
|| !(kwargs = Py_VaBuildValue(fmt, argp))
269+
|| !(event = PyObject_Call(cls, args, kwargs))
270+
|| !(result = PyObject_CallMethod(event, "_process", ""))) {
271+
PyErr_Print();
272+
}
273+
va_end(argp);
274+
Py_XDECREF(module);
275+
Py_XDECREF(cls);
276+
Py_XDECREF(args);
277+
Py_XDECREF(kwargs);
278+
Py_XDECREF(event);
279+
Py_XDECREF(result);
280+
PyGILState_Release(gstate);
270281
}
271282

272283
static bool backend_inited = false;
@@ -1352,7 +1363,9 @@ - (void)windowDidResize: (NSNotification*)notification
13521363

13531364
- (void)windowWillClose:(NSNotification*)notification
13541365
{
1355-
PROCESS_EVENT("CloseEvent", "sO", "close_event", canvas);
1366+
process_event(
1367+
"CloseEvent", "{s:s, s:O}",
1368+
"name", "close_event", "canvas", canvas);
13561369
}
13571370

13581371
- (BOOL)windowShouldClose:(NSNotification*)notification
@@ -1383,7 +1396,9 @@ - (void)mouseEntered:(NSEvent *)event
13831396
location = [self convertPoint: location fromView: nil];
13841397
x = location.x * device_scale;
13851398
y = location.y * device_scale;
1386-
PROCESS_EVENT("LocationEvent", "sOii", "figure_enter_event", canvas, x, y);
1399+
process_event(
1400+
"LocationEvent", "{s:s, s:O, s:i, s:i}",
1401+
"name", "figure_enter_event", "canvas", canvas, "x", x, "y", y);
13871402
}
13881403

13891404
- (void)mouseExited:(NSEvent *)event
@@ -1393,7 +1408,9 @@ - (void)mouseExited:(NSEvent *)event
13931408
location = [self convertPoint: location fromView: nil];
13941409
x = location.x * device_scale;
13951410
y = location.y * device_scale;
1396-
PROCESS_EVENT("LocationEvent", "sOii", "figure_leave_event", canvas, x, y);
1411+
process_event(
1412+
"LocationEvent", "{s:s, s:O, s:i, s:i}",
1413+
"name", "figure_leave_event", "canvas", canvas, "x", x, "y", y);
13971414
}
13981415

13991416
- (void)mouseDown:(NSEvent *)event
@@ -1429,8 +1446,10 @@ - (void)mouseDown:(NSEvent *)event
14291446
if ([event clickCount] == 2) {
14301447
dblclick = 1;
14311448
}
1432-
PROCESS_EVENT("MouseEvent", "sOiiiOii", "button_press_event", canvas,
1433-
x, y, num, Py_None /* key */, 0 /* step */, dblclick);
1449+
process_event(
1450+
"MouseEvent", "{s:s, s:O, s:i, s:i, s:i, s:i}",
1451+
"name", "button_press_event", "canvas", canvas, "x", x, "y", y,
1452+
"num", num, "dblclick", dblclick);
14341453
}
14351454

14361455
- (void)mouseUp:(NSEvent *)event
@@ -1451,8 +1470,10 @@ - (void)mouseUp:(NSEvent *)event
14511470
case NSEventTypeRightMouseUp: num = 3; break;
14521471
default: return; /* Unknown mouse event */
14531472
}
1454-
PROCESS_EVENT("MouseEvent", "sOiii", "button_release_event", canvas,
1455-
x, y, num);
1473+
process_event(
1474+
"MouseEvent", "{s:s, s:O, s:i, s:i, s:i}",
1475+
"name", "button_release_event", "canvas", canvas, "x", x, "y", y,
1476+
"num", num);
14561477
}
14571478

14581479
- (void)mouseMoved:(NSEvent *)event
@@ -1462,7 +1483,9 @@ - (void)mouseMoved:(NSEvent *)event
14621483
location = [self convertPoint: location fromView: nil];
14631484
x = location.x * device_scale;
14641485
y = location.y * device_scale;
1465-
PROCESS_EVENT("MouseEvent", "sOii", "motion_notify_event", canvas, x, y);
1486+
process_event(
1487+
"MouseEvent", "{s:s, s:O, s:i, s:i}",
1488+
"name", "motion_notify_event", "canvas", canvas, "x", x, "y", y);
14661489
}
14671490

14681491
- (void)mouseDragged:(NSEvent *)event
@@ -1472,7 +1495,9 @@ - (void)mouseDragged:(NSEvent *)event
14721495
location = [self convertPoint: location fromView: nil];
14731496
x = location.x * device_scale;
14741497
y = location.y * device_scale;
1475-
PROCESS_EVENT("MouseEvent", "sOii", "motion_notify_event", canvas, x, y);
1498+
process_event(
1499+
"MouseEvent", "{s:s, s:O, s:i, s:i}",
1500+
"name", "motion_notify_event", "canvas", canvas, "x", x, "y", y);
14761501
}
14771502

14781503
- (void)rightMouseDown:(NSEvent *)event { [self mouseDown: event]; }
@@ -1589,9 +1614,13 @@ - (void)keyDown:(NSEvent*)event
15891614
int x = location.x * device_scale,
15901615
y = location.y * device_scale;
15911616
if (s) {
1592-
PROCESS_EVENT("KeyEvent", "sOsii", "key_press_event", canvas, s, x, y);
1617+
process_event(
1618+
"KeyEvent", "{s:s, s:O, s:s, s:i, s:i}",
1619+
"name", "key_press_event", "canvas", canvas, "key", s, "x", x, "y", y);
15931620
} else {
1594-
PROCESS_EVENT("KeyEvent", "sOOii", "key_press_event", canvas, Py_None, x, y);
1621+
process_event(
1622+
"KeyEvent", "{s:s, s:O, s:O, s:i, s:i}",
1623+
"name", "key_press_event", "canvas", canvas, "key", Py_None, "x", x, "y", y);
15951624
}
15961625
}
15971626

@@ -1603,9 +1632,13 @@ - (void)keyUp:(NSEvent*)event
16031632
int x = location.x * device_scale,
16041633
y = location.y * device_scale;
16051634
if (s) {
1606-
PROCESS_EVENT("KeyEvent", "sOsii", "key_release_event", canvas, s, x, y);
1635+
process_event(
1636+
"KeyEvent", "{s:s, s:O, s:s, s:i, s:i}",
1637+
"name", "key_release_event", "canvas", canvas, "key", s, "x", x, "y", y);
16071638
} else {
1608-
PROCESS_EVENT("KeyEvent", "sOOii", "key_release_event", canvas, Py_None, x, y);
1639+
process_event(
1640+
"KeyEvent", "{s:s, s:O, s:O, s:i, s:i}",
1641+
"name", "key_release_event", "canvas", canvas, "key", Py_None, "x", x, "y", y);
16091642
}
16101643
}
16111644

@@ -1620,8 +1653,10 @@ - (void)scrollWheel:(NSEvent*)event
16201653
NSPoint point = [self convertPoint: location fromView: nil];
16211654
int x = (int)round(point.x * device_scale);
16221655
int y = (int)round(point.y * device_scale - 1);
1623-
PROCESS_EVENT("MouseEvent", "sOiiOOi", "scroll_event", canvas,
1624-
x, y, Py_None /* button */, Py_None /* key */, step);
1656+
process_event(
1657+
"MouseEvent", "{s:s, s:O, s:i, s:i, s:i}",
1658+
"name", "scroll_event", "canvas", canvas,
1659+
"x", x, "y", y, "step", step);
16251660
}
16261661

16271662
- (BOOL)acceptsFirstResponder

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.