[haiku-commits] Change in haiku[master]: Interface Kit: fix menu resizing when scrolling is enabled

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 4 Mar 2020 07:46:14 +0000

From X512 <danger_mail@xxxxxxx>:

X512 has uploaded this change for review. ( 
https://review.haiku-os.org/c/haiku/+/2310 ;)


Change subject: Interface Kit: fix menu resizing when scrolling is enabled
......................................................................

Interface Kit: fix menu resizing when scrolling is enabled

BMenuWindow::Attach/DetachScrollers can be called when scrollers are already 
attached/detached and it should handle this case properly.

Call BMenuWindow::DetachScrollers when scrolling is not needed anymore.

Fixes #8513.

Change-Id: I1f70b63d75106cf33ab1f72d34e221a54b45a75e
---
M src/kits/interface/Menu.cpp
M src/kits/interface/MenuWindow.cpp
2 files changed, 28 insertions(+), 7 deletions(-)



  git pull ssh://git.haiku-os.org:22/haiku refs/changes/10/2310/1

diff --git a/src/kits/interface/Menu.cpp b/src/kits/interface/Menu.cpp
index 079918b..e2c02f7 100644
--- a/src/kits/interface/Menu.cpp
+++ b/src/kits/interface/Menu.cpp
@@ -2931,6 +2931,9 @@

        if (fItems.CountItems() > 0) {
                if (!scroll) {
+                       if (fLayout == B_ITEMS_IN_COLUMN)
+                               window->DetachScrollers();
+
                        window->ResizeTo(Bounds().Width(), Bounds().Height());
                } else {
                        BScreen screen(window);
diff --git a/src/kits/interface/MenuWindow.cpp 
b/src/kits/interface/MenuWindow.cpp
index e8e5eeb..56cb493 100644
--- a/src/kits/interface/MenuWindow.cpp
+++ b/src/kits/interface/MenuWindow.cpp
@@ -76,7 +76,8 @@

 BMenuScroller::BMenuScroller(BRect frame)
        :
-       BView(frame, "menu scroller", 0, B_WILL_DRAW | B_FRAME_EVENTS),
+       BView(frame, "menu scroller", 0, B_WILL_DRAW | B_FRAME_EVENTS
+               | B_FULL_UPDATE_ON_RESIZE),
        fEnabled(false)
 {
        SetViewUIColor(B_MENU_BACKGROUND_COLOR);
@@ -298,6 +299,17 @@
        fMenu->MakeFocus(true);

        BRect frame = Bounds();
+       float newLimit = fMenu->Bounds().Height()
+               - (frame.Height() - 2 * kScrollerHeight);
+
+       // Check that scrollers are already attached.
+       if (fUpperScroller == NULL)
+               fValue = 0;
+       else {
+               if (fValue > newLimit)
+                       _ScrollBy(newLimit - fValue);
+       }
+       fLimit = newLimit;

        if (fUpperScroller == NULL) {
                fUpperScroller = new UpperScroller(
@@ -312,14 +324,15 @@
                AddChild(fLowerScroller);
        }

-       fUpperScroller->SetEnabled(false);
-       fLowerScroller->SetEnabled(true);
+       fUpperScroller->ResizeTo(frame.right, kScrollerHeight - 1);
+       fLowerScroller->ResizeTo(frame.right, kScrollerHeight - 1);

-       fMenuFrame->ResizeBy(0, -2 * kScrollerHeight);
-       fMenuFrame->MoveBy(0, kScrollerHeight);
+       fUpperScroller->SetEnabled(fValue > 0);
+       fLowerScroller->SetEnabled(fValue < fLimit);

-       fValue = 0;
-       fLimit = fMenu->Bounds().Height() - (frame.Height() - 2 * 
kScrollerHeight);
+       fMenuFrame->ResizeTo(frame.Width(), frame.Height() - 2 * 
kScrollerHeight);
+       fMenuFrame->MoveTo(0, kScrollerHeight);
+
 }


@@ -342,6 +355,11 @@
                delete fUpperScroller;
                fUpperScroller = NULL;
        }
+
+       BRect frame = Bounds();
+
+       fMenuFrame->ResizeTo(frame.Width(), frame.Height());
+       fMenuFrame->MoveTo(0, 0);
 }



--
To view, visit https://review.haiku-os.org/c/haiku/+/2310
To unsubscribe, or for help writing mail filters, visit 
https://review.haiku-os.org/settings

Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I1f70b63d75106cf33ab1f72d34e221a54b45a75e
Gerrit-Change-Number: 2310
Gerrit-PatchSet: 1
Gerrit-Owner: X512 <danger_mail@xxxxxxx>
Gerrit-MessageType: newchange

Other related posts:

  • » [haiku-commits] Change in haiku[master]: Interface Kit: fix menu resizing when scrolling is enabled - Gerrit