Unverified Commit ad7229f6 authored by Roman Sedaikin's avatar Roman Sedaikin Committed by GitHub

Added getting [windowHandle] and [contentHandle]. (#107)

* Added getting [windowHandle] and [contentHandle].

* Added getting windowHandle on Linux.
parent 97df35e3
...@@ -22,6 +22,12 @@ extern "C" ...@@ -22,6 +22,12 @@ extern "C"
} }
JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_HardwareLayer_getWindowHandle(JNIEnv *env, jobject canvas, jlong platformInfoPtr) JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_HardwareLayer_getWindowHandle(JNIEnv *env, jobject canvas, jlong platformInfoPtr)
{
JAWT_X11DrawingSurfaceInfo *dsi_x11 = fromJavaPointer<JAWT_X11DrawingSurfaceInfo *>(platformInfoPtr);
return (jlong) dsi_x11->display;
}
JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_HardwareLayer_getContentHandle(JNIEnv *env, jobject canvas, jlong platformInfoPtr)
{ {
JAWT_X11DrawingSurfaceInfo *dsi_x11 = fromJavaPointer<JAWT_X11DrawingSurfaceInfo *>(platformInfoPtr); JAWT_X11DrawingSurfaceInfo *dsi_x11 = fromJavaPointer<JAWT_X11DrawingSurfaceInfo *>(platformInfoPtr);
return (jlong) dsi_x11->drawable; return (jlong) dsi_x11->drawable;
......
...@@ -57,10 +57,10 @@ extern "C" ...@@ -57,10 +57,10 @@ extern "C"
} }
JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_redrawer_AngleRedrawer_createAngleDevice( JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_redrawer_AngleRedrawer_createAngleDevice(
JNIEnv *env, jobject redrawer, jlong windowHandle) JNIEnv *env, jobject redrawer, jlong contentHandle)
{ {
AngleDevice *angleDevice = new AngleDevice(); AngleDevice *angleDevice = new AngleDevice();
angleDevice->window = (HWND)windowHandle; angleDevice->window = (HWND)contentHandle;
angleDevice->device = GetDC(angleDevice->window); angleDevice->device = GetDC(angleDevice->window);
angleDevice->display = getAngleEGLDisplay(angleDevice->device); angleDevice->display = getAngleEGLDisplay(angleDevice->device);
if (EGL_NO_DISPLAY == angleDevice->display) if (EGL_NO_DISPLAY == angleDevice->display)
......
...@@ -281,7 +281,7 @@ extern "C" ...@@ -281,7 +281,7 @@ extern "C"
} }
JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_redrawer_Direct3DRedrawer_createDirectXDevice( JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_redrawer_Direct3DRedrawer_createDirectXDevice(
JNIEnv *env, jobject redrawer, jint adapterPriority, jlong windowHandle) JNIEnv *env, jobject redrawer, jint adapterPriority, jlong contentHandle)
{ {
gr_cp<IDXGIFactory4> deviceFactory; gr_cp<IDXGIFactory4> deviceFactory;
if (!SUCCEEDED(CreateDXGIFactory1(IID_PPV_ARGS(&deviceFactory)))) if (!SUCCEEDED(CreateDXGIFactory1(IID_PPV_ARGS(&deviceFactory))))
...@@ -319,7 +319,7 @@ extern "C" ...@@ -319,7 +319,7 @@ extern "C"
d3dDevice->device = device; d3dDevice->device = device;
d3dDevice->queue = queue; d3dDevice->queue = queue;
d3dDevice->window = (HWND)windowHandle; d3dDevice->window = (HWND)contentHandle;
return toJavaPointer(d3dDevice); return toJavaPointer(d3dDevice);
} }
......
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <jawt_md.h> #include <jawt_md.h>
#include <Windows.h>
#include <cassert>
#include "jni_helpers.h" #include "jni_helpers.h"
extern "C" extern "C"
...@@ -13,6 +15,14 @@ extern "C" ...@@ -13,6 +15,14 @@ extern "C"
} }
JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_HardwareLayer_getWindowHandle(JNIEnv *env, jobject canvas, jlong platformInfoPtr) JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_HardwareLayer_getWindowHandle(JNIEnv *env, jobject canvas, jlong platformInfoPtr)
{
JAWT_Win32DrawingSurfaceInfo* dsi_win = fromJavaPointer<JAWT_Win32DrawingSurfaceInfo *>(platformInfoPtr);
HWND ancestor = GetAncestor(dsi_win->hwnd, GA_PARENT);
assert(ancestor != NULL);
return (jlong) ancestor;
}
JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_HardwareLayer_getContentHandle(JNIEnv *env, jobject canvas, jlong platformInfoPtr)
{ {
JAWT_Win32DrawingSurfaceInfo* dsi_win = fromJavaPointer<JAWT_Win32DrawingSurfaceInfo *>(platformInfoPtr); JAWT_Win32DrawingSurfaceInfo* dsi_win = fromJavaPointer<JAWT_Win32DrawingSurfaceInfo *>(platformInfoPtr);
return (jlong) dsi_win->hwnd; return (jlong) dsi_win->hwnd;
......
...@@ -51,6 +51,9 @@ internal open class HardwareLayer : Canvas() { ...@@ -51,6 +51,9 @@ internal open class HardwareLayer : Canvas() {
return scale return scale
} }
val contentHandle: Long
get() = useDrawingSurfacePlatformInfo(::getContentHandle)
val windowHandle: Long val windowHandle: Long
get() = useDrawingSurfacePlatformInfo(::getWindowHandle) get() = useDrawingSurfacePlatformInfo(::getWindowHandle)
...@@ -61,5 +64,6 @@ internal open class HardwareLayer : Canvas() { ...@@ -61,5 +64,6 @@ internal open class HardwareLayer : Canvas() {
get() = platformOperations.isFullscreen(this) get() = platformOperations.isFullscreen(this)
set(value) = platformOperations.setFullscreen(this, value) set(value) = platformOperations.setFullscreen(this, value)
private external fun getContentHandle(platformInfo: Long): Long
private external fun getWindowHandle(platformInfo: Long): Long private external fun getWindowHandle(platformInfo: Long): Long
} }
\ No newline at end of file
...@@ -72,6 +72,9 @@ open class SkiaLayer( ...@@ -72,6 +72,9 @@ open class SkiaLayer(
val contentScale: Float val contentScale: Float
get() = backedLayer.contentScale get() = backedLayer.contentScale
val contentHandle: Long
get() = backedLayer.contentHandle
val windowHandle: Long val windowHandle: Long
get() = backedLayer.windowHandle get() = backedLayer.windowHandle
...@@ -94,6 +97,11 @@ open class SkiaLayer( ...@@ -94,6 +97,11 @@ open class SkiaLayer(
this.renderApi_ = value this.renderApi_ = value
notifyChange(PropertyKind.Renderer) notifyChange(PropertyKind.Renderer)
} }
val renderInfo: String
get() = if (contextHandler?.context == null)
"ContextHandler hasn't been initialized yet."
else
contextHandler!!.rendererInfo()
@Volatile @Volatile
private var picture: PictureHolder? = null private var picture: PictureHolder? = null
......
...@@ -55,8 +55,8 @@ internal abstract class ContextHandler(val layer: SkiaLayer) { ...@@ -55,8 +55,8 @@ internal abstract class ContextHandler(val layer: SkiaLayer) {
renderTarget?.close() renderTarget?.close()
} }
protected open fun rendererInfo(): String { open fun rendererInfo(): String {
return "${layer.renderApi} rendering info:\n" + return "GraphicsApi: ${layer.renderApi}\n" +
"OS: $hostFullName\n" + "OS: $hostFullName\n" +
"Java: $javaVendor\n" + "Java: $javaVendor\n" +
"Java location: $javaLocation\n" "Java location: $javaLocation\n"
......
...@@ -108,7 +108,7 @@ internal class Direct3DContextHandler(layer: SkiaLayer) : ContextHandler(layer) ...@@ -108,7 +108,7 @@ internal class Direct3DContextHandler(layer: SkiaLayer) : ContextHandler(layer)
} }
} }
protected override fun rendererInfo(): String { override fun rendererInfo(): String {
return super.rendererInfo() + return super.rendererInfo() +
"Video card: ${directXRedrawer.getAdapterName(device)}\n" + "Video card: ${directXRedrawer.getAdapterName(device)}\n" +
"Total VRAM: ${directXRedrawer.getAdapterMemorySize(device) / 1024 / 1024} MB\n" "Total VRAM: ${directXRedrawer.getAdapterMemorySize(device) / 1024 / 1024} MB\n"
......
...@@ -47,7 +47,7 @@ internal class AngleRedrawer( ...@@ -47,7 +47,7 @@ internal class AngleRedrawer(
} }
fun createDevice(): Long { fun createDevice(): Long {
device = createAngleDevice(layer.windowHandle) device = createAngleDevice(layer.contentHandle)
return device return device
} }
...@@ -61,7 +61,7 @@ internal class AngleRedrawer( ...@@ -61,7 +61,7 @@ internal class AngleRedrawer(
fun finishFrame() = finishFrame(device, properties.isVsyncEnabled) fun finishFrame() = finishFrame(device, properties.isVsyncEnabled)
external fun createAngleDevice(windowHandle: Long): Long external fun createAngleDevice(contentHandle: Long): Long
external fun makeAngleContext(device: Long): Long external fun makeAngleContext(device: Long): Long
external fun makeAngleRenderTarget(device: Long, width: Int, height: Int): Long external fun makeAngleRenderTarget(device: Long, width: Int, height: Int): Long
external fun resizeBuffers(device: Long, width: Int, height: Int) external fun resizeBuffers(device: Long, width: Int, height: Int)
......
...@@ -65,7 +65,7 @@ internal class Direct3DRedrawer( ...@@ -65,7 +65,7 @@ internal class Direct3DRedrawer(
makeDirectXSurface(device, context, width, height, index) makeDirectXSurface(device, context, width, height, index)
) )
fun createDevice(): Long = createDirectXDevice(getAdapterPriority(), layer.windowHandle) fun createDevice(): Long = createDirectXDevice(getAdapterPriority(), layer.contentHandle)
fun finishFrame(device: Long, context: Long, surface: Long) { fun finishFrame(device: Long, context: Long, surface: Long) {
finishFrame(device, context, surface, properties.isVsyncEnabled) finishFrame(device, context, surface, properties.isVsyncEnabled)
...@@ -81,7 +81,7 @@ internal class Direct3DRedrawer( ...@@ -81,7 +81,7 @@ internal class Direct3DRedrawer(
} }
} }
external fun createDirectXDevice(adapterPriority: Int, windowHandle: Long): Long external fun createDirectXDevice(adapterPriority: Int, contentHandle: Long): Long
external fun makeDirectXContext(device: Long): Long external fun makeDirectXContext(device: Long): Long
external fun makeDirectXSurface(device: Long, context: Long, width: Int, height: Int, index: Int): Long external fun makeDirectXSurface(device: Long, context: Long, width: Int, height: Int, index: Int): Long
external fun resizeBuffers(device: Long, width: Int, height: Int) external fun resizeBuffers(device: Long, width: Int, height: Int)
......
...@@ -3,8 +3,6 @@ ...@@ -3,8 +3,6 @@
#define GL_SILENCE_DEPRECATION #define GL_SILENCE_DEPRECATION
#define kNullWindowHandle NULL
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
#import <QuartzCore/QuartzCore.h> #import <QuartzCore/QuartzCore.h>
#import <Metal/Metal.h> #import <Metal/Metal.h>
...@@ -173,6 +171,12 @@ JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_HardwareLayer_getWindowHandle(J ...@@ -173,6 +171,12 @@ JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_HardwareLayer_getWindowHandle(J
return (jlong)window; return (jlong)window;
} }
JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_HardwareLayer_getContentHandle(JNIEnv *env, jobject canvas, jlong platformInfoPtr)
{
NSWindow* window = findWindow(platformInfoPtr);
return (jlong)window;
}
JNIEXPORT void JNICALL Java_org_jetbrains_skiko_PlatformOperationsKt_osxDisableTitleBar(JNIEnv *env, jobject properties, jlong platformInfoPtr) JNIEXPORT void JNICALL Java_org_jetbrains_skiko_PlatformOperationsKt_osxDisableTitleBar(JNIEnv *env, jobject properties, jlong platformInfoPtr)
{ {
NSWindow* window = findWindow(platformInfoPtr); NSWindow* window = findWindow(platformInfoPtr);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment