Plan UI observer frame clipping

This commit is contained in:
2026-06-05 07:18:48 +02:00
parent 942c053c19
commit a104f88360
8 changed files with 407 additions and 57 deletions

View File

@@ -101,6 +101,129 @@ void resize_plan_rejects_invalid_dimensions(pp::tests::Harness& harness)
PP_EXPECT(harness, !pp::app::plan_app_resize(std::nanf(""), 720.0F));
}
void ui_observer_plan_projects_visible_clip_to_scissor(pp::tests::Harness& harness)
{
const pp::app::AppUiObserverParentClip parents[] {
{
.clip = {
.x = 0.0F,
.y = 0.0F,
.width = 80.0F,
.height = 60.0F,
},
.padding_top = 5.0F,
.padding_right = 5.0F,
.padding_bottom = 5.0F,
.padding_left = 5.0F,
},
};
const auto plan = pp::app::plan_app_ui_observer(
true,
true,
false,
{
.x = 10.0F,
.y = 20.0F,
.width = 100.0F,
.height = 50.0F,
},
parents,
540.0F,
2.0F,
10.0F,
5.0F);
PP_EXPECT(harness, plan);
if (plan) {
PP_EXPECT(harness, plan.value().draw_node);
PP_EXPECT(harness, plan.value().notify_enter_screen);
PP_EXPECT(harness, !plan.value().notify_leave_screen);
PP_EXPECT(harness, plan.value().next_on_screen);
PP_EXPECT(harness, plan.value().visible_clip.width == 65.0F);
PP_EXPECT(harness, plan.value().visible_clip.height == 35.0F);
PP_EXPECT(harness, plan.value().scissor_x == 28);
PP_EXPECT(harness, plan.value().scissor_y == 433);
PP_EXPECT(harness, plan.value().scissor_width == 134);
PP_EXPECT(harness, plan.value().scissor_height == 74);
}
}
void ui_observer_plan_notifies_leave_for_clipped_visible_node(pp::tests::Harness& harness)
{
const pp::app::AppUiObserverParentClip parents[] {
{
.clip = {
.x = 0.0F,
.y = 0.0F,
.width = 10.0F,
.height = 10.0F,
},
},
};
const auto plan = pp::app::plan_app_ui_observer(
true,
true,
true,
{
.x = 100.0F,
.y = 100.0F,
.width = 10.0F,
.height = 10.0F,
},
parents,
540.0F,
1.0F,
0.0F,
0.0F);
PP_EXPECT(harness, plan);
if (plan) {
PP_EXPECT(harness, !plan.value().draw_node);
PP_EXPECT(harness, plan.value().notify_leave_screen);
PP_EXPECT(harness, !plan.value().next_on_screen);
}
}
void ui_observer_plan_rejects_bad_geometry(pp::tests::Harness& harness)
{
PP_EXPECT(
harness,
!pp::app::plan_app_ui_observer(
true,
true,
false,
{
.x = 0.0F,
.y = 0.0F,
.width = 10.0F,
.height = 10.0F,
},
{},
540.0F,
0.0F,
0.0F,
0.0F));
PP_EXPECT(
harness,
!pp::app::plan_app_ui_observer(
true,
true,
false,
{
.x = std::nanf(""),
.y = 0.0F,
.width = 10.0F,
.height = 10.0F,
},
{},
540.0F,
1.0F,
0.0F,
0.0F));
}
} // namespace
int main()
@@ -115,5 +238,8 @@ int main()
harness.run("tick plan selects available layouts", tick_plan_selects_available_layouts);
harness.run("resize plan projects render target and redraw", resize_plan_projects_render_target_and_redraw);
harness.run("resize plan rejects invalid dimensions", resize_plan_rejects_invalid_dimensions);
harness.run("ui observer plan projects visible clip to scissor", ui_observer_plan_projects_visible_clip_to_scissor);
harness.run("ui observer plan notifies leave for clipped visible node", ui_observer_plan_notifies_leave_for_clipped_visible_node);
harness.run("ui observer plan rejects bad geometry", ui_observer_plan_rejects_bad_geometry);
return harness.finish();
}