perf(accessibility): consolidate message types in view to reduce code gen
This commit is contained in:
parent
c5bdce7385
commit
1e05e146f2
1 changed files with 33 additions and 59 deletions
|
|
@ -13,9 +13,7 @@ use cosmic_settings_page::{
|
||||||
self as page, Insert,
|
self as page, Insert,
|
||||||
section::{self, Section},
|
section::{self, Section},
|
||||||
};
|
};
|
||||||
use cosmic_settings_subscriptions::accessibility::{
|
use cosmic_settings_subscriptions::accessibility::{DBusRequest, DBusUpdate, subscription as a11y_subscription};
|
||||||
DBusRequest, DBusUpdate, subscription as a11y_subscription,
|
|
||||||
};
|
|
||||||
use cosmic_settings_subscriptions::cosmic_a11y_manager;
|
use cosmic_settings_subscriptions::cosmic_a11y_manager;
|
||||||
use num_traits::FromPrimitive;
|
use num_traits::FromPrimitive;
|
||||||
use slotmap::SlotMap;
|
use slotmap::SlotMap;
|
||||||
|
|
@ -165,11 +163,10 @@ impl page::Page<crate::pages::Message> for Page {
|
||||||
cosmic::Task::none()
|
cosmic::Task::none()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn subscription(
|
fn subscription(&self, _core: &cosmic::Core) -> cosmic::iced::Subscription<crate::pages::Message> {
|
||||||
&self,
|
a11y_subscription().map(|m| {
|
||||||
_core: &cosmic::Core,
|
super::Message::Accessibility(Message::DBusUpdate(m))
|
||||||
) -> cosmic::iced::Subscription<crate::pages::Message> {
|
})
|
||||||
a11y_subscription().map(|m| super::Message::Accessibility(Message::DBusUpdate(m)))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -201,13 +198,10 @@ pub fn vision() -> section::Section<crate::pages::Message> {
|
||||||
|
|
||||||
settings::section()
|
settings::section()
|
||||||
.title(§ion.title)
|
.title(§ion.title)
|
||||||
.add(
|
.add(settings::item::builder(&descriptions[screen_reader])
|
||||||
cosmic::Element::from(
|
.toggler(page.reader_enabled, |enabled| {
|
||||||
settings::item::builder(&descriptions[screen_reader])
|
crate::pages::Message::from(Message::ScreenReaderEnabled(enabled))
|
||||||
.toggler(page.reader_enabled, Message::ScreenReaderEnabled),
|
}))
|
||||||
)
|
|
||||||
.map(crate::pages::Message::Accessibility),
|
|
||||||
)
|
|
||||||
.add({
|
.add({
|
||||||
let (magnifier_entity, _magnifier_info) = binder
|
let (magnifier_entity, _magnifier_info) = binder
|
||||||
.info
|
.info
|
||||||
|
|
@ -230,66 +224,46 @@ pub fn vision() -> section::Section<crate::pages::Message> {
|
||||||
text::body(status_text).wrapping(Wrapping::Word),
|
text::body(status_text).wrapping(Wrapping::Word),
|
||||||
page.wayland_available
|
page.wayland_available
|
||||||
.is_some()
|
.is_some()
|
||||||
.then_some(crate::pages::Message::Page(magnifier_entity)),
|
.then_some(crate::pages::Message::Page(magnifier_entity).into()),
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
.add(
|
.add(settings::item::builder(&descriptions[high_contrast])
|
||||||
cosmic::Element::from(
|
.toggler(page.theme.is_high_contrast, |enable| Message::HighContrast(enable).into()))
|
||||||
settings::item::builder(&descriptions[high_contrast])
|
.add(settings::item::builder(&descriptions[invert_colors]).control(
|
||||||
.toggler(page.theme.is_high_contrast, Message::HighContrast),
|
|
||||||
)
|
|
||||||
.map(crate::pages::Message::Accessibility),
|
|
||||||
)
|
|
||||||
.add(
|
|
||||||
cosmic::Element::from(
|
|
||||||
settings::item::builder(&descriptions[invert_colors]).control(
|
|
||||||
toggler(page.screen_inverted).on_toggle_maybe(
|
toggler(page.screen_inverted).on_toggle_maybe(
|
||||||
page.wayland_available
|
page.wayland_available
|
||||||
.is_some_and(|ver| ver >= 2)
|
.is_some_and(|ver| ver >= 2)
|
||||||
.then_some(Message::SetScreenInverted),
|
.then_some(|set| Message::SetScreenInverted(set).into()),
|
||||||
),
|
),
|
||||||
),
|
))
|
||||||
)
|
.add(settings::item::builder(&descriptions[color_filters]).control(
|
||||||
.map(crate::pages::Message::Accessibility),
|
|
||||||
)
|
|
||||||
.add({
|
|
||||||
cosmic::Element::from(
|
|
||||||
settings::item::builder(&descriptions[color_filters]).control(
|
|
||||||
toggler(page.screen_filter_active).on_toggle_maybe(
|
toggler(page.screen_filter_active).on_toggle_maybe(
|
||||||
page.wayland_available
|
page.wayland_available
|
||||||
.is_some_and(|ver| ver >= 2)
|
.is_some_and(|ver| ver >= 2)
|
||||||
.then_some(Message::SetScreenFilterActive),
|
.then_some(|set| Message::SetScreenFilterActive(set).into()),
|
||||||
),
|
),
|
||||||
),
|
))
|
||||||
)
|
|
||||||
.map(crate::pages::Message::Accessibility)
|
|
||||||
})
|
|
||||||
.add({
|
.add({
|
||||||
let selections = if page.screen_filter_selection == ColorFilter::Unknown {
|
let selections = if page.screen_filter_selection == ColorFilter::Unknown {
|
||||||
&page.screen_filter_selections
|
&page.screen_filter_selections
|
||||||
} else {
|
} else {
|
||||||
&page.screen_filter_selections[0..4]
|
&page.screen_filter_selections[0..4]
|
||||||
};
|
};
|
||||||
cosmic::Element::from(
|
|
||||||
settings::item::builder(&descriptions[color_filter_type]).control(
|
let dropdown = dropdown::popup_dropdown::<_, crate::pages::Message, crate::pages::Message>(
|
||||||
dropdown::popup_dropdown(
|
selections,
|
||||||
selections,
|
Some(page.screen_filter_selection as usize),
|
||||||
Some(page.screen_filter_selection as usize),
|
move |idx| {
|
||||||
move |idx| {
|
let filter = ColorFilter::from_usize(idx).unwrap_or_default();
|
||||||
let filter = ColorFilter::from_usize(idx).unwrap_or_default();
|
Message::SetScreenFilterSelection(filter).into()
|
||||||
Message::SetScreenFilterSelection(filter)
|
},
|
||||||
},
|
cosmic::iced::window::Id::RESERVED,
|
||||||
cosmic::iced::window::Id::RESERVED,
|
|action| Message::Surface(action).into(),
|
||||||
Message::Surface,
|
|a| a
|
||||||
|a| {
|
);
|
||||||
crate::app::Message::PageMessage(
|
|
||||||
crate::pages::Message::Accessibility(a),
|
settings::item::builder(&descriptions[color_filter_type])
|
||||||
)
|
.control(dropdown)
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
.map(crate::pages::Message::Accessibility)
|
|
||||||
})
|
})
|
||||||
.into()
|
.into()
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue