Compare commits

...
3 changed files with 36 additions and 2 deletions
+26 -2
View File
@@ -1,6 +1,7 @@
#include "mouse.h"
#include "color.h"
#include "debug.h"
#include "dinput.h"
#include "input.h"
#include "kb.h"
@@ -53,6 +54,10 @@ static unsigned char* _mouse_fptr = nullptr;
// 0x51E2A0
static double gMouseSensitivity = 1.0;
static double gMouseSensitivityDpiHorizontal = 1.0;
static double gMouseSensitivityDpiVertical = 1.0;
double gMouseSensitivityScale2Xoption = 1.0;
// 0x51E2AC
static int last_buttons = 0;
@@ -454,8 +459,8 @@ void _mouse_info()
}
// Adjust for mouse senstivity.
x = (int)(x * gMouseSensitivity);
y = (int)(y * gMouseSensitivity);
x = (int)(x * gMouseSensitivity * gMouseSensitivityDpiHorizontal * gMouseSensitivityScale2Xoption);
y = (int)(y * gMouseSensitivity * gMouseSensitivityDpiVertical * gMouseSensitivityScale2Xoption);
_mouse_simulate_input(x, y, buttons);
@@ -676,6 +681,25 @@ void mouseSetSensitivity(double value)
if (value >= 1.0 && value <= 2.5) {
gMouseSensitivity = value;
}
gMouseSensitivityDpiHorizontal = 1.0;
gMouseSensitivityDpiVertical = 1.0;
if (gSdlWindow) {
int displayIndex = SDL_GetWindowDisplayIndex(gSdlWindow);
float ddpi, hdpi, vdpi;
if (SDL_GetDisplayDPI(displayIndex, &ddpi, &hdpi, &vdpi) == 0) {
hdpi /= 96.0f; // 96 is standard DPI
vdpi /= 96.0f; // 96 is standard DPI
gMouseSensitivityDpiHorizontal = 1 / hdpi;
gMouseSensitivityDpiVertical = 1 / vdpi;
debugPrint("Mouse DPI scaling: horizontal = %.2f, vertical = %.2f", hdpi, vdpi);
debugPrint("Mouse DPI sensitivity: horizontal = %.2f, vertical = %.2f", gMouseSensitivityDpiHorizontal, gMouseSensitivityDpiVertical);
} else {
debugPrint("Mouse DPI sensitivity is not available, SDL_GetDisplayDPI failed");
}
} else {
debugPrint("Mouse DPI sensitivity is not available, SDL window is null");
}
}
void mouseGetPositionInWindow(int win, int* x, int* y)
+1
View File
@@ -54,6 +54,7 @@ void mouseGetWheel(int* x, int* y);
void convertMouseWheelToArrowKey(int* keyCodePtr);
int mouse_get_last_buttons();
extern double gMouseSensitivityScale2Xoption;
} // namespace fallout
#endif /* FALLOUT_MOUSE_H_ */
+9
View File
@@ -6,6 +6,7 @@
#include <SDL.h>
#include "config.h"
#include "debug.h"
#include "draw.h"
#include "interface.h"
#include "memory.h"
@@ -186,6 +187,14 @@ int _GNW95_init_mode_ex(int width, int height, int bpp)
_zero_mem = _GNW95_zero_vid_mem;
_mouse_blit = _GNW95_ShowRect;
if (scale != 1) {
gMouseSensitivityScale2Xoption = 1.0 / scale;
debugPrint("Mouse sensitivity adjusted according to scale into %f\n", gMouseSensitivityScale2Xoption);
} else {
gMouseSensitivityScale2Xoption = 1.0;
debugPrint("Mouse sensitivity not adjusted for 2X scale\n");
}
return 0;
}