X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0a164d4c4e75bd48f6a0a484fb267b0dc337c541..550f38d74380256da7bfcb961d40ff86f677f77e:/src/gtk/textctrl.cpp diff --git a/src/gtk/textctrl.cpp b/src/gtk/textctrl.cpp index 5ffdf7d7d4..878b9d06ee 100644 --- a/src/gtk/textctrl.cpp +++ b/src/gtk/textctrl.cpp @@ -1117,6 +1117,15 @@ bool wxTextCtrl::PositionToXY(long pos, long *x, long *y ) const { if ( m_windowStyle & wxTE_MULTILINE ) { +#ifdef __WXGTK20__ + GtkTextIter iter; + gtk_text_buffer_get_iter_at_offset(m_buffer, &iter, pos); + if (gtk_text_iter_is_end(&iter)) + return false; + + *y = gtk_text_iter_get_line(&iter); + *x = gtk_text_iter_get_line_offset(&iter); +#else wxString text = GetValue(); // cast to prevent warning. But pos really should've been unsigned. @@ -1137,6 +1146,7 @@ bool wxTextCtrl::PositionToXY(long pos, long *x, long *y ) const else (*x)++; } +#endif } else // single line control { @@ -1159,17 +1169,39 @@ long wxTextCtrl::XYToPosition(long x, long y ) const { if (!(m_windowStyle & wxTE_MULTILINE)) return 0; +#ifdef __WXGTK20__ + GtkTextIter iter; + gtk_text_buffer_get_iter_at_line_offset(m_buffer, &iter, y, x); + return gtk_text_iter_get_offset(&iter); +#else long pos=0; for( int i=0; i last_line) + return -1; + + GtkTextIter iter; + gtk_text_buffer_get_iter_at_line(m_buffer, &iter, lineNo); + // get_chars_in_line return includes paragraph delimiters, so need to subtract 1 IF it is not the last line + return gtk_text_iter_get_chars_in_line(&iter) - ((lineNo == last_line) ? 0 : 1); + } + else +#endif + { + wxString str = GetLineText (lineNo); + return (int) str.Length(); + } } int wxTextCtrl::GetNumberOfLines() const