From b67cd2a7f262d6c344b7f6eb35d70cfc50ba4d0c Mon Sep 17 00:00:00 2001 From: AtomicScience Date: Mon, 17 Feb 2025 09:20:05 +0300 Subject: [PATCH 01/92] Add support for manually compiled LWJGL instance --- build.sbt | 14 +++++++++++--- src/main/scala/ocelot/desktop/ui/UiHandler.scala | 12 ++++++++++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/build.sbt b/build.sbt index 2fe1f42..0776795 100644 --- a/build.sbt +++ b/build.sbt @@ -14,6 +14,15 @@ lazy val root = project.in(file(".")) ) ) +// Ensure Java 8 compatibility +javacOptions ++= Seq("-source", "1.8", "-target", "1.8") +initialize := { + val _ = initialize.value + val required = "1.8" + val current = sys.props("java.specification.version") + assert(current == required, s"Incompatible JDK: java.specification.version $current != $required") +} + lazy val brain = ProjectRef(file("lib/ocelot-brain"), "ocelot-brain") libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaVersion.value @@ -28,9 +37,8 @@ libraryDependencies += "org.apache.logging.log4j" % "log4j-slf4j-impl" % "2.20.0 val lwjglVersion = "2.9.3" libraryDependencies += "org.lwjgl.lwjgl" % "lwjgl" % lwjglVersion -libraryDependencies += "org.lwjgl.lwjgl" % "lwjgl-platform" % lwjglVersion classifier "natives-linux" -libraryDependencies += "org.lwjgl.lwjgl" % "lwjgl-platform" % lwjglVersion classifier "natives-windows" -libraryDependencies += "org.lwjgl.lwjgl" % "lwjgl-platform" % lwjglVersion classifier "natives-osx" + +Compile / unmanagedResourceDirectories += baseDirectory.value / "lib" / "native" libraryDependencies += "com.github.stephengold" % "j-ogg-all" % "1.0.3" libraryDependencies += "com.github.wendykierp" % "JTransforms" % "3.1" diff --git a/src/main/scala/ocelot/desktop/ui/UiHandler.scala b/src/main/scala/ocelot/desktop/ui/UiHandler.scala index fea5aed..9f2e0a9 100644 --- a/src/main/scala/ocelot/desktop/ui/UiHandler.scala +++ b/src/main/scala/ocelot/desktop/ui/UiHandler.scala @@ -245,6 +245,7 @@ object UiHandler extends Logging { val arch = System.getProperty("os.arch") val is64bit = arch.startsWith("amd64") + val isArm64 = arch.equals("aarch64") || arch.startsWith("arm64") val libs = { if (SystemUtils.IS_OS_WINDOWS) { @@ -253,7 +254,11 @@ object UiHandler extends Logging { else Array("jinput-dx8.dll", "jinput-raw.dll", "jinput-wintab.dll", "lwjgl.dll", "OpenAL32.dll") } else if (SystemUtils.IS_OS_MAC_OSX) - Array("liblwjgl.dylib") + if (isArm64) { + Array("liblwjgl-arm64.dylib") + } else { + Array("liblwjgl.dylib") + } else if (SystemUtils.IS_OS_LINUX) { if (is64bit) Array("libjinput-linux64.so", "liblwjgl64.so", "libopenal64.so") @@ -266,7 +271,10 @@ object UiHandler extends Logging { logger.debug(s"Unpacking native libraries to: $librariesPath") for (lib <- libs) { - val dest = new File(Paths.get(librariesPath, lib).toString) + val destinationFilename = if (SystemUtils.IS_OS_MAC_OSX) "liblwjgl.dylib" else lib + val dest = new File(Paths.get(librariesPath, destinationFilename).toString) + + logger.debug(s"Unpacking $lib to $dest") if (!dest.exists()) { val source = getClass.getResourceAsStream("/" + lib) From 7b89069c40fa3faea4d3cd43df4af58c8a04d64d Mon Sep 17 00:00:00 2001 From: AtomicScience Date: Mon, 17 Feb 2025 09:35:15 +0300 Subject: [PATCH 02/92] Fix issue with alpha channel blending on Metal --- lib/native/liblwjgl-arm64.dylib | Bin 0 -> 431704 bytes .../scala/ocelot/desktop/ui/UiHandler.scala | 9 ++++++++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 lib/native/liblwjgl-arm64.dylib diff --git a/lib/native/liblwjgl-arm64.dylib b/lib/native/liblwjgl-arm64.dylib new file mode 100644 index 0000000000000000000000000000000000000000..709fa778b3f3429a922fb82864cf724ab363211c GIT binary patch literal 431704 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ŽqL}w@BsO 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%0A{{u^z?g{`4|_iqJZzaG&0Ei< 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 L1595MhnN2WkcpC= literal 0 HcmV?d00001 diff --git a/src/main/scala/ocelot/desktop/ui/UiHandler.scala b/src/main/scala/ocelot/desktop/ui/UiHandler.scala index 9f2e0a9..50019ef 100644 --- a/src/main/scala/ocelot/desktop/ui/UiHandler.scala +++ b/src/main/scala/ocelot/desktop/ui/UiHandler.scala @@ -210,8 +210,15 @@ object UiHandler extends Logging { ContextAttribs.CONTEXT_CORE_PROFILE_BIT_ARB, ContextAttribs.CONTEXT_FORWARD_COMPATIBLE_BIT_ARB, ) + + val pf = new PixelFormat() + .withDepthBits(24) + .withStencilBits(8) + .withAlphaBits(8) + .withSRGB(true) + logger.info(s"Creating an OpenGL context: $attrs") - Display.create((new PixelFormat).withSRGB(true), attrs) + Display.create(pf, attrs) if (Settings.get.windowValidatePosition) fixInsaneInitialWindowGeometry() From 6f1f1fffc7aaec350134abc9ab785756d6a6842c Mon Sep 17 00:00:00 2001 From: AtomicScience Date: Mon, 17 Feb 2025 11:12:49 +0300 Subject: [PATCH 03/92] Bump OpenGL version to allow using inverse() Perhaps Metal is more strict about versions, or vendors provide this function in 140 on other platforms --- src/main/resources/ocelot/desktop/shader/general_3d.vert | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/ocelot/desktop/shader/general_3d.vert b/src/main/resources/ocelot/desktop/shader/general_3d.vert index 815ef98..897e2df 100644 --- a/src/main/resources/ocelot/desktop/shader/general_3d.vert +++ b/src/main/resources/ocelot/desktop/shader/general_3d.vert @@ -1,4 +1,4 @@ -#version 140 +#version 150 in vec3 inPos; in vec3 inNormal; From cb902180c6ae977177683d1c43bf0cf9bfe1ade8 Mon Sep 17 00:00:00 2001 From: AtomicScience Date: Mon, 17 Feb 2025 12:14:47 +0300 Subject: [PATCH 04/92] Fix scalafmt errors, remove unneded logging --- src/main/scala/ocelot/desktop/ui/UiHandler.scala | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/scala/ocelot/desktop/ui/UiHandler.scala b/src/main/scala/ocelot/desktop/ui/UiHandler.scala index 50019ef..4a41b24 100644 --- a/src/main/scala/ocelot/desktop/ui/UiHandler.scala +++ b/src/main/scala/ocelot/desktop/ui/UiHandler.scala @@ -260,13 +260,12 @@ object UiHandler extends Logging { Array("jinput-dx8_64.dll", "jinput-raw_64.dll", "jinput-wintab.dll", "lwjgl64.dll", "OpenAL64.dll") else Array("jinput-dx8.dll", "jinput-raw.dll", "jinput-wintab.dll", "lwjgl.dll", "OpenAL32.dll") - } else if (SystemUtils.IS_OS_MAC_OSX) - if (isArm64) { + } else if (SystemUtils.IS_OS_MAC_OSX) { + if (isArm64) Array("liblwjgl-arm64.dylib") - } else { + else Array("liblwjgl.dylib") - } - else if (SystemUtils.IS_OS_LINUX) { + } else if (SystemUtils.IS_OS_LINUX) { if (is64bit) Array("libjinput-linux64.so", "liblwjgl64.so", "libopenal64.so") else @@ -281,8 +280,6 @@ object UiHandler extends Logging { val destinationFilename = if (SystemUtils.IS_OS_MAC_OSX) "liblwjgl.dylib" else lib val dest = new File(Paths.get(librariesPath, destinationFilename).toString) - logger.debug(s"Unpacking $lib to $dest") - if (!dest.exists()) { val source = getClass.getResourceAsStream("/" + lib) From bbfb84043092c1390b55cf774ebda5b51a1ef8aa Mon Sep 17 00:00:00 2001 From: AtomicScience Date: Mon, 17 Feb 2025 12:46:53 +0300 Subject: [PATCH 05/92] Bring back platform lwjgl deps --- build.sbt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build.sbt b/build.sbt index 0776795..1456a88 100644 --- a/build.sbt +++ b/build.sbt @@ -37,6 +37,9 @@ libraryDependencies += "org.apache.logging.log4j" % "log4j-slf4j-impl" % "2.20.0 val lwjglVersion = "2.9.3" libraryDependencies += "org.lwjgl.lwjgl" % "lwjgl" % lwjglVersion +libraryDependencies += "org.lwjgl.lwjgl" % "lwjgl-platform" % lwjglVersion classifier "natives-linux" +libraryDependencies += "org.lwjgl.lwjgl" % "lwjgl-platform" % lwjglVersion classifier "natives-windows" +libraryDependencies += "org.lwjgl.lwjgl" % "lwjgl-platform" % lwjglVersion classifier "natives-osx" Compile / unmanagedResourceDirectories += baseDirectory.value / "lib" / "native" From deb0365d878053c43c223c27f33303092f34ae88 Mon Sep 17 00:00:00 2001 From: AtomicScience Date: Mon, 17 Feb 2025 12:49:45 +0300 Subject: [PATCH 06/92] Remove unnecessary Java 8 enforcement --- build.sbt | 9 --------- 1 file changed, 9 deletions(-) diff --git a/build.sbt b/build.sbt index 1456a88..b0cc107 100644 --- a/build.sbt +++ b/build.sbt @@ -14,15 +14,6 @@ lazy val root = project.in(file(".")) ) ) -// Ensure Java 8 compatibility -javacOptions ++= Seq("-source", "1.8", "-target", "1.8") -initialize := { - val _ = initialize.value - val required = "1.8" - val current = sys.props("java.specification.version") - assert(current == required, s"Incompatible JDK: java.specification.version $current != $required") -} - lazy val brain = ProjectRef(file("lib/ocelot-brain"), "ocelot-brain") libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaVersion.value From 6f4bfc0a6ee2b243bfd1e2be63a6a70eab69a78c Mon Sep 17 00:00:00 2001 From: AtomicScience Date: Mon, 17 Feb 2025 15:12:08 +0300 Subject: [PATCH 07/92] Make a aarch64 check more lenient --- src/main/scala/ocelot/desktop/ui/UiHandler.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/ocelot/desktop/ui/UiHandler.scala b/src/main/scala/ocelot/desktop/ui/UiHandler.scala index 4a41b24..5bdfe27 100644 --- a/src/main/scala/ocelot/desktop/ui/UiHandler.scala +++ b/src/main/scala/ocelot/desktop/ui/UiHandler.scala @@ -252,7 +252,7 @@ object UiHandler extends Logging { val arch = System.getProperty("os.arch") val is64bit = arch.startsWith("amd64") - val isArm64 = arch.equals("aarch64") || arch.startsWith("arm64") + val isArm64 = arch.startsWith("aarch64") || arch.startsWith("arm64") val libs = { if (SystemUtils.IS_OS_WINDOWS) { From 9a90c64291ed20eb4d3ed82efd911e4f0b8240bd Mon Sep 17 00:00:00 2001 From: AtomicScience Date: Mon, 17 Feb 2025 17:05:02 +0300 Subject: [PATCH 08/92] Added the LWGL compilation manual --- doc/lwjgl-apple-silicon-compilation.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 doc/lwjgl-apple-silicon-compilation.md diff --git a/doc/lwjgl-apple-silicon-compilation.md b/doc/lwjgl-apple-silicon-compilation.md new file mode 100644 index 0000000..037c523 --- /dev/null +++ b/doc/lwjgl-apple-silicon-compilation.md @@ -0,0 +1,25 @@ +# How to compile LWJGL2 for Apple Silicon +LWJGL2 does not provide official native ARM support, therefore Ocelot uses a specially modified version by **shadowfacts** + +Article: https://shadowfacts.net/2022/lwjgl-arm64/ + +Repository: https://github.com/shadowfacts/lwjgl2-arm64 + +This procedure is completely optional, as the precompiled library is already checked into the repository at `lib/native/liblwjgl-arm64.dylib` + +## Compilation +This assumes that you are running macOS on **Apple Silicon** *(cross-compiling LWJGL seems to be impossible)* + +1. Acquire a JDK8 built for ARM - for example, [Zulu 8 JDK](https://www.azul.com/downloads/?version=java-8-lts&os=macos&architecture=arm-64-bit&package=jdk#zulu), and add it to your `JAVA_HOME` +2. Get [`maven`](https://maven.apache.org/) and [`ant`](https://ant.apache.org/) - you may install them via `brew`, but be careful, as they will try to install a JDK as a dependency +3. Clone the LWJGL repository: +```bash +% git clone https://github.com/shadowfacts/lwjgl-arm64.git +``` +4. Run the following commands in the repo: +```bash +% ant generate-all +% ant jars +% ant compile-native +``` +5. Copy the compiled library from `libs/macosx/liblwjgl.dylib` into the `ocelot-desktop` project as `lib/native/liblwjgl-arm64.dylib` \ No newline at end of file From 816d4ea9920c9303c5cdbb25ad8b0f02b47e8d2c Mon Sep 17 00:00:00 2001 From: UnicornFreedom Date: Wed, 16 Jul 2025 17:35:01 +0200 Subject: [PATCH 09/92] Make it possible to re-map OpenComputers Insert key --- src/main/scala/ocelot/desktop/Settings.scala | 6 ++++++ src/main/scala/ocelot/desktop/util/SettingsData.scala | 2 ++ src/main/scala/ocelot/desktop/windows/ScreenWindow.scala | 3 +-- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/scala/ocelot/desktop/Settings.scala b/src/main/scala/ocelot/desktop/Settings.scala index a2e6b95..6504b39 100644 --- a/src/main/scala/ocelot/desktop/Settings.scala +++ b/src/main/scala/ocelot/desktop/Settings.scala @@ -44,6 +44,8 @@ class Settings(val config: Config) extends SettingsData { windowSize.y -= 16 } + keymapInsert = config.getIntOrElse("ocelot.keymap.insert", 0xD2) + recentWorkspace = config.getOptionalString("ocelot.workspace.recent") pinNewWindows = config.getBooleanOrElse("ocelot.workspace.pinNewWindows", default = true) unfocusedWindowTransparency = config.getDoubleOrElse("ocelot.workspace.unfocusedWindowTransparency", 0.5) @@ -105,6 +107,9 @@ object Settings extends Logging { def withValue(path: String, value: Option[Any]): Config = config.withValue(path, ConfigValueFactory.fromAnyRef(value.orNull)) + + def withValue(path: String, value: Int): Config = + config.withValue(path, ConfigValueFactory.fromAnyRef(value)) } class Int2D(var x: Int, var y: Int) { @@ -186,6 +191,7 @@ object Settings extends Logging { .withValuePreserveOrigin("ocelot.window.fullscreen", settings.windowFullscreen) .withValuePreserveOrigin("ocelot.window.disableVsync", settings.disableVsync) .withValuePreserveOrigin("ocelot.window.debugLwjgl", settings.debugLwjgl) + .withValue("ocelot.keymap.insert", settings.keymapInsert) .withValue("ocelot.workspace.recent", settings.recentWorkspace) .withValuePreserveOrigin("ocelot.workspace.pinNewWindows", settings.pinNewWindows) .withValuePreserveOrigin("ocelot.workspace.unfocusedWindowTransparency", settings.unfocusedWindowTransparency) diff --git a/src/main/scala/ocelot/desktop/util/SettingsData.scala b/src/main/scala/ocelot/desktop/util/SettingsData.scala index a277660..5f3eaa9 100644 --- a/src/main/scala/ocelot/desktop/util/SettingsData.scala +++ b/src/main/scala/ocelot/desktop/util/SettingsData.scala @@ -33,6 +33,8 @@ class SettingsData { var disableVsync: Boolean = false var debugLwjgl: Boolean = false + var keymapInsert: Int = 0xD2 + var recentWorkspace: Option[String] = None var pinNewWindows: Boolean = true diff --git a/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala b/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala index d61a25c..e444af3 100644 --- a/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala +++ b/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala @@ -15,7 +15,6 @@ import ocelot.desktop.util.{DrawUtils, Logging} import ocelot.desktop.windows.ScreenWindow._ import ocelot.desktop.{ColorScheme, OcelotDesktop, Settings} import org.apache.commons.lang3.StringUtils -import org.lwjgl.input.Keyboard import totoro.ocelot.brain.entity.Screen import totoro.ocelot.brain.nbt.NBTTagCompound import totoro.ocelot.brain.util.Tier @@ -59,7 +58,7 @@ class ScreenWindow(screenNode: ScreenNode) extends BasicWindow with Logging { screen.keyDown(event.char, event.code, OcelotDesktop.player) // note: in OpenComputers, key_down signal is fired __before__ clipboard signal - if (event.code == Keyboard.KEY_INSERT) + if (event.code == Settings.get.keymapInsert) screen.clipboard(UiHandler.clipboard, OcelotDesktop.player) case KeyEvent.State.Release => From eafcb3c16d7976cfc9a8c9c53a00488301909bd2 Mon Sep 17 00:00:00 2001 From: UnicornFreedom Date: Wed, 16 Jul 2025 17:47:03 +0200 Subject: [PATCH 10/92] Add a file with default keymap constants --- src/main/scala/ocelot/desktop/Keymap.scala | 11 +++++++++++ src/main/scala/ocelot/desktop/Settings.scala | 2 +- src/main/scala/ocelot/desktop/util/SettingsData.scala | 3 ++- 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 src/main/scala/ocelot/desktop/Keymap.scala diff --git a/src/main/scala/ocelot/desktop/Keymap.scala b/src/main/scala/ocelot/desktop/Keymap.scala new file mode 100644 index 0000000..99fe6b9 --- /dev/null +++ b/src/main/scala/ocelot/desktop/Keymap.scala @@ -0,0 +1,11 @@ +package ocelot.desktop + +import org.lwjgl.input.Keyboard + +/** + * The default Ocelot keymap (unless overridden by the setting). + */ + +object Keymap { + val Insert: Int = Keyboard.KEY_INSERT +} diff --git a/src/main/scala/ocelot/desktop/Settings.scala b/src/main/scala/ocelot/desktop/Settings.scala index 6504b39..d04b407 100644 --- a/src/main/scala/ocelot/desktop/Settings.scala +++ b/src/main/scala/ocelot/desktop/Settings.scala @@ -44,7 +44,7 @@ class Settings(val config: Config) extends SettingsData { windowSize.y -= 16 } - keymapInsert = config.getIntOrElse("ocelot.keymap.insert", 0xD2) + keymapInsert = config.getIntOrElse("ocelot.keymap.insert", Keymap.Insert) recentWorkspace = config.getOptionalString("ocelot.workspace.recent") pinNewWindows = config.getBooleanOrElse("ocelot.workspace.pinNewWindows", default = true) diff --git a/src/main/scala/ocelot/desktop/util/SettingsData.scala b/src/main/scala/ocelot/desktop/util/SettingsData.scala index 5f3eaa9..1f37ab2 100644 --- a/src/main/scala/ocelot/desktop/util/SettingsData.scala +++ b/src/main/scala/ocelot/desktop/util/SettingsData.scala @@ -1,5 +1,6 @@ package ocelot.desktop.util +import ocelot.desktop.Keymap import ocelot.desktop.Settings.Int2D import ocelot.desktop.util.SettingsData.Fields @@ -33,7 +34,7 @@ class SettingsData { var disableVsync: Boolean = false var debugLwjgl: Boolean = false - var keymapInsert: Int = 0xD2 + var keymapInsert: Int = Keymap.Insert var recentWorkspace: Option[String] = None From 34158d240821b4a0731ae2878eb30f7c7b956c9c Mon Sep 17 00:00:00 2001 From: Fingercomp Date: Fri, 18 Jul 2025 14:38:38 +0300 Subject: [PATCH 11/92] Reformat with scalafmt --- src/main/scala/ocelot/desktop/Keymap.scala | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/scala/ocelot/desktop/Keymap.scala b/src/main/scala/ocelot/desktop/Keymap.scala index 99fe6b9..4ddf537 100644 --- a/src/main/scala/ocelot/desktop/Keymap.scala +++ b/src/main/scala/ocelot/desktop/Keymap.scala @@ -2,10 +2,7 @@ package ocelot.desktop import org.lwjgl.input.Keyboard -/** - * The default Ocelot keymap (unless overridden by the setting). - */ - +/** The default Ocelot keymap (unless overridden by the setting). */ object Keymap { val Insert: Int = Keyboard.KEY_INSERT } From da17dc81a88148a48227ef8c5fcc8b65c7b8dd9f Mon Sep 17 00:00:00 2001 From: Fingercomp Date: Mon, 28 Jul 2025 22:05:43 +0300 Subject: [PATCH 12/92] Make scalafmt optional and more permissive --- .gitlab-ci.yml | 3 ++- .scalafmt.conf | 12 ++---------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c1c281a..87b8234 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -16,8 +16,8 @@ variables: PACKAGE_NAME: "ocelot-desktop-${CI_COMMIT_TAG}.jar" stages: - - test - build + - test - upload - deploy - release @@ -31,6 +31,7 @@ test: scalafmt: stage: test + allow_failure: true before_script: - sbt -v sbtVersion script: diff --git a/.scalafmt.conf b/.scalafmt.conf index 6c56d0c..d05dafe 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -6,19 +6,11 @@ indent.defnSite = 2 align = { preset = none - openParenDefnSite = true + openParenDefnSite = false } newlines = { source = keep - topLevelStatementBlankLines = [ - { blanks { before = 1, after = 1, beforeAll = -1, afterAll = -1 } } - ] -} - -binPack = { - preset = Oneline - literalsExclude = [] } rewrite = { @@ -30,7 +22,7 @@ rewrite = { } docstrings = { - oneline = fold + oneline = unfold wrap = keep forceBlankLineBefore = false } \ No newline at end of file From c9434089eaef1d9da055a6db98a661aefe97eb33 Mon Sep 17 00:00:00 2001 From: UnicornFreedom Date: Tue, 29 Jul 2025 14:14:13 +0200 Subject: [PATCH 13/92] Refactor Setting loading method --- src/main/scala/ocelot/desktop/Settings.scala | 31 +++----------------- 1 file changed, 4 insertions(+), 27 deletions(-) diff --git a/src/main/scala/ocelot/desktop/Settings.scala b/src/main/scala/ocelot/desktop/Settings.scala index d04b407..e0bcf29 100644 --- a/src/main/scala/ocelot/desktop/Settings.scala +++ b/src/main/scala/ocelot/desktop/Settings.scala @@ -5,11 +5,9 @@ import ocelot.desktop.Settings.ExtendedConfig import ocelot.desktop.util.{Logging, SettingsData} import org.apache.commons.lang3.SystemUtils -import java.io.InputStream import java.nio.charset.StandardCharsets import java.nio.file.{Files, Path} import java.util -import scala.io.{Codec, Source} class Settings(val config: Config) extends SettingsData { // TODO: refactor this mess (having to declare every field 3 times is extremely error-prone) @@ -137,39 +135,18 @@ object Settings extends Logging { def get: Settings = settings def load(path: Path): Unit = { - import java.lang.System.{lineSeparator => EOL} - if (Files.exists(path)) { - var stream: InputStream = null - try { - stream = Files.newInputStream(path) - val source = Source.fromInputStream(stream)(Codec.UTF8) - val plain = source.getLines().mkString("", EOL, EOL) - val config = ConfigFactory.parseString(plain) - settings = new Settings(config) - source.close() - + settings = new Settings(ConfigFactory.parseFile(path.toFile)) logger.info(s"Loaded Ocelot Desktop configuration from: $path") - return } catch { - case _: Throwable => - logger.info(s"Failed to parse $path, using default Ocelot Desktop configuration.") - } finally { - if (stream != null) - stream.close() + case t: Throwable => logger.error(s"Failed to parse $path!", t) } } - val defaults = { - val in = getClass.getResourceAsStream("/ocelot/desktop/ocelot.conf") - val config = Source.fromInputStream(in)(Codec.UTF8).getLines().mkString("", EOL, EOL) - in.close() - ConfigFactory.parseString(config) - } - - settings = new Settings(defaults) + logger.info(s"Using default Ocelot Desktop configuration...") + settings = new Settings(ConfigFactory.parseResources("/ocelot/desktop/ocelot.conf")) } def save(path: Path): Unit = { From 73a63e75aa6d8ab58ae95cb1209cbbcc6a86677c Mon Sep 17 00:00:00 2001 From: UnicornFreedom Date: Tue, 29 Jul 2025 16:39:30 +0200 Subject: [PATCH 14/92] Change item serialization logging level to DEBUG --- .../ocelot/desktop/inventory/Items.scala | 152 +++++++++--------- .../ocelot/desktop/util/Spritesheet.scala | 2 +- 2 files changed, 79 insertions(+), 75 deletions(-) diff --git a/src/main/scala/ocelot/desktop/inventory/Items.scala b/src/main/scala/ocelot/desktop/inventory/Items.scala index ed09fbd..3034fab 100644 --- a/src/main/scala/ocelot/desktop/inventory/Items.scala +++ b/src/main/scala/ocelot/desktop/inventory/Items.scala @@ -20,80 +20,7 @@ object Items extends Logging { // this is just to force load the class during initialization def init(): Unit = {} - /** Registers a recoverer for [[ItemRecoverer.sourceClass]]. */ - def registerRecoverer(recoverer: ItemRecoverer[_, _]): Unit = { - if (!_recoverers.contains(recoverer.sourceClass)) { - _recoverers(recoverer.sourceClass) = recoverer - logger.info(s"Registered a recoverer for ${recoverer.sourceClass.getName}") - } - } - - private def registerItemFactoryRecoverers(factory: ItemFactory): Unit = { - for (recoverer <- factory.recoverers) { - registerRecoverer(recoverer) - } - } - - def registerSingleton(factory: ItemFactory): Unit = { - _groups += SingletonItemGroup(factory.name, factory) - registerItemFactoryRecoverers(factory) - } - - def registerTiered(name: String, tiers: IterableOnce[Tier])(factory: Tier => ItemFactory): Unit = { - val group = TieredItemGroup(name, tiers.iterator.map(tier => (tier, factory(tier))).toSeq) - _groups += group - - for ((_, factory) <- group.factories) { - registerItemFactoryRecoverers(factory) - } - } - - def registerExtendedTiered(name: String, tiers: IterableOnce[ExtendedTier])( - factory: ExtendedTier => ItemFactory - ): Unit = { - val group = ExtendedTieredItemGroup(name, tiers.iterator.map(tier => (tier, factory(tier))).toSeq) - _groups += group - - for ((_, factory) <- group.factories) { - registerItemFactoryRecoverers(factory) - } - } - - def registerArbitrary(name: String, icon: IconSource, factories: IterableOnce[(String, ItemFactory)]): Unit = { - val group = ArbitraryItemGroup(name, icon, factories.iterator.toSeq) - _groups += group - - for ((_, factory) <- group.factories) { - registerItemFactoryRecoverers(factory) - } - } - - def groups: Iterable[ItemGroup] = _groups - - /** Attempts to recover an [[Item]] from `source`. - * - * Checks superclasses and traits while looking for a recoverer. - */ - def recover[A](source: A): Option[Item] = { - linearizationOrder(source.getClass.asInstanceOf[Class[_]]) - .flatMap(_recoverers.get) - .map(_.asInstanceOf[ItemRecoverer[_ >: A, _ <: Item]].recover(source)) - .nextOption() - } - - sealed trait ItemGroup { - def name: String - } - - case class SingletonItemGroup(name: String, factory: ItemFactory) extends ItemGroup - - case class TieredItemGroup(name: String, factories: Seq[(Tier, ItemFactory)]) extends ItemGroup - - case class ExtendedTieredItemGroup(name: String, factories: Seq[(ExtendedTier, ItemFactory)]) extends ItemGroup - - case class ArbitraryItemGroup(name: String, icon: IconSource, factories: Seq[(String, ItemFactory)]) extends ItemGroup - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + logger.debug("Initialize item serialization...") registerTiered("CPU", Tier.One to Tier.Three)(new CpuItem.Factory(_)) registerTiered("APU", Tier.Two to Tier.Creative)(tier => new ApuItem.Factory(tier.saturatingSub(1))) @@ -166,4 +93,81 @@ object Items extends Logging { .map(new TapeItem.Factory(_)) .map(factory => (f"${factory.name}%s (${Tape.lengthMinutes(factory.kind)}%.0f min)", factory)), ) + + logger.debug("Item serialization initialization finished.") + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + /** Registers a recoverer for [[ItemRecoverer.sourceClass]]. */ + private def registerRecoverer(recoverer: ItemRecoverer[_, _]): Unit = { + if (!_recoverers.contains(recoverer.sourceClass)) { + _recoverers(recoverer.sourceClass) = recoverer + logger.debug(s"Registered a recoverer for ${recoverer.sourceClass.getName}") + } + } + + private def registerItemFactoryRecoverers(factory: ItemFactory): Unit = { + for (recoverer <- factory.recoverers) { + registerRecoverer(recoverer) + } + } + + def registerSingleton(factory: ItemFactory): Unit = { + _groups += SingletonItemGroup(factory.name, factory) + registerItemFactoryRecoverers(factory) + } + + def registerTiered(name: String, tiers: IterableOnce[Tier])(factory: Tier => ItemFactory): Unit = { + val group = TieredItemGroup(name, tiers.iterator.map(tier => (tier, factory(tier))).toSeq) + _groups += group + + for ((_, factory) <- group.factories) { + registerItemFactoryRecoverers(factory) + } + } + + def registerExtendedTiered(name: String, tiers: IterableOnce[ExtendedTier])( + factory: ExtendedTier => ItemFactory + ): Unit = { + val group = ExtendedTieredItemGroup(name, tiers.iterator.map(tier => (tier, factory(tier))).toSeq) + _groups += group + + for ((_, factory) <- group.factories) { + registerItemFactoryRecoverers(factory) + } + } + + def registerArbitrary(name: String, icon: IconSource, factories: IterableOnce[(String, ItemFactory)]): Unit = { + val group = ArbitraryItemGroup(name, icon, factories.iterator.toSeq) + _groups += group + + for ((_, factory) <- group.factories) { + registerItemFactoryRecoverers(factory) + } + } + + def groups: Iterable[ItemGroup] = _groups + + /** Attempts to recover an [[Item]] from `source`. + * + * Checks superclasses and traits while looking for a recoverer. + */ + def recover[A](source: A): Option[Item] = { + linearizationOrder(source.getClass.asInstanceOf[Class[_]]) + .flatMap(_recoverers.get) + .map(_.asInstanceOf[ItemRecoverer[_ >: A, _ <: Item]].recover(source)) + .nextOption() + } + + sealed trait ItemGroup { + def name: String + } + + case class SingletonItemGroup(name: String, factory: ItemFactory) extends ItemGroup + + case class TieredItemGroup(name: String, factories: Seq[(Tier, ItemFactory)]) extends ItemGroup + + case class ExtendedTieredItemGroup(name: String, factories: Seq[(ExtendedTier, ItemFactory)]) extends ItemGroup + + case class ArbitraryItemGroup(name: String, icon: IconSource, factories: Seq[(String, ItemFactory)]) extends ItemGroup } diff --git a/src/main/scala/ocelot/desktop/util/Spritesheet.scala b/src/main/scala/ocelot/desktop/util/Spritesheet.scala index 3e4cf81..4a65d26 100644 --- a/src/main/scala/ocelot/desktop/util/Spritesheet.scala +++ b/src/main/scala/ocelot/desktop/util/Spritesheet.scala @@ -30,7 +30,7 @@ object Spritesheet extends Resource with Logging { } def load(): Unit = { - logger.info("Loading sprites") + logger.info("Loading sprites...") val imageURL = getClass.getResource("/ocelot/desktop/images/spritesheet/spritesheet.png") val image = ImageIO.read(imageURL) From 98d352a9e6398d069857ab9f600c3a60a2396b39 Mon Sep 17 00:00:00 2001 From: UnicornFreedom Date: Tue, 29 Jul 2025 20:21:37 +0200 Subject: [PATCH 15/92] Implement a serializable Keymap class --- src/main/scala/ocelot/desktop/Keymap.scala | 8 --- src/main/scala/ocelot/desktop/Settings.scala | 4 +- .../scala/ocelot/desktop/util/Keybind.scala | 11 ++++ .../scala/ocelot/desktop/util/Keymap.scala | 57 +++++++++++++++++++ .../ocelot/desktop/util/SettingsData.scala | 3 +- .../ocelot/desktop/windows/ScreenWindow.scala | 4 +- 6 files changed, 73 insertions(+), 14 deletions(-) delete mode 100644 src/main/scala/ocelot/desktop/Keymap.scala create mode 100644 src/main/scala/ocelot/desktop/util/Keybind.scala create mode 100644 src/main/scala/ocelot/desktop/util/Keymap.scala diff --git a/src/main/scala/ocelot/desktop/Keymap.scala b/src/main/scala/ocelot/desktop/Keymap.scala deleted file mode 100644 index 4ddf537..0000000 --- a/src/main/scala/ocelot/desktop/Keymap.scala +++ /dev/null @@ -1,8 +0,0 @@ -package ocelot.desktop - -import org.lwjgl.input.Keyboard - -/** The default Ocelot keymap (unless overridden by the setting). */ -object Keymap { - val Insert: Int = Keyboard.KEY_INSERT -} diff --git a/src/main/scala/ocelot/desktop/Settings.scala b/src/main/scala/ocelot/desktop/Settings.scala index e0bcf29..2a081db 100644 --- a/src/main/scala/ocelot/desktop/Settings.scala +++ b/src/main/scala/ocelot/desktop/Settings.scala @@ -42,7 +42,7 @@ class Settings(val config: Config) extends SettingsData { windowSize.y -= 16 } - keymapInsert = config.getIntOrElse("ocelot.keymap.insert", Keymap.Insert) + keymap.load(config.getConfig("ocelot.keymap")) recentWorkspace = config.getOptionalString("ocelot.workspace.recent") pinNewWindows = config.getBooleanOrElse("ocelot.workspace.pinNewWindows", default = true) @@ -168,7 +168,7 @@ object Settings extends Logging { .withValuePreserveOrigin("ocelot.window.fullscreen", settings.windowFullscreen) .withValuePreserveOrigin("ocelot.window.disableVsync", settings.disableVsync) .withValuePreserveOrigin("ocelot.window.debugLwjgl", settings.debugLwjgl) - .withValue("ocelot.keymap.insert", settings.keymapInsert) + .withValue("ocelot.keymap", settings.keymap.save()) .withValue("ocelot.workspace.recent", settings.recentWorkspace) .withValuePreserveOrigin("ocelot.workspace.pinNewWindows", settings.pinNewWindows) .withValuePreserveOrigin("ocelot.workspace.unfocusedWindowTransparency", settings.unfocusedWindowTransparency) diff --git a/src/main/scala/ocelot/desktop/util/Keybind.scala b/src/main/scala/ocelot/desktop/util/Keybind.scala new file mode 100644 index 0000000..39e5248 --- /dev/null +++ b/src/main/scala/ocelot/desktop/util/Keybind.scala @@ -0,0 +1,11 @@ +package ocelot.desktop.util + +/** + * Collection of keybind handles. + * Each represents some action you may want to execute in Ocelot by pressing a key (or key combination). + */ + +object Keybind extends Enumeration { + type Keybind = Value + val Insert: Keybind = Value +} diff --git a/src/main/scala/ocelot/desktop/util/Keymap.scala b/src/main/scala/ocelot/desktop/util/Keymap.scala new file mode 100644 index 0000000..8f08556 --- /dev/null +++ b/src/main/scala/ocelot/desktop/util/Keymap.scala @@ -0,0 +1,57 @@ +package ocelot.desktop.util + +import com.typesafe.config.{Config, ConfigValue, ConfigValueFactory} +import ocelot.desktop.util.Keybind.Keybind +import org.lwjgl.input.Keyboard + +import scala.collection.mutable +import scala.jdk.CollectionConverters._ + +class Keymap { + // default mappings + val map: mutable.Map[Keybind, Int] = mutable.Map( + Keybind.Insert -> Keyboard.KEY_INSERT + ) + + /** Retrieves the LWJGL keycode which is associated with the given keybind. + * Will return `Keyboard.KEY_NONE` if the binding is not found. + * + * @param keybind the keybind + * @return the actual LWJGL key associated with the given keybind, + * or `Keyboard.KEY_NONE` if none is. + */ + def apply(keybind: Keybind): Int = map.getOrElse(keybind, Keyboard.KEY_NONE) + + /** Adds a new keybind mapping and optionally returns previous value. + * If the map already contains a + * mapping for the keybind, it will be overridden by the new value. + * + * @param keybind the keybind to update + * @param key the new LWJGL key code + * @return an option value containing the LWJGL key code associated with the keybind + * before the `set` operation was executed, or `None` if this keybind + * was not defined in the keymap before. + */ + def set(keybind: Keybind, key: Int): Option[Int] = map.put(keybind, key) + + /** + * Attempts to read known keybindings from a config. + * Will ignore missing or unfamiliar values, retaining default values. + */ + def load(config: Config): Unit = { + Keybind.values.foreach(keybind => { + val path = keybind.toString.toLowerCase + if (config.hasPath(path)) { + set(keybind, config.getInt(path)) + } + }) + } + + /** + * Generates a ConfigValue with this keybindings map, + * (which can be embedded into any Config). + */ + def save(): ConfigValue = ConfigValueFactory.fromMap((map.view map { + case (key: Keybind, value: Int) => (key.toString.toLowerCase(), value) + }).toMap.asJava) +} diff --git a/src/main/scala/ocelot/desktop/util/SettingsData.scala b/src/main/scala/ocelot/desktop/util/SettingsData.scala index 1f37ab2..b2a1027 100644 --- a/src/main/scala/ocelot/desktop/util/SettingsData.scala +++ b/src/main/scala/ocelot/desktop/util/SettingsData.scala @@ -1,6 +1,5 @@ package ocelot.desktop.util -import ocelot.desktop.Keymap import ocelot.desktop.Settings.Int2D import ocelot.desktop.util.SettingsData.Fields @@ -34,7 +33,7 @@ class SettingsData { var disableVsync: Boolean = false var debugLwjgl: Boolean = false - var keymapInsert: Int = Keymap.Insert + var keymap: Keymap = new Keymap var recentWorkspace: Option[String] = None diff --git a/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala b/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala index e444af3..6c25db3 100644 --- a/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala +++ b/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala @@ -11,7 +11,7 @@ import ocelot.desktop.ui.UiHandler import ocelot.desktop.ui.event.sources.{KeyEvents, MouseEvents} import ocelot.desktop.ui.event.{DragEvent, KeyEvent, MouseEvent, ScrollEvent} import ocelot.desktop.ui.widget.window.BasicWindow -import ocelot.desktop.util.{DrawUtils, Logging} +import ocelot.desktop.util.{DrawUtils, Keybind, Logging} import ocelot.desktop.windows.ScreenWindow._ import ocelot.desktop.{ColorScheme, OcelotDesktop, Settings} import org.apache.commons.lang3.StringUtils @@ -58,7 +58,7 @@ class ScreenWindow(screenNode: ScreenNode) extends BasicWindow with Logging { screen.keyDown(event.char, event.code, OcelotDesktop.player) // note: in OpenComputers, key_down signal is fired __before__ clipboard signal - if (event.code == Settings.get.keymapInsert) + if (event.code == Settings.get.keymap(Keybind.Insert)) screen.clipboard(UiHandler.clipboard, OcelotDesktop.player) case KeyEvent.State.Release => From 3c604b976aebaa5e75a012ba466a384fb4abb3bd Mon Sep 17 00:00:00 2001 From: UnicornFreedom Date: Wed, 30 Jul 2025 00:29:03 +0200 Subject: [PATCH 16/92] Add key mapping tab to the settings dialog --- spritepack/spritepack.sh | 0 sprites/icons/SettingsKeymap.png | Bin 0 -> 196 bytes .../resources/ocelot/desktop/colorscheme.txt | 1 + .../images/spritesheet/spritesheet.png | Bin 150878 -> 151059 bytes .../images/spritesheet/spritesheet.txt | 23 +++--- .../ocelot/desktop/graphics/IconSource.scala | 1 + .../scala/ocelot/desktop/ui/UiHandler.scala | 5 +- .../ocelot/desktop/ui/widget/MenuBar.scala | 9 ++- .../ocelot/desktop/ui/widget/RootWidget.scala | 11 +-- .../desktop/ui/widget/WorkspaceView.scala | 12 +-- .../widget/settings/KeymapSettingsTab.scala | 76 ++++++++++++++++++ .../ui/widget/settings/SettingsDialog.scala | 1 + .../ui/widget/statusbar/StatusBar.scala | 8 +- .../scala/ocelot/desktop/util/Keybind.scala | 24 +++++- .../scala/ocelot/desktop/util/Keymap.scala | 65 ++++++++++++++- .../ocelot/desktop/util/SettingsData.scala | 1 + 16 files changed, 202 insertions(+), 35 deletions(-) mode change 100644 => 100755 spritepack/spritepack.sh create mode 100644 sprites/icons/SettingsKeymap.png create mode 100644 src/main/scala/ocelot/desktop/ui/widget/settings/KeymapSettingsTab.scala diff --git a/spritepack/spritepack.sh b/spritepack/spritepack.sh old mode 100644 new mode 100755 diff --git a/sprites/icons/SettingsKeymap.png b/sprites/icons/SettingsKeymap.png new file mode 100644 index 0000000000000000000000000000000000000000..d4414ae102f57f2bda1929ed68791768838bb9c9 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eS!3HE>+WIa6Qk(@Ik;M!QddeWoSh3W;3@BLU z>Ealo5j=HLAm0H64(H>K{;uB>IZ2IWB}-kv1_l4OH^1dJx8F2dmpsSvw4<6pf09^T zq;Dlh^2Mv1MdJJ4r?jm*IB|aYi77kQzfimubgEp6TWo`-m#AQU`={_)cG#=s}+3=I)H(moFzfi7V1boFyt=akR{0CDU{N&o-= literal 0 HcmV?d00001 diff --git a/src/main/resources/ocelot/desktop/colorscheme.txt b/src/main/resources/ocelot/desktop/colorscheme.txt index 1878c16..48df2b4 100644 --- a/src/main/resources/ocelot/desktop/colorscheme.txt +++ b/src/main/resources/ocelot/desktop/colorscheme.txt @@ -23,6 +23,7 @@ Tier3 = #c354cd Label = #333333 LabelError = #aa0000 +LabelDisabled = #888888 Scrollbar = #e5e5e526 ScrollbarThumb = #cc3f72 diff --git a/src/main/resources/ocelot/desktop/images/spritesheet/spritesheet.png b/src/main/resources/ocelot/desktop/images/spritesheet/spritesheet.png index bf5252f53e0c92df30cf4b851288262d08fdcdcd..fc9f9e2c6393f039d8fa1fb466a5027593cfce84 100644 GIT binary patch delta 59742 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 z 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¥|cFGqGVZ}y97zOSo{Qkz?{2^JI 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 delta 59574 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 diff --git a/src/main/resources/ocelot/desktop/images/spritesheet/spritesheet.txt b/src/main/resources/ocelot/desktop/images/spritesheet/spritesheet.txt index 213b10d..553dd02 100644 --- a/src/main/resources/ocelot/desktop/images/spritesheet/spritesheet.txt +++ b/src/main/resources/ocelot/desktop/images/spritesheet/spritesheet.txt @@ -65,7 +65,7 @@ icons/Help 559 618 16 16 icons/Home 214 567 22 22 icons/Keyboard 576 618 16 16 icons/KeyboardOff 593 618 16 16 -icons/LMB 350 655 11 14 +icons/LMB 363 655 11 14 icons/Label 610 618 16 16 icons/LinesHorizontal 627 618 16 16 icons/Link 644 618 16 16 @@ -73,26 +73,27 @@ icons/LinkSlash 661 618 16 16 icons/Memory 678 618 16 16 icons/Microchip 695 618 16 16 icons/NA 712 618 16 16 -icons/NotificationError 374 655 11 11 -icons/NotificationInfo 386 655 11 11 -icons/NotificationWarning 398 655 11 11 +icons/NotificationError 387 655 11 11 +icons/NotificationInfo 399 655 11 11 +icons/NotificationWarning 411 655 11 11 icons/Ocelot 729 618 16 16 -icons/Pin 305 655 14 14 +icons/Pin 318 655 14 14 icons/Plus 746 618 16 16 icons/Power 763 618 16 16 -icons/RMB 362 655 11 14 +icons/RMB 375 655 11 14 icons/Restart 780 618 16 16 icons/Save 797 618 16 16 icons/SaveAs 814 618 16 16 icons/Server 831 618 16 16 -icons/SettingsSound 266 655 12 17 -icons/SettingsSystem 279 655 12 17 -icons/SettingsUI 292 655 12 17 +icons/SettingsKeymap 266 655 12 17 +icons/SettingsSound 279 655 12 17 +icons/SettingsSystem 292 655 12 17 +icons/SettingsUI 305 655 12 17 icons/Tier0 848 618 16 16 icons/Tier1 865 618 16 16 icons/Tier2 882 618 16 16 icons/Tiers 899 618 16 16 -icons/Unpin 320 655 14 14 +icons/Unpin 333 655 14 14 icons/WaveLFSR 901 707 24 10 icons/WaveNoise 926 707 24 10 icons/WaveSawtooth 951 707 24 10 @@ -185,7 +186,7 @@ light-panel/Fill 207 560 2 2 light-panel/Vent 356 434 2 38 nodes/Cable 377 445 8 8 nodes/Camera 375 674 16 16 -nodes/Chest 335 655 14 14 +nodes/Chest 348 655 14 14 nodes/HologramProjector0 392 674 16 16 nodes/HologramProjector1 409 674 16 16 nodes/IronNoteBlock 426 674 16 16 diff --git a/src/main/scala/ocelot/desktop/graphics/IconSource.scala b/src/main/scala/ocelot/desktop/graphics/IconSource.scala index ecb83c1..cc013f8 100644 --- a/src/main/scala/ocelot/desktop/graphics/IconSource.scala +++ b/src/main/scala/ocelot/desktop/graphics/IconSource.scala @@ -149,6 +149,7 @@ object IconSource { )), ) + val SettingsKeymap: IconSource = IconSource("icons/SettingsKeymap") val SettingsSystem: IconSource = IconSource("icons/SettingsSystem") val SettingsSound: IconSource = IconSource("icons/SettingsSound") val SettingsUI: IconSource = IconSource("icons/SettingsUI") diff --git a/src/main/scala/ocelot/desktop/ui/UiHandler.scala b/src/main/scala/ocelot/desktop/ui/UiHandler.scala index 5bdfe27..5a693cd 100644 --- a/src/main/scala/ocelot/desktop/ui/UiHandler.scala +++ b/src/main/scala/ocelot/desktop/ui/UiHandler.scala @@ -13,7 +13,7 @@ import ocelot.desktop.util._ import ocelot.desktop.{OcelotDesktop, Settings} import org.apache.commons.lang3.SystemUtils import org.lwjgl.BufferUtils -import org.lwjgl.input.{Keyboard, Mouse} +import org.lwjgl.input.Mouse import org.lwjgl.opengl._ import java.awt.Toolkit @@ -29,6 +29,7 @@ import scala.collection.mutable import scala.concurrent.duration.DurationInt import scala.util.Try + object UiHandler extends Logging { var root: RootWidget = _ var graphics: Graphics = _ @@ -386,7 +387,7 @@ object UiHandler extends Logging { // we are processing screenshots here to make sure that // the current frame was fully drawn on the screen, // but the update for the next frame yet not happened (if the window, for example, is to be resized) - if (KeyEvents.isReleased(Keyboard.KEY_F12)) { + if (KeyEvents.isReleased(Settings.get.keymap(Keybind.Screenshot))) { SoundSource.InterfaceShutter.play() val image = graphics.screenshot() root.flash.bang() diff --git a/src/main/scala/ocelot/desktop/ui/widget/MenuBar.scala b/src/main/scala/ocelot/desktop/ui/widget/MenuBar.scala index 9aabde2..24b8a73 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/MenuBar.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/MenuBar.scala @@ -3,12 +3,13 @@ package ocelot.desktop.ui.widget import ocelot.desktop.audio.SoundSource import ocelot.desktop.geometry.{Padding2D, Size2D} import ocelot.desktop.graphics.{Graphics, IconSource} -import ocelot.desktop.ui.event.KeyEvent import ocelot.desktop.ui.widget.contextmenu.{ContextMenuEntry, ContextMenuSubmenu} import ocelot.desktop.ui.widget.help.{AboutDialog, UpdateCheckerDialog} import ocelot.desktop.ui.widget.settings.SettingsDialog +import ocelot.desktop.util.Keybind.{QuickLoad, QuickSave} +import ocelot.desktop.util.Keymap.Press import ocelot.desktop.{ColorScheme, OcelotDesktop} -import org.lwjgl.input.Keyboard + class MenuBar extends Widget { override def receiveMouseEvents: Boolean = true @@ -70,8 +71,8 @@ class MenuBar extends Widget { }) // fill remaining space eventHandlers += { - case KeyEvent(KeyEvent.State.Press, Keyboard.KEY_F5, _) => OcelotDesktop.save() - case KeyEvent(KeyEvent.State.Press, Keyboard.KEY_F9, _) => OcelotDesktop.showOpenDialog() + case Press(QuickSave) => OcelotDesktop.save() + case Press(QuickLoad) => OcelotDesktop.showOpenDialog() } override def draw(g: Graphics): Unit = { diff --git a/src/main/scala/ocelot/desktop/ui/widget/RootWidget.scala b/src/main/scala/ocelot/desktop/ui/widget/RootWidget.scala index bdc79a4..521bdc9 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/RootWidget.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/RootWidget.scala @@ -4,17 +4,18 @@ import ocelot.desktop.OcelotDesktop import ocelot.desktop.color.RGBAColor import ocelot.desktop.graphics.Graphics import ocelot.desktop.ui.UiHandler -import ocelot.desktop.ui.event.KeyEvent import ocelot.desktop.ui.layout.{CopyLayout, LinearLayout} import ocelot.desktop.ui.widget.contextmenu.ContextMenus import ocelot.desktop.ui.widget.itemdrag.DraggedItemPool import ocelot.desktop.ui.widget.modal.ModalDialogPool import ocelot.desktop.ui.widget.statusbar.StatusBar import ocelot.desktop.ui.widget.tooltip.TooltipPool +import ocelot.desktop.util.Keybind.{Fullscreen, ReloadWorkspace, UIDebug} +import ocelot.desktop.util.Keymap.Release import ocelot.desktop.util.{DrawUtils, Orientation} -import org.lwjgl.input.Keyboard import totoro.ocelot.brain.nbt.NBTTagCompound + class RootWidget(setupDefaultWorkspace: Boolean = true) extends Widget { override protected val layout = new CopyLayout(this) @@ -50,10 +51,10 @@ class RootWidget(setupDefaultWorkspace: Boolean = true) extends Widget { private var isDebugViewVisible = false eventHandlers += { - case KeyEvent(KeyEvent.State.Release, Keyboard.KEY_F1, _) => + case Release(UIDebug) => isDebugViewVisible = !isDebugViewVisible - case KeyEvent(KeyEvent.State.Release, Keyboard.KEY_F3, _) => + case Release(ReloadWorkspace) => OcelotDesktop.withTickLockAcquired { val backendNBT = new NBTTagCompound val frontendNBT = new NBTTagCompound @@ -63,7 +64,7 @@ class RootWidget(setupDefaultWorkspace: Boolean = true) extends Widget { UiHandler.root.workspaceView.load(frontendNBT) } - case KeyEvent(KeyEvent.State.Release, Keyboard.KEY_F11, _) => + case Release(Fullscreen) => UiHandler.fullScreen = !UiHandler.fullScreen } diff --git a/src/main/scala/ocelot/desktop/ui/widget/WorkspaceView.scala b/src/main/scala/ocelot/desktop/ui/widget/WorkspaceView.scala index e040ae7..7ed4d7f 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/WorkspaceView.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/WorkspaceView.scala @@ -12,11 +12,12 @@ import ocelot.desktop.ui.event.sources.KeyEvents import ocelot.desktop.ui.layout.{CopyLayout, Layout} import ocelot.desktop.ui.widget.WorkspaceView.NodeLoadException import ocelot.desktop.ui.widget.window.{NodeSelector, ProfilerWindow, WindowPool} +import ocelot.desktop.util.Keybind.{Center, Profiler} +import ocelot.desktop.util.Keymap.Press import ocelot.desktop.util.ReflectionUtils.findUnaryConstructor import ocelot.desktop.util.animation.ValueAnimation import ocelot.desktop.util.{DrawUtils, Logging, Persistable} -import ocelot.desktop.{ColorScheme, OcelotDesktop} -import org.lwjgl.input.Keyboard +import ocelot.desktop.{ColorScheme, OcelotDesktop, Settings} import totoro.ocelot.brain.entity.traits.{Environment, SidedEnvironment} import totoro.ocelot.brain.entity.{Case, Screen} import totoro.ocelot.brain.event.{EventBus, InventoryEvent, NodeEvent} @@ -28,6 +29,7 @@ import scala.collection.immutable.ArraySeq import scala.collection.{immutable, mutable} import scala.jdk.CollectionConverters._ + class WorkspaceView extends Widget with Persistable with MouseHandler with HoverHandler with Logging { @volatile var nodes: immutable.Seq[Node] = immutable.ArraySeq[Node]() @@ -262,10 +264,10 @@ class WorkspaceView extends Widget with Persistable with MouseHandler with Hover nodeSelector.close() } - case KeyEvent(KeyEvent.State.Press, Keyboard.KEY_F4, _) => + case Press(Profiler) => profilerWindow.open() - case KeyEvent(KeyEvent.State.Press, Keyboard.KEY_HOME, _) => + case Press(Center) => moveCameraOffset(-cameraOffset) } @@ -608,7 +610,7 @@ class WorkspaceView extends Widget with Persistable with MouseHandler with Hover nodes.foreach(_.update()) if (isHovered) { - root.get.statusBar.addKeyEntry("HOME", "Reset camera") + root.get.statusBar.addKeyEntry(Settings.get.keymap.name(Center), "Reset camera") } if (isHovered || nodes.exists(_.isHovered)) { diff --git a/src/main/scala/ocelot/desktop/ui/widget/settings/KeymapSettingsTab.scala b/src/main/scala/ocelot/desktop/ui/widget/settings/KeymapSettingsTab.scala new file mode 100644 index 0000000..879571c --- /dev/null +++ b/src/main/scala/ocelot/desktop/ui/widget/settings/KeymapSettingsTab.scala @@ -0,0 +1,76 @@ +package ocelot.desktop.ui.widget.settings + +import ocelot.desktop.color.Color +import ocelot.desktop.{ColorScheme, Settings} +import ocelot.desktop.geometry.{Padding2D, Size2D} +import ocelot.desktop.graphics.IconSource +import ocelot.desktop.ui.event.KeyEvent +import ocelot.desktop.ui.layout.LinearLayout +import ocelot.desktop.ui.widget.{Button, Label, PaddingBox, Widget} +import ocelot.desktop.util.Keybind.Keybind +import ocelot.desktop.util.{Keybind, Orientation} +import org.lwjgl.input.Keyboard + + +class KeymapSettingsTab extends SettingsTab { + override val layout = new LinearLayout(this, orientation = Orientation.Vertical, gap = 8) + + override val icon: IconSource = IconSource.SettingsKeymap + override val label: String = "Keymap" + + private def section(title: String, keybinds: Seq[Keybind]): Widget = new PaddingBox(new Widget { + override val layout = new LinearLayout(this, orientation = Orientation.Vertical) + + override def maximumSize: Size2D = minimumSize.copy(width = 257) + + children :+= new PaddingBox(new Label(title, small = true) { + override def maximumSize: Size2D = minimumSize + override def color: Color = ColorScheme("LabelDisabled") + }, Padding2D(top = 4, bottom = 8)) + + keybinds.foreach(keybind => { + children :+= new PaddingBox(new Widget { + children :+= new PaddingBox(new Label(keybind.description), Padding2D(top = 4, right = 8)) + children :+= new Button { + private var listening: Boolean = false + + eventHandlers += { + case KeyEvent(KeyEvent.State.Release, code, _) if listening => + Settings.get.keymap.set(keybind, code) + listening = false + } + + override def text: String = if (listening) "..." else Keyboard.getKeyName(Settings.get.keymap(keybind)) + override def onClick(): Unit = { + listening = !listening + } + } + }, Padding2D(bottom = 4)) + }) + }, Padding2D(bottom = 8)) + + children :+= new PaddingBox(new Widget { + children :+= new Widget { + override val layout = new LinearLayout(this, orientation = Orientation.Vertical) + children :+= section("OpenComputers", Seq( + Keybind.Insert, + )) + children :+= section("Ocelot", Seq( + Keybind.UIDebug, + Keybind.FPSCounter, + Keybind.ReloadWorkspace, + Keybind.Profiler, + Keybind.Fullscreen, + )) + } + children :+= new Widget { + override def maximumSize: Size2D = Size2D(16, 8) + } + children :+= section("Workspace", Seq( + Keybind.Center, + Keybind.QuickSave, + Keybind.QuickLoad, + Keybind.Screenshot, + )) + }, Padding2D(bottom = 8)) +} diff --git a/src/main/scala/ocelot/desktop/ui/widget/settings/SettingsDialog.scala b/src/main/scala/ocelot/desktop/ui/widget/settings/SettingsDialog.scala index 7d71513..2e83b87 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/settings/SettingsDialog.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/settings/SettingsDialog.scala @@ -16,6 +16,7 @@ class SettingsDialog extends ModalDialog { private val tabs = Seq( new UISettingsTab, new SoundSettingsTab, + new KeymapSettingsTab, new SystemSettingsTab, ) diff --git a/src/main/scala/ocelot/desktop/ui/widget/statusbar/StatusBar.scala b/src/main/scala/ocelot/desktop/ui/widget/statusbar/StatusBar.scala index e1f13ca..1eeea14 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/statusbar/StatusBar.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/statusbar/StatusBar.scala @@ -5,17 +5,19 @@ import ocelot.desktop.geometry.{Padding2D, Size2D} import ocelot.desktop.graphics.{Graphics, IconSource} import ocelot.desktop.ui.UiHandler import ocelot.desktop.ui.event.handlers.{HoverHandler, MouseHandler} -import ocelot.desktop.ui.event.{ClickEvent, HoverEvent, KeyEvent, MouseEvent} +import ocelot.desktop.ui.event.{ClickEvent, HoverEvent, MouseEvent} import ocelot.desktop.ui.layout.{AlignItems, LinearLayout} import ocelot.desktop.ui.widget._ import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry} import ocelot.desktop.ui.widget.traits.HoverAnimation +import ocelot.desktop.util.Keybind.FPSCounter +import ocelot.desktop.util.Keymap.Press import ocelot.desktop.{ColorScheme, OcelotDesktop} -import org.lwjgl.input.Keyboard import scala.collection.immutable.ArraySeq import scala.concurrent.duration.DurationInt + class StatusBar extends Widget { override protected val layout: LinearLayout = new LinearLayout(this, alignItems = AlignItems.Center) @@ -28,7 +30,7 @@ class StatusBar extends Widget { private var showFPS = false eventHandlers += { - case KeyEvent(KeyEvent.State.Press, Keyboard.KEY_F2, _) => + case Press(FPSCounter) => showFPS = !showFPS if (showFPS) { children :+= new PaddingBox( diff --git a/src/main/scala/ocelot/desktop/util/Keybind.scala b/src/main/scala/ocelot/desktop/util/Keybind.scala index 39e5248..443bf2c 100644 --- a/src/main/scala/ocelot/desktop/util/Keybind.scala +++ b/src/main/scala/ocelot/desktop/util/Keybind.scala @@ -6,6 +6,26 @@ package ocelot.desktop.util */ object Keybind extends Enumeration { - type Keybind = Value - val Insert: Keybind = Value + type Keybind = KeybindVal + + // OpenComputers + val Insert: Keybind = KeybindVal("Insert text") + + // Workspace + val Center: Keybind = KeybindVal("Center camera") + val QuickSave: Keybind = KeybindVal("Quick save") + val QuickLoad: Keybind = KeybindVal("Quick load") + val Screenshot: Keybind = KeybindVal("Save screenshot") + + // Ocelot + val UIDebug: Keybind = KeybindVal("UI Debug Mode") + val FPSCounter: Keybind = KeybindVal("FPS counter") + val ReloadWorkspace: Keybind = KeybindVal("Reload workspace") + val Profiler: Keybind = KeybindVal("Ocelot profiler") + val Fullscreen: Keybind = KeybindVal("Toggle fullscreen mode") + + protected class KeybindVal(val description: String) extends super.Val + private object KeybindVal { + def apply(description: String): KeybindVal = new KeybindVal(description) + } } diff --git a/src/main/scala/ocelot/desktop/util/Keymap.scala b/src/main/scala/ocelot/desktop/util/Keymap.scala index 8f08556..51d91cd 100644 --- a/src/main/scala/ocelot/desktop/util/Keymap.scala +++ b/src/main/scala/ocelot/desktop/util/Keymap.scala @@ -1,18 +1,37 @@ package ocelot.desktop.util import com.typesafe.config.{Config, ConfigValue, ConfigValueFactory} +import ocelot.desktop.Settings +import ocelot.desktop.ui.event.KeyEvent +import ocelot.desktop.ui.event.KeyEvent.State import ocelot.desktop.util.Keybind.Keybind import org.lwjgl.input.Keyboard import scala.collection.mutable import scala.jdk.CollectionConverters._ + class Keymap { // default mappings - val map: mutable.Map[Keybind, Int] = mutable.Map( - Keybind.Insert -> Keyboard.KEY_INSERT + val map: mutable.Map[Keybind.Value, Int] = mutable.Map( + // OpenComputers + Keybind.Insert -> Keyboard.KEY_INSERT, + + // Workspace + Keybind.Center -> Keyboard.KEY_HOME, + Keybind.QuickSave -> Keyboard.KEY_F5, + Keybind.QuickLoad -> Keyboard.KEY_F9, + Keybind.Screenshot -> Keyboard.KEY_F12, + + // Ocelot + Keybind.UIDebug -> Keyboard.KEY_F1, + Keybind.FPSCounter -> Keyboard.KEY_F2, + Keybind.ReloadWorkspace -> Keyboard.KEY_F3, + Keybind.Profiler -> Keyboard.KEY_F4, + Keybind.Fullscreen -> Keyboard.KEY_F11, ) + /** Retrieves the LWJGL keycode which is associated with the given keybind. * Will return `Keyboard.KEY_NONE` if the binding is not found. * @@ -32,7 +51,30 @@ class Keymap { * before the `set` operation was executed, or `None` if this keybind * was not defined in the keymap before. */ - def set(keybind: Keybind, key: Int): Option[Int] = map.put(keybind, key) + def set(keybind: Keybind.Value, key: Int): Option[Int] = map.put(keybind, key) + + /** + * Retrieves the name for a keyboard key associated with the given keybind. + * @param keybind the keybind + * @return the name of the button on the keyboard, for example "HOME", or "F1" + */ + def name(keybind: Keybind): String = Keyboard.getKeyName(apply(keybind)) + + + override def clone(): Keymap = { + val clone = new Keymap + clone.map.addAll(this.map) + clone + } + + + /** + * Tries to find a keybind that corresponds to the specific LWJGL key code + * @param key the LWJGL key code + * @return Option containing the keybind (if found) + */ + private def findByCode(key: Int): Option[Keybind] = map.iterator.collectFirst { case (keybind: Keybind, `key`) => keybind } + /** * Attempts to read known keybindings from a config. @@ -55,3 +97,20 @@ class Keymap { case (key: Keybind, value: Int) => (key.toString.toLowerCase(), value) }).toMap.asJava) } + +object Keymap { + object Press { + def unapply(event: KeyEvent): Option[Keybind] = event match { + case KeyEvent(State.Press, code, _) => + Settings.get.keymap.findByCode(code) + case _ => None + } + } + object Release { + def unapply(event: KeyEvent): Option[Keybind] = event match { + case KeyEvent(State.Release, code, _) => + Settings.get.keymap.findByCode(code) + case _ => None + } + } +} diff --git a/src/main/scala/ocelot/desktop/util/SettingsData.scala b/src/main/scala/ocelot/desktop/util/SettingsData.scala index b2a1027..f7b952b 100644 --- a/src/main/scala/ocelot/desktop/util/SettingsData.scala +++ b/src/main/scala/ocelot/desktop/util/SettingsData.scala @@ -12,6 +12,7 @@ class SettingsData { def this(data: SettingsData) { this() updateWith(data) + keymap = data.keymap.clone() } var brainCustomConfigPath: Option[String] = None From 182d42a8437270b49f8b2bae315f22bccd69822c Mon Sep 17 00:00:00 2001 From: Fingercomp Date: Thu, 31 Jul 2025 18:29:53 +0300 Subject: [PATCH 17/92] Pull ScreenView out of ScreenWindow --- .../scala/ocelot/desktop/ui/UiHandler.scala | 2 +- .../ocelot/desktop/ui/event/MouseEvent.scala | 2 +- .../ui/event/handlers/MouseHandler.scala | 4 +- .../ui/event/sources/MouseEvents.scala | 8 +- .../ocelot/desktop/ui/widget/Button.scala | 2 +- .../ocelot/desktop/ui/widget/IconButton.scala | 4 +- .../scala/ocelot/desktop/ui/widget/Knob.scala | 4 +- .../desktop/ui/widget/MenuBarButton.scala | 2 +- .../ocelot/desktop/ui/widget/ScreenView.scala | 189 +++++++++++++ .../ocelot/desktop/ui/widget/ScrollView.scala | 4 +- .../ocelot/desktop/ui/widget/Slider.scala | 2 +- .../ocelot/desktop/ui/widget/TextInput.scala | 2 +- .../widget/contextmenu/ContextMenuEntry.scala | 2 +- .../ui/widget/contextmenu/ContextMenus.scala | 2 +- .../verticalmenu/VerticalMenuButton.scala | 2 +- .../ui/widget/window/BasicWindow.scala | 4 +- .../ui/widget/window/PanelWindow.scala | 8 +- .../desktop/ui/widget/window/Window.scala | 2 +- .../scala/ocelot/desktop/util/DrawUtils.scala | 25 +- .../scala/ocelot/desktop/util/Register.scala | 64 +++++ .../ocelot/desktop/windows/ScreenWindow.scala | 253 ++++-------------- 21 files changed, 346 insertions(+), 241 deletions(-) create mode 100644 src/main/scala/ocelot/desktop/ui/widget/ScreenView.scala create mode 100644 src/main/scala/ocelot/desktop/util/Register.scala diff --git a/src/main/scala/ocelot/desktop/ui/UiHandler.scala b/src/main/scala/ocelot/desktop/ui/UiHandler.scala index 5a693cd..c99efb4 100644 --- a/src/main/scala/ocelot/desktop/ui/UiHandler.scala +++ b/src/main/scala/ocelot/desktop/ui/UiHandler.scala @@ -460,7 +460,7 @@ object UiHandler extends Logging { ScrollEvents.events.foreach(dispatchEvent(scrollTarget)) for (event <- MouseEvents.events) { - if (event.state == MouseEvent.State.Press) { + if (event.state == MouseEvent.State.Pressed) { dispatchEvent(mouseTarget)(event) // TODO: this should be done in the event capturing phase in [[Window]] itself. diff --git a/src/main/scala/ocelot/desktop/ui/event/MouseEvent.scala b/src/main/scala/ocelot/desktop/ui/event/MouseEvent.scala index ec6486b..58c4c07 100644 --- a/src/main/scala/ocelot/desktop/ui/event/MouseEvent.scala +++ b/src/main/scala/ocelot/desktop/ui/event/MouseEvent.scala @@ -2,7 +2,7 @@ package ocelot.desktop.ui.event object MouseEvent { object State extends Enumeration { - val Press, Release = Value + val Pressed, Released = Value } object Button extends Enumeration { diff --git a/src/main/scala/ocelot/desktop/ui/event/handlers/MouseHandler.scala b/src/main/scala/ocelot/desktop/ui/event/handlers/MouseHandler.scala index d904971..05c4465 100644 --- a/src/main/scala/ocelot/desktop/ui/event/handlers/MouseHandler.scala +++ b/src/main/scala/ocelot/desktop/ui/event/handlers/MouseHandler.scala @@ -25,10 +25,10 @@ trait MouseHandler extends Widget { protected def allowClickReleaseOutsideThreshold: Boolean = !receiveDragEvents eventHandlers += { - case MouseEvent(MouseEvent.State.Press, button) => + case MouseEvent(MouseEvent.State.Pressed, button) => startPositions += (button -> UiHandler.mousePosition) - case MouseEvent(MouseEvent.State.Release, button) => + case MouseEvent(MouseEvent.State.Released, button) => val mousePos = UiHandler.mousePosition val dragStopped = receiveDragEvents && dragButtons.remove(button) diff --git a/src/main/scala/ocelot/desktop/ui/event/sources/MouseEvents.scala b/src/main/scala/ocelot/desktop/ui/event/sources/MouseEvents.scala index 8b048d3..4f299aa 100644 --- a/src/main/scala/ocelot/desktop/ui/event/sources/MouseEvents.scala +++ b/src/main/scala/ocelot/desktop/ui/event/sources/MouseEvents.scala @@ -25,12 +25,12 @@ object MouseEvents { if (MouseEvent.Button.values.map(_.id).contains(buttonIdx)) { val button = MouseEvent.Button(buttonIdx) - val state = if (Mouse.getEventButtonState) MouseEvent.State.Press else MouseEvent.State.Release + val state = if (Mouse.getEventButtonState) MouseEvent.State.Pressed else MouseEvent.State.Released _events += MouseEvent(state, button) state match { - case MouseEvent.State.Press => + case MouseEvent.State.Pressed => _pressedButtons += button - case MouseEvent.State.Release => + case MouseEvent.State.Released => _pressedButtons -= button } } @@ -49,7 +49,7 @@ object MouseEvents { def releaseButtons(): Unit = { for (button <- pressedButtons) { - _events += MouseEvent(MouseEvent.State.Release, button) + _events += MouseEvent(MouseEvent.State.Released, button) } _pressedButtons.clear() diff --git a/src/main/scala/ocelot/desktop/ui/widget/Button.scala b/src/main/scala/ocelot/desktop/ui/widget/Button.scala index 7e983ac..98807cc 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/Button.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/Button.scala @@ -26,7 +26,7 @@ class Button(tooltip: Option[Tooltip] = None) extends Widget with MouseHandler w override protected def receiveClickEvents: Boolean = true eventHandlers += { - case MouseEvent(MouseEvent.State.Press, MouseEvent.Button.Left) if enabled => + case MouseEvent(MouseEvent.State.Pressed, MouseEvent.Button.Left) if enabled => clickSoundSource.press.play() case ClickEvent(MouseEvent.Button.Left, _) if enabled => diff --git a/src/main/scala/ocelot/desktop/ui/widget/IconButton.scala b/src/main/scala/ocelot/desktop/ui/widget/IconButton.scala index 77150d3..82dfd3b 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/IconButton.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/IconButton.scala @@ -35,7 +35,7 @@ class IconButton( case HoverEvent(HoverEvent.State.Enter) => onHoverEnter() case HoverEvent(HoverEvent.State.Leave) => onHoverLeave() - case MouseEvent(MouseEvent.State.Press, MouseEvent.Button.Left) => + case MouseEvent(MouseEvent.State.Pressed, MouseEvent.Button.Left) => mode match { case Mode.Regular => handlePress() case _ => // the other modes are triggered on click. @@ -43,7 +43,7 @@ class IconButton( clickSoundSource.press.play() - case MouseEvent(MouseEvent.State.Release, MouseEvent.Button.Left) => mode match { + case MouseEvent(MouseEvent.State.Released, MouseEvent.Button.Left) => mode match { case Mode.Regular if model.pressed => handleRelease() clickSoundSource.release.play() diff --git a/src/main/scala/ocelot/desktop/ui/widget/Knob.scala b/src/main/scala/ocelot/desktop/ui/widget/Knob.scala index 1dbefc0..74e9b48 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/Knob.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/Knob.scala @@ -28,14 +28,14 @@ abstract class Knob(dyeColor: DyeColor = DyeColor.Red) extends Widget { private var startValue: Int = 0 eventHandlers += { - case MouseEvent(MouseEvent.State.Press, MouseEvent.Button.Left) => + case MouseEvent(MouseEvent.State.Pressed, MouseEvent.Button.Left) => val mousePos = UiHandler.mousePosition if (bounds.contains(mousePos)) { movePos = Some(mousePos) startValue = input } - case MouseEvent(MouseEvent.State.Release, MouseEvent.Button.Left) => + case MouseEvent(MouseEvent.State.Released, MouseEvent.Button.Left) => movePos = None } diff --git a/src/main/scala/ocelot/desktop/ui/widget/MenuBarButton.scala b/src/main/scala/ocelot/desktop/ui/widget/MenuBarButton.scala index 25235d4..364b300 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/MenuBarButton.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/MenuBarButton.scala @@ -31,7 +31,7 @@ class MenuBarButton(label: String, handler: () => Unit = () => {}) extends Widge def onMouseLeave(): Unit = colorAnimation.goto(ColorScheme("TitleBarBackground")) eventHandlers += { - case MouseEvent(MouseEvent.State.Press, MouseEvent.Button.Left) => + case MouseEvent(MouseEvent.State.Pressed, MouseEvent.Button.Left) => clickSoundSource.press.play() case ClickEvent(MouseEvent.Button.Left, _) => diff --git a/src/main/scala/ocelot/desktop/ui/widget/ScreenView.scala b/src/main/scala/ocelot/desktop/ui/widget/ScreenView.scala new file mode 100644 index 0000000..2e44338 --- /dev/null +++ b/src/main/scala/ocelot/desktop/ui/widget/ScreenView.scala @@ -0,0 +1,189 @@ +package ocelot.desktop.ui.widget + +import ocelot.desktop.geometry.{Rect2D, Size2D, Vector2D} +import ocelot.desktop.graphics.Graphics +import ocelot.desktop.graphics.Texture.MinFilteringMode +import ocelot.desktop.node.nodes.ScreenNode +import ocelot.desktop.node.nodes.ScreenNode.{FontHeight, FontWidth} +import ocelot.desktop.ui.UiHandler +import ocelot.desktop.ui.event.{KeyEvent, MouseEvent, ScrollEvent} +import ocelot.desktop.ui.layout.Layout +import ocelot.desktop.ui.widget.ScreenView.ScaleTag +import ocelot.desktop.util.{Keybind, Persistable, Register} +import ocelot.desktop.{ColorScheme, OcelotDesktop, Settings} +import org.lwjgl.input.Keyboard +import totoro.ocelot.brain.nbt.NBTTagCompound +import totoro.ocelot.brain.util.Tier + +// TODO: use an interface instead of ScreenNode. +abstract class ScreenView(screenNode: ScreenNode) extends Widget with Persistable { + override protected val layout: Layout = new Layout(this) + + private var lastMousePos = Vector2D.Zero + + val scale = Register(1f) + def scaleX: Float = (FontWidth * scale.value).floor / FontWidth + def scaleY: Float = (FontHeight * scale.value).floor / FontHeight + + private def screenWidth: Int = screenNode.screenWidth + private def screenHeight: Int = screenNode.screenHeight + + override def minimumSize: Size2D = Size2D( + screenWidth * FontWidth * scaleX, + screenHeight * FontHeight * scaleY, + ) + + override def maximumSize: Size2D = minimumSize + + private def toBufferCoords(p: Vector2D): Vector2D = { + // no synchronization here (see the note in ScreenNode): the method to change this property is indirect. + if (screenNode.screen.getPrecisionMode) { + Vector2D( + (p.x - position.x) / FontWidth / scaleX, + (p.y - position.y) / FontHeight / scaleY, + ) + } else { + Vector2D( + math.floor((p.x - position.x) / FontWidth / scaleX), + math.floor((p.y - position.y) / FontHeight / scaleY), + ) + } + } + + private def bufferCoordsInBounds(p: Vector2D): Boolean = + new Rect2D(0, 0, screenWidth, screenHeight).contains(p) + + private def mouseCoordsInBounds: Boolean = + bufferCoordsInBounds(toBufferCoords(UiHandler.mousePosition)) + + override def receiveMouseEvents: Boolean = true + + override def receiveScrollEvents: Boolean = true + + protected def isFocused: Boolean + + private def shouldHandleInput: Boolean = isFocused && !root.get.modalDialogPool.isVisible + + // OC doesn't trigger several touch events in a row; the same holds for drop events. + // For the following inputs: + // LMB down, RMB down, RMB up, LMB up + // ...OC only registers LMB down and RMB up, dropping the other two events. + private var pressedButton: Option[MouseEvent.Button.Value] = None + + // NOTE: events are handled before update(). + // if the brain initiates a viewport size change, mouse events could be sent for coordinates outside the new bounds. + // TODO: look into how OpenComputers deals with that, if it does at all. + eventHandlers += { + case event: KeyEvent if shouldHandleInput && event.code != Keyboard.KEY_ESCAPE => + event.state match { + case KeyEvent.State.Press | KeyEvent.State.Repeat => + screenNode.screen.keyDown(event.char, event.code, OcelotDesktop.player) + + // note: in OpenComputers, key_down signal is fired __before__ clipboard signal + if (event.code == Settings.get.keymap(Keybind.Insert)) { + screenNode.screen.clipboard(UiHandler.clipboard, OcelotDesktop.player) + } + + case KeyEvent.State.Release => + screenNode.screen.keyUp(event.char, event.code, OcelotDesktop.player) + } + + event.consume() + + case event: MouseEvent if shouldHandleInput => + val pos = toBufferCoords(UiHandler.mousePosition) + val inBounds = bufferCoordsInBounds(pos) + + if (inBounds) { + lastMousePos = pos + } + + event.state match { + case MouseEvent.State.Pressed if inBounds && screenNode.screen.tier > Tier.One => + if (pressedButton.isEmpty) { + screenNode.screen.mouseDown(pos.x, pos.y, event.button.id, OcelotDesktop.player) + } + + pressedButton = Some(event.button) + event.consume() + + case MouseEvent.State.Released => + if (inBounds && event.button == MouseEvent.Button.Middle) { + screenNode.screen.clipboard(UiHandler.clipboard, OcelotDesktop.player) + event.consume() + } + + if (pressedButton.nonEmpty) { + screenNode.screen.mouseUp(lastMousePos.x, lastMousePos.y, event.button.id, OcelotDesktop.player) + pressedButton = None + + if (inBounds) { + event.consume() + } + } + + case _ => + } + + case event: ScrollEvent if mouseCoordsInBounds && shouldHandleInput && screenNode.screen.tier > Tier.One => + screenNode.screen.mouseScroll(lastMousePos.x, lastMousePos.y, event.offset, OcelotDesktop.player) + event.consume() + } + + override def save(nbt: NBTTagCompound): Unit = { + nbt.setFloat(ScaleTag, scale.value) + super.save(nbt) + } + + override def load(nbt: NBTTagCompound): Unit = { + super.load(nbt) + scale.nextValue = nbt.getFloat(ScaleTag) + } + + private val screenSize = Register.sampling(Size2D(screenWidth, screenHeight)) + + override def update(): Unit = { + super.update() + + // NOTE: the single bar is intentional! both operands have to be evaluated. + if (scale.update() | screenSize.update()) { + recalculateBoundsAndRelayout() + } + + val mousePos = toBufferCoords(UiHandler.mousePosition) + + if (bufferCoordsInBounds(mousePos) && mousePos != lastMousePos) { + lastMousePos = mousePos + + if (isFocused && screenNode.screen.tier > Tier.One) { + for (button <- pressedButton) { + screenNode.screen.mouseDrag(lastMousePos.x, lastMousePos.y, button.id, OcelotDesktop.player) + } + } + } + } + + override def draw(g: Graphics): Unit = { + // no synchronization here (see the note in ScreenNode): the methods to turn the screen on/off are indirect. + if (screenNode.screen.getPowerState) { + screenNode.drawScreenData( + g, + position.x, + position.y, + scaleX, + scaleY, + if (Settings.get.screenWindowMipmap) { + MinFilteringMode.LinearMipmapLinear + } else { + MinFilteringMode.Nearest + }, + ) + } else { + g.rect(bounds, ColorScheme("ScreenOff")) + } + } +} + +object ScreenView { + private val ScaleTag: String = "scale" +} diff --git a/src/main/scala/ocelot/desktop/ui/widget/ScrollView.scala b/src/main/scala/ocelot/desktop/ui/widget/ScrollView.scala index 9b03fd9..ae34c2e 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/ScrollView.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/ScrollView.scala @@ -45,7 +45,7 @@ class ScrollView(val inner: Widget) extends Widget with Logging with HoverHandle } } - case event: MouseEvent if event.state == MouseEvent.State.Press => + case event: MouseEvent if event.state == MouseEvent.State.Pressed => val pos = UiHandler.mousePosition mouseOldPos = pos @@ -59,7 +59,7 @@ class ScrollView(val inner: Widget) extends Widget with Logging with HoverHandle scrollToEnd = false } - case event: MouseEvent if event.state == MouseEvent.State.Release => + case event: MouseEvent if event.state == MouseEvent.State.Released => dragging = 0 } diff --git a/src/main/scala/ocelot/desktop/ui/widget/Slider.scala b/src/main/scala/ocelot/desktop/ui/widget/Slider.scala index 8e30473..41930e6 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/Slider.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/Slider.scala @@ -34,7 +34,7 @@ class Slider(var value: Float, val text: String, val snapPoints: Int = 0) } eventHandlers += { - case MouseEvent(MouseEvent.State.Press, MouseEvent.Button.Left) => + case MouseEvent(MouseEvent.State.Pressed, MouseEvent.Button.Left) => clickSoundSource.press.play() case ClickEvent(MouseEvent.Button.Left, pos) => diff --git a/src/main/scala/ocelot/desktop/ui/widget/TextInput.scala b/src/main/scala/ocelot/desktop/ui/widget/TextInput.scala index 7153bd0..5b0bc9a 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/TextInput.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/TextInput.scala @@ -58,7 +58,7 @@ class TextInput(val initialText: String = "") extends Widget with MouseHandler w private var prevEnabled = enabled eventHandlers += { - case MouseEvent(MouseEvent.State.Release, MouseEvent.Button.Left) => + case MouseEvent(MouseEvent.State.Released, MouseEvent.Button.Left) => if (isFocused && !clippedBounds.contains(UiHandler.mousePosition)) { unfocus() } diff --git a/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuEntry.scala b/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuEntry.scala index 459c324..a371ac3 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuEntry.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuEntry.scala @@ -69,7 +69,7 @@ class ContextMenuEntry( override protected def receiveClickEvents: Boolean = true eventHandlers += { - case MouseEvent(MouseEvent.State.Press, MouseEvent.Button.Left) if !contextMenu.isOpening => + case MouseEvent(MouseEvent.State.Pressed, MouseEvent.Button.Left) if !contextMenu.isOpening => clickSoundSource.press.play() case ClickEvent(MouseEvent.Button.Left, _) if !contextMenu.isOpening => clicked() case HoverEvent(HoverEvent.State.Enter) => enter() diff --git a/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenus.scala b/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenus.scala index 88ead9d..6c84134 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenus.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenus.scala @@ -27,7 +27,7 @@ class ContextMenus extends Widget { case KeyEvent(KeyEvent.State.Press, Keyboard.KEY_ESCAPE, _) => closeAll() - case MouseEvent(MouseEvent.State.Press, _) => + case MouseEvent(MouseEvent.State.Pressed, _) => if (!menus.map(_.bounds).exists(_.contains(UiHandler.mousePosition))) closeAll() } diff --git a/src/main/scala/ocelot/desktop/ui/widget/verticalmenu/VerticalMenuButton.scala b/src/main/scala/ocelot/desktop/ui/widget/verticalmenu/VerticalMenuButton.scala index c332135..36cc6ed 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/verticalmenu/VerticalMenuButton.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/verticalmenu/VerticalMenuButton.scala @@ -46,7 +46,7 @@ class VerticalMenuButton(icon: IconSource, label: String, handler: VerticalMenuB def onMouseLeave(): Unit = colorAnimation.goto(ColorScheme("VerticalMenuBackground")) eventHandlers += { - case MouseEvent(MouseEvent.State.Press, MouseEvent.Button.Left) => + case MouseEvent(MouseEvent.State.Pressed, MouseEvent.Button.Left) => clickSoundSource.press.play() case ClickEvent(MouseEvent.Button.Left, _) => diff --git a/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala b/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala index 6ac77bf..bf26117 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala @@ -53,9 +53,11 @@ trait BasicWindow extends Window { } } + protected def borderRenderer: DrawUtils.BorderRenderer = DrawUtils.windowBorder + override def draw(g: Graphics): Unit = { beginDraw(g) - DrawUtils.windowWithShadow(g, position.x, position.y, size.width, size.height, 1f, 0.5f) + DrawUtils.windowWithShadow(g, position.x, position.y, size.width, size.height, 1f, 0.5f, borderRenderer) drawChildren(g) endDraw(g) } diff --git a/src/main/scala/ocelot/desktop/ui/widget/window/PanelWindow.scala b/src/main/scala/ocelot/desktop/ui/widget/window/PanelWindow.scala index 1148190..10a269c 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/window/PanelWindow.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/window/PanelWindow.scala @@ -14,7 +14,11 @@ trait PanelWindow extends BasicWindow { protected def titleMaxLength: Int = 32 - def setInner(inner: Widget, padding: Padding2D = Padding2D(bottom = 13, left = 12, right = 12)): Unit = { + def setInner( + inner: Widget, + padding: Padding2D = Padding2D(bottom = 13, left = 12, right = 12), + titlePadding: Padding2D = Padding2D(top = 8, left = 12, right = 12, bottom = 2), + ): Unit = { children = ArraySeq.empty children :+= new PaddingBox( @@ -22,7 +26,7 @@ trait PanelWindow extends BasicWindow { override def title: String = PanelWindow.this.title override def titleMaxLength: Int = PanelWindow.this.titleMaxLength }, - Padding2D(top = 8, left = 12, right = 12, bottom = 2), + titlePadding, ) children :+= new PaddingBox(inner, padding) diff --git a/src/main/scala/ocelot/desktop/ui/widget/window/Window.scala b/src/main/scala/ocelot/desktop/ui/widget/window/Window.scala index f14f5f1..67d8862 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/window/Window.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/window/Window.scala @@ -30,7 +30,7 @@ trait Window extends Widget with Persistable with MouseHandler { override protected def receiveDragEvents: Boolean = true eventHandlers += { - case MouseEvent(MouseEvent.State.Press, _) => + case MouseEvent(MouseEvent.State.Pressed, _) => focus() case ev @ DragEvent(DragEvent.State.Start, MouseEvent.Button.Left, mousePos) => diff --git a/src/main/scala/ocelot/desktop/util/DrawUtils.scala b/src/main/scala/ocelot/desktop/util/DrawUtils.scala index 50fb29a..2a9a55f 100644 --- a/src/main/scala/ocelot/desktop/util/DrawUtils.scala +++ b/src/main/scala/ocelot/desktop/util/DrawUtils.scala @@ -17,24 +17,24 @@ object DrawUtils { h: Float, color: Color = RGBAColor(255, 255, 255), ): Unit = { - g.sprite("screen/CornerTL", x - 16, y - 20, 16, 20, color) - g.sprite("screen/CornerTR", x + w, y - 20, 16, 20, color) - g.sprite("screen/CornerBL", x - 16, y + h, 16, 16, color) - g.sprite("screen/CornerBR", x + w, y + h, 16, 16, color) + g.sprite("screen/CornerTL", x, y, 16, 20, color) + g.sprite("screen/CornerTR", x + w - 16, y, 16, 20, color) + g.sprite("screen/CornerBL", x, y + h - 16, 16, 16, color) + g.sprite("screen/CornerBR", x + w - 16, y + h - 16, 16, 16, color) - g.sprite("screen/BorderT", x, y - 20, w, 20, color) - g.sprite("screen/BorderB", x, y + h, w, 16, color) + g.sprite("screen/BorderT", x + 16, y, w - 16 - 16, 20, color) + g.sprite("screen/BorderB", x + 16, y + h - 16, w - 16 - 16, 16, color) g.save() - g.translate(x - 16, y) + g.translate(x, y - 16) g.rotate(270.toRadians) - g.sprite("screen/BorderB", -h, 0, h, 16, color) + g.sprite("screen/BorderB", -h, 0, h - 20 - 16, 16, color) g.restore() g.save() - g.translate(x + w, y) + g.translate(x + w - 16, y - 16) g.rotate(270.toRadians) - g.sprite("screen/BorderB", -h, 0, h, 16, color) + g.sprite("screen/BorderB", -h, 0, h - 20 - 16, 16, color) g.restore() } @@ -95,6 +95,8 @@ object DrawUtils { if (alpha < 1f) g.endGroupAlpha(alpha) } + type BorderRenderer = (Graphics, Float, Float, Float, Float, Color) => Unit + def windowWithShadow( g: Graphics, x: Float, @@ -103,9 +105,10 @@ object DrawUtils { h: Float, backgroundAlpha: Float, shadowAlpha: Float, + borderRenderer: BorderRenderer = windowBorder ): Unit = { DrawUtils.shadow(g, x - 8, y - 8, w + 16, h + 20, shadowAlpha) - DrawUtils.windowBorder(g, x, y, w, h, RGBAColorNorm(1, 1, 1, backgroundAlpha)) + borderRenderer(g, x, y, w, h, RGBAColorNorm(1, 1, 1, backgroundAlpha)) } def ring( diff --git a/src/main/scala/ocelot/desktop/util/Register.scala b/src/main/scala/ocelot/desktop/util/Register.scala new file mode 100644 index 0000000..c3840c2 --- /dev/null +++ b/src/main/scala/ocelot/desktop/util/Register.scala @@ -0,0 +1,64 @@ +package ocelot.desktop.util + +import ocelot.desktop.ui.widget.Updatable + +/** + * Stores a value updated by calls to [[update]]. + */ +trait Register[T] { + /** + * The currently stored value. + */ + def value: T + + /** + * Updates the stored value. + * + * @return `true` if the value has changed. + */ + def update(): Boolean +} + +object Register { + class Writeable[T](initialValue: T) extends Register[T] { + private var _value: T = initialValue + override def value: T = _value + + /** + * The value this register will be set to on next update. + */ + var nextValue: T = _value + + override def update(): Boolean = { + val changed = nextValue != _value + _value = nextValue + + changed + } + } + + class Sampling[T](next: () => T) extends Register[T] { + private var _value = next() + override def value: T = _value + + override def update(): Boolean = { + val nextValue = next() + val changed = nextValue != _value + _value = nextValue + + changed + } + } + + /** + * Creates a [[Register.Writeable writeable register]] with the given initial value. + */ + def apply[T](initialValue: T): Writeable[T] = new Writeable(initialValue) + + /** + * Creates a [[Register.Sampling register]] that reevaluates the provided expression on every update. + * + * The expression is evaluated to compute the initial value. + */ + def sampling[T](nextValue: => T): Sampling[T] = new Sampling(() => nextValue) +} diff --git a/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala b/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala index 6c25db3..06c4e93 100644 --- a/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala +++ b/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala @@ -1,122 +1,59 @@ package ocelot.desktop.windows -import ocelot.desktop.audio.SoundSource -import ocelot.desktop.color.RGBAColor -import ocelot.desktop.geometry.{Rect2D, Size2D, Vector2D} -import ocelot.desktop.graphics.Graphics -import ocelot.desktop.graphics.Texture.MinFilteringMode +import ocelot.desktop.geometry.{Padding2D, Rect2D, Size2D, Vector2D} import ocelot.desktop.node.nodes.ScreenNode import ocelot.desktop.node.nodes.ScreenNode.{FontHeight, FontWidth} import ocelot.desktop.ui.UiHandler -import ocelot.desktop.ui.event.sources.{KeyEvents, MouseEvents} -import ocelot.desktop.ui.event.{DragEvent, KeyEvent, MouseEvent, ScrollEvent} -import ocelot.desktop.ui.widget.window.BasicWindow -import ocelot.desktop.util.{DrawUtils, Keybind, Logging} +import ocelot.desktop.ui.event.sources.KeyEvents +import ocelot.desktop.ui.event.{DragEvent, MouseEvent} +import ocelot.desktop.ui.widget.ScreenView +import ocelot.desktop.ui.widget.window.PanelWindow +import ocelot.desktop.util.DrawUtils.BorderRenderer +import ocelot.desktop.util.{DrawUtils, Logging} import ocelot.desktop.windows.ScreenWindow._ -import ocelot.desktop.{ColorScheme, OcelotDesktop, Settings} -import org.apache.commons.lang3.StringUtils -import totoro.ocelot.brain.entity.Screen import totoro.ocelot.brain.nbt.NBTTagCompound -import totoro.ocelot.brain.util.Tier -class ScreenWindow(screenNode: ScreenNode) extends BasicWindow with Logging { - private var lastMousePos = Vector2D(0, 0) - private var sentTouchEvent = false +class ScreenWindow(screenNode: ScreenNode) extends PanelWindow with Logging { private var startingWidth = 0f private var scaleDragPoint: Option[Vector2D] = None - private var _scale = 1f - private var scaleX: Float = 1f - private var scaleY: Float = 1f + override protected def title: String = screenNode.label.get - private def scale: Float = _scale - - private def scale_=(value: Float): Any = { - _scale = value - - scaleX = (FontWidth * scale).floor / FontWidth - scaleY = (FontHeight * scale).floor / FontHeight - } - - private def screen: Screen = screenNode.screen + override protected def titleMaxLength: Int = + ((screenWidth * FontWidth * View.scaleX - 15) / FontWidth).toInt private def screenWidth: Int = screenNode.screenWidth private def screenHeight: Int = screenNode.screenHeight - override def minimumSize: Size2D = Size2D( - screenWidth * FontWidth * scaleX + BorderHorizontal, - screenHeight * scaleY * FontHeight + BorderVertical, - ) - override def receiveScrollEvents: Boolean = true + override def maximumSize: Size2D = minimumSize + + private object View extends ScreenView(screenNode) { + override protected def isFocused: Boolean = ScreenWindow.this.isFocused + } + + setInner( + View, + padding = Padding2D( + right = BorderRight, + bottom = BorderBottom, + left = BorderLeft, + ), + titlePadding = Padding2D( + top = 2, + right = BorderRight - 4, + bottom = 2, + left = BorderLeft - 4, + ), + ) + eventHandlers += { - case event: KeyEvent if shouldHandleKeys => - event.state match { - case KeyEvent.State.Press | KeyEvent.State.Repeat => - screen.keyDown(event.char, event.code, OcelotDesktop.player) - - // note: in OpenComputers, key_down signal is fired __before__ clipboard signal - if (event.code == Settings.get.keymap(Keybind.Insert)) - screen.clipboard(UiHandler.clipboard, OcelotDesktop.player) - - case KeyEvent.State.Release => - screen.keyUp(event.char, event.code, OcelotDesktop.player) - } - - event.consume() - - case event: MouseEvent if shouldHandleKeys => - val pos = convertMousePos(UiHandler.mousePosition) - val inside = checkBounds(pos) - - if (inside) - lastMousePos = pos - - event.state match { - case MouseEvent.State.Press => - if (inside && screen.tier > Tier.One) { - screen.mouseDown(pos.x, pos.y, event.button.id, OcelotDesktop.player) - sentTouchEvent = true - event.consume() - } - - if ( - pinButtonBounds.contains(UiHandler.mousePosition) || closeButtonBounds.contains(UiHandler.mousePosition) - ) { - SoundSource.InterfaceClick.press.play() - } - - case MouseEvent.State.Release => - if (event.button == MouseEvent.Button.Middle && inside) { - screen.clipboard(UiHandler.clipboard, OcelotDesktop.player) - event.consume() - } - - if (sentTouchEvent) { - screen.mouseUp(lastMousePos.x, lastMousePos.y, event.button.id, OcelotDesktop.player) - event.consume() - sentTouchEvent = false - } else if (pinButtonBounds.contains(UiHandler.mousePosition)) { - if (isPinned) unpin() else pin() - SoundSource.InterfaceClick.release.play() - } else if (closeButtonBounds.contains(UiHandler.mousePosition)) { - close() - SoundSource.InterfaceClick.release.play() - } - - case _ => - } - - case event: ScrollEvent if shouldHandleKeys && screen.tier > Tier.One => - screen.mouseScroll(lastMousePos.x, lastMousePos.y, event.offset, OcelotDesktop.player) - event.consume() - case event @ DragEvent(DragEvent.State.Start, MouseEvent.Button.Left, _) => if (scaleDragRegion.contains(event.start)) { scaleDragPoint = Some(event.start) - startingWidth = screenWidth * FontWidth * scaleX + startingWidth = screenWidth * FontWidth * View.scaleX } case DragEvent(DragEvent.State.Drag, MouseEvent.Button.Left, mousePos) => @@ -125,7 +62,7 @@ class ScreenWindow(screenNode: ScreenNode) extends BasicWindow with Logging { val sy = point.y - mousePos.y val uiScale = UiHandler.scalingFactor - var newScale = scale + var newScale = View.scale.nextValue // TODO: refactor this mess, make it consider both sizes and not have two nearby slightly off "snap points" @@ -134,7 +71,7 @@ class ScreenWindow(screenNode: ScreenNode) extends BasicWindow with Logging { val maxWidth = screenWidth * FontWidth var midScale = (newWidth / maxWidth).max(0f) - if (!KeyEvents.isShiftDown && scale <= 1.001) + if (!KeyEvents.isShiftDown && View.scale.nextValue <= 1.001) midScale = midScale.min(1f) val lowScale = (FontWidth * midScale * uiScale).floor / FontWidth / uiScale @@ -146,7 +83,7 @@ class ScreenWindow(screenNode: ScreenNode) extends BasicWindow with Logging { val maxHeight = screenHeight * FontHeight var midScale = (newHeight / maxHeight).max(0f) - if (!KeyEvents.isShiftDown && scale <= 1.001) + if (!KeyEvents.isShiftDown && View.scale.nextValue <= 1.001) midScale = midScale.min(1f) val lowScale = (FontHeight * midScale * uiScale).floor / FontHeight / uiScale @@ -155,28 +92,30 @@ class ScreenWindow(screenNode: ScreenNode) extends BasicWindow with Logging { newScale = if (midScale - lowScale > highScale - midScale) highScale else lowScale } - if (newScale != scale) - scale = newScale - // enforce minimal screen size - if (scale <= 0.249f) { - scale = 0.25f + if (newScale <= 0.249f) { + newScale = 0.25f } + + View.scale.nextValue = newScale } case DragEvent(DragEvent.State.Stop, MouseEvent.Button.Left, _) => scaleDragPoint = None } - private def shouldHandleKeys: Boolean = isFocused && !root.get.modalDialogPool.isVisible - override def save(nbt: NBTTagCompound): Unit = { - nbt.setFloat("scale", scale) + View.save(nbt) super.save(nbt) } + override def load(nbt: NBTTagCompound): Unit = { + super.load(nbt) + View.load(nbt) + } + override def fitToCenter(): Unit = { - scale = math.min( + View.scale.nextValue = math.min( ((UiHandler.root.width * 0.9f) / (screenWidth * FontWidth + BorderHorizontal)).min(1f).max(0f), ((UiHandler.root.height * 0.9f) / (screenHeight * FontHeight + BorderVertical)).min(1f).max(0f), ) @@ -184,29 +123,6 @@ class ScreenWindow(screenNode: ScreenNode) extends BasicWindow with Logging { super.fitToCenter() } - override def load(nbt: NBTTagCompound): Unit = { - scale = nbt.getFloat("scale") - - super.load(nbt) - } - - private def checkBounds(p: Vector2D): Boolean = p.x >= 0 && p.y >= 0 && p.x < screenWidth && p.y < screenHeight - - private def convertMousePos(p: Vector2D): Vector2D = { - // no synchronization here (see the note in ScreenNode): the method to change this property is indirect. - if (screen.getPrecisionMode) { - Vector2D( - (p.x - BorderLeft - position.x) / FontWidth / scaleX, - (p.y - BorderTop - position.y) / FontHeight / scaleY, - ) - } else { - Vector2D( - math.floor((p.x - BorderLeft - position.x) / FontWidth / scaleX), - math.floor((p.y - BorderTop - position.y) / FontHeight / scaleY), - ) - } - } - override protected def dragRegions: Iterator[Rect2D] = Iterator( Rect2D(position.x, position.y, size.width, BorderTop.toFloat), Rect2D(position.x, position.y, BorderLeft.toFloat, size.height), @@ -230,82 +146,9 @@ class ScreenWindow(screenNode: ScreenNode) extends BasicWindow with Logging { root.get.statusBar.addMouseEntry("icons/DragLMB", "Scale screen") root.get.statusBar.addKeyMouseEntry("icons/DragLMB", "SHIFT", "Scale screen (magnify)") } - - val currentMousePos = convertMousePos(UiHandler.mousePosition) - if (!checkBounds(currentMousePos) || currentMousePos == lastMousePos) return - - lastMousePos = currentMousePos - - if (isFocused && screen.tier > Tier.One) { - for (button <- MouseEvents.pressedButtons) { - screen.mouseDrag(lastMousePos.x, lastMousePos.y, button.id, OcelotDesktop.player) - } - } } - private def pinButtonBounds: Rect2D = Rect2D( - position.x + screenWidth * FontWidth * scaleX - 13, - position.y + 3, - 14, - 14, - ) - - private def closeButtonBounds: Rect2D = Rect2D( - position.x + screenWidth * FontWidth * scaleX + 2, - position.y + 3, - 15, - 14, - ) - - override def draw(g: Graphics): Unit = { - beginDraw(g) - - val startX = position.x + BorderLeft - val startY = position.y + BorderTop - val windowWidth = screenWidth * FontWidth * scaleX - val windowHeight = screenHeight * FontHeight * scaleY - - DrawUtils.shadow(g, startX - 22, startY - 22, windowWidth + 44, windowHeight + 52, 0.5f) - DrawUtils.screenBorder(g, startX, startY, windowWidth, windowHeight) - - // no synchronization here (see the note in ScreenNode): the methods to turn the screen on/off are indirect. - if (screen.getPowerState) { - screenNode.drawScreenData( - g, - startX, - startY, - scaleX, - scaleY, - if (Settings.get.screenWindowMipmap) { - MinFilteringMode.LinearMipmapLinear - } else { - MinFilteringMode.Nearest - }, - ) - - } else { - g.rect(startX, startY, windowWidth, windowHeight, ColorScheme("ScreenOff")) - } - - g.setSmallFont() - g.background = RGBAColor(0, 0, 0, 0) - g.foreground = RGBAColor(110, 110, 110) - - val freeSpace = ((windowWidth - 15) / 8).toInt - val label = screenNode.label.get - val text = if (label.length <= freeSpace) - label - else - StringUtils.substring(label, 0, (freeSpace - 1).max(0).min(label.length)) + "…" - - g.text(startX - 4, startY - 14, text) - g.setNormalFont() - - g.sprite(if (isPinned) "icons/Unpin" else "icons/Pin", pinButtonBounds) - g.sprite("icons/Close", closeButtonBounds) - - endDraw(g) - } + override protected def borderRenderer: BorderRenderer = DrawUtils.screenBorder } object ScreenWindow { From 04550de173b06f9ae47c72e22b34875197468079 Mon Sep 17 00:00:00 2001 From: Fingercomp Date: Thu, 31 Jul 2025 22:51:14 +0300 Subject: [PATCH 18/92] Make the screen window look sane even when it's ridiculously small --- sprites/screen/BorderB.png | Bin 120 -> 0 bytes sprites/screen/BorderT.png | Bin 123 -> 0 bytes sprites/screen/CornerBL.png | Bin 167 -> 0 bytes sprites/screen/CornerBR.png | Bin 546 -> 0 bytes sprites/screen/CornerTL.png | Bin 157 -> 0 bytes sprites/screen/CornerTR.png | Bin 171 -> 0 bytes sprites/screen/InnerBorderB.png | Bin 0 -> 183 bytes sprites/screen/InnerBorderT.png | Bin 0 -> 183 bytes sprites/screen/InnerCornerBL.png | Bin 0 -> 201 bytes sprites/screen/InnerCornerBR.png | Bin 0 -> 188 bytes sprites/screen/InnerCornerTL.png | Bin 0 -> 188 bytes sprites/screen/InnerCornerTR.png | Bin 0 -> 203 bytes sprites/screen/OuterBorderT.png | Bin 0 -> 190 bytes sprites/screen/OuterCornerBL.png | Bin 0 -> 219 bytes sprites/screen/OuterCornerBR.png | Bin 0 -> 229 bytes sprites/screen/OuterCornerTL.png | Bin 0 -> 210 bytes sprites/screen/OuterCornerTR.png | Bin 0 -> 228 bytes .../resources/ocelot/desktop/colorscheme.txt | 2 + .../images/spritesheet/spritesheet.png | Bin 151059 -> 151087 bytes .../images/spritesheet/spritesheet.txt | 101 +++++++++--------- .../ocelot/desktop/geometry/Transform2D.scala | 2 +- .../ocelot/desktop/graphics/IconSource.scala | 19 ++++ .../desktop/ui/layout/LinearLayout.scala | 37 +++++-- .../ui/widget/window/BasicWindow.scala | 4 +- .../ui/widget/window/PanelWindow.scala | 3 +- .../scala/ocelot/desktop/util/DrawUtils.scala | 86 ++++++++++++--- .../ocelot/desktop/windows/ScreenWindow.scala | 28 +++-- 27 files changed, 196 insertions(+), 86 deletions(-) delete mode 100644 sprites/screen/BorderB.png delete mode 100644 sprites/screen/BorderT.png delete mode 100644 sprites/screen/CornerBL.png delete mode 100644 sprites/screen/CornerBR.png delete mode 100644 sprites/screen/CornerTL.png delete mode 100644 sprites/screen/CornerTR.png create mode 100644 sprites/screen/InnerBorderB.png create mode 100644 sprites/screen/InnerBorderT.png create mode 100644 sprites/screen/InnerCornerBL.png create mode 100644 sprites/screen/InnerCornerBR.png create mode 100644 sprites/screen/InnerCornerTL.png create mode 100644 sprites/screen/InnerCornerTR.png create mode 100644 sprites/screen/OuterBorderT.png create mode 100644 sprites/screen/OuterCornerBL.png create mode 100644 sprites/screen/OuterCornerBR.png create mode 100644 sprites/screen/OuterCornerTL.png create mode 100644 sprites/screen/OuterCornerTR.png diff --git a/sprites/screen/BorderB.png b/sprites/screen/BorderB.png deleted file mode 100644 index 7b68a2ae7c4b91247cf90acdd156c5c003ce5212..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-R!3HER>*_fHDb50q$YKVD7&j1R6q(}e2o%)v zba4#fh)zyPNch2jgh%K9|K?0KH3Lo|%ep@nt2mM~GBhFtV|bN)tQn>yaVE_6oGS#> O#o+1c=d#Wzp$Pz;=Nwo7 diff --git a/sprites/screen/BorderT.png b/sprites/screen/BorderT.png deleted file mode 100644 index 409be1fa920d64070caa5835ea753b2d777bca2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-V!3HGfJ?-}dQk(@Ik;M!QF>WBtC^E&_5h$qZ z>Eal|5uKcplJMs|153~UfB%_{XE?BMY?xzF$8@HlJHbf8+1WX;)bJ1w3qzPRSIYnU Sm3M#|89ZJ6T-G@yGywpn86g?~ diff --git a/sprites/screen/CornerBL.png b/sprites/screen/CornerBL.png deleted file mode 100644 index d05919f654aa73e755e5004c1cdb28cfb55c10b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqoCO|{#S9EFZXnDkGR4^uC>ZJK z;usCzM|A;;CxQUiGT}j;AkEr^n4{Ej4%k+kRnuXDGWWAz{K3pd}2R Lu6{1-oD!M<6E-el1esxlN%(+7oWh!+Xzrxc6MZpVFCOcf|q2ba*D2kXCbR zQqMbl7{w667?hc9Eu_;abc~-zs-}2|iC&%S+D3m~wHe^+C7xv#cZlbSQ(KNDc#n95 z73Dnf32~Iu0f}#gu6X<=xZv@ZV4lq^0)Ej`DzvcD!mP**;wj>Yp_f_XJmMxn)m&Mo z9Huo68yO^#fCL3)Y(j^F7-f@Y*4`Jd`<75552L?@3OG3mD3UiyYMHvKlr_>-`gByp z-2czh)@G)??!g4m{pz}(6F|>CP^-G`@2Tt7&VaxRaBVjIC7RRRH|f=;7C8n&JHX{l zQ&SFrt6gC1*^;?jmjbl>ng)Da00TK-_#Wt6_h!}D$N3YG-KHnH0}hXXNvaQR`~kl2 zXY3m@tCau%010qNS#tmYTt)x@Tt)#DltV!P0034=L_t&-S7ndU5x_tMMAwamRiY4u zC@VoCV`P8U>~kCfaD~DEcQ04fax=qeI6=`@r;C0)Vb+|WM~cYi;7lgy=I-Pj>=EA| kHpmM?M0w_K@e?G&4Oem=7j}hT&j0`b07*qoM6N<$f*(NeCIA2c diff --git a/sprites/screen/CornerTL.png b/sprites/screen/CornerTL.png deleted file mode 100644 index 3e96c2cf37404950e1f0cc0d00e476ed3920466a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^96-#)!3HEdkIOdzDb50q$YKVD7&j1R6q(}e2o&`9 zba4!k2v1H)Nl0mE`ftEybe3uIpWpxW%_`Z{7QCpBnWP|VApBsLzl?ojlF$j3Ig=DP zMObghI0i7bNhd7(^8I`B%n08GPoa{-v#w@KFqj$&i&g2#s{@T@@O1TaS?83{1OO#O BEwTUr diff --git a/sprites/screen/CornerTR.png b/sprites/screen/CornerTR.png deleted file mode 100644 index 3939c86d4d27300b2f9e75b1616629c692de8bcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^96-#)!3HEdkIOdzDb50q$YKVD7&j1R6q(}e2o#L< zba4!k2%p+_o43J$!*%DinI3Z|S+0s*+;dgRW7doV{WbTlGb-qGwd*FXlVoB&TEj2v zIlGN-@?MTmUT&pFd;fi@dANI)(m&Ro?K5v4?n_8p6@IqH>h0yS?N>}bvVLrk;Q1VW RA^~U-gQu&X%Q~loCICyGJNf_s diff --git a/sprites/screen/InnerBorderB.png b/sprites/screen/InnerBorderB.png new file mode 100644 index 0000000000000000000000000000000000000000..d71b670bbb3eb3d0b75912bbe96913b0b128430d GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-S!3HFkynkm2q!^2X+?^P2p46!a$)r2_Ix;Y9 z?C1WI$O_~uBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@u zM`SSrLyQ{;Gm1=c1{%bm;OXKR!f{>qprasz0SEJjp2Pdsp3<7H%HNvHeQdku0mkYl WY_XbhQ5S$}89ZJ6T-G@yGywpRx-LKf literal 0 HcmV?d00001 diff --git a/sprites/screen/InnerBorderT.png b/sprites/screen/InnerBorderT.png new file mode 100644 index 0000000000000000000000000000000000000000..fa74da20a0892aa83d0b33e12a2ec91650b4ae47 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-S!3HFkynkm2q!^2X+?^P2p46!a$)r2_Ix;Y9 z?C1WI$O_~uBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@u zM`SSrLyQ{;Gm1=c1{%bm;OXKR!f{>qpdllJ0S~i+QUAu6=)1uu&gd+8d#G3_^2ZWg Vwy@fdjp;zO44$rjF6*2UngEkGFCYK_ literal 0 HcmV?d00001 diff --git a/sprites/screen/InnerCornerBL.png b/sprites/screen/InnerCornerBL.png new file mode 100644 index 0000000000000000000000000000000000000000..de52a050eecfaa3cfc56943b88305a711e76697f GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^EFjFm1|(O0oL2{=7>k44ofvPP)Tsx_q&xaLGB9lH z=l+w(3gjy!dj$D1FjT2AFf_CEal|aozOPL0$$09_EeAhQUkuCQZG(@eunTvu(k44ofvPP)Tsx_q&xaLGB9lH z=l+w(3gjy!dj$D1FjT2AFf_CEal|aozOzMqUO5hQkKUKmM5{KFk44ofvPP)Tsx_q&xaLGB9lH z=l+w(3gjy!dj$D1FjT2AFf_CEal|aXs0l?9GjOHkAWR$zQ&IH#PtP#o`A{1{>18O0hA7 XgmdgjdLAnY)WG2B>gTe~DWM4fuQ)J< literal 0 HcmV?d00001 diff --git a/sprites/screen/InnerCornerTR.png b/sprites/screen/InnerCornerTR.png new file mode 100644 index 0000000000000000000000000000000000000000..1d10a9f551ccacb75676c58446c53a1d53b2bb36 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^EFjFm1|(O0oL2{=7>k44ofvPP)Tsx_q&xaLGB9lH z=l+w(3gjy!dj$D1FjT2AFf_CEal|aozXeLBR$E9)=Ae<&R#J`Gs5a*YoXH3k*Gee($xa pUD0Vx+{Yx+`~(!w*-3x7Z5N>==%+7T3N)O7!PC{xWt~$(69DN9Hx2** literal 0 HcmV?d00001 diff --git a/sprites/screen/OuterBorderT.png b/sprites/screen/OuterBorderT.png new file mode 100644 index 0000000000000000000000000000000000000000..a8d96945ee0f8a9413594823081ff62d372669d0 GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-W!3HE>s{0!ODaPU;cPGZ1Cw1z99F}xPUq=Rp zjs4tz5?O(Kg=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-z_ z@Q5sCV2E)8VMdWD&On10)ID7sLpZJ{r=%qOIe!2Me!Ty`|3429`0xZAD0=jRlTAd> af|)_woju;K>G5}<76wmOKbLh*2~7aZ%rbWX literal 0 HcmV?d00001 diff --git a/sprites/screen/OuterCornerBL.png b/sprites/screen/OuterCornerBL.png new file mode 100644 index 0000000000000000000000000000000000000000..d048106339bdd5809694b6914e8cecbb659de6c9 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jPK-BC>eK@{Ea{HEjtmSN z`?>!lvI6-E$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a z5n0T@5aR~Ij3QHCr5Sv@+kCpL-+ry;YlGx9_kM&^!iDS3j3^ HP6eK@{Ea{HEjtmSN z`?>!lvI6-E$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a z5n0T@5aR~Ij3QHTv@NN zsYZxPttnvt)kV5aLBE!C^Ip~7t5Y7&Wtq-!D)?LL#Ki@(XC6Cl^Rxbu#vacJ;%Q&j SD6Iz?%;4$j=d#Wzp$P!+LPXC1 literal 0 HcmV?d00001 diff --git a/src/main/resources/ocelot/desktop/colorscheme.txt b/src/main/resources/ocelot/desktop/colorscheme.txt index 48df2b4..b22a869 100644 --- a/src/main/resources/ocelot/desktop/colorscheme.txt +++ b/src/main/resources/ocelot/desktop/colorscheme.txt @@ -47,6 +47,8 @@ ComputerAddress = #333333 ScreenOff = #000000 +WindowBackground = #c6c6c6 + StatusBar = #181818 StatusBarActive = #ffffff04 StatusBarBorder = #222222 diff --git a/src/main/resources/ocelot/desktop/images/spritesheet/spritesheet.png b/src/main/resources/ocelot/desktop/images/spritesheet/spritesheet.png index fc9f9e2c6393f039d8fa1fb466a5027593cfce84..b045de3c0f991f99c57dc216ece235d9109619aa 100644 GIT binary patch delta 72444 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

    `)?0`1# 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

    X;6 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 lw>*#bzE*XkA*skbYD^t diff --git a/src/main/resources/ocelot/desktop/images/spritesheet/spritesheet.txt b/src/main/resources/ocelot/desktop/images/spritesheet/spritesheet.txt index 553dd02..067c52a 100644 --- a/src/main/resources/ocelot/desktop/images/spritesheet/spritesheet.txt +++ b/src/main/resources/ocelot/desktop/images/spritesheet/spritesheet.txt @@ -11,7 +11,7 @@ ShadowBorder 201 540 1 24 ShadowCorner 233 674 24 24 TabArrow 225 600 8 14 blocks/Generic 151 618 16 16 -blocks/HologramEffect 209 549 4 4 +blocks/HologramEffect 213 540 4 4 blocks/HologramProjector1Top 168 618 16 16 blocks/HologramProjector2Top 185 618 16 16 blocks/HologramProjectorSide 202 618 16 16 @@ -174,15 +174,15 @@ items/WirelessNetworkCard0 1001 635 16 16 items/WirelessNetworkCard1 358 674 16 16 light-panel/BookmarkLeft 882 707 18 14 light-panel/BookmarkRight 188 600 20 14 -light-panel/BorderB 214 549 4 4 -light-panel/BorderL 304 549 4 2 -light-panel/BorderR 219 549 4 4 -light-panel/BorderT 224 549 4 4 -light-panel/CornerBL 229 549 4 4 -light-panel/CornerBR 234 549 4 4 -light-panel/CornerTL 239 549 4 4 -light-panel/CornerTR 244 549 4 4 -light-panel/Fill 207 560 2 2 +light-panel/BorderB 218 540 4 4 +light-panel/BorderL 206 549 4 2 +light-panel/BorderR 223 540 4 4 +light-panel/BorderT 228 540 4 4 +light-panel/CornerBL 233 540 4 4 +light-panel/CornerBR 238 540 4 4 +light-panel/CornerTL 243 540 4 4 +light-panel/CornerTR 248 540 4 4 +light-panel/Fill 332 540 2 2 light-panel/Vent 356 434 2 38 nodes/Cable 377 445 8 8 nodes/Camera 375 674 16 16 @@ -273,49 +273,54 @@ nodes/screen/Standalone 814 707 16 16 nodes/screen/TopLeft 831 707 16 16 nodes/screen/TopMiddle 848 707 16 16 nodes/screen/TopRight 865 707 16 16 -panel/BorderB 249 549 4 4 -panel/BorderL 309 549 4 2 -panel/BorderR 254 549 4 4 -panel/BorderT 259 549 4 4 -panel/CornerBL 264 549 4 4 -panel/CornerBR 269 549 4 4 -panel/CornerTL 274 549 4 4 -panel/CornerTR 279 549 4 4 -panel/Fill 210 560 2 2 +panel/BorderB 253 540 4 4 +panel/BorderL 211 549 4 2 +panel/BorderR 258 540 4 4 +panel/BorderT 263 540 4 4 +panel/CornerBL 268 540 4 4 +panel/CornerBR 273 540 4 4 +panel/CornerTL 278 540 4 4 +panel/CornerTR 283 540 4 4 +panel/Fill 335 540 2 2 particles/Note 377 434 7 10 -screen/BorderB 206 549 2 8 -screen/BorderT 203 549 2 10 -screen/CornerBL 386 445 8 8 -screen/CornerBR 395 445 8 8 -screen/CornerTL 359 434 8 10 -screen/CornerTR 368 434 8 10 -window/BorderDark 203 560 1 4 -window/BorderLight 205 560 1 4 -window/CornerBL 284 549 4 4 -window/CornerBR 289 549 4 4 -window/CornerTL 294 549 4 4 -window/CornerTR 299 549 4 4 +screen/InnerBorderB 203 556 2 4 +screen/InnerBorderT 206 556 2 4 +screen/InnerCornerBL 288 540 4 4 +screen/InnerCornerBR 293 540 4 4 +screen/InnerCornerTL 298 540 4 4 +screen/InnerCornerTR 303 540 4 4 +screen/OuterBorderT 203 549 2 6 +screen/OuterCornerBL 386 445 8 8 +screen/OuterCornerBR 395 445 8 8 +screen/OuterCornerTL 359 434 8 10 +screen/OuterCornerTR 368 434 8 10 +window/BorderDark 328 540 1 4 +window/BorderLight 330 540 1 4 +window/CornerBL 308 540 4 4 +window/CornerBR 313 540 4 4 +window/CornerTL 318 540 4 4 +window/CornerTR 323 540 4 4 window/OpenFMRadio 474 0 232 105 window/case/Motherboard 123 434 79 70 window/rack/Lines 49 434 73 91 window/rack/Motherboard 178 305 100 78 -window/rack/NetworkBack 221 554 1 2 -window/rack/NetworkBottom 223 554 1 2 -window/rack/NetworkConnector 225 554 1 2 -window/rack/NetworkLeft 227 554 1 2 -window/rack/NetworkRight 229 554 1 2 -window/rack/NetworkTop 231 554 1 2 -window/rack/NodeBack 314 549 5 1 -window/rack/NodeBottom 320 549 5 1 -window/rack/NodeLeft 326 549 5 1 -window/rack/NodeRight 332 549 5 1 -window/rack/NodeTop 338 549 5 1 -window/rack/SideBack 209 554 1 3 -window/rack/SideBottom 211 554 1 3 -window/rack/SideConnector 213 554 1 3 -window/rack/SideLeft 215 554 1 3 -window/rack/SideRight 217 554 1 3 -window/rack/SideTop 219 554 1 3 +window/rack/NetworkBack 215 561 1 2 +window/rack/NetworkBottom 217 561 1 2 +window/rack/NetworkConnector 219 561 1 2 +window/rack/NetworkLeft 221 561 1 2 +window/rack/NetworkRight 223 561 1 2 +window/rack/NetworkTop 225 561 1 2 +window/rack/NodeBack 209 556 5 1 +window/rack/NodeBottom 215 556 5 1 +window/rack/NodeLeft 221 556 5 1 +window/rack/NodeRight 227 556 5 1 +window/rack/NodeTop 233 556 5 1 +window/rack/SideBack 203 561 1 3 +window/rack/SideBottom 205 561 1 3 +window/rack/SideConnector 207 561 1 3 +window/rack/SideLeft 209 561 1 3 +window/rack/SideRight 211 561 1 3 +window/rack/SideTop 213 561 1 3 window/raid/Slots 134 540 66 26 window/tape/Back 332 567 20 15 window/tape/BackPressed 353 567 20 15 diff --git a/src/main/scala/ocelot/desktop/geometry/Transform2D.scala b/src/main/scala/ocelot/desktop/geometry/Transform2D.scala index 2bfb98d..e5723da 100644 --- a/src/main/scala/ocelot/desktop/geometry/Transform2D.scala +++ b/src/main/scala/ocelot/desktop/geometry/Transform2D.scala @@ -24,7 +24,7 @@ object Transform2D { Transform2D.translate(-1f, 1f) >> Transform2D.scale(2f / width, -2f / height) def rotate(angle: Float): Transform2D = { - val (s, c) = (math.sin(angle).asInstanceOf[Float], math.cos(angle).asInstanceOf[Float]) + val (s, c) = (math.sin(angle).toFloat, math.cos(angle).toFloat) // format: off Transform2D( diff --git a/src/main/scala/ocelot/desktop/graphics/IconSource.scala b/src/main/scala/ocelot/desktop/graphics/IconSource.scala index cc013f8..d7b578d 100644 --- a/src/main/scala/ocelot/desktop/graphics/IconSource.scala +++ b/src/main/scala/ocelot/desktop/graphics/IconSource.scala @@ -334,4 +334,23 @@ object IconSource { val Floppy: IconSource = IconSource(s"$prefix/Floppy") } + + object Screen { + protected val prefix: String = "screen" + + val InnerCornerTL: IconSource = IconSource(s"$prefix/InnerCornerTL") + val InnerCornerTR: IconSource = IconSource(s"$prefix/InnerCornerTR") + val InnerCornerBL: IconSource = IconSource(s"$prefix/InnerCornerBL") + val InnerCornerBR: IconSource = IconSource(s"$prefix/InnerCornerBR") + + val OuterCornerTL: IconSource = IconSource(s"$prefix/OuterCornerTL") + val OuterCornerTR: IconSource = IconSource(s"$prefix/OuterCornerTR") + val OuterCornerBL: IconSource = IconSource(s"$prefix/OuterCornerBL") + val OuterCornerBR: IconSource = IconSource(s"$prefix/OuterCornerBR") + + val InnerBorderT: IconSource = IconSource(s"$prefix/InnerBorderT") + val OuterBorderT: IconSource = IconSource(s"$prefix/OuterBorderT") + + val InnerBorderB: IconSource = IconSource(s"$prefix/InnerBorderB") + } } diff --git a/src/main/scala/ocelot/desktop/ui/layout/LinearLayout.scala b/src/main/scala/ocelot/desktop/ui/layout/LinearLayout.scala index 2d8197a..9d0a4ae 100644 --- a/src/main/scala/ocelot/desktop/ui/layout/LinearLayout.scala +++ b/src/main/scala/ocelot/desktop/ui/layout/LinearLayout.scala @@ -4,12 +4,16 @@ import ocelot.desktop.geometry.Size2D import ocelot.desktop.ui.widget.Widget import ocelot.desktop.util.Orientation -class LinearLayout(widget: Widget, - orientation: Orientation.Value = Orientation.Horizontal, - justifyContent: JustifyContent.Value = JustifyContent.Start, - alignItems: AlignItems.Value = AlignItems.Stretch, - gap: Float = 0f) - extends Layout(widget) { +import scala.collection.immutable.ArraySeq + +class LinearLayout( + widget: Widget, + orientation: Orientation.Value = Orientation.Horizontal, + justifyContent: JustifyContent.Value = JustifyContent.Start, + alignItems: AlignItems.Value = AlignItems.Stretch, + gap: Float = 0f, +) extends Layout(widget) { + override def recalculateBounds(): Unit = { super.recalculateBounds() @@ -138,7 +142,12 @@ class LinearLayout(widget: Widget, pos += child.size.width + gap } - (orientation, alignItems) match { + val align = (child match { + case w: LinearLayout.WithOptions => w.align + case _ => None + }).getOrElse(alignItems) + + (orientation, align) match { case (Orientation.Vertical, AlignItems.Start) | (Orientation.Vertical, AlignItems.Stretch) => child.rawSetPosition(child.position.setX(widget.position.x)) @@ -160,3 +169,17 @@ class LinearLayout(widget: Widget, } } } + +object LinearLayout { + class WithOptions(widget: Widget, val align: Option[AlignItems.Value]) extends Widget { + override protected val layout: Layout = new CopyLayout(this) + + children = ArraySeq(widget) + } + + object WithOptions { + def apply( + align: Option[AlignItems.Value] = None, + )(widget: Widget) = new WithOptions(widget, align) + } +} diff --git a/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala b/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala index bf26117..6ac77bf 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala @@ -53,11 +53,9 @@ trait BasicWindow extends Window { } } - protected def borderRenderer: DrawUtils.BorderRenderer = DrawUtils.windowBorder - override def draw(g: Graphics): Unit = { beginDraw(g) - DrawUtils.windowWithShadow(g, position.x, position.y, size.width, size.height, 1f, 0.5f, borderRenderer) + DrawUtils.windowWithShadow(g, position.x, position.y, size.width, size.height, 1f, 0.5f) drawChildren(g) endDraw(g) } diff --git a/src/main/scala/ocelot/desktop/ui/widget/window/PanelWindow.scala b/src/main/scala/ocelot/desktop/ui/widget/window/PanelWindow.scala index 10a269c..edece5e 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/window/PanelWindow.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/window/PanelWindow.scala @@ -18,6 +18,7 @@ trait PanelWindow extends BasicWindow { inner: Widget, padding: Padding2D = Padding2D(bottom = 13, left = 12, right = 12), titlePadding: Padding2D = Padding2D(top = 8, left = 12, right = 12, bottom = 2), + contentFactory: (Widget, Padding2D) => Widget = new PaddingBox(_, _), ): Unit = { children = ArraySeq.empty @@ -29,6 +30,6 @@ trait PanelWindow extends BasicWindow { titlePadding, ) - children :+= new PaddingBox(inner, padding) + children :+= contentFactory(inner, padding) } } diff --git a/src/main/scala/ocelot/desktop/util/DrawUtils.scala b/src/main/scala/ocelot/desktop/util/DrawUtils.scala index 2a9a55f..be448fa 100644 --- a/src/main/scala/ocelot/desktop/util/DrawUtils.scala +++ b/src/main/scala/ocelot/desktop/util/DrawUtils.scala @@ -1,7 +1,8 @@ package ocelot.desktop.util +import ocelot.desktop.ColorScheme import ocelot.desktop.color.{Color, RGBAColor, RGBAColorNorm} -import ocelot.desktop.geometry.Vector2D +import ocelot.desktop.geometry.{Rect2D, Vector2D} import ocelot.desktop.graphics.{Graphics, IconSource} import ocelot.desktop.graphics.IconSource.{DiskActivityIconSource, NetworkActivityIconSource, PowerIconSource} import ocelot.desktop.node.Node.NoHighlightSize @@ -11,30 +12,82 @@ import totoro.ocelot.brain.entity.traits.{DiskActivityAware, NetworkActivityAwar object DrawUtils { def screenBorder( g: Graphics, - x: Float, - y: Float, - w: Float, - h: Float, + outer: Rect2D, + inner: Rect2D, color: Color = RGBAColor(255, 255, 255), ): Unit = { - g.sprite("screen/CornerTL", x, y, 16, 20, color) - g.sprite("screen/CornerTR", x + w - 16, y, 16, 20, color) - g.sprite("screen/CornerBL", x, y + h - 16, 16, 16, color) - g.sprite("screen/CornerBR", x + w - 16, y + h - 16, 16, 16, color) + val thicknessOuterTop = 12 + val thickness = 8 + val top = thickness + thicknessOuterTop + val side = 2 * thickness + val horizontal = 2 * side + val vertical = top + side - g.sprite("screen/BorderT", x + 16, y, w - 16 - 16, 20, color) - g.sprite("screen/BorderB", x + 16, y + h - 16, w - 16 - 16, 16, color) + val rightBorderX = outer.max.x - side + val bottomBorderY = outer.max.y - side + // filler (only visible if the screen view is too small). + g.rect( + outer.x + thickness, + outer.y + thicknessOuterTop, + outer.w - 2 * thickness, + outer.h - thickness - thicknessOuterTop, + ColorScheme("WindowBackground").withAlpha(color.toRGBANorm.a), + ) + + // inner border: corners. + g.sprite(IconSource.Screen.InnerCornerTL, inner.x - thickness, inner.y - thickness, thickness, thickness, color) + g.sprite(IconSource.Screen.InnerCornerTR, inner.max.x, inner.y - thickness, thickness, thickness, color) + g.sprite(IconSource.Screen.InnerCornerBL, inner.x - thickness, inner.max.y, thickness, thickness, color) + g.sprite(IconSource.Screen.InnerCornerBR, inner.max.x, inner.max.y, thickness, thickness, color) + + // inner border: top and bottom. + g.sprite(IconSource.Screen.InnerBorderT, inner.x, inner.y - thickness, inner.w, thickness, color) + g.sprite(IconSource.Screen.InnerBorderB, inner.x, inner.max.y, inner.w, thickness, color) + + // inner border: left. g.save() - g.translate(x, y - 16) + g.translate(inner.x - thickness, inner.y) g.rotate(270.toRadians) - g.sprite("screen/BorderB", -h, 0, h - 20 - 16, 16, color) + g.sprite(IconSource.Screen.InnerBorderT, -inner.h, 0, inner.h, thickness, color) g.restore() + // inner border: right. g.save() - g.translate(x + w - 16, y - 16) + g.translate(inner.max.x, inner.y) g.rotate(270.toRadians) - g.sprite("screen/BorderB", -h, 0, h - 20 - 16, 16, color) + g.sprite(IconSource.Screen.InnerBorderB, -inner.h, 0, inner.h, thickness, color) + g.restore() + + // outer border: corners. + g.sprite(IconSource.Screen.OuterCornerTL, outer.x, outer.y, side, top, color) + g.sprite(IconSource.Screen.OuterCornerTR, rightBorderX, outer.y, side, top, color) + g.sprite(IconSource.Screen.OuterCornerBL, outer.x, bottomBorderY, side, side, color) + g.sprite(IconSource.Screen.OuterCornerBR, rightBorderX, bottomBorderY, side, side, color) + + // outer border: top and bottom. + g.sprite(IconSource.Screen.OuterBorderT, outer.x + side, outer.y, outer.w - horizontal, thicknessOuterTop, color) + g.sprite( + IconSource.Screen.InnerBorderT, + outer.x + side, + outer.max.y - thickness, + outer.w - horizontal, + thickness, + color, + ) + + // outer border: left. + g.save() + g.translate(outer.x, outer.y + top) + g.rotate(270.toRadians) + g.sprite(IconSource.Screen.InnerBorderB, -outer.h + vertical, 0, outer.h - vertical, thickness, color) + g.restore() + + // outer border: right. + g.save() + g.translate(outer.max.x - thickness, outer.y + top) + g.rotate(270.toRadians) + g.sprite(IconSource.Screen.InnerBorderT, -outer.h + vertical, 0, outer.h - vertical, thickness, color) g.restore() } @@ -105,10 +158,9 @@ object DrawUtils { h: Float, backgroundAlpha: Float, shadowAlpha: Float, - borderRenderer: BorderRenderer = windowBorder ): Unit = { DrawUtils.shadow(g, x - 8, y - 8, w + 16, h + 20, shadowAlpha) - borderRenderer(g, x, y, w, h, RGBAColorNorm(1, 1, 1, backgroundAlpha)) + DrawUtils.windowBorder(g, x, y, w, h, RGBAColorNorm(1, 1, 1, backgroundAlpha)) } def ring( diff --git a/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala b/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala index 06c4e93..2825c52 100644 --- a/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala +++ b/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala @@ -1,14 +1,16 @@ package ocelot.desktop.windows +import ocelot.desktop.color.RGBAColorNorm import ocelot.desktop.geometry.{Padding2D, Rect2D, Size2D, Vector2D} +import ocelot.desktop.graphics.Graphics import ocelot.desktop.node.nodes.ScreenNode import ocelot.desktop.node.nodes.ScreenNode.{FontHeight, FontWidth} import ocelot.desktop.ui.UiHandler import ocelot.desktop.ui.event.sources.KeyEvents import ocelot.desktop.ui.event.{DragEvent, MouseEvent} -import ocelot.desktop.ui.widget.ScreenView +import ocelot.desktop.ui.layout.{AlignItems, LinearLayout} import ocelot.desktop.ui.widget.window.PanelWindow -import ocelot.desktop.util.DrawUtils.BorderRenderer +import ocelot.desktop.ui.widget.{PaddingBox, ScreenView} import ocelot.desktop.util.{DrawUtils, Logging} import ocelot.desktop.windows.ScreenWindow._ import totoro.ocelot.brain.nbt.NBTTagCompound @@ -47,6 +49,8 @@ class ScreenWindow(screenNode: ScreenNode) extends PanelWindow with Logging { bottom = 2, left = BorderLeft - 4, ), + contentFactory = + (inner, padding) => LinearLayout.WithOptions(align = Some(AlignItems.Center))(new PaddingBox(inner, padding)), ) eventHandlers += { @@ -148,15 +152,21 @@ class ScreenWindow(screenNode: ScreenNode) extends PanelWindow with Logging { } } - override protected def borderRenderer: BorderRenderer = DrawUtils.screenBorder + override def draw(g: Graphics): Unit = { + beginDraw(g) + DrawUtils.shadow(g, position.x - 8, position.y - 8, size.width + 16, size.height + 20, 0.5f) + DrawUtils.screenBorder(g, bounds, View.bounds, RGBAColorNorm(1, 1, 1)) + drawChildren(g) + endDraw(g) + } } object ScreenWindow { - private val BorderTop = 20 - private val BorderLeft = 16 - private val BorderRight = 16 - private val BorderBottom = 16 + val BorderTop = 20 + val BorderLeft = 16 + val BorderRight = 16 + val BorderBottom = 16 - private val BorderVertical = BorderTop + BorderBottom - private val BorderHorizontal = BorderLeft + BorderRight + val BorderVertical: Int = BorderTop + BorderBottom + val BorderHorizontal: Int = BorderLeft + BorderRight } From af3e887a1d16fda25732f9c3139a85d5301659d3 Mon Sep 17 00:00:00 2001 From: Fingercomp Date: Thu, 31 Jul 2025 22:57:59 +0300 Subject: [PATCH 19/92] Adjust ScreenWindow's drag regions The union of new regions is the window area sans the screen view and the bottom right corner. This differs from the old regions when the resolution is too small for the screen view to occupy the entirety of the window's inner width. --- src/main/scala/ocelot/desktop/windows/ScreenWindow.scala | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala b/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala index 2825c52..22d5e91 100644 --- a/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala +++ b/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala @@ -128,12 +128,12 @@ class ScreenWindow(screenNode: ScreenNode) extends PanelWindow with Logging { } override protected def dragRegions: Iterator[Rect2D] = Iterator( - Rect2D(position.x, position.y, size.width, BorderTop.toFloat), - Rect2D(position.x, position.y, BorderLeft.toFloat, size.height), + Rect2D(position.x, position.y, size.width, View.position.y - position.y), + Rect2D(position.x, position.y, View.position.x - position.x, size.height), // these two must not include `scaleDragRegion` - Rect2D(position.x, position.y + size.height - BorderBottom, size.width - BorderRight, BorderBottom.toFloat), - Rect2D(position.x + size.width - BorderRight, position.y, BorderRight.toFloat, size.height - BorderBottom), + Rect2D(position.x, View.bounds.max.y, size.width - BorderRight, bounds.max.y - View.bounds.max.y), + Rect2D(View.bounds.max.x, position.y, bounds.max.y - View.bounds.max.y, size.height - BorderBottom), ) private def scaleDragRegion: Rect2D = Rect2D( From 47f92b06c180bb1ae1e38d2c829a7af204a73385 Mon Sep 17 00:00:00 2001 From: UnicornFreedom Date: Wed, 30 Jul 2025 18:57:01 +0200 Subject: [PATCH 20/92] Make inactive windows transparency configurable --- src/main/scala/ocelot/desktop/Settings.scala | 2 +- .../ui/widget/settings/UISettingsTab.scala | 16 ++++++++++++++++ .../desktop/ui/widget/window/BasicWindow.scala | 2 +- .../ocelot/desktop/ui/widget/window/Window.scala | 5 +++++ .../desktop/ui/widget/window/WindowPool.scala | 5 ++++- .../scala/ocelot/desktop/util/SettingsData.scala | 2 +- 6 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/main/scala/ocelot/desktop/Settings.scala b/src/main/scala/ocelot/desktop/Settings.scala index 2a081db..0df4c4e 100644 --- a/src/main/scala/ocelot/desktop/Settings.scala +++ b/src/main/scala/ocelot/desktop/Settings.scala @@ -46,7 +46,7 @@ class Settings(val config: Config) extends SettingsData { recentWorkspace = config.getOptionalString("ocelot.workspace.recent") pinNewWindows = config.getBooleanOrElse("ocelot.workspace.pinNewWindows", default = true) - unfocusedWindowTransparency = config.getDoubleOrElse("ocelot.workspace.unfocusedWindowTransparency", 0.5) + unfocusedWindowTransparency = config.getDoubleOrElse("ocelot.workspace.unfocusedWindowTransparency", 0.5).toFloat saveOnExit = config.getBooleanOrElse("ocelot.workspace.saveOnExit", default = true) autosave = config.getBooleanOrElse("ocelot.workspace.autosave", default = true) autosavePeriod = config.getIntOrElse("ocelot.workspace.autosavePeriod", default = 300) diff --git a/src/main/scala/ocelot/desktop/ui/widget/settings/UISettingsTab.scala b/src/main/scala/ocelot/desktop/ui/widget/settings/UISettingsTab.scala index e406c4f..83b7925 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/settings/UISettingsTab.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/settings/UISettingsTab.scala @@ -20,6 +20,8 @@ class UISettingsTab extends SettingsTab { if (UiHandler.scalingFactor != Settings.get.scaleFactor) { UiHandler.scalingFactor = Settings.get.scaleFactor } + + UiHandler.root.workspaceView.windowPool.refreshWindows() } children :+= new PaddingBox( @@ -124,6 +126,20 @@ class UISettingsTab extends SettingsTab { Padding2D(bottom = 8), ) + children :+= new PaddingBox( + new Slider(Settings.get.unfocusedWindowTransparency, "Inactive window") { + override def minimumSize: Size2D = Size2D(512, 24) + + override def formatText: String = if (value == 0) s"$text: hide" else f"$text: ${value * 100}%.0f%% opacity" + + override def onValueFinal(value: Float): Unit = { + Settings.get.unfocusedWindowTransparency = value + applySettings() + } + }, + Padding2D(bottom = 8), + ) + children :+= new PaddingBox(new Label("Tooltip delays:"), Padding2D(bottom = 8)) children :+= new PaddingBox( diff --git a/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala b/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala index 6ac77bf..19c7299 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala @@ -28,7 +28,7 @@ trait BasicWindow extends Window { override protected def onUnfocused(): Unit = { super.onUnfocused() - alpha.goto(Settings.get.unfocusedWindowTransparency.toFloat) + alpha.goto(Settings.get.unfocusedWindowTransparency) } override def save(nbt: NBTTagCompound): Unit = { diff --git a/src/main/scala/ocelot/desktop/ui/widget/window/Window.scala b/src/main/scala/ocelot/desktop/ui/widget/window/Window.scala index 67d8862..fe1e963 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/window/Window.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/window/Window.scala @@ -174,6 +174,11 @@ trait Window extends Widget with Persistable with MouseHandler { } } + def refresh(): Unit = { + // currently is only used to update unfocused transparency values (could be extended in the future) + if (!isFocused) onUnfocused() + } + /** Disposes of the window immediately. This will make it dramatically pop out of existence, * without playing the closing animation. * diff --git a/src/main/scala/ocelot/desktop/ui/widget/window/WindowPool.scala b/src/main/scala/ocelot/desktop/ui/widget/window/WindowPool.scala index 662d13d..706ab36 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/window/WindowPool.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/window/WindowPool.scala @@ -1,7 +1,6 @@ package ocelot.desktop.ui.widget.window import ocelot.desktop.geometry.Vector2D -import ocelot.desktop.ui.event.handlers.MouseHandler import ocelot.desktop.ui.layout.Layout import ocelot.desktop.ui.widget.Widget @@ -82,6 +81,10 @@ class WindowPool extends Widget { windows.zipWithIndex.foreach { case (window, index) => window.poolIndex = index } } + def refreshWindows(): Unit = { + windows.foreach(_.refresh()) + } + def movePinnedWindows(delta: Vector2D): Unit = { windows.filter(_.isPinned).foreach(_.position += delta) } diff --git a/src/main/scala/ocelot/desktop/util/SettingsData.scala b/src/main/scala/ocelot/desktop/util/SettingsData.scala index f7b952b..2b74c37 100644 --- a/src/main/scala/ocelot/desktop/util/SettingsData.scala +++ b/src/main/scala/ocelot/desktop/util/SettingsData.scala @@ -39,7 +39,7 @@ class SettingsData { var recentWorkspace: Option[String] = None var pinNewWindows: Boolean = true - var unfocusedWindowTransparency: Double = 0.5 + var unfocusedWindowTransparency: Float = 0.5f var saveOnExit: Boolean = true var autosave: Boolean = true var autosavePeriod: Int = 300 From 18fc7b46ac97749a79df71e3752362279a0f6271 Mon Sep 17 00:00:00 2001 From: UnicornFreedom Date: Thu, 31 Jul 2025 07:35:40 +0200 Subject: [PATCH 21/92] Refactor window refresh method to be less hacky --- .../ocelot/desktop/ui/widget/window/BasicWindow.scala | 7 +++++++ .../scala/ocelot/desktop/ui/widget/window/Window.scala | 7 +++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala b/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala index 19c7299..51bc522 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala @@ -69,4 +69,11 @@ trait BasicWindow extends Window { if (alpha.value < 1f) g.endGroupAlpha(alpha.value) } + + override def refresh(): Unit = { + // currently is only used to update unfocused transparency values (could be extended in the future) + if (!isFocused) { + alpha.goto(Settings.get.unfocusedWindowTransparency) + } + } } diff --git a/src/main/scala/ocelot/desktop/ui/widget/window/Window.scala b/src/main/scala/ocelot/desktop/ui/widget/window/Window.scala index fe1e963..9887fe8 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/window/Window.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/window/Window.scala @@ -174,10 +174,9 @@ trait Window extends Widget with Persistable with MouseHandler { } } - def refresh(): Unit = { - // currently is only used to update unfocused transparency values (could be extended in the future) - if (!isFocused) onUnfocused() - } + /** Updates the window state / render, by reading and applying fresh setting values. + */ + def refresh(): Unit = {} /** Disposes of the window immediately. This will make it dramatically pop out of existence, * without playing the closing animation. From 00be88f571b3bb59a81236e9dbdc9774b7f5fcc3 Mon Sep 17 00:00:00 2001 From: UnicornFreedom Date: Fri, 1 Aug 2025 13:27:41 +0200 Subject: [PATCH 22/92] Make the "hide when unfocused" feature more explicit --- src/main/scala/ocelot/desktop/Settings.scala | 2 ++ .../desktop/ui/widget/settings/UISettingsTab.scala | 3 ++- .../desktop/ui/widget/window/BasicWindow.scala | 13 +++++++++---- .../scala/ocelot/desktop/util/SettingsData.scala | 1 + 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/scala/ocelot/desktop/Settings.scala b/src/main/scala/ocelot/desktop/Settings.scala index 0df4c4e..931a5aa 100644 --- a/src/main/scala/ocelot/desktop/Settings.scala +++ b/src/main/scala/ocelot/desktop/Settings.scala @@ -47,6 +47,7 @@ class Settings(val config: Config) extends SettingsData { recentWorkspace = config.getOptionalString("ocelot.workspace.recent") pinNewWindows = config.getBooleanOrElse("ocelot.workspace.pinNewWindows", default = true) unfocusedWindowTransparency = config.getDoubleOrElse("ocelot.workspace.unfocusedWindowTransparency", 0.5).toFloat + unfocusedWindowHide = config.getBooleanOrElse("ocelot.workspace.unfocusedWindowHide", default = false) saveOnExit = config.getBooleanOrElse("ocelot.workspace.saveOnExit", default = true) autosave = config.getBooleanOrElse("ocelot.workspace.autosave", default = true) autosavePeriod = config.getIntOrElse("ocelot.workspace.autosavePeriod", default = 300) @@ -172,6 +173,7 @@ object Settings extends Logging { .withValue("ocelot.workspace.recent", settings.recentWorkspace) .withValuePreserveOrigin("ocelot.workspace.pinNewWindows", settings.pinNewWindows) .withValuePreserveOrigin("ocelot.workspace.unfocusedWindowTransparency", settings.unfocusedWindowTransparency) + .withValuePreserveOrigin("ocelot.workspace.unfocusedWindowHide", settings.unfocusedWindowHide) .withValuePreserveOrigin("ocelot.workspace.saveOnExit", settings.saveOnExit) .withValuePreserveOrigin("ocelot.workspace.autosave", settings.autosave) .withValuePreserveOrigin("ocelot.workspace.autosavePeriod", settings.autosavePeriod) diff --git a/src/main/scala/ocelot/desktop/ui/widget/settings/UISettingsTab.scala b/src/main/scala/ocelot/desktop/ui/widget/settings/UISettingsTab.scala index 83b7925..e8ca9ee 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/settings/UISettingsTab.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/settings/UISettingsTab.scala @@ -130,10 +130,11 @@ class UISettingsTab extends SettingsTab { new Slider(Settings.get.unfocusedWindowTransparency, "Inactive window") { override def minimumSize: Size2D = Size2D(512, 24) - override def formatText: String = if (value == 0) s"$text: hide" else f"$text: ${value * 100}%.0f%% opacity" + override def formatText: String = if (value < 0.001f) s"$text: hide" else f"$text: ${value * 100}%.0f%% opacity" override def onValueFinal(value: Float): Unit = { Settings.get.unfocusedWindowTransparency = value + Settings.get.unfocusedWindowHide = value < 0.001f applySettings() } }, diff --git a/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala b/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala index 51bc522..24b7565 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala @@ -28,7 +28,8 @@ trait BasicWindow extends Window { override protected def onUnfocused(): Unit = { super.onUnfocused() - alpha.goto(Settings.get.unfocusedWindowTransparency) + if (Settings.get.unfocusedWindowHide) close() + else alpha.goto(Settings.get.unfocusedWindowTransparency) } override def save(nbt: NBTTagCompound): Unit = { @@ -46,9 +47,9 @@ trait BasicWindow extends Window { alpha.update() - if (alpha.value < 0.001) { + if (state == Window.State.Closing && alpha.value < 0.001) { state = Window.State.Closed - } else if (alpha.value > 0.999) { + } else if (state == Window.State.Opening && alpha.value > 0.999) { state = Window.State.Open } } @@ -73,7 +74,11 @@ trait BasicWindow extends Window { override def refresh(): Unit = { // currently is only used to update unfocused transparency values (could be extended in the future) if (!isFocused) { - alpha.goto(Settings.get.unfocusedWindowTransparency) + if (Settings.get.unfocusedWindowHide && (isOpen || isOpening)) { + this.close() + } else { + alpha.goto(Settings.get.unfocusedWindowTransparency) + } } } } diff --git a/src/main/scala/ocelot/desktop/util/SettingsData.scala b/src/main/scala/ocelot/desktop/util/SettingsData.scala index 2b74c37..dae90ca 100644 --- a/src/main/scala/ocelot/desktop/util/SettingsData.scala +++ b/src/main/scala/ocelot/desktop/util/SettingsData.scala @@ -40,6 +40,7 @@ class SettingsData { var pinNewWindows: Boolean = true var unfocusedWindowTransparency: Float = 0.5f + var unfocusedWindowHide: Boolean = false var saveOnExit: Boolean = true var autosave: Boolean = true var autosavePeriod: Int = 300 From a1cd8cab00aa6b7f7cf044b485472d782cf64080 Mon Sep 17 00:00:00 2001 From: UnicornFreedom Date: Fri, 1 Aug 2025 13:40:03 +0200 Subject: [PATCH 23/92] The terrible crime of a bracketless `if` was averted --- .../ocelot/desktop/ui/widget/window/BasicWindow.scala | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala b/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala index 24b7565..f4de9b9 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/window/BasicWindow.scala @@ -28,8 +28,11 @@ trait BasicWindow extends Window { override protected def onUnfocused(): Unit = { super.onUnfocused() - if (Settings.get.unfocusedWindowHide) close() - else alpha.goto(Settings.get.unfocusedWindowTransparency) + if (Settings.get.unfocusedWindowHide) { + close() + } else { + alpha.goto(Settings.get.unfocusedWindowTransparency) + } } override def save(nbt: NBTTagCompound): Unit = { From 424c5fc202d96ac12d00a751253cac21e7a92172 Mon Sep 17 00:00:00 2001 From: UnicornFreedom Date: Fri, 1 Aug 2025 17:19:03 +0200 Subject: [PATCH 24/92] Add a tooltip displaying connected Hub sides --- sprites/icons/SideAny.png | Bin 0 -> 161 bytes sprites/icons/SideDown.png | Bin 0 -> 158 bytes sprites/icons/SideEast.png | Bin 0 -> 161 bytes sprites/icons/SideNone.png | Bin 0 -> 178 bytes sprites/icons/SideNorth.png | Bin 0 -> 154 bytes sprites/icons/SideSouth.png | Bin 0 -> 150 bytes sprites/icons/SideUndefined.png | Bin 0 -> 160 bytes sprites/icons/SideUp.png | Bin 0 -> 154 bytes sprites/icons/SideWest.png | Bin 0 -> 160 bytes .../images/spritesheet/spritesheet.png | Bin 151087 -> 151907 bytes .../images/spritesheet/spritesheet.txt | 9 +++ .../ocelot/desktop/graphics/IconSource.scala | 13 +++++ .../ocelot/desktop/node/HubTooltipNode.scala | 37 ++++++++++++ src/main/scala/ocelot/desktop/node/Node.scala | 54 ++++++++++++++++-- .../scala/ocelot/desktop/node/NodePort.scala | 6 ++ .../node/nodes/MicrocontrollerNode.scala | 9 ++- .../ocelot/desktop/node/nodes/RackNode.scala | 8 ++- .../ocelot/desktop/node/nodes/RelayNode.scala | 7 ++- .../ui/widget/tooltip/ItemTooltip.scala | 16 +++++- 19 files changed, 144 insertions(+), 15 deletions(-) create mode 100644 sprites/icons/SideAny.png create mode 100644 sprites/icons/SideDown.png create mode 100644 sprites/icons/SideEast.png create mode 100644 sprites/icons/SideNone.png create mode 100644 sprites/icons/SideNorth.png create mode 100644 sprites/icons/SideSouth.png create mode 100644 sprites/icons/SideUndefined.png create mode 100644 sprites/icons/SideUp.png create mode 100644 sprites/icons/SideWest.png create mode 100644 src/main/scala/ocelot/desktop/node/HubTooltipNode.scala diff --git a/sprites/icons/SideAny.png b/sprites/icons/SideAny.png new file mode 100644 index 0000000000000000000000000000000000000000..72e1ba56f298939a717c5f550eb7f9ac9606aefc GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhoCO|{#S9F3${@^GvDCf{C>ZSN z;uszopr E07M8fw*UYD literal 0 HcmV?d00001 diff --git a/sprites/icons/SideDown.png b/sprites/icons/SideDown.png new file mode 100644 index 0000000000000000000000000000000000000000..727cdb671652cfa7e74c5e05881b3e88315f3f37 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhoCO|{#S9F3${@^GvDCf{C>Y@B z;usZSN z;us=bwlK>`$^25fj8~@yK0Gi9->FVdQ&MBb@01eY8ZvX%Q literal 0 HcmV?d00001 diff --git a/sprites/icons/SideSouth.png b/sprites/icons/SideSouth.png new file mode 100644 index 0000000000000000000000000000000000000000..b27381cf739e72abaaf5afee6e6756b53fa50530 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhoCO|{#S9F3${@^GvDCf{DCpto z;us}MV&^H%NjE#JDy`?(7mYr$G35tInYc7Pgg&ebxsLQ0N%4G0{{R3 literal 0 HcmV?d00001 diff --git a/sprites/icons/SideUndefined.png b/sprites/icons/SideUndefined.png new file mode 100644 index 0000000000000000000000000000000000000000..e52176e063661379e3ddab9ea375a328f5727918 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhoCO|{#S9F3${@^GvDCf{C>Z4F z;use~PPF;y1?U!D`vj0Xy*P3&C zJNL<{8r4qx86oF)vVxgw$&*WdVv&_E{Pzi_y1RL^Te3Mn&&>N82Q;0*)78&qol`;+ E0LV5p=>Px# literal 0 HcmV?d00001 diff --git a/sprites/icons/SideUp.png b/sprites/icons/SideUp.png new file mode 100644 index 0000000000000000000000000000000000000000..9cfa14880d0b236ca39c2ee5e42521c8554fba2f GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhoCO|{#S9F3${@^GvDCf{DCpzq z;uszopr0Klv&tN;K2 literal 0 HcmV?d00001 diff --git a/sprites/icons/SideWest.png b/sprites/icons/SideWest.png new file mode 100644 index 0000000000000000000000000000000000000000..707359b7f2a31ce757170d0d42a87ff0d20f95d9 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhoCO|{#S9F3${@^GvDCf{C>Z4F z;us*D|YF}VpHJlkwiZ>8N*c*Fgy$}HwUhIm$!S!}_inF}6n3|(D$ zx~OU8E=P9P9=&~M1Q$o&H%{*@Nc$fiDJvcjcKomWJTDW@)KyaaK+_pKUHx3vIVCg! E09>y#0ssI2 literal 0 HcmV?d00001 diff --git a/src/main/resources/ocelot/desktop/images/spritesheet/spritesheet.png b/src/main/resources/ocelot/desktop/images/spritesheet/spritesheet.png index b045de3c0f991f99c57dc216ece235d9109619aa..caf6854f11e10f87ee153c44d170f0a50983f47f 100644 GIT binary patch delta 60103 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

    TWhhpqhyFlCf?S#pT4%lmPN9+n`UQmJLE?U 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