填充Region区域
static void fillRegion(GC gc, Region region)
{
// NOTE: region passed in to this function will be modified
Region clipping = new Region();
gc.getClipping(clipping);
region.intersect(clipping);
gc.setClipping(region);
gc.fillRectangle(region.getBounds());
gc.setClipping(clipping);
clipping.dispose();
}
eg:
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
GC gc = e.gc;
Point size = new Point(60,32);
final int[] pointArray = new int[]{0,2,2,0,size.x-2,0,size.x,2,size.x,size.y-2,size.x-2,size.y,2,size.y,0,size.y-2,0,2};
Region region = new Region();
region.add(pointArray);
gc.drawPolygon(pointArray);
e.gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
fillRegion(gc, region);
}
});
}
//填充不规则区域
static void fillRegion(GC gc, Region region)
{
// NOTE: region passed in to this function will be modified
Region clipping = new Region();
gc.getClipping(clipping);
region.intersect(clipping);//求交集,和整个区域相交,子集肯定为region本身
gc.setClipping(region);
gc.fillRectangle(region.getBounds());
gc.setClipping(clipping);//恢复原先的完整区域
clipping.dispose();
}
//填充不规则区域为渐变色
static void fillGradientRegion(GC gc, Region region)
{
// NOTE: region passed in to this function will be modified
Region clipping = new Region();
gc.getClipping(clipping);
region.intersect(clipping);//求交集,和整个区域相交,子集肯定为region本身
gc.setClipping(region);
Rectangle rect = region.getBounds();
gc.fillGradientRectangle(rect.x, rect.y, rect.width, rect.height, true);
gc.setClipping(clipping);//恢复原先的完整区域
clipping.dispose();
}
ps:
GC的几个方法clipping
public void getClipping (Region region)
将gc的Region区域赋值给传入参数region
public Rectangle getClipping()
返回gc的Region区域(是一个矩形区域)