|
36 | 36 |
|
37 | 37 | #include "core/config/project_settings.h"
|
38 | 38 | #include "core/io/marshalls.h"
|
| 39 | +#include "core/io/xml_parser.h" |
39 | 40 | #include "core/version.h"
|
40 | 41 | #include "drivers/png/png_driver_common.h"
|
41 | 42 | #include "main/main.h"
|
@@ -6528,15 +6529,27 @@ void DisplayServerWindows::tablet_set_current_driver(const String &p_driver) {
|
6528 | 6529 | if (tablet_get_driver_count() == 0) {
|
6529 | 6530 | return;
|
6530 | 6531 | }
|
| 6532 | + |
| 6533 | + String driver = p_driver; |
| 6534 | + if (driver == "auto") { |
| 6535 | + if (winink_available && !winink_disabled) { |
| 6536 | + driver = "winink"; |
| 6537 | + } else if (wintab_available) { |
| 6538 | + driver = "wintab"; |
| 6539 | + } else { |
| 6540 | + driver = "dummy"; |
| 6541 | + } |
| 6542 | + } |
| 6543 | + |
6531 | 6544 | bool found = false;
|
6532 | 6545 | for (int i = 0; i < tablet_get_driver_count(); i++) {
|
6533 |
| - if (p_driver == tablet_get_driver_name(i)) { |
| 6546 | + if (driver == tablet_get_driver_name(i)) { |
6534 | 6547 | found = true;
|
6535 | 6548 | }
|
6536 | 6549 | }
|
6537 | 6550 | if (found) {
|
6538 |
| - _update_tablet_ctx(tablet_driver, p_driver); |
6539 |
| - tablet_driver = p_driver; |
| 6551 | + _update_tablet_ctx(tablet_driver, driver); |
| 6552 | + tablet_driver = driver; |
6540 | 6553 | } else {
|
6541 | 6554 | ERR_PRINT("Unknown tablet driver " + p_driver + ".");
|
6542 | 6555 | }
|
@@ -6635,6 +6648,8 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win
|
6635 | 6648 | }
|
6636 | 6649 | }
|
6637 | 6650 |
|
| 6651 | + tablet_drivers.push_back("auto"); |
| 6652 | + |
6638 | 6653 | // Note: Windows Ink API for pen input, available on Windows 8+ only.
|
6639 | 6654 | // Note: DPI conversion API, available on Windows 8.1+ only.
|
6640 | 6655 | HMODULE user32_lib = LoadLibraryW(L"user32.dll");
|
@@ -6669,6 +6684,27 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win
|
6669 | 6684 |
|
6670 | 6685 | tablet_drivers.push_back("dummy");
|
6671 | 6686 |
|
| 6687 | + String wacom_cfg = OS::get_singleton()->get_config_path().path_join("WTablet").path_join("Wacom_Tablet.dat"); |
| 6688 | + if (FileAccess::exists(wacom_cfg)) { |
| 6689 | + Ref<XMLParser> parser; |
| 6690 | + parser.instantiate(); |
| 6691 | + if (parser->open(wacom_cfg) == OK) { |
| 6692 | + while (parser->read() == OK) { |
| 6693 | + if (parser->get_node_type() != XMLParser::NODE_ELEMENT) { |
| 6694 | + continue; |
| 6695 | + } |
| 6696 | + if (parser->get_node_name() == "WinUseInk") { |
| 6697 | + parser->read(); |
| 6698 | + if (parser->get_node_type() == XMLParser::NODE_TEXT) { |
| 6699 | + winink_disabled = (parser->get_node_data().to_lower().strip_edges() != "true"); |
| 6700 | + print_verbose(vformat("Wacom tablet config found at \"%s\", Windows Ink support is %s.", wacom_cfg, winink_disabled ? "disabled" : "enabled")); |
| 6701 | + break; |
| 6702 | + } |
| 6703 | + } |
| 6704 | + } |
| 6705 | + } |
| 6706 | + } |
| 6707 | + |
6672 | 6708 | if (OS::get_singleton()->is_hidpi_allowed()) {
|
6673 | 6709 | HMODULE Shcore = LoadLibraryW(L"Shcore.dll");
|
6674 | 6710 |
|
|
0 commit comments