Selaa lähdekoodia

LibGUI: Improve calculated_min_size() for single-line TextEditor

TextBox now shrinks to fit the current font based on preferred line
height, maintaining its historical minimum size of 40x22
thankyouverycool 2 vuotta sitten
vanhempi
commit
9c2bcffe83

+ 2 - 2
Userland/Libraries/LibGUI/TextBox.cpp

@@ -22,8 +22,8 @@ namespace GUI {
 TextBox::TextBox()
 TextBox::TextBox()
     : TextEditor(TextEditor::SingleLine)
     : TextEditor(TextEditor::SingleLine)
 {
 {
-    set_min_size({ 40, 22 });
-    set_preferred_size({ SpecialDimension::OpportunisticGrow, 22 });
+    set_min_size({ SpecialDimension::Shrink });
+    set_preferred_size({ SpecialDimension::OpportunisticGrow, SpecialDimension::Shrink });
 }
 }
 
 
 void TextBox::keydown_event(GUI::KeyEvent& event)
 void TextBox::keydown_event(GUI::KeyEvent& event)

+ 4 - 1
Userland/Libraries/LibGUI/TextEditor.cpp

@@ -893,8 +893,11 @@ Optional<UISize> TextEditor::calculated_min_size() const
 {
 {
     if (is_multi_line())
     if (is_multi_line())
         return AbstractScrollableWidget::calculated_min_size();
         return AbstractScrollableWidget::calculated_min_size();
+    auto constexpr cursor_padding = 4;
     auto m = content_margins();
     auto m = content_margins();
-    return UISize { m.left() + m.right(), m.top() + m.bottom() };
+    auto width = max(40, m.horizontal_total());
+    auto height = max(22, line_height() + m.vertical_total() + cursor_padding);
+    return UISize { width, height };
 }
 }
 
 
 void TextEditor::select_all()
 void TextEditor::select_all()