|
| 1 | +/* |
| 2 | + * Copyright 2025 The Chromium Authors. All rights reserved. |
| 3 | + * Use of this source code is governed by a BSD-style license that can be |
| 4 | + * found in the LICENSE file. |
| 5 | + */ |
| 6 | +package io.flutter.utils; |
| 7 | + |
| 8 | +import com.teamdev.jxbrowser.zoom.ZoomLevel; |
| 9 | +import org.jetbrains.annotations.NotNull; |
| 10 | + |
| 11 | +import java.util.Map; |
| 12 | + |
| 13 | +import static java.util.Map.entry; |
| 14 | + |
| 15 | +public class ZoomLevelSelector { |
| 16 | + @NotNull final Map<Integer, ZoomLevel> zoomLevels = Map.ofEntries( |
| 17 | + entry(25, ZoomLevel.P_25), |
| 18 | + entry(33, ZoomLevel.P_33), |
| 19 | + entry(50, ZoomLevel.P_50), |
| 20 | + entry(67, ZoomLevel.P_67), |
| 21 | + entry(75, ZoomLevel.P_75), |
| 22 | + entry(80, ZoomLevel.P_80), |
| 23 | + entry(90, ZoomLevel.P_90), |
| 24 | + entry(100, ZoomLevel.P_100), |
| 25 | + entry(110, ZoomLevel.P_110), |
| 26 | + entry(125, ZoomLevel.P_125), |
| 27 | + entry(150, ZoomLevel.P_150), |
| 28 | + entry(175, ZoomLevel.P_175), |
| 29 | + entry(200, ZoomLevel.P_200), |
| 30 | + entry(250, ZoomLevel.P_250), |
| 31 | + entry(300, ZoomLevel.P_300), |
| 32 | + entry(400, ZoomLevel.P_400), |
| 33 | + entry(500, ZoomLevel.P_500) |
| 34 | + ); |
| 35 | + |
| 36 | + public @NotNull ZoomLevel getClosestZoomLevel(int zoomPercent) { |
| 37 | + ZoomLevel closest = ZoomLevel.P_100; |
| 38 | + int minDifference = Integer.MAX_VALUE; |
| 39 | + |
| 40 | + for (Map.Entry<Integer, ZoomLevel> entry : zoomLevels.entrySet()) { |
| 41 | + int currentDifference = Math.abs(zoomPercent - entry.getKey()); |
| 42 | + if (currentDifference < minDifference) { |
| 43 | + minDifference = currentDifference; |
| 44 | + closest = entry.getValue(); |
| 45 | + } |
| 46 | + } |
| 47 | + |
| 48 | + return closest; |
| 49 | + }} |
0 commit comments