2019-08-13 23:54:29 +02:00
|
|
|
using System;
|
|
|
|
using Microsoft.Xna.Framework;
|
|
|
|
using MLEM.Extensions;
|
|
|
|
using MLEM.Font;
|
|
|
|
using MLEM.Ui.Style;
|
|
|
|
|
|
|
|
namespace MLEM.Ui.Elements {
|
|
|
|
public class Tooltip : Paragraph {
|
|
|
|
|
|
|
|
public Vector2 MouseOffset = new Vector2(2, 3);
|
|
|
|
|
2019-08-24 20:45:40 +02:00
|
|
|
public Tooltip(float width, string text, Element elementToHover = null) :
|
2019-08-24 00:07:54 +02:00
|
|
|
base(Anchor.TopLeft, width, text) {
|
2019-08-15 14:59:15 +02:00
|
|
|
this.AutoAdjustWidth = true;
|
2019-08-13 23:54:29 +02:00
|
|
|
this.Padding = new Point(2);
|
2019-08-28 18:27:17 +02:00
|
|
|
this.CanBeSelected = false;
|
2019-08-24 20:45:40 +02:00
|
|
|
|
|
|
|
if (elementToHover != null) {
|
2019-08-28 18:27:17 +02:00
|
|
|
elementToHover.OnMouseEnter += element => element.System.Add(element.GetType().Name + "Tooltip", this).CanSelectContent = false;
|
2019-08-24 20:45:40 +02:00
|
|
|
elementToHover.OnMouseExit += element => element.System.Remove(element.GetType().Name + "Tooltip");
|
|
|
|
}
|
2019-08-13 23:54:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public override void Update(GameTime time) {
|
|
|
|
base.Update(time);
|
2019-08-15 14:59:15 +02:00
|
|
|
|
|
|
|
var viewport = this.System.Viewport.Size;
|
2019-08-30 18:15:50 +02:00
|
|
|
var offset = this.Input.MousePosition.ToVector2() / this.Scale + this.MouseOffset;
|
2019-08-15 14:59:15 +02:00
|
|
|
if (offset.X < 0)
|
|
|
|
offset.X = 0;
|
|
|
|
if (offset.Y < 0)
|
|
|
|
offset.Y = 0;
|
|
|
|
if (offset.X * this.Scale + this.Area.Width >= viewport.X)
|
|
|
|
offset.X = (viewport.X - this.Area.Width) / this.Scale;
|
|
|
|
if (offset.Y * this.Scale + this.Area.Height >= viewport.Y)
|
|
|
|
offset.Y = (viewport.Y - this.Area.Height) / this.Scale;
|
|
|
|
this.PositionOffset = offset;
|
2019-08-13 23:54:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public override void ForceUpdateArea() {
|
|
|
|
if (this.Parent != null)
|
|
|
|
throw new NotSupportedException($"A tooltip shouldn't be the child of another element ({this.Parent})");
|
|
|
|
base.ForceUpdateArea();
|
|
|
|
}
|
|
|
|
|
|
|
|
protected override void InitStyle(UiStyle style) {
|
|
|
|
base.InitStyle(style);
|
|
|
|
this.Background = style.TooltipBackground;
|
|
|
|
this.BackgroundColor = style.TooltipBackgroundColor;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|