From 85b350edda4aeadaf382acefd349b13737a4df5d Mon Sep 17 00:00:00 2001 From: Janus Date: Sun, 5 Apr 2015 16:58:00 +0000 Subject: [PATCH] BColumnListView: BRow height is proportional to font size. * Add a BRow default constructor that use font size to compute height. * Min height size for Title and Row are decoupled. * The font ratio for Title and Row are decoupled. * For small font use min height (set to usual 16.0). * Better baseline formula. * Fixes #11944. --- headers/private/interface/ColumnListView.h | 3 ++- src/kits/interface/ColumnListView.cpp | 30 +++++++++++++++++++--- src/kits/interface/ColumnTypes.cpp | 5 ++-- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/headers/private/interface/ColumnListView.h b/headers/private/interface/ColumnListView.h index f262b09f47..76558bc31c 100644 --- a/headers/private/interface/ColumnListView.h +++ b/headers/private/interface/ColumnListView.h @@ -121,7 +121,8 @@ public: // a parent of a row, using the AddRow() function in BColumnListView(). class BRow { public: - BRow(float height = 16.0); + BRow(); + BRow(float height); virtual ~BRow(); virtual bool HasLatch() const; diff --git a/src/kits/interface/ColumnListView.cpp b/src/kits/interface/ColumnListView.cpp index 5d4400c46c..a93991fe48 100644 --- a/src/kits/interface/ColumnListView.cpp +++ b/src/kits/interface/ColumnListView.cpp @@ -47,6 +47,7 @@ All rights reserved. #include +#include #include #include @@ -126,7 +127,10 @@ static const unsigned char kUpSortArrow8x8Invert[] = { static const float kTintedLineTint = 1.04; -static const float kTitleHeight = 16.0; +static const float kMinTitleHeight = 16.0; +static const float kMinRowHeight = 16.0; +static const float kTitleSpacing = 1.4; +static const float kRowSpacing = 1.4; static const float kLatchWidth = 15.0; @@ -443,6 +447,20 @@ BColumn::MouseUp(BColumnListView* /*parent*/, BRow* /*row*/, BField* /*field*/) // #pragma mark - +BRow::BRow() + : + fChildList(NULL), + fIsExpanded(false), + fHeight(std::max(kMinRowHeight, + ceilf(be_plain_font->Size() * kRowSpacing))), + fNextSelected(NULL), + fPrevSelected(NULL), + fParent(NULL), + fList(NULL) +{ +} + + BRow::BRow(float height) : fChildList(NULL), @@ -1913,7 +1931,9 @@ BColumnListView::MinSize() { BSize size; size.width = 100; - size.height = kTitleHeight + 4 * B_H_SCROLL_BAR_HEIGHT; + size.height = std::max(kMinTitleHeight, + ceilf(be_plain_font->Size() * kTitleSpacing)) + + 4 * B_H_SCROLL_BAR_HEIGHT; if (!fHorizontalScrollBar->IsHidden()) size.height += fHorizontalScrollBar->Frame().Height() + 1; // TODO: Take border size into account @@ -2071,7 +2091,8 @@ BColumnListView::_GetChildViewRects(const BRect& bounds, BRect& titleRect, BRect& outlineRect, BRect& vScrollBarRect, BRect& hScrollBarRect) { titleRect = bounds; - titleRect.bottom = titleRect.top + kTitleHeight; + titleRect.bottom = titleRect.top + std::max(kMinTitleHeight, + ceilf(be_plain_font->Size() * kTitleSpacing)); #if !LOWER_SCROLLBAR titleRect.right -= B_V_SCROLL_BAR_WIDTH; #endif @@ -2084,7 +2105,8 @@ BColumnListView::_GetChildViewRects(const BRect& bounds, BRect& titleRect, vScrollBarRect = bounds; #if LOWER_SCROLLBAR - vScrollBarRect.top += kTitleHeight; + vScrollBarRect.top += std::max(kMinTitleHeight, + ceilf(be_plain_font->Size() * kTitleSpacing)); #endif vScrollBarRect.left = vScrollBarRect.right - B_V_SCROLL_BAR_WIDTH; diff --git a/src/kits/interface/ColumnTypes.cpp b/src/kits/interface/ColumnTypes.cpp index 18138df126..8e61228e2e 100644 --- a/src/kits/interface/ColumnTypes.cpp +++ b/src/kits/interface/ColumnTypes.cpp @@ -75,9 +75,8 @@ BTitledColumn::DrawString(const char* string, BView* parent, BRect rect) parent->GetFont(&font); font.GetHeight(&finfo); - y = rect.top + ((rect.Height() - - (finfo.ascent + finfo.descent + finfo.leading)) / 2) - + (finfo.ascent + finfo.descent) - 2; + y = rect.top + finfo.ascent + + (rect.Height() - ceilf(finfo.ascent + finfo.descent)) / 2.0f; switch (Alignment()) { default: