From 32bc3e2c0faa35d385162d99e3e0cd2ff46f4011 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sun, 24 Nov 2019 13:07:30 +0100 Subject: [PATCH] ProcessController: fix bars height computation The previous code used a fixed margin, which would lead to too small bars with small font sizes (the bar content would not even be visible). Instead, use the font height as the base for the bar height, which allows us to use the same code everywhere, no matter the menu item height (which can vary depending on if there is an icon, etc) Fixes #15391. --- .../KernelMemoryBarMenuItem.cpp | 7 ++++--- .../processcontroller/MemoryBarMenuItem.cpp | 7 ++++--- src/apps/processcontroller/NoiseBarMenuItem.cpp | 10 ++++++---- src/apps/processcontroller/ProcessController.h | 1 - src/apps/processcontroller/TeamBarMenuItem.cpp | 9 +++++---- .../processcontroller/ThreadBarMenuItem.cpp | 10 ++++++---- src/apps/processcontroller/Utilities.cpp | 17 +++++++++++++++++ src/apps/processcontroller/Utilities.h | 6 +++++- 8 files changed, 47 insertions(+), 20 deletions(-) diff --git a/src/apps/processcontroller/KernelMemoryBarMenuItem.cpp b/src/apps/processcontroller/KernelMemoryBarMenuItem.cpp index a46f00a895..89cd505498 100644 --- a/src/apps/processcontroller/KernelMemoryBarMenuItem.cpp +++ b/src/apps/processcontroller/KernelMemoryBarMenuItem.cpp @@ -72,10 +72,11 @@ KernelMemoryBarMenuItem::DrawBar(bool force) BMenu* menu = Menu(); rgb_color highColor = menu->HighColor(); - // draw the bar itself - BRect cadre (frame.right - kMargin - kBarWidth, frame.top + kBarPadding, - frame.right - kMargin, frame.bottom - kBarPadding); + BFont font; + menu->GetFont(&font); + BRect cadre = bar_rect(frame, &font); + // draw the bar itself if (fLastSum < 0) force = true; if (force) { diff --git a/src/apps/processcontroller/MemoryBarMenuItem.cpp b/src/apps/processcontroller/MemoryBarMenuItem.cpp index ea0ebd237c..8c8020e0d7 100644 --- a/src/apps/processcontroller/MemoryBarMenuItem.cpp +++ b/src/apps/processcontroller/MemoryBarMenuItem.cpp @@ -116,10 +116,11 @@ MemoryBarMenuItem::DrawBar(bool force) BMenu* menu = Menu(); rgb_color highColor = menu->HighColor(); - // draw the bar itself + BFont font; + menu->GetFont(&font); + BRect rect = bar_rect(frame, &font); - BRect rect(frame.right - kMargin - kBarWidth, frame.top + kBarPadding, - frame.right - kMargin, frame.bottom - kBarPadding); + // draw the bar itself if (fWriteMemory < 0) return; diff --git a/src/apps/processcontroller/NoiseBarMenuItem.cpp b/src/apps/processcontroller/NoiseBarMenuItem.cpp index d2070bec78..6bdda1082e 100644 --- a/src/apps/processcontroller/NoiseBarMenuItem.cpp +++ b/src/apps/processcontroller/NoiseBarMenuItem.cpp @@ -22,6 +22,7 @@ #include "Catalog.h" #include "Colors.h" #include "ProcessController.h" +#include "Utilities.h" #undef B_TRANSLATION_CONTEXT #define B_TRANSLATION_CONTEXT "ProcessController" @@ -52,10 +53,11 @@ NoiseBarMenuItem::DrawBar(bool force) BRect frame = Frame(); BMenu* menu = Menu(); rgb_color highColor = menu->HighColor(); - frame.right -= 24; - frame.left = frame.right - kBarWidth; - frame.top += kBarPadding; - frame.bottom -= kBarPadding; + + BFont font; + menu->GetFont(&font); + frame = bar_rect(frame, &font); + if (fBusyWaiting < 0) return; diff --git a/src/apps/processcontroller/ProcessController.h b/src/apps/processcontroller/ProcessController.h index b32faab79b..c45f7a5a90 100644 --- a/src/apps/processcontroller/ProcessController.h +++ b/src/apps/processcontroller/ProcessController.h @@ -92,6 +92,5 @@ extern bool gInDeskbar; #define kBarWidth 100 #define kMargin 12 -#define kBarPadding 7 #endif // _PCVIEW_H_ diff --git a/src/apps/processcontroller/TeamBarMenuItem.cpp b/src/apps/processcontroller/TeamBarMenuItem.cpp index 11ca63670c..8bc10efc4e 100644 --- a/src/apps/processcontroller/TeamBarMenuItem.cpp +++ b/src/apps/processcontroller/TeamBarMenuItem.cpp @@ -24,6 +24,7 @@ #include "ProcessController.h" #include "ThreadBarMenu.h" #include "ThreadBarMenuItem.h" +#include "Utilities.h" #include @@ -124,10 +125,10 @@ TeamBarMenuItem::DrawBar(bool force) BRect frame = Frame(); BMenu* menu = Menu (); rgb_color highColor = menu->HighColor(); - frame.right -= 24; - frame.left = frame.right-kBarWidth; - frame.top += kBarPadding; - frame.bottom -= kBarPadding; + + BFont font; + menu->GetFont(&font); + frame = bar_rect(frame, &font); if (fKernel < 0) return; diff --git a/src/apps/processcontroller/ThreadBarMenuItem.cpp b/src/apps/processcontroller/ThreadBarMenuItem.cpp index cacd8af564..72f0367b53 100644 --- a/src/apps/processcontroller/ThreadBarMenuItem.cpp +++ b/src/apps/processcontroller/ThreadBarMenuItem.cpp @@ -22,6 +22,7 @@ #include "Colors.h" #include "PriorityMenu.h" #include "ProcessController.h" +#include "Utilities.h" #include @@ -57,10 +58,11 @@ ThreadBarMenuItem::DrawBar(bool force) BRect frame = Frame(); BMenu* menu = Menu(); rgb_color highColor = menu->HighColor(); - frame.right -= 24; - frame.left = frame.right - kBarWidth; - frame.top += kBarPadding; - frame.bottom -= kBarPadding; + + BFont font; + menu->GetFont(&font); + frame = bar_rect(frame, &font); + if (fKernel < 0) return; diff --git a/src/apps/processcontroller/Utilities.cpp b/src/apps/processcontroller/Utilities.cpp index 144b30660c..b4156ddb46 100644 --- a/src/apps/processcontroller/Utilities.cpp +++ b/src/apps/processcontroller/Utilities.cpp @@ -176,3 +176,20 @@ make_window_visible(BWindow* window, bool mayResize) window->MoveBy(0, screen.top-frame.top); } + +BRect +bar_rect(BRect& frame, BFont* font) +{ + BRect rect(frame); + font_height metrics; + font->GetHeight(&metrics); + float barHeight = metrics.ascent; + rect.top = frame.top + (frame.Height() - barHeight) / 2; + rect.bottom = frame.top + (frame.Height() + barHeight) / 2; + + rect.left = frame.right - kMargin - kBarWidth; + rect.right = frame.right - kMargin; + + return rect; +} + diff --git a/src/apps/processcontroller/Utilities.h b/src/apps/processcontroller/Utilities.h index 85e765cc45..d66139b59c 100644 --- a/src/apps/processcontroller/Utilities.h +++ b/src/apps/processcontroller/Utilities.h @@ -20,8 +20,10 @@ #define UTILITIES_H -#include +#include #include +#include +#include class BDeskbar; @@ -43,6 +45,8 @@ void find_self(entry_ref& ref); void move_to_deskbar(BDeskbar& deskbar); void make_window_visible(BWindow* window, bool mayResize = false); +BRect bar_rect(BRect& frame, BFont* font); + extern const uchar k_cpu_mini[]; #endif // UTILITIES_H