今天我遇到了一些SWT转换代码的奇怪行为。问题是当我尝试使用Transform.rotate(45f)
将坐标系旋转45度然后绘制矩形的轮廓时,它会移动矩形。
请考虑以下绘制旋转矩形的代码:
...
m_canvas.addPaintListener(new PaintListener()
{
@Override
public void paintControl(PaintEvent a_e)
{
GC gc = a_e.gc;
Transform t = new Transform(gc.getDevice());
t.rotate(m_angle);
gc.setTransform(t);
gc.setForeground(fgcolor);
gc.setBackground(bgcolor);
gc.drawRectangle(rect);
}
});
...
此外,我们还有两个按钮,用于增加和减小角度一度。现在使用这些按钮将矩形从0度旋转到90度,看看45度左右会发生什么
请注意,如果我尝试使用GC.fillRectangle()
,则填充的矩形会旋转并正确绘制。 GC.drawRectangle()
方法的问题。
这就是它的样子:
可用课程的完整代码here
带有Eclipse项目源的Runnable JAR(for win32)将根据请求发布,因为我没有足够的声誉
我做错了什么或有解决这个问题的方法吗?
答案 0 :(得分:1)
感谢Baz我在2008年发现了bug report
不幸的是没有解决方法,但有两种解决方法:
DRAW_OFFSET
:gc.getGCData().state |= 1 << 14;
gc.setLineAttributes(new LineAttributes(1, SWT.CAP_FLAT, SWT.JOIN_MITER));
我以第二种方式结束,因为它被视为独立平台解决方案。请注意,不需要构造函数参数与上面相同。