persiitent styles
Python CI / test (push) Successful in 4m9s

This commit is contained in:
2025-11-08 19:31:05 +01:00
parent 11dc30ba8d
commit 4811367905
6 changed files with 661 additions and 1 deletions
+68
View File
@@ -706,6 +706,64 @@ class EbookReader:
'font_scale': self.base_font_scale
}
# ===== Settings Persistence =====
def get_current_settings(self) -> Dict[str, Any]:
"""
Get current rendering settings.
Returns:
Dictionary with all current settings
"""
return {
'font_scale': self.base_font_scale,
'line_spacing': self.page_style.line_spacing if self.manager else 5,
'inter_block_spacing': self.page_style.inter_block_spacing if self.manager else 15,
'word_spacing': self.page_style.word_spacing if self.manager else 0
}
def apply_settings(self, settings: Dict[str, Any]) -> bool:
"""
Apply rendering settings from a settings dictionary.
This should be called after loading a book to restore user preferences.
Args:
settings: Dictionary with settings (font_scale, line_spacing, etc.)
Returns:
True if settings applied successfully, False otherwise
"""
if not self.manager:
return False
try:
# Apply font scale
font_scale = settings.get('font_scale', 1.0)
if font_scale != self.base_font_scale:
self.set_font_size(font_scale)
# Apply line spacing
line_spacing = settings.get('line_spacing', 5)
if line_spacing != self.page_style.line_spacing:
self.set_line_spacing(line_spacing)
# Apply inter-block spacing
inter_block_spacing = settings.get('inter_block_spacing', 15)
if inter_block_spacing != self.page_style.inter_block_spacing:
self.set_inter_block_spacing(inter_block_spacing)
# Apply word spacing
word_spacing = settings.get('word_spacing', 0)
if word_spacing != self.page_style.word_spacing:
self.set_word_spacing(word_spacing)
return True
except Exception as e:
print(f"Error applying settings: {e}")
return False
# ===== Gesture Handling =====
# All business logic for touch input is handled here
@@ -1066,6 +1124,16 @@ class EbookReader:
"word_spacing": self.page_style.word_spacing
})
# Parse "action:command" format for other actions
elif link_target.startswith("action:"):
action = link_target.split(":", 1)[1]
if action == "back_to_library":
# Close the overlay first
self.close_overlay()
# Return a special action for the application to handle
return GestureResponse(ActionType.BACK_TO_LIBRARY, {})
# Not a setting control, close overlay
self.close_overlay()
return GestureResponse(ActionType.OVERLAY_CLOSED, {})