mirror of
https://gitlab.com/2009scape/rt4-client.git
synced 2025-12-16 19:40:18 -07:00
Fix tooltip labels
This commit is contained in:
parent
5bb81c7bd3
commit
5240963743
7 changed files with 135 additions and 156 deletions
|
|
@ -435,50 +435,50 @@ class SettingsPanel(private val plugin: Plugin) : JPanel() {
|
|||
companion object {
|
||||
var customToolTipWindow: JWindow? = null
|
||||
|
||||
private var customToolTipLabel: JLabel? = null
|
||||
|
||||
fun showCustomToolTip(text: String, component: JComponent) {
|
||||
val tooltipFont = ViewConstants.FONT_RUNESCAPE_SMALL_PLAIN_16
|
||||
val maxWidth = 150
|
||||
|
||||
// Create a dummy JLabel to get FontMetrics for the font used in the tooltip
|
||||
val dummyLabel = JLabel()
|
||||
dummyLabel.font = tooltipFont
|
||||
val fontMetrics = dummyLabel.getFontMetrics(tooltipFont)
|
||||
val lineHeight = fontMetrics.height
|
||||
|
||||
// Calculate the approximate width of the text
|
||||
val textWidth = fontMetrics.stringWidth(text)
|
||||
|
||||
// Calculate the number of lines required based on the text width and max tooltip width
|
||||
val numberOfLines = Math.ceil(textWidth.toDouble() / maxWidth).toInt()
|
||||
|
||||
// Calculate the required height of the tooltip
|
||||
val requiredHeight = numberOfLines * lineHeight + 6 // Adding some padding
|
||||
|
||||
if (customToolTipWindow == null) {
|
||||
customToolTipWindow = JWindow().apply {
|
||||
val bgColor = Helpers.colorToHex(KondoKit.plugin.Companion.TOOLTIP_BACKGROUND)
|
||||
val textColor = Helpers.colorToHex(KondoKit.plugin.Companion.secondaryColor)
|
||||
contentPane = JLabel("<html><div style='color: $textColor; background-color: $bgColor; padding: 3px; word-break: break-all;'>$text</div></html>").apply {
|
||||
border = BorderFactory.createLineBorder(Color.BLACK)
|
||||
isOpaque = true
|
||||
background = KondoKit.plugin.Companion.TOOLTIP_BACKGROUND
|
||||
foreground = Color.WHITE
|
||||
font = tooltipFont
|
||||
maximumSize = Dimension(maxWidth, Int.MAX_VALUE)
|
||||
preferredSize = Dimension(maxWidth, requiredHeight)
|
||||
}
|
||||
pack()
|
||||
val bgColor = Helpers.colorToHex(KondoKit.plugin.Companion.TOOLTIP_BACKGROUND)
|
||||
val textColor = Helpers.colorToHex(KondoKit.plugin.Companion.secondaryColor)
|
||||
// Constrain width via HTML so Swing's renderer wraps the text naturally.
|
||||
val safeText = text
|
||||
.replace("&", "&")
|
||||
.replace("<", "<")
|
||||
.replace(">", ">")
|
||||
val html = """
|
||||
<html>
|
||||
<body style="margin:0; padding:6px; width:${maxWidth}px; color:$textColor; background-color:$bgColor; word-wrap:break-word;">
|
||||
$safeText
|
||||
</body>
|
||||
</html>
|
||||
""".trimIndent()
|
||||
|
||||
val (window, label) = if (customToolTipWindow == null || customToolTipLabel == null) {
|
||||
val lbl = JLabel().apply {
|
||||
border = BorderFactory.createLineBorder(Color.BLACK)
|
||||
isOpaque = true
|
||||
background = KondoKit.plugin.Companion.TOOLTIP_BACKGROUND
|
||||
foreground = Color.WHITE
|
||||
font = tooltipFont
|
||||
horizontalAlignment = SwingConstants.LEFT
|
||||
verticalAlignment = SwingConstants.TOP
|
||||
}
|
||||
val win = JWindow().apply { contentPane.add(lbl) }
|
||||
customToolTipWindow = win
|
||||
customToolTipLabel = lbl
|
||||
win to lbl
|
||||
} else {
|
||||
// Update the tooltip text
|
||||
val label = customToolTipWindow!!.contentPane as JLabel
|
||||
val bgColor = Helpers.colorToHex(KondoKit.plugin.Companion.TOOLTIP_BACKGROUND)
|
||||
val textColor = Helpers.colorToHex(KondoKit.plugin.Companion.secondaryColor)
|
||||
label.text = "<html><div style='color: $textColor; background-color: $bgColor; padding: 3px; word-break: break-all;'>$text</div></html>"
|
||||
label.preferredSize = Dimension(maxWidth, requiredHeight)
|
||||
customToolTipWindow!!.pack()
|
||||
customToolTipWindow!! to customToolTipLabel!!
|
||||
}
|
||||
|
||||
|
||||
label.text = html
|
||||
label.font = tooltipFont
|
||||
label.preferredSize = null // let HTML + pack decide size from width constraint
|
||||
window.pack()
|
||||
|
||||
// Position the tooltip near the component
|
||||
val locationOnScreen = component.locationOnScreen
|
||||
customToolTipWindow!!.setLocation(locationOnScreen.x, locationOnScreen.y + 15)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue