From cec7eac9ac031ad7c30616d2d548a57757fc3ce2 Mon Sep 17 00:00:00 2001 From: Craig Raw Date: Tue, 24 Jun 2025 11:26:13 +0200 Subject: [PATCH] fix selection of nearest supported resolution where chosen resolution is not available --- .../sparrow/control/WebcamService.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/sparrowwallet/sparrow/control/WebcamService.java b/src/main/java/com/sparrowwallet/sparrow/control/WebcamService.java index ab3f4b68..b35be050 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/WebcamService.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/WebcamService.java @@ -444,10 +444,27 @@ public class WebcamService extends ScheduledService { } public static > T getNearestEnum(T target, T[] values) { - int ordinal = target.ordinal(); - return Stream.concat(ordinal > 0 ? Stream.of(values[ordinal - 1]) : Stream.empty(), ordinal < values.length - 1 ? Stream.of(values[ordinal + 1]) : Stream.empty()) - .findFirst() - .orElse(null); + if(values == null || values.length == 0) { + return null; + } + + int targetOrdinal = target.ordinal(); + if(values.length == 1) { + return values[0]; + } + + for(int i = 0; i < values.length; i++) { + if(targetOrdinal < values[i].ordinal()) { + if(i == 0) { + return values[0]; + } + int diffToPrev = Math.abs(targetOrdinal - values[i - 1].ordinal()); + int diffToNext = Math.abs(targetOrdinal - values[i].ordinal()); + return diffToPrev <= diffToNext ? values[i - 1] : values[i]; + } + } + + return values[values.length - 1]; } private static class CroppedDimension {