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

View File

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