Mac: Fix truncation of images in wxDataViewCtrl

Take into account a cell's height and adjust the row height accordingly.

See #18868.

Closes #19003.
This commit is contained in:
Andreas Falkenhahn
2020-12-22 02:13:24 +01:00
committed by Dimitri Schoolwerth
parent 4bf117aabd
commit d2fc88c03d

View File

@@ -2179,6 +2179,7 @@ void wxCocoaDataViewControl::FitColumnWidthToContent(unsigned int pos)
MaxWidthCalculator(wxCocoaOutlineView *view, MaxWidthCalculator(wxCocoaOutlineView *view,
NSTableColumn *column, unsigned columnIndex) NSTableColumn *column, unsigned columnIndex)
: m_width(0), : m_width(0),
m_height(0),
m_view(view), m_view(view),
m_column(columnIndex), m_column(columnIndex),
m_indent(0), m_indent(0),
@@ -2199,6 +2200,7 @@ void wxCocoaDataViewControl::FitColumnWidthToContent(unsigned int pos)
{ {
NSCell *cell = [m_view preparedCellAtColumn:m_column row:row]; NSCell *cell = [m_view preparedCellAtColumn:m_column row:row];
unsigned cellWidth = ceil([cell cellSize].width); unsigned cellWidth = ceil([cell cellSize].width);
unsigned cellHeight = ceil([cell cellSize].height);
if ( m_indent ) if ( m_indent )
cellWidth += m_indent * [m_view levelForRow:row]; cellWidth += m_indent * [m_view levelForRow:row];
@@ -2210,13 +2212,16 @@ void wxCocoaDataViewControl::FitColumnWidthToContent(unsigned int pos)
} }
m_width = wxMax(m_width, cellWidth); m_width = wxMax(m_width, cellWidth);
m_height = wxMax(m_height, cellHeight);
} }
int GetMaxWidth() const { return m_width; } int GetMaxWidth() const { return m_width; }
int GetMaxHeight() const { return m_height; }
int GetExpanderWidth() const { return m_expander; } int GetExpanderWidth() const { return m_expander; }
private: private:
int m_width; int m_width;
int m_height;
wxCocoaOutlineView *m_view; wxCocoaOutlineView *m_view;
unsigned m_column; unsigned m_column;
int m_indent; int m_indent;
@@ -2298,6 +2303,14 @@ void wxCocoaDataViewControl::FitColumnWidthToContent(unsigned int pos)
m_expanderWidth = calculator.GetExpanderWidth(); m_expanderWidth = calculator.GetExpanderWidth();
[column setWidth:calculator.GetMaxWidth() + m_expanderWidth]; [column setWidth:calculator.GetMaxWidth() + m_expanderWidth];
if ( !(GetDataViewCtrl()->GetWindowStyle() & wxDV_VARIABLE_LINE_HEIGHT) )
{
int curHeight = ceil([m_OutlineView rowHeight]);
int rowHeight = calculator.GetMaxHeight();
if ( rowHeight > curHeight )
SetRowHeight(rowHeight);
}
} }
// //