JetBrainsRuntime-for-Linux-x64
JetBrainsRuntime-for-Linux-x64 copied to clipboard
关于高分辨率显示器下,开启缩放后输入法显示偏移问题的临时修改方案
本地环境 Ubuntu 22.04,搜狗输入法 4.0.1.2123,编辑器intellij idea ce 2022.1.3,笔记本屏幕分辨率2560*1600,缩放比例150%
修改方案 由于能力有限也没有时间精力去找遍整个jbr源码,暂时没有找到函数可以直接获得系统的设置的缩放值。所以,需要各位自己根据自身情况写死。
修改这两行,调整result就行了。 https://github.com/RikudouPatrickstar/JetBrainsRuntime-for-Linux-x64/blob/9f6927487ba1af70bbdfb0fcc1cb6078ef6565ad/idea.patch#L296-L297
修改后
if(c!=null){
double scale = 2.0;
result = new int[]{point.x - c.getPeer().getLocationOnScreen().x + caret_x, point.y - c.getPeer().getLocationOnScreen().y + font_height + caret_y};
result[0] = (int)Math.round(result[0]*scale);
result[1] = (int)Math.round(result[1]*scale);
//print调试大法可以放这里
}
已知的问题
- 我本地系统缩放比例选择的是150%,但是scale值居然得写2,否则对不齐。
- x轴能对齐,y轴还是略微偏下,有强迫症的同学建议直接调整 result[1] 的值。
关于本地编译调试问题 1.编译参考 https://blog.csdn.net/qq_41929417/article/details/117171581 和 https://blog.csdn.net/joi_la/article/details/121998331 2.调试的话,先把编辑器安装目录下的jbr改名备份,再软链接到编译后的jdk目录(我这里是 ln -s xxxxx/JetBrainsRuntime/build/linux-x86_64-normal-server-release/jdk jbr),这样重新打开ide用的就是你编译的jbr了。 3.print调试大法,直接用下面这行,在我这里日志会输出到/home/xxxx/.cache/JetBrains/IdeaIC2022.1/log/idea.log里,直接tail -f就可以看了,每次在编辑器里鼠标点击或是按下键盘键就会有输出。
System.out.printf("%d %d %d %s %d %d %d %d %n", point.x, c.getPeer().getLocationOnScreen().x, caret_x, "=", point.y, c.getPeer().getLocationOnScreen().y, font_height, caret_y);
关于这行print里几个参数代表的含义,我推测point代表的是编辑器里editor控件的左上角坐标,c代表的是编辑器外框的左上角坐标,caret当然就是输入光标的位置了。 4. java代码修改后的重新编译,直接make images就行,几秒钟就编译好了,调试很方便。c代码make images无效,估计是修改后没有被编译工具检测到,我也没有深究,如果用make clean这样就很费时间了。
idea.patch:25: trailing whitespace.
idea.patch:41: trailing whitespace.
idea.patch:45: trailing whitespace.
idea.patch:96: trailing whitespace.
case KeyEvent.KEY_RELEASED:
idea.patch:146: trailing whitespace.
error: corrupt patch at line 324
你好,请问一下这边报错怎么解决?
你是不是直接修改了patch?得先打patch再直接修改源码。不能直接修改patch的,patch里有行信息。
@szoyj 在你的解决方案基础上,我简单修复了一下这个问题,可以下载试试会不会导致别的问题:Release 17.0.4.1-b469.62 · tangruize/JetBrainsRuntime-for-Linux-x64。没有什么问题的话再提一个pr.
修复方式:获取了X11的scale factor:
private int scale = ((X11GraphicsDevice)GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice()).getScaleFactor();
GDK的全局缩放factor(GDK_SCALE,org.gnome.desktop.interface/scaling-factor)只有整数才有效,字体缩放(GDK_DPI_SCALE)可以是浮点数,Xft.dpi (通过xrdb -q
查看)除以96为dpi定义的缩放倍数。最后的缩放倍数为(int)Math.round(GDK_SCALE * GDK_DPI_SCALE * (Xft.dpi / 96))
,所以你的缩放150%可能实际上大于2
参考了
能不能提供一个配置文件修改呢,这样就不用自己编译了
能不能提供一个配置文件修改呢,这样就不用自己编译了
编译过程中,打prehonor大佬的patch报错,尝试了多个版本:
main
:
$ git apply ../idea.patch
../idea.patch:25: trailing whitespace.
../idea.patch:41: trailing whitespace.
../idea.patch:45: trailing whitespace.
../idea.patch:96: trailing whitespace.
case KeyEvent.KEY_RELEASED:
../idea.patch:146: trailing whitespace.
error: patch failed: src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java:83
error: src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java: patch does not apply
master
:
$ git apply ../idea.patch
../idea.patch:25: trailing whitespace.
../idea.patch:41: trailing whitespace.
../idea.patch:45: trailing whitespace.
../idea.patch:96: trailing whitespace.
case KeyEvent.KEY_RELEASED:
../idea.patch:146: trailing whitespace.
warning: squelched 9 whitespace errors
warning: 14 lines add whitespace errors.
打RikudouPatrickstar大佬的patch也报错:
main
:
$ git apply ../idea_rikudou.patch
error: patch failed: src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java:156
error: src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java: patch does not apply
master
:
$ git apply ../idea_rikudou.patch
error: patch failed: src/java.desktop/share/classes/java/awt/Container.java:25
error: src/java.desktop/share/classes/java/awt/Container.java: patch does not apply
error: patch failed: src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java:86
error: src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java: patch does not apply
想请教一下咱们这边编译的版本和编译的流程是怎样的呢?
我fork了 @tangruize 的分支,将JBR版本更新到了17.0.6, Markdown预览功能在这版本的JBR是正常的。有需要可以下载来用 jbr-release-17.0.8.1b1080.1
这个算法应该是对的 但是目前使用xwayland的情况下,GDK_SCALE 和 GDK_DPI_SCALE 环境变量不是必须的.而且现在也迁移到Xsettingsd了, Xft.dpi / 96 作为缩放倍数,两倍缩放下 一般的组合是 GDK_SCALE=2 GDK_DPI_SCALE=0.5,乘积也可以是1 应该是可以忽略了.
我fork了 @tangruize 的分支,将JBR版本更新到了17.0.6, Markdown预览功能在这版本的JBR是正常的。有需要可以下载来用 jbr-release-17.0.6b829.9
这个很不错 唯一的问题就是终端光标更随的问题了 原来的候选框在左下角 现在因为终端不跟随 跑到是左上角 眼睛看的有点累.要是解决不了,不行就把终端的候选框还默认放回左下角 可能比较能接受.