From 8b93f21c22d6e4a1787260efa84561c79c7142d1 Mon Sep 17 00:00:00 2001 From: Philippe Saint-Pierre Date: Sat, 12 Sep 2009 03:09:52 +0000 Subject: [PATCH] Expander: Smarter window resize * Rather than enlarging the window on (potentially) every line, simply keep the largest delta and use it only once at the end of the listing. Ref: r33073 and ticket #3797. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33075 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/expander/ExpanderWindow.cpp | 10 +++++++--- src/apps/expander/ExpanderWindow.h | 2 ++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/apps/expander/ExpanderWindow.cpp b/src/apps/expander/ExpanderWindow.cpp index 27bce4ec9f..240d9c0917 100644 --- a/src/apps/expander/ExpanderWindow.cpp +++ b/src/apps/expander/ExpanderWindow.cpp @@ -365,9 +365,8 @@ ExpanderWindow::MessageReceived(BMessage *msg) // expand the window if we need... float delta = fListingText->StringWidth(string.String()) - fListingText->Frame().Width(); - if (delta > 0) { - ResizeTo(Frame().Width() + delta, - Frame().Height()); + if (delta > fLargestDelta) { + fLargestDelta = delta; } fListingText->Insert(string.String()); } @@ -385,6 +384,9 @@ ExpanderWindow::MessageReceived(BMessage *msg) } else if (fListingStarted){ fSourceChanged = false; StopListing(); + if (fLargestDelta > 0.0f) + ResizeBy(fLargestDelta, 0.0f); + fLargestDelta = 0.0f; } else fStatusView->SetText(""); break; @@ -597,6 +599,8 @@ ExpanderWindow::StartListing() { _UpdateWindowSize(true); + fLargestDelta = 0.0f; + if (fListingScroll->IsHidden()) fListingScroll->Show(); diff --git a/src/apps/expander/ExpanderWindow.h b/src/apps/expander/ExpanderWindow.h index 96b34091ee..ebee5ce1e3 100644 --- a/src/apps/expander/ExpanderWindow.h +++ b/src/apps/expander/ExpanderWindow.h @@ -77,6 +77,8 @@ class ExpanderWindow : public BWindow { BMessage fSettings; ExpanderPreferences *fPreferences; ExpanderRules fRules; + + float fLargestDelta; }; #endif /* EXPANDER_WINDOW_H */