mirror of
https://gitlab.com/cc-ru/ocelot/ocelot-desktop.git
synced 2025-12-20 02:59:19 +01:00
parent
a042c76b0f
commit
fd6400f39a
@ -4,9 +4,9 @@ import buildinfo.BuildInfo
|
|||||||
import ocelot.desktop.audio.{Audio, SoundBuffers, SoundSource}
|
import ocelot.desktop.audio.{Audio, SoundBuffers, SoundSource}
|
||||||
import ocelot.desktop.geometry.{Rect2D, Size2D, Vector2D}
|
import ocelot.desktop.geometry.{Rect2D, Size2D, Vector2D}
|
||||||
import ocelot.desktop.graphics.Graphics
|
import ocelot.desktop.graphics.Graphics
|
||||||
import ocelot.desktop.ui.event.{Event, MouseEvent}
|
|
||||||
import ocelot.desktop.ui.event.handlers.HoverHandler
|
import ocelot.desktop.ui.event.handlers.HoverHandler
|
||||||
import ocelot.desktop.ui.event.sources.{BrainEvents, KeyEvents, MouseEvents, ScrollEvents}
|
import ocelot.desktop.ui.event.sources.{BrainEvents, KeyEvents, MouseEvents, ScrollEvents}
|
||||||
|
import ocelot.desktop.ui.event.{Event, MouseEvent}
|
||||||
import ocelot.desktop.ui.widget.window.Window
|
import ocelot.desktop.ui.widget.window.Window
|
||||||
import ocelot.desktop.ui.widget.{RootWidget, Widget}
|
import ocelot.desktop.ui.widget.{RootWidget, Widget}
|
||||||
import ocelot.desktop.util._
|
import ocelot.desktop.util._
|
||||||
@ -15,7 +15,6 @@ import org.apache.commons.lang3.SystemUtils
|
|||||||
import org.lwjgl.BufferUtils
|
import org.lwjgl.BufferUtils
|
||||||
import org.lwjgl.input.Mouse
|
import org.lwjgl.input.Mouse
|
||||||
import org.lwjgl.opengl._
|
import org.lwjgl.opengl._
|
||||||
import totoro.ocelot.brain.event.{InventoryEvent, NodeEvent}
|
|
||||||
|
|
||||||
import java.awt.Toolkit
|
import java.awt.Toolkit
|
||||||
import java.awt.datatransfer.{DataFlavor, StringSelection, UnsupportedFlavorException}
|
import java.awt.datatransfer.{DataFlavor, StringSelection, UnsupportedFlavorException}
|
||||||
@ -437,14 +436,37 @@ object UiHandler extends Logging {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private def dispatchBrainEvents(): Unit = {
|
||||||
|
val cutoff = BrainEvents.events.peekLast()
|
||||||
|
|
||||||
|
if (cutoff == null) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// we're effectively taking a snapshot of all events we have received at the point of the call.
|
||||||
|
// new events may still be added to the queue, but we'll defer everything after the cutoff until the next update.
|
||||||
|
val events = LazyList.continually(BrainEvents.events.poll()).takeWhile({
|
||||||
|
var inSnapshot = true
|
||||||
|
|
||||||
|
{ event =>
|
||||||
|
val pass = inSnapshot
|
||||||
|
inSnapshot = !(event eq cutoff)
|
||||||
|
|
||||||
|
pass
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
for (event <- events) {
|
||||||
|
root.workspaceView.dispatchBrainEvent(event)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private def update(): Unit = {
|
private def update(): Unit = {
|
||||||
if (shouldUpdateHierarchy) {
|
if (shouldUpdateHierarchy) {
|
||||||
_updateHierarchy()
|
_updateHierarchy()
|
||||||
}
|
}
|
||||||
|
|
||||||
for (event <- LazyList.continually(BrainEvents.events.poll()).takeWhile(_ != null)) {
|
dispatchBrainEvents()
|
||||||
root.workspaceView.dispatchBrainEvent(event)
|
|
||||||
}
|
|
||||||
|
|
||||||
val mousePos = mousePosition
|
val mousePos = mousePosition
|
||||||
if (mousePos.x < 0 || mousePos.y < 0 || mousePos.x > root.width || mousePos.y > root.height) {
|
if (mousePos.x < 0 || mousePos.y < 0 || mousePos.x > root.width || mousePos.y > root.height) {
|
||||||
|
|||||||
@ -2,10 +2,10 @@ package ocelot.desktop.ui.event.sources
|
|||||||
|
|
||||||
import totoro.ocelot.brain.event.{Event, EventBus}
|
import totoro.ocelot.brain.event.{Event, EventBus}
|
||||||
|
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue
|
import java.util.concurrent.ConcurrentLinkedDeque
|
||||||
|
|
||||||
object BrainEvents {
|
object BrainEvents {
|
||||||
val events = new ConcurrentLinkedQueue[Event]()
|
val events = new ConcurrentLinkedDeque[Event]()
|
||||||
|
|
||||||
private val eventSubscription = EventBus.subscribe { event =>
|
private val eventSubscription = EventBus.subscribe { event =>
|
||||||
events.add(event)
|
events.add(event)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user