From a57bf2191b47e9143a2ca2b30f202dc79b839237 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Fri, 26 Aug 2022 17:32:18 -0400 Subject: [PATCH] Tracker: Basic adjustments to InfoWindow to respect BControlLook. Improves appearance under HiDPI. --- .../tracker/infowindow/GeneralInfoView.cpp | 62 ++++++++++--------- src/kits/tracker/infowindow/HeaderView.cpp | 19 +++--- 2 files changed, 40 insertions(+), 41 deletions(-) diff --git a/src/kits/tracker/infowindow/GeneralInfoView.cpp b/src/kits/tracker/infowindow/GeneralInfoView.cpp index 39d20a24bc..e32177b478 100644 --- a/src/kits/tracker/infowindow/GeneralInfoView.cpp +++ b/src/kits/tracker/infowindow/GeneralInfoView.cpp @@ -39,6 +39,7 @@ All rights reserved. #include #include +#include #include #include #include @@ -86,8 +87,7 @@ private: } // namespace BPrivate -const float kBorderMargin = 15.0f; -const float kDrawMargin = 3.0f; +static float sBorderMargin, sDrawMargin = 0.0f; const uint32 kSetPreferredApp = 'setp'; @@ -179,6 +179,10 @@ GeneralInfoView::GeneralInfoView(Model* model) NULL }; + if (sDrawMargin == 0.0f) { + sDrawMargin = be_control_look->DefaultLabelSpacing() / 2.0f; + sBorderMargin = sDrawMargin * 5.0f; + } SetFlags(Flags() | B_WILL_DRAW | B_PULSE_NEEDED | B_FRAME_EVENTS); SetName(B_TRANSLATE("Information")); @@ -200,7 +204,7 @@ GeneralInfoView::GeneralInfoView(Model* model) float width = 0; for (int i = 0; fieldNames[i] != 0; i++) width = std::max(width, StringWidth(fieldNames[i])); - fDivider = width + kBorderMargin + 1; + fDivider = width + sBorderMargin + 1; // Keep some free space for the stuff we print ourselves float lineHeight = CurrentFontHeight(); @@ -209,7 +213,7 @@ GeneralInfoView::GeneralInfoView(Model* model) lineCount += 1; // Add space for "Link to" line if (model->IsExecutable()) lineCount += 2; // Add space for "Version" and "Description" lines - GroupLayout()->SetInsets(kBorderMargin, lineHeight * lineCount, + GroupLayout()->SetInsets(sBorderMargin, lineHeight * lineCount, B_USE_WINDOW_SPACING, B_USE_WINDOW_SPACING); // Add a preferred handler pop-up menu if this item @@ -226,7 +230,7 @@ GeneralInfoView::GeneralInfoView(Model* model) fDivider = currentFont.StringWidth(B_TRANSLATE("Opens with:")) + 5; fPreferredAppMenu->SetDivider(fDivider); - fDivider += (kBorderMargin - 2); + fDivider += (sBorderMargin - 2); fPreferredAppMenu->SetFont(¤tFont); fPreferredAppMenu->SetHighUIColor(B_PANEL_TEXT_COLOR); fPreferredAppMenu->SetLabel(B_TRANSLATE("Opens with:")); @@ -308,9 +312,9 @@ GeneralInfoView::InitStrings(const Model* model) // We'll do our own truncation later on in Draw() WidgetAttributeText::AttrAsString(model, &fCreatedStr, kAttrStatCreated, - B_TIME_TYPE, drawBounds.Width() - kBorderMargin, this); + B_TIME_TYPE, drawBounds.Width() - sBorderMargin, this); WidgetAttributeText::AttrAsString(model, &fModifiedStr, kAttrStatModified, - B_TIME_TYPE, drawBounds.Width() - kBorderMargin, this); + B_TIME_TYPE, drawBounds.Width() - sBorderMargin, this); WidgetAttributeText::AttrAsString(model, &fPathStr, kAttrPath, B_STRING_TYPE, 0, this); @@ -446,10 +450,10 @@ GeneralInfoView::ModelChanged(Model* model, BMessage* message) if (model->OpenNode() == B_OK) { WidgetAttributeText::AttrAsString(model, &fCreatedStr, kAttrStatCreated, B_TIME_TYPE, drawBounds.Width() - - kBorderMargin, this); + - sBorderMargin, this); WidgetAttributeText::AttrAsString(model, &fModifiedStr, kAttrStatModified, B_TIME_TYPE, drawBounds.Width() - - kBorderMargin, this); + - sBorderMargin, this); // don't change the size if it's a directory if (!model->IsDirectory()) { @@ -581,7 +585,7 @@ GeneralInfoView::MouseMoved(BPoint where, uint32, const BMessage* dragMessage) BFont font; GetFont(&font); float maxWidth = (Bounds().Width() - - (fDivider + kBorderMargin)); + - (fDivider + sBorderMargin)); if (fPathRect.Contains(point)) { if (fCurrentPathColorWhich != B_LINK_HOVER_COLOR) @@ -838,14 +842,14 @@ GeneralInfoView::Draw(BRect) DrawString(B_TRANSLATE("Size:")); } - MovePenTo(BPoint(fDivider + kDrawMargin, lineBase)); + MovePenTo(BPoint(fDivider + sDrawMargin, lineBase)); SetHighColor(attributeColor); // Check for possible need of truncation if (StringWidth(fSizeString.String()) - > (Bounds().Width() - (fDivider + kBorderMargin))) { + > (Bounds().Width() - (fDivider + sBorderMargin))) { BString tmpString(fSizeString.String()); TruncateString(&tmpString, B_TRUNCATE_MIDDLE, - Bounds().Width() - (fDivider + kBorderMargin)); + Bounds().Width() - (fDivider + sBorderMargin)); DrawString(tmpString.String()); fSizeRect.right = fSizeRect.left + StringWidth(tmpString.String()) + 3; @@ -860,7 +864,7 @@ GeneralInfoView::Draw(BRect) MovePenTo(BPoint(fDivider - (StringWidth(B_TRANSLATE("Created:"))), lineBase)); DrawString(B_TRANSLATE("Created:")); - MovePenTo(BPoint(fDivider + kDrawMargin, lineBase)); + MovePenTo(BPoint(fDivider + sDrawMargin, lineBase)); SetHighColor(attributeColor); DrawString(fCreatedStr.String()); lineBase += lineHeight; @@ -870,7 +874,7 @@ GeneralInfoView::Draw(BRect) lineBase)); SetHighColor(labelColor); DrawString(B_TRANSLATE("Modified:")); - MovePenTo(BPoint(fDivider + kDrawMargin, lineBase)); + MovePenTo(BPoint(fDivider + sDrawMargin, lineBase)); SetHighColor(attributeColor); DrawString(fModifiedStr.String()); lineBase += lineHeight; @@ -880,7 +884,7 @@ GeneralInfoView::Draw(BRect) lineBase)); SetHighColor(labelColor); DrawString(B_TRANSLATE("Kind:")); - MovePenTo(BPoint(fDivider + kDrawMargin, lineBase)); + MovePenTo(BPoint(fDivider + sDrawMargin, lineBase)); SetHighColor(attributeColor); DrawString(fKindStr.String()); lineBase += lineHeight; @@ -894,15 +898,15 @@ GeneralInfoView::Draw(BRect) SetHighColor(labelColor); DrawString(B_TRANSLATE("Location:")); - MovePenTo(BPoint(fDivider + kDrawMargin, lineBase)); + MovePenTo(BPoint(fDivider + sDrawMargin, lineBase)); SetHighUIColor(fCurrentPathColorWhich); // Check for truncation if (StringWidth(fPathStr.String()) > (Bounds().Width() - - (fDivider + kBorderMargin))) { + - (fDivider + sBorderMargin))) { BString nameString(fPathStr.String()); TruncateString(&nameString, B_TRUNCATE_MIDDLE, - Bounds().Width() - (fDivider + kBorderMargin)); + Bounds().Width() - (fDivider + sBorderMargin)); DrawString(nameString.String()); } else DrawString(fPathStr.String()); @@ -921,15 +925,15 @@ GeneralInfoView::Draw(BRect) lineBase)); SetHighColor(labelColor); DrawString(B_TRANSLATE("Link to:")); - MovePenTo(BPoint(fDivider + kDrawMargin, lineBase)); + MovePenTo(BPoint(fDivider + sDrawMargin, lineBase)); SetHighUIColor(fCurrentLinkColorWhich); // Check for truncation if (StringWidth(fLinkToStr.String()) > (Bounds().Width() - - (fDivider + kBorderMargin))) { + - (fDivider + sBorderMargin))) { BString nameString(fLinkToStr.String()); TruncateString(&nameString, B_TRUNCATE_MIDDLE, - Bounds().Width() - (fDivider + kBorderMargin)); + Bounds().Width() - (fDivider + sBorderMargin)); DrawString(nameString.String()); } else DrawString(fLinkToStr.String()); @@ -949,7 +953,7 @@ GeneralInfoView::Draw(BRect) lineBase)); SetHighColor(labelColor); DrawString(B_TRANSLATE("Version:")); - MovePenTo(BPoint(fDivider + kDrawMargin, lineBase)); + MovePenTo(BPoint(fDivider + sDrawMargin, lineBase)); SetHighColor(attributeColor); BString nameString; if (fModel->GetVersionString(nameString, B_APP_VERSION_KIND) == B_OK) @@ -963,14 +967,14 @@ GeneralInfoView::Draw(BRect) lineBase)); SetHighColor(labelColor); DrawString(B_TRANSLATE("Description:")); - MovePenTo(BPoint(fDivider + kDrawMargin, lineBase)); + MovePenTo(BPoint(fDivider + sDrawMargin, lineBase)); SetHighColor(attributeColor); // Check for truncation if (StringWidth(fDescStr.String()) > (Bounds().Width() - - (fDivider + kBorderMargin))) { + - (fDivider + sBorderMargin))) { BString nameString(fDescStr.String()); TruncateString(&nameString, B_TRUNCATE_MIDDLE, - Bounds().Width() - (fDivider + kBorderMargin)); + Bounds().Width() - (fDivider + sBorderMargin)); DrawString(nameString.String()); } else DrawString(fDescStr.String()); @@ -989,14 +993,14 @@ GeneralInfoView::Draw(BRect) lineBase)); SetHighColor(labelColor); DrawString(B_TRANSLATE("Filesystem:")); - MovePenTo(BPoint(fDivider + kDrawMargin, lineBase)); + MovePenTo(BPoint(fDivider + sDrawMargin, lineBase)); SetHighColor(attributeColor); // Check for truncation if (StringWidth(fFileSystemStr.String()) > (Bounds().Width() - - (fDivider + kBorderMargin))) { + - (fDivider + sBorderMargin))) { BString nameString(fFileSystemStr.String()); TruncateString(&nameString, B_TRUNCATE_MIDDLE, - Bounds().Width() - (fDivider + kBorderMargin)); + Bounds().Width() - (fDivider + sBorderMargin)); DrawString(nameString.String()); } else DrawString(fFileSystemStr.String()); diff --git a/src/kits/tracker/infowindow/HeaderView.cpp b/src/kits/tracker/infowindow/HeaderView.cpp index 30d6f99462..d3b44816d7 100644 --- a/src/kits/tracker/infowindow/HeaderView.cpp +++ b/src/kits/tracker/infowindow/HeaderView.cpp @@ -38,6 +38,7 @@ All rights reserved. #include #include #include +#include #include #include #include @@ -59,11 +60,6 @@ All rights reserved. #define B_TRANSLATION_CONTEXT "InfoWindow" -// Offsets taken from TAlertView::Draw in BAlert.cpp -const float kIconHorizOffset = 18.0f; -const float kIconVertOffset = 6.0f; -const float kBorderWidth = 32.0f; - // Amount you have to move the mouse before a drag starts const float kDragSlop = 3.0f; @@ -80,11 +76,10 @@ HeaderView::HeaderView(Model* model) fDoubleClick(false), fDragging(false) { - // Create the rect for displaying the icon - fIconRect.Set(0, 0, B_LARGE_ICON - 1, B_LARGE_ICON - 1); - // Offset taken from BAlert - fIconRect.OffsetBy(kIconHorizOffset, kIconVertOffset); - SetExplicitSize(BSize(B_SIZE_UNSET, B_LARGE_ICON + 2 * kIconVertOffset)); + const float labelSpacing = be_control_look->DefaultLabelSpacing(); + fIconRect = BRect(BPoint(labelSpacing * 3.0f, labelSpacing), + be_control_look->ComposeIconSize(B_LARGE_ICON)); + SetExplicitSize(BSize(B_SIZE_UNSET, fIconRect.Width() + 2 * fIconRect.top)); // The title rect // The magic numbers are used to properly calculate the rect so that @@ -95,12 +90,12 @@ HeaderView::HeaderView(Model* model) GetFont(¤tFont); currentFont.GetHeight(&fontMetrics); - fTitleRect.left = fIconRect.right + 5; + fTitleRect.left = fIconRect.right + labelSpacing; fTitleRect.top = 0; fTitleRect.bottom = fontMetrics.ascent + 1; fTitleRect.right = min_c( fTitleRect.left + currentFont.StringWidth(fModel->Name()), - Bounds().Width() - 5); + Bounds().Width() - labelSpacing); // Offset so that it centers with the icon fTitleRect.OffsetBy(0, fIconRect.top + ((fIconRect.Height() - fTitleRect.Height()) / 2));