主题系统
基本信息
| 属性 | 值 |
|---|---|
| 主题模型 | 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 配置 |
需重启游戏(主题在初始化时加载) |
相关条目
- 全屏地图 - 8 个
ThemeButton的使用位置 - 小地图 -
ThemeMinimapFrame/ThemeCompassPoints的作用对象 - 核心选项 -
themeName选项定义 - 配置文件 - 主题配置与文件结构
- Options Manager - 主题切换的配置入口