主题系统

基本信息

属性 值
主题模型 journeymap.client.ui.theme.Theme(Theme.java:22),实现 Comparable<Theme>
主题格式版本 Theme.VERSION = 1(Theme.java:27)
内置预设 2 个(ThemePresets.THEME_PURIST、THEME_VICTORIAN)
用户主题目录 Vault(ThemePresets.DIR_VAULT)
配置文件 CoreProperties.themeName(jm.common.ui_theme,归 FullMap 分类)
主题相关类 Theme、ThemeButton、ThemeToggle、ThemeToolbar、ThemeCompassPoints、ThemeMinimapFrame
主题文件处理器 journeymap.client.io.ThemeFileHandler(提供候选项给选项界面)

功能

主题控制 JourneyMap 全部自绘界面的配色、按钮图标、工具栏、容器边框、小地图外框与罗盘样式。主题与地图内容无关——换主题不会重绘任何区块。

2 个内置预设

ThemePresets(ThemePresets.java:17)定义两个静态常量:

常量 名称 作者 目录
THEME_PURIST Purist — —
THEME_VICTORIAN Victorian techbrew(:38) "Victorian"(:39)

getPresets()(:23-26)返回 [THEME_PURIST, THEME_VICTORIAN];getPresetDirs()(:28-31)返回三个目录——两个预设目录加上 DIR_VAULT = "Vault"(:21),即玩家自建主题的存放目录。

因此候选项共 3 个:Purist、Victorian、Vault。Vault 不是 Theme 常量,而是一个目录名,由 ThemeFileHandler 在运行时扫描。

Victorian 主题的色板

createVictorian()(:34-)是源码中唯一完整展开的预设,其配色为:

用途 值 来源
主强调色 "#A56B46"(棕红) :40
控件色 Theme.toHexColor(new Color(132, 125, 102)) :41
深灰 Theme.toHexColor(new Color(34, 34, 34)) :42
图标尺寸 24 × 24 :44-46
按钮尺寸 24 × 24,useThemeImages = true :49-51
提示文字色 开启/关闭均 WHITE,禁用为 DARK_GRAY + ITALIC :52-55
按钮图标色 开/关为 controlColor,悬停为白,禁用为 Color.darkGray :56-59

注意 tooltipOnStyle 与 tooltipOffStyle 都是 WHITE(:53-54)——开/关提示文字不靠颜色区分。

Theme 的结构

Theme(Theme.java:22)有 3 个字符串字段与 5 个嵌套规格对象:

字段 类型 说明 源码
author String 作者 :33
name String 主题名 :39
directory String 主题目录名 :45
container Container 容器(工具栏等) :52、:168
control Control 通用控件(按钮等) :59
fullscreen Fullscreen 全屏地图专属 :65
icon ImageSpec 主题图标本身 :71
minimap Minimap 小地图专属 :77

Container 内部再嵌 Toolbar,Toolbar 有 horizontal / (对应 vertical)两个 ToolbarSpec(:174、:179、:185)。

两个静态颜色工具方法:

方法 作用 源码
toHexColor(Color) Color → "#RRGGBB" 十六进制串 :82
getColor(String hexColor) 十六进制串 → Integer :90

Theme 实现 Comparable<Theme>(compareTo(),:122)与 equals / hashCode(:132、:158),供 ThemePresets.getPresets() 的列表排序使用。

6 个主题 UI 组件类

类 作用
ThemeButton 按主题渲染的按钮(ThemeButton(Theme, 语言键, 图标名),见 全屏地图 的 8 个用法)
ThemeToolbar 按钮容器,支持 setLayout(ButtonList.Layout, ButtonList.Direction) 与 layoutCenteredVertical()(Fullscreen.java:540、:575)
ThemeToggle 开关型按钮(对应 showCompass / showReticle 等)
ThemeCompassPoints 小地图罗盘的 8 个方向点样式
ThemeMinimapFrame 小地图外框样式
Theme 之外的容器规格 Container.Toolbar.ToolbarSpec 等嵌套规格类

主题切换

CoreProperties.themeName 是唯一的主题配置项,归在 FullMap 分类(CoreProperties.java:62-63),初值由 ThemeFileHandler.ThemeStringListProvider().getDefaultString() 给出。

切换入口有三处:全屏地图的 buttonTheme(Fullscreen.java:417)、Options Manager 的 FullMap 页签,以及 jm.common.ui_theme 语言键对应的通用控件。

数值

数值名 值
主题格式版本 1
内置预设数 2(Purist、Victorian)
候选项总数 3(2 预设 + Vault 用户目录)
主题配置项数 1(themeName)
Theme 字段数 3(字符串)+ 5(嵌套对象)
Victorian 图标/按钮尺寸 24 × 24
Victorian 强调色 #A56B46
Victorian 控件色 RGB(132, 125, 102)
主题 UI 组件类 6

交互

触发 行为
启动 从 themeName 读取当前主题;ThemeFileHandler 扫描 Vault 目录补充用户主题
全屏地图点击主题按钮 切换 themeName 并重绘全部自绘界面
Options Manager 改主题 同上,立即生效
玩家自建主题 放入 journeymap/Vault/<主题名>/ 目录后被扫描到
修改 themeName 配置 需重启游戏(主题在初始化时加载)

相关条目