diff --git a/NEWS.md b/NEWS.md
index d0c7d855..147d04d3 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -7,6 +7,7 @@ Red Panda C++ Version 0.13.4
- fix: static members are not correct shown after Classname + '::'
- enhancement: show parameter tips for class constructors
- enhancement: when there are tips showing, don't show mouse tips
+ - enhancement: setting non-ascii font for editors
Red Panda C++ Version 0.13.3
- enhancement: restore editor position after rename symbol
diff --git a/RedPandaIDE/RedPandaIDE_zh_CN.qm b/RedPandaIDE/RedPandaIDE_zh_CN.qm
index be776f37..473da76d 100644
Binary files a/RedPandaIDE/RedPandaIDE_zh_CN.qm and b/RedPandaIDE/RedPandaIDE_zh_CN.qm differ
diff --git a/RedPandaIDE/RedPandaIDE_zh_CN.ts b/RedPandaIDE/RedPandaIDE_zh_CN.ts
index 4e8299eb..e711c4b5 100644
--- a/RedPandaIDE/RedPandaIDE_zh_CN.ts
+++ b/RedPandaIDE/RedPandaIDE_zh_CN.ts
@@ -572,7 +572,7 @@ p, li { white-space: pre-wrap; }
[说明]
-
+
无法启动编译器进程'%1'。
@@ -581,27 +581,27 @@ p, li { white-space: pre-wrap; }
无法启动编译进程。
-
+
编译进程启动后崩溃。
-
+
waitFor()函数等待超时。
-
+
在向编译进程输入内容时出错。
-
+
在从编译进程读取内容时出错。
-
+
发生了未知错误。
@@ -1228,12 +1228,12 @@ Are you really want to continue?
失败
-
-
-
-
-
-
+
+
+
+
+
+
错误
@@ -1242,70 +1242,70 @@ Are you really want to continue?
无法写入文件"%1"
-
+
另存为
-
+
要复制的内容超过了行数限制!
-
+
要复制的内容超过了字符数限制!
-
+
要剪切的内容超过了行数限制!
-
+
要剪切的内容超过了字符数限制!
-
+
打印文档
-
-
-
+
+
+
Ctrl+单击以获取更多信息
-
-
+
+
未找到符号'%1'!
-
+
找不到astyle程序
-
+
找不到astyle程序"%1".
-
+
断点条件
-
+
输入当前断点的生效条件:
-
+
只读
@@ -1690,19 +1690,19 @@ Are you really want to continue?
-
+
大小:
-
+
- 字体:
+ 英文字体:
-
+
只显示等宽字体
@@ -1712,52 +1712,57 @@ Are you really want to continue?
启用合字显示支持(需要Fira Code等字体)
-
+
+
+ 非英文字体:
+
+
+
装订线
-
+
显示装订线区域
-
+
左侧留白
-
+
右侧留白
-
+
显示行号
-
+
在行号前补齐前导0
-
+
第一行从0开始编号
-
+
自动计算行号位数
-
+
行号位数
-
+
使用自定义字体
@@ -3218,70 +3223,70 @@ Are you really want to continue?
MainWindow
-
+
小熊猫C++
-
-
+
-
+
-
+
+
编译器
-
-
+
+
编译日志
-
+
文件
-
+
工具
-
-
+
+
运行
-
+
编辑
-
-
+
+
项目
-
+
监视
-
+
结构
-
+
文件
@@ -3290,85 +3295,85 @@ Are you really want to continue?
资源
-
-
-
-
-
+
+
+
+
+
调试
-
+
求值
-
-
+
+
调试主控台
-
+
调用栈
-
+
断点
-
+
局部变量
-
-
-
+
+
+
查找
-
+
历史:
-
+
重新查找
-
+
替换为:
-
+
替换
-
+
关闭
-
+
运行
-
-
+
+
代码
-
+
窗口
@@ -3386,249 +3391,249 @@ Are you really want to continue?
新建
-
+
Ctrl+N
-
+
打开...
-
+
Ctrl+O
-
+
保存
-
+
Ctrl+S
-
+
另存为...
-
+
另存为
-
+
全部保存
-
+
Ctrl+Shift+S
-
+
选项
-
-
-
-
-
+
+
+
+
+
编译
-
+
F9
-
+
F10
-
+
恢复
-
+
Ctrl+Z
-
+
重做
-
+
Ctrl+Y
-
+
剪切
-
+
Ctrl+X
-
-
-
+
+
+
复制
-
+
Ctrl+C
-
-
+
+
粘贴
-
+
Ctrl+V
-
-
+
+
选择全部
-
+
Ctrl+A
-
+
缩进
-
+
取消缩进
-
+
切换注释
-
+
Ctrl+/
-
+
全部收起
-
+
全部展开
-
+
使用ANSI编码
-
+
使用UTF-8编码
-
+
自动检测
-
+
转换为ANSI编码
-
+
转换为UTF-8编码
-
-
+
+
编译运行
-
+
F11
-
-
+
+
全部重编译
-
+
F12
-
+
停止执行
-
+
F6
-
+
F5
-
+
单步跳过
-
+
F7
-
+
单步进入
-
+
试题集
@@ -3636,7 +3641,7 @@ Are you really want to continue?
-
+
新建试题集
@@ -3655,544 +3660,544 @@ Are you really want to continue?
-
+
保存试题集
-
+
载入试题集
-
+
内存
-
+
Address:
地址表达式:
-
+
取消
-
-
+
+
TODO
-
-
+
+
书签
-
-
-
+
+
+
试题
-
-
+
+
添加试题案例
-
-
+
+
Remove Problem Set
删除试题集
-
-
+
+
打开答案源代码文件
-
-
+
+
Run Current Case
运行所有案例
-
+
测试案例验证选项
-
+
%v/%m
-
+
输出
-
+
输入
-
+
期望输出
-
+
帮助
-
+
重构
-
+
视图
-
+
工具窗口
-
+
主工具栏
-
+
编译器配置集
-
-
+
+
新建源代码文件
-
+
Tab
-
+
Shift+Tab
-
+
F8
-
+
单步跳出
-
+
Ctrl+F8
-
+
执行到光标处
-
+
Ctrl+F5
-
+
继续执行
-
+
F4
-
+
添加监视
-
+
打开CPU信息窗口...
-
+
退出
-
+
查找...
-
+
Ctrl+F
-
+
在文件中查找...
-
+
Ctrl+Shift+F
-
+
替换
-
+
Ctrl+R
-
+
查找下一个
-
+
F3
-
+
查找前一个
-
+
Shift+F3
-
+
删除监视值
-
+
Remove All
删除全部监视值
-
+
修改监视值
-
+
对代码重新排版
-
+
Ctrl+Shift+A
-
+
前一次编辑位置
-
+
Ctrl+Alt+Left
-
+
后一次编辑位置
-
+
Ctrl+Alt+Right
-
+
Ctrl+W
-
+
全部关闭
-
+
Ctrl+Shift+W
-
+
最大化编辑器
-
+
Ctrl+F11
-
+
下一窗口
-
+
Ctrl+Tab
-
+
前一窗口
-
+
Ctrl+Shift+Tab
-
+
切换断点
-
+
Ctrl+F4
-
-
+
+
删除所有断点
-
+
设置断点条件...
-
+
跳转到声明处
-
+
跳转到定义处
-
+
查找符号的引用
-
+
打开所在的文件夹
-
+
Ctrl+B
-
+
打开命令行窗口
-
+
文件属性...
-
+
关闭项目
-
+
项目属性
-
+
新建项目...
-
+
新建项目文件
-
+
添加到项目...
-
+
从项目删除
-
+
查看Makefile
-
+
清理构建文件
-
+
在浏览器中打开
-
+
在终端中打开
-
+
关于
-
-
+
+
重命名符号
-
+
Shift+F6
-
+
打印...
-
+
Ctrl+P
-
-
+
+
导出为RTF
-
-
+
+
导出为HTML
-
+
移动到其他视图
-
+
Ctrl+M
-
-
+
+
C++参考手册
-
+
C参考手册
-
+
工具窗口栏
-
+
状态栏
-
+
Ctrl+Backspace
-
+
中断
-
-
+
+
删除到单词开头
-
+
Ctrl+Shift+B
-
+
删除到单词结尾
-
+
Ctrl+Shift+E
@@ -4201,47 +4206,47 @@ Are you really want to continue?
插入行
-
+
删除当前行
-
+
Ctrl+D
-
+
复制当前行
-
+
Ctrl+E
-
+
删除当前单词
-
+
Ctrl+Shift+D
-
+
删除到行尾
-
+
Ctrl+Del
-
+
删除到行首
@@ -4250,43 +4255,43 @@ Are you really want to continue?
C/C++参考
-
+
EGE图形库手册
-
+
添加书签
-
+
删除书签
-
+
修改书签说明
-
+
在文件视图中定位
-
-
+
+
打开文件夹
-
+
运行参数...
-
+
文件编码
@@ -4296,32 +4301,32 @@ Are you really want to continue?
文件历史
-
-
-
-
-
-
+
+
+
+
+
+
正在调试
-
-
-
-
-
-
+
+
+
+
+
+
正在运行
-
-
-
-
-
-
+
+
+
+
+
+
正在编译
@@ -4330,177 +4335,177 @@ Are you really want to continue?
行:%1 列:%2 已选择:%3 总行数:%4 总长度:%5
-
+
Line: %1 Col: %2 Selected: %3 Lines: %4 Length: %5
行: %1 列: %2 已选择 :%3 总行数: %4 总长度: %5
-
+
只读
-
+
插入
-
+
覆写
-
+
关闭项目
-
+
你确定要关闭'%1'吗?
-
-
+
+
确认
-
-
-
+
+
+
源文件尚未编译。
-
-
+
+
现在编译?
-
-
+
+
源文件比可执行程序新。
-
+
重新编译?
-
+
无编译器设置
-
+
没有配置编译器设置。
-
+
无法启动调试器
-
-
+
+
启用调试参数
-
-
+
+
当前编译设置中未启用调试选项(-g3),或启用了信息剥除选项(-s)<br /><br/>是否纠正这一问题?
-
+
项目尚未构建
-
+
项目尚未构建。是否构建?
-
+
宿主程序不存在
-
+
动态链接库(DLL)需要一个宿主程序来运行。
-
+
但它不存在。
-
+
宿主程序不存在
-
+
宿主程序'%1'不存在。
-
+
重新编译?
-
-
+
+
保存上次打开信息失败
-
+
无法删除旧上次打开信息文件'%1'
-
+
无法保存上次打开信息文件'%1'
-
+
载入上次打开信息失败
-
+
无法载入上次打开信息文件'%1'
-
+
打开源代码文件
-
+
显示详细调试器日志
-
+
全部复制
-
-
+
+
清除
@@ -4516,7 +4521,7 @@ Are you really want to continue?
-
+
试题集%1
@@ -4537,68 +4542,68 @@ Are you really want to continue?
或者选择使用其他的网络端口。
-
-
+
+
重新构建项目
-
-
+
+
项目已经被修改过,是否需要重新构建?
-
+
自动保存出错
-
+
自动保存"%1"到"%2"失败:%3
-
+
试题属性...
-
+
设置试题集名称
-
+
试题集名称:
-
+
删除
-
+
删除全部书签
-
+
修改描述
-
-
-
+
+
+
书签描述
-
-
-
+
+
+
描述:
@@ -4607,240 +4612,240 @@ Are you really want to continue?
在调试主控台中显示调试器输出
-
+
清除这次搜索
-
+
删除所有搜索
-
+
断点条件...
-
+
断点条件
-
+
输入当前断点的生效条件:
-
+
Remove all breakpoints
删除所有断点
-
+
删除当前断点
-
+
重命名文件
-
-
+
+
添加文件夹
-
+
新文件夹
-
+
文件夹:
-
+
重命名
-
+
删除文件夹
-
+
按类型排序
-
+
按名称排序
-
+
显示继承的成员
-
+
跳转到声明处
-
+
跳转到定义处
-
+
在编辑器中打开
-
+
使用外部程序打开
-
+
在终端中打开
-
+
在Windows浏览器中打开
-
+
字符集
-
+
已自动保存%1个文件
-
+
设置答案源代码...
-
+
选择其他文件...
-
+
选择答案源代码文件
-
+
C/C++Source Files (*.c *.cpp *.cc *.cxx
C/C++源代码文件 (*.c *.cpp *.cc *.cxx)
-
+
保存项目
-
+
项目'%1'有改动。
-
-
+
+
需要保存吗?
-
-
+
+
文件已发生变化
-
+
新建项目文件?
-
+
您是否要将新建的文件加入项目?
-
-
-
-
+
+
+
+
保存失败
-
+
改变项目编译器配置集
-
+
改变项目的编译器配置集会导致所有的自定义编译器选项被重置。
-
+
你真的想要做那些吗?
-
+
您真的要清除该文件的所有断点吗?
-
+
新建项目
-
+
关闭'%1'以打开新项目?
-
+
文件夹不存在
-
+
文件夹'%1'不存在。是否创建?
-
+
无法创建文件夹
-
+
创建文件夹'%1'失败。
-
+
@@ -4849,125 +4854,125 @@ Are you really want to continue?
小熊猫Dev-C++项目文件 (*.dev)
-
+
新建项目失败
-
+
无法使用模板创建项目
-
+
删除文件
-
+
同时从硬盘上删除文件?
-
+
无标题
-
+
新的项目文件名
-
+
文件名:
-
+
文件已存在!
-
+
文件'%1'已经存在!
-
+
添加到项目
-
+
小熊猫C++项目文件(*.dev)
-
+
重命名出错
-
+
符号'%1'在系统头文件中定义,无法修改。
-
+
新名称
-
-
+
+
替换出错
-
+
无法打开文件'%1'进行替换!
-
+
内容和上次查找时不一致。
-
+
RTF格式文件 (*.rtf)
-
+
HTML文件 (*.html)
-
+
当前的试题集不是空的。
-
+
试题%1
-
-
+
+
试题集文件 (*.pbs)
-
+
载入失败
-
-
+
+
试题案例%1
@@ -4978,15 +4983,15 @@ Are you really want to continue?
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
错误
@@ -4996,75 +5001,75 @@ Are you really want to continue?
项目历史
-
+
磁盘文件'%1'已被修改。
-
+
是否重新读取它的内容?
-
+
磁盘文件'%1'已被删除。
-
+
是否保持它在小熊猫C++中打开的编辑窗口?
-
+
打开
-
+
编译失败
-
+
运行失败
-
-
+
+
确认转换
-
-
+
+
当前编辑器中的文件将会使用%1编码保存。<br />这项操作无法被撤回。<br />你确定要继续吗?
-
+
新监视表达式
-
+
输入监视表达式
-
+
(%1/%2)正在解析文件"%3"
-
-
+
+
完成%1个文件的解析,用时%2秒
-
+
(每秒%1个文件)
@@ -5920,7 +5925,7 @@ Are you really want to continue?
QApplication
-
+
错误
@@ -5974,221 +5979,221 @@ Are you really want to continue?
-
-
+
+
错误
-
+
无法创建配置文件夹"%1"
-
+
无法写入配置文件夹"%1"
-
+
无法载入自动链接设置
-
-
-
-
+
+
+
+
下列%1文件夹不存在:
-
-
+
+
二进制
-
+
未指定%1文件夹
-
+
C包含
-
-
+
+
C++包含
-
-
-
-
+
+
+
+
无法找到%1程序"%2"
-
+
C编译器
-
+
C++编译器
-
+
构建程序(Make)
-
+
调试器
-
+
C语言选项
-
+
支持所有ANSI标准C程序(-ansi)
-
+
不支持将asm、inline和typeof作为关键字(-fno-asm)
-
+
模仿传统C预处理器行为(-traditional-cpp)
-
+
代码生成
-
+
生成特定机器的专用指令(-march)
-
+
完整兼容特定机器,较少优化(-tune)
-
+
启用特定指令集(-mx)
-
+
优化级别(-Ox)
-
+
使用下列指针大小编译(-mx)
-
+
语言标准(-std)
-
+
性能分析
-
+
生成调试信息(-g3)
-
+
您同意小熊猫C++在PATH路径中寻找gcc编译器吗?
-
+
生成性能分析信息(-pg)
-
+
代码警告
-
+
忽略所有警告信息(-w)
-
+
启用常见问题警告(-Wall)
-
+
启用更多问题警告(-Wextra)
-
+
检查ISO C/C++/C++0x语法一致性(-pedantic)
-
+
只进行语法检查(不编译)(-fsyntax-only)
-
+
将警告作为错误处理(-Werror)
-
+
遇到第一个错误后立即中止编译(-Wfatal-errors)
-
+
链接器
-
+
链接Objective-C程序 (-lobjc)
-
+
不使用标准库和系统启动文件(-nostdlib)
-
+
不产生控制台窗口(-mwindows)
-
+
剥除附加信息(-s)
@@ -6197,54 +6202,54 @@ Are you really want to continue?
链接Ojbective C程序(-lobjc)
-
+
输出
-
+
在生成的汇编代码中加入注释(-fverbose-asm)
-
+
编译时使用管道而不是临时文件(-pipe)
-
+
只生成汇编代码(-S)
-
-
+
+
确认
-
+
在验证编译器设置"%1"时遇到了下列问题:
-
+
是否让小熊猫C++删除这些配置,并尝试重新建立配置?
-
+
如果仍然保留这些设置,可能会导致编译错误。<br /><br />请选择“是”,除非您清楚的知道选择“否”的后果,
-
-
+
+
未配置编译器设置。
-
+
您需要小熊猫C++在下列位置搜索编译器吗:<br />%1<br />%2
@@ -6596,26 +6601,26 @@ Are you really want to continue?
无标题
-
+
构造函数
-
+
析构函数
-
-
+
+
无法读取文件'%1'.
-
-
+
+
无法写入文件'%1'.
@@ -7078,7 +7083,7 @@ Are you really want to continue?
自动链接
-
+
@@ -7154,15 +7159,15 @@ Are you really want to continue?
杂项
-
-
+
+
程序运行
-
+
试题集
@@ -7405,8 +7410,8 @@ Are you really want to continue?
SynEdit
-
-
+
+
高亮处理进入了死循环
diff --git a/RedPandaIDE/editor.cpp b/RedPandaIDE/editor.cpp
index 4a514bf1..ec3724a0 100644
--- a/RedPandaIDE/editor.cpp
+++ b/RedPandaIDE/editor.cpp
@@ -4170,6 +4170,10 @@ void Editor::applySettings()
f.setPixelSize(pointToPixel(pSettings->editor().fontSize()));
f.setStyleStrategy(QFont::PreferAntialias);
setFont(f);
+ QFont f2=QFont(pSettings->editor().nonAsciiFontName());
+ f2.setPixelSize(pointToPixel(pSettings->editor().fontSize()));
+ f2.setStyleStrategy(QFont::PreferAntialias);
+ setFontForNonAscii(f2);
// Set gutter properties
gutter().setLeftOffset(pointToPixel(pSettings->editor().fontSize()) + pSettings->editor().gutterLeftOffset());
diff --git a/RedPandaIDE/qsynedit/SynEdit.cpp b/RedPandaIDE/qsynedit/SynEdit.cpp
index b4eb6884..06065d98 100644
--- a/RedPandaIDE/qsynedit/SynEdit.cpp
+++ b/RedPandaIDE/qsynedit/SynEdit.cpp
@@ -69,6 +69,8 @@ SynEdit::SynEdit(QWidget *parent) : QAbstractScrollArea(parent)
mFontDummy.setStyleStrategy(QFont::PreferAntialias);
setFont(mFontDummy);
+ setFontForNonAscii(mFontDummy);
+
mUndoList = std::make_shared();
mUndoList->connect(mUndoList.get(), &SynEditUndoList::addedUndo, this, &SynEdit::onUndoAdded);
mOrigUndoList = mUndoList;
@@ -3103,14 +3105,21 @@ void SynEdit::recalcCharExtent()
mTextHeight = 0;
mCharWidth = 0;
QFontMetrics fm(font());
- mTextHeight = fm.lineSpacing();
+ QFontMetrics fm2(font());
+ mTextHeight = std::max(fm.lineSpacing(),fm2.lineSpacing());
mCharWidth = fm.horizontalAdvance("M");
+
if (hasStyles[0]) { // has bold font
QFont f = font();
f.setBold(true);
QFontMetrics fm(f);
+ QFont f2 = font();
+ f2.setBold(true);
+ QFontMetrics fm2(f);
if (fm.lineSpacing()>mTextHeight)
mTextHeight=fm.lineSpacing();
+ if (fm2.lineSpacing()>mTextHeight)
+ mTextHeight=fm2.lineSpacing();
if (fm.horizontalAdvance("M")>mCharWidth)
mCharWidth = fm.horizontalAdvance("M");
}
@@ -3118,8 +3127,13 @@ void SynEdit::recalcCharExtent()
QFont f = font();
f.setItalic(true);
QFontMetrics fm(f);
+ QFont f2 = font();
+ f2.setItalic(true);
+ QFontMetrics fm2(f);
if (fm.lineSpacing()>mTextHeight)
mTextHeight=fm.lineSpacing();
+ if (fm2.lineSpacing()>mTextHeight)
+ mTextHeight=fm2.lineSpacing();
if (fm.horizontalAdvance("M")>mCharWidth)
mCharWidth = fm.horizontalAdvance("M");
}
@@ -3127,8 +3141,13 @@ void SynEdit::recalcCharExtent()
QFont f = font();
f.setStrikeOut(true);
QFontMetrics fm(f);
+ QFont f2 = font();
+ f2.setStrikeOut(true);
+ QFontMetrics fm2(f);
if (fm.lineSpacing()>mTextHeight)
mTextHeight=fm.lineSpacing();
+ if (fm2.lineSpacing()>mTextHeight)
+ mTextHeight=fm2.lineSpacing();
if (fm.horizontalAdvance("M")>mCharWidth)
mCharWidth = fm.horizontalAdvance("M");
}
@@ -3136,8 +3155,13 @@ void SynEdit::recalcCharExtent()
QFont f = font();
f.setUnderline(true);
QFontMetrics fm(f);
+ QFont f2 = font();
+ f2.setUnderline(true);
+ QFontMetrics fm2(f);
if (fm.lineSpacing()>mTextHeight)
mTextHeight=fm.lineSpacing();
+ if (fm2.lineSpacing()>mTextHeight)
+ mTextHeight=fm2.lineSpacing();
if (fm.horizontalAdvance("M")>mCharWidth)
mCharWidth = fm.horizontalAdvance("M");
}
@@ -3736,6 +3760,17 @@ void SynEdit::onScrolled(int)
invalidate();
}
+const QFont &SynEdit::fontForNonAscii() const
+{
+ return mFontForNonAscii;
+}
+
+void SynEdit::setFontForNonAscii(const QFont &newFontForNonAscii)
+{
+ mFontForNonAscii = newFontForNonAscii;
+ mFontForNonAscii.setStyleStrategy(QFont::PreferAntialias);
+}
+
const QColor &SynEdit::backgroundColor() const
{
return mBackgroundColor;
diff --git a/RedPandaIDE/qsynedit/SynEdit.h b/RedPandaIDE/qsynedit/SynEdit.h
index d30f1210..81352f5d 100644
--- a/RedPandaIDE/qsynedit/SynEdit.h
+++ b/RedPandaIDE/qsynedit/SynEdit.h
@@ -619,6 +619,7 @@ private:
int mCharsInWindow;
int mCharWidth;
QFont mFontDummy;
+ QFont mFontForNonAscii;
SynFontSmoothMethod mFontSmoothing;
bool mMouseMoved;
/* IME input */
@@ -756,6 +757,9 @@ public:
QVariant inputMethodQuery(Qt::InputMethodQuery property) const override;
// QWidget interface
+const QFont &fontForNonAscii() const;
+void setFontForNonAscii(const QFont &newFontForNonAscii);
+
protected:
void dragEnterEvent(QDragEnterEvent *event) override;
void dropEvent(QDropEvent *event) override;
diff --git a/RedPandaIDE/qsynedit/TextPainter.cpp b/RedPandaIDE/qsynedit/TextPainter.cpp
index fb633f9e..134f0432 100644
--- a/RedPandaIDE/qsynedit/TextPainter.cpp
+++ b/RedPandaIDE/qsynedit/TextPainter.cpp
@@ -381,7 +381,9 @@ int SynEditTextPainter::ColumnToXValue(int Col)
return edit->textOffset() + (Col - 1) * edit->mCharWidth;
}
-void SynEditTextPainter::PaintToken(const QString &Token, int TokenCols, int ColumnsBefore, int First, int Last, bool)
+void SynEditTextPainter::PaintToken(const QString &Token, int TokenCols, int ColumnsBefore,
+ int First, int Last, bool /*isSelection*/, const QFont& font,
+ const QFont& fontForNonAscii)
{
bool startPaint;
int nX;
@@ -446,7 +448,13 @@ void SynEditTextPainter::PaintToken(const QString &Token, int TokenCols, int Col
}
}
if (!drawed) {
- painter->drawText(nX,rcToken.bottom()-painter->fontMetrics().descent() , Token[i]);
+ if (Token[i].unicode()<=255)
+ painter->drawText(nX,rcToken.bottom()-painter->fontMetrics().descent() , Token[i]);
+ else {
+ painter->setFont(fontForNonAscii);
+ painter->drawText(nX,rcToken.bottom()-painter->fontMetrics().descent() , Token[i]);
+ painter->setFont(font);
+ }
drawed = true;
}
nX += charCols * edit->mCharWidth;
@@ -552,30 +560,36 @@ void SynEditTextPainter::PaintHighlightToken(bool bFillToEOL)
font.setStrikeOut(TokenAccu.Style & SynFontStyle::fsStrikeOut);
font.setUnderline(TokenAccu.Style & SynFontStyle::fsUnderline);
painter->setFont(font);
+ QFont nonAsciiFont = edit->fontForNonAscii();
+ nonAsciiFont.setBold(TokenAccu.Style & SynFontStyle::fsBold);
+ nonAsciiFont.setItalic(TokenAccu.Style & SynFontStyle::fsItalic);
+ nonAsciiFont.setStrikeOut(TokenAccu.Style & SynFontStyle::fsStrikeOut);
+ nonAsciiFont.setUnderline(TokenAccu.Style & SynFontStyle::fsUnderline);
+
// Paint the chars
if (bComplexToken) {
// first unselected part of the token
if (bU1) {
setDrawingColors(false);
rcToken.setRight(ColumnToXValue(nLineSelStart));
- PaintToken(TokenAccu.s,TokenAccu.Columns,TokenAccu.ColumnsBefore,nC1,nLineSelStart,false);
+ PaintToken(TokenAccu.s,TokenAccu.Columns,TokenAccu.ColumnsBefore,nC1,nLineSelStart,false,font,nonAsciiFont);
}
// selected part of the token
setDrawingColors(true);
nC1Sel = std::max(nLineSelStart, nC1);
nC2Sel = std::min(nLineSelEnd, nC2);
rcToken.setRight(ColumnToXValue(nC2Sel));
- PaintToken(TokenAccu.s, TokenAccu.Columns, TokenAccu.ColumnsBefore, nC1Sel, nC2Sel,true);
+ PaintToken(TokenAccu.s, TokenAccu.Columns, TokenAccu.ColumnsBefore, nC1Sel, nC2Sel,true,font,nonAsciiFont);
// second unselected part of the token
if (bU2) {
setDrawingColors(false);
rcToken.setRight(ColumnToXValue(nC2));
- PaintToken(TokenAccu.s, TokenAccu.Columns, TokenAccu.ColumnsBefore,nLineSelEnd, nC2,false);
+ PaintToken(TokenAccu.s, TokenAccu.Columns, TokenAccu.ColumnsBefore,nLineSelEnd, nC2,false,font,nonAsciiFont);
}
} else {
setDrawingColors(bSel);
rcToken.setRight(ColumnToXValue(nC2));
- PaintToken(TokenAccu.s, TokenAccu.Columns, TokenAccu.ColumnsBefore, nC1, nC2,bSel);
+ PaintToken(TokenAccu.s, TokenAccu.Columns, TokenAccu.ColumnsBefore, nC1, nC2,bSel,font,nonAsciiFont);
}
}
@@ -941,17 +955,17 @@ void SynEditTextPainter::PaintLines()
setDrawingColors(true);
rcToken.setLeft(std::max(rcLine.left(), ColumnToXValue(nLineSelStart)));
rcToken.setRight(std::min(rcLine.right(), ColumnToXValue(nLineSelEnd)));
- PaintToken(sToken, nTokenColumnLen, 0, nLineSelStart, nLineSelEnd,false);
+ PaintToken(sToken, nTokenColumnLen, 0, nLineSelStart, nLineSelEnd,false,edit->font(),edit->fontForNonAscii());
setDrawingColors(false);
rcToken.setLeft(std::max(rcLine.left(), ColumnToXValue(FirstCol)));
rcToken.setRight(std::min(rcLine.right(), ColumnToXValue(nLineSelStart)));
- PaintToken(sToken, nTokenColumnLen, 0, FirstCol, nLineSelStart,false);
+ PaintToken(sToken, nTokenColumnLen, 0, FirstCol, nLineSelStart,false,edit->font(),edit->fontForNonAscii());
rcToken.setLeft(std::max(rcLine.left(), ColumnToXValue(nLineSelEnd)));
rcToken.setRight(std::min(rcLine.right(), ColumnToXValue(LastCol)));
- PaintToken(sToken, nTokenColumnLen, 0, nLineSelEnd, LastCol,true);
+ PaintToken(sToken, nTokenColumnLen, 0, nLineSelEnd, LastCol,true,edit->font(),edit->fontForNonAscii());
} else {
setDrawingColors(bLineSelected);
- PaintToken(sToken, nTokenColumnLen, 0, FirstCol, LastCol,bLineSelected);
+ PaintToken(sToken, nTokenColumnLen, 0, FirstCol, LastCol,bLineSelected,edit->font(),edit->fontForNonAscii());
}
//Paint editingAreaBorders
if (bCurrentLine && edit->mInputPreeditString.length()>0) {
diff --git a/RedPandaIDE/qsynedit/TextPainter.h b/RedPandaIDE/qsynedit/TextPainter.h
index 8b8919db..c9200a4f 100644
--- a/RedPandaIDE/qsynedit/TextPainter.h
+++ b/RedPandaIDE/qsynedit/TextPainter.h
@@ -49,7 +49,8 @@ private:
void setDrawingColors(bool Selected);
int ColumnToXValue(int Col);
void PaintToken(const QString& Token, int TokenLen, int ColumnsBefore,
- int First, int Last, bool isSelection);
+ int First, int Last, bool isSelection, const QFont& font,
+ const QFont& fontForNonAscii);
void PaintEditAreas(const SynEditingAreaList& areaList);
void PaintHighlightToken(bool bFillToEOL);
bool TokenIsSpaces(bool& bSpacesTest, const QString& Token, bool& bIsSpaces);
diff --git a/RedPandaIDE/settings.cpp b/RedPandaIDE/settings.cpp
index 60e05332..6df3ea78 100644
--- a/RedPandaIDE/settings.cpp
+++ b/RedPandaIDE/settings.cpp
@@ -588,6 +588,16 @@ void Settings::Editor::setEnableLigaturesSupport(bool newEnableLigaturesSupport)
mEnableLigaturesSupport = newEnableLigaturesSupport;
}
+const QString &Settings::Editor::nonAsciiFontName() const
+{
+ return mNonAsciiFontName;
+}
+
+void Settings::Editor::setNonAsciiFontName(const QString &newNonAsciiFontName)
+{
+ mNonAsciiFontName = newNonAsciiFontName;
+}
+
bool Settings::Editor::highlightCurrentWord() const
{
return mHighlightCurrentWord;
@@ -1097,9 +1107,10 @@ void Settings::Editor::doSave()
//Font
//font
- saveValue("font_name",mFontName);
+ saveValue("font_name", mFontName);
+ saveValue("non_ascii_font_name", mNonAsciiFontName);
saveValue("font_size", mFontSize);
- saveValue("font_only_monospaced",mFontOnlyMonospaced);
+ saveValue("font_only_monospaced", mFontOnlyMonospaced);
saveValue("enable_ligatures_support", mEnableLigaturesSupport);
//gutter
@@ -1215,8 +1226,10 @@ void Settings::Editor::doLoad()
//Font
#ifdef Q_OS_WIN
mFontName = stringValue("font_name","consolas");
+ mNonAsciiFontName = stringValue("non_ascii_font_name","consolas");
#else
mFontName = stringValue("font_name","Dejavu Sans Mono");
+ mNonAsciiFontName = stringValue("non_ascii_font_name","Dejavu Sans Mono");
#endif
mFontSize = intValue("font_size",14);
mFontOnlyMonospaced = boolValue("font_only_monospaced",true);
diff --git a/RedPandaIDE/settings.h b/RedPandaIDE/settings.h
index baf87a47..e13bf989 100644
--- a/RedPandaIDE/settings.h
+++ b/RedPandaIDE/settings.h
@@ -366,6 +366,9 @@ public:
bool enableLigaturesSupport() const;
void setEnableLigaturesSupport(bool newEnableLigaturesSupport);
+ const QString &nonAsciiFontName() const;
+ void setNonAsciiFontName(const QString &newNonAsciiFontName);
+
private:
//General
// indents
@@ -405,6 +408,7 @@ public:
//Font
//font
QString mFontName;
+ QString mNonAsciiFontName;
int mFontSize;
bool mFontOnlyMonospaced;
diff --git a/RedPandaIDE/settingsdialog/editorfontwidget.cpp b/RedPandaIDE/settingsdialog/editorfontwidget.cpp
index 2090b4b2..3b29536d 100644
--- a/RedPandaIDE/settingsdialog/editorfontwidget.cpp
+++ b/RedPandaIDE/settingsdialog/editorfontwidget.cpp
@@ -56,6 +56,7 @@ void EditorFontWidget::doLoad()
//font
ui->chkOnlyMonospacedFonts->setChecked(pSettings->editor().fontOnlyMonospaced());
ui->cbFont->setCurrentFont(QFont(pSettings->editor().fontName()));
+ ui->cbNonAsciiFont->setCurrentFont(QFont(pSettings->editor().nonAsciiFontName()));
ui->spinFontSize->setValue(pSettings->editor().fontSize());
ui->chkLigature->setChecked(pSettings->editor().enableLigaturesSupport());
@@ -79,6 +80,7 @@ void EditorFontWidget::doSave()
//font
pSettings->editor().setFontOnlyMonospaced(ui->chkOnlyMonospacedFonts->isChecked());
pSettings->editor().setFontName(ui->cbFont->currentFont().family());
+ pSettings->editor().setNonAsciiFontName(ui->cbNonAsciiFont->currentFont().family());
pSettings->editor().setFontSize(ui->spinFontSize->value());
pSettings->editor().setEnableLigaturesSupport(ui->chkLigature->isChecked());
diff --git a/RedPandaIDE/settingsdialog/editorfontwidget.ui b/RedPandaIDE/settingsdialog/editorfontwidget.ui
index 92b06329..e53f2478 100644
--- a/RedPandaIDE/settingsdialog/editorfontwidget.ui
+++ b/RedPandaIDE/settingsdialog/editorfontwidget.ui
@@ -133,6 +133,47 @@
+ -
+
+
+ Font for non-ascii Text:
+
+
+
+ -
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+