本地环境
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调试大法可以放这里
}
已知的问题
- 我本地系统缩放比例选择的是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这样就很费时间了。