mirror of
https://gitlab.com/cc-ru/ocelot/ocelot-desktop.git
synced 2026-01-06 19:22:38 +01:00
Improve context menu
This commit is contained in:
parent
e41b690732
commit
dbc089e51a
@ -37,4 +37,5 @@ StatusBar = #181818
|
||||
StatusBarBorder = #222222
|
||||
StatusBarForeground = #777777
|
||||
StatusBarIcon = #bbbbbb
|
||||
StatusBarKey = #bbbbbb
|
||||
StatusBarKey = #bbbbbb
|
||||
StatusBarTPS = #77aa77
|
||||
@ -4,7 +4,7 @@ import java.io.{PrintWriter, StringWriter}
|
||||
|
||||
import ocelot.desktop.ui.UiHandler
|
||||
import ocelot.desktop.ui.widget.RootWidget
|
||||
import ocelot.desktop.util.{Audio, Logging, ResourceManager, Ticker}
|
||||
import ocelot.desktop.util.{Audio, FPSCalculator, Logging, ResourceManager, Ticker}
|
||||
import org.apache.logging.log4j.LogManager
|
||||
import totoro.ocelot.brain.Ocelot
|
||||
import totoro.ocelot.brain.event._
|
||||
@ -15,6 +15,7 @@ import scala.io.Source
|
||||
|
||||
object OcelotDesktop extends Logging {
|
||||
var root: RootWidget = _
|
||||
val tpsCounter = new FPSCalculator
|
||||
|
||||
def mainInner(): Unit = {
|
||||
logger.info("Starting up Ocelot Desktop")
|
||||
@ -31,6 +32,7 @@ object OcelotDesktop extends Logging {
|
||||
|
||||
new Thread(() => {
|
||||
while (true) {
|
||||
tpsCounter.tick()
|
||||
workspace.update()
|
||||
Ticker.waitNext()
|
||||
}
|
||||
|
||||
@ -158,9 +158,9 @@ class ScrollView(val inner: Widget) extends Widget with Logging with HoverHandle
|
||||
Rect2D(x + 2, y, hThumbCoeff * size.width, 12)
|
||||
}
|
||||
|
||||
private def vThumbVisible: Boolean = inner.size.height > size.height
|
||||
protected def vThumbVisible: Boolean = inner.size.height > size.height
|
||||
|
||||
private def hThumbVisible: Boolean = inner.size.width > size.width
|
||||
protected def hThumbVisible: Boolean = inner.size.width > size.width
|
||||
|
||||
private def vThumbCoeff: Float = (size.height - 4) / inner.size.height
|
||||
|
||||
|
||||
@ -389,7 +389,7 @@ class WorkspaceView extends Widget with DragHandler with ClickHandler with Hover
|
||||
nodes.foreach(_.update())
|
||||
|
||||
if (isHovered || nodes.exists(_.isHovered)) {
|
||||
root.get.statusBar.addKeyEntry("CTRL", "Align to grid")
|
||||
root.get.statusBar.addKeyEntry("CTRL", "Show grid")
|
||||
}
|
||||
|
||||
if (isHovered && newConnection.isEmpty) {
|
||||
|
||||
@ -7,7 +7,7 @@ import ocelot.desktop.graphics.Graphics
|
||||
import ocelot.desktop.ui.widget.Widget
|
||||
import ocelot.desktop.util.DrawUtils
|
||||
|
||||
class KeyEntry(key: String, text: String) extends Widget {
|
||||
class KeyEntry(val key: String, val text: String) extends Widget {
|
||||
override def minimumSize: Size2D = Size2D(key.length * 8 + 24 + text.length * 8, 16)
|
||||
override def maximumSize: Size2D = minimumSize
|
||||
|
||||
@ -15,7 +15,7 @@ class KeyEntry(key: String, text: String) extends Widget {
|
||||
g.background = Color.Transparent
|
||||
g.foreground = ColorScheme("StatusBarKey")
|
||||
g.setSmallFont()
|
||||
DrawUtils.borderedText(g, position.x + 8, position.y + 4, key)
|
||||
DrawUtils.borderedText(g, position.x + 8, position.y + 5, key)
|
||||
|
||||
g.foreground = ColorScheme("StatusBarForeground")
|
||||
g.setNormalFont()
|
||||
|
||||
@ -7,7 +7,7 @@ import ocelot.desktop.graphics.Graphics
|
||||
import ocelot.desktop.ui.widget.Widget
|
||||
import ocelot.desktop.util.Spritesheet
|
||||
|
||||
class MouseEntry(icon: String, text: String) extends Widget {
|
||||
class MouseEntry(val icon: String, val text: String) extends Widget {
|
||||
private val iconSize = Spritesheet.spriteSize(icon)
|
||||
override def minimumSize: Size2D = Size2D(iconSize.width + 24 + text.length * 8, 16)
|
||||
override def maximumSize: Size2D = minimumSize
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
package ocelot.desktop.ui.widget.statusbar
|
||||
|
||||
import ocelot.desktop.ColorScheme
|
||||
import ocelot.desktop.geometry.Size2D
|
||||
import ocelot.desktop.{ColorScheme, OcelotDesktop}
|
||||
import ocelot.desktop.color.Color
|
||||
import ocelot.desktop.geometry.{Padding2D, Size2D}
|
||||
import ocelot.desktop.graphics.Graphics
|
||||
import ocelot.desktop.ui.layout.{AlignItems, LinearLayout}
|
||||
import ocelot.desktop.ui.widget.Widget
|
||||
import ocelot.desktop.ui.widget.{Label, PaddingBox, ScrollView, Widget}
|
||||
|
||||
class StatusBar extends Widget {
|
||||
override protected val layout = new LinearLayout(this, alignItems = AlignItems.Center)
|
||||
@ -12,18 +13,39 @@ class StatusBar extends Widget {
|
||||
override def maximumSize: Size2D = Size2D(Float.PositiveInfinity, 18)
|
||||
override def receiveMouseEvents = true
|
||||
|
||||
private val mouseEntries = new Widget
|
||||
private val keyEntries = new Widget
|
||||
|
||||
children :+= new ScrollView(new Widget {
|
||||
children :+= mouseEntries
|
||||
children :+= keyEntries
|
||||
}) {
|
||||
override def minimumSize: Size2D = inner.minimumSize.copy(width = 5f)
|
||||
override def maximumSize: Size2D = inner.minimumSize.copy(width = Float.PositiveInfinity)
|
||||
override def hThumbVisible: Boolean = false
|
||||
}
|
||||
|
||||
children :+= new PaddingBox(new Label {
|
||||
override def maximumSize: Size2D = minimumSize
|
||||
override def color: Color = ColorScheme("StatusBarTPS")
|
||||
override def text: String = f"TPS: ${OcelotDesktop.tpsCounter.fps}%02.1f"
|
||||
}, Padding2D(left = 8, right = 8))
|
||||
|
||||
def addMouseEntry(icon: String, text: String): Unit = {
|
||||
children :+= new MouseEntry(icon, text)
|
||||
if (!mouseEntries.children.map(_.asInstanceOf[MouseEntry]).exists(_.icon == icon))
|
||||
mouseEntries.children :+= new MouseEntry(icon, text)
|
||||
}
|
||||
|
||||
def addKeyEntry(key: String, text: String): Unit = {
|
||||
children :+= new KeyEntry(key, text)
|
||||
if (!keyEntries.children.map(_.asInstanceOf[KeyEntry]).exists(_.key == key))
|
||||
keyEntries.children :+= new KeyEntry(key, text)
|
||||
}
|
||||
|
||||
override def draw(g: Graphics): Unit = {
|
||||
g.rect(bounds, ColorScheme("StatusBar"))
|
||||
g.line(position, position + Size2D(width, 0), 1, ColorScheme("StatusBarBorder"))
|
||||
drawChildren(g)
|
||||
children = Array()
|
||||
mouseEntries.children = Array()
|
||||
keyEntries.children = Array()
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user