Tooltips should not clip through screen edges

This commit is contained in:
UnicornFreedom 2025-08-20 02:32:25 +02:00
parent e4aca89f92
commit d533e33f2b
No known key found for this signature in database
GPG Key ID: B4ED0DB6B940024F
2 changed files with 11 additions and 4 deletions

View File

@ -10,7 +10,6 @@ import ocelot.desktop.util.Orientation
import ocelot.desktop.util.animation.UnitAnimation import ocelot.desktop.util.animation.UnitAnimation
abstract class Tooltip extends Widget { abstract class Tooltip extends Widget {
protected def tooltipPool: TooltipPool = parent.get.asInstanceOf[TooltipPool]
protected val openCloseAnimation: UnitAnimation = UnitAnimation.easeInOutQuad(0.3f) protected val openCloseAnimation: UnitAnimation = UnitAnimation.easeInOutQuad(0.3f)
val body: Widget = new Widget { val body: Widget = new Widget {

View File

@ -10,7 +10,15 @@ import ocelot.desktop.util.animation.easing.Easing
import scala.collection.mutable.ListBuffer import scala.collection.mutable.ListBuffer
class TooltipPool extends Widget { class TooltipPool extends Widget {
val offset: Vector2D = Vector2D(10, 10) private val Offset = 10
private val ScreenPadding = 10
private def offset(tooltip: Tooltip): Vector2D = {
val mouse = UiHandler.mousePosition
val x = if (mouse.x > width - tooltip.width - Offset - ScreenPadding) -Offset - tooltip.width else Offset
val y = if (mouse.y > height - tooltip.height - Offset - ScreenPadding) -Offset - tooltip.height else Offset
Vector2D(x, y)
}
override protected val layout: Layout = new Layout(this) { override protected val layout: Layout = new Layout(this) {
override def relayout(): Unit = { override def relayout(): Unit = {
@ -18,7 +26,7 @@ class TooltipPool extends Widget {
tooltip.tooltip match { tooltip.tooltip match {
case t: Tooltip => case t: Tooltip =>
if (!(t.isClosing && tooltip.delay == 0)) if (!(t.isClosing && tooltip.delay == 0))
t.rawSetPosition(UiHandler.mousePosition + offset) t.rawSetPosition(UiHandler.mousePosition + offset(t))
case _ => case _ =>
} }
} }
@ -81,7 +89,7 @@ class TooltipPool extends Widget {
dueToClean = true dueToClean = true
} }
tooltip.tooltip.position = tooltip.tooltip.position + tooltip.tooltip.position = tooltip.tooltip.position +
(UiHandler.mousePosition + offset - tooltip.tooltip.position) * (UiHandler.mousePosition + offset(tooltip.tooltip) - tooltip.tooltip.position) *
(if (tooltip.tooltip.isClosing) math.pow(Easing.easeInQuad(tooltip.tooltip.getAlpha), 6).toFloat else 1f) (if (tooltip.tooltip.isClosing) math.pow(Easing.easeInQuad(tooltip.tooltip.getAlpha), 6).toFloat else 1f)
}) })