SWT GC的drawLine方法的一个隐藏Bug

今天在用GC drawLine的时候发现一个奇怪现象。我是在一个Canvas里drawLine的,这个Canvas有滚动条,我只是在滚动条滚动时,计算Canvas里面绘制的偏移坐标,然后将所有的绘制操作加上这个坐标。我在Canvas里面drawImage, draw rect, draw line。当水平卷动时,我发现水平的line都错了,长度和位置都不对,而且随着卷动位置还会变化,有的水平线甚至消失了。而竖直卷动时一切正常。image和rectangle也都正常。而且我把line style换成dotted后,水平线也是正常的。太奇怪了啊,于是google一下SWT Canvas的bug,结果一无所获。我几乎放弃了。不过还是不死心,于是将drawLine的参数print出来,发现出错的时候,x1 <0 !!
答案出来了,原来GC在drawLine(线型为SOLID)时,没有检查点的坐标,所以当x为负时,在内存里线的起始x坐标跑到了上面去了(内存是线性的地址啊)。我立刻在drawLine的地方,限制了一下x1的坐标。Run, 果然一切正确!
虽然耽误了小半天时间,但毕竟找出了问题,也许我应该向Eclipse组织报告一下这个bug ? 我用的SWT版本是3.1.2,不知道新版是否已经解决了。
ps一点体会:往往最绝望的时候能发生转机,在放弃之前再坚持一下往往就能解决问题~

你可能感兴趣的:(eclipse,Google)