View | Details | Raw Unified | Return to issue 74188
Collapse All | Expand All

(-)openoffice.org.orig/sw/source/core/text/frmcrsr.cxx (-1 / +31 lines)
Lines 83-88 Link Here
83
#include "swfntcch.hxx"		// SwFontAccess
83
#include "swfntcch.hxx"		// SwFontAccess
84
#include "flyfrm.hxx"
84
#include "flyfrm.hxx"
85
85
86
#include <com/sun/star/i18n/ScriptType.hdl>
87
#include <com/sun/star/i18n/CharacterIteratorMode.hpp>
88
#include "breakit.hxx"
89
86
#if OSL_DEBUG_LEVEL > 1
90
#if OSL_DEBUG_LEVEL > 1
87
#include "txtpaint.hxx"
91
#include "txtpaint.hxx"
88
#endif
92
#endif
Lines 309-315 Link Here
309
            nMaxY = pFrm->SwitchVerticalToHorizontal( nMaxY );
313
            nMaxY = pFrm->SwitchVerticalToHorizontal( nMaxY );
310
314
311
        sal_Bool bGoOn = sal_True;
315
        sal_Bool bGoOn = sal_True;
312
		xub_StrLen nOffset = rPos.nContent.GetIndex();
316
        xub_StrLen nOffset = rPos.nContent.GetIndex();
317
318
        // #i74188 Ensure that the cursor is not drawn inside a combined char
319
        const SwTxtNode* pTxtNd = ((const SwTxtFrm*)this)->GetTxtNode();
320
        if( pTxtNd && ::com::sun::star::i18n::ScriptType::COMPLEX == 
321
            pBreakIt->xBreak->getScriptType( pTxtNd->GetTxt(), nOffset ) )
322
        {
323
            sal_Int32 nCount = 1;
324
            const ::com::sun::star::lang::Locale &rLocale = 
325
                pBreakIt->GetLocale( pTxtNd->GetLang( nOffset ) );
326
            xub_StrLen nRight = (xub_StrLen)pBreakIt->xBreak->nextCharacters( 
327
                pTxtNd->GetTxt(), nOffset, rLocale,
328
                ::com::sun::star::i18n::CharacterIteratorMode::SKIPCELL, 
329
                nCount, nCount );
330
331
            xub_StrLen nLeft = (xub_StrLen)pBreakIt->xBreak->previousCharacters(
332
                pTxtNd->GetTxt(), nRight, rLocale, 
333
                ::com::sun::star::i18n::CharacterIteratorMode::SKIPCELL, 
334
                nCount, nCount );
335
336
            if ( ( nLeft != nOffset ) && ( nRight != nOffset ) )
337
            {
338
                nOffset = ( Abs( nRight - nOffset ) < Abs( nLeft - nOffset ) ) ?
339
                    nRight : nLeft;
340
            }
341
        }
342
313
		xub_StrLen nNextOfst;
343
		xub_StrLen nNextOfst;
314
344
315
		do
345
		do

Return to issue 74188