From 8fe6da72180126d73466b3d02680dcf255666092 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sat, 2 Dec 2023 15:38:00 +0700 Subject: [PATCH] Window icon --- .../kstarbound/client/StarboundClient.kt | 32 +++++++++++++++++- src/main/resources/starbound.png | Bin 0 -> 1971 bytes 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/starbound.png diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/client/StarboundClient.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/StarboundClient.kt index 734efddb..d6fcd528 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/client/StarboundClient.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/StarboundClient.kt @@ -8,11 +8,14 @@ import org.lwjgl.BufferUtils import org.lwjgl.glfw.Callbacks import org.lwjgl.glfw.GLFW import org.lwjgl.glfw.GLFWErrorCallback +import org.lwjgl.glfw.GLFWImage import org.lwjgl.opengl.GL import org.lwjgl.opengl.GL45.* import org.lwjgl.opengl.GLCapabilities +import org.lwjgl.stb.STBImage import org.lwjgl.system.MemoryStack import org.lwjgl.system.MemoryUtil +import org.lwjgl.system.MemoryUtil.memAddressSafe import ru.dbotthepony.kstarbound.util.MailboxExecutorService import ru.dbotthepony.kstarbound.world.PIXELS_IN_STARBOUND_UNIT import ru.dbotthepony.kstarbound.world.PIXELS_IN_STARBOUND_UNITf @@ -238,7 +241,7 @@ class StarboundClient : Closeable { } } - val stack = MemoryStack.stackPush() + var stack = MemoryStack.stackPush() try { val pWidth = stack.mallocInt(1) @@ -261,6 +264,28 @@ class StarboundClient : Closeable { stack.close() } + stack = MemoryStack.stackPush() + + try { + val pWidth = stack.mallocInt(1) + val pHeight = stack.mallocInt(1) + val pChannels = stack.mallocInt(1) + + val readFromDisk = readInternalBytes("starbound.png") + val buff = ByteBuffer.allocateDirect(readFromDisk.size) + buff.put(readFromDisk) + buff.position(0) + + val data = STBImage.stbi_load_from_memory(buff, pWidth, pHeight, pChannels, 4) ?: throw IllegalStateException("Unable to decode starbound.png") + val img = GLFWImage.malloc() + img.set(pWidth[0], pHeight[0], data) + + GLFW.nglfwSetWindowIcon(window, 1, memAddressSafe(img)) + img.free() + } finally { + stack.close() + } + // vsync GLFW.glfwSwapInterval(0) @@ -1068,5 +1093,10 @@ class StarboundClient : Closeable { read } } + + @JvmStatic + fun readInternalBytes(file: String): ByteArray { + return ClassLoader.getSystemClassLoader().getResourceAsStream(file)!!.readAllBytes() + } } } diff --git a/src/main/resources/starbound.png b/src/main/resources/starbound.png new file mode 100644 index 0000000000000000000000000000000000000000..adceefc5809f62f320259a7c53195ab0909860ab GIT binary patch literal 1971 zcmbW2`#aMM9LK-NC5m)H5!2=AHo25bnAAa1;UJa~Dr9^&ilOb<#Lhvv`UvpFf}X`}2A5hnw?GRb5p80Cu`ubo2xO zxs6s1P?6sd&Mtei4N;2mbn^nRzsmgXLq7me4s&rle>FZ=G}wmL3)!0@j&!3PbsJ%9 ze;MwjQt15f*k$!33pHaRxg|?apvzG3xfrF8s+H>LP5Jtz>csY!sHt89cD%Y#(B*TH zuv^@9Aw9u1FcCf;AYOyg7k*Ql}T$OnsL`r3*o zqGq_m!6a;XJ*>C?n<(JS(2T>a1nhxRYv$LjxuQH06S9sYhIh#ev{W`XpN(N=p$>t@ z87^2Dh~*qtsq~WlTZ)gH z{is}Yub}WipsYL=X4XTn2}m?d2R03=FE)vKxXqOtk4@xG?Tu8=OJlKyt>~l45QMjP zR`7&)zWN2HVzo1G3`40g_5+X^6Ez{GsY!6?ec5Q#I%6_2(DxsvP>M_XwIqT$Q#0#e}{5bxwaah2BySRZUT^2WcHrE*B(1BSg_8GR-%eQ5CY?(3RS)wQ^*w%_!#I zbkXvR>NeyyU~{A~G%Y*Gg{EkXcTb8>h9eHB*=IULLG{_%_7xtIlk$SQ%g3Ps%AMOR{Rc}OJDtvU1nk%E4W+uA;xUbk z>}OVZ&6rEVff$=ge9Jg5J2&E40ZvtZ(b;2cG&2!pSrAIKYj2vxm+`*mu-af$d`pP$ za|m{;*3yI@pJ$(EqNmq`jlg&U+@T|4z9J5z30Q8^eZu2 zB3WIahNPgi@=~%CY9>LNF`4cE9aJ*iw=;0Ret)QyNxk-;X^T!Wl1_>PPtc0Msmtwo zz4W282E6G%U&)$k_O1xTHN$g zlyte<3PsGk6FV0iM6w{4lnfv3L1`+a+T@|xi^Y?Z#G%>t`f60>;mHs0K1TXzdq2OT zNBA~7yoC!g)vwZ4`32@T7JwXd-%<40qMio7+WkswQC0J%wepGxmy;M+#mgd{v}2#P zpNqjLMlJkg)H@W6bm(zqFDC6H+>aI&#}O(z2+PAORJ$vb)=y%{5FTle5Fzng?W;Wv zWA}--5SEQ_VJMF1NayGp4@oA}Wgr}@C0X(~WuR*Ut}gN2X^mWXTZCT?s^@J<#y1K^ zvM4zAfTf(=$XfIH**!}|zyTqf9}^Q^R+9@02);ck?!XG z@C5^Yl5TUx*z+&Pi8eFK7K$IByIyGmTS2CH=sZ3r5C2=~#uo-$oZK8se-BFfA5G#( A2mk;8 literal 0 HcmV?d00001