fix: keyword background color

This commit is contained in:
hstyi
2025-07-25 20:06:19 +08:00
committed by hstyi
parent 15cb06af0f
commit 39e26a6e3d
4 changed files with 77 additions and 31 deletions

View File

@@ -1,6 +1,8 @@
package app.termora.highlight
import app.termora.DialogWrapper
import app.termora.Disposable
import app.termora.Disposer
import app.termora.TerminalFactory
import com.formdev.flatlaf.util.SystemInfo
import java.awt.*
@@ -15,8 +17,9 @@ class ChooseColorTemplateDialog(owner: Window, title: String) : DialogWrapper(ow
var colorIndex = -1
var defaultColor: Color = Color.white
var ok = false
init {
size = Dimension(UIManager.getInt("Dialog.width"), UIManager.getInt("Dialog.height"))
isModal = true
super.setTitle(title)
controlsVisible = false
@@ -30,11 +33,12 @@ class ChooseColorTemplateDialog(owner: Window, title: String) : DialogWrapper(ow
override fun createCenterPanel(): JComponent {
val panel = JPanel(GridLayout(2, 8, 4, 4))
val colorPalette = TerminalFactory.getInstance()
.createTerminal().getTerminalModel().getColorPalette()
val terminal = TerminalFactory.getInstance().createTerminal()
val colorPalette = terminal.getTerminalModel().getColorPalette()
for (i in 1..16) {
val c = JPanel()
c.preferredSize = Dimension(24, 24)
c.minimumSize = c.preferredSize
c.background = Color(colorPalette.getXTerm256Color(i))
c.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) {
@@ -67,6 +71,12 @@ class ChooseColorTemplateDialog(owner: Window, title: String) : DialogWrapper(ow
cPanel.add(panel, BorderLayout.CENTER)
cPanel.add(customBtn, BorderLayout.SOUTH)
cPanel.border = BorderFactory.createEmptyBorder(if (SystemInfo.isLinux) 6 else 0, 12, 12, 12)
Disposer.register(disposable, object : Disposable {
override fun dispose() {
terminal.close()
}
})
return cPanel
}
@@ -74,4 +84,9 @@ class ChooseColorTemplateDialog(owner: Window, title: String) : DialogWrapper(ow
override fun createSouthPanel(): JComponent? {
return null
}
override fun doOKAction() {
ok = true
super.doOKAction()
}
}

View File

@@ -3,8 +3,8 @@ package app.termora.highlight
import java.awt.Color
import javax.swing.JPanel
class ColorPanel : JPanel {
var color: Color = Color.WHITE
class ColorPanel : JPanel() {
var color: Color? = null
set(value) {
background = value
val old = field
@@ -13,7 +13,4 @@ class ColorPanel : JPanel {
}
var colorIndex = -1
constructor(color: Color) : super() {
this.color = color
}
}

View File

@@ -285,29 +285,27 @@ class KeywordHighlightPanel(private val accountOwner: AccountOwner) : JPanel(Bor
dialog.keywordTextField.text = keywordHighlight.keyword
dialog.descriptionTextField.text = keywordHighlight.description
if (keywordHighlight.textColor <= 16) {
if (keywordHighlight.textColor in 0..16) {
if (keywordHighlight.textColor == 0) {
dialog.textColor.color = Color(colorPalette.getColor(TerminalColor.Basic.FOREGROUND))
dialog.textColor.background = Color(colorPalette.getColor(TerminalColor.Basic.FOREGROUND))
dialog.textColor.colorIndex = -1
} else {
dialog.textColor.color = Color(colorPalette.getXTerm256Color(keywordHighlight.textColor))
dialog.textColor.colorIndex = keywordHighlight.textColor
}
dialog.textColor.colorIndex = keywordHighlight.textColor
} else {
dialog.textColor.color = Color(keywordHighlight.textColor)
dialog.textColor.colorIndex = -1
}
if (keywordHighlight.backgroundColor <= 16) {
if (keywordHighlight.backgroundColor in 0..16) {
if (keywordHighlight.backgroundColor == 0) {
dialog.backgroundColor.color = Color(colorPalette.getColor(TerminalColor.Basic.BACKGROUND))
dialog.backgroundColor.background = Color(colorPalette.getColor(TerminalColor.Basic.BACKGROUND))
dialog.backgroundColor.colorIndex = -1
} else {
dialog.backgroundColor.color =
Color(colorPalette.getXTerm256Color(keywordHighlight.backgroundColor))
dialog.backgroundColor.colorIndex = keywordHighlight.backgroundColor
}
dialog.backgroundColor.colorIndex = keywordHighlight.backgroundColor
} else {
dialog.backgroundColor.color = Color(keywordHighlight.backgroundColor)
dialog.backgroundColor.colorIndex = -1
}
dialog.boldCheckBox.isSelected = keywordHighlight.bold

View File

@@ -23,6 +23,7 @@ import java.awt.event.MouseEvent
import java.awt.event.WindowAdapter
import java.awt.event.WindowEvent
import javax.swing.*
import kotlin.math.max
class NewKeywordHighlightDialog(
owner: Window,
@@ -95,7 +96,7 @@ class NewKeywordHighlightDialog(
init()
pack()
size = Dimension(UIManager.getInt("Dialog.width") - 200, height)
size = Dimension(UIManager.getInt("Dialog.width") - 200, max(height, preferredSize.height))
setLocationRelativeTo(null)
}
@@ -121,13 +122,15 @@ class NewKeywordHighlightDialog(
lineThroughCheckBox.addActionListener { repaintKeywordHighlightView() }
textColorRevert.addActionListener {
textColor.color = Color(colorPalette.getColor(TerminalColor.Basic.FOREGROUND))
textColor.colorIndex = 0
textColor.color = null
textColor.background = Color(colorPalette.getColor(TerminalColor.Basic.FOREGROUND))
textColor.colorIndex = -1
repaintKeywordHighlightView()
}
backgroundColorRevert.addActionListener {
backgroundColor.color = Color(colorPalette.getColor(TerminalColor.Basic.BACKGROUND))
backgroundColor.colorIndex = 0
backgroundColor.color = null
backgroundColor.background = Color(colorPalette.getColor(TerminalColor.Basic.BACKGROUND))
backgroundColor.colorIndex = -1
repaintKeywordHighlightView()
}
@@ -145,8 +148,22 @@ class NewKeywordHighlightDialog(
keywordHighlightView.italic = italicCheckBox.isSelected
keywordHighlightView.underline = underlineCheckBox.isSelected
keywordHighlightView.lineThrough = lineThroughCheckBox.isSelected
keywordHighlightView.textColor = textColor.color
keywordHighlightView.backgroundColor = backgroundColor.color
if (textColor.color == null && textColor.colorIndex == -1) {
keywordHighlightView.textColor = Color(colorPalette.getColor(TerminalColor.Basic.FOREGROUND))
} else if (textColor.color != null) {
keywordHighlightView.textColor = textColor.color
} else {
keywordHighlightView.textColor = Color(colorPalette.getXTerm256Color(textColor.colorIndex))
}
if (backgroundColor.color == null && backgroundColor.colorIndex == -1) {
keywordHighlightView.backgroundColor = Color(colorPalette.getColor(TerminalColor.Basic.BACKGROUND))
} else if (backgroundColor.color != null) {
keywordHighlightView.backgroundColor = backgroundColor.color
} else {
keywordHighlightView.backgroundColor = Color(colorPalette.getXTerm256Color(backgroundColor.colorIndex))
}
keywordHighlightView.repaint()
}
@@ -192,7 +209,8 @@ class NewKeywordHighlightDialog(
val owner = this
val arc = UIManager.getInt("Component.arc")
val lineBorder = FlatLineBorder(Insets(1, 1, 1, 1), DynamicColor.BorderColor, 1f, arc)
val colorPanel = ColorPanel(color)
val colorPanel = ColorPanel()
colorPanel.background = color
colorPanel.preferredSize = keywordTextField.preferredSize
colorPanel.border = lineBorder
colorPanel.addMouseListener(object : MouseAdapter() {
@@ -200,10 +218,19 @@ class NewKeywordHighlightDialog(
if (SwingUtilities.isLeftMouseButton(e)) {
val dialog = ChooseColorTemplateDialog(owner, title)
dialog.setLocationRelativeTo(owner)
dialog.defaultColor = colorPanel.color
dialog.defaultColor = colorPanel.color ?: Color.orange
dialog.isVisible = true
colorPanel.color = dialog.color ?: return
colorPanel.colorIndex = dialog.colorIndex
if (dialog.ok.not()) return
colorPanel.colorIndex = -1
colorPanel.color = null
if (dialog.colorIndex in 1..16) {
colorPanel.colorIndex = dialog.colorIndex
colorPanel.background = Color(colorPalette.getXTerm256Color(dialog.colorIndex))
} else {
colorPanel.color = dialog.color
}
repaintKeywordHighlightView()
}
}
})
@@ -218,13 +245,22 @@ class NewKeywordHighlightDialog(
}
val newTextColor = if (textColor.color != null) textColor.color?.toRGB() ?: 0
else if (textColor.colorIndex == -1) 0
else textColor.colorIndex
val newBackgroundColor = if (backgroundColor.color != null) backgroundColor.color?.toRGB() ?: 0
else if (backgroundColor.colorIndex == -1) 0
else backgroundColor.colorIndex
keywordHighlight = KeywordHighlight(
keyword = keywordTextField.text,
description = descriptionTextField.text,
matchCase = matchCaseBtn.isSelected,
regex = regexBtn.isSelected,
textColor = if (textColor.colorIndex != -1) textColor.colorIndex else textColor.color.toRGB(),
backgroundColor = if (backgroundColor.colorIndex != -1) backgroundColor.colorIndex else backgroundColor.color.toRGB(),
textColor = newTextColor,
backgroundColor = newBackgroundColor,
bold = boldCheckBox.isSelected,
italic = italicCheckBox.isSelected,
lineThrough = lineThroughCheckBox.isSelected,