问题标签 [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_OVERLAPPED
OVERLAPPED
在以下文章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
从00
15 个字节的数据中读取的,有一个 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 apps
inAdvanced scaling settings
似乎不影响边框绘制。
我用AdoptOpenJDK OpenJDK 11.0.4+11 x64
. 我希望 Swing 也能扩大线条,如字体等。
为什么会这样?如何解决这个问题?
边界实现:
linux - 在 JavaFX 应用程序中检测 HIDPI 设置
JDK 15
目前,我JavaFX 15
在GNOME/Wayland
Linux 上使用 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显示比例究竟修改了什么?