Skip to content

Commit

Permalink
bug fixes, better \n support, swap back to using ArrayLists, use co…
Browse files Browse the repository at this point in the history
…nstants for common events, fix keybind recording, font issue
  • Loading branch information
nextdayy committed May 26, 2024
1 parent 8f84670 commit d9466bc
Show file tree
Hide file tree
Showing 53 changed files with 897 additions and 1,367 deletions.
272 changes: 112 additions & 160 deletions api/polyui.api

Large diffs are not rendered by default.

41 changes: 17 additions & 24 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

import org.jetbrains.dokka.base.DokkaBase
import org.jetbrains.dokka.base.DokkaBaseConfiguration
import org.jetbrains.dokka.gradle.AbstractDokkaTask
Expand All @@ -23,9 +22,9 @@ buildscript {
}

group = "org.polyfrost"
version = project.findProperty("version") as String
val targetKotlinVersion = KotlinVersion.fromVersion(project.findProperty("kotlin.target") as String? ?: "1.9")
val jvmToolchainVersion = (project.findProperty("jvm.toolchain") as String? ?: "8").toInt()
version = properties["version"] as String
val targetKotlinVersion = KotlinVersion.fromVersion(properties["kotlin.target"] as? String ?: "1.9")
val jvmToolchainVersion = (properties["jvm.toolchain"] as? String ?: "8").toInt()

allprojects {
apply(plugin = "java-library")
Expand All @@ -49,9 +48,7 @@ allprojects {
testRuntimeOnly(rootProject.libs.logging.impl)
}

java {
withSourcesJar()
}
java.withSourcesJar()

kotlin {
compilerOptions {
Expand Down Expand Up @@ -100,7 +97,7 @@ allprojects {
}
}

named("build") {
build {
dependsOn("format")
}

Expand All @@ -109,19 +106,25 @@ allprojects {
description = "Formats source code according to project style"
dependsOn(applyLicenses, formatKotlin)
}
}

tasks {
val dokkaJavadocJar by creating(Jar::class.java) {
create("dokkaJavadocJar", Jar::class.java) {
group = "documentation"
archiveClassifier = "javadoc"
from(dokkaJavadoc)
}

create("dokkaHtmlJar", Jar::class.java) {
group = "documentation"
archiveBaseName = rootProject.name
archiveClassifier = "dokka"
from(dokkaHtml.get().outputDirectory)
duplicatesStrategy = DuplicatesStrategy.FAIL
}
}
}

apiValidation {
ignoredProjects.addAll(rootProject.subprojects.map { it.name })
ignoredProjects += rootProject.subprojects.map { it.name }
}

subprojects {
Expand All @@ -134,17 +137,7 @@ subprojects {
}

tasks.named<Jar>("dokkaJavadocJar") {
archiveBaseName = "polyui-${project.name}"
}
}

tasks {
create("dokkaHtmlJar", Jar::class.java) {
group = "documentation"
archiveBaseName = "polyui"
archiveClassifier = "dokka"
from(dokkaHtmlMultiModule.get().outputDirectory)
duplicatesStrategy = DuplicatesStrategy.FAIL
archiveBaseName = "${rootProject.name}-${project.name}"
}
}

Expand All @@ -154,7 +147,7 @@ publishing {
artifactId = project.name
version = rootProject.version.toString()

artifact(tasks.getByName<Jar>("jar").archiveFile)
artifact(tasks.jar.get().archiveFile)

artifact(tasks.getByName<Jar>("sourcesJar").archiveFile) {
this.classifier = "sources"
Expand Down
7 changes: 3 additions & 4 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version=1.1.72
version=1.2.0

# target Kotlin version for the project.
kotlin.target=1.9
Expand All @@ -7,10 +7,9 @@ jvm.toolchain=8

kotlin.code.style=official
kotlin.incremental=true
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.configureoncommand=true
org.gradle.configuration-cache=true
org.gradle.configureondemand=true
org.gradle.parallel.threads=4
org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=3G
org.gradle.kotlin.dsl.precompiled.accessors.strict=true
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[versions]
kotlin = "2.0.0-Beta5"
kotlin = "2.0.0"
log4j = "2.23.1"
annotations = "24.1.0"
kotlinter = "4.3.0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ import org.polyfrost.polyui.renderer.Window
import org.polyfrost.polyui.renderer.data.Cursor
import org.polyfrost.polyui.utils.getResourceStream
import org.polyfrost.polyui.utils.simplifyRatio
import org.polyfrost.polyui.utils.stdout
import org.polyfrost.polyui.utils.toByteArray
import org.polyfrost.polyui.utils.toDirectByteBuffer
import java.nio.file.Paths
import kotlin.math.max
Expand Down Expand Up @@ -110,7 +110,7 @@ class GLFWWindow @JvmOverloads constructor(
}
}

val codes = APIUtil.apiClassTokens({ _, value -> value in 0x10001..0x1ffff }, null, org.lwjgl.glfw.GLFW::class.java);
val codes = APIUtil.apiClassTokens({ _, value -> value in 0x10001..0x1ffff }, null, org.lwjgl.glfw.GLFW::class.java)
glfwSetErrorCallback { code, desc ->
val stack = Thread.currentThread().stackTrace.drop(4).joinToString("\n\t at ")
LOGGER.error("${codes[code]} ($code): ${GLFWErrorCallback.getDescription(desc)}\nStack: $stack")
Expand Down Expand Up @@ -347,7 +347,7 @@ class GLFWWindow @JvmOverloads constructor(
time = glfwGetTime()
}
if (timeout == 0L) glfwPollEvents()
else glfwWaitEventsTimeout((timeout / 1_000_000_000.0).stdout("time"))
else glfwWaitEventsTimeout((timeout / 1_000_000_000.0))
if (polyUI.drew) glfwSwapBuffers(handle)
}

Expand All @@ -373,7 +373,7 @@ class GLFWWindow @JvmOverloads constructor(
fun setIcon(icon: String) {
val w = IntArray(1)
val h = IntArray(1)
val data = STBImage.stbi_load_from_memory(getResourceStream(icon).toDirectByteBuffer(), w, h, IntArray(1), 4)
val data = STBImage.stbi_load_from_memory(getResourceStream(icon).toByteArray().toDirectByteBuffer(), w, h, IntArray(1), 4)
?: throw Exception("error occurred while loading icon!")
glfwSetWindowIcon(handle, GLFWImage.malloc(1).put(0, GLFWImage.malloc().set(w[0], h[0], data)))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,10 @@ import org.polyfrost.polyui.renderer.data.Font
import org.polyfrost.polyui.renderer.data.Framebuffer
import org.polyfrost.polyui.renderer.data.PolyImage
import org.polyfrost.polyui.unit.Vec2
import org.polyfrost.polyui.utils.LinkedList
import org.polyfrost.polyui.utils.cl1
import org.polyfrost.polyui.utils.fastRemoveIfReversed
import org.polyfrost.polyui.utils.toDirectByteBuffer
import org.polyfrost.polyui.utils.toDirectByteBufferNT
import java.nio.ByteBuffer
import java.util.IdentityHashMap
import kotlin.math.min
Expand All @@ -59,11 +61,8 @@ object NVGRenderer : Renderer {
private var vg: Long = 0L
private var raster: Long = 0L
private var drawing = false
private val queue = LinkedList<() -> Unit>()
private val PIXELS: ByteBuffer = run {
val arr = "px\u0000".toByteArray()
MemoryUtil.memAlloc(arr.size).put(arr).flip() as ByteBuffer
}
private val queue = ArrayList<() -> Unit>()
private val PIXELS: ByteBuffer = MemoryUtil.memAlloc(3).put(112).put(120).put(0).flip() as ByteBuffer
private val errorHandler: (Throwable) -> Unit = { LOGGER.error("failed to load resource!", it) }

override fun init() {
Expand All @@ -73,13 +72,13 @@ object NVGRenderer : Renderer {
require(raster != 0L) { "Could not initialize NanoSVG" }

val font = PolyUI.defaultFonts.regular
val fdata = font.loadDirect()
val fdata = font.load().toDirectByteBuffer()
val fit = NVGFont(nvgCreateFontMem(vg, font.name, fdata, false), fdata)
this.defaultFont = fit
fonts[font] = fit

val img = PolyUI.defaultImage
val idata = img.loadDirect()
val idata = img.load().toDirectByteBuffer()
val iit = nvgCreateImageRGBA(vg, img.width.toInt(), img.height.toInt(), 0, idata)
require(iit != 0) { "NanoVG failed to initialize default image" }
images[img] = iit
Expand All @@ -88,7 +87,7 @@ object NVGRenderer : Renderer {

override fun beginFrame(width: Float, height: Float, pixelRatio: Float) {
if (drawing) throw IllegalStateException("Already drawing")
queue.fastRemoveIf { it(); true }
queue.fastRemoveIfReversed { it(); true }
nvgBeginFrame(vg, width, height, pixelRatio)
drawing = true
}
Expand Down Expand Up @@ -443,7 +442,8 @@ object NVGRenderer : Renderer {
private fun getFont(font: Font): Int {
if (font.loadSync) return getFontSync(font)
return fonts.getOrElse(font) {
font.loadAsyncDirect(errorHandler = errorHandler) {
font.loadAsync(errorHandler = errorHandler) { data ->
val it = data.toDirectByteBuffer()
queue.add { fonts[font] = NVGFont(nvgCreateFontMem(vg, font.name, it, false), it) }
}
defaultFont!!
Expand All @@ -452,7 +452,7 @@ object NVGRenderer : Renderer {

private fun getFontSync(font: Font): Int {
return fonts.getOrPut(font) {
val data = font.loadDirect { errorHandler(it); return@getOrPut defaultFont!! }
val data = font.load { errorHandler(it); return@getOrPut defaultFont!! }.toDirectByteBuffer()
NVGFont(nvgCreateFontMem(vg, font.name, data, false), data)
}.id
}
Expand All @@ -462,8 +462,8 @@ object NVGRenderer : Renderer {
return when (image.type) {
PolyImage.Type.Vector -> {
val (svg, map) = svgs.getOrElse(image) {
image.loadAsyncDirectNT(errorHandler) {
queue.add { svgLoad(image, it) }
image.loadAsync(errorHandler) {
queue.add { svgLoad(image, it.toDirectByteBufferNT()) }
}
return defaultImage
}
Expand All @@ -473,8 +473,8 @@ object NVGRenderer : Renderer {

PolyImage.Type.Raster -> {
images.getOrElse(image) {
image.loadAsyncDirect(errorHandler) {
queue.add { images[image] = loadImage(image, it) }
image.loadAsync(errorHandler) {
queue.add { images[image] = loadImage(image, it.toDirectByteBuffer()) }
}
defaultImage
}
Expand All @@ -487,13 +487,13 @@ object NVGRenderer : Renderer {
private fun getImageSync(image: PolyImage, width: Float, height: Float): Int {
return when (image.type) {
PolyImage.Type.Vector -> {
val (svg, map) = svgs[image] ?: return svgLoad(image, image.loadDirectNT())
val (svg, map) = svgs[image] ?: return svgLoad(image, image.load().toDirectByteBufferNT())
if (image.invalid) image.size = Vec2.Immutable(svg.width(), svg.height())
map.getOrPut(width.hashCode() * 31 + height.hashCode()) { svgResize(svg, width, height) }
}

PolyImage.Type.Raster -> {
images.getOrPut(image) { loadImage(image, image.loadDirect()) }
images.getOrPut(image) { loadImage(image, image.load().toDirectByteBuffer()) }
}

else -> throw NoWhenBranchMatchedException("Please specify image type for $image")
Expand Down
16 changes: 10 additions & 6 deletions src/main/kotlin/org/polyfrost/polyui/PolyUI.kt
Original file line number Diff line number Diff line change
Expand Up @@ -240,11 +240,15 @@ class PolyUI @JvmOverloads constructor(
val iSize: Vec2.Immutable
get() {
return if (master.sizeValid) {
if (_iSize == null) _iSize = master.size.immutable()
_iSize!!
val iSize = _iSize
if (iSize == null) {
val sz = master.size.immutable()
this._iSize = sz
sz
} else iSize
} else Vec2.i_ONE
}
private val executors: LinkedList<Clock.Executor> = LinkedList()
private val executors: ArrayList<Clock.Executor> = ArrayList(4)

/**
* the time since the last frame, in nanoseconds. It is used internally a lot for animations, etc.
Expand Down Expand Up @@ -473,17 +477,17 @@ class PolyUI @JvmOverloads constructor(
* @since 0.22.0
*/
@JvmField
var defaultFonts = FontFamily("Poppins", "Poppins.zip")
val defaultFonts = FontFamily("poppins", "poppins/")

@JvmField
var monospaceFont = Font("JetBrainsMono-Regular.ttf")
val monospaceFont = Font("JetBrainsMono-Regular.ttf")

/**
* The fallback default image bundled with PolyUI
* @since 0.11.0
*/
@JvmField
var defaultImage = PolyImage("err.png")
val defaultImage = PolyImage("err.png")

/**
* Time the [block] and return how long it took, as well as logging with the [msg] if [log] is `true`.
Expand Down
Loading

0 comments on commit d9466bc

Please sign in to comment.