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:
@@ -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 ),
|
||||||
|
Reference in New Issue
Block a user