GetNumberOfLines() now returns the number of physical, not logical, lines in the control in wxGTK2 as under the other platforms (patch 1438117)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38015 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -731,12 +731,17 @@ Returns the number of lines in the text control buffer.
|
|||||||
\wxheading{Remarks}
|
\wxheading{Remarks}
|
||||||
|
|
||||||
Note that even empty text controls have one line (where the insertion point
|
Note that even empty text controls have one line (where the insertion point
|
||||||
is), so GetNumberOfLines() never returns 0.
|
is), so GetNumberOfLines() never returns $0$.
|
||||||
|
|
||||||
For gtk\_text (multi-line) controls, the number of lines is
|
For wxGTK using GTK+ 1.2.x and earlier, the number of lines in a multi-line
|
||||||
calculated by actually counting newline characters in the buffer. You
|
text control is calculated by actually counting newline characters in the
|
||||||
may wish to avoid using functions that work with line numbers if you are
|
buffer, i.e. this function returns the number of logical lines and doesn't
|
||||||
working with controls that contain large amounts of text.
|
depend on whether any of them are wrapped. For all the other platforms, the
|
||||||
|
number of physical lines in the control is returned.
|
||||||
|
|
||||||
|
Also note that you may wish to avoid using functions that work with line
|
||||||
|
numbers if you are working with controls that contain large amounts of text as
|
||||||
|
this function has $O(N)$ complexity for $N$ being the number of lines.
|
||||||
|
|
||||||
|
|
||||||
\membersection{wxTextCtrl::GetRange}\label{wxtextctrlgetrange}
|
\membersection{wxTextCtrl::GetRange}\label{wxtextctrlgetrange}
|
||||||
|
@@ -947,10 +947,38 @@ int wxTextCtrl::GetLineLength(long lineNo) const
|
|||||||
|
|
||||||
int wxTextCtrl::GetNumberOfLines() const
|
int wxTextCtrl::GetNumberOfLines() const
|
||||||
{
|
{
|
||||||
if (m_windowStyle & wxTE_MULTILINE)
|
if ( m_windowStyle & wxTE_MULTILINE )
|
||||||
return gtk_text_buffer_get_line_count( m_buffer );
|
{
|
||||||
else
|
GtkTextIter iter;
|
||||||
|
gtk_text_buffer_get_iter_at_offset( m_buffer, &iter, 0 );
|
||||||
|
|
||||||
|
// move forward by one display line until the end is reached
|
||||||
|
int lineCount = 1;
|
||||||
|
while ( gtk_text_view_forward_display_line(GTK_TEXT_VIEW(m_text), &iter) )
|
||||||
|
{
|
||||||
|
lineCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the last character in the text buffer is a newline,
|
||||||
|
// gtk_text_view_forward_display_line() will return false without that
|
||||||
|
// line being counted. Must add one manually in that case.
|
||||||
|
GtkTextIter lastCharIter;
|
||||||
|
gtk_text_buffer_get_iter_at_offset
|
||||||
|
(
|
||||||
|
m_buffer,
|
||||||
|
&lastCharIter,
|
||||||
|
gtk_text_buffer_get_char_count(m_buffer) - 1
|
||||||
|
);
|
||||||
|
gchar lastChar = gtk_text_iter_get_char( &lastCharIter );
|
||||||
|
if ( lastChar == wxT('\n') )
|
||||||
|
lineCount++;
|
||||||
|
|
||||||
|
return lineCount;
|
||||||
|
}
|
||||||
|
else // single line
|
||||||
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxTextCtrl::SetInsertionPoint( long pos )
|
void wxTextCtrl::SetInsertionPoint( long pos )
|
||||||
|
Reference in New Issue
Block a user