11use super :: options:: { CompressionMode , SessionOptions } ;
22use crate :: draw:: frame:: { MAX_COMPOUND_DEPTH , ShapeId } ;
33use crate :: draw:: { Color , EraserKind , Frame } ;
4- use crate :: input:: EraserMode ;
54use crate :: input:: {
6- InputState ,
5+ EraserMode , InputState , Tool ,
76 board_mode:: BoardMode ,
87 state:: { MAX_STROKE_THICKNESS , MIN_STROKE_THICKNESS } ,
98} ;
@@ -56,6 +55,12 @@ pub struct ToolStateSnapshot {
5655 pub eraser_kind : EraserKind ,
5756 #[ serde( default = "default_eraser_mode_for_snapshot" ) ]
5857 pub eraser_mode : EraserMode ,
58+ #[ serde( default ) ]
59+ pub marker_opacity : Option < f64 > ,
60+ #[ serde( default ) ]
61+ pub fill_enabled : Option < bool > ,
62+ #[ serde( default ) ]
63+ pub tool_override : Option < Tool > ,
5964 pub current_font_size : f64 ,
6065 pub text_background_enabled : bool ,
6166 pub arrow_length : f64 ,
@@ -74,6 +79,9 @@ impl ToolStateSnapshot {
7479 eraser_size : input. eraser_size ,
7580 eraser_kind : input. eraser_kind ,
7681 eraser_mode : input. eraser_mode ,
82+ marker_opacity : Some ( input. marker_opacity ) ,
83+ fill_enabled : Some ( input. fill_enabled ) ,
84+ tool_override : input. tool_override ( ) ,
7785 current_font_size : input. current_font_size ,
7886 text_background_enabled : input. text_background_enabled ,
7987 arrow_length : input. arrow_length ,
@@ -575,30 +583,46 @@ pub fn apply_snapshot(input: &mut InputState, snapshot: SessionSnapshot, options
575583
576584 if options. restore_tool_state {
577585 if let Some ( tool_state) = snapshot. tool_state {
586+ let marker_opacity = tool_state. marker_opacity . unwrap_or ( input. marker_opacity ) ;
587+ let fill_enabled = tool_state. fill_enabled . unwrap_or ( input. fill_enabled ) ;
578588 log:: info!(
579- "Restoring tool state: color={:?}, thickness={:.2}, eraser[size={:.2}, kind={:?}, mode={:?}], font_size={:.1}, text_bg={}, arrow[length={:.1}, angle={:.1}], status_bar={}, prev_color={:?}" ,
589+ "Restoring tool state: color={:?}, thickness={:.2}, eraser[size={:.2}, kind={:?}, mode={:?}], marker_opacity={:.2}, fill_enabled={}, tool_override={:?}, font_size={:.1}, text_bg={}, arrow[length={:.1}, angle={:.1}], status_bar={}, prev_color={:?}" ,
580590 tool_state. current_color,
581591 tool_state. current_thickness,
582592 tool_state. eraser_size,
583593 tool_state. eraser_kind,
584594 tool_state. eraser_mode,
595+ marker_opacity,
596+ fill_enabled,
597+ tool_state. tool_override,
585598 tool_state. current_font_size,
586599 tool_state. text_background_enabled,
587600 tool_state. arrow_length,
588601 tool_state. arrow_angle,
589602 tool_state. show_status_bar,
590603 tool_state. board_previous_color
591604 ) ;
592- input. current_color = tool_state. current_color ;
593- input. current_thickness = tool_state
594- . current_thickness
595- . clamp ( MIN_STROKE_THICKNESS , MAX_STROKE_THICKNESS ) ;
596- input. eraser_size = tool_state
597- . eraser_size
598- . clamp ( MIN_STROKE_THICKNESS , MAX_STROKE_THICKNESS ) ;
605+ let _ = input. set_color ( tool_state. current_color ) ;
606+ let _ = input. set_thickness (
607+ tool_state
608+ . current_thickness
609+ . clamp ( MIN_STROKE_THICKNESS , MAX_STROKE_THICKNESS ) ,
610+ ) ;
611+ let _ = input. set_eraser_size (
612+ tool_state
613+ . eraser_size
614+ . clamp ( MIN_STROKE_THICKNESS , MAX_STROKE_THICKNESS ) ,
615+ ) ;
599616 input. eraser_kind = tool_state. eraser_kind ;
600- input. eraser_mode = tool_state. eraser_mode ;
601- input. current_font_size = tool_state. current_font_size . clamp ( 8.0 , 72.0 ) ;
617+ let _ = input. set_eraser_mode ( tool_state. eraser_mode ) ;
618+ if let Some ( opacity) = tool_state. marker_opacity {
619+ let _ = input. set_marker_opacity ( opacity) ;
620+ }
621+ if let Some ( fill_enabled) = tool_state. fill_enabled {
622+ let _ = input. set_fill_enabled ( fill_enabled) ;
623+ }
624+ let _ = input. set_tool_override ( tool_state. tool_override ) ;
625+ let _ = input. set_font_size ( tool_state. current_font_size . clamp ( 8.0 , 72.0 ) ) ;
602626 input. text_background_enabled = tool_state. text_background_enabled ;
603627 input. arrow_length = tool_state. arrow_length . clamp ( 5.0 , 50.0 ) ;
604628 input. arrow_angle = tool_state. arrow_angle . clamp ( 15.0 , 60.0 ) ;
0 commit comments