diff options
author | Frank Gevaerts <frank@gevaerts.be> | 2010-02-16 17:34:48 +0000 |
---|---|---|
committer | Frank Gevaerts <frank@gevaerts.be> | 2010-02-16 17:34:48 +0000 |
commit | f615fb43d5321a37b8ba7f767c59d6bc0fe6e9b5 (patch) | |
tree | 94c1db09544b398ad15773c9923331a02e6cd92f | |
parent | 13035a48afe35340828cccad2a2b0569434f155d (diff) | |
download | rockbox-f615fb43d5321a37b8ba7f767c59d6bc0fe6e9b5.tar.gz rockbox-f615fb43d5321a37b8ba7f767c59d6bc0fe6e9b5.zip |
Turn the simulator background into a clickable area. i.e. you click on the play button to press play. It also maps mouse scrollwheel events to rockbox scrollwheel events. This facilitates testing because you don't have to move your hand between the mouse and keyboard.
Author: Fred Bauer
Flyspray: FS#11008
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24696 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | docs/UISIMULATOR | 7 | ||||
-rw-r--r-- | uisimulator/sdl/button-sdl.h | 6 | ||||
-rw-r--r-- | uisimulator/sdl/button.c | 449 | ||||
-rw-r--r-- | uisimulator/sdl/uisdl.c | 108 |
4 files changed, 555 insertions, 15 deletions
diff --git a/docs/UISIMULATOR b/docs/UISIMULATOR index fc383edc85..0a7888b7b6 100644 --- a/docs/UISIMULATOR +++ b/docs/UISIMULATOR | |||
@@ -50,3 +50,10 @@ | |||
50 | 50 | ||
51 | The keyboard's numerical keypad is used to simulate the target keypad. See | 51 | The keyboard's numerical keypad is used to simulate the target keypad. See |
52 | the output rockboxui displays on start for details. | 52 | the output rockboxui displays on start for details. |
53 | |||
54 | 5. Mouse Input | ||
55 | |||
56 | Clicking on the button images on the background will simulate pressing the | ||
57 | appropriate buttons. On scroll wheel targts the mouse wheel will simulate | ||
58 | scroll wheel motion. | ||
59 | |||
diff --git a/uisimulator/sdl/button-sdl.h b/uisimulator/sdl/button-sdl.h index 8159d24729..948af62c5b 100644 --- a/uisimulator/sdl/button-sdl.h +++ b/uisimulator/sdl/button-sdl.h | |||
@@ -32,6 +32,12 @@ | |||
32 | #undef button_init_device | 32 | #undef button_init_device |
33 | #define button_init_device() | 33 | #define button_init_device() |
34 | 34 | ||
35 | struct button_map { | ||
36 | int button, x, y, radius; | ||
37 | char *description; | ||
38 | }; | ||
39 | |||
40 | int xy2button( int x, int y); | ||
35 | bool button_hold(void); | 41 | bool button_hold(void); |
36 | void button_init_sdl(void); | 42 | void button_init_sdl(void); |
37 | #undef button_init_device | 43 | #undef button_init_device |
diff --git a/uisimulator/sdl/button.c b/uisimulator/sdl/button.c index a102925ed2..52646220e7 100644 --- a/uisimulator/sdl/button.c +++ b/uisimulator/sdl/button.c | |||
@@ -1092,6 +1092,9 @@ void button_event(int key, bool pressed) | |||
1092 | case SDLK_DOWN: | 1092 | case SDLK_DOWN: |
1093 | new_btn = BUTTON_DOWN; | 1093 | new_btn = BUTTON_DOWN; |
1094 | break; | 1094 | break; |
1095 | case SDLK_KP1: | ||
1096 | new_btn = BUTTON_MENU; | ||
1097 | break; | ||
1095 | case SDLK_KP5: | 1098 | case SDLK_KP5: |
1096 | case SDLK_SPACE: | 1099 | case SDLK_SPACE: |
1097 | new_btn = BUTTON_PLAY; | 1100 | new_btn = BUTTON_PLAY; |
@@ -1392,3 +1395,449 @@ void button_init_sdl(void) | |||
1392 | #endif | 1395 | #endif |
1393 | } | 1396 | } |
1394 | 1397 | ||
1398 | /* Button maps: simulated key, x, y, radius, name */ | ||
1399 | /* Run sim with --mapping to get coordinates */ | ||
1400 | /* or --debugbuttons to check */ | ||
1401 | /* The First matching button is returned */ | ||
1402 | |||
1403 | #ifdef SANSA_FUZE | ||
1404 | struct button_map bm[] = { | ||
1405 | { SDLK_KP8, 70, 265, 35, "Scroll Back" }, | ||
1406 | { SDLK_KP9, 141, 255, 31, "Play" }, | ||
1407 | { SDLK_KP_MULTIPLY, 228, 267, 18, "Home" }, | ||
1408 | { SDLK_LEFT, 69, 329, 31, "Left" }, | ||
1409 | { SDLK_SPACE, 141, 330, 20, "Select" }, | ||
1410 | { SDLK_RIGHT, 214, 331, 23, "Right" }, | ||
1411 | { SDLK_KP3, 142, 406, 30, "Menu" }, | ||
1412 | { SDLK_DOWN, 221, 384, 24, "Scroll Fwd" }, | ||
1413 | { SDLK_KP_MINUS, 270, 299, 25, "Power" }, | ||
1414 | { SDLK_h, 269, 358, 26, "Hold" }, | ||
1415 | { 0, 0, 0, 0, "None" } | ||
1416 | }; | ||
1417 | #elif defined (SANSA_CLIP) | ||
1418 | struct button_map bm[] = { | ||
1419 | { SDLK_KP_MULTIPLY, 165, 158, 17, "Home" }, | ||
1420 | { SDLK_KP5, 102, 230, 29, "Select" }, | ||
1421 | { SDLK_KP8, 100, 179, 25, "Play" }, | ||
1422 | { SDLK_KP4, 53, 231, 21, "Left" }, | ||
1423 | { SDLK_KP6, 147, 232, 19, "Right" }, | ||
1424 | { SDLK_KP2, 105, 275, 22, "Menu" }, | ||
1425 | { 0, 0, 0, 0, "None" } | ||
1426 | }; | ||
1427 | #elif defined (SANSA_C200) || defined(SANSA_C200V2) | ||
1428 | struct button_map bm[] = { | ||
1429 | |||
1430 | { SDLK_KP7, 84, 7, 21, "Vol Down" }, | ||
1431 | { SDLK_KP9, 158, 7, 20, "Vol Up" }, | ||
1432 | { SDLK_KP1, 173, 130, 27, "Record" }, | ||
1433 | { SDLK_KP5, 277, 75, 21, "Select" }, | ||
1434 | { SDLK_KP4, 233, 75, 24, "Left" }, | ||
1435 | { SDLK_KP6, 313, 74, 18, "Right" }, | ||
1436 | { SDLK_KP8, 276, 34, 15, "Play" }, | ||
1437 | { SDLK_KP2, 277, 119, 17, "Down" }, | ||
1438 | { SDLK_KP3, 314, 113, 19, "Menu" }, | ||
1439 | { 0, 0, 0, 0, "None" } | ||
1440 | }; | ||
1441 | #elif defined (SANSA_E200V2) || defined(SANSA_E200) | ||
1442 | struct button_map bm[] = { | ||
1443 | { SDLK_KP7, 5, 92, 18, "Record" }, | ||
1444 | { SDLK_KP9, 128, 295, 43, "Play" }, | ||
1445 | { SDLK_KP4, 42, 380, 33, "Left" }, | ||
1446 | { SDLK_KP5, 129, 378, 36, "Select" }, | ||
1447 | { SDLK_KP6, 218, 383, 30, "Right" }, | ||
1448 | { SDLK_KP3, 129, 461, 29, "Down" }, | ||
1449 | { SDLK_KP1, 55, 464, 20, "Menu" }, | ||
1450 | { SDLK_KP8, 92, 338, 17, "Scroll Back" }, | ||
1451 | { SDLK_KP2, 167, 342, 17, "Scroll Fwd" }, | ||
1452 | { 0, 0, 0, 0, "None" } | ||
1453 | }; | ||
1454 | #elif defined (SANSA_M200V4) | ||
1455 | struct button_map bm[] = { | ||
1456 | { SDLK_KP_PLUS, 54, 14, 16, "Power" }, | ||
1457 | { SDLK_KP7, 96, 13, 12, "Vol Down" }, | ||
1458 | { SDLK_KP9, 139, 14, 14, "Vol Up" }, | ||
1459 | { SDLK_KP5, 260, 82, 20, "Select" }, | ||
1460 | { SDLK_KP8, 258, 35, 30, "Play" }, | ||
1461 | { SDLK_KP4, 214, 84, 25, "Left" }, | ||
1462 | { SDLK_KP6, 300, 83, 24, "Right" }, | ||
1463 | { SDLK_KP2, 262, 125, 28, "Repeat" }, | ||
1464 | { SDLK_h, 113, 151, 21, "Hold" }, | ||
1465 | { 0, 0, 0, 0, "None" } | ||
1466 | }; | ||
1467 | #elif defined (IPOD_VIDEO) | ||
1468 | struct button_map bm[] = { | ||
1469 | { SDLK_KP_PERIOD, 174, 350, 35, "Menu" }, | ||
1470 | { SDLK_KP8, 110, 380, 33, "Scroll Back" }, | ||
1471 | { SDLK_KP2, 234, 377, 34, "Scroll Fwd" }, | ||
1472 | { SDLK_KP4, 78, 438, 47, "Left" }, | ||
1473 | { SDLK_KP5, 172, 435, 43, "Select" }, | ||
1474 | { SDLK_KP6, 262, 438, 52, "Right" }, | ||
1475 | { SDLK_KP_PLUS, 172, 519, 43, "Play" }, | ||
1476 | { 0, 0, 0 , 0, "None" } | ||
1477 | }; | ||
1478 | #elif defined (IPOD_MINI) || defined(IPOD_MINI2G) | ||
1479 | struct button_map bm[] = { | ||
1480 | { SDLK_KP5, 92, 267, 29, "Select" }, | ||
1481 | { SDLK_KP4, 31, 263, 37, "Left" }, | ||
1482 | { SDLK_KP6, 150, 268, 33, "Right" }, | ||
1483 | { SDLK_KP_PERIOD, 93, 209, 30, "Menu" }, | ||
1484 | { SDLK_KP_PLUS, 93, 324, 25, "Play" }, | ||
1485 | { SDLK_KP8, 53, 220, 29, "Scroll Back" }, | ||
1486 | { SDLK_KP2, 134, 219, 31, "Scroll Fwd" }, | ||
1487 | { 0, 0, 0 , 0, "None" } | ||
1488 | }; | ||
1489 | #elif defined (IPOD_3G) | ||
1490 | struct button_map bm[] = { | ||
1491 | { SDLK_KP5, 108, 296, 26, "Select" }, | ||
1492 | { SDLK_KP8, 70, 255, 26, "Scroll Back" }, | ||
1493 | { SDLK_KP2, 149, 256, 28, "Scroll Fwd" }, | ||
1494 | { SDLK_KP4, 27, 186, 22, "Left" }, | ||
1495 | { SDLK_KP_PERIOD, 82, 185, 22, "Menu" }, | ||
1496 | { SDLK_KP_PERIOD, 133, 185, 21, "Play" }, | ||
1497 | { SDLK_KP6, 189, 188, 21, "Right" }, | ||
1498 | { 0, 0, 0 , 0, "None" } | ||
1499 | }; | ||
1500 | #elif defined (IPOD_4G) | ||
1501 | struct button_map bm[] = { | ||
1502 | { SDLK_KP5, 96, 269, 27, "Select" }, | ||
1503 | { SDLK_KP4, 39, 267, 30, "Left" }, | ||
1504 | { SDLK_KP6, 153, 270, 27, "Right" }, | ||
1505 | { SDLK_KP_PERIOD, 96, 219, 30, "Menu" }, | ||
1506 | { SDLK_KP_PLUS, 95, 326, 27, "Play" }, | ||
1507 | { SDLK_KP8, 57, 233, 29, "Scroll Back" }, | ||
1508 | { SDLK_KP2, 132, 226, 29, "Scroll Fwd" }, | ||
1509 | { 0, 0, 0 , 0, "None" } | ||
1510 | }; | ||
1511 | #elif defined (IPOD_COLOR) | ||
1512 | struct button_map bm[] = { | ||
1513 | { SDLK_KP5, 128, 362, 35, "Select" }, | ||
1514 | { SDLK_KP4, 55, 358, 38, "Left" }, | ||
1515 | { SDLK_KP6, 203, 359, 39, "Right" }, | ||
1516 | { SDLK_KP_PERIOD, 128, 282, 34, "Menu" }, | ||
1517 | { SDLK_KP_PLUS, 129, 439, 41, "Play" }, | ||
1518 | { SDLK_KP8, 76, 309, 34, "Scroll Back" }, | ||
1519 | { SDLK_KP2, 182, 311, 45, "Scroll Fwd" }, | ||
1520 | { 0, 0, 0 , 0, "None" } | ||
1521 | }; | ||
1522 | #elif defined (IPOD_1G2G) | ||
1523 | struct button_map bm[] = { | ||
1524 | { SDLK_KP5, 112, 265, 31, "Select" }, | ||
1525 | { SDLK_KP8, 74, 224, 28, "Scroll Back" }, | ||
1526 | { SDLK_KP2, 146, 228, 28, "Scroll Fwd" }, | ||
1527 | /* Dummy button to make crescent shape */ | ||
1528 | { SDLK_y, 112, 265, 76, "None" }, | ||
1529 | { SDLK_KP8, 74, 224, 28, "Scroll Back" }, | ||
1530 | { SDLK_KP2, 146, 228, 28, "Scroll Fwd" }, | ||
1531 | { SDLK_KP6, 159, 268, 64, "Right" }, | ||
1532 | { SDLK_KP4, 62, 266, 62, "Left" }, | ||
1533 | { SDLK_KP_PERIOD, 111, 216, 64, "Menu" }, | ||
1534 | { SDLK_KP_PLUS, 111, 326, 55, "Down" }, | ||
1535 | { 0, 0, 0 , 0, "None" } | ||
1536 | }; | ||
1537 | #elif defined (IPOD_NANO) | ||
1538 | struct button_map bm[] = { | ||
1539 | { SDLK_KP5, 98, 316, 37, "Select" }, | ||
1540 | { SDLK_KP4, 37, 312, 28, "Left" }, | ||
1541 | { SDLK_KP6, 160, 313, 25, "Right" }, | ||
1542 | { SDLK_KP_PERIOD,102, 256, 23, "Menu" }, | ||
1543 | { SDLK_KP_PLUS, 99, 378, 28, "Play" }, | ||
1544 | { SDLK_KP8, 58, 272, 24, "Scroll Back" }, | ||
1545 | { SDLK_KP2, 141, 274, 22, "Scroll Fwd" }, | ||
1546 | { 0, 0, 0 , 0, "None" } | ||
1547 | }; | ||
1548 | #elif defined (IPOD_NANO2G) | ||
1549 | struct button_map bm[] = { | ||
1550 | { SDLK_KP5, 118, 346, 37, "Select" }, | ||
1551 | { SDLK_KP4, 51, 345, 28, "Left" }, | ||
1552 | { SDLK_KP6, 180, 346, 26, "Right" }, | ||
1553 | { SDLK_KP_PERIOD, 114, 286, 23, "Menu" }, | ||
1554 | { SDLK_KP_PLUS, 115, 412, 27, "Down" }, | ||
1555 | { SDLK_KP8, 67, 303, 28, "Scroll Back" }, | ||
1556 | { SDLK_KP2, 163, 303, 27, "Scroll Fwd" }, | ||
1557 | { 0, 0, 0 , 0, "None" } | ||
1558 | }; | ||
1559 | #elif defined (COWON_D2) | ||
1560 | struct button_map bm[] = { | ||
1561 | { SDLK_DELETE, 51, 14, 17, "Power" }, | ||
1562 | { SDLK_h, 138, 14, 16, "Hold" }, | ||
1563 | { SDLK_MINUS, 320, 14, 10, "Minus" }, | ||
1564 | { SDLK_INSERT, 347, 13, 13, "Menu" }, | ||
1565 | { SDLK_KP_PLUS, 374, 14, 12, "Plus" }, | ||
1566 | { 0, 0, 0, 0, "None" } | ||
1567 | }; | ||
1568 | #elif defined (IAUDIO_M3) | ||
1569 | struct button_map bm[] = { | ||
1570 | { SDLK_KP5, 256, 72, 29, "Play" }, | ||
1571 | { SDLK_KP6, 255, 137, 28, "Right" }, | ||
1572 | { SDLK_KP4, 257, 201, 26, "Left" }, | ||
1573 | { SDLK_KP8, 338, 31, 27, "Up" }, | ||
1574 | { SDLK_KP2, 339, 92, 23, "Down" }, | ||
1575 | { SDLK_KP_DIVIDE, 336, 147, 23, "Rec" }, | ||
1576 | { SDLK_h, 336, 212, 30, "Hold" }, | ||
1577 | { 0, 0, 0, 0, "None" } | ||
1578 | }; | ||
1579 | #elif defined (IAUDIO_M5) | ||
1580 | struct button_map bm[] = { | ||
1581 | { SDLK_KP_ENTER, 333, 41, 17, "Enter" }, | ||
1582 | { SDLK_h, 334, 74, 21, "Hold" }, | ||
1583 | { SDLK_KP_DIVIDE, 333, 142, 24, "Record" }, | ||
1584 | { SDLK_KP_PLUS, 332, 213, 20, "Play" }, | ||
1585 | { SDLK_KP5, 250, 291, 19, "Select" }, | ||
1586 | { SDLK_KP8, 249, 236, 32, "Up" }, | ||
1587 | { SDLK_KP4, 194, 292, 29, "Left" }, | ||
1588 | { SDLK_KP6, 297, 290, 27, "Right" }, | ||
1589 | { SDLK_KP2, 252, 335, 28, "Down" }, | ||
1590 | { 0, 0, 0, 0, "None" } | ||
1591 | }; | ||
1592 | #elif defined (IAUDIO_7) | ||
1593 | struct button_map bm[] = { | ||
1594 | { 0, 0, 0, 0, "None" } | ||
1595 | }; | ||
1596 | #elif defined (IAUDIO_X5) | ||
1597 | struct button_map bm[] = { | ||
1598 | { SDLK_KP_ENTER, 275, 38, 17, "Power" }, | ||
1599 | { SDLK_h, 274, 83, 16, "Hold" }, | ||
1600 | { SDLK_KP_DIVIDE, 276, 128, 22, "Record" }, | ||
1601 | { SDLK_KP_PLUS, 274, 186, 22, "Play" }, | ||
1602 | { SDLK_KP5, 200, 247, 16, "Select" }, | ||
1603 | { SDLK_KP8, 200, 206, 16, "Up" }, | ||
1604 | { SDLK_KP4, 163, 248, 19, "Left" }, | ||
1605 | { SDLK_KP6, 225, 247, 24, "Right" }, | ||
1606 | { SDLK_KP2, 199, 279, 20, "Down" }, | ||
1607 | { 0, 0, 0, 0, "None" } | ||
1608 | }; | ||
1609 | #elif defined (ARCHOS_PLAYER) | ||
1610 | struct button_map bm[] = { | ||
1611 | { SDLK_KP_PLUS, 79, 252, 23, "On" }, | ||
1612 | { SDLK_KP_PERIOD, 81, 310, 20, "Menu" }, | ||
1613 | { SDLK_KP8, 154, 237, 28, "Play" }, | ||
1614 | { SDLK_KP4, 121, 282, 23, "Left" }, | ||
1615 | { SDLK_KP6, 187, 282, 22, "Right" }, | ||
1616 | { SDLK_KP2, 157, 312, 20, "Down" }, | ||
1617 | { 0, 0, 0, 0, "None" } | ||
1618 | }; | ||
1619 | #elif defined (ARCHOS_RECORDER) | ||
1620 | struct button_map bm[] = { | ||
1621 | { SDLK_F1, 94, 205, 22, "F1" }, | ||
1622 | { SDLK_F2, 136, 204, 21, "F2" }, | ||
1623 | { SDLK_F3, 174, 204, 24, "F3" }, | ||
1624 | { SDLK_KP_PLUS, 75, 258, 19, "On" }, | ||
1625 | { SDLK_KP_ENTER, 76, 307, 15, "Off" }, | ||
1626 | { SDLK_KP5, 151, 290, 20, "Select" }, | ||
1627 | { SDLK_KP8, 152, 251, 23, "Up" }, | ||
1628 | { SDLK_KP4, 113, 288, 26, "Left" }, | ||
1629 | { SDLK_KP6, 189, 291, 23, "Right" }, | ||
1630 | { SDLK_KP2, 150, 327, 27, "Down" }, | ||
1631 | { 0, 0, 0, 0, "None" } | ||
1632 | }; | ||
1633 | #elif defined (ARCHOS_FMRECORDER) || defined (ARCHOS_RECORDERV2) | ||
1634 | struct button_map bm[] = { | ||
1635 | { SDLK_F1, 88, 210, 28, "F1" }, | ||
1636 | { SDLK_F2, 144, 212, 28, "F2" }, | ||
1637 | { SDLK_F3, 197, 212, 28, "F3" }, | ||
1638 | { SDLK_KP5, 144, 287, 21, "Select" }, | ||
1639 | { SDLK_KP_PLUS, 86, 320, 13, "Menu" }, | ||
1640 | { SDLK_KP_ENTER, 114, 347, 13, "Stop" }, | ||
1641 | { SDLK_y, 144, 288, 31, "None" }, | ||
1642 | { SDLK_KP8, 144, 259, 25, "Up" }, | ||
1643 | { SDLK_KP2, 144, 316, 31, "Down" }, | ||
1644 | { SDLK_KP6, 171, 287, 32, "Right" }, | ||
1645 | { SDLK_KP4, 117, 287, 31, "Left" }, | ||
1646 | { 0, 0, 0, 0, "None" } | ||
1647 | }; | ||
1648 | #elif defined (ARCHOS_ONDIOSP) || defined (ARCHOS_ONDIOFM) | ||
1649 | struct button_map bm[] = { | ||
1650 | { SDLK_KP_ENTER, 75, 23, 30, "Enter" }, | ||
1651 | { SDLK_KP8, 75, 174, 33, "KP8" }, | ||
1652 | { SDLK_KP4, 26, 186, 48, "KP4" }, | ||
1653 | { SDLK_KP6, 118, 196, 32, "KP6" }, | ||
1654 | { SDLK_KP2, 75, 234, 16, "KP2" }, | ||
1655 | { SDLK_KP_PERIOD, 54, 250, 24, "Period" }, | ||
1656 | { 0, 0, 0, 0, "None" } | ||
1657 | }; | ||
1658 | #elif defined (IRIVER_H10) | ||
1659 | struct button_map bm[] = { | ||
1660 | { SDLK_KP_PLUS, 38, 70, 37, "Power" }, | ||
1661 | { SDLK_KP4, 123, 194, 26, "Cancel" }, | ||
1662 | { SDLK_KP6, 257, 195, 34, "Select" }, | ||
1663 | { SDLK_KP8, 190, 221, 28, "Up" }, | ||
1664 | { SDLK_KP2, 192, 320, 27, "Down" }, | ||
1665 | { SDLK_KP_DIVIDE, 349, 49, 20, "Rew" }, | ||
1666 | { SDLK_KP5, 349, 96, 20, "Play" }, | ||
1667 | { SDLK_KP_MULTIPLY, 350, 141, 23, "FF" }, | ||
1668 | { 0, 0, 0, 0, "None" } | ||
1669 | }; | ||
1670 | #elif defined (IRIVER_H10_5GB) | ||
1671 | struct button_map bm[] = { | ||
1672 | { SDLK_KP_PLUS, 34, 76, 23, "Power" }, | ||
1673 | { SDLK_KP4, 106, 222, 28, "Cancel" }, | ||
1674 | { SDLK_KP6, 243, 220, 31, "Select" }, | ||
1675 | { SDLK_KP8, 176, 254, 34, "Up" }, | ||
1676 | { SDLK_KP2, 175, 371, 35, "Down" }, | ||
1677 | { SDLK_KP_DIVIDE, 319, 63, 26, "Rew" }, | ||
1678 | { SDLK_KP5, 320, 124, 26, "Play" }, | ||
1679 | { SDLK_KP_MULTIPLY, 320, 181, 32, "FF" }, | ||
1680 | { 0, 0, 0, 0, "None" } | ||
1681 | }; | ||
1682 | #elif defined (IRIVER_H120) || defined (IRIVER_H100) | ||
1683 | struct button_map bm[] = { | ||
1684 | { SDLK_KP_DIVIDE, 46, 162, 13, "Record" }, | ||
1685 | { SDLK_KP_PLUS, 327, 36, 16, "Play" }, | ||
1686 | { SDLK_KP_ENTER, 330, 99, 18, "Stop" }, | ||
1687 | { SDLK_KP_PERIOD, 330, 163, 18, "AB" }, | ||
1688 | { SDLK_KP5, 186, 227, 27, "5" }, | ||
1689 | { SDLK_KP8, 187, 185, 19, "8" }, | ||
1690 | { SDLK_KP4, 142, 229, 23, "4" }, | ||
1691 | { SDLK_KP6, 231, 229, 22, "6" }, | ||
1692 | { SDLK_KP2, 189, 272, 28, "2" }, | ||
1693 | /* Remote Buttons */ | ||
1694 | { SDLK_KP_ENTER, 250, 404, 20, "Stop" }, | ||
1695 | { SDLK_SPACE, 285, 439, 29, "Space" }, | ||
1696 | { SDLK_h, 336, 291, 24, "Hold" }, | ||
1697 | { 0, 0, 0, 0, "None" } | ||
1698 | }; | ||
1699 | #elif defined (IRIVER_H300) | ||
1700 | struct button_map bm[] = { | ||
1701 | { SDLK_KP_PLUS, 56, 335, 20, "Play" }, | ||
1702 | { SDLK_KP8, 140, 304, 29, "Up" }, | ||
1703 | { SDLK_KP_DIVIDE, 233, 331, 23, "Record" }, | ||
1704 | { SDLK_KP_ENTER, 54, 381, 24, "Stop" }, | ||
1705 | { SDLK_KP4, 100, 353, 17, "Left" }, | ||
1706 | { SDLK_KP5, 140, 351, 19, "Navi" }, | ||
1707 | { SDLK_KP6, 185, 356, 19, "Right" }, | ||
1708 | { SDLK_KP_PERIOD, 230, 380, 20, "AB" }, | ||
1709 | { SDLK_KP2, 142, 402, 24, "Down" }, | ||
1710 | { SDLK_KP_ENTER, 211, 479, 21, "Stop" }, | ||
1711 | { SDLK_KP_PLUS, 248, 513, 29, "Play" }, | ||
1712 | { 0, 0, 0, 0, "None" } | ||
1713 | }; | ||
1714 | #elif defined (MROBE_500) | ||
1715 | struct button_map bm[] = { | ||
1716 | { SDLK_KP9, 171, 609, 9, "Play" }, | ||
1717 | { SDLK_KP4, 158, 623, 9, "Left" }, | ||
1718 | { SDLK_KP6, 184, 622, 9, "Right" }, | ||
1719 | { SDLK_KP7, 171, 638, 11, "Menu" }, | ||
1720 | { 0, 0, 0, 0, "None" } | ||
1721 | }; | ||
1722 | #elif defined (MROBE_100) | ||
1723 | struct button_map bm[] = { | ||
1724 | { SDLK_KP7, 80, 233, 30, "Menu" }, | ||
1725 | { SDLK_KP8, 138, 250, 19, "Up" }, | ||
1726 | { SDLK_KP9, 201, 230, 27, "Play" }, | ||
1727 | { SDLK_KP4, 63, 305, 25, "Left" }, | ||
1728 | { SDLK_KP5, 125, 309, 28, "Select" }, | ||
1729 | { SDLK_KP6, 200, 307, 35, "Right" }, | ||
1730 | { SDLK_KP1, 52, 380, 32, "Display" }, | ||
1731 | { SDLK_KP2, 125, 363, 30, "Down" }, | ||
1732 | { SDLK_KP9, 168, 425, 10, "Play" }, | ||
1733 | { SDLK_KP4, 156, 440, 11, "Left" }, | ||
1734 | { SDLK_KP6, 180, 440, 13, "Right" }, | ||
1735 | { SDLK_KP7, 169, 452, 10, "Menu" }, | ||
1736 | { SDLK_KP_MULTIPLY, 222, 15, 16, "Power" }, | ||
1737 | { 0, 0, 0, 0, "None" } | ||
1738 | }; | ||
1739 | #elif defined (GIGABEAT_F) | ||
1740 | struct button_map bm[] = { | ||
1741 | { SDLK_KP_PLUS, 361, 187, 22, "Power" }, | ||
1742 | { SDLK_KP_PERIOD, 361, 270, 17, "Menu" }, | ||
1743 | { SDLK_KP9, 365, 345, 26, "Vol Up" }, | ||
1744 | { SDLK_KP3, 363, 433, 25, "Vol Down" }, | ||
1745 | { SDLK_KP_ENTER, 365, 520, 19, "A" }, | ||
1746 | { SDLK_KP8, 167, 458, 35, "Up" }, | ||
1747 | { SDLK_KP4, 86, 537, 29, "Left" }, | ||
1748 | { SDLK_KP5, 166, 536, 30, "Select" }, | ||
1749 | { SDLK_KP6, 248, 536, 30, "Right" }, | ||
1750 | { SDLK_KP2, 169, 617, 28, "Down" }, | ||
1751 | { 0, 0, 0, 0, "None" } | ||
1752 | }; | ||
1753 | #elif defined (GIGABEAT_S) | ||
1754 | struct button_map bm[] = { | ||
1755 | { SDLK_KP_PLUS, 416, 383, 23, "Play" }, | ||
1756 | { SDLK_KP7, 135, 442, 46, "Back" }, | ||
1757 | { SDLK_KP9, 288, 447, 35, "Menu" }, | ||
1758 | { SDLK_KP8, 214, 480, 32, "Up" }, | ||
1759 | { SDLK_KP4, 128, 558, 33, "Left" }, | ||
1760 | { SDLK_KP5, 214, 556, 34, "Select" }, | ||
1761 | { SDLK_KP6, 293, 558, 35, "Right" }, | ||
1762 | { SDLK_KP2, 214, 637, 38, "Down" }, | ||
1763 | { 0, 0, 0, 0, "None" } | ||
1764 | }; | ||
1765 | #elif defined (SAMSUNG_YH820) | ||
1766 | struct button_map bm[] = { | ||
1767 | { SDLK_KP_PLUS, 330, 53, 23, "Record" }, | ||
1768 | { SDLK_KP7, 132, 208, 21, "Left" }, | ||
1769 | { SDLK_KP5, 182, 210, 18, "Play" }, | ||
1770 | { SDLK_KP9, 234, 211, 22, "Right" }, | ||
1771 | { SDLK_KP8, 182, 260, 15, "Up" }, | ||
1772 | { SDLK_KP4, 122, 277, 29, "Menu" }, | ||
1773 | { SDLK_KP6, 238, 276, 25, "Select" }, | ||
1774 | { SDLK_KP2, 183, 321, 24, "Down" }, | ||
1775 | { 0, 0, 0, 0, "None" } | ||
1776 | }; | ||
1777 | #elif defined (SAMSUNG_YH920) || defined (SAMSUNG_YH925) | ||
1778 | struct button_map bm[] = { | ||
1779 | { SDLK_KP9, 370, 32, 15, "FF" }, | ||
1780 | { SDLK_KP5, 369, 84, 25, "Play" }, | ||
1781 | { SDLK_KP5, 367, 125, 27, "Play" }, | ||
1782 | { SDLK_KP3, 369, 188, 17, "Rew" }, | ||
1783 | { SDLK_KP_PLUS, 370, 330, 30, "Record" }, | ||
1784 | { SDLK_KP4, 146, 252, 32, "Menu" }, | ||
1785 | { SDLK_KP8, 204, 226, 27, "Up" }, | ||
1786 | { SDLK_KP6, 257, 250, 34, "Select" }, | ||
1787 | { SDLK_KP2, 205, 294, 35, "Down" }, | ||
1788 | { 0, 0, 0, 0, "None" } | ||
1789 | }; | ||
1790 | #elif defined (ONDA_VX747) || defined (ONDA_VX747P) | ||
1791 | struct button_map bm[] = { | ||
1792 | { SDLK_MINUS, 113, 583, 28, "Minus" }, | ||
1793 | { SDLK_PLUS, 227, 580, 28, "Plus" }, | ||
1794 | { SDLK_RETURN, 171, 583, 34, "Menu" }, | ||
1795 | { 0, 0, 0, 0, "None" } | ||
1796 | }; | ||
1797 | #elif defined (PHILIPS_SA9200) | ||
1798 | struct button_map bm[] = { | ||
1799 | { SDLK_KP_ENTER, 25, 155, 33, "Power" }, | ||
1800 | { SDLK_PAGEUP, 210, 98, 31, "Vol Up" }, | ||
1801 | { SDLK_PAGEDOWN, 210, 168, 34, "Vol Down" }, | ||
1802 | { SDLK_KP7, 40, 249, 26, "Prev" }, | ||
1803 | { SDLK_KP8, 110, 247, 22, "Up" }, | ||
1804 | { SDLK_KP9, 183, 249, 31, "Next" }, | ||
1805 | { SDLK_KP4, 45, 305, 25, "Left" }, | ||
1806 | { SDLK_KP5, 111, 304, 24, "Play" }, | ||
1807 | { SDLK_KP6, 183, 304, 21, "Right" }, | ||
1808 | { SDLK_KP1, 43, 377, 21, "Menu" }, | ||
1809 | { SDLK_KP2, 112, 371, 24, "Down" }, | ||
1810 | { 0, 0, 0, 0, "None" } | ||
1811 | }; | ||
1812 | #elif defined (CREATIVE_ZVM) || defined (CREATIVE_ZVM60GB) || \ | ||
1813 | defined (CREATIVE_ZV) | ||
1814 | struct button_map bm[] = { | ||
1815 | { SDLK_KP7, 52, 414, 35, "Custom" }, | ||
1816 | { SDLK_KP8, 185, 406, 55, "Up" }, | ||
1817 | { SDLK_KP9, 315, 421, 46, "Play" }, | ||
1818 | { SDLK_KP4, 122, 500, 41, "Left" }, | ||
1819 | { SDLK_KP6, 247, 493, 49, "Right" }, | ||
1820 | { SDLK_KP1, 58, 577, 49, "Back" }, | ||
1821 | { SDLK_KP2, 186, 585, 46, "Down" }, | ||
1822 | { SDLK_KP3, 311, 569, 47, "Menu" }, | ||
1823 | { 0, 0, 0, 0, "None" } | ||
1824 | }; | ||
1825 | #else | ||
1826 | struct button_map bm[] = { | ||
1827 | { 0, 0, 0, 0, ""} | ||
1828 | }; | ||
1829 | #endif | ||
1830 | |||
1831 | int xy2button( int x, int y) { | ||
1832 | int i; | ||
1833 | extern bool debug_buttons; | ||
1834 | |||
1835 | for ( i = 0; bm[i].button; i++ ) | ||
1836 | /* check distance from center of button < radius */ | ||
1837 | if ( ( (x-bm[i].x)*(x-bm[i].x) ) + ( ( y-bm[i].y)*(y-bm[i].y) ) < bm[i].radius*bm[i].radius ) { | ||
1838 | if (debug_buttons) | ||
1839 | printf("Button: %s\n", bm[i].description ); | ||
1840 | return bm[i].button; | ||
1841 | } | ||
1842 | return 0; | ||
1843 | } | ||
diff --git a/uisimulator/sdl/uisdl.c b/uisimulator/sdl/uisdl.c index 3ab098e5ba..8cf4b42ba0 100644 --- a/uisimulator/sdl/uisdl.c +++ b/uisimulator/sdl/uisdl.c | |||
@@ -40,10 +40,12 @@ | |||
40 | #include "thread-sdl.h" | 40 | #include "thread-sdl.h" |
41 | #include "SDL_mutex.h" | 41 | #include "SDL_mutex.h" |
42 | #include "SDL_thread.h" | 42 | #include "SDL_thread.h" |
43 | #include "math.h" | ||
44 | |||
43 | 45 | ||
44 | /* extern functions */ | 46 | /* extern functions */ |
45 | extern void new_key(int key); | 47 | extern void new_key(int key); |
46 | 48 | extern int xy2button( int x, int y); | |
47 | void button_event(int key, bool pressed); | 49 | void button_event(int key, bool pressed); |
48 | 50 | ||
49 | SDL_Surface *gui_surface; | 51 | SDL_Surface *gui_surface; |
@@ -51,6 +53,8 @@ bool background = true; /* use backgrounds by default */ | |||
51 | #ifdef HAVE_REMOTE_LCD | 53 | #ifdef HAVE_REMOTE_LCD |
52 | static bool showremote = true; /* include remote by default */ | 54 | static bool showremote = true; /* include remote by default */ |
53 | #endif | 55 | #endif |
56 | bool mapping = false; | ||
57 | bool debug_buttons = false; | ||
54 | 58 | ||
55 | bool lcd_display_redraw = true; /* Used for player simulator */ | 59 | bool lcd_display_redraw = true; /* Used for player simulator */ |
56 | char having_new_lcd = true; /* Used for player simulator */ | 60 | char having_new_lcd = true; /* Used for player simulator */ |
@@ -62,39 +66,102 @@ bool debug_audio = false; | |||
62 | bool debug_wps = false; | 66 | bool debug_wps = false; |
63 | int wps_verbose_level = 3; | 67 | int wps_verbose_level = 3; |
64 | 68 | ||
69 | |||
70 | void irq_button_event(int key, bool pressed) { | ||
71 | sim_enter_irq_handler(); | ||
72 | button_event( key, pressed ); | ||
73 | sim_exit_irq_handler(); | ||
74 | } | ||
75 | |||
76 | int sqr( int a ) { | ||
77 | return a*a; | ||
78 | } | ||
79 | |||
65 | void gui_message_loop(void) | 80 | void gui_message_loop(void) |
66 | { | 81 | { |
67 | SDL_Event event; | 82 | SDL_Event event; |
68 | bool done = false; | 83 | bool done = false; |
84 | static int x,y,xybutton = 0; | ||
69 | 85 | ||
70 | while(!done && SDL_WaitEvent(&event)) | 86 | while(!done && SDL_WaitEvent(&event)) |
71 | { | 87 | { |
72 | switch(event.type) | 88 | switch(event.type) |
73 | { | 89 | { |
74 | case SDL_KEYDOWN: | 90 | case SDL_KEYDOWN: |
75 | sim_enter_irq_handler(); | 91 | irq_button_event(event.key.keysym.sym, true); |
76 | button_event(event.key.keysym.sym, true); | ||
77 | sim_exit_irq_handler(); | ||
78 | break; | 92 | break; |
79 | case SDL_KEYUP: | 93 | case SDL_KEYUP: |
80 | sim_enter_irq_handler(); | 94 | irq_button_event(event.key.keysym.sym, false); |
81 | button_event(event.key.keysym.sym, false); | ||
82 | sim_exit_irq_handler(); | ||
83 | break; | ||
84 | #ifndef HAVE_TOUCHSCREEN | ||
85 | case SDL_MOUSEBUTTONDOWN: | 95 | case SDL_MOUSEBUTTONDOWN: |
96 | switch ( event.button.button ) { | ||
97 | #ifdef HAVE_SCROLLWHEEL | ||
98 | case SDL_BUTTON_WHEELUP: | ||
99 | irq_button_event( SDLK_UP, true ); | ||
100 | break; | ||
101 | case SDL_BUTTON_WHEELDOWN: | ||
102 | irq_button_event( SDLK_DOWN, true ); | ||
103 | break; | ||
104 | #endif | ||
105 | case SDL_BUTTON_LEFT: | ||
106 | case SDL_BUTTON_MIDDLE: | ||
107 | if ( mapping && background ) { | ||
108 | x = event.button.x; | ||
109 | y = event.button.y; | ||
110 | } | ||
111 | if ( background ) { | ||
112 | xybutton = xy2button( event.button.x, event.button.y ); | ||
113 | if( xybutton ) | ||
114 | irq_button_event( xybutton, true ); | ||
115 | } | ||
116 | break; | ||
117 | default: | ||
118 | break; | ||
119 | } | ||
120 | |||
86 | if (debug_wps && event.button.button == 1) | 121 | if (debug_wps && event.button.button == 1) |
87 | { | 122 | { |
88 | printf("Mouse at: (%d, %d)\n", event.button.x, event.button.y); | 123 | if ( background ) |
124 | #ifdef HAVE_REMOTE | ||
125 | if ( event.button.y < UI_REMOTE_POSY ) /* Main Screen */ | ||
126 | printf("Mouse at: (%d, %d)\n", event.button.x - UI_LCD_POSX -1 , event.button.y - UI_LCD_POSY - 1 ); | ||
127 | else | ||
128 | printf("Mouse at: (%d, %d)\n", event.button.x - UI_REMOTE_POSX -1 , event.button.y - UI_REMOTE_POSY - 1 ); | ||
129 | #else | ||
130 | printf("Mouse at: (%d, %d)\n", event.button.x - UI_LCD_POSX -1 , event.button.y - UI_LCD_POSY - 1 ); | ||
131 | #endif | ||
132 | else | ||
133 | if ( event.button.y/display_zoom < LCD_HEIGHT ) /* Main Screen */ | ||
134 | printf("Mouse at: (%d, %d)\n", event.button.x/display_zoom, event.button.y/display_zoom ); | ||
135 | #ifdef HAVE_REMOTE | ||
136 | else | ||
137 | printf("Mouse at: (%d, %d)\n", event.button.x/display_zoom, event.button.y/display_zoom - LCD_HEIGHT ); | ||
138 | #endif | ||
89 | } | 139 | } |
90 | break; | 140 | break; |
91 | #else | ||
92 | case SDL_MOUSEBUTTONUP: | 141 | case SDL_MOUSEBUTTONUP: |
93 | sim_enter_irq_handler(); | 142 | switch ( event.button.button ) { |
94 | button_event(BUTTON_TOUCHSCREEN, false); | 143 | /* The scrollwheel button up events are ignored as they are queued immediately */ |
95 | sim_exit_irq_handler(); | 144 | case SDL_BUTTON_LEFT: |
96 | break; | 145 | case SDL_BUTTON_MIDDLE: |
146 | if ( mapping && background ) { | ||
147 | printf(" { SDLK_, %d, %d, %d, \"\" },\n", x, y, (int)sqrt( sqr(x-(int)event.button.x) + sqr(y-(int)event.button.y)) ); | ||
148 | } | ||
149 | if ( background && xybutton ) { | ||
150 | irq_button_event( xybutton, false ); | ||
151 | xybutton = 0; | ||
152 | } | ||
153 | #ifdef HAVE_TOUCHSCREEN | ||
154 | else { | ||
155 | irq_button_event(BUTTON_TOUCHSCREEN, false); | ||
156 | } | ||
97 | #endif | 157 | #endif |
158 | break; | ||
159 | default: | ||
160 | break; | ||
161 | } | ||
162 | break; | ||
163 | |||
164 | |||
98 | case SDL_QUIT: | 165 | case SDL_QUIT: |
99 | done = true; | 166 | done = true; |
100 | break; | 167 | break; |
@@ -244,6 +311,16 @@ int main(int argc, char *argv[]) | |||
244 | printf("Root directory: %s\n", sim_root_dir); | 311 | printf("Root directory: %s\n", sim_root_dir); |
245 | } | 312 | } |
246 | } | 313 | } |
314 | else if (!strcmp("--mapping", argv[x])) | ||
315 | { | ||
316 | mapping = true; | ||
317 | printf("Printing click coords with drag radii.\n"); | ||
318 | } | ||
319 | else if (!strcmp("--debugbuttons", argv[x])) | ||
320 | { | ||
321 | debug_buttons = true; | ||
322 | printf("Printing background button clicks.\n"); | ||
323 | } | ||
247 | else | 324 | else |
248 | { | 325 | { |
249 | printf("rockboxui\n"); | 326 | printf("rockboxui\n"); |
@@ -258,6 +335,7 @@ int main(int argc, char *argv[]) | |||
258 | printf(" --zoom [VAL]\t Window zoom (will disable backgrounds)\n"); | 335 | printf(" --zoom [VAL]\t Window zoom (will disable backgrounds)\n"); |
259 | printf(" --alarm \t Simulate a wake-up on alarm\n"); | 336 | printf(" --alarm \t Simulate a wake-up on alarm\n"); |
260 | printf(" --root [DIR]\t Set root directory\n"); | 337 | printf(" --root [DIR]\t Set root directory\n"); |
338 | printf(" --mapping \t Output coordinates and radius for mapping backgrounds\n"); | ||
261 | exit(0); | 339 | exit(0); |
262 | } | 340 | } |
263 | } | 341 | } |