奇怪的 SWT GC

1243913815|%Y-%m-%d|agohover

SWT(Standard Widget Toolkit)是 Eclipse 所使用的 GUI toolkit,算是非常知名,也有眾多使用者的函式庫。在 SWT 中,大部份的使用者會用 GC(Graphics Context)這個物件來完成 2D 繪圖的各項操作。然而 GC 的介面實在有點奇怪…

void setTransform(Transform transform)
Sets the transform that is currently being used by the receiver.

GC 可以使用 setTransform() 來設定坐標轉換,如此一來就可以方便地對圖形進行縮放旋轉平移等操作。但奇怪的是,它的繪圖指令只接受整數型別的坐標:

void drawLine(int x1, int y1, int x2, int y2)
Draws a line, using the foreground color, between the points (x1, y1) and (x2, y2).
void drawOval(int x, int y, int width, int height)
Draws the outline of an oval, using the foreground color, within the specified rectangular area.
void drawRectangle(int x, int y, int width, int height)
Draws the outline of the rectangle specified by the arguments, using the receiver's foreground color.

既然 GC 會進行坐標轉換,就不應該假設使用者傳遞的坐標是以 pixel 為單位的整數。這樣的設計反而強迫使用者必須先自行完成坐標轉換後再呼叫 GC 的繪圖指令,否則浮點數轉換到整數時產生的誤差會在坐標轉換時被大幅放大。


Comments

Add a New Comment
or Sign in as Wikidot user
(will not be published)
- +
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License