@@ -254,19 +254,30 @@ static void gil_call_method(PyObject* obj, const char* name)
254
254
PyGILState_Release (gstate);
255
255
}
256
256
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);
270
281
}
271
282
272
283
static bool backend_inited = false ;
@@ -1352,7 +1363,9 @@ - (void)windowDidResize: (NSNotification*)notification
1352
1363
1353
1364
- (void )windowWillClose : (NSNotification *)notification
1354
1365
{
1355
- PROCESS_EVENT (" CloseEvent" , " sO" , " close_event" , canvas);
1366
+ process_event (
1367
+ " CloseEvent" , " {s:s, s:O}" ,
1368
+ " name" , " close_event" , " canvas" , canvas);
1356
1369
}
1357
1370
1358
1371
- (BOOL )windowShouldClose : (NSNotification *)notification
@@ -1383,7 +1396,9 @@ - (void)mouseEntered:(NSEvent *)event
1383
1396
location = [self convertPoint: location fromView: nil ];
1384
1397
x = location.x * device_scale;
1385
1398
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);
1387
1402
}
1388
1403
1389
1404
- (void )mouseExited : (NSEvent *)event
@@ -1393,7 +1408,9 @@ - (void)mouseExited:(NSEvent *)event
1393
1408
location = [self convertPoint: location fromView: nil ];
1394
1409
x = location.x * device_scale;
1395
1410
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);
1397
1414
}
1398
1415
1399
1416
- (void )mouseDown : (NSEvent *)event
@@ -1429,8 +1446,10 @@ - (void)mouseDown:(NSEvent *)event
1429
1446
if ([event clickCount ] == 2 ) {
1430
1447
dblclick = 1 ;
1431
1448
}
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);
1434
1453
}
1435
1454
1436
1455
- (void )mouseUp : (NSEvent *)event
@@ -1451,8 +1470,10 @@ - (void)mouseUp:(NSEvent *)event
1451
1470
case NSEventTypeRightMouseUp: num = 3 ; break ;
1452
1471
default : return ; /* Unknown mouse event */
1453
1472
}
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);
1456
1477
}
1457
1478
1458
1479
- (void )mouseMoved : (NSEvent *)event
@@ -1462,7 +1483,9 @@ - (void)mouseMoved:(NSEvent *)event
1462
1483
location = [self convertPoint: location fromView: nil ];
1463
1484
x = location.x * device_scale;
1464
1485
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);
1466
1489
}
1467
1490
1468
1491
- (void )mouseDragged : (NSEvent *)event
@@ -1472,7 +1495,9 @@ - (void)mouseDragged:(NSEvent *)event
1472
1495
location = [self convertPoint: location fromView: nil ];
1473
1496
x = location.x * device_scale;
1474
1497
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);
1476
1501
}
1477
1502
1478
1503
- (void )rightMouseDown : (NSEvent *)event { [self mouseDown: event]; }
@@ -1589,9 +1614,13 @@ - (void)keyDown:(NSEvent*)event
1589
1614
int x = location.x * device_scale,
1590
1615
y = location.y * device_scale;
1591
1616
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);
1593
1620
} 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);
1595
1624
}
1596
1625
}
1597
1626
@@ -1603,9 +1632,13 @@ - (void)keyUp:(NSEvent*)event
1603
1632
int x = location.x * device_scale,
1604
1633
y = location.y * device_scale;
1605
1634
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);
1607
1638
} 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);
1609
1642
}
1610
1643
}
1611
1644
@@ -1620,8 +1653,10 @@ - (void)scrollWheel:(NSEvent*)event
1620
1653
NSPoint point = [self convertPoint: location fromView: nil ];
1621
1654
int x = (int )round (point.x * device_scale);
1622
1655
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);
1625
1660
}
1626
1661
1627
1662
- (BOOL )acceptsFirstResponder
0 commit comments