Initial checkin of Pika from heckimp
This commit is contained in:
51
build/windows/patches/gtk3-24-mr3275-pika-issue-5475.patch
Normal file
51
build/windows/patches/gtk3-24-mr3275-pika-issue-5475.patch
Normal file
@ -0,0 +1,51 @@
|
||||
From feb4f26b5c643382241aa995034fb36b02a21a4d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=A0=D1=83=D1=81=D0=BB=D0=B0=D0=BD=20=D0=98=D0=B6=D0=B1?=
|
||||
=?UTF-8?q?=D1=83=D0=BB=D0=B0=D1=82=D0=BE=D0=B2?= <lrn1986@gmail.com>
|
||||
Date: Mon, 8 Mar 2021 14:10:56 +0000
|
||||
Subject: [PATCH] GDK W32: Use PROCESS_PER_MONITOR_DPI_AWARE
|
||||
|
||||
According to Microsoft documentation, PROCESS_SYSTEM_DPI_AWARE, just as
|
||||
PROCESS_DPI_UNAWARE, allows Windows to scale GTK windows and do all kinds
|
||||
of stuff. To ensure this doesn't happen, we need to use PROCESS_PER_MONITOR_DPI_AWARE,
|
||||
even if GTK does not really handle DPI changes dynamically via the WM_DPICHANGED
|
||||
message.
|
||||
|
||||
This completely prevents Windows from scaling GTK windows when they are moved
|
||||
between screens with different scaling set up.
|
||||
---
|
||||
gdk/win32/gdkdisplay-win32.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/gdk/win32/gdkdisplay-win32.c b/gdk/win32/gdkdisplay-win32.c
|
||||
index c2b572b402..0fa92a7143 100644
|
||||
--- a/gdk/win32/gdkdisplay-win32.c
|
||||
+++ b/gdk/win32/gdkdisplay-win32.c
|
||||
@@ -916,10 +916,10 @@ _gdk_win32_enable_hidpi (GdkWin32Display *display)
|
||||
/* then make the GDK-using app DPI-aware */
|
||||
if (display->shcore_funcs.setDpiAwareFunc != NULL)
|
||||
{
|
||||
- switch (display->shcore_funcs.setDpiAwareFunc (PROCESS_SYSTEM_DPI_AWARE))
|
||||
+ switch (display->shcore_funcs.setDpiAwareFunc (PROCESS_PER_MONITOR_DPI_AWARE))
|
||||
{
|
||||
case S_OK:
|
||||
- display->dpi_aware_type = PROCESS_SYSTEM_DPI_AWARE;
|
||||
+ display->dpi_aware_type = PROCESS_PER_MONITOR_DPI_AWARE;
|
||||
status = DPI_STATUS_SUCCESS;
|
||||
break;
|
||||
case E_ACCESSDENIED:
|
||||
@@ -1000,10 +1000,10 @@ _gdk_win32_enable_hidpi (GdkWin32Display *display)
|
||||
/* This most probably means DPI awareness is set through
|
||||
the manifest, or a DPI compatibility setting is used. */
|
||||
display->dpi_aware_type = display->user32_dpi_funcs.isDpiAwareFunc () ?
|
||||
- PROCESS_SYSTEM_DPI_AWARE :
|
||||
+ PROCESS_PER_MONITOR_DPI_AWARE :
|
||||
PROCESS_DPI_UNAWARE;
|
||||
|
||||
- if (display->dpi_aware_type == PROCESS_SYSTEM_DPI_AWARE)
|
||||
+ if (display->dpi_aware_type != PROCESS_DPI_UNAWARE)
|
||||
status = DPI_STATUS_SUCCESS;
|
||||
else
|
||||
status = DPI_STATUS_DISABLED;
|
||||
--
|
||||
GitLab
|
||||
|
152
build/windows/patches/gtk3-24-mr3661-pika-issue-5475.patch
Normal file
152
build/windows/patches/gtk3-24-mr3661-pika-issue-5475.patch
Normal file
@ -0,0 +1,152 @@
|
||||
From 696a356b14ac2426b8b8176d298f05204751862c Mon Sep 17 00:00:00 2001
|
||||
From: Luca Bacci <luca.bacci982@gmail.com>
|
||||
Date: Fri, 11 Jun 2021 19:37:17 +0200
|
||||
Subject: [PATCH] Wintab: Fix coordinates in mixed-DPI setups
|
||||
|
||||
Fixes #753
|
||||
---
|
||||
gdk/win32/gdkdevice-wintab.c | 77 +++++++++++++++++++-----------
|
||||
gdk/win32/gdkdevice-wintab.h | 5 ++
|
||||
gdk/win32/gdkdevicemanager-win32.c | 5 ++
|
||||
3 files changed, 59 insertions(+), 28 deletions(-)
|
||||
|
||||
diff --git a/gdk/win32/gdkdevice-wintab.c b/gdk/win32/gdkdevice-wintab.c
|
||||
index 338479db43..0337cc0d42 100644
|
||||
--- a/gdk/win32/gdkdevice-wintab.c
|
||||
+++ b/gdk/win32/gdkdevice-wintab.c
|
||||
@@ -220,18 +220,9 @@ _gdk_device_wintab_translate_axes (GdkDeviceWintab *device_wintab,
|
||||
gdouble *x,
|
||||
gdouble *y)
|
||||
{
|
||||
- GdkDevice *device;
|
||||
- GdkWindow *impl_window;
|
||||
- gint root_x, root_y;
|
||||
- gdouble temp_x, temp_y;
|
||||
+ GdkDevice *device = GDK_DEVICE (device_wintab);
|
||||
gint i;
|
||||
|
||||
- device = GDK_DEVICE (device_wintab);
|
||||
- impl_window = _gdk_window_get_impl_window (window);
|
||||
- temp_x = temp_y = 0;
|
||||
-
|
||||
- gdk_window_get_origin (impl_window, &root_x, &root_y);
|
||||
-
|
||||
for (i = 0; i < gdk_device_get_n_axes (device); i++)
|
||||
{
|
||||
GdkAxisUse use;
|
||||
@@ -243,19 +234,55 @@ _gdk_device_wintab_translate_axes (GdkDeviceWintab *device_wintab,
|
||||
case GDK_AXIS_X:
|
||||
case GDK_AXIS_Y:
|
||||
if (gdk_device_get_mode (device) == GDK_MODE_WINDOW)
|
||||
- _gdk_device_translate_window_coord (device, window, i,
|
||||
- device_wintab->last_axis_data[i],
|
||||
- &axes[i]);
|
||||
+ {
|
||||
+ _gdk_device_translate_window_coord (device, window, i,
|
||||
+ device_wintab->last_axis_data[i],
|
||||
+ &axes[i]);
|
||||
+
|
||||
+ if (use == GDK_AXIS_X)
|
||||
+ {
|
||||
+ *x = axes[i];
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ *y = axes[i];
|
||||
+ }
|
||||
+ }
|
||||
else
|
||||
- _gdk_device_translate_screen_coord (device, window,
|
||||
- root_x, root_y, i,
|
||||
- device_wintab->last_axis_data[i],
|
||||
- &axes[i]);
|
||||
- if (use == GDK_AXIS_X)
|
||||
- temp_x = axes[i];
|
||||
- else if (use == GDK_AXIS_Y)
|
||||
- temp_y = axes[i];
|
||||
-
|
||||
+ {
|
||||
+ GdkAtom label_atom;
|
||||
+ GdkAxisUse use;
|
||||
+ double min_value, max_value, resolution;
|
||||
+ double device_val = device_wintab->last_axis_data[i];
|
||||
+ double screen_val = 0.0;
|
||||
+ double window_val = 0.0;
|
||||
+ POINT client;
|
||||
+
|
||||
+ client.x = 0;
|
||||
+ client.y = 0;
|
||||
+ ClientToScreen (GDK_WINDOW_HWND (window), &client);
|
||||
+
|
||||
+ _gdk_device_get_axis_info (device, i,
|
||||
+ &label_atom, &use,
|
||||
+ &min_value, &max_value, &resolution);
|
||||
+
|
||||
+ if (use == GDK_AXIS_X)
|
||||
+ {
|
||||
+ screen_val = device_wintab->screen_mapping_origin_x +
|
||||
+ (device_wintab->screen_mapping_width / (max_value - min_value)) *
|
||||
+ (device_val - min_value);
|
||||
+ window_val = screen_val - client.x;
|
||||
+ *x = axes[i] = window_val;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ screen_val = device_wintab->screen_mapping_origin_y +
|
||||
+ (device_wintab->screen_mapping_height / (max_value - min_value)) *
|
||||
+ (device_val - min_value);
|
||||
+ window_val = screen_val - client.y;
|
||||
+ *y = axes[i] = window_val;
|
||||
+ }
|
||||
+ }
|
||||
break;
|
||||
default:
|
||||
_gdk_device_translate_axis (device, i,
|
||||
@@ -264,12 +291,6 @@ _gdk_device_wintab_translate_axes (GdkDeviceWintab *device_wintab,
|
||||
break;
|
||||
}
|
||||
}
|
||||
-
|
||||
- if (x)
|
||||
- *x = temp_x;
|
||||
-
|
||||
- if (y)
|
||||
- *y = temp_y;
|
||||
}
|
||||
|
||||
static void
|
||||
diff --git a/gdk/win32/gdkdevice-wintab.h b/gdk/win32/gdkdevice-wintab.h
|
||||
index 9431215359..828dd198d6 100644
|
||||
--- a/gdk/win32/gdkdevice-wintab.h
|
||||
+++ b/gdk/win32/gdkdevice-wintab.h
|
||||
@@ -39,6 +39,11 @@ struct _GdkDeviceWintab
|
||||
{
|
||||
GdkDevice parent_instance;
|
||||
|
||||
+ double screen_mapping_origin_x;
|
||||
+ double screen_mapping_origin_y;
|
||||
+ double screen_mapping_width;
|
||||
+ double screen_mapping_height;
|
||||
+
|
||||
gboolean sends_core;
|
||||
gint *last_axis_data;
|
||||
gint button_state;
|
||||
diff --git a/gdk/win32/gdkdevicemanager-win32.c b/gdk/win32/gdkdevicemanager-win32.c
|
||||
index 34c0083cb3..d22dd3e68d 100644
|
||||
--- a/gdk/win32/gdkdevicemanager-win32.c
|
||||
+++ b/gdk/win32/gdkdevicemanager-win32.c
|
||||
@@ -633,6 +633,11 @@ _wintab_recognize_new_cursors (GdkDeviceManagerWin32 *device_manager,
|
||||
_gdk_device_add_slave (device_manager->core_pointer, GDK_DEVICE (device));
|
||||
}
|
||||
|
||||
+ device->screen_mapping_origin_x = lc.lcSysOrgX;
|
||||
+ device->screen_mapping_origin_y = lc.lcSysOrgY;
|
||||
+ device->screen_mapping_width = lc.lcSysExtX;
|
||||
+ device->screen_mapping_height = lc.lcSysExtY;
|
||||
+
|
||||
device->hctx = hctx;
|
||||
device->cursor = cursorix;
|
||||
(*p_WTInfoA) (WTI_CURSORS + cursorix, CSR_PKTDATA, &device->pktdata);
|
||||
--
|
||||
GitLab
|
||||
|
Reference in New Issue
Block a user