Skip to content

Commit 41f4bc2

Browse files
committed
CSSTUDIO-2939 Add the functionality to set the SVG rendering resolution factor in the Symbol Widget.
1 parent 462dd14 commit 41f4bc2

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/SymbolWidget.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ public Widget createWidget ( ) {
8787
/** Property */
8888
public static final WidgetPropertyDescriptor<String> propFallbackSymbol = newFilenamePropertyDescriptor (WidgetPropertyCategory.BEHAVIOR, "fallback_symbol", Messages.WidgetProperties_FallbackSymbol);
8989
public static final WidgetPropertyDescriptor<Boolean> propRunActionsOnMouseClick = newBooleanPropertyDescriptor (WidgetPropertyCategory.BEHAVIOR, "run_actions_on_mouse_click", Messages.WidgetProperties_RunActionsOnMouseClick);
90+
/** 'svg_rendering_resolution_factor': */
91+
public static final WidgetPropertyDescriptor<Double> propSVGRenderingResolutionFactor = newDoublePropertyDescriptor(WidgetPropertyCategory.DISPLAY, "svg_rendering_resolution_factor", Messages.WidgetProperties_SVGRenderingResolutionFactor);
92+
9093

9194
/** 'items' property: list of items (string properties) for combo box */
9295
public static final ArrayWidgetProperty.Descriptor<WidgetProperty<String> > propSymbols = new ArrayWidgetProperty.Descriptor< >(
@@ -121,6 +124,7 @@ public Widget createWidget ( ) {
121124
private volatile WidgetProperty<String> fallbackSymbol;
122125
private volatile WidgetProperty<WidgetColor> disconnectOverlayColor;
123126
private volatile WidgetProperty<Boolean> run_actions_on_mouse_click;
127+
private volatile WidgetProperty<Double> svgRenderingResolutionFactor;
124128

125129
/** Returns 'symbol' property: element for list of 'symbols' property */
126130
private static WidgetPropertyDescriptor<String> propSymbol( int index ) {
@@ -225,6 +229,11 @@ public WidgetProperty<Boolean> propRunActionsOnMouseClick() {
225229
return run_actions_on_mouse_click;
226230
}
227231

232+
/** @return 'svgRenderingResolutionFactor' property */
233+
public WidgetProperty<Double> propSVGRenderingResolutionFactor() {
234+
return svgRenderingResolutionFactor;
235+
}
236+
228237
@Override
229238
protected void defineProperties ( final List<WidgetProperty<?>> properties ) {
230239

@@ -243,6 +252,7 @@ protected void defineProperties ( final List<WidgetProperty<?>> properties ) {
243252
properties.add(enabled = propEnabled.createProperty(this, true));
244253
properties.add(preserve_ratio = propPreserveRatio.createProperty(this, true));
245254
properties.add(fallbackSymbol = propFallbackSymbol.createProperty(this, DEFAULT_SYMBOL));
255+
properties.add(svgRenderingResolutionFactor = propSVGRenderingResolutionFactor.createProperty(this, 1.0));
246256
WidgetColor alarmInvalidColor =
247257
WidgetColorService.getColor(NamedWidgetColors.ALARM_INVALID);
248258
WidgetColor defaultDisconnectedOverlayColor =

app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/SymbolRepresentation.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ public class SymbolRepresentation extends RegionBaseRepresentation<StackPane, Sy
100100
private final UntypedWidgetPropertyListener contentListener = this::contentChanged;
101101
private final UntypedWidgetPropertyListener geometryListener = this::geometryChanged;
102102
private final UntypedWidgetPropertyListener styleListener = this::styleChanged;
103+
private final UntypedWidgetPropertyListener svgRenderingResolutionFactorChangedListener = this::svgRenderingResolutionFactorChanged;
103104
private final WidgetPropertyListener<VType> valueListener = this::valueChanged;
104105
private final WidgetPropertyListener<List<WidgetProperty<String>>> symbolsListener = this::symbolsChanged;
105106
private final WidgetPropertyListener<Integer> indexListener = this::initialIndexChanged;
@@ -610,6 +611,7 @@ protected void registerListeners()
610611
model_widget.propEnabled().addUntypedPropertyListener(styleListener);
611612
model_widget.propShowIndex().addUntypedPropertyListener(styleListener);
612613
model_widget.propTransparent().addUntypedPropertyListener(styleListener);
614+
model_widget.propSVGRenderingResolutionFactor().addUntypedPropertyListener(svgRenderingResolutionFactorChangedListener);
613615

614616
if (!toolkit.isEditMode())
615617
model_widget.runtimePropValue().addPropertyListener(valueListener);
@@ -639,6 +641,7 @@ protected void unregisterListeners()
639641
model_widget.propEnabled().removePropertyListener(styleListener);
640642
model_widget.propShowIndex().removePropertyListener(styleListener);
641643
model_widget.propTransparent().removePropertyListener(styleListener);
644+
model_widget.propSVGRenderingResolutionFactor().removePropertyListener(svgRenderingResolutionFactorChangedListener);
642645

643646
if (!toolkit.isEditMode())
644647
model_widget.runtimePropValue().removePropertyListener(valueListener);
@@ -788,6 +791,11 @@ void setSymbolSize ( double width, double height, boolean preserveRatio ) {
788791
}
789792
}
790793

794+
private void svgRenderingResolutionFactorChanged(final WidgetProperty<?> property, final Object oldValue, Object newValue) {
795+
// Update the rendered SVG:
796+
symbolChanged(null, null, null);
797+
}
798+
791799
private void styleChanged ( final WidgetProperty<?> property, final Object oldValue, final Object newValue ) {
792800
dirtyStyle.mark();
793801
toolkit.scheduleUpdate(this);
@@ -1027,7 +1035,20 @@ void resize(double width, double height, boolean preserveRatio){
10271035
* @return An {@link Image} or <code>null</code>.
10281036
*/
10291037
Image loadSVG(final String imageFileName, double width, double height){
1030-
return SVGHelper.loadSVG(imageFileName, width, height);
1038+
double svg_rendering_resolution_factor = model_widget.propSVGRenderingResolutionFactor().getValue();
1039+
1040+
double renderingWidth;
1041+
double renderingHeight;
1042+
if (!Double.isNaN(svg_rendering_resolution_factor) && svg_rendering_resolution_factor > 0) {
1043+
renderingWidth = svg_rendering_resolution_factor * width;
1044+
renderingHeight = svg_rendering_resolution_factor * height;
1045+
} else {
1046+
logger.log(Level.WARNING, "The SVG Rendering Factor is not set to a value greater than 0.0! Setting it to 1.0.");
1047+
renderingWidth = width;
1048+
renderingHeight = height;
1049+
}
1050+
1051+
return SVGHelper.loadSVG(imageFileName, renderingWidth, renderingHeight);
10311052
}
10321053
}
10331054
}

0 commit comments

Comments
 (0)