414149609 发表于 2013-2-3 10:26:46

SWT中GC的Clipping用法

在使用SWT的GC画图的时候,你希望在画一个不规则的图形的时候,你可以使用GC的setClipping方法进行相应绘图. setClipping是结合Region来使用的.

因为Region是可以根据描点,描线,切割,拼凑等操作组合任意图形




GC有几个关于Clipping的方法:

setClipping(Region r)通过r,约束gc能画的区域
import org.eclipse.swt.SWT;import org.eclipse.swt.events.PaintEvent;import org.eclipse.swt.events.PaintListener;import org.eclipse.swt.graphics.GC;import org.eclipse.swt.graphics.Region;import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.Shell;public class TestClipping extends Shell {public static void main(String args[]) {try {Display display = Display.getDefault();TestClipping shell = new TestClipping(display, SWT.SHELL_TRIM);shell.open();shell.layout();while (!shell.isDisposed()) {if (!display.readAndDispatch())display.sleep();}} catch (Exception e) {e.printStackTrace();}}public TestClipping(Display display, int style) {super(display, style);createContents();}protected void createContents() {setText("SWT Application");setSize(500, 375);addPaintListener(new PaintListener() {@Overridepublic void paintControl(PaintEvent e) {GC gc = e.gc;Region r = new Region();r.add(0, 0, 102, 55);r.subtract(new int[] { 0, 0, 14, 0, 16, 18, 0, 50, 0, 0 });gc.setClipping(r);gc.setBackground(getDisplay().getSystemColor(SWT.COLOR_BLUE));gc.fillRectangle(0, 0, 102, 55);// gc.drawRectangle(0, 0, 102, 55);}});}@Overrideprotected void checkSubclass() {}}

效果如图:
http://dl.iteye.com/upload/attachment/0068/2566/c0cc4467-4e0d-32c2-8ab5-0e78602ecce4.jpg



getClipping()


返回被剪切了区域所产生的 Rectangle

getClipping(Region)

用之前的region加现在形参的Region产生新的clipping
页: [1]
查看完整版本: SWT中GC的Clipping用法