11// SPDX-License-Identifier: GPL-3.0-or-later
22// Copyright (C) 2026 Maika Namuo
33
4- use super :: processor:: OscilloscopeSnapshot ;
4+ use super :: processor:: { OscilloscopeSnapshot , TRACE_COUNT } ;
55use super :: render:: { OscilloscopeParams , OscilloscopePrimitive } ;
66use crate :: persistence:: settings:: OscilloscopeSettings ;
77use crate :: util:: color:: color_to_rgba;
88use crate :: visuals:: palettes;
99use iced:: Color ;
1010
11- const OSCILLOSCOPE_PALETTE_SIZE : usize = 1 ;
11+ const OSCILLOSCOPE_PALETTE_SIZE : usize = TRACE_COUNT ;
1212const MAX_PERSISTENCE : f32 = 0.98 ;
1313const FILL_ALPHA : f32 = 0.15 ;
1414
@@ -17,6 +17,7 @@ pub(in crate::visuals) struct OscilloscopeState {
1717 snapshot : OscilloscopeSnapshot ,
1818 pub ( in crate :: visuals) colors : [ Color ; OSCILLOSCOPE_PALETTE_SIZE ] ,
1919 pub ( in crate :: visuals) persistence : f32 ,
20+ pub ( in crate :: visuals) stacked : bool ,
2021 key : u64 ,
2122}
2223
@@ -27,16 +28,18 @@ impl OscilloscopeState {
2728 snapshot : OscilloscopeSnapshot :: default ( ) ,
2829 colors : palettes:: oscilloscope:: COLORS ,
2930 persistence : defaults. persistence ,
31+ stacked : defaults. stacked ,
3032 key : crate :: visuals:: next_key ( ) ,
3133 }
3234 }
3335
34- pub fn update_view_settings ( & mut self , persistence : f32 , reset_snapshot : bool ) {
36+ pub fn update_view_settings ( & mut self , persistence : f32 , stacked : bool , reset_snapshot : bool ) {
3537 self . persistence = if persistence. is_finite ( ) {
3638 persistence. clamp ( 0.0 , 1.0 )
3739 } else {
3840 OscilloscopeSettings :: default ( ) . persistence
3941 } ;
42+ self . stacked = stacked;
4043 if reset_snapshot {
4144 self . snapshot = OscilloscopeSnapshot :: default ( ) ;
4245 }
@@ -53,6 +56,7 @@ impl OscilloscopeState {
5356 && snapshot. channels == self . snapshot . channels
5457 && snapshot. samples_per_channel == self . snapshot . samples_per_channel
5558 && snapshot. samples . len ( ) == self . snapshot . samples . len ( )
59+ && snapshot. slots [ ..snapshot. channels ] == self . snapshot . slots [ ..self . snapshot . channels ]
5660 {
5761 let persistence = self . persistence . clamp ( 0.0 , MAX_PERSISTENCE ) ;
5862 if persistence > f32:: EPSILON {
@@ -80,8 +84,10 @@ impl OscilloscopeState {
8084 bounds,
8185 channels,
8286 samples_per_channel,
87+ slots : self . snapshot . slots ,
8388 samples : self . snapshot . samples . clone ( ) ,
84- color : color_to_rgba ( self . colors [ 0 ] ) ,
89+ colors : self . colors . map ( color_to_rgba) ,
90+ stacked : self . stacked ,
8591 fill_alpha : FILL_ALPHA ,
8692 } )
8793 }
0 commit comments