theme: Turn ThemeRegistry into a trait (#20076)

This PR converts the `ThemeRegistry` type into a trait instead of a
concrete implementation.

This allows for the extension store to depend on an abstraction rather
than the concrete theme registry implementation.

We currently have two `ThemeRegistry` implementations:

- `RealThemeRegistry` — this was previously the `ThemeRegistry` and
contains the real implementation of the registry.
- `VoidThemeRegistry` — a null object that doesn't have any behavior.

Release Notes:

- N/A
This commit is contained in:
Marshall Bowers 2024-11-01 10:19:09 -04:00 committed by GitHub
parent c04c439d23
commit af9e7f1f96
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 184 additions and 118 deletions

View file

@ -97,7 +97,7 @@ impl ThemeSelectorDelegate {
let original_theme = cx.theme().clone();
let staff_mode = cx.is_staff();
let registry = ThemeRegistry::global(cx);
let registry = <dyn ThemeRegistry>::global(cx);
let mut themes = registry
.list(staff_mode)
.into_iter()
@ -142,7 +142,7 @@ impl ThemeSelectorDelegate {
fn show_selected_theme(&mut self, cx: &mut ViewContext<Picker<ThemeSelectorDelegate>>) {
if let Some(mat) = self.matches.get(self.selected_index) {
let registry = ThemeRegistry::global(cx);
let registry = <dyn ThemeRegistry>::global(cx);
match registry.get(&mat.string) {
Ok(theme) => {
Self::set_theme(theme, cx);