Coverage for paintmaskanimator/session_state.py: 92%
31 statements
« prev ^ index » next coverage.py v7.17.0, created at 2026-11-02 04:50 +0000
« prev ^ index » next coverage.py v7.17.0, created at 2026-11-02 04:50 +0000
1"""Restore painting controls and the linked reference view across launches."""
3import math
5from PySide6.QtCore import QPointF
7from . import config
10def _number(record, key, default, minimum, maximum):
11 try:
12 value = float(record.get(key, default))
13 except (TypeError, ValueError, OverflowError):
14 return default
15 return max(minimum, min(maximum, value)) if math.isfinite(value) else default
18def save(window):
19 view = window.subview
20 config.set_value("last_paint_session", {
21 "brush_size": window.tools.brush_size_spinbox.value(),
22 "subview": {
23 "path": str(view._path.resolve()) if view._path is not None else None,
24 "zoom": view.zoom_slider.value(),
25 "rotation": view.rotation_slider.value(),
26 "pan_x": view._pan.x(),
27 "pan_y": view._pan.y(),
28 "open": not window.subview_dock.isClosed(),
29 },
30 })
33def restore(window):
34 record = config.get_value("last_paint_session", {})
35 if not isinstance(record, dict): 35 ↛ 36line 35 didn't jump to line 36 because the condition on line 35 was never true
36 return
37 spin = window.tools.brush_size_spinbox
38 spin.setValue(_number(record, "brush_size", 8.0, spin.minimum(), spin.maximum()))
39 reference = record.get("subview")
40 if not isinstance(reference, dict):
41 return
42 view = window.subview
43 path = reference.get("path")
44 if isinstance(path, str) and path and view.load_path(path):
45 view.zoom_slider.setValue(int(_number(reference, "zoom", 100, 5, 1600)))
46 slider = view.rotation_slider
47 slider.setValue(int(_number(reference, "rotation", 0, slider.minimum(), slider.maximum())))
48 view._pan = QPointF(
49 _number(reference, "pan_x", 0, -1e7, 1e7),
50 _number(reference, "pan_y", 0, -1e7, 1e7),
51 )
52 view.viewer.update()
53 if isinstance(reference.get("open"), bool): 53 ↛ exitline 53 didn't return from function 'restore' because the condition on line 53 was always true
54 window.subview_dock.toggleView(reference["open"])