// // the height of the header window (FIXME: should depend on its font!)
// static const int HEADER_HEIGHT = 23;
-// the scrollbar units
static const int SCROLL_UNIT_X = 15;
-static const int SCROLL_UNIT_Y = 15;
// the spacing between the lines (in report mode)
static const int LINE_SPACING = 0;
else // has label
{
dc->GetTextExtent( s, &lw, &lh );
- if (lh < SCROLL_UNIT_Y)
- lh = SCROLL_UNIT_Y;
lw += EXTRA_WIDTH;
lh += EXTRA_HEIGHT;
s = item->GetTextForMeasuring();
dc->GetTextExtent( s, &lw, &lh );
- if (lh < SCROLL_UNIT_Y)
- lh = SCROLL_UNIT_Y;
lw += EXTRA_WIDTH;
lh += EXTRA_HEIGHT;
wxSize sz = size;
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 ) );
}
wxCoord wxListMainWindow::GetLineHeight() const
{
- wxASSERT_MSG( HasFlag(wxLC_REPORT), _T("only works in report mode") );
-
// we cache the line height as calling GetTextExtent() is slow
if ( !m_lineHeight )
{
wxCoord 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() )
{
int iw = 0;
int client_w, client_h;
GetClientSize( &client_w, &client_h );
+ const int hLine = GetLineHeight();
+
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) )
{
ResetVisibleLinesRange();
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)
- 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
{
clientHeight;
GetSize( &clientWidth, &clientHeight );
+ const int lineHeight = GetLineHeight();
+
if ( HasFlag(wxLC_REPORT) )
{
// all lines have the same height and we scroll one line per step
- int lineHeight = GetLineHeight();
-
int entireHeight = count*lineHeight + LINE_SPACING;
m_linesPerPage = clientHeight / lineHeight;
SetScrollbars
(
SCROLL_UNIT_X,
- SCROLL_UNIT_Y,
+ lineHeight,
(x + SCROLL_UNIT_X) / SCROLL_UNIT_X,
- (y + SCROLL_UNIT_Y) / SCROLL_UNIT_Y,
+ (y + lineHeight) / lineHeight,
GetScrollPos( wxHORIZONTAL ),
GetScrollPos( wxVERTICAL ),
TRUE
// scrollbar
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++)
{
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)
{
SetScrollbars
(
SCROLL_UNIT_X,
- SCROLL_UNIT_Y,
+ lineHeight,
(entireWidth + SCROLL_UNIT_X) / SCROLL_UNIT_X,
0,
GetScrollPos( wxHORIZONTAL ),