package apple.laf;
import java.security.AccessController;
import apple.laf.JRSUIConstants.Hit;
import apple.laf.JRSUIConstants.ScrollBarPart;
import com.apple.laf.AquaImageFactory.NineSliceMetrics;
import sun.security.action.GetPropertyAction;
public final class JRSUIUtils {
static boolean isLeopard = isMacOSXLeopard();
static boolean isSnowLeopardOrBelow = isMacOSXSnowLeopardOrBelow();
static boolean isCatalinaOrAbove = isMacOSXCatalinaOrAbove();
static boolean isMacOSXCatalinaOrAbove() {
return currentMacOSXVersionMatchesGivenVersionRange(15, true, false, true);
}
static boolean isMacOSXLeopard() {
return isCurrentMacOSXVersion(5);
}
static boolean isMacOSXSnowLeopardOrBelow() {
return currentMacOSXVersionMatchesGivenVersionRange(6, true, true, false);
}
static boolean isCurrentMacOSXVersion(final int version) {
return currentMacOSXVersionMatchesGivenVersionRange(version, true, false, false);
}
static boolean currentMacOSXVersionMatchesGivenVersionRange(
final int version, final boolean inclusive,
final boolean matchBelow, final boolean matchAbove) {
String osVersion = AccessController.doPrivileged(new GetPropertyAction("os.version"));
String[] fragments = osVersion.split("\\.");
if (!fragments[0].equals("10")) return false;
if (fragments.length < 2) return false;
try {
int minorVers = Integer.parseInt(fragments[1]);
if (inclusive && minorVers == version) return true;
if (matchBelow && minorVers < version) return true;
if (matchAbove && minorVers > version) return true;
} catch (NumberFormatException e) {
}
return false;
}
public static class TaskBar {
public static boolean isIconBadgeSupported() {
return !isCatalinaOrAbove;
}
}
public static class TabbedPane {
public static boolean useLegacyTabs() {
return isLeopard;
}
public static boolean shouldUseTabbedPaneContrastUI() {
return !isSnowLeopardOrBelow;
}
}
public static class InternalFrame {
public static boolean shouldUseLegacyBorderMetrics() {
return isSnowLeopardOrBelow;
}
}
public static class Tree {
public static boolean useLegacyTreeKnobs() {
return isLeopard;
}
}
public static class ScrollBar {
private static native boolean shouldUseScrollToClick();
public static boolean useScrollToClick() {
return shouldUseScrollToClick();
}
public static void getPartBounds(final double[] rect,
final JRSUIControl control,
final int x, final int y, final int w,
final int h,
final ScrollBarPart part) {
control.getPartBounds(rect, x, y, w, h, part.ordinal);
}
public static double getNativeOffsetChange(final JRSUIControl control,
final int x, final int y,
final int w, final int h,
final int offset,
final int visibleAmount,
final int extent) {
return control.getScrollBarOffsetChange(x, y, w, h, offset,
visibleAmount, extent);
}
}
public static class Images {
public static boolean shouldUseLegacySecurityUIPath() {
return isSnowLeopardOrBelow;
}
}
public static class HitDetection {
public static Hit getHitForPoint(final JRSUIControl control,
final int x, final int y, final int w,
final int h, final int hitX,
final int hitY) {
return control.getHitForPoint(x, y, w, h, hitX, hitY);
}
}
public interface NineSliceMetricsProvider {
public NineSliceMetrics getNineSliceMetricsForState(JRSUIState state);
}
}