convert more XubString->OUString in OutputDevice

Change-Id: I7c100614f7321c8c0527067012b47673ac6914f1
This commit is contained in:
Noel Grandin
2013-07-25 17:15:41 +02:00
parent 7ef052646a
commit bfc58ddbf4
3 changed files with 61 additions and 56 deletions

View File

@@ -51,18 +51,18 @@ class GetDevSizeList;
class ImplDevFontListData
{
public:
ImplDevFontListData( const String& rSearchName );
ImplDevFontListData( const OUString& rSearchName );
~ImplDevFontListData();
const OUString& GetFamilyName() const { return maName; }
const String& GetSearchName() const { return maSearchName; }
const OUString& GetSearchName() const { return maSearchName; }
const OUString& GetAliasNames() const { return maMapNames; }
bool IsScalable() const { return mpFirst->IsScalable(); }
int GetMinQuality() const { return mnMinQuality; }
bool AddFontFace( PhysicalFontFace* );
void InitMatchData( const utl::FontSubstConfiguration&,
const String& rSearchName );
const OUString& rSearchName );
PhysicalFontFace* FindBestFontFace( const FontSelectPattern& rFSD ) const;
void GetFontHeights( std::set<int>& rHeights ) const;
@@ -74,11 +74,11 @@ private:
friend class ImplDevFontList; // TODO: remove soon
PhysicalFontFace* mpFirst; // linked list of physical font faces
OUString maName; // Fontname (original font family name)
String maSearchName; // normalized font family name
OUString maSearchName; // normalized font family name
OUString maMapNames; // fontname aliases
sal_uIntPtr mnTypeFaces; // Typeface Flags
sal_uIntPtr mnMatchType; // MATCH - Type
String maMatchFamilyName; // MATCH - FamilyName
OUString maMatchFamilyName; // MATCH - FamilyName
FontWeight meMatchWeight; // MATCH - Weight
FontWidth meMatchWidth; // MATCH - Width
FontFamily meFamily;
@@ -112,16 +112,16 @@ public:
class ImplGetDevSizeList
{
private:
String maFontName;
OUString maFontName;
std::vector<int> maSizeList;
public:
ImplGetDevSizeList( const String& rFontName )
ImplGetDevSizeList( const OUString& rFontName )
: maFontName( rFontName ) { maSizeList.reserve( 32 ); }
void Add( int nHeight ) { maSizeList.push_back( nHeight ); }
int Count() const { return maSizeList.size(); }
int Get( int nIndex ) const { return maSizeList[ nIndex ]; }
const String& GetFontName() const { return maFontName; }
const OUString& GetFontName() const { return maFontName; }
};
// ------------------------
@@ -148,8 +148,8 @@ protected:
struct ImplFontSubstEntry
{
String maName;
String maReplaceName;
OUString maName;
OUString maReplaceName;
OUString maSearchName;
OUString maSearchReplaceName;
sal_uInt16 mnFlags;
@@ -164,13 +164,13 @@ private:
typedef std::list<ImplFontSubstEntry> FontSubstList;
FontSubstList maFontSubstList;
public:
void AddFontSubstitute( const String& rFontName, const String& rSubstName, sal_uInt16 nFlags );
void AddFontSubstitute( const OUString& rFontName, const OUString& rSubstName, sal_uInt16 nFlags );
void RemoveFontSubstitute( int nIndex );
int GetFontSubstituteCount() const { return maFontSubstList.size(); };
bool Empty() const { return maFontSubstList.empty(); }
void Clear() { maFontSubstList.clear(); }
bool FindFontSubstitute( String& rSubstName, const String& rFontName, sal_uInt16 nFlags ) const;
bool FindFontSubstitute( OUString& rSubstName, const OUString& rFontName, sal_uInt16 nFlags ) const;
};
// PreMatchFontSubstitution

View File

@@ -361,9 +361,9 @@ public: // TODO: make data members private
short mnOrientation; // text angle in 3600 system
bool mbInit; // true if maMetric member is valid
void AddFallbackForUnicode( sal_UCS4, FontWeight eWeight, const String& rFontName );
void AddFallbackForUnicode( sal_UCS4, FontWeight eWeight, const OUString& rFontName );
bool GetFallbackForUnicode( sal_UCS4, FontWeight eWeight, OUString* pFontName ) const;
void IgnoreFallbackForUnicode( sal_UCS4, FontWeight eWeight, const String& rFontName );
void IgnoreFallbackForUnicode( sal_UCS4, FontWeight eWeight, const OUString& rFontName );
private:
// cache of Unicode characters and replacement font names

View File

@@ -324,8 +324,8 @@ void OutputDevice::AddFontSubstitute( const OUString& rFontName,
ImplGetSVData()->maGDIData.mbFontSubChanged = sal_True;
}
void ImplDirectFontSubstitution::AddFontSubstitute( const String& rFontName,
const String& rSubstFontName, sal_uInt16 nFlags )
void ImplDirectFontSubstitution::AddFontSubstitute( const OUString& rFontName,
const OUString& rSubstFontName, sal_uInt16 nFlags )
{
maFontSubstList.push_back( ImplFontSubstEntry( rFontName, rSubstFontName, nFlags ) );
}
@@ -374,8 +374,8 @@ sal_uInt16 OutputDevice::GetFontSubstituteCount()
return (sal_uInt16)nCount;
}
bool ImplDirectFontSubstitution::FindFontSubstitute( String& rSubstName,
const String& rSearchName, sal_uInt16 nFlags ) const
bool ImplDirectFontSubstitution::FindFontSubstitute( OUString& rSubstName,
const OUString& rSearchName, sal_uInt16 nFlags ) const
{
// TODO: get rid of O(N) searches
FontSubstList::const_iterator it = maFontSubstList.begin();
@@ -402,7 +402,7 @@ static void ImplFontSubstitute( OUString& rFontName,
DBG_ASSERT( aTempName == rFontName, "ImplFontSubstitute() called without a searchname" );
#endif
String aSubstFontName;
OUString aSubstFontName;
// apply user-configurable font replacement (eg, from the list in Tools->Options)
const ImplDirectFontSubstitution* pSubst = ImplGetSVData()->maGDIData.mpDirectFontSubst;
@@ -616,34 +616,33 @@ Font OutputDevice::GetDefaultFont( sal_uInt16 nType, LanguageType eLang,
return aFont;
}
static unsigned ImplIsCJKFont( const String& rFontName )
static unsigned ImplIsCJKFont( const OUString& rFontName )
{
// Test, if Fontname includes CJK characters --> In this case we
// mention that it is a CJK font
const sal_Unicode* pStr = rFontName.GetBuffer();
while ( *pStr )
for(int i = 0; i < rFontName.getLength(); i++)
{
const sal_Unicode ch = rFontName[i];
// japanese
if ( ((*pStr >= 0x3040) && (*pStr <= 0x30FF)) ||
((*pStr >= 0x3190) && (*pStr <= 0x319F)) )
if ( ((ch >= 0x3040) && (ch <= 0x30FF)) ||
((ch >= 0x3190) && (ch <= 0x319F)) )
return IMPL_FONT_ATTR_CJK|IMPL_FONT_ATTR_CJK_JP;
// korean
if ( ((*pStr >= 0xAC00) && (*pStr <= 0xD7AF)) ||
((*pStr >= 0x3130) && (*pStr <= 0x318F)) ||
((*pStr >= 0x1100) && (*pStr <= 0x11FF)) )
if ( ((ch >= 0xAC00) && (ch <= 0xD7AF)) ||
((ch >= 0x3130) && (ch <= 0x318F)) ||
((ch >= 0x1100) && (ch <= 0x11FF)) )
return IMPL_FONT_ATTR_CJK|IMPL_FONT_ATTR_CJK_KR;
// chinese
if ( ((*pStr >= 0x3400) && (*pStr <= 0x9FFF)) )
if ( ((ch >= 0x3400) && (ch <= 0x9FFF)) )
return IMPL_FONT_ATTR_CJK|IMPL_FONT_ATTR_CJK_TC|IMPL_FONT_ATTR_CJK_SC;
// cjk
if ( ((*pStr >= 0x3000) && (*pStr <= 0xD7AF)) ||
((*pStr >= 0xFF00) && (*pStr <= 0xFFEE)) )
if ( ((ch >= 0x3000) && (ch <= 0xD7AF)) ||
((ch >= 0xFF00) && (ch <= 0xFFEE)) )
return IMPL_FONT_ATTR_CJK;
pStr++;
}
return 0;
@@ -739,7 +738,7 @@ public:
int mnFaceMatch;
int mnHeightMatch;
int mnWidthMatch;
const sal_Unicode* mpTargetStyleName;
const OUString* mpTargetStyleName;
};
bool PhysicalFontFace::IsBetterMatch( const FontSelectPattern& rFSD, FontMatchStatus& rStatus ) const
@@ -751,7 +750,7 @@ bool PhysicalFontFace::IsBetterMatch( const FontSelectPattern& rFSD, FontMatchSt
nMatch += 240000;
if( rStatus.mpTargetStyleName
&& GetStyleName().equalsIgnoreAsciiCase( rStatus.mpTargetStyleName ) )
&& GetStyleName().equalsIgnoreAsciiCase( *rStatus.mpTargetStyleName ) )
nMatch += 120000;
if( (rFSD.GetPitch() != PITCH_DONTKNOW) && (rFSD.GetPitch() == GetPitch()) )
@@ -910,7 +909,7 @@ size_t ImplFontEntry::GFBCacheKey_Hash::operator()( const GFBCacheKey& rData ) c
return a(rData.first) ^ b(rData.second);
}
inline void ImplFontEntry::AddFallbackForUnicode( sal_UCS4 cChar, FontWeight eWeight, const String& rFontName )
inline void ImplFontEntry::AddFallbackForUnicode( sal_UCS4 cChar, FontWeight eWeight, const OUString& rFontName )
{
if( !mpUnicodeFallbackList )
mpUnicodeFallbackList = new UnicodeFallbackList;
@@ -930,7 +929,7 @@ inline bool ImplFontEntry::GetFallbackForUnicode( sal_UCS4 cChar, FontWeight eWe
return true;
}
inline void ImplFontEntry::IgnoreFallbackForUnicode( sal_UCS4 cChar, FontWeight eWeight, const String& rFontName )
inline void ImplFontEntry::IgnoreFallbackForUnicode( sal_UCS4 cChar, FontWeight eWeight, const OUString& rFontName )
{
// DBG_ASSERT( mpUnicodeFallbackList, "ImplFontEntry::IgnoreFallbackForUnicode no list" );
UnicodeFallbackList::iterator it = mpUnicodeFallbackList->find( GFBCacheKey(cChar,eWeight) );
@@ -941,7 +940,7 @@ inline void ImplFontEntry::IgnoreFallbackForUnicode( sal_UCS4 cChar, FontWeight
mpUnicodeFallbackList->erase( it );
}
ImplDevFontListData::ImplDevFontListData( const String& rSearchName )
ImplDevFontListData::ImplDevFontListData( const OUString& rSearchName )
: mpFirst( NULL ),
maSearchName( rSearchName ),
mnTypeFaces( 0 ),
@@ -1064,7 +1063,7 @@ bool ImplDevFontListData::AddFontFace( PhysicalFontFace* pNewData )
// get font attributes using the normalized font family name
void ImplDevFontListData::InitMatchData( const utl::FontSubstConfiguration& rFontSubst,
const String& rSearchName )
const OUString& rSearchName )
{
OUString aShortName;
OUString aMatchFamilyName(maMatchFamilyName);
@@ -1089,11 +1088,15 @@ PhysicalFontFace* ImplDevFontListData::FindBestFontFace( const FontSelectPattern
return mpFirst;
// FontName+StyleName should map to FamilyName+StyleName
const String& rSearchName = rFSD.maTargetName;
const sal_Unicode* pTargetStyleName = NULL;
if( (rSearchName.Len() > maSearchName.Len())
&& rSearchName.Equals( maSearchName, 0, maSearchName.Len() ) )
pTargetStyleName = rSearchName.GetBuffer() + maSearchName.Len() + 1;
const OUString& rSearchName = rFSD.maTargetName;
OUString aTargetStyleName;
const OUString* pTargetStyleName = NULL;
if( (rSearchName.getLength() > maSearchName.getLength())
&& rSearchName.startsWith( maSearchName ) )
{
aTargetStyleName = rSearchName.copy(maSearchName.getLength() + 1);
pTargetStyleName = &aTargetStyleName;
}
// TODO: linear search improve!
PhysicalFontFace* pFontFace = mpFirst;
@@ -1731,9 +1734,9 @@ ImplDevFontListData* ImplDevFontList::ImplFindByAttributes( sal_uLong nSearchTyp
// test font name substrings
// TODO: calculate name matching score using e.g. Levenstein distance
if( (rSearchFamilyName.getLength() >= 4) && (pData->maMatchFamilyName.Len() >= 4)
if( (rSearchFamilyName.getLength() >= 4) && (pData->maMatchFamilyName.getLength() >= 4)
&& ((rSearchFamilyName.indexOf( pData->maMatchFamilyName ) != -1)
|| (pData->maMatchFamilyName.Search( rSearchFamilyName ) != STRING_NOTFOUND)) )
|| (pData->maMatchFamilyName.indexOf( rSearchFamilyName ) != -1)) )
nTestMatch += 5000;
// test SERIF attribute
@@ -6141,7 +6144,7 @@ void OutputDevice::ImplDrawText( OutputDevice& rTargetDevice, const Rectangle& r
TextAlign eAlign = rTargetDevice.GetTextAlign();
xub_StrLen nMnemonicPos = STRING_NOTFOUND;
String aStr = rOrigStr;
OUString aStr = rOrigStr;
if ( nStyle & TEXT_DRAW_MNEMONIC )
aStr = GetNonMnemonicString( aStr, nMnemonicPos );
@@ -6151,7 +6154,7 @@ void OutputDevice::ImplDrawText( OutputDevice& rTargetDevice, const Rectangle& r
if ( nStyle & TEXT_DRAW_MULTILINE )
{
String aLastLine;
OUString aLastLine;
ImplMultiTextLineInfo aMultiLineInfo;
ImplTextLineInfo* pLineInfo;
xub_StrLen i;
@@ -6173,14 +6176,16 @@ void OutputDevice::ImplDrawText( OutputDevice& rTargetDevice, const Rectangle& r
nFormatLines = nLines-1;
pLineInfo = aMultiLineInfo.GetLine( nFormatLines );
aLastLine = convertLineEnd(aStr.Copy(pLineInfo->GetIndex()), LINEEND_LF);
aLastLine = convertLineEnd(aStr.copy(pLineInfo->GetIndex()), LINEEND_LF);
// Replace all LineFeeds with Spaces
xub_StrLen nLastLineLen = aLastLine.Len();
OUStringBuffer aLastLineBuffer(aLastLine);
xub_StrLen nLastLineLen = aLastLineBuffer.getLength();
for ( i = 0; i < nLastLineLen; i++ )
{
if ( aLastLine.GetChar( i ) == '\n' )
aLastLine.SetChar( i, ' ' );
if ( aLastLineBuffer[ i ] == '\n' )
aLastLineBuffer[ i ] = ' ';
}
aLastLine = aLastLineBuffer.makeStringAndClear();
aLastLine = ImplGetEllipsisString( rTargetDevice, aLastLine, nWidth, nStyle, _rLayout );
nStyle &= ~(TEXT_DRAW_VCENTER | TEXT_DRAW_BOTTOM);
nStyle |= TEXT_DRAW_TOP;
@@ -6253,7 +6258,7 @@ void OutputDevice::ImplDrawText( OutputDevice& rTargetDevice, const Rectangle& r
// If there still is a last line, we output it left-aligned as the line would be clipped
if ( aLastLine.Len() )
if ( !aLastLine.isEmpty() )
_rLayout.DrawText( aPos, aLastLine, 0, STRING_LEN, pVector, pDisplayText );
// Reset clipping
@@ -6273,7 +6278,7 @@ void OutputDevice::ImplDrawText( OutputDevice& rTargetDevice, const Rectangle& r
aStr = ImplGetEllipsisString( rTargetDevice, aStr, nWidth, nStyle, _rLayout );
nStyle &= ~(TEXT_DRAW_CENTER | TEXT_DRAW_RIGHT);
nStyle |= TEXT_DRAW_LEFT;
nTextWidth = _rLayout.GetTextWidth( aStr, 0, aStr.Len() );
nTextWidth = _rLayout.GetTextWidth( aStr, 0, aStr.getLength() );
}
}
else
@@ -6304,8 +6309,8 @@ void OutputDevice::ImplDrawText( OutputDevice& rTargetDevice, const Rectangle& r
long nMnemonicWidth = 0;
if ( nMnemonicPos != STRING_NOTFOUND )
{
sal_Int32* pCaretXArray = (sal_Int32*) alloca( 2 * sizeof(sal_Int32) * aStr.Len() );
/*sal_Bool bRet =*/ _rLayout.GetCaretPositions( aStr, pCaretXArray, 0, aStr.Len() );
sal_Int32* pCaretXArray = (sal_Int32*) alloca( 2 * sizeof(sal_Int32) * aStr.getLength() );
/*sal_Bool bRet =*/ _rLayout.GetCaretPositions( aStr, pCaretXArray, 0, aStr.getLength() );
long lc_x1 = pCaretXArray[2*(nMnemonicPos)];
long lc_x2 = pCaretXArray[2*(nMnemonicPos)+1];
nMnemonicWidth = rTargetDevice.ImplLogicWidthToDevicePixel( ::abs((int)(lc_x1 - lc_x2)) );
@@ -6438,7 +6443,7 @@ Rectangle OutputDevice::GetTextRect( const Rectangle& rRect,
long nMaxWidth;
long nTextHeight = GetTextHeight();
String aStr = rStr;
OUString aStr = rStr;
if ( nStyle & TEXT_DRAW_MNEMONIC )
aStr = GetNonMnemonicString( aStr );
@@ -6499,7 +6504,7 @@ Rectangle OutputDevice::GetTextRect( const Rectangle& rRect,
else
{
nLines = 1;
nMaxWidth = _pTextLayout ? _pTextLayout->GetTextWidth( aStr, 0, aStr.Len() ) : GetTextWidth( aStr );
nMaxWidth = _pTextLayout ? _pTextLayout->GetTextWidth( aStr, 0, aStr.getLength() ) : GetTextWidth( aStr );
if ( pInfo )
{