## Link to GitHub Issue, if one exists #345 ## Description of change If TDJ / VM mode is active AND user is enabled `-monitor` option (and the value isn't 0, the primary monitor) then disable the subscreen overlay, show an error message instead. We're doing this because both games cannot accept emulated touch input if `-monitor` option is in use. There is not much point in displaying the second screen's image, other than to REALLY confuse people when nothing happens when they click on it. ## Testing Tested both games with `-monitor`.
63 lines
2.4 KiB
C++
63 lines
2.4 KiB
C++
#undef CINTERFACE
|
|
|
|
#include "iidx_sub.h"
|
|
#include "cfg/screen_resize.h"
|
|
#include "games/iidx/iidx.h"
|
|
#include "hooks/graphics/graphics.h"
|
|
#include "touch/touch.h"
|
|
|
|
namespace overlay::windows {
|
|
|
|
IIDXSubScreen::IIDXSubScreen(SpiceOverlay *overlay) : GenericSubScreen(overlay) {
|
|
this->title = "IIDX TDJ Subscreen";
|
|
|
|
if (GRAPHICS_IIDX_WSUB) {
|
|
this->disabled_message =
|
|
"Close this overlay and use the second window.\n"
|
|
"If you don't see the window, double check your DLL type and apply TDJ I/O patches as needed.";
|
|
} else if (games::iidx::IIDX_TDJ_MONITOR_WARNING) {
|
|
this->disabled_message = "TDJ mode subscreen overlay is not compatible with -monitor option";
|
|
}
|
|
|
|
float size = 0.5f;
|
|
if (games::iidx::SUBSCREEN_OVERLAY_SIZE.has_value()) {
|
|
if (games::iidx::SUBSCREEN_OVERLAY_SIZE.value() == "large") {
|
|
size = 0.8f;
|
|
} else if (games::iidx::SUBSCREEN_OVERLAY_SIZE.value() == "small") {
|
|
size = 0.3f;
|
|
} else if (games::iidx::SUBSCREEN_OVERLAY_SIZE.value() == "fullscreen") {
|
|
GENERIC_SUB_WINDOW_FULLSIZE = true;
|
|
this->draws_window = false;
|
|
}
|
|
}
|
|
this->init_size = ImVec2(
|
|
ImGui::GetIO().DisplaySize.x * size,
|
|
(ImGui::GetIO().DisplaySize.x * size * 9 / 16) + ImGui::GetFrameHeight());
|
|
|
|
this->size_max = ImVec2(
|
|
ImGui::GetIO().DisplaySize.x - ImGui::GetFrameHeight() * 2,
|
|
ImGui::GetIO().DisplaySize.y - ImGui::GetFrameHeight() * 2);
|
|
|
|
// middle / bottom
|
|
this->init_pos = ImVec2(
|
|
ImGui::GetIO().DisplaySize.x / 2 - this->init_size.x / 2,
|
|
ImGui::GetIO().DisplaySize.y - this->init_size.y - (ImGui::GetFrameHeight() / 2));
|
|
}
|
|
|
|
void IIDXSubScreen::touch_transform(const ImVec2 xy_in, LONG *x_out, LONG *y_out) {
|
|
if (!this->get_active()) {
|
|
return;
|
|
}
|
|
|
|
if (GRAPHICS_WINDOWED) {
|
|
// Touch needs to be registered on global coords
|
|
*x_out = SPICETOUCH_TOUCH_X + xy_in.x * SPICETOUCH_TOUCH_WIDTH;
|
|
*y_out = SPICETOUCH_TOUCH_Y + xy_in.y * SPICETOUCH_TOUCH_HEIGHT;
|
|
} else {
|
|
// Fullscreen mode, scale to game coords
|
|
*x_out = xy_in.x * ImGui::GetIO().DisplaySize.x;
|
|
*y_out = xy_in.y * ImGui::GetIO().DisplaySize.y;
|
|
}
|
|
}
|
|
}
|