Browse Source

update RGFW (fixes xdnd bug)

pull/4480/head
ColleagueRiley 1 week ago
parent
commit
2998c0c70d
1 changed files with 25 additions and 13 deletions
  1. +25
    -13
      src/external/RGFW.h

+ 25
- 13
src/external/RGFW.h View File

@ -516,7 +516,7 @@ typedef RGFW_ENUM(u8, RGFW_event_types) {
char name[128]; /*!< monitor name */
RGFW_rect rect; /*!< monitor Workarea */
float scaleX, scaleY; /*!< monitor content scale*/
float physW, physH; /*!< monitor physical size */
float physW, physH; /*!< monitor physical size in inches*/
} RGFW_monitor;
/*
@ -2969,6 +2969,7 @@ Start of Linux / Unix defines
xdnd.source = E.xclient.data.l[0];
xdnd.version = E.xclient.data.l[1] >> 24;
xdnd.format = None;
if (xdnd.version > 5)
@ -3157,6 +3158,8 @@ Start of Linux / Unix defines
XFree(data);
if (xdnd.version >= 2) {
XEvent reply = { ClientMessage };
reply.xclient.format = 32;
reply.xclient.message_type = XdndFinished;
reply.xclient.data.l[1] = result;
reply.xclient.data.l[2] = XdndActionCopy;
@ -3759,8 +3762,8 @@ Start of Linux / Unix defines
RGFW_area size = RGFW_getScreenSize();
monitor.rect = RGFW_RECT(0, 0, size.w, size.h);
monitor.physW = DisplayWidthMM(display, screen);
monitor.physH = DisplayHeightMM(display, screen);
monitor.physW = DisplayWidthMM(display, screen) / 25.4;
monitor.physH = DisplayHeightMM(display, screen) / 25.4;
XGetSystemContentScale(display, &monitor.scaleX, &monitor.scaleY);
XRRScreenResources* sr = XRRGetScreenResourcesCurrent(display, RootWindow(display, screen));
@ -3773,8 +3776,8 @@ Start of Linux / Unix defines
}
if (ci == NULL) {
float dpi_width = round((double)monitor.rect.w/(p">((double)monitor.physW)/25.4));
float dpi_height = round((double)monitor.rect.h/(p">((double)monitor.physH)/25.4));
float dpi_width = round((double)monitor.rect.w/(double)monitor.physW);
float dpi_height = round((double)monitor.rect.h/(double)monitor.physH);
monitor.scaleX = (float) (dpi_width) / (float) 96;
monitor.scaleY = (float) (dpi_height) / (float) 96;
@ -3784,16 +3787,16 @@ Start of Linux / Unix defines
}
XRROutputInfo* info = XRRGetOutputInfo (display, sr, sr->outputs[screen]);
monitor.physW = info->mm_width;
monitor.physH = info->mm_height;
monitor.physW = info->mm_width / 25.4;
monitor.physH = info->mm_height / 25.4;
monitor.rect.x = ci->x;
monitor.rect.y = ci->y;
monitor.rect.w = ci->width;
monitor.rect.h = ci->height;
float dpi_width = round((double)monitor.rect.w/(p">((double)monitor.physW)/25.4));
float dpi_height = round((double)monitor.rect.h/(p">((double)monitor.physH)/25.4));
float dpi_width = round((double)monitor.rect.w/(double)monitor.physW);
float dpi_height = round((double)monitor.rect.h/(double)monitor.physH);
monitor.scaleX = (float) (dpi_width) / (float) 96;
monitor.scaleY = (float) (dpi_height) / (float) 96;
@ -8101,11 +8104,20 @@ RGFW_UNUSED(win); /*!< if buffer rendering is not being used */
monitor.rect = RGFW_RECT((int) bounds.origin.x, (int) bounds.origin.y, (int) bounds.size.width, (int) bounds.size.height);
CGSize screenSizeMM = CGDisplayScreenSize(display);
monitor.physW = screenSizeMM.width;
monitor.physH = screenSizeMM.height;
monitor.physW = (float)screenSizeMM.width / 25.4f;
monitor.physH = (float)screenSizeMM.height / 25.4f;
float dpi_width = round((double)monitor.rect.w/(double)monitor.physW);
float dpi_height = round((double)monitor.rect.h/(double)monitor.physH);
monitor.scaleX = (float) (dpi_width) / (float) 96;
monitor.scaleY = (float) (dpi_height) / (float) 96;
monitor.scaleX = ((monitor.rect.w / (screenSizeMM.width / 25.4)) / 96) + 0.25;
monitor.scaleY = ((monitor.rect.h / (screenSizeMM.height / 25.4)) / 96) + 0.25;
if (isinf(monitor.scaleX) || (monitor.scaleX > 1 && monitor.scaleX < 1.1))
monitor.scaleX = 1;
if (isinf(monitor.scaleY) || (monitor.scaleY > 1 && monitor.scaleY < 1.1))
monitor.scaleY = 1;
return monitor;
}

Loading…
Cancel
Save