颜色和高对比度模式¶
Firefox 提供了多种自定义选项,以提高用于呈现网页内容和 Firefox 浏览器界面的颜色的辅助功能。本文档描述了可用的自定义选项及其跨平台的行为。它还描述了这些选项如何相互交互。它旨在作为开发人员参考 :)
颜色对话框¶
在 about:preferences > Language and Appearance
中,您会找到一个标记为“颜色”的按钮。此按钮将启动颜色对话框,其中包含我们所有面向用户的颜色自定义选项,以及链接下划线等样式自定义。此对话框还包含一个选择框,用于控制我们所说的“Firefox 高对比度模式”或 FF HCM。FF HCM 可以设置为“始终”、“从不”或“仅在使用高对比度主题时”。
注意:FF HCM 仅影响网页内容,因此更改此选择框中的选项只会更改网页的颜色使用情况。它不会更改 FF 浏览器界面。浏览器界面页面(即
about:
页面)上的当前行为是未定义的。
用户可自定义颜色¶
用户可以通过从对话框中的颜色输入中选择新颜色来选择覆盖背景颜色、前景颜色、已访问链接颜色和/或未访问链接颜色。对这些颜色的修改存储在其相应的用户首选项中
browser.background_color
browser.foreground_color
browser.visited_color
browser.anchor_color
颜色使用和系统颜色¶
在渲染任何 Firefox/网页内容之前,我们需要选择一个颜色调色板来使用该内容进行渲染。我们并不总是使用用户在颜色对话框中选择的颜色。事实上,我们可以使用三种不同的颜色集来设置 Firefox 和/或网页内容的样式
替代颜色
系统颜色
颜色对话框颜色
注意:网页可能会提供自己的样式表,这些样式表会覆盖用户选择的颜色调色板。当 FF HCM 设置为“始终”或设置为“使用高对比度主题”并且启用了 OS HCM 时,所选颜色调色板将被强制,这意味着网页无法覆盖它。FF HCM 和 OS HCM 不会直接更改选择颜色调色板的方式,但它们会更改颜色调色板的使用方式。
我们在 PreferenceSheet::Load
中决定使用哪组颜色。如果启用了 resistFingerprinting
,我们将使用替代颜色。这些颜色是预定义的常量,不会从操作系统动态获取。查看 nsXPLookAndFeel::GetStandinForNativeColor
以获取更多信息,以及常量本身。
如果我们不使用替代颜色,我们将检查 browser.display.use_system_colors
,它是在颜色对话框中的“使用系统颜色”复选框中设置的。如果该首选项为 true,我们将使用系统颜色来设置网页内容和 Firefox 浏览器界面的样式。
系统颜色是从操作系统查询的颜色。它们帮助 Firefox 适应不严格属于 HCM(即亮/暗主题)的操作系统级更改。由于这些颜色依赖于操作系统,因此在启用了系统颜色的 Windows 计算机上操作 Firefox 的用户看到的 Firefox 与在启用了系统颜色的 MacOS 上看到的 Firefox 不同。
那么,我们如何获取系统颜色呢?我们的样式系统在 ServoStyleConsts.h
中有一组预定义的 ColorID
,这些 ColorID
在 widget/[cocoa | android | windows | gtk]/LookAndFeel.cpp
中映射到特定于平台的颜色。根据查询的 ColorID
,我们可能会进行动态获取或只返回一个常量。例如,在 MacOS 上,ColorID::TextForeground
和 ColorID::TextBackground
被硬编码为分别返回黑色和白色。ColorID::Highlight
另一方面,查询操作系统以获取 NSColor.selectedTextBackgroundColor
,该颜色根据用户在系统偏好设置中选择强调色进行设置。
注意:我们在此处获取的颜色是与主题相关的。如果用户将其操作系统设置为深色主题,我们将从该调色板中获取颜色,对于浅色主题也是如此。Windows HCM 虽然不严格是“主题”,但会覆盖为 Windows 浅色主题存储的颜色,从而导致一些令人困惑的代码,如下所示。
最后,如果我们不使用系统颜色并且我们不设置 Firefox 浏览器界面的样式并且我们不是 resistFingerprinting
,我们将使用颜色对话框颜色来设置网页内容的样式。
默认情况下,browser.display.use_system_colors
在 Windows 上为 true,在其他平台上为 false。这意味着 Windows 上的用户不会在 Firefox 中自动反映他们在颜色对话框中的选择。他们需要先取消选中“使用系统颜色”。
注意:这是故意的。当启用 Windows HCM 时,Windows 公开的系统颜色将从所选 HCM 主题中提取。选中“使用系统颜色”后,Windows HCM 用户将能够在 Firefox 内容中自动反映他们的 HCM 主题选择。Windows HCM 是我们在支持的操作系统中提供的最强大的 HCM,因此我们在这里满足它 :)
非 Windows 平台上的用户将能够自动反映他们在颜色对话框中的选择,但他们不会看到操作系统更改,直到他们选中“使用系统颜色”。
有关此决策树的简化流程图,请查看我们的HCM 设置页面
高对比度模式¶
操作系统高对比度模式 (OS HCM)¶
操作系统 HCM(或 OS HCM)描述了一种在 Firefox 之外、在用户操作系统的设置中启用的高对比度自定义选项。我们每个主要的桌面操作系统都具有 OS HCM 变体
Windows:设置 > 辅助功能 > 增大对比度 >(选择主题)> 应用
MacOS:系统偏好设置 > 辅助功能 > 显示 > 增大对比度
Linux:设置 > 主题 > 高对比度
OS HCM 的存在存储在 IntID::UseAccessibilityTheme
中。