SWT转换错误

时间:2014-05-06 12:58:34

标签: java eclipse graphics rotation swt

今天我遇到了一些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()方法的问题。

这就是它的样子:

enter image description here

可用课程的完整代码here
带有Eclipse项目源的Runnable JAR(for win32)将根据请求发布,因为我没有足够的声誉 我做错了什么或有解决这个问题的方法吗?

1 个答案:

答案 0 :(得分:1)

感谢Baz我在2008年发现了bug report 不幸的是没有解决方法,但有两种解决方法:

  • 在应用转换后和绘图之前将GC数据状态掩码设置为DRAW_OFFSET
    gc.getGCData().state |= 1 << 14;
  • 在GC上设置线条属性:
    gc.setLineAttributes(new LineAttributes(1, SWT.CAP_FLAT, SWT.JOIN_MITER));

我以第二种方式结束,因为它被视为独立平台解决方案。请注意,不需要构造函数参数与上面相同。