1 修复bug(harib26a)
大家早上好。今天我们打算编写一些应用程序来玩玩,不过在此之前,我们得修复昨天剩下的那个关于日文显示的bug。
仔细观察这个bug后我们发现,只有全角字符的显示有问题,半角字符是正常的,而且移动窗口之后就可以恢复正常,这说明图层缓冲区中的数据是正确的,问题一定出在refresh上面。
带着这个思路再去看程序,果然如此,显示全角字符的时候只refresh了半角部分,难怪只能显示出右半部分呢。我们马上来改一改。
本次的window.c节选
void putfouts8_asc_sht(struct SHEET *sht, int x, int y, int c, int b, char *s, int l)
{
struct TASK *task = task_now(); /*这里!*/
boxfill8(sht->buf, sht->bxsize, b, x, y, x + l * 8 - 1, y + 15);
if (task->langmode != 0 && task->langbyte1 != 0) { /*从此开始*/
putfonts8_asc(sht->buf, sht->bxsize, x, y, c, s);
sheet_refresh(sht, x - 8, y, x + l * 8, y + 16);
} else {
putfonts8_asc(sht->buf, sht->bxsize, x, y, c, s);
sheet_refresh(sht, x, y, x + l * 8, y + 16);
} /*到此结束*/
return;
}
这次修改中我们进行如下设定:当在日文界面下开始显示全角字符的第2个字节时, refresh的范围会从x – 8开始,其他的部分保持不变。
我们来看看是不是解决了这个bug,“make run”一下试试看,和昨天一样运行chklang命令……哦哦,出来了!
修好了
于是这个bug顺利解决了,可喜可贺。