我们为GEF应用提供了ZoomIn和ZoomOut功能之后,在图放大缩小的时候,如果有一个类似于TextCellEditor这样的直接编辑行为放在某个EditPart上,在未做处理的情况下,编辑控件的显示可能会不如人意。
因此我们希望在Figure变大缩小的时候,编辑控件也能随之变化。
要达到这个效果其他也不能。只要在控件显示之前计算正确控件大小,位置,和字体就可以了。
这个处理可以在CellEditorLocator的relacate()方法里处理,例如:
Control control = celleditor.getControl();
IFigure figure = editPart.getContentPane();
Rectangle bounds = figure.getBounds();
Point location = bounds.getLocation();
ScalableFreeformRootEditPart root = (ScalableFreeformRootEditPart) editPart
.getRoot();
double zoom = root.getZoomManager().getZoom();
Font font = control.getFont();
FontData fontData = font.getFontData()[0];
fontData.height = (float) (fontData.height*zoom);
control.setFont(new Font(control.getDisplay(),fontData));
int width = (int) (bounds.width*zoom);
int height =(int) (bounds.height*zoom);
figure.translateToAbsolute(location);
if (figure instanceof ScrollPane) {
control.setBounds(location.x, location.y, width,
((ElementTypeFigure)((ScrollPane) figure).getContents()).getHeaderHeight());
} else {
control.setBounds(location.x, location.y, width,
height);
}
先得到当前的缩放倍率,然后把编辑控件的缺省大小,字体都乘以这个倍率之后再做处理,就能得到正确的结果了