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