diff --git a/orx-syphon/src/main/kotlin/jsyphon/JSyphonClient.kt b/orx-syphon/src/main/kotlin/jsyphon/JSyphonClient.kt new file mode 100644 index 00000000..46ceae0d --- /dev/null +++ b/orx-syphon/src/main/kotlin/jsyphon/JSyphonClient.kt @@ -0,0 +1,62 @@ +package jsyphon + +import java.io.File +import java.util.* + +class JSyphonClient // public API +{ + private var ptr: Long = 0 + + companion object { + init { + System.load(File("orx-syphon/src/main/kotlin/jsyphon/libJSyphon.jnilib").absolutePath) + } + } + + fun init() { + ptr = init(null) + } + + fun setApplicationName(appName: String?) { + setApplicationName(ptr, appName) + } + + fun setServerName(serverName: String?) { + setServerName(ptr, serverName) + } + + val isValid: Boolean + get() = isValid(ptr) + + fun newFrameImageForContext(): JSyphonImage { + val dict = newFrameDataForContext() + val name = dict["name"] as Long? + val width = dict["width"] as Double? + val height = dict["height"] as Double? + return JSyphonImage(name!!.toInt(), width!!.toInt(), height!!.toInt()) + } + + // Native method declarations + external fun init(options: HashMap?): Long + external fun setApplicationName(ptr: Long, appName: String?) + external fun setServerName(ptr: Long, serverName: String?) + external fun isValid(ptr: Long): Boolean + + @JvmOverloads + external fun serverDescription(ptr: Long = this.ptr): HashMap? + + @JvmOverloads + external fun hasNewFrame(ptr: Long = this.ptr): Boolean + + @JvmOverloads + external fun newFrameDataForContext(ptr: Long = this.ptr): HashMap + + @JvmOverloads + external fun stop(ptr: Long = this.ptr) // public JSyphonImage newFrameImageForContext() { + // HashMap dict = newFrameDataForContext(); + // Long name = (Long)dict.get("name"); + // Double width = (Double)dict.get("width"); + // Double height = (Double)dict.get("height"); + // return new JSyphonImage(name.intValue(), width.intValue(), height.intValue()); + // } +} \ No newline at end of file diff --git a/orx-syphon/src/main/kotlin/jsyphon/JSyphonImage.kt b/orx-syphon/src/main/kotlin/jsyphon/JSyphonImage.kt new file mode 100644 index 00000000..d994a30f --- /dev/null +++ b/orx-syphon/src/main/kotlin/jsyphon/JSyphonImage.kt @@ -0,0 +1,15 @@ +package jsyphon + +class JSyphonImage(private val name: Int, private val width: Int, private val height: Int) { + fun textureName(): Int { + return name + } + + fun textureWidth(): Int { + return width + } + + fun textureHeight(): Int { + return height + } +} \ No newline at end of file diff --git a/orx-syphon/src/main/kotlin/jsyphon/JSyphonServer.kt b/orx-syphon/src/main/kotlin/jsyphon/JSyphonServer.kt new file mode 100644 index 00000000..409cbd3e --- /dev/null +++ b/orx-syphon/src/main/kotlin/jsyphon/JSyphonServer.kt @@ -0,0 +1,150 @@ +package jsyphon + +import java.io.File + +/* +JSyphonServer.java - +Copyright 2011 -Skye Book (sbook) & Anton Marini (vade) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +class JSyphonServer // Public API +{ + private var ptr: Long = 0 + + companion object { + init { + System.load(File("orx-syphon/src/main/kotlin/jsyphon/libJSyphon.jnilib").absolutePath) + } + } + + fun initWithName(name: String) { + ptr = initWithName(name, null) + } + + val name: String + get() = getName(ptr) + + fun hasClients(): Boolean = hasClients(ptr) + + fun publishFrameTexture( + texID: Int, + texTarget: Int, + posX: Int, + posY: Int, + width: Int, + height: Int, + sizeX: Int, + sizeY: Int, + isFlipped: Boolean + ) { + publishFrameTexture(ptr, texID, texTarget, posX, posY, width, height, sizeX, sizeY, isFlipped) + } + + fun publishFrameTexture( + texID: Int, + texTarget: Int, + rect: NSRect, + size: NSSize, + isFlipped: Boolean + ) { + publishFrameTexture( + ptr, + texID, + texTarget, + rect.origin.x, + rect.origin.y, + rect.size.x, + rect.size.y, + size.x, + size.y, + isFlipped + ) + } + + fun bindToDrawFrameOfSize(size: NSSize): Boolean = + bindToDrawFrameOfSize(ptr, size.x, size.y) + + fun bindToDrawFrameOfSize(sizeX: Int, sizeY: Int): Boolean = + bindToDrawFrameOfSize(ptr, sizeX, sizeY) + + fun unbindAndPublish() { + unbindAndPublish(ptr) + } + + fun stop() { + stop(ptr) + } + + // Native method declarations + private external fun initWithName( + name: String, + options: HashMap? + ): Long + + private external fun getName(ptr: Long): String + private external fun hasClients(ptr: Long): Boolean + private external fun publishFrameTexture( + ptr: Long, + texID: Int, + texTarget: Int, + posX: Int, + posY: Int, + width: Int, + height: Int, + sizeX: Int, + sizeY: Int, + isFlipped: Boolean + ) + + private fun publishFrameTexture( + ptr: Long, + texID: Int, + texTarget: Int, + rect: NSRect, + size: NSSize, + isFlipped: Boolean + ) { + publishFrameTexture( + ptr, + texID, + texTarget, + rect.origin.x, + rect.origin.y, + rect.size.x, + rect.size.y, + size.x, + size.y, + isFlipped + ) + } + + private fun bindToDrawFrameOfSize(ptr: Long, size: NSSize): Boolean { + return bindToDrawFrameOfSize(ptr, size.x, size.y) + } + + private external fun bindToDrawFrameOfSize(ptr: Long, sizeX: Int, sizeY: Int): Boolean + private external fun unbindAndPublish(ptr: Long) + private external fun stop(ptr: Long) +} \ No newline at end of file diff --git a/orx-syphon/src/main/kotlin/jsyphon/JSyphonServerList.kt b/orx-syphon/src/main/kotlin/jsyphon/JSyphonServerList.kt new file mode 100644 index 00000000..b62b4aa4 --- /dev/null +++ b/orx-syphon/src/main/kotlin/jsyphon/JSyphonServerList.kt @@ -0,0 +1,14 @@ +package jsyphon + +import java.io.File +import java.util.ArrayList +import java.util.HashMap + +object JSyphonServerList { + val list: ArrayList?>? + external get + + init { + System.load(File("orx-syphon/src/main/kotlin/jsyphon/libJSyphon.jnilib").absolutePath) + } +} \ No newline at end of file