diff --git a/src/main/kotlin/dartzee/bean/InteractiveDartboard.kt b/src/main/kotlin/dartzee/bean/InteractiveDartboard.kt index 53572abc7..bc1abee8d 100644 --- a/src/main/kotlin/dartzee/bean/InteractiveDartboard.kt +++ b/src/main/kotlin/dartzee/bean/InteractiveDartboard.kt @@ -1,15 +1,15 @@ package dartzee.bean import dartzee.core.util.getParentWindow -import dartzee.`object`.ColourWrapper import dartzee.`object`.DartboardSegment +import dartzee.theme.IDartboardPainter import dartzee.utils.UPPER_BOUND_OUTSIDE_BOARD_RATIO import dartzee.utils.getColourWrapperFromPrefs import dartzee.utils.getHighlightedColour import java.awt.Point import java.awt.event.MouseEvent -class InteractiveDartboard(colourWrapper: ColourWrapper = getColourWrapperFromPrefs()) : +class InteractiveDartboard(colourWrapper: IDartboardPainter = getColourWrapperFromPrefs()) : PresentationDartboard(colourWrapper, true), IMouseListener { private var hoveredSegment: DartboardSegment? = null private var allowInteraction = true diff --git a/src/main/kotlin/dartzee/bean/PresentationDartboard.kt b/src/main/kotlin/dartzee/bean/PresentationDartboard.kt index 5aa2c08ab..5de2646f3 100644 --- a/src/main/kotlin/dartzee/bean/PresentationDartboard.kt +++ b/src/main/kotlin/dartzee/bean/PresentationDartboard.kt @@ -3,13 +3,13 @@ package dartzee.bean import com.github.weisj.jsvg.view.ViewBox import dartzee.logging.CODE_SLOW_DARTBOARD_RENDER import dartzee.logging.KEY_DURATION -import dartzee.`object`.ColourWrapper import dartzee.`object`.ComputedPoint import dartzee.`object`.DartboardSegment -import dartzee.`object`.GREY_COLOUR_WRAPPER import dartzee.`object`.IDartboard import dartzee.screen.game.SegmentStatuses import dartzee.screen.game.getSegmentStatus +import dartzee.theme.GREY_COLOUR_WRAPPER +import dartzee.theme.IDartboardPainter import dartzee.theme.getBaseFont import dartzee.utils.DurationTimer import dartzee.utils.InjectedThings @@ -34,7 +34,7 @@ import javax.swing.JComponent import kotlin.math.roundToInt open class PresentationDartboard( - private val colourWrapper: ColourWrapper = getColourWrapperFromPrefs(), + private val colourWrapper: IDartboardPainter = getColourWrapperFromPrefs(), private val renderScoreLabels: Boolean = false, private val renderThemeBanner: Boolean = false, ) : JComponent(), IDartboard { diff --git a/src/main/kotlin/dartzee/core/bean/ScrollTableOrdered.kt b/src/main/kotlin/dartzee/core/bean/ScrollTableOrdered.kt index 7b2f326a2..c4a0699c4 100644 --- a/src/main/kotlin/dartzee/core/bean/ScrollTableOrdered.kt +++ b/src/main/kotlin/dartzee/core/bean/ScrollTableOrdered.kt @@ -1,6 +1,7 @@ package dartzee.core.bean import dartzee.core.util.InjectedCore +import dartzee.theme.themedIcon import java.awt.BorderLayout import java.awt.Dimension import java.awt.event.ActionEvent @@ -21,12 +22,12 @@ class ScrollTableOrdered(customButtons: Int = 0) : ScrollTable(), ActionListener init { add(panelOrdering, BorderLayout.EAST) panelOrdering.layout = MigLayout("al center center, wrap, gapy 20") - btnMoveUp.icon = ImageIcon(javaClass.getResource("/buttons/upArrow.png")) + btnMoveUp.icon = themedIcon("/buttons/upArrow.png") btnMoveUp.preferredSize = Dimension(40, 40) btnMoveUp.toolTipText = "Move row up" panelOrdering.add(btnMoveUp, "cell 0 $customButtons") - btnMoveDown.icon = ImageIcon(javaClass.getResource("/buttons/downArrow.png")) + btnMoveDown.icon = themedIcon("/buttons/downArrow.png") btnMoveDown.preferredSize = Dimension(40, 40) btnMoveDown.toolTipText = "Move row down" diff --git a/src/main/kotlin/dartzee/dartzee/dart/DartzeeDartRuleColour.kt b/src/main/kotlin/dartzee/dartzee/dart/DartzeeDartRuleColour.kt index 27d763057..4536bfb40 100644 --- a/src/main/kotlin/dartzee/dartzee/dart/DartzeeDartRuleColour.kt +++ b/src/main/kotlin/dartzee/dartzee/dart/DartzeeDartRuleColour.kt @@ -1,7 +1,7 @@ package dartzee.dartzee.dart -import dartzee.`object`.DEFAULT_COLOUR_WRAPPER import dartzee.`object`.DartboardSegment +import dartzee.theme.DEFAULT_COLOUR_WRAPPER import dartzee.utils.DartsColour import java.awt.Color import java.awt.FlowLayout diff --git a/src/main/kotlin/dartzee/screen/DartsApp.kt b/src/main/kotlin/dartzee/screen/DartsApp.kt index c459929ef..d548d9bee 100644 --- a/src/main/kotlin/dartzee/screen/DartsApp.kt +++ b/src/main/kotlin/dartzee/screen/DartsApp.kt @@ -111,7 +111,7 @@ class DartsApp(commandBar: CheatBar) : AbstractDevScreen(commandBar), WindowList fun switchScreen(scrn: EmbeddedScreen, reInit: Boolean = true) { try { if (reInit) { - scrn.initialise() + scrn.init() } } catch (t: Throwable) { logger.error(CODE_SCREEN_LOAD_ERROR, "Failed to load screen ${scrn.getScreenName()}", t) diff --git a/src/main/kotlin/dartzee/screen/EmbeddedScreen.kt b/src/main/kotlin/dartzee/screen/EmbeddedScreen.kt index 058b252ab..feb416ca6 100644 --- a/src/main/kotlin/dartzee/screen/EmbeddedScreen.kt +++ b/src/main/kotlin/dartzee/screen/EmbeddedScreen.kt @@ -1,7 +1,9 @@ package dartzee.screen import dartzee.logging.CODE_SWING_ERROR +import dartzee.theme.applyButtonOverrides import dartzee.theme.getBaseFont +import dartzee.theme.getMenuFont import dartzee.theme.themedIcon import dartzee.utils.InjectedThings.logger import java.awt.BorderLayout @@ -44,12 +46,13 @@ abstract class EmbeddedScreen : JPanel(), ActionListener { btnBack.name = "Back" val baseFont = getBaseFont() + val size = minOf(20f, getMenuFont().size2D) iconNext.icon = themedIcon("/buttons/rightArrow.png") btnBack.icon = themedIcon("/buttons/leftArrow.png") - lblNext.font = baseFont.deriveFont(Font.PLAIN, 20f) - btnBack.font = baseFont.deriveFont(Font.PLAIN, 20f) + lblNext.font = baseFont.deriveFont(Font.PLAIN, size) + btnBack.font = baseFont.deriveFont(Font.PLAIN, size) btnBack.addActionListener(this) btnNext.addActionListener(this) @@ -59,11 +62,15 @@ abstract class EmbeddedScreen : JPanel(), ActionListener { abstract fun getScreenName(): String - /** Called after the new screen has been switched in etc */ + fun init() { + initialise() + + applyButtonOverrides() + } + open fun postInit() { btnBack.isVisible = showBackButton() btnNext.isVisible = showNextButton() - lblNext.text = getNextText() } diff --git a/src/main/kotlin/dartzee/screen/GameplayDartboard.kt b/src/main/kotlin/dartzee/screen/GameplayDartboard.kt index 59e7edd58..f3191de4d 100644 --- a/src/main/kotlin/dartzee/screen/GameplayDartboard.kt +++ b/src/main/kotlin/dartzee/screen/GameplayDartboard.kt @@ -7,10 +7,10 @@ import dartzee.core.util.getAllChildComponentsForType import dartzee.core.util.getParentWindow import dartzee.core.util.runOnEventThreadBlocking import dartzee.listener.DartboardListener -import dartzee.`object`.ColourWrapper import dartzee.`object`.ComputedPoint import dartzee.screen.game.AbstractDartsGameScreen import dartzee.screen.game.SegmentStatuses +import dartzee.theme.IDartboardPainter import dartzee.theme.makeDartLabel import dartzee.utils.getColourWrapperFromPrefs import dartzee.utils.getDartForSegment @@ -25,7 +25,7 @@ import javax.swing.SwingUtilities const val LAYER_DARTS = 2 const val LAYER_DODGY = 3 -class GameplayDartboard(colourWrapper: ColourWrapper = getColourWrapperFromPrefs()) : +class GameplayDartboard(colourWrapper: IDartboardPainter = getColourWrapperFromPrefs()) : JLayeredPane(), IMouseListener { var latestClip: Clip? = null diff --git a/src/main/kotlin/dartzee/screen/MenuScreen.kt b/src/main/kotlin/dartzee/screen/MenuScreen.kt index d5ea81220..a283cf7dd 100644 --- a/src/main/kotlin/dartzee/screen/MenuScreen.kt +++ b/src/main/kotlin/dartzee/screen/MenuScreen.kt @@ -10,12 +10,11 @@ import dartzee.screen.reporting.ReportingSetupScreen import dartzee.screen.stats.overall.LeaderboardsScreen import dartzee.screen.stats.overall.SimplifiedLeaderboardScreen import dartzee.screen.sync.SyncManagementScreen -import dartzee.theme.getBaseFont +import dartzee.theme.getMenuFont import dartzee.theme.themedIcon import dartzee.utils.DARTS_VERSION_NUMBER import dartzee.utils.InjectedThings import java.awt.Dimension -import java.awt.Font import java.awt.event.ActionEvent import java.awt.event.ComponentAdapter import java.awt.event.ComponentEvent @@ -29,10 +28,10 @@ class MenuScreen : EmbeddedScreen() { private val changeLog = ChangeLog() private val dartboard = PresentationDartboard(renderThemeBanner = true) private val btnNewGame = JButton("New Game") - private val btnManagePlayers = JButton("Manage Players") + private val btnManagePlayers = JButton("Players") private val btnLeaderboards = JButton("Leaderboards") private val btnPreferences = JButton("Preferences") - private val btnDartzeeTemplates = JButton("Dartzee Rules") + private val btnDartzeeTemplates = JButton("Dartzee") private val btnUtilities = JButton("Utilities") private val btnSyncSummary = JButton("Sync Setup") private val btnGameReport = JButton("Game Report") @@ -65,16 +64,13 @@ class MenuScreen : EmbeddedScreen() { btnNewGame.icon = themedIcon("/buttons/newGame.png") btnManagePlayers.icon = themedIcon("/buttons/playerManagement.png") btnUtilities.icon = themedIcon("/buttons/utilities.png") - btnPreferences.icon = ImageIcon(javaClass.getResource("/buttons/preferences.png")) + btnPreferences.icon = themedIcon("/buttons/preferences.png") btnGameReport.icon = themedIcon("/buttons/gameReport.png") btnSyncSummary.icon = ImageIcon(javaClass.getResource("/buttons/sync.png")) btnDartzeeTemplates.icon = ImageIcon(javaClass.getResource("/buttons/dartzeeTemplates.png")) btnLeaderboards.icon = ImageIcon(javaClass.getResource("/buttons/leaderboards.png")) - getAllChildComponentsForType().forEach { button -> - button.font = - getBaseFont().deriveFont(Font.PLAIN, InjectedThings.theme?.menuFontSize ?: 18f) - } + getAllChildComponentsForType().forEach { button -> button.font = getMenuFont() } addComponentListener( object : ComponentAdapter() { diff --git a/src/main/kotlin/dartzee/screen/UtilitiesScreen.kt b/src/main/kotlin/dartzee/screen/UtilitiesScreen.kt index 46ce2fdc3..476793238 100644 --- a/src/main/kotlin/dartzee/screen/UtilitiesScreen.kt +++ b/src/main/kotlin/dartzee/screen/UtilitiesScreen.kt @@ -6,7 +6,7 @@ import dartzee.core.util.runInOtherThread import dartzee.db.sanity.DatabaseSanityCheck import dartzee.logging.CODE_PARTY_MODE import dartzee.`object`.DartsClient -import dartzee.theme.getBaseFont +import dartzee.theme.getMenuFont import dartzee.utils.DARTS_VERSION_NUMBER import dartzee.utils.DartsDatabaseUtil import dartzee.utils.DevUtilities @@ -44,7 +44,7 @@ class UtilitiesScreen : EmbeddedScreen() { panel.add(btnAchievementConversion, "cell 0 11,alignx center") panel.add(btnPartyMode, "cell 0 12,alignx center") - val font = getBaseFont().deriveFont(InjectedThings.theme?.menuFontSize ?: 18f) + val font = getMenuFont() val buttons = panel.getAllChildComponentsForType() for (button in buttons) { button.font = font diff --git a/src/main/kotlin/dartzee/screen/ai/AbstractVisualisationPanel.kt b/src/main/kotlin/dartzee/screen/ai/AbstractVisualisationPanel.kt index d57c530cb..8e046ef96 100644 --- a/src/main/kotlin/dartzee/screen/ai/AbstractVisualisationPanel.kt +++ b/src/main/kotlin/dartzee/screen/ai/AbstractVisualisationPanel.kt @@ -2,7 +2,7 @@ package dartzee.screen.ai import dartzee.ai.DartsAiModel import dartzee.bean.PresentationDartboard -import dartzee.`object`.ColourWrapper +import dartzee.theme.ColourWrapper import dartzee.utils.DartsColour import java.awt.Point import java.awt.image.BufferedImage diff --git a/src/main/kotlin/dartzee/screen/ai/VisualisationPanelDensity.kt b/src/main/kotlin/dartzee/screen/ai/VisualisationPanelDensity.kt index 67e376e3c..67e189a7d 100644 --- a/src/main/kotlin/dartzee/screen/ai/VisualisationPanelDensity.kt +++ b/src/main/kotlin/dartzee/screen/ai/VisualisationPanelDensity.kt @@ -2,7 +2,7 @@ package dartzee.screen.ai import dartzee.ai.DartsAiModel import dartzee.core.bean.paint -import dartzee.`object`.WIREFRAME_COLOUR_WRAPPER +import dartzee.theme.WIREFRAME_COLOUR_WRAPPER import dartzee.utils.ResourceCache import java.awt.Color import java.awt.Font diff --git a/src/main/kotlin/dartzee/screen/ai/VisualisationPanelScatter.kt b/src/main/kotlin/dartzee/screen/ai/VisualisationPanelScatter.kt index 80be9fc5b..7ad145b60 100644 --- a/src/main/kotlin/dartzee/screen/ai/VisualisationPanelScatter.kt +++ b/src/main/kotlin/dartzee/screen/ai/VisualisationPanelScatter.kt @@ -2,7 +2,7 @@ package dartzee.screen.ai import dartzee.ai.DartsAiModel import dartzee.core.bean.paint -import dartzee.`object`.ColourWrapper +import dartzee.theme.ColourWrapper import dartzee.utils.DartsColour import dartzee.utils.ResourceCache import java.awt.Color @@ -60,9 +60,9 @@ class VisualisationPanelScatter : AbstractVisualisationPanel() { oddTreble, evenDouble, oddDouble, + outerDartboardColour = Color.WHITE, + missedBoardColour = Color.WHITE, ) - wrapper.missedBoardColour = Color.WHITE - wrapper.outerDartboardColour = Color.WHITE return wrapper } diff --git a/src/main/kotlin/dartzee/screen/dartzee/DartboardSegmentSelectDialog.kt b/src/main/kotlin/dartzee/screen/dartzee/DartboardSegmentSelectDialog.kt index 0e3e4a1d3..986c9d77d 100644 --- a/src/main/kotlin/dartzee/screen/dartzee/DartboardSegmentSelectDialog.kt +++ b/src/main/kotlin/dartzee/screen/dartzee/DartboardSegmentSelectDialog.kt @@ -4,10 +4,10 @@ import dartzee.bean.IMouseListener import dartzee.bean.PresentationDartboard import dartzee.core.screen.SimpleDialog import dartzee.core.util.setMargins -import dartzee.`object`.DEFAULT_COLOUR_WRAPPER import dartzee.`object`.DartboardSegment -import dartzee.`object`.WIREFRAME_COLOUR_WRAPPER import dartzee.screen.ScreenCache +import dartzee.theme.DEFAULT_COLOUR_WRAPPER +import dartzee.theme.WIREFRAME_COLOUR_WRAPPER import dartzee.utils.DartsColour import dartzee.utils.getAllNonMissSegments import java.awt.BorderLayout diff --git a/src/main/kotlin/dartzee/screen/dartzee/DartzeeRuleVerificationPanel.kt b/src/main/kotlin/dartzee/screen/dartzee/DartzeeRuleVerificationPanel.kt index 4b60b1532..8612bc08f 100644 --- a/src/main/kotlin/dartzee/screen/dartzee/DartzeeRuleVerificationPanel.kt +++ b/src/main/kotlin/dartzee/screen/dartzee/DartzeeRuleVerificationPanel.kt @@ -5,9 +5,9 @@ import dartzee.core.util.setMargins import dartzee.dartzee.DartzeeRuleCalculationResult import dartzee.dartzee.DartzeeRuleDto import dartzee.listener.DartboardListener -import dartzee.`object`.DEFAULT_COLOUR_WRAPPER import dartzee.`object`.Dart import dartzee.screen.GameplayDartboard +import dartzee.theme.DEFAULT_COLOUR_WRAPPER import dartzee.utils.DartsColour import dartzee.utils.InjectedThings.dartzeeCalculator import dartzee.utils.ResourceCache diff --git a/src/main/kotlin/dartzee/screen/dartzee/DartzeeTemplateSetupScreen.kt b/src/main/kotlin/dartzee/screen/dartzee/DartzeeTemplateSetupScreen.kt index 6a8dbfc73..9401c660b 100644 --- a/src/main/kotlin/dartzee/screen/dartzee/DartzeeTemplateSetupScreen.kt +++ b/src/main/kotlin/dartzee/screen/dartzee/DartzeeTemplateSetupScreen.kt @@ -54,7 +54,7 @@ class DartzeeTemplateSetupScreen : EmbeddedScreen(), RowSelectionListener { btnCopy.toolTipText = "Copy Template" btnCopy.preferredSize = Dimension(40, 40) - btnDelete.name = "delete" + btnDelete.name = "deleteTemplate" btnDelete.icon = ImageIcon(javaClass.getResource("/buttons/remove.png")) btnDelete.toolTipText = "Delete Template" btnDelete.preferredSize = Dimension(40, 40) diff --git a/src/main/kotlin/dartzee/screen/game/dartzee/DartzeeRuleCarousel.kt b/src/main/kotlin/dartzee/screen/game/dartzee/DartzeeRuleCarousel.kt index e57ac5edf..d926185f8 100644 --- a/src/main/kotlin/dartzee/screen/game/dartzee/DartzeeRuleCarousel.kt +++ b/src/main/kotlin/dartzee/screen/game/dartzee/DartzeeRuleCarousel.kt @@ -10,6 +10,7 @@ import dartzee.dartzee.DartzeeRuleDto import dartzee.db.DartzeeRoundResultEntity import dartzee.`object`.Dart import dartzee.screen.game.SegmentStatuses +import dartzee.theme.applyThemeOverride import java.awt.BorderLayout import java.awt.Dimension import java.awt.event.ActionEvent @@ -120,6 +121,7 @@ class DartzeeRuleCarousel(private val dtos: List) : incompleteRules.map { rule -> DartzeeRuleTilePending(rule, getRuleNumber(rule)) } ) pendingTiles.forEach { tile -> + tile.applyThemeOverride() tile.addActionListener(this) tile.addMouseListener(this) tile.updateState(dartsThrown) diff --git a/src/main/kotlin/dartzee/screen/game/dartzee/DartzeeRuleTile.kt b/src/main/kotlin/dartzee/screen/game/dartzee/DartzeeRuleTile.kt index 47ee13e8e..3dbb32ed5 100644 --- a/src/main/kotlin/dartzee/screen/game/dartzee/DartzeeRuleTile.kt +++ b/src/main/kotlin/dartzee/screen/game/dartzee/DartzeeRuleTile.kt @@ -14,6 +14,7 @@ abstract class DartzeeRuleTile(val dto: DartzeeRuleDto, val ruleNumber: Int) : init { preferredSize = Dimension(150, 80) text = getButtonText(false) + name = "DARTZEE_TILE_${ruleNumber - 1}" addMouseListener(this) } diff --git a/src/main/kotlin/dartzee/screen/game/dartzee/GamePanelDartzee.kt b/src/main/kotlin/dartzee/screen/game/dartzee/GamePanelDartzee.kt index 8c30268ee..7cbaac874 100644 --- a/src/main/kotlin/dartzee/screen/game/dartzee/GamePanelDartzee.kt +++ b/src/main/kotlin/dartzee/screen/game/dartzee/GamePanelDartzee.kt @@ -12,12 +12,12 @@ import dartzee.db.GameEntity import dartzee.game.GameType import dartzee.game.state.DartzeePlayerState import dartzee.game.state.IWrappedParticipant -import dartzee.`object`.DEFAULT_COLOUR_WRAPPER import dartzee.`object`.Dart import dartzee.screen.game.AbstractDartsGameScreen import dartzee.screen.game.GamePanelFixedLength import dartzee.screen.game.SegmentStatuses import dartzee.screen.game.scorer.DartsScorerDartzee +import dartzee.theme.DEFAULT_COLOUR_WRAPPER import dartzee.utils.factoryHighScoreResult import dartzee.utils.generateDartzeeTemplateFromGame import dartzee.utils.getQuotedIdStr diff --git a/src/main/kotlin/dartzee/screen/player/PlayerAchievementsButton.kt b/src/main/kotlin/dartzee/screen/player/PlayerAchievementsButton.kt index 8790179b9..53a0ccc2f 100644 --- a/src/main/kotlin/dartzee/screen/player/PlayerAchievementsButton.kt +++ b/src/main/kotlin/dartzee/screen/player/PlayerAchievementsButton.kt @@ -17,6 +17,7 @@ class PlayerAchievementsButton( init { icon = ImageIcon(javaClass.getResource("/achievements/trophy.png")) text = defaultText + name = "Achievements" rolloverIcon = ImageIcon(javaClass.getResource("/buttons/achievement.png")) selectedIcon = ImageIcon(javaClass.getResource("/buttons/achievement.png")) diff --git a/src/main/kotlin/dartzee/screen/player/PlayerManagementPanel.kt b/src/main/kotlin/dartzee/screen/player/PlayerManagementPanel.kt index a54b26616..b72d1f341 100644 --- a/src/main/kotlin/dartzee/screen/player/PlayerManagementPanel.kt +++ b/src/main/kotlin/dartzee/screen/player/PlayerManagementPanel.kt @@ -15,7 +15,8 @@ import dartzee.screen.ScreenCache import dartzee.screen.ai.AIConfigurationDialog import dartzee.screen.ai.AISimulationSetupDialog import dartzee.stats.getGameCounts -import dartzee.utils.ResourceCache +import dartzee.theme.applyButtonOverrides +import dartzee.theme.getMenuFont import java.awt.BorderLayout import java.awt.Dimension import java.awt.Font @@ -74,7 +75,7 @@ class PlayerManagementPanel : JPanel(), ActionListener { add(panelNorth, BorderLayout.NORTH) lblPlayerName.preferredSize = Dimension(0, 25) - lblPlayerName.font = ResourceCache.BASE_FONT.deriveFont(Font.BOLD, 20f) + lblPlayerName.font = getMenuFont() lblPlayerName.horizontalAlignment = SwingConstants.CENTER add(panelCenter, BorderLayout.CENTER) @@ -101,6 +102,8 @@ class PlayerManagementPanel : JPanel(), ActionListener { addSummaryPanels(player) } + panelCenter.applyButtonOverrides() + repaint() revalidate() } diff --git a/src/main/kotlin/dartzee/screen/player/PlayerStatsButton.kt b/src/main/kotlin/dartzee/screen/player/PlayerStatsButton.kt index f74c4fa12..e47844258 100644 --- a/src/main/kotlin/dartzee/screen/player/PlayerStatsButton.kt +++ b/src/main/kotlin/dartzee/screen/player/PlayerStatsButton.kt @@ -21,6 +21,8 @@ class PlayerStatsButton( icon = ImageIcon(iconUrl) text = defaultText + name = "STATS_${gameType.name}" + rolloverIcon = ImageIcon(javaClass.getResource("/buttons/stats_large.png")) selectedIcon = ImageIcon(javaClass.getResource("/buttons/stats_large.png")) diff --git a/src/main/kotlin/dartzee/screen/preference/PreferencesPanelDartboard.kt b/src/main/kotlin/dartzee/screen/preference/PreferencesPanelDartboard.kt index f7057245b..ded2d15cf 100644 --- a/src/main/kotlin/dartzee/screen/preference/PreferencesPanelDartboard.kt +++ b/src/main/kotlin/dartzee/screen/preference/PreferencesPanelDartboard.kt @@ -5,9 +5,9 @@ import dartzee.core.bean.ColourPicker import dartzee.core.bean.ColourSelectionListener import dartzee.core.util.alignCentrally import dartzee.core.util.setFontSize -import dartzee.`object`.ColourWrapper import dartzee.preferences.Preference import dartzee.preferences.Preferences +import dartzee.theme.ColourWrapper import dartzee.utils.InjectedThings import dartzee.utils.InjectedThings.preferenceService import java.awt.BorderLayout diff --git a/src/main/kotlin/dartzee/theme/Birthday.kt b/src/main/kotlin/dartzee/theme/Birthday.kt index b314e296a..8ceba59b2 100644 --- a/src/main/kotlin/dartzee/theme/Birthday.kt +++ b/src/main/kotlin/dartzee/theme/Birthday.kt @@ -4,7 +4,6 @@ import dartzee.bean.DartLabel import dartzee.core.util.toLocalDate import dartzee.db.PlayerEntity import dartzee.game.GameType -import dartzee.`object`.ColourWrapper import dartzee.screen.animation.Animation import dartzee.screen.animation.CompositeAnimation import dartzee.screen.animation.DartScoreTrigger diff --git a/src/main/kotlin/dartzee/theme/ButtonBackgroundUpdater.kt b/src/main/kotlin/dartzee/theme/ButtonBackgroundUpdater.kt new file mode 100644 index 000000000..dffedaf53 --- /dev/null +++ b/src/main/kotlin/dartzee/theme/ButtonBackgroundUpdater.kt @@ -0,0 +1,25 @@ +package dartzee.theme + +import java.awt.event.MouseAdapter +import java.awt.event.MouseEvent +import javax.swing.JButton + +class ButtonBackgroundUpdater(private val button: JButton) : MouseAdapter() { + private val bgColour = button.background + + override fun mousePressed(e: MouseEvent?) { + button.background = bgColour.darker() + } + + override fun mouseReleased(e: MouseEvent?) { + button.background = bgColour + } + + override fun mouseEntered(e: MouseEvent?) { + button.background = bgColour.brighter() + } + + override fun mouseExited(e: MouseEvent?) { + button.background = bgColour + } +} diff --git a/src/main/kotlin/dartzee/object/ColourWrapper.kt b/src/main/kotlin/dartzee/theme/ColourWrapper.kt similarity index 75% rename from src/main/kotlin/dartzee/object/ColourWrapper.kt rename to src/main/kotlin/dartzee/theme/ColourWrapper.kt index 36bf26989..e6ed92e70 100644 --- a/src/main/kotlin/dartzee/object/ColourWrapper.kt +++ b/src/main/kotlin/dartzee/theme/ColourWrapper.kt @@ -1,5 +1,6 @@ -package dartzee.`object` +package dartzee.theme +import dartzee.`object`.DartboardSegment import dartzee.utils.DartsColour import dartzee.utils.ResourceCache import dartzee.utils.hmScoreToOrdinal @@ -18,13 +19,11 @@ val DEFAULT_COLOUR_WRAPPER = Color.GREEN, ) -val WIREFRAME_COLOUR_WRAPPER = - ColourWrapper(DartsColour.TRANSPARENT).also { it.edgeColour = Color.BLACK } +val WIREFRAME_COLOUR_WRAPPER = ColourWrapper(DartsColour.TRANSPARENT).copy(edgeColour = Color.BLACK) val GREY_COLOUR_WRAPPER = - makeMonochromeWrapper(Color.GRAY.brighter(), Color.LIGHT_GRAY).also { - it.outerDartboardColour = Color.GRAY - } + makeMonochromeWrapper(Color.GRAY.brighter(), Color.LIGHT_GRAY) + .copy(outerDartboardColour = Color.GRAY) fun makeMonochromeWrapper(dark: Color, light: Color) = ColourWrapper(dark, light, light, light, dark, dark, dark, light) @@ -38,12 +37,12 @@ data class ColourWrapper( private val oddTrebleColour: Color, private val innerBullColour: Color, private val outerBullColour: Color, - var outerDartboardColour: Color = Color.black, - val fontColor: Color = Color.white, - val font: Font = ResourceCache.BASE_FONT, -) { - var missedBoardColour: Color = DartsColour.TRANSPARENT - var edgeColour: Color? = null + override val outerDartboardColour: Color = Color.black, + override val missedBoardColour: Color = DartsColour.TRANSPARENT, + override val edgeColour: Color? = null, + override val fontColor: Color = Color.white, + override val font: Font = ResourceCache.BASE_FONT, +) : IDartboardPainter { constructor( singleColour: Color @@ -59,6 +58,8 @@ data class ColourWrapper( singleColour, ) + override fun withFont(font: Font) = copy(font = font) + /** Helpers */ private fun getBullColour(multiplier: Int): Color { return when (multiplier) { @@ -67,7 +68,8 @@ data class ColourWrapper( } } - fun getColour(segment: DartboardSegment) = getColour(segment.getMultiplier(), segment.score) + override fun getColour(segment: DartboardSegment) = + getColour(segment.getMultiplier(), segment.score) private fun getColour(multiplier: Int, score: Int): Color { if (score == 25) { diff --git a/src/main/kotlin/dartzee/theme/Easter.kt b/src/main/kotlin/dartzee/theme/Easter.kt index a6114540b..d8db40be2 100644 --- a/src/main/kotlin/dartzee/theme/Easter.kt +++ b/src/main/kotlin/dartzee/theme/Easter.kt @@ -1,7 +1,6 @@ package dartzee.theme import dartzee.game.GameType -import dartzee.`object`.ColourWrapper import dartzee.screen.animation.Animation import dartzee.screen.animation.DartScoreTrigger import dartzee.screen.animation.IAnimation diff --git a/src/main/kotlin/dartzee/theme/Halloween.kt b/src/main/kotlin/dartzee/theme/Halloween.kt index 16565c534..a1b8fb060 100644 --- a/src/main/kotlin/dartzee/theme/Halloween.kt +++ b/src/main/kotlin/dartzee/theme/Halloween.kt @@ -1,7 +1,6 @@ package dartzee.theme import dartzee.game.GameType -import dartzee.`object`.ColourWrapper import dartzee.screen.animation.Animation import dartzee.screen.animation.CompositeAnimation import dartzee.screen.animation.DartScoreTrigger diff --git a/src/main/kotlin/dartzee/theme/IDartboardPainter.kt b/src/main/kotlin/dartzee/theme/IDartboardPainter.kt new file mode 100644 index 000000000..ab67b51b8 --- /dev/null +++ b/src/main/kotlin/dartzee/theme/IDartboardPainter.kt @@ -0,0 +1,17 @@ +package dartzee.theme + +import dartzee.`object`.DartboardSegment +import java.awt.Color +import java.awt.Font + +interface IDartboardPainter { + val outerDartboardColour: Color + val missedBoardColour: Color + val edgeColour: Color? + val fontColor: Color + val font: Font + + fun getColour(segment: DartboardSegment): Color + + fun withFont(font: Font): IDartboardPainter +} diff --git a/src/main/kotlin/dartzee/theme/Oktoberfest.kt b/src/main/kotlin/dartzee/theme/Oktoberfest.kt index ded98f1ca..4fa258dbb 100644 --- a/src/main/kotlin/dartzee/theme/Oktoberfest.kt +++ b/src/main/kotlin/dartzee/theme/Oktoberfest.kt @@ -1,7 +1,6 @@ package dartzee.theme import dartzee.game.GameType -import dartzee.`object`.ColourWrapper import dartzee.screen.animation.Animation import dartzee.screen.animation.CompositeAnimation import dartzee.screen.animation.DartScoreTrigger diff --git a/src/main/kotlin/dartzee/theme/Pride.kt b/src/main/kotlin/dartzee/theme/Pride.kt new file mode 100644 index 000000000..bd218adcf --- /dev/null +++ b/src/main/kotlin/dartzee/theme/Pride.kt @@ -0,0 +1,140 @@ +package dartzee.theme + +import java.awt.Color +import java.awt.Point +import java.awt.Rectangle +import java.time.LocalDate +import java.time.Month + +object PrideColors { + val red: Color = Color.decode("#ED1C24") + val orange: Color = Color.decode("#FF7F27") + val yellow: Color = Color.decode("#FFF200") + val lightGreen: Color = Color.decode("#B5E61D") + val darkGreen: Color = Color.decode("#22B14C") + val darkBlue: Color = Color.decode("#00A2E8") + val lightBlue: Color = Color.decode("#99D9EA") + val lightPurple: Color = Color.decode("#B19CD7") + val purple: Color = Color.decode("#A349A4") + val pink: Color = Color.decode("#FFAEC9") + + val all = + listOf( + red, + orange, + yellow, + lightGreen, + darkGreen, + darkBlue, + lightBlue, + lightPurple, + purple, + pink, + ) + + fun forIndex(index: Int) = all[index % all.size] +} + +private val buttonOverrideColours = + mapOf( + "New Game" to PrideColors.red, + "Players" to PrideColors.orange, + "Leaderboards" to PrideColors.yellow, + "Game Report" to PrideColors.darkGreen, + "Sync Setup" to PrideColors.darkBlue, + "Utilities" to PrideColors.lightBlue, + "Dartzee" to PrideColors.pink, + "Preferences" to PrideColors.purple, + + // Sync + "Perform Sync" to PrideColors.darkBlue, + "Push" to PrideColors.lightGreen, + "Pull" to PrideColors.orange, + "Reset" to Color.black, + + // dartzee rules + "Add" to PrideColors.lightGreen, + "Rename" to PrideColors.orange, + "Copy" to PrideColors.lightBlue, + "deleteTemplate" to PrideColors.pink, + + // Player management + "STATS_X01" to PrideColors.darkGreen, + "STATS_GOLF" to PrideColors.darkBlue, + "STATS_ROUND_THE_CLOCK" to PrideColors.orange, + "Achievements" to PrideColors.yellow, + "Edit" to PrideColors.lightBlue, + "Run simulation" to PrideColors.lightGreen, + "Delete" to PrideColors.red, + + // Utilities + "Delete Game" to PrideColors.red, + "Create Backup" to PrideColors.orange, + "Restore from backup" to PrideColors.yellow, + "Perform database check" to PrideColors.lightGreen, + "Thread stacks" to PrideColors.darkGreen, + "Check for updates" to PrideColors.darkBlue, + "View logs" to PrideColors.lightBlue, + "Run achievement conversion" to PrideColors.pink, + "Enter party mode" to PrideColors.purple, + + // Game setup + "Launch game" to PrideColors.darkGreen, + "Select" to PrideColors.lightGreen, + "Unselect" to PrideColors.orange, + + // Navigation + "Back" to PrideColors.red, + "Next" to PrideColors.darkGreen, + ) + (0..20).map { "DARTZEE_TILE_$it" to PrideColors.forIndex(it) } + +private val humanFlags = + listOf( + "humanBlue.png", + "humanGreen.png", + "humanLightBlue.png", + "humanLightGreen.png", + "humanOrange.png", + "humanPurple.png", + "humanRed.png", + "humanYellow.png", + ) + +private fun randomHumanFlag() = + Theme::class.java.getResource("/theme/pride/flags/${humanFlags.random()}") + +private fun getBannerDetails( + svgBounds: Rectangle, + dartboardCenter: Point, +): List { + val center = + Point( + dartboardCenter.x + (0.02 * svgBounds.width).toInt(), + dartboardCenter.y - (0.15 * svgBounds.height).toInt(), + ) + val topBanner = BannerRenderDetails("Pride", (svgBounds.height * 0.45).toInt(), center) + + return listOf(topBanner) +} + +val Themes.PRIDE: Theme + get() = + Theme( + ThemeId.Pride, + "TODO", + PrideColors.red, + PrideColors.purple, + Color.decode("#FFFFC5"), + fontColor = Color.black, + lightBackground = PrideColors.pink, + dartboardColours = PrideDartboardPainter(), + bannerTextRenderer = ::getBannerDetails, + menuFontSize = 15f, + buttonOverrideColours = buttonOverrideColours, + festivalInfo = FestivalInfo(::findPride, "The next parade begins"), + customIcons = mapOf("/flags/humanFlag.png" to ::randomHumanFlag), + unlockDate = LocalDate.of(2026, Month.JUNE, 1), + ) + +private fun findPride(year: Int): Pair = + LocalDate.of(year, Month.JUNE, 1) to LocalDate.of(year, Month.JUNE, 30) diff --git a/src/main/kotlin/dartzee/theme/PrideDartboardPainter.kt b/src/main/kotlin/dartzee/theme/PrideDartboardPainter.kt new file mode 100644 index 000000000..cdbc45ae9 --- /dev/null +++ b/src/main/kotlin/dartzee/theme/PrideDartboardPainter.kt @@ -0,0 +1,26 @@ +package dartzee.theme + +import dartzee.`object`.DartboardSegment +import dartzee.utils.DartsColour +import dartzee.utils.numberOrder +import java.awt.Color +import java.awt.Font + +data class PrideDartboardPainter(override val font: Font = getBaseFont()) : IDartboardPainter { + override val outerDartboardColour: Color = Color.BLACK + override val missedBoardColour = DartsColour.TRANSPARENT + override val edgeColour = null + override val fontColor: Color = Color.WHITE + + override fun getColour(segment: DartboardSegment): Color = + if (segment.isMiss()) Color.BLACK + else if (segment.score == 25) { + if (segment.getMultiplier() == 1) Color.black else Color.white + } else { + val index = numberOrder.indexOf(segment.score) + val rawColour = PrideColors.forIndex(index) + if (segment.getMultiplier() > 1) rawColour.darker() else rawColour + } + + override fun withFont(font: Font) = copy(font = font) +} diff --git a/src/main/kotlin/dartzee/theme/Theme.kt b/src/main/kotlin/dartzee/theme/Theme.kt index d11b6111b..dc34bcd73 100644 --- a/src/main/kotlin/dartzee/theme/Theme.kt +++ b/src/main/kotlin/dartzee/theme/Theme.kt @@ -1,7 +1,6 @@ package dartzee.theme import dartzee.logging.CODE_THEME_APPLIED -import dartzee.`object`.ColourWrapper import dartzee.screen.animation.IAnimation import dartzee.screen.animation.IAnimationTrigger import dartzee.utils.InjectedThings.logger @@ -9,6 +8,7 @@ import dartzee.utils.InjectedThings.now import dartzee.utils.ResourceCache import java.awt.Color import java.awt.GraphicsEnvironment +import java.net.URL import java.time.LocalDate import javax.swing.ImageIcon import javax.swing.UIManager @@ -20,7 +20,7 @@ data class Theme( private val primaryDark: Color, val background: Color, val lightBackground: Color, - private val dartboardColours: ColourWrapper?, + private val dartboardColours: IDartboardPainter?, val linkColour: Color = Color.BLUE, val fontColor: Color = Color.BLACK, val menuFontSize: Float? = null, @@ -30,6 +30,8 @@ data class Theme( val festivalInfo: FestivalInfo? = null, val unlockDate: LocalDate? = null, val dartFactory: DartFactory? = null, + val buttonOverrideColours: Map = emptyMap(), + val customIcons: Map URL?> = emptyMap(), ) { val name = id.name private val resourcePath = name.lowercase() @@ -41,7 +43,7 @@ data class Theme( val newGameSfx = clipForResource("/theme/$resourcePath/newGame.wav") val dartboardColourWrapper = - dartboardColours?.copy(font = dartboardFont ?: ResourceCache.BASE_FONT) + dartboardColours?.withFont(dartboardFont ?: ResourceCache.BASE_FONT) fun apply() { logger.info(CODE_THEME_APPLIED, "Applying theme $name") @@ -66,7 +68,10 @@ data class Theme( font?.let { GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(it) } } - fun icon(path: String) = javaClass.getResource("/theme/$resourcePath$path")?.let(::ImageIcon) + fun icon(path: String): ImageIcon? { + val icon = customIcons[path]?.invoke() ?: javaClass.getResource("/theme/$resourcePath$path") + return icon?.let(::ImageIcon) + } fun isLocked() = unlockDate != null && now.isBefore(unlockDate) diff --git a/src/main/kotlin/dartzee/theme/ThemeId.kt b/src/main/kotlin/dartzee/theme/ThemeId.kt index 32b852b0d..9e2c769cd 100644 --- a/src/main/kotlin/dartzee/theme/ThemeId.kt +++ b/src/main/kotlin/dartzee/theme/ThemeId.kt @@ -9,7 +9,8 @@ enum class ThemeId { Easter, Oktoberfest, Halloween, - Birthday; + Birthday, + Pride; companion object { fun parseFromPreference(preference: String): ThemeId = diff --git a/src/main/kotlin/dartzee/theme/ThemeUtils.kt b/src/main/kotlin/dartzee/theme/ThemeUtils.kt index eb29ea501..42d6ffd6b 100644 --- a/src/main/kotlin/dartzee/theme/ThemeUtils.kt +++ b/src/main/kotlin/dartzee/theme/ThemeUtils.kt @@ -3,6 +3,7 @@ package dartzee.theme import com.github.weisj.jsvg.SVGDocument import com.github.weisj.jsvg.parser.SVGLoader import dartzee.bean.DartLabel +import dartzee.core.util.getAllChildComponentsForType import dartzee.logging.CODE_AUDIO_ERROR import dartzee.preferences.Preferences import dartzee.utils.InjectedThings @@ -18,6 +19,9 @@ import java.time.LocalDate import java.time.format.DateTimeFormatter import javax.sound.sampled.AudioSystem import javax.swing.ImageIcon +import javax.swing.JButton +import javax.swing.JPanel +import kotlin.collections.get val DEFAULT_BACKGROUND = Color(214, 217, 223) val DEFAULT_BUTTON_COLOUR = Color(169, 176, 190) @@ -45,7 +49,14 @@ fun simpleBannerRenderer(themeId: ThemeId): BannerTextRenderer = { svgBounds, da object Themes fun themeMap() = - listOf(Themes.EASTER, Themes.OKTOBERFEST, Themes.HALLOWEEN, Themes.BIRTHDAY, Themes.DARTZEE) + listOf( + Themes.EASTER, + Themes.OKTOBERFEST, + Themes.HALLOWEEN, + Themes.BIRTHDAY, + Themes.DARTZEE, + Themes.PRIDE, + ) .associateBy { it.id } fun themeDescription(id: ThemeId): String { @@ -68,6 +79,21 @@ fun themeDescription(id: ThemeId): String { } } +fun JPanel.applyButtonOverrides() { + getAllChildComponentsForType().forEach { it.applyThemeOverride() } +} + +fun JButton.applyThemeOverride() { + val overrides = + InjectedThings.theme?.buttonOverrideColours?.mapKeys { it.key.lowercase() } ?: return + + val overrideColour = overrides[text.lowercase()] ?: overrides[name?.lowercase()] + if (overrideColour != null && background != overrideColour) { + background = overrideColour + addMouseListener(ButtonBackgroundUpdater(this)) + } +} + fun LocalDate.fmt(): String = format(DateTimeFormatter.ofPattern("d MMM uuuu")) private fun basicDescription(id: ThemeId): String = @@ -144,6 +170,9 @@ fun svgForResource(resourcePath: String): SVGDocument? { fun getBaseFont(): Font = InjectedThings.theme?.font ?: ResourceCache.BASE_FONT +fun getMenuFont(): Font = + getBaseFont().deriveFont(Font.PLAIN, InjectedThings.theme?.menuFontSize ?: 18f) + fun themedIcon(path: String, theme: Theme? = InjectedThings.theme): ImageIcon { val default = ImageIcon(Theme::class.java.getResource(path)) diff --git a/src/main/kotlin/dartzee/utils/DartboardUtil.kt b/src/main/kotlin/dartzee/utils/DartboardUtil.kt index ff527fe94..6ec170c92 100644 --- a/src/main/kotlin/dartzee/utils/DartboardUtil.kt +++ b/src/main/kotlin/dartzee/utils/DartboardUtil.kt @@ -1,18 +1,17 @@ package dartzee.utils import dartzee.core.util.mapStepped -import dartzee.`object`.ColourWrapper import dartzee.`object`.Dart import dartzee.`object`.DartboardSegment import dartzee.`object`.SegmentType import dartzee.preferences.Preferences +import dartzee.theme.ColourWrapper +import dartzee.theme.IDartboardPainter import dartzee.utils.InjectedThings.preferenceService import java.awt.Color import java.awt.Point -/** Utilities for the Dartboard object. */ -private val numberOrder = - listOf(20, 1, 18, 4, 13, 6, 10, 15, 2, 17, 3, 19, 7, 16, 8, 11, 14, 9, 12, 5, 20) +val numberOrder = listOf(20, 1, 18, 4, 13, 6, 10, 15, 2, 17, 3, 19, 7, 16, 8, 11, 14, 9, 12, 5, 20) val hmScoreToOrdinal = initialiseOrdinalHashMap() private var colourWrapperFromPrefs: ColourWrapper? = null @@ -215,7 +214,7 @@ fun getPotentialAimPoints(centerPt: Point, radius: Double): Set { return points.toSet() } -fun getColourWrapperFromPrefs(): ColourWrapper { +fun getColourWrapperFromPrefs(): IDartboardPainter { val themeColours = InjectedThings.theme?.dartboardColourWrapper if (themeColours != null) { return themeColours diff --git a/src/main/resources/flags/humanFlag.png b/src/main/resources/flags/humanFlag.png index a2ece9042..735dca79a 100644 Binary files a/src/main/resources/flags/humanFlag.png and b/src/main/resources/flags/humanFlag.png differ diff --git a/src/main/resources/theme/pride/banner.svg b/src/main/resources/theme/pride/banner.svg new file mode 100644 index 000000000..31e7f9d1e --- /dev/null +++ b/src/main/resources/theme/pride/banner.svg @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/theme/pride/buttons/downArrow.png b/src/main/resources/theme/pride/buttons/downArrow.png new file mode 100644 index 000000000..3c50f68f2 Binary files /dev/null and b/src/main/resources/theme/pride/buttons/downArrow.png differ diff --git a/src/main/resources/theme/pride/buttons/leftArrow.png b/src/main/resources/theme/pride/buttons/leftArrow.png new file mode 100644 index 000000000..91b3a4b43 Binary files /dev/null and b/src/main/resources/theme/pride/buttons/leftArrow.png differ diff --git a/src/main/resources/theme/pride/buttons/newGame.png b/src/main/resources/theme/pride/buttons/newGame.png new file mode 100644 index 000000000..da9b2c2fd Binary files /dev/null and b/src/main/resources/theme/pride/buttons/newGame.png differ diff --git a/src/main/resources/theme/pride/buttons/playerManagement.png b/src/main/resources/theme/pride/buttons/playerManagement.png new file mode 100644 index 000000000..f5197d0c9 Binary files /dev/null and b/src/main/resources/theme/pride/buttons/playerManagement.png differ diff --git a/src/main/resources/theme/pride/buttons/preferences.png b/src/main/resources/theme/pride/buttons/preferences.png new file mode 100644 index 000000000..c7a6dc085 Binary files /dev/null and b/src/main/resources/theme/pride/buttons/preferences.png differ diff --git a/src/main/resources/theme/pride/buttons/rightArrow.png b/src/main/resources/theme/pride/buttons/rightArrow.png new file mode 100644 index 000000000..f22fd59e9 Binary files /dev/null and b/src/main/resources/theme/pride/buttons/rightArrow.png differ diff --git a/src/main/resources/theme/pride/buttons/teams.png b/src/main/resources/theme/pride/buttons/teams.png new file mode 100644 index 000000000..ec28960e6 Binary files /dev/null and b/src/main/resources/theme/pride/buttons/teams.png differ diff --git a/src/main/resources/theme/pride/buttons/upArrow.png b/src/main/resources/theme/pride/buttons/upArrow.png new file mode 100644 index 000000000..13949601a Binary files /dev/null and b/src/main/resources/theme/pride/buttons/upArrow.png differ diff --git a/src/main/resources/theme/pride/dartboard.ttf b/src/main/resources/theme/pride/dartboard.ttf new file mode 100644 index 000000000..32fb1dc31 Binary files /dev/null and b/src/main/resources/theme/pride/dartboard.ttf differ diff --git a/src/main/resources/theme/pride/flags/humanBlue.png b/src/main/resources/theme/pride/flags/humanBlue.png new file mode 100644 index 000000000..efa1cb10c Binary files /dev/null and b/src/main/resources/theme/pride/flags/humanBlue.png differ diff --git a/src/main/resources/theme/pride/flags/humanGreen.png b/src/main/resources/theme/pride/flags/humanGreen.png new file mode 100644 index 000000000..8c8ea020d Binary files /dev/null and b/src/main/resources/theme/pride/flags/humanGreen.png differ diff --git a/src/main/resources/theme/pride/flags/humanLightBlue.png b/src/main/resources/theme/pride/flags/humanLightBlue.png new file mode 100644 index 000000000..735dca79a Binary files /dev/null and b/src/main/resources/theme/pride/flags/humanLightBlue.png differ diff --git a/src/main/resources/theme/pride/flags/humanLightGreen.png b/src/main/resources/theme/pride/flags/humanLightGreen.png new file mode 100644 index 000000000..89551f53b Binary files /dev/null and b/src/main/resources/theme/pride/flags/humanLightGreen.png differ diff --git a/src/main/resources/theme/pride/flags/humanOrange.png b/src/main/resources/theme/pride/flags/humanOrange.png new file mode 100644 index 000000000..0ec3599db Binary files /dev/null and b/src/main/resources/theme/pride/flags/humanOrange.png differ diff --git a/src/main/resources/theme/pride/flags/humanPurple.png b/src/main/resources/theme/pride/flags/humanPurple.png new file mode 100644 index 000000000..f2f299029 Binary files /dev/null and b/src/main/resources/theme/pride/flags/humanPurple.png differ diff --git a/src/main/resources/theme/pride/flags/humanRed.png b/src/main/resources/theme/pride/flags/humanRed.png new file mode 100644 index 000000000..930f7930f Binary files /dev/null and b/src/main/resources/theme/pride/flags/humanRed.png differ diff --git a/src/main/resources/theme/pride/flags/humanYellow.png b/src/main/resources/theme/pride/flags/humanYellow.png new file mode 100644 index 000000000..ed417f7e3 Binary files /dev/null and b/src/main/resources/theme/pride/flags/humanYellow.png differ diff --git a/src/main/resources/theme/pride/font.ttf b/src/main/resources/theme/pride/font.ttf new file mode 100644 index 000000000..b9a14a77c Binary files /dev/null and b/src/main/resources/theme/pride/font.ttf differ diff --git a/src/test/kotlin/dartzee/ai/TestStrategyUtils.kt b/src/test/kotlin/dartzee/ai/TestStrategyUtils.kt index c2a1d8f6a..34cadad62 100644 --- a/src/test/kotlin/dartzee/ai/TestStrategyUtils.kt +++ b/src/test/kotlin/dartzee/ai/TestStrategyUtils.kt @@ -4,8 +4,8 @@ import com.github.alyssaburlton.swingtest.shouldMatchImage import dartzee.bean.PresentationDartboard import dartzee.helper.AbstractTest import dartzee.helper.markPoints -import dartzee.`object`.DEFAULT_COLOUR_WRAPPER import dartzee.`object`.SegmentType +import dartzee.theme.DEFAULT_COLOUR_WRAPPER import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test diff --git a/src/test/kotlin/dartzee/bean/PresentationDartboardTest.kt b/src/test/kotlin/dartzee/bean/PresentationDartboardTest.kt index e0c58a4a6..60e655236 100644 --- a/src/test/kotlin/dartzee/bean/PresentationDartboardTest.kt +++ b/src/test/kotlin/dartzee/bean/PresentationDartboardTest.kt @@ -4,21 +4,22 @@ import com.github.alyssaburlton.swingtest.shouldMatchImage import dartzee.core.bean.getPointList import dartzee.helper.AbstractTest import dartzee.helper.makeSegmentStatuses -import dartzee.`object`.ColourWrapper import dartzee.`object`.ComputationalDartboard -import dartzee.`object`.DEFAULT_COLOUR_WRAPPER import dartzee.`object`.DartboardSegment import dartzee.`object`.SegmentType -import dartzee.`object`.WIREFRAME_COLOUR_WRAPPER import dartzee.screen.game.SegmentStatuses import dartzee.theme.BIRTHDAY import dartzee.theme.BirthdayInfo +import dartzee.theme.ColourWrapper import dartzee.theme.DARTZEE +import dartzee.theme.DEFAULT_COLOUR_WRAPPER import dartzee.theme.EASTER import dartzee.theme.HALLOWEEN import dartzee.theme.OKTOBERFEST +import dartzee.theme.PRIDE import dartzee.theme.Theme import dartzee.theme.Themes +import dartzee.theme.WIREFRAME_COLOUR_WRAPPER import dartzee.utils.InjectedThings import dartzee.utils.getAllNonMissSegments import io.kotest.matchers.shouldBe @@ -96,6 +97,12 @@ class PresentationDartboardTest : AbstractTest() { snapshotTheme(Themes.BIRTHDAY) } + @Test + @Tag("screenshot") + fun `Should match snapshot - pride`() { + snapshotTheme(Themes.PRIDE) + } + @Test @Tag("screenshot") fun `Should match snapshot - dartzee banner`() { diff --git a/src/test/kotlin/dartzee/bean/TestInteractiveDartboard.kt b/src/test/kotlin/dartzee/bean/TestInteractiveDartboard.kt index 438f4da90..5acbd56a2 100644 --- a/src/test/kotlin/dartzee/bean/TestInteractiveDartboard.kt +++ b/src/test/kotlin/dartzee/bean/TestInteractiveDartboard.kt @@ -2,10 +2,10 @@ package dartzee.bean import com.github.alyssaburlton.swingtest.shouldMatchImage import dartzee.helper.AbstractTest -import dartzee.`object`.DEFAULT_COLOUR_WRAPPER import dartzee.`object`.DartboardSegment import dartzee.`object`.SegmentType import dartzee.screen.game.SegmentStatuses +import dartzee.theme.DEFAULT_COLOUR_WRAPPER import dartzee.utils.getAllNonMissSegments import dartzee.utils.getAllSegmentsForDartzee import java.awt.Point diff --git a/src/test/kotlin/dartzee/dartzee/TestDartzeeAimCalculator.kt b/src/test/kotlin/dartzee/dartzee/TestDartzeeAimCalculator.kt index b95f14dcb..34eb7ca68 100644 --- a/src/test/kotlin/dartzee/dartzee/TestDartzeeAimCalculator.kt +++ b/src/test/kotlin/dartzee/dartzee/TestDartzeeAimCalculator.kt @@ -9,8 +9,8 @@ import dartzee.helper.AbstractTest import dartzee.helper.markPoints import dartzee.missTwenty import dartzee.`object`.ComputationalDartboard -import dartzee.`object`.DEFAULT_COLOUR_WRAPPER import dartzee.screen.game.SegmentStatuses +import dartzee.theme.DEFAULT_COLOUR_WRAPPER import dartzee.utils.DurationTimer import dartzee.utils.getAllNonMissSegments import io.kotest.matchers.comparables.shouldBeLessThan diff --git a/src/test/kotlin/dartzee/helper/TestFactory.kt b/src/test/kotlin/dartzee/helper/TestFactory.kt index 8009139bc..20fc62b45 100644 --- a/src/test/kotlin/dartzee/helper/TestFactory.kt +++ b/src/test/kotlin/dartzee/helper/TestFactory.kt @@ -16,8 +16,6 @@ import dartzee.game.state.ClockPlayerState import dartzee.game.state.GolfPlayerState import dartzee.game.state.SingleParticipant import dartzee.game.state.X01PlayerState -import dartzee.`object`.ColourWrapper -import dartzee.`object`.DEFAULT_COLOUR_WRAPPER import dartzee.`object`.Dart import dartzee.`object`.SegmentType import dartzee.reporting.IncludedPlayerParameters @@ -28,12 +26,15 @@ import dartzee.reporting.ReportParametersPlayers import dartzee.screen.animation.IAnimation import dartzee.screen.animation.IAnimationTrigger import dartzee.stats.GameWrapper +import dartzee.theme.ColourWrapper +import dartzee.theme.DEFAULT_COLOUR_WRAPPER import dartzee.theme.Theme import dartzee.theme.ThemeId import dartzee.utils.InjectedThings.mainDatabase import dartzee.utils.isBust import io.kotest.matchers.shouldBe import java.awt.Color +import java.net.URL import java.sql.Timestamp fun factoryClockHit(score: Int, multiplier: Int = 1): Dart { @@ -328,6 +329,8 @@ fun makeTheme( fontColor: Color = Color.BLACK, menuFontSize: Float? = null, animations: Map = emptyMap(), + buttonOverrideColours: Map = emptyMap(), + customIcons: Map URL?> = emptyMap(), ) = Theme( id, @@ -341,4 +344,6 @@ fun makeTheme( fontColor, menuFontSize, animations, + buttonOverrideColours = buttonOverrideColours, + customIcons = customIcons, ) diff --git a/src/test/kotlin/dartzee/object/TestComputationalDartboard.kt b/src/test/kotlin/dartzee/object/TestComputationalDartboard.kt index a558ca250..c3376a74c 100644 --- a/src/test/kotlin/dartzee/object/TestComputationalDartboard.kt +++ b/src/test/kotlin/dartzee/object/TestComputationalDartboard.kt @@ -4,6 +4,7 @@ import com.github.alyssaburlton.swingtest.shouldMatchImage import dartzee.bean.PresentationDartboard import dartzee.helper.AbstractTest import dartzee.helper.markPoints +import dartzee.theme.WIREFRAME_COLOUR_WRAPPER import io.kotest.matchers.shouldBe import java.awt.Dimension import java.awt.Point diff --git a/src/test/kotlin/dartzee/screen/MenuScreenTest.kt b/src/test/kotlin/dartzee/screen/MenuScreenTest.kt index 0d7524dae..becadce32 100644 --- a/src/test/kotlin/dartzee/screen/MenuScreenTest.kt +++ b/src/test/kotlin/dartzee/screen/MenuScreenTest.kt @@ -84,7 +84,7 @@ class MenuScreenTest : AbstractTest() { @Test fun `Should go to the player management screen`() { val scrn = MenuScreen() - scrn.clickChild(text = "Manage Players") + scrn.clickChild(text = "Players") ScreenCache.currentScreen().shouldBeInstanceOf() } @@ -128,7 +128,7 @@ class MenuScreenTest : AbstractTest() { @Test fun `Should go to the dartzee template setup screen`() { val scrn = MenuScreen() - scrn.clickChild(text = "Dartzee Rules") + scrn.clickChild(text = "Dartzee") ScreenCache.currentScreen().shouldBeInstanceOf() } @@ -153,10 +153,10 @@ class MenuScreenTest : AbstractTest() { scrn.getChild(text = "Leaderboards").shouldBeVisible() scrn.getChild(text = "Sync Setup").shouldNotBeVisible() - scrn.getChild(text = "Manage Players").shouldNotBeVisible() + scrn.getChild(text = "Players").shouldNotBeVisible() scrn.getChild(text = "Game Report").shouldNotBeVisible() scrn.getChild(text = "Utilities").shouldNotBeVisible() scrn.getChild(text = "Preferences").shouldNotBeVisible() - scrn.getChild(text = "Dartzee Rules").shouldNotBeVisible() + scrn.getChild(text = "Dartzee").shouldNotBeVisible() } } diff --git a/src/test/kotlin/dartzee/screen/TestScreenCache.kt b/src/test/kotlin/dartzee/screen/ScreenCacheTest.kt similarity index 96% rename from src/test/kotlin/dartzee/screen/TestScreenCache.kt rename to src/test/kotlin/dartzee/screen/ScreenCacheTest.kt index f119df272..fb83e9d2e 100644 --- a/src/test/kotlin/dartzee/screen/TestScreenCache.kt +++ b/src/test/kotlin/dartzee/screen/ScreenCacheTest.kt @@ -12,7 +12,7 @@ import io.mockk.mockk import io.mockk.verify import org.junit.jupiter.api.Test -class TestScreenCache : AbstractTest() { +class ScreenCacheTest : AbstractTest() { @Test fun `Should construct an instance and return it on subsequent calls`() { val scrn = ScreenCache.get() @@ -40,7 +40,7 @@ class TestScreenCache : AbstractTest() { ScreenCache.switch(scrn) ScreenCache.currentScreen() shouldBeSameInstanceAs scrn - verify { scrn.initialise() } + verify { scrn.init() } } @Test @@ -50,7 +50,7 @@ class TestScreenCache : AbstractTest() { ScreenCache.switch(scrn, false) ScreenCache.currentScreen() shouldBeSameInstanceAs scrn - verifyNotCalled { scrn.initialise() } + verifyNotCalled { scrn.init() } } @Test diff --git a/src/test/kotlin/dartzee/screen/TestGameplayDartboard.kt b/src/test/kotlin/dartzee/screen/TestGameplayDartboard.kt index 10d2c38f5..8744c0776 100644 --- a/src/test/kotlin/dartzee/screen/TestGameplayDartboard.kt +++ b/src/test/kotlin/dartzee/screen/TestGameplayDartboard.kt @@ -11,13 +11,13 @@ import dartzee.core.helper.verifyNotCalled import dartzee.getPointForSegment import dartzee.helper.AbstractTest import dartzee.listener.DartboardListener -import dartzee.`object`.ColourWrapper -import dartzee.`object`.DEFAULT_COLOUR_WRAPPER import dartzee.`object`.Dart import dartzee.`object`.DartboardSegment import dartzee.`object`.SegmentType import dartzee.screen.game.FakeDartsScreen import dartzee.theme.BIRTHDAY +import dartzee.theme.DEFAULT_COLOUR_WRAPPER +import dartzee.theme.IDartboardPainter import dartzee.theme.Themes import dartzee.throwDartByClick import dartzee.utils.InjectedThings @@ -160,7 +160,9 @@ class TestGameplayDartboard : AbstractTest() { dartboard.shouldMatchImage("darts-original-size") } - private fun factoryGameplayDartboard(colourWrapper: ColourWrapper? = null): GameplayDartboard { + private fun factoryGameplayDartboard( + colourWrapper: IDartboardPainter? = null + ): GameplayDartboard { val dartboard = GameplayDartboard(colourWrapper ?: DEFAULT_COLOUR_WRAPPER) dartboard.setBounds(0, 0, 400, 400) flushEdt() diff --git a/src/test/kotlin/dartzee/screen/dartzee/TestDartzeeRuleCarousel.kt b/src/test/kotlin/dartzee/screen/dartzee/DartzeeRuleCarouselTest.kt similarity index 92% rename from src/test/kotlin/dartzee/screen/dartzee/TestDartzeeRuleCarousel.kt rename to src/test/kotlin/dartzee/screen/dartzee/DartzeeRuleCarouselTest.kt index ca10330b4..8cd00d342 100644 --- a/src/test/kotlin/dartzee/screen/dartzee/TestDartzeeRuleCarousel.kt +++ b/src/test/kotlin/dartzee/screen/dartzee/DartzeeRuleCarouselTest.kt @@ -22,6 +22,9 @@ import dartzee.screen.game.SegmentStatuses import dartzee.screen.game.dartzee.DartzeeRuleCarousel import dartzee.screen.game.dartzee.DartzeeRuleTile import dartzee.screen.game.dartzee.IDartzeeCarouselListener +import dartzee.theme.PRIDE +import dartzee.theme.PrideColors +import dartzee.theme.Themes import dartzee.utils.InjectedThings import dartzee.utils.getAllNonMissSegments import io.kotest.matchers.collections.shouldBeEmpty @@ -36,7 +39,7 @@ import java.awt.Color import java.util.concurrent.locks.ReentrantLock import org.junit.jupiter.api.Test -class TestDartzeeRuleCarousel : AbstractTest() { +class DartzeeRuleCarouselTest : AbstractTest() { private val dtos = listOf(twoBlackOneWhite, scoreEighteens, innerOuterInner, totalIsFifty, allTwenties) @@ -362,6 +365,37 @@ class TestDartzeeRuleCarousel : AbstractTest() { result.success shouldBe true } + @Test + fun `Should apply pride colours to pending rule tiles`() { + InjectedThings.theme = Themes.PRIDE + + val carousel = makeCarousel() + carousel.update(emptyList(), emptyList(), 20) + + carousel.pendingTiles + .map { it.background } + .shouldContainExactly( + PrideColors.red, + PrideColors.orange, + PrideColors.yellow, + PrideColors.lightGreen, + PrideColors.darkGreen, + ) + + val results = + makeRoundResultEntities( + DartzeeRoundResult(3, true, 36), + DartzeeRoundResult(1, false, -38), + ) + carousel.update(results, emptyList(), 38) + + carousel.pendingTiles + .map { it.background } + .shouldContainExactly(PrideColors.orange, PrideColors.lightGreen, PrideColors.darkGreen) + + carousel.completeTiles.map { it.background }.shouldContainExactly(Color.GREEN, Color.RED) + } + private class TrackingCarouselListener : IDartzeeCarouselListener { var segmentStatuses: SegmentStatuses = SegmentStatuses(emptySet(), emptySet()) var roundResult: DartzeeRoundResult? = null diff --git a/src/test/kotlin/dartzee/screen/dartzee/TestDartzeeTemplateSetupScreen.kt b/src/test/kotlin/dartzee/screen/dartzee/TestDartzeeTemplateSetupScreen.kt index 28ca1317f..efec16808 100644 --- a/src/test/kotlin/dartzee/screen/dartzee/TestDartzeeTemplateSetupScreen.kt +++ b/src/test/kotlin/dartzee/screen/dartzee/TestDartzeeTemplateSetupScreen.kt @@ -67,17 +67,17 @@ class TestDartzeeTemplateSetupScreen : AbstractTest() { scrn.initialise() scrn.getChild("copy").shouldBeDisabled() - scrn.getChild("delete").shouldBeDisabled() + scrn.getChild("deleteTemplate").shouldBeDisabled() scrn.getChild("rename").shouldBeDisabled() scrn.getChild().selectRow(0) scrn.getChild("copy").shouldBeEnabled() - scrn.getChild("delete").shouldBeEnabled() + scrn.getChild("deleteTemplate").shouldBeEnabled() scrn.getChild("rename").shouldBeEnabled() scrn.getChild().selectRow(-1) scrn.getChild("copy").shouldBeDisabled() - scrn.getChild("delete").shouldBeDisabled() + scrn.getChild("deleteTemplate").shouldBeDisabled() scrn.getChild("rename").shouldBeDisabled() } @@ -90,7 +90,7 @@ class TestDartzeeTemplateSetupScreen : AbstractTest() { scrn.initialise() scrn.getChild().selectRow(0) - scrn.clickChild("delete") + scrn.clickChild("deleteTemplate") dialogFactory.questionsShown.shouldContainExactly( "Are you sure you want to delete the ABC Template?" @@ -108,7 +108,7 @@ class TestDartzeeTemplateSetupScreen : AbstractTest() { scrn.initialise() scrn.getChild().selectRow(0) - scrn.clickChild("delete") + scrn.clickChild("deleteTemplate") dialogFactory.questionsShown.shouldContainExactly( "Are you sure you want to delete the ABC Template?" @@ -168,7 +168,7 @@ class TestDartzeeTemplateSetupScreen : AbstractTest() { scrn.initialise() scrn.getChild().selectRow(0) - scrn.clickChild("delete") + scrn.clickChild("deleteTemplate") dialogFactory.questionsShown.shouldContainExactly( "You have played 2 games using the ABC Template." + diff --git a/src/test/kotlin/dartzee/screen/preference/PreferencesPanelDartboardTest.kt b/src/test/kotlin/dartzee/screen/preference/PreferencesPanelDartboardTest.kt index a7dc7b831..2d0dc93b5 100644 --- a/src/test/kotlin/dartzee/screen/preference/PreferencesPanelDartboardTest.kt +++ b/src/test/kotlin/dartzee/screen/preference/PreferencesPanelDartboardTest.kt @@ -7,8 +7,8 @@ import com.github.alyssaburlton.swingtest.waitForAssertion import dartzee.bean.PresentationDartboard import dartzee.core.util.runOnEventThreadBlocking import dartzee.helper.makeTheme -import dartzee.`object`.DEFAULT_COLOUR_WRAPPER import dartzee.preferences.Preferences +import dartzee.theme.DEFAULT_COLOUR_WRAPPER import dartzee.theme.ThemeId import dartzee.utils.DartsColour import dartzee.utils.InjectedThings diff --git a/src/test/kotlin/dartzee/theme/ButtonHoverListenerTest.kt b/src/test/kotlin/dartzee/theme/ButtonHoverListenerTest.kt new file mode 100644 index 000000000..bf0ba458c --- /dev/null +++ b/src/test/kotlin/dartzee/theme/ButtonHoverListenerTest.kt @@ -0,0 +1,35 @@ +package dartzee.theme + +import com.github.alyssaburlton.swingtest.doHover +import com.github.alyssaburlton.swingtest.doHoverAway +import com.github.alyssaburlton.swingtest.makeMouseEvent +import dartzee.helper.AbstractTest +import io.kotest.matchers.shouldBe +import java.awt.Color +import javax.swing.JButton +import org.junit.jupiter.api.Test + +class ButtonHoverListenerTest : AbstractTest() { + @Test + fun `Should update background accordingly`() { + val button = JButton() + button.background = Color.RED + val listener = ButtonBackgroundUpdater(button) + button.addMouseListener(listener) + + val lighter = Color.RED.brighter() + val darker = Color.RED.darker() + + button.doHover() + button.background shouldBe lighter + + button.doHoverAway() + button.background shouldBe Color.RED + + listener.mousePressed(makeMouseEvent(button)) + button.background shouldBe darker + + listener.mouseReleased(makeMouseEvent(button)) + button.background shouldBe Color.RED + } +} diff --git a/src/test/kotlin/dartzee/theme/ThemeTest.kt b/src/test/kotlin/dartzee/theme/ThemeTest.kt index 4a8a82ffb..0c4fa2665 100644 --- a/src/test/kotlin/dartzee/theme/ThemeTest.kt +++ b/src/test/kotlin/dartzee/theme/ThemeTest.kt @@ -4,6 +4,7 @@ import com.github.alyssaburlton.swingtest.shouldMatch import com.github.alyssaburlton.swingtest.shouldMatchImage import dartzee.helper.AbstractTest import dartzee.helper.makeTheme +import dartzee.utils.InjectedThings import io.kotest.matchers.shouldBe import java.awt.Color import java.awt.Dimension @@ -76,4 +77,43 @@ class ThemeTest : AbstractTest() { fun `Should return null if no resource is found`() { Themes.HALLOWEEN.icon("/buttons/blah.png") shouldBe null } + + @Test + fun `Should make use of custom icon functions`() { + val location = javaClass.getResource("/theme/halloween/buttons/playerManagement.png") + val fn = fun() = location + + val theme = makeTheme(customIcons = mapOf("/buttons/newGame.png" to fn)) + + theme.icon("/buttons/newGame.png")!!.shouldMatch(ImageIcon(location)) + theme.icon("/buttons/preferences.png") shouldBe null + } + + @Test + fun `Should be able to override buttons based on text and name`() { + val panel = JPanel() + + val buttonOk = JButton("Ok") + val buttonDeleteGame = JButton().also { it.name = "deleteGame" } + val buttonOkTwo = JButton("OK") + val buttonOther = JButton("Other").also { it.name = "something" } + + val originalBg = buttonOther.background + + panel.add(buttonOk) + panel.add(buttonDeleteGame) + panel.add(buttonOkTwo) + panel.add(buttonOther) + + val buttonOverrideColours = mapOf("ok" to Color.green, "deletegame" to Color.red) + + InjectedThings.theme = makeTheme(buttonOverrideColours = buttonOverrideColours) + + panel.applyButtonOverrides() + + buttonOk.background shouldBe Color.green + buttonOkTwo.background shouldBe Color.green + buttonDeleteGame.background shouldBe Color.red + buttonOther.background shouldBe originalBg + } } diff --git a/src/test/kotlin/dartzee/theme/ThemeUtilsTest.kt b/src/test/kotlin/dartzee/theme/ThemeUtilsTest.kt index 8facea971..a8b81d536 100644 --- a/src/test/kotlin/dartzee/theme/ThemeUtilsTest.kt +++ b/src/test/kotlin/dartzee/theme/ThemeUtilsTest.kt @@ -139,6 +139,14 @@ class ThemeUtilsTest : AbstractTest() { testPickTheme(LocalDate.of(2026, Month.OCTOBER, 5)) shouldBe Themes.DARTZEE } + @Test + fun `Should pick Pride in June`() { + testPickTheme(LocalDate.of(2026, Month.MAY, 31)) shouldBe Themes.DARTZEE + testPickTheme(LocalDate.of(2026, Month.JUNE, 1)) shouldBe Themes.PRIDE + testPickTheme(LocalDate.of(2026, Month.JUNE, 30)) shouldBe Themes.PRIDE + testPickTheme(LocalDate.of(2026, Month.JULY, 1)) shouldBe Themes.DARTZEE + } + @Test fun `Description should be correct for no theme`() { val description = themeDescription(ThemeId.None) diff --git a/src/test/kotlin/dartzee/utils/TestPlayerImageUtils.kt b/src/test/kotlin/dartzee/utils/PlayerImageUtilsTest.kt similarity index 98% rename from src/test/kotlin/dartzee/utils/TestPlayerImageUtils.kt rename to src/test/kotlin/dartzee/utils/PlayerImageUtilsTest.kt index 8cc4cffd0..7c7c337c0 100644 --- a/src/test/kotlin/dartzee/utils/TestPlayerImageUtils.kt +++ b/src/test/kotlin/dartzee/utils/PlayerImageUtilsTest.kt @@ -12,7 +12,7 @@ import javax.swing.ImageIcon import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test -class TestPlayerImageUtils : AbstractTest() { +class PlayerImageUtilsTest : AbstractTest() { @Test @Tag("screenshot") fun `Should match screenshot - 50-50 split, inactive`() { diff --git a/src/test/resources/__snapshots__/dartzee.bean.PresentationDartboardTest/pride-banner.png b/src/test/resources/__snapshots__/dartzee.bean.PresentationDartboardTest/pride-banner.png new file mode 100644 index 000000000..f5debdd5a Binary files /dev/null and b/src/test/resources/__snapshots__/dartzee.bean.PresentationDartboardTest/pride-banner.png differ diff --git a/src/test/resources/__snapshots__/dartzee.bean.PresentationDartboardTest/pride.png b/src/test/resources/__snapshots__/dartzee.bean.PresentationDartboardTest/pride.png new file mode 100644 index 000000000..8d510e2f9 Binary files /dev/null and b/src/test/resources/__snapshots__/dartzee.bean.PresentationDartboardTest/pride.png differ diff --git a/src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/ai-ai.png b/src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/ai-ai.png similarity index 100% rename from src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/ai-ai.png rename to src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/ai-ai.png diff --git a/src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/ai-human.png b/src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/ai-human.png new file mode 100644 index 000000000..8b2bb1e7a Binary files /dev/null and b/src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/ai-human.png differ diff --git a/src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/human-ai.png b/src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/human-ai.png new file mode 100644 index 000000000..247929eb1 Binary files /dev/null and b/src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/human-ai.png differ diff --git a/src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/human-human.png b/src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/human-human.png new file mode 100644 index 000000000..d0efa7bd9 Binary files /dev/null and b/src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/human-human.png differ diff --git a/src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/outer-wilds-avatar.png b/src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/outer-wilds-avatar.png similarity index 100% rename from src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/outer-wilds-avatar.png rename to src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/outer-wilds-avatar.png diff --git a/src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/split-50-game-over-selected.png b/src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/split-50-game-over-selected.png similarity index 100% rename from src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/split-50-game-over-selected.png rename to src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/split-50-game-over-selected.png diff --git a/src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/split-50-game-over.png b/src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/split-50-game-over.png similarity index 100% rename from src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/split-50-game-over.png rename to src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/split-50-game-over.png diff --git a/src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/split-50-inactive.png b/src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/split-50-inactive.png similarity index 100% rename from src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/split-50-inactive.png rename to src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/split-50-inactive.png diff --git a/src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/split-p1.png b/src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/split-p1.png similarity index 100% rename from src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/split-p1.png rename to src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/split-p1.png diff --git a/src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/split-p2.png b/src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/split-p2.png similarity index 100% rename from src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/split-p2.png rename to src/test/resources/__snapshots__/dartzee.utils.PlayerImageUtilsTest/split-p2.png diff --git a/src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/ai-human.png b/src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/ai-human.png deleted file mode 100644 index 8736033ec..000000000 Binary files a/src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/ai-human.png and /dev/null differ diff --git a/src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/human-ai.png b/src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/human-ai.png deleted file mode 100644 index 333537d00..000000000 Binary files a/src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/human-ai.png and /dev/null differ diff --git a/src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/human-human.png b/src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/human-human.png deleted file mode 100644 index 06f82dbc2..000000000 Binary files a/src/test/resources/__snapshots__/dartzee.utils.TestPlayerImageUtils/human-human.png and /dev/null differ