when selecting text in wxHTML, selecting half a character is enough to select it (patch #1719530; this is standard behaviour when selecting text)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@46507 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2007-06-17 17:58:20 +00:00
parent 887e1ab976
commit b996028c3b
2 changed files with 20 additions and 4 deletions

View File

@@ -95,6 +95,8 @@ All (GUI):
- Added colour normalization to PNM image handler (Ray Johnston) - Added colour normalization to PNM image handler (Ray Johnston)
- Fixed selecting part of word from right to left in wxHTML (Michael Hieke) - Fixed selecting part of word from right to left in wxHTML (Michael Hieke)
- Selecting text in wxHTML with character precision was made easier, it's
enough to select half of a character (Michael Hieke)
wxMSW: wxMSW:

View File

@@ -403,19 +403,26 @@ void wxHtmlWordCell::Split(const wxDC& dc,
pt2.x = m_Width; pt2.x = m_Width;
// before selection: // before selection:
// (include character under caret only if in first half of width)
#ifdef __WXMAC__ #ifdef __WXMAC__
// implementation using PartialExtents to support fractional widths // implementation using PartialExtents to support fractional widths
wxArrayInt widths ; wxArrayInt widths ;
dc.GetPartialTextExtents(m_Word,widths) ; dc.GetPartialTextExtents(m_Word,widths) ;
while( i < len && pt1.x >= widths[i] ) while( i < len && pt1.x >= widths[i] )
i++ ; i++ ;
#else // __WXMAC__ if ( i < len )
{
int charW = (i > 0) ? widths[i] - widths[i-1] : widths[i];
if ( widths[i] - pt1.x < charW/2 )
i++;
}
#else // !__WXMAC__
wxCoord charW, charH; wxCoord charW, charH;
while ( pt1.x > 0 && i < len ) while ( pt1.x > 0 && i < len )
{ {
dc.GetTextExtent(m_Word[i], &charW, &charH); dc.GetTextExtent(m_Word[i], &charW, &charH);
pt1.x -= charW; pt1.x -= charW;
if ( pt1.x >= 0 ) if ( pt1.x >= -charW/2 )
{ {
pos1 += charW; pos1 += charW;
i++; i++;
@@ -424,18 +431,25 @@ void wxHtmlWordCell::Split(const wxDC& dc,
#endif // __WXMAC__/!__WXMAC__ #endif // __WXMAC__/!__WXMAC__
// in selection: // in selection:
// (include character under caret only if in first half of width)
unsigned j = i; unsigned j = i;
#ifdef __WXMAC__ #ifdef __WXMAC__
while( j < len && pt2.x >= widths[j] ) while( j < len && pt2.x >= widths[j] )
j++ ; j++ ;
#else // __WXMAC__ if ( j < len )
{
int charW = (j > 0) ? widths[j] - widths[j-1] : widths[j];
if ( widths[j] - pt2.x < charW/2 )
j++;
}
#else // !__WXMAC__
pos2 = pos1; pos2 = pos1;
pt2.x -= pos2; pt2.x -= pos2;
while ( pt2.x > 0 && j < len ) while ( pt2.x > 0 && j < len )
{ {
dc.GetTextExtent(m_Word[j], &charW, &charH); dc.GetTextExtent(m_Word[j], &charW, &charH);
pt2.x -= charW; pt2.x -= charW;
if ( pt2.x >= 0 ) if ( pt2.x >= -charW/2 )
{ {
pos2 += charW; pos2 += charW;
j++; j++;