正如您引用的一个答案中提到的,底层StyledText
控件确实有一个setLineSpacing
方法,但现有的编辑器不使用它。
Eclipse 4.3 中的CSS
样式代码确实提供了一种访问它的方法,但它需要编写一个插件来扩展 CSS 才能做到这一点。
该plugin.xml
插件看起来像这样:
<plugin>
<extension
point="org.eclipse.e4.ui.css.core.elementProvider">
<provider
class="linespacing.LineSpacingElementProvider">
<widget
class="org.eclipse.swt.custom.StyledText"></widget>
</provider>
</extension>
<extension
point="org.eclipse.e4.ui.css.core.propertyHandler">
<handler
adapter="linespacing.StyledTextElement"
composite="false"
handler="linespacing.LineSpacingPropertyHandler">
<property-name
name="line-spacing">
</property-name>
</handler>
</extension>
</plugin>
它声明了一个 CSS 元素提供程序LineSpacingElementProvider
,它将是:
public class LineSpacingElementProvider implements IElementProvider
{
@Override
public Element getElement(final Object element, final CSSEngine engine)
{
if (element instanceof StyledText)
return new StyledTextElement((StyledText)element, engine);
return null;
}
}
这StyledTextElement
提供的只是:
public class StyledTextElement extends ControlElement
{
public StyledTextElement(StyledText control, CSSEngine theEngine)
{
super(control, theEngine);
}
}
中的第二个声明plugin.xml
是一个名为的属性的 CSS 属性处理程序line-spacing
public class LineSpacingPropertyHandler extends AbstractCSSPropertySWTHandler implements ICSSPropertyHandler
{
@Override
protected void applyCSSProperty(Control control, String property, CSSValue value, String pseudo, CSSEngine engine) throws Exception
{
if (!(control instanceof StyledText))
return;
StyledText text = (StyledText)control;
if ("line-spacing".equals(property))
{
int pixelValue = (int)((CSSPrimitiveValue)value).getFloatValue(CSSPrimitiveValue.CSS_PX);
text.setLineSpacing(pixelValue);
}
}
@Override
protected String retrieveCSSProperty(Control control, String property, String pseudo, CSSEngine engine) throws Exception
{
return null;
}
}
安装包含此插件的插件后,您可以修改现有 CSS 样式表之一以包含:
StyledText {
line-spacing: 2px;
}