Upstream is dealing with this here :
https://github.com/dolphin-emu/dolphin/pull/12065
Please find a minimal patch in attachement.
On Fri, 14 Jul 2023 20:09:01 +0300 Adrian Bunk <[email protected]> wrote:
> Source: dolphin-emu
> Version: 5.0-19368+dfsg-2
> Severity: serious
> Tags: ftbfs
>
>
https://tests.reproducible-builds.org/debian/rb-pkg/unstable/amd64/dolphin-emu.html
>
> ...
> In file included from /build/1st/dolphin-emu-5.0-
19368+dfsg/Externals/implot/implot/implot_internal.h:39,
> from /build/1st/dolphin-emu-5.0-
19368+dfsg/Externals/implot/implot/implot_items.cpp:26:
> /usr/include/imgui/imgui_internal.h:101:2: error: #error Please
'#define IMGUI_DEFINE_MATH_OPERATORS' _BEFORE_ including imgui.h!
> 101 | #error Please '#define IMGUI_DEFINE_MATH_OPERATORS' _BEFORE_
including imgui.h!
> | ^~~~~
> In file included from /build/1st/dolphin-emu-5.0-
19368+dfsg/Externals/implot/implot/implot_internal.h:39,
> from /build/1st/dolphin-emu-5.0-
19368+dfsg/Externals/implot/implot/implot.cpp:126:
> /usr/include/imgui/imgui_internal.h:101:2: error: #error Please
'#define IMGUI_DEFINE_MATH_OPERATORS' _BEFORE_ including imgui.h!
> 101 | #error Please '#define IMGUI_DEFINE_MATH_OPERATORS' _BEFORE_
including imgui.h!
> | ^~~~~
> ...
>
>
--- a/Externals/implot/implot/implot.cpp
+++ b/Externals/implot/implot/implot.cpp
@@ -122,6 +122,7 @@
*/
+#define IMGUI_DEFINE_MATH_OPERATORS
#include "implot.h"
#include "implot_internal.h"
--- a/Externals/implot/implot/implot_internal.h
+++ b/Externals/implot/implot/implot_internal.h
@@ -31,10 +31,6 @@
#pragma once
-#ifndef IMGUI_DEFINE_MATH_OPERATORS
-#define IMGUI_DEFINE_MATH_OPERATORS
-#endif
-
#include <time.h>
#include "imgui_internal.h"
--- a/Externals/implot/implot/implot_items.cpp
+++ b/Externals/implot/implot/implot_items.cpp
@@ -22,6 +22,7 @@
// ImPlot v0.14
+#define IMGUI_DEFINE_MATH_OPERATORS
#include "implot.h"
#include "implot_internal.h"
--- a/Source/Core/VideoCommon/OnScreenUI.cpp
+++ b/Source/Core/VideoCommon/OnScreenUI.cpp
@@ -356,35 +356,37 @@
}
void OnScreenUI::SetKeyMap(const DolphinKeyMap& key_map)
{
- // Right now this is a 1:1 mapping. But might not be true later
static constexpr DolphinKeyMap dolphin_to_imgui_map = {
ImGuiKey_Tab, ImGuiKey_LeftArrow, ImGuiKey_RightArrow, ImGuiKey_UpArrow,
ImGuiKey_DownArrow, ImGuiKey_PageUp, ImGuiKey_PageDown, ImGuiKey_Home,
ImGuiKey_End, ImGuiKey_Insert, ImGuiKey_Delete, ImGuiKey_Backspace,
- ImGuiKey_Space, ImGuiKey_Enter, ImGuiKey_Escape, ImGuiKey_KeyPadEnter,
+ ImGuiKey_Space, ImGuiKey_Enter, ImGuiKey_Escape, ImGuiKey_KeypadEnter,
ImGuiKey_A, ImGuiKey_C, ImGuiKey_V, ImGuiKey_X,
ImGuiKey_Y, ImGuiKey_Z,
};
- static_assert(dolphin_to_imgui_map.size() == ImGuiKey_COUNT); // Fail if ImGui adds keys
auto lock = GetImGuiLock();
if (!ImGui::GetCurrentContext())
return;
+ m_dolphin_to_imgui_map.clear();
for (int dolphin_key = 0; dolphin_key <= static_cast<int>(DolphinKey::Z); dolphin_key++)
{
- int imgui_key = dolphin_to_imgui_map[DolphinKey(dolphin_key)];
+ const int imgui_key = dolphin_to_imgui_map[DolphinKey(dolphin_key)];
if (imgui_key >= 0)
- ImGui::GetIO().KeyMap[imgui_key] = (key_map[DolphinKey(dolphin_key)] & 0x1FF);
+ {
+ const int mapped_key = key_map[DolphinKey(dolphin_key)];
+ m_dolphin_to_imgui_map[mapped_key & 0x1FF] = imgui_key;
+ }
}
}
void OnScreenUI::SetKey(u32 key, bool is_down, const char* chars)
{
auto lock = GetImGuiLock();
- if (key < std::size(ImGui::GetIO().KeysDown))
- ImGui::GetIO().KeysDown[key] = is_down;
+ if (auto iter = m_dolphin_to_imgui_map.find(key); iter != m_dolphin_to_imgui_map.end())
+ ImGui::GetIO().AddKeyEvent((ImGuiKey)iter->second, is_down);
if (chars)
ImGui::GetIO().AddInputCharactersUTF8(chars);
--- a/Source/Core/VideoCommon/OnScreenUI.h
+++ b/Source/Core/VideoCommon/OnScreenUI.h
@@ -3,6 +3,7 @@
#pragma once
+#include <map>
#include <memory>
#include <mutex>
#include <span>
@@ -65,6 +66,7 @@
std::unique_ptr<NativeVertexFormat> m_imgui_vertex_format;
std::vector<std::unique_ptr<AbstractTexture>> m_imgui_textures;
std::unique_ptr<AbstractPipeline> m_imgui_pipeline;
+ std::map<u32, int> m_dolphin_to_imgui_map;
std::mutex m_imgui_mutex;
u64 m_imgui_last_frame_time = 0;