870920 Menu

使juce::TextEditor具有行间距

JUCE的TextEditor(文本编辑器)在多行显示模式下没有额外的行间距,默认行高是当前所用字体的高度,导致阅读体验较差。可采用源码Hack(硬编码)的办法增大行间距。需改动3处(以JUCE 4.2.3版本为例)。打开../modules/juce_gui_basics/widgets/juce_TextEditor.cpp,277行找到TextEditor::Iterator类:

1. 修改每一行的行高,使之增加4个像素。472行beginNewLine()函数,481行lineHeight的高度加4:

2. 修改未选择状态下文本绘制的基线,目的是使之向上偏移2像素(行距增大值的1/2),位于该行的中间。524行找到draw()函数,538~540行绘制文本的语句改为:

3. 修改选择状态下文本绘制的基线,目的同上。564行找到drawSelectedText()函数,571~573行语句改为:

修改这3处之后,行间距功能即可实现。如果觉得4像素太少,可改为8或12像素(必须是4的倍数,否则选择文本后,文本绘制会发生上下偏移)。

这种修改有三处不完美的地方:一是插字符光标的大小不再是字体高度,而是行高。如果修改647行的getCharPosition()函数可修正此问题,但修正后,键盘上下光标键无法移动插字符,此问题有待进一步研究。二是单行文本框状态下选中文字后,文本绘制发生2像素向下偏移。三是升级JUCE类库后,丢失以上修改。