diff --git a/src/java.desktop/share/classes/com/jetbrains/desktop/SharedTextures.java b/src/java.desktop/share/classes/com/jetbrains/desktop/SharedTextures.java new file mode 100644 index 000000000000..e17a0c6f7e4c --- /dev/null +++ b/src/java.desktop/share/classes/com/jetbrains/desktop/SharedTextures.java @@ -0,0 +1,81 @@ +/* + * Copyright 2025 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.desktop; + +import com.jetbrains.desktop.image.TextureWrapperImage; +import com.jetbrains.exported.JBRApi; + +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsEnvironment; +import java.awt.Image; + +@JBRApi.Service +@JBRApi.Provides("SharedTextures") +public class SharedTextures { + public final static int METAL_TEXTURE_TYPE = 1; + + private final int textureType; + + public SharedTextures() { + textureType = getTextureTypeImpl(); + if (textureType == 0) { + throw new JBRApi.ServiceNotAvailableException(); + } + } + + public int getTextureType() { + return textureType; + } + + public static Image wrapTexture(GraphicsConfiguration gc, long texture) { + return new TextureWrapperImage(gc, texture); + } + + private static int getTextureTypeImpl() { + GraphicsConfiguration gc = GraphicsEnvironment + .getLocalGraphicsEnvironment() + .getDefaultScreenDevice() + .getDefaultConfiguration(); + try { + if (isInstanceOf(gc, "sun.java2d.metal.MTLGraphicsConfig")) { + return 1; + } + } catch (Exception e) { + throw new InternalError("Unexpected exception during reflection", e); + } + + return 0; + } + + private static boolean isInstanceOf(Object obj, String className) { + try { + var clazz = Class.forName(className); + return clazz.isInstance(obj); + } catch (ClassNotFoundException e) { + return false; + } + } +} diff --git a/src/java.desktop/share/classes/com/jetbrains/desktop/image/TextureWrapperImage.java b/src/java.desktop/share/classes/com/jetbrains/desktop/image/TextureWrapperImage.java index 7b4bd5ae0a5b..f176c521fe18 100644 --- a/src/java.desktop/share/classes/com/jetbrains/desktop/image/TextureWrapperImage.java +++ b/src/java.desktop/share/classes/com/jetbrains/desktop/image/TextureWrapperImage.java @@ -25,7 +25,6 @@ package com.jetbrains.desktop.image; -import com.jetbrains.exported.JBRApi; import sun.awt.image.SurfaceManager; import sun.java2d.SurfaceData; import sun.java2d.SurfaceManagerFactory; @@ -34,7 +33,6 @@ import java.awt.GraphicsConfiguration; import java.awt.Graphics2D; import java.awt.Graphics; -import java.awt.GraphicsEnvironment; import java.awt.Image; import java.awt.ImageCapabilities; import java.awt.image.BufferedImage; @@ -78,28 +76,6 @@ public TextureWrapperImage(GraphicsConfiguration gc, long texture) SurfaceManager.setManager(this, surfaceManager); } - @JBRApi.Provides("SharedTextures") - public static Image wrapTexture(GraphicsConfiguration gc, long texture) { - return new TextureWrapperImage(gc, texture); - } - - @JBRApi.Provides("SharedTextures") - public static int getTextureType() { - GraphicsConfiguration gc = GraphicsEnvironment - .getLocalGraphicsEnvironment() - .getDefaultScreenDevice() - .getDefaultConfiguration(); - try { - if (isInstanceOf(gc, "sun.java2d.metal.MTLGraphicsConfig")) { - return 1; - } - } catch (Exception e) { - throw new InternalError("Unexpected exception during reflection", e); - } - - return 0; - } - @Override public int getWidth(ImageObserver observer) { return (int) (sd.getBounds().width / sd.getDefaultScaleX()); @@ -137,13 +113,4 @@ public Object getProperty(String name, ImageObserver observer) { public ImageCapabilities getCapabilities(GraphicsConfiguration gc) { return capabilities; } - - private static boolean isInstanceOf(Object obj, String className) { - try { - var clazz = Class.forName(className); - return clazz.isInstance(obj); - } catch (ClassNotFoundException e) { - return false; - } - } }