fixed vertical scrollbar handling (broken by some relatively recent but unknown precisely change)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24426 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2003-11-06 19:41:46 +00:00
parent 07bf769ead
commit 6d78bbe637

View File

@@ -106,9 +106,7 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_CACHE_HINT)
// // the height of the header window (FIXME: should depend on its font!) // // the height of the header window (FIXME: should depend on its font!)
// static const int HEADER_HEIGHT = 23; // static const int HEADER_HEIGHT = 23;
// the scrollbar units
static const int SCROLL_UNIT_X = 15; static const int SCROLL_UNIT_X = 15;
static const int SCROLL_UNIT_Y = 15;
// the spacing between the lines (in report mode) // the spacing between the lines (in report mode)
static const int LINE_SPACING = 0; static const int LINE_SPACING = 0;
@@ -1147,8 +1145,6 @@ void wxListLineData::CalculateSize( wxDC *dc, int spacing )
else // has label else // has label
{ {
dc->GetTextExtent( s, &lw, &lh ); dc->GetTextExtent( s, &lw, &lh );
if (lh < SCROLL_UNIT_Y)
lh = SCROLL_UNIT_Y;
lw += EXTRA_WIDTH; lw += EXTRA_WIDTH;
lh += EXTRA_HEIGHT; lh += EXTRA_HEIGHT;
@@ -1189,8 +1185,6 @@ void wxListLineData::CalculateSize( wxDC *dc, int spacing )
s = item->GetTextForMeasuring(); s = item->GetTextForMeasuring();
dc->GetTextExtent( s, &lw, &lh ); dc->GetTextExtent( s, &lw, &lh );
if (lh < SCROLL_UNIT_Y)
lh = SCROLL_UNIT_Y;
lw += EXTRA_WIDTH; lw += EXTRA_WIDTH;
lh += EXTRA_HEIGHT; lh += EXTRA_HEIGHT;
@@ -2199,7 +2193,7 @@ wxListMainWindow::wxListMainWindow( wxWindow *parent,
wxSize sz = size; wxSize sz = size;
sz.y = 25; sz.y = 25;
SetScrollbars( SCROLL_UNIT_X, SCROLL_UNIT_Y, 0, 0, 0, 0 ); SetScrollbars( 0, 0, 0, 0, 0, 0 );
SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_LISTBOX ) ); SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_LISTBOX ) );
} }
@@ -2280,9 +2274,6 @@ wxCoord wxListMainWindow::GetLineHeight() const
wxCoord y; wxCoord y;
dc.GetTextExtent(_T("H"), NULL, &y); dc.GetTextExtent(_T("H"), NULL, &y);
if ( y < SCROLL_UNIT_Y )
y = SCROLL_UNIT_Y;
if ( m_small_image_list && m_small_image_list->GetImageCount() ) if ( m_small_image_list && m_small_image_list->GetImageCount() )
{ {
int iw = 0; int iw = 0;
@@ -3036,8 +3027,10 @@ void wxListMainWindow::MoveToItem(size_t item)
int client_w, client_h; int client_w, client_h;
GetClientSize( &client_w, &client_h ); GetClientSize( &client_w, &client_h );
const int hLine = GetLineHeight();
int view_x = SCROLL_UNIT_X*GetScrollPos( wxHORIZONTAL ); int view_x = SCROLL_UNIT_X*GetScrollPos( wxHORIZONTAL );
int view_y = SCROLL_UNIT_Y*GetScrollPos( wxVERTICAL ); int view_y = hLine*GetScrollPos( wxVERTICAL );
if ( HasFlag(wxLC_REPORT) ) if ( HasFlag(wxLC_REPORT) )
{ {
@@ -3046,9 +3039,9 @@ void wxListMainWindow::MoveToItem(size_t item)
ResetVisibleLinesRange(); ResetVisibleLinesRange();
if (rect.y < view_y ) if (rect.y < view_y )
Scroll( -1, rect.y/SCROLL_UNIT_Y ); Scroll( -1, rect.y/hLine );
if (rect.y+rect.height+5 > view_y+client_h) if (rect.y+rect.height+5 > view_y+client_h)
Scroll( -1, (rect.y+rect.height-client_h+SCROLL_UNIT_Y)/SCROLL_UNIT_Y ); Scroll( -1, (rect.y+rect.height-client_h+hLine)/hLine );
} }
else // !report else // !report
{ {
@@ -3862,11 +3855,11 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh)
clientHeight; clientHeight;
GetSize( &clientWidth, &clientHeight ); GetSize( &clientWidth, &clientHeight );
const int lineHeight = GetLineHeight();
if ( HasFlag(wxLC_REPORT) ) if ( HasFlag(wxLC_REPORT) )
{ {
// all lines have the same height and we scroll one line per step // all lines have the same height and we scroll one line per step
int lineHeight = GetLineHeight();
int entireHeight = count*lineHeight + LINE_SPACING; int entireHeight = count*lineHeight + LINE_SPACING;
m_linesPerPage = clientHeight / lineHeight; m_linesPerPage = clientHeight / lineHeight;
@@ -3930,9 +3923,9 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh)
SetScrollbars SetScrollbars
( (
SCROLL_UNIT_X, SCROLL_UNIT_X,
SCROLL_UNIT_Y, lineHeight,
(x + SCROLL_UNIT_X) / SCROLL_UNIT_X, (x + SCROLL_UNIT_X) / SCROLL_UNIT_X,
(y + SCROLL_UNIT_Y) / SCROLL_UNIT_Y, (y + lineHeight) / lineHeight,
GetScrollPos( wxHORIZONTAL ), GetScrollPos( wxHORIZONTAL ),
GetScrollPos( wxVERTICAL ), GetScrollPos( wxVERTICAL ),
TRUE TRUE
@@ -3945,18 +3938,10 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh)
// scrollbar // scrollbar
int entireWidth = 0; int entireWidth = 0;
#if 0
// entireHeight is not used so no need to define it
int entireHeight = 0;
#endif
for (int tries = 0; tries < 2; tries++) for (int tries = 0; tries < 2; tries++)
{ {
entireWidth = 2*EXTRA_BORDER_X; entireWidth = 2*EXTRA_BORDER_X;
#if 0
// entireHeight is not used so no need to define it
entireHeight = 2*EXTRA_BORDER_Y;
#endif
if (tries == 1) if (tries == 1)
{ {
@@ -4019,7 +4004,7 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh)
SetScrollbars SetScrollbars
( (
SCROLL_UNIT_X, SCROLL_UNIT_X,
SCROLL_UNIT_Y, lineHeight,
(entireWidth + SCROLL_UNIT_X) / SCROLL_UNIT_X, (entireWidth + SCROLL_UNIT_X) / SCROLL_UNIT_X,
0, 0,
GetScrollPos( wxHORIZONTAL ), GetScrollPos( wxHORIZONTAL ),