Skip to content

Commit 6029e4d

Browse files
committed
CSSTUDIO-2749 Add configuration option 'org.csstudio.display.builder.representation/svg_rendering_resolution_factor'.
1 parent bac3f06 commit 6029e4d

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import javafx.scene.image.Image;
2323
import org.csstudio.display.builder.model.util.ModelResourceUtil;
24+
import org.csstudio.display.builder.representation.Preferences;
2425
import org.phoebus.ui.javafx.ImageCache;
2526
import org.phoebus.ui.javafx.svg.SVGTranscoder;
2627

@@ -53,11 +54,20 @@ public class SVGHelper {
5354
*/
5455
public static Image loadSVG(String imageFileName, double width, double height) {
5556
String cachedSVGFileName = imageFileName + "_" + width + "_" + height;
57+
58+
double svg_rendering_resolution_factor;
59+
if (!Double.isNaN(Preferences.svg_rendering_resolution_factor) && Preferences.svg_rendering_resolution_factor > 0) {
60+
svg_rendering_resolution_factor = Preferences.svg_rendering_resolution_factor;
61+
}
62+
else {
63+
logger.log(Level.WARNING, "The option 'org.csstudio.display.builder.representation/svg_rendering_resolution_factor' is set to an invalid value. Setting svg_rendering_resolution_factor to 1.");
64+
svg_rendering_resolution_factor = 1.0;
65+
}
5666
return ImageCache.cache(cachedSVGFileName, () ->
5767
{
5868
// Open the image from the stream created from the resource file.
5969
try (InputStream inputStream = ModelResourceUtil.openResourceStream(imageFileName)) {
60-
return SVGTranscoder.loadSVG(inputStream, width, height);
70+
return SVGTranscoder.loadSVG(inputStream, width*svg_rendering_resolution_factor, height*svg_rendering_resolution_factor);
6171
} catch (Exception ex) {
6272
logger.log(Level.WARNING, String.format("Failure loading image: %s", imageFileName), ex);
6373
}

app/display/representation/src/main/java/org/csstudio/display/builder/representation/Preferences.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ public class Preferences
2222
update_accumulation_time, update_delay, plot_update_delay, image_update_delay,
2323
tooltip_length, embedded_timeout;
2424

25+
@Preference
26+
public static double svg_rendering_resolution_factor;
27+
2528
static
2629
{
2730
AnnotatedPreferences.initialize(Preferences.class, "/display_representation_preferences.properties");

app/display/representation/src/main/resources/display_representation_preferences.properties

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,21 @@ tooltip_length=200
4141

4242
# Timeout for load / unload of Embedded Widget content [ms]
4343
embedded_timeout=5000
44+
45+
# 'svg_rendering_resolution_factor' determines a factor
46+
# to multiply the rendering resolution of SVGs with.
47+
# E.g., to render SVGs at double the default resolution
48+
# both horizontally and vertically, the option can be
49+
# set to svg_rendering_resolution_factor=2.0. This option
50+
# can be useful to enable sharper rendering when zooming
51+
# in. However, the additional sharpness comes at the
52+
# cost of a significant increase in memory consumption,
53+
# as described in the next paragraph.
54+
#
55+
# IMPORTANT: The memory consumption scales as the square of
56+
# the value of 'svg_rendering_resolution_factor'! E.g.,
57+
# when svg_rendering_resolution_factor=2.0, then rendered SVGs
58+
# consume 4 times the memory compared to rendered SVGs when
59+
# svg_rendering_resolution_factor=1.0. For this reason,
60+
# this option should almost certainly be a very low number.
61+
svg_rendering_resolution_factor=1.0

0 commit comments

Comments
 (0)