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

关于高分辨率显示器下,开启缩放后输入法显示偏移问题的临时修改方案 #24

Open
szoyj opened this issue Jul 1, 2022 · 9 comments

Comments

@szoyj
Copy link

szoyj commented Jul 1, 2022

本地环境
Ubuntu 22.04,搜狗输入法 4.0.1.2123,编辑器intellij idea ce 2022.1.3,笔记本屏幕分辨率2560*1600,缩放比例150%

修改方案
由于能力有限也没有时间精力去找遍整个jbr源码,暂时没有找到函数可以直接获得系统的设置的缩放值。所以,需要各位自己根据自身情况写死。

修改这两行,调整result就行了。

+ if(c!=null)
+ result = new int[]{point.x - c.getPeer().getLocationOnScreen().x + caret_x, point.y - c.getPeer().getLocationOnScreen().y + font_height + caret_y};

修改后

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调试大法可以放这里
}

已知的问题

  1. 我本地系统缩放比例选择的是150%,但是scale值居然得写2,否则对不齐。
  2. x轴能对齐,y轴还是略微偏下,有强迫症的同学建议直接调整 result[1] 的值。

关于本地编译调试问题
1.编译参考 https://blog.csdn.net/qq_41929417/article/details/117171581https://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这样就很费时间了。

@Bryan2333
Copy link

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

你好,请问一下这边报错怎么解决?

@szoyj
Copy link
Author

szoyj commented Jul 4, 2022

你是不是直接修改了patch?得先打patch再直接修改源码。不能直接修改patch的,patch里有行信息。

tangruize added a commit to tangruize/JetBrainsRuntime-for-Linux-x64 that referenced this issue Oct 28, 2022
@tangruize
Copy link

tangruize commented Oct 29, 2022

@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

参考了

  1. HiDPI configuration – IDEs Support (IntelliJ Platform) | JetBrains
  2. JetBrainsRuntime/X11GraphicsDevice.java at jbr-release-17.0.4.1b653.1 · JetBrains/JetBrainsRuntime

@mygithub222225
Copy link

能不能提供一个配置文件修改呢,这样就不用自己编译了

1 similar comment
@mygithub222225
Copy link

能不能提供一个配置文件修改呢,这样就不用自己编译了

@SunicYosen
Copy link

编译过程中,打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

想请教一下咱们这边编译的版本和编译的流程是怎样的呢?

@Bryan2333
Copy link

Bryan2333 commented Apr 14, 2023

我fork了 @tangruize 的分支,将JBR版本更新到了17.0.6, Markdown预览功能在这版本的JBR是正常的。有需要可以下载来用 jbr-release-17.0.8.1b1080.1

@ihipop
Copy link

ihipop commented May 8, 2023

这个算法应该是对的
但是目前使用xwayland的情况下,GDK_SCALE 和 GDK_DPI_SCALE 环境变量不是必须的.而且现在也迁移到Xsettingsd了,
Xft.dpi / 96 作为缩放倍数,两倍缩放下 一般的组合是 GDK_SCALE=2 GDK_DPI_SCALE=0.5,乘积也可以是1 应该是可以忽略了.

@ihipop
Copy link

ihipop commented May 8, 2023

我fork了 @tangruize 的分支,将JBR版本更新到了17.0.6, Markdown预览功能在这版本的JBR是正常的。有需要可以下载来用 jbr-release-17.0.6b829.9

这个很不错 唯一的问题就是终端光标更随的问题了 原来的候选框在左下角 现在因为终端不跟随 跑到是左上角 眼睛看的有点累.要是解决不了,不行就把终端的候选框还默认放回左下角 可能比较能接受.

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

6 participants