diff -r 03068afc23c6 editeng/source/editeng/impedit2.cxx --- a/editeng/source/editeng/impedit2.cxx Sun Apr 25 15:43:24 2010 +0100 +++ b/editeng/source/editeng/impedit2.cxx Mon Apr 26 15:08:39 2010 +0100 @@ -4198,7 +4198,17 @@ DBG_ERROR("svx::ImpEditEngine::GetXPos(), index out of range!"); } +#if 0 long nPosInPortion = pLine->GetCharPosArray().GetObject( nPos ); +#else + SvxFont aTmpFont( pParaPortion->GetNode()->GetCharAttribs().GetDefFont() ); + SeekCursor( pParaPortion->GetNode(), nPos+1, aTmpFont ); + aTmpFont.SetPhysFont( GetRefDevice() ); + ImplInitDigitMode( GetRefDevice(), 0, 0, 0, aTmpFont.GetLanguage() ); + String sSegment(*pParaPortion->GetNode(), pLine->GetStart(), nPos+1); + long nPosInPortion = aTmpFont.QuickGetTextSize( GetRefDevice(), + sSegment, 0, nPos+1, NULL ).Width(); +#endif if ( !pPortion->IsRightToLeft() ) { diff -r 03068afc23c6 editeng/source/editeng/impedit4.cxx --- a/editeng/source/editeng/impedit4.cxx Sun Apr 25 15:43:24 2010 +0100 +++ b/editeng/source/editeng/impedit4.cxx Mon Apr 26 15:08:39 2010 +0100 @@ -82,6 +82,7 @@ #include #include #include +#include using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -1443,7 +1444,11 @@ ::com::sun::star::lang::Locale ImpEditEngine::GetLocale( const EditPaM& rPaM ) const { - return SvxCreateLocale( GetLanguage( rPaM ) ); + ::com::sun::star::lang::Locale aRet = SvxCreateLocale( GetLanguage( rPaM ) ); + fprintf(stderr, "locale is %s %s\n", + rtl::OUStringToOString(aRet.Language, RTL_TEXTENCODING_UTF8).getStr(), + rtl::OUStringToOString(aRet.Country, RTL_TEXTENCODING_UTF8).getStr()); + return aRet; } Reference< XSpellChecker1 > ImpEditEngine::GetSpeller() diff -r 03068afc23c6 editeng/source/items/svxfont.cxx --- a/editeng/source/items/svxfont.cxx Sun Apr 25 15:43:24 2010 +0100 +++ b/editeng/source/items/svxfont.cxx Mon Apr 26 15:08:39 2010 +0100 @@ -42,6 +42,8 @@ #include #include +#include + // Minimum: Prozentwert fuers kernen #define MINKERNPERCENT 5 @@ -458,30 +460,42 @@ Size SvxFont::QuickGetTextSize( const OutputDevice *pOut, const XubString &rTxt, const USHORT nIdx, const USHORT nLen, sal_Int32* pDXArray ) const { + Size aTxtSize; if ( !IsCaseMap() && !IsKern() ) - return Size( pOut->GetTextArray( rTxt, pDXArray, nIdx, nLen ), + { + aTxtSize = Size( pOut->GetTextArray( rTxt, pDXArray, nIdx, nLen ), pOut->GetTextHeight() ); - Size aTxtSize; - aTxtSize.setHeight( pOut->GetTextHeight() ); - if ( !IsCaseMap() ) - aTxtSize.setWidth( pOut->GetTextArray( rTxt, pDXArray, nIdx, nLen ) ); +// for (int i = 0;i < nLen; i++) +// fprintf(stderr, "initial pos %d is at %d\n", i, pDXArray[i]); + + } else - aTxtSize.setWidth( pOut->GetTextArray( CalcCaseMap( rTxt ), - pDXArray, nIdx, nLen ) ); + { + aTxtSize.setHeight( pOut->GetTextHeight() ); + if ( !IsCaseMap() ) + aTxtSize.setWidth( pOut->GetTextArray( rTxt, pDXArray, nIdx, nLen ) ); + else + aTxtSize.setWidth( pOut->GetTextArray( CalcCaseMap( rTxt ), + pDXArray, nIdx, nLen ) ); - if( IsKern() && ( nLen > 1 ) ) - { - aTxtSize.Width() += ( ( nLen-1 ) * long( nKern ) ); + if( IsKern() && ( nLen > 1 ) ) + { + aTxtSize.Width() += ( ( nLen-1 ) * long( nKern ) ); - if ( pDXArray ) - { - for ( xub_StrLen i = 0; i < nLen; i++ ) - pDXArray[i] += ( (i+1) * long( nKern ) ); - // Der letzte ist um ein nKern zu gross: - pDXArray[nLen-1] -= nKern; - } + if ( pDXArray ) + { + for ( xub_StrLen i = 0; i < nLen; i++ ) + pDXArray[i] += ( (i+1) * long( nKern ) ); + // Der letzte ist um ein nKern zu gross: + pDXArray[nLen-1] -= nKern; + } + } } + +// for (int i = 0;i < nLen; i++) +// fprintf(stderr, "pos %d is at %d\n", i, pDXArray[i]); + return aTxtSize; }