From: David Malcolm Date: Fri, 6 Jun 2025 17:41:27 +0000 (-0400) Subject: text-art: allow wrapper_widget to have no child X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cda7145fa9e97f9f710a09339ea001fccb2662a2;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/text-art/widget.cc b/gcc/text-art/widget.cc index 3c68018c3b5..5d3e5178484 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 55655ebfd62..ab7b1d3c4ec 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 m_child;