Improve context menu

This commit is contained in:
LeshaInc 2020-06-11 15:19:51 +03:00
parent e41b690732
commit dbc089e51a
No known key found for this signature in database
GPG Key ID: B4855290FC36DE72
7 changed files with 39 additions and 14 deletions

View File

@ -37,4 +37,5 @@ StatusBar = #181818
StatusBarBorder = #222222
StatusBarForeground = #777777
StatusBarIcon = #bbbbbb
StatusBarKey = #bbbbbb
StatusBarKey = #bbbbbb
StatusBarTPS = #77aa77

View File

@ -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()
}

View File

@ -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

View File

@ -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) {

View File

@ -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()

View File

@ -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

View File

@ -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()
}
}