https://gcc.gnu.org/g:cda7145fa9e97f9f710a09339ea001fccb2662a2
commit r16-1266-gcda7145fa9e97f9f710a09339ea001fccb2662a2 Author: David Malcolm <dmalc...@redhat.com> Date: Fri Jun 6 13:41:27 2025 -0400 text-art: allow wrapper_widget to have no child During prototyping a feature I found it useful for text_art::wrapper_widget to be able to not have a child. gcc/ChangeLog: * text-art/widget.cc (selftest::test_empty_wrapper_widget): New. (selftest::text_art_widget_cc_tests): Call it. * text-art/widget.h (text_art::wrapper_widget::calc_req_size): Gracefully handle m_child being null. (text_art::wrapper_widget::update_child_alloc_rects): Likewise. (text_art::wrapper_widget::paint_to_canvas): Likewise. Signed-off-by: David Malcolm <dmalc...@redhat.com> Diff: --- gcc/text-art/widget.cc | 10 ++++++++++ gcc/text-art/widget.h | 11 ++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/gcc/text-art/widget.cc b/gcc/text-art/widget.cc index 3c68018c3b54..5d3e5178484c 100644 --- a/gcc/text-art/widget.cc +++ b/gcc/text-art/widget.cc @@ -199,6 +199,15 @@ test_wrapper_widget () "BBB\n")); } +static void +test_empty_wrapper_widget () +{ + style_manager sm; + wrapper_widget w (nullptr); + canvas c (w.to_canvas (sm)); + ASSERT_CANVAS_STREQ (c, false, ""); +} + static void test_vbox_1 () { @@ -263,6 +272,7 @@ text_art_widget_cc_tests () test_test_widget (); test_text_widget (); test_wrapper_widget (); + test_empty_wrapper_widget (); test_vbox_1 (); test_vbox_2 (); test_canvas_widget (); diff --git a/gcc/text-art/widget.h b/gcc/text-art/widget.h index 55655ebfd62a..ab7b1d3c4ecc 100644 --- a/gcc/text-art/widget.h +++ b/gcc/text-art/widget.h @@ -146,15 +146,20 @@ class wrapper_widget : public widget } canvas::size_t calc_req_size () override { - return m_child->get_req_size (); + if (m_child) + return m_child->get_req_size (); + else + return canvas::size_t (0,0); } void update_child_alloc_rects () override { - m_child->set_alloc_rect (get_alloc_rect ()); + if (m_child) + m_child->set_alloc_rect (get_alloc_rect ()); } void paint_to_canvas (canvas &canvas) override { - m_child->paint_to_canvas (canvas); + if (m_child) + m_child->paint_to_canvas (canvas); } private: std::unique_ptr<widget> m_child;