]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
text-art: allow wrapper_widget to have no child
authorDavid Malcolm <dmalcolm@redhat.com>
Fri, 6 Jun 2025 17:41:27 +0000 (13:41 -0400)
committerDavid Malcolm <dmalcolm@redhat.com>
Fri, 6 Jun 2025 17:41:27 +0000 (13:41 -0400)
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 <dmalcolm@redhat.com>
gcc/text-art/widget.cc
gcc/text-art/widget.h

index 3c68018c3b54d48cef88c8becdb1c403bd75ab3b..5d3e5178484c295989988be1a30a5cb3f8e27d1f 100644 (file)
@@ -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 ();
index 55655ebfd62aa514fb89c91a6861c08145d0bc6a..ab7b1d3c4eccadff95658dbc64646a2e0c9a9fdb 100644 (file)
@@ -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;