from __future__ import annotations from dpg_map.sizing import SizeMeasurement, apply_size_measurement, effective_draw_size from dpg_map.state import DirtyFlags, create_map_state def test_size_measurement_tracks_last_nonzero_size() -> None: state = create_map_state(tag="size-last-nonzero") first = apply_size_measurement(state, SizeMeasurement(width=640, height=360, visible=True)) hidden = apply_size_measurement(state, SizeMeasurement(width=0, height=0, visible=False)) assert first.changed is True assert state.measured_width == 0 assert state.measured_height == 0 assert state.last_nonzero_width == 640 assert state.last_nonzero_height == 360 assert hidden.became_hidden is True assert effective_draw_size(state) == (640, 360) def test_zero_size_does_not_permanently_collapse_map() -> None: state = create_map_state(tag="size-reappears") apply_size_measurement(state, SizeMeasurement(width=500, height=300, visible=True)) apply_size_measurement(state, SizeMeasurement(width=0, height=0, visible=False)) update = apply_size_measurement(state, SizeMeasurement(width=700, height=450, visible=True)) assert update.became_visible is True assert update.effective_width == 700 assert update.effective_height == 450 assert state.last_nonzero_width == 700 assert state.last_nonzero_height == 450 def test_resize_marks_size_dirty() -> None: state = create_map_state(tag="size-dirty") state.dirty = DirtyFlags.NONE apply_size_measurement(state, SizeMeasurement(width=320, height=240, visible=True)) assert state.dirty & DirtyFlags.SIZE assert state.dirty & DirtyFlags.TILES assert state.dirty & DirtyFlags.OVERLAYS