Browse Source

LibGUI: Calculate maximum primary size for Splitter resizees

thankyouverycool 3 years ago
parent
commit
6f2a304971
2 changed files with 8 additions and 0 deletions
  1. 6 0
      Userland/Libraries/LibGUI/Splitter.cpp
  2. 2 0
      Userland/Libraries/LibGUI/Splitter.h

+ 6 - 0
Userland/Libraries/LibGUI/Splitter.cpp

@@ -139,6 +139,12 @@ void Splitter::mousedown_event(MouseEvent& event)
     m_first_resizee_start_size = m_first_resizee->size();
     m_second_resizee_start_size = m_second_resizee->size();
     m_resize_origin = event.position();
+
+    VERIFY(layout());
+    auto spacer = layout()->spacing();
+    auto splitter = size().primary_size_for_orientation(m_orientation);
+    m_first_resizee_max_size = splitter - spacer - m_second_resizee->calculated_min_size().value_or({ 0, 0 }).primary_size_for_orientation(m_orientation).as_int();
+    m_second_resizee_max_size = splitter - spacer - m_first_resizee->calculated_min_size().value_or({ 0, 0 }).primary_size_for_orientation(m_orientation).as_int();
 }
 
 Gfx::IntRect Splitter::rect_between_widgets(GUI::Widget const& first_widget, GUI::Widget const& second_widget, bool honor_grabbable_margins) const

+ 2 - 0
Userland/Libraries/LibGUI/Splitter.h

@@ -59,6 +59,8 @@ private:
     int m_second_resizee_minimum_size { 0 };
     FixedResizee m_fixed_resizee { FixedResizee::First };
     size_t m_last_child_count { 0 };
+    int m_first_resizee_max_size { 0 };
+    int m_second_resizee_max_size { 0 };
 
     void recompute_grabbables();