Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

windows11下全屏显示盖住虚拟键盘 #171

Open
mio-19 opened this issue Jul 22, 2023 · 10 comments
Open

windows11下全屏显示盖住虚拟键盘 #171

mio-19 opened this issue Jul 22, 2023 · 10 comments

Comments

@mio-19
Copy link

mio-19 commented Jul 22, 2023

我使用了第三方程序手势拉起键盘。看不到但是按到相应位置wiliwili会识别到输入

22h2 22621.1928

wiliwili 1.0.1

@xfangfang
Copy link
Owner

我在win11下通过从屏幕底部向上滑动呼出任务栏,进而打开虚拟键盘,这么操作是没问题的。
会不会问题来自这个第三方唤起的程序呢?

@mio-19
Copy link
Author

mio-19 commented Jul 22, 2023

有可能 我用的是Store里的TouchMe

@mio-19
Copy link
Author

mio-19 commented Jul 22, 2023

uwp版本不会挡 但是uwp似乎不支持虚拟键盘输入

@xfangfang
Copy link
Owner

xfangfang commented Jul 22, 2023

你可以先试试我说的那个方式有没有问题


抱歉,不小心给关闭了,重新开启

@xfangfang xfangfang reopened this Jul 22, 2023
@mio-19
Copy link
Author

mio-19 commented Jul 26, 2023

你可以先试试我说的那个方式有没有问题

抱歉,不小心给关闭了,重新开启

我的设备上不同呼出方式结果类似

再试了一次,用任务栏呼出可以正常使用了。

@domexie
Copy link

domexie commented Sep 28, 2023

也许将wiliwili在windows平台的全屏方式改为窗口化全屏会更好一些

@xfangfang
Copy link
Owner

也许将wiliwili在windows平台的全屏方式改为窗口化全屏会更好一些

我对windows下全屏的区别不是很了解,请问一下

  1. wiliwili目前使用的是什么方式的全屏方案
  2. 如何在windows下判断一个应用使用了什么全屏方式
  3. windows下一共有多少种全屏方式, 为什么wiliwili应该选择某一种方式

@domexie
Copy link

domexie commented Oct 6, 2023

  1. wiliwili目前使用的是独占全屏
  2. 如果只要窗口焦点离开全屏应用(例如按下windows徽标键),就会造成显示器重连(黑屏再恢复),即为独占全屏。反之,如果按windows徽标键不会导致黑屏,则是通过创建一个与屏幕相同大小,坐标为0,0的无边框窗口来实现的窗口化全屏。
  3. windows下粗略来说有两种全屏实现方式:不受DWM管理的独占全屏和受DWM管理的窗口化全屏。在win10之前的系统,独占全屏具有性能优势,但是在win10及之后,两者的性能差距很小,并且独占全屏会导致开启关闭全屏时或切换焦点时显示器重连,黑屏一秒钟左右,很影响体验,因此我认为wiliwili使用窗口化全屏,使用起来会更方便。以下是典型的体验优化场景:
    a. 开启和关闭全屏时
    b. 具有多个显示器,其中一个运行wiliwili时
    c. 全屏使用wiliwili,想在前台开启窗口应用时

@xfangfang
Copy link
Owner

@domexie 感谢回复,我最近一段时间手头没有windows设备来测试,但是感觉好像在之前我的电脑上没有出现类似的情况。

wiliwili 同时支持GLFW和SDL2来创建窗口,默认使用的是GLFW。全屏相关的代码在:https://github.com/xfangfang/borealis/blob/6cf1fe70000d1db9ccceb50d93ef5eab20c7d9c6/library/lib/platforms/glfw/glfw_video.cpp#L506

可以对照GLFW的文档看看怎么创建需要的窗口模式。

同时也可以切用SDL2看看有没有改善,在cmake时添加 -DUSE_SDL2=ON 即可切换。SDL2 全屏相关的代码在:https://github.com/xfangfang/borealis/blob/6cf1fe70000d1db9ccceb50d93ef5eab20c7d9c6/library/lib/platforms/sdl/sdl_video.cpp#L407

因为wiliwili支持的平台比较多,我确实没有太充裕的时间去维护各个平台的这些小细节,感兴趣的话欢迎测试修改提交PR。

@domexie
Copy link

domexie commented Oct 6, 2023

抱歉,花了一些时间修改代码调试之后,我发现wiliwili目前的全屏方式属于GLFW文档中的“Windowed full screen”,在没有显示器开启HDR模式时确实不会黑屏。但是如果有开启HDR功能的显示器,似乎是因为色域不同的原因,video mode发生改变,实际上进入了独占全屏,因此会出现我上面提到的问题。如果想要彻底不黑屏,需要将全屏方式改为Borderless window(我上一条comment里面说的窗口化全屏实际上是这个)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants