MCPcopy Index your code
hub / github.com/RizeCrime/linuxblaster_control / sbx_features

Function sbx_features

src/app.rs:273–355  ·  view source on GitHub ↗
(blaster: &BlasterXG6, ui: &mut egui::Ui)

Source from the content-addressed store, hash-verified

271}
272
273fn sbx_features(blaster: &BlasterXG6, ui: &mut egui::Ui) {
274 let eq_enabled = blaster.feature(FeatureId::EqToggle).as_bool();
275
276 ui.vertical_centered_justified(|ui| {
277 ui.horizontal(|ui| {
278 ui.label(RichText::new("SBX Features").color(Color32::GRAY));
279 });
280 ui.separator();
281
282 Grid::new("sbx_grid").show(ui, |ui| {
283 for &toggle_id in FeatureId::SBX_TOGGLES {
284 let toggle_feature = blaster.feature(toggle_id);
285 let slider_id = toggle_id
286 .paired_slider()
287 .expect("SBX toggle must have a paired slider");
288 let slider_feature = blaster.feature(slider_id);
289 let is_percentage = matches!(slider_id.value_kind(), ValueKind::Percentage);
290 let mut slider_value = if is_percentage {
291 slider_feature.value() * 100.0
292 } else {
293 slider_feature.value()
294 };
295
296 let toggle = toggle_button!(
297 ui,
298 toggle_feature.as_bool(),
299 toggle_feature.id.display_name(),
300 width = full
301 );
302
303 let drag_value = ui.add(drag_value!(
304 &mut slider_value
305 ));
306 let slider = ui.add(slider!(
307 &mut slider_value,
308 vertical = false,
309 ));
310 if toggle.clicked() {
311 let _ = blaster.set_feature(toggle_id, None);
312 }
313 // do not simplify this.
314 // only `.changed()` will trigger even when the slider modifies itself
315 // for example when it rounds the number (which is necessary for the GUI)
316 if (drag_value.changed() || slider.changed())
317 // to get the behavior I want, this is sadly necessary
318 && (drag_value.dragged()
319 || drag_value.drag_stopped()
320 || drag_value.lost_focus()
321 || slider.dragged()
322 || slider.drag_stopped())
323 {
324 let write_value = if is_percentage {
325 slider_value / 100.0
326 } else {
327 slider_value
328 };
329 let _ = blaster.set_feature(slider_id, Some(write_value));
330 }

Callers 1

sbx_paneFunction · 0.85

Calls 5

as_boolMethod · 0.80
featureMethod · 0.80
paired_sliderMethod · 0.80
valueMethod · 0.80
set_featureMethod · 0.80

Tested by

no test coverage detected