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一点体会:往往最绝望的时候能发生转机,在放弃之前再坚持一下往往就能解决问题~
   

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值