问题标签 [hidpi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - xrandr 两个屏幕分辨率不同,没有不可见区域
更新:问题已经解决了。它一定是在更新 xrandr、Xorg、nvidia 或 intel gpu 驱动程序或其他任何相关的东西时发生的,但它又可以正常工作了!毕竟不是我的错……
我的笔记本电脑有一个 4K (3840x2160) 屏幕(双 GPU,nvidia-prime),有时我想在 HDMI 端口上连接我的全高清电视来观看视频。我更喜欢电视不要镜像我的 4K 屏幕。
所以我启动 arandr 并启用 HDMI 输入。在我之前安装这台笔记本电脑(Linux Arch)时,我的 4K 屏幕被限制为 1920x1080,所以 3/4 的屏幕无法使用,即使没有镜像,但我会只使用镜像观看受限的视频到 4K 屏幕的 1/4,即完整的电视。在我新安装的这台笔记本电脑(同样是 Linux Arch)上,我的桌面似乎调整为 5760x2160,这使得电视只显示屏幕的上半部分,并且由于视频应用程序认为我的屏幕是 1920x2160 而无法正确显示视频。
所以这些情况都不是我想要的。我希望它能够像在 Windows 中一样工作(或者就像我在台式电脑上安装的 Arch 一样,左侧有一个全高清屏幕,右侧有一个 1:1 2K 屏幕,它在那里工作得非常好):一个左边4K屏,右边一个Full HD屏幕,鼠标不能从左到右穿过屏幕下方,所以桌面左边是3840x2160,右边是1920x1080,右边屏幕有相同的上边缘,因此当我转到右侧屏幕时鼠标保持在顶部。
当我试图自动执行此操作时,我希望它可以与 xrandr 一起使用(我已经编写了一个可以工作的 udev 脚本),但即使使用 xrandr,我似乎也无法正确设置参数。
我尝试了很多东西,但我似乎误解了选项或其他东西,因为无论我尝试什么,它都没有像我预期的那样工作。
我试过的最简单的方法就是:xrandr --output HDMI-1-0 --auto --right-of eDP-1 --mode 1920x1080 --pos 3840x0。我尝试添加--fb 1920x1080。它似乎不起作用。
谁能帮我理解它,甚至可以帮我配置它?
编辑:我不知道它是否重要,但我使用 i3。
编辑:如果我将 4K 屏幕的分辨率更改为 1920x1080,则镜像效果很好。这是唯一可用的方法,但这仍然不是我想要的。
编辑:这太奇怪了,我刚刚做了xrandr --output eDP-1 --auto --output HDMI-1-0 --auto --right-of eDP-1,我的电视现在显示一个空桌面,但我的鼠标仅限于 4K 屏幕,当我在左上角区域时,鼠标也出现在电视上......所以感觉就像电视显示了 4K 屏幕的一部分,但鼠标在左上角。
编辑:我试过的另一件事不起作用:xrandr --output eDP-1 --mode 3840x2160 --fb 3840x2160 --output HDMI-1-0 --mode 1920x1080 --fb 1920x1080 --right-of eDP-1 xrandr: specified screen 1920x1080 not large enough for output eDP-1 (3840x2160+0+0) xrandr: specified screen 1920x1080 not large enough for output HDMI-1-0 (1920x1080+3840+0)
c++ - 使用 HidD_GetInputReport(..) 检索 XBOX ONE 按钮状态
我正在尝试通过 Microsoft HID API 与 XBOX ONE 控制器交谈,而不使用XINPUT。我目前能够通过使用HidD_SetOutputReport(HANDLE, VOID*, ULONG). 但是我一直坚持使用HidD_GetInputReport(HANDLE, VOID*, ULONG)或使用和不使用和使用Windows 事件ReadFile() / ReadFileEx()创建 HANDLE 来读取按钮值。FILE_FLAG_OVERLAPPEDOVERLAPPED
在以下文章https://github.com/quantus/xbox-one-controller-protocol的帮助下,我已经对 USB URB 协议进行了逆向工程。主要目标是克服 XINPUT 开销并编写一个灵活的框架,以便我也可以集成其他游戏手柄。
这就是我完成的:
- 我已经通过 USB 将游戏手柄连接到我的电脑(这样我就可以读取从设备发送和接收的所有 USB 包)
- 我使用
SetupDiGetClassDevs(...)、SetupDiEnumDeviceInfo(...)和找到了控制器SetupDiEnumDeviceInterfaces(...)的路径SetupDiGetDeviceInterfaceDetail(...) - 我已经使用创建了设备的句柄
HANDLE gamePad = CreateFile(path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL) - Using
HidP_GetCaps(HANDLE, HIDP_CAPS*)似乎没有返回有效数据,因为它报告的 OutputReportByteLength 为 0,但我能够发送大小为 5(打开)和 9(设置震动马达)的输出报告 - 所有输入和输出数据(至少按钮和 Rumble 电机)似乎都遵循以下模式
- 有了这些信息,我就可以让马达和触发器按照我的意愿发出隆隆声
例如:我的两个输出隆隆声数据包看起来像这样(使用脉冲长度来脏地打开和关闭电机):
这会打开所有电机,其中隆隆声电机的速度为 0xFF,触发器的速度为 0xF0。我是这样做的:
现在我的问题
查看来自控制器的输入包,您似乎需要创建一个大小为 0x0E = 14 的缓冲区,ZeroMemory 它(或者像 MSDN 建议的那样将第一个字节写入 0)然后调用HidD_GetInputReport(HANDLE, buffer, 14)

所以我所做的是调用HidD_FlushQueue()以确保下一个包是输入包。然后我插入一点延迟,以便能够更改一些控制器值。之后我尝试读入一个 BYTE 数组,HidD_GetInputReport(HANDLE, cmd_in, 14)但函数总是失败GetLastError() == 0x00000057 // ERROR_INVALID_PARAMETER
由于 HID 能够过滤包,因此可能需要分配一个比预期大一字节的缓冲区,并将所需的报告 ID 传递到位置 0 的缓冲区。这就是我所做的:
仍然没有成功。由于该HidP_GetCaps(...)函数报告了 16 的输入报告(但我不相信这一点,因为它已经用 0 的输出报告大小欺骗了我)我尝试扫描许多缓冲区大小:
和
仍然没有成功。根据特殊要求的输出格式和错误的HidP_GetCaps(...)读数,我怀疑 XBOX ONE 游戏手柄驱动程序需要输入缓冲区中已经存在的特殊标头(据我所知 HidD_GetInputReport(...) 只是调用用户/内核模式驱动程序调用返回;因此驱动程序可以自由地执行检查并拒绝发送给它的所有数据)
也许那里的任何人都知道如何为 XBOX One 控制器调用 HidD_GetInputReport(...)
我知道可以检索输入数据,因为SimpleHIDWrite能够看到按钮状态。即使格式完全不同(例如,两个触发器组合在一个字节中。在 USB Packed 中,每个触发器都有自己的字节):
我还应该提到,HIDWrite 无需按任何按钮即可查看数据!查看来自 SimpleHIDWrite 的日志,它看起来像是RD从0015 个字节的数据中读取的,有一个 16 字节的数组和 00 处的元素 0(在我的应用程序中不起作用)。或者它只是转储所有传入的数据。如果是,这怎么可能?这对我来说也是一个选择!
c++ - SDL_GetCurrentDisplayMode 未返回正确的窗口大小
我的问题是如何获取当前的窗口大小?
它需要能够获得全屏或窗口的窗口大小。
我正在使用 SDL2、Glad、OpenGL #ver 130。在窗口 10 上进行缩放。
我将窗口初始化为 1280x720。
它是一个 OpenGL 上下文启用窗口。
我想要的只是获取当前的窗口大小。我预计它是 1280x720。
终端输出。
然而我得到一个奇数,1707x960。我不认为这是正确的。
linux - 为 X 托盘设置环境变量
我想为整个系统(处理 HiDPI)设置环境变量,但负责 X 托盘图标的进程除外GDK_SCALE。GDK_DPI_SCALE我正在努力弄清楚负责该工作的较低级别的流程是什么。我有 Lightdm + i3 但我不确定哪个负责 X。
java - Swing HiDPI 边框渲染(Windows 10/OpenJRE 11)
我维护一个旧的 Swing 应用程序,该应用程序使用自定义边框实现作为窗口装饰,并具有look and feel扩展MetalLookAndFeel的实现。look and feel覆盖并安装自initComponentDefaults(UIDefaults table)定义边框"RootPane.frameBorder"等等。
自定义边框本身通过实现将 32 行预定义颜色水平绘制在一起paintBorder(Component c, Graphics g, int x, int y, int width, int height)。当display scaling在Settings > Display > Scale and layout. 当display scaling设置为 125% 或更高时,将无法正确绘制边框,它在应该一起绘制的线条之间有白线。
Fix scaling for appsinAdvanced scaling settings似乎不影响边框绘制。
我用AdoptOpenJDK OpenJDK 11.0.4+11 x64. 我希望 Swing 也能扩大线条,如字体等。
为什么会这样?如何解决这个问题?
边界实现:
linux - 在 JavaFX 应用程序中检测 HIDPI 设置
JDK 15目前,我JavaFX 15在GNOME/WaylandLinux 上使用 4K 显示器。生成的应用程序似乎无法检测到我的 200% 高档设置。
在研究时,我提出了这个建议迁移到 JavaFX 11 的 bug 票,它不再有效。
我应该如何检测并强制升级我的 JavaFX 应用程序?
.net - Winforms 高 DPI 不缩放字体大小
在我的 .NET 4.7 Windows 窗体应用程序中,我按照此处的说明配置了高 DPI 支持。
我像这样配置我的 Windows:
我TableLayoutPanel在表单和所有容器上使用并保留默认字体设置来布局表单。只有我的控件 ( Label, Button) 设置了自定义字体。
当我更改显示的比例因子时,表单、布局和控件都会相应地缩放。但是字体大小没有缩放;文本的大小保持不变。
制作 WinForms 自动缩放字体以及其他所有内容需要什么?
100% 缩放:
150% 缩放 - 控件已调整大小但字体大小保持不变:
作为参考,这是我的应用清单:
和我的 app.config:
gnome - 通过 GUI 设置 GNOME 显示比例究竟修改了什么?
通过“GNOME 设置”( gnome-control-center display) 将显示比例设置为 200% 后,我scaling-factor通过命令行检查:
如您所见,scaling-factor仍然是 1 (100%)。那么通过GUI设置GNOME显示比例究竟修改了什么?






