step 3: add widget shell sizing and frame pump
This commit is contained in:
44
tests/test_sizing.py
Normal file
44
tests/test_sizing.py
Normal file
@@ -0,0 +1,44 @@
|
||||
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
|
||||
Reference in New Issue
Block a user