Font and ImplLayoutArgs with LanguageTag
Avoid the gazillion temporary conversions / Impl searches. Change-Id: I5232589f1e31d1cbb6becc198b12daabf1038f31
This commit is contained in:
@@ -23,7 +23,7 @@
|
|||||||
#include <sal/types.h>
|
#include <sal/types.h>
|
||||||
#include <vcl/dllapi.h>
|
#include <vcl/dllapi.h>
|
||||||
#include <tools/string.hxx>
|
#include <tools/string.hxx>
|
||||||
#include <i18nlangtag/lang.h>
|
#include <i18nlangtag/languagetag.hxx>
|
||||||
#include <tools/color.hxx>
|
#include <tools/color.hxx>
|
||||||
#include <vcl/vclenum.hxx>
|
#include <vcl/vclenum.hxx>
|
||||||
#include <vcl/fntstyle.hxx>
|
#include <vcl/fntstyle.hxx>
|
||||||
@@ -79,6 +79,11 @@ public:
|
|||||||
FontFamily GetFamily() const;
|
FontFamily GetFamily() const;
|
||||||
void SetCharSet( rtl_TextEncoding );
|
void SetCharSet( rtl_TextEncoding );
|
||||||
rtl_TextEncoding GetCharSet() const;
|
rtl_TextEncoding GetCharSet() const;
|
||||||
|
// Prefer LanguageTag over LanguageType
|
||||||
|
void SetLanguageTag( const LanguageTag & );
|
||||||
|
const LanguageTag& GetLanguageTag() const;
|
||||||
|
void SetCJKContextLanguageTag( const LanguageTag& );
|
||||||
|
const LanguageTag& GetCJKContextLanguageTag() const;
|
||||||
void SetLanguage( LanguageType );
|
void SetLanguage( LanguageType );
|
||||||
LanguageType GetLanguage() const;
|
LanguageType GetLanguage() const;
|
||||||
void SetCJKContextLanguage( LanguageType );
|
void SetCJKContextLanguage( LanguageType );
|
||||||
|
@@ -102,8 +102,7 @@ void ServerFontLayout::setNeedFallback(ImplLayoutArgs& rArgs, sal_Int32 nCharPos
|
|||||||
"com.sun.star.i18n.BreakIterator"), uno::UNO_QUERY);
|
"com.sun.star.i18n.BreakIterator"), uno::UNO_QUERY);
|
||||||
}
|
}
|
||||||
|
|
||||||
LanguageTag aLangTag(rArgs.meLanguage);
|
lang::Locale aLocale(rArgs.maLanguageTag.getLocale());
|
||||||
lang::Locale aLocale(aLangTag.getLocale());
|
|
||||||
|
|
||||||
//if position nCharPos is missing in the font, grab the entire grapheme and
|
//if position nCharPos is missing in the font, grab the entire grapheme and
|
||||||
//mark all glyphs as missing so the whole thing is rendered with the same
|
//mark all glyphs as missing so the whole thing is rendered with the same
|
||||||
@@ -417,8 +416,7 @@ bool HbLayoutEngine::layout(ServerFontLayout& rLayout, ImplLayoutArgs& rArgs)
|
|||||||
|
|
||||||
meScriptCode = eScriptCode;
|
meScriptCode = eScriptCode;
|
||||||
|
|
||||||
LanguageTag aLangTag(rArgs.meLanguage);
|
OString sLanguage = OUStringToOString(rArgs.maLanguageTag.getLanguage(), RTL_TEXTENCODING_UTF8);
|
||||||
OString sLanguage = OUStringToOString(aLangTag.getLanguage(), RTL_TEXTENCODING_UTF8);
|
|
||||||
|
|
||||||
if (pHbUnicodeFuncs == NULL)
|
if (pHbUnicodeFuncs == NULL)
|
||||||
pHbUnicodeFuncs = getUnicodeFuncs();
|
pHbUnicodeFuncs = getUnicodeFuncs();
|
||||||
|
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#include <tools/gen.hxx>
|
#include <tools/gen.hxx>
|
||||||
#include <tools/string.hxx>
|
#include <tools/string.hxx>
|
||||||
#include <i18nlangtag/lang.h>
|
#include <i18nlangtag/languagetag.hxx>
|
||||||
#include <tools/color.hxx>
|
#include <tools/color.hxx>
|
||||||
#include <vcl/dllapi.h>
|
#include <vcl/dllapi.h>
|
||||||
#include <vcl/vclenum.hxx>
|
#include <vcl/vclenum.hxx>
|
||||||
@@ -60,8 +60,8 @@ private:
|
|||||||
Color maColor; // compatibility, now on output device
|
Color maColor; // compatibility, now on output device
|
||||||
Color maFillColor; // compatibility, now on output device
|
Color maFillColor; // compatibility, now on output device
|
||||||
rtl_TextEncoding meCharSet;
|
rtl_TextEncoding meCharSet;
|
||||||
LanguageType meLanguage;
|
LanguageTag maLanguageTag;
|
||||||
LanguageType meCJKLanguage;
|
LanguageTag maCJKLanguageTag;
|
||||||
FontFamily meFamily;
|
FontFamily meFamily;
|
||||||
FontPitch mePitch;
|
FontPitch mePitch;
|
||||||
TextAlign meAlign;
|
TextAlign meAlign;
|
||||||
|
@@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
#include <tools/gen.hxx>
|
#include <tools/gen.hxx>
|
||||||
#include <basegfx/polygon/b2dpolypolygon.hxx>
|
#include <basegfx/polygon/b2dpolypolygon.hxx>
|
||||||
|
#include <i18nlangtag/languagetag.hxx>
|
||||||
|
|
||||||
#ifndef _TOOLS_LANG_HXX
|
#ifndef _TOOLS_LANG_HXX
|
||||||
typedef unsigned short LanguageType;
|
typedef unsigned short LanguageType;
|
||||||
@@ -83,7 +84,7 @@ class ImplLayoutArgs
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// string related inputs
|
// string related inputs
|
||||||
LanguageType meLanguage;
|
LanguageTag maLanguageTag;
|
||||||
int mnFlags;
|
int mnFlags;
|
||||||
int mnLength;
|
int mnLength;
|
||||||
int mnMinCharPos;
|
int mnMinCharPos;
|
||||||
@@ -101,7 +102,7 @@ public:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
ImplLayoutArgs( const sal_Unicode* pStr, int nLength,
|
ImplLayoutArgs( const sal_Unicode* pStr, int nLength,
|
||||||
int nMinCharPos, int nEndCharPos, int nFlags, LanguageType eLanguage );
|
int nMinCharPos, int nEndCharPos, int nFlags, const LanguageTag& rLanguageTag );
|
||||||
|
|
||||||
void SetLayoutWidth( long nWidth ) { mnLayoutWidth = nWidth; }
|
void SetLayoutWidth( long nWidth ) { mnLayoutWidth = nWidth; }
|
||||||
void SetDXArray( const sal_Int32* pDXArray ) { mpDXArray = pDXArray; }
|
void SetDXArray( const sal_Int32* pDXArray ) { mpDXArray = pDXArray; }
|
||||||
|
@@ -41,12 +41,12 @@ DBG_NAME( Font )
|
|||||||
|
|
||||||
Impl_Font::Impl_Font() :
|
Impl_Font::Impl_Font() :
|
||||||
maColor( COL_TRANSPARENT ),
|
maColor( COL_TRANSPARENT ),
|
||||||
maFillColor( COL_TRANSPARENT )
|
maFillColor( COL_TRANSPARENT ),
|
||||||
|
maLanguageTag( LANGUAGE_DONTKNOW ),
|
||||||
|
maCJKLanguageTag( LANGUAGE_DONTKNOW )
|
||||||
{
|
{
|
||||||
mnRefCount = 1;
|
mnRefCount = 1;
|
||||||
meCharSet = RTL_TEXTENCODING_DONTKNOW;
|
meCharSet = RTL_TEXTENCODING_DONTKNOW;
|
||||||
meLanguage = LANGUAGE_DONTKNOW;
|
|
||||||
meCJKLanguage = LANGUAGE_DONTKNOW;
|
|
||||||
meFamily = FAMILY_DONTKNOW;
|
meFamily = FAMILY_DONTKNOW;
|
||||||
mePitch = PITCH_DONTKNOW;
|
mePitch = PITCH_DONTKNOW;
|
||||||
meAlign = ALIGN_TOP;
|
meAlign = ALIGN_TOP;
|
||||||
@@ -73,12 +73,12 @@ Impl_Font::Impl_Font( const Impl_Font& rImplFont )
|
|||||||
maStyleName( rImplFont.maStyleName ),
|
maStyleName( rImplFont.maStyleName ),
|
||||||
maSize( rImplFont.maSize ),
|
maSize( rImplFont.maSize ),
|
||||||
maColor( rImplFont.maColor ),
|
maColor( rImplFont.maColor ),
|
||||||
maFillColor( rImplFont.maFillColor )
|
maFillColor( rImplFont.maFillColor ),
|
||||||
|
maLanguageTag( rImplFont.maLanguageTag ),
|
||||||
|
maCJKLanguageTag( rImplFont.maCJKLanguageTag )
|
||||||
{
|
{
|
||||||
mnRefCount = 1;
|
mnRefCount = 1;
|
||||||
meCharSet = rImplFont.meCharSet;
|
meCharSet = rImplFont.meCharSet;
|
||||||
meLanguage = rImplFont.meLanguage;
|
|
||||||
meCJKLanguage = rImplFont.meCJKLanguage;
|
|
||||||
meFamily = rImplFont.meFamily;
|
meFamily = rImplFont.meFamily;
|
||||||
mePitch = rImplFont.mePitch;
|
mePitch = rImplFont.mePitch;
|
||||||
meAlign = rImplFont.meAlign;
|
meAlign = rImplFont.meAlign;
|
||||||
@@ -110,8 +110,8 @@ bool Impl_Font::operator==( const Impl_Font& rOther ) const
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
if( (meCharSet != rOther.meCharSet)
|
if( (meCharSet != rOther.meCharSet)
|
||||||
|| (meLanguage != rOther.meLanguage)
|
|| (maLanguageTag != rOther.maLanguageTag)
|
||||||
|| (meCJKLanguage != rOther.meCJKLanguage)
|
|| (maCJKLanguageTag != rOther.maCJKLanguageTag)
|
||||||
|| (meAlign != rOther.meAlign) )
|
|| (meAlign != rOther.meAlign) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -384,14 +384,36 @@ void Font::SetCharSet( rtl_TextEncoding eCharSet )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Font::SetLanguageTag( const LanguageTag& rLanguageTag )
|
||||||
|
{
|
||||||
|
DBG_CHKTHIS( Font, NULL );
|
||||||
|
|
||||||
|
if( mpImplFont->maLanguageTag != rLanguageTag )
|
||||||
|
{
|
||||||
|
MakeUnique();
|
||||||
|
mpImplFont->maLanguageTag = rLanguageTag;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Font::SetCJKContextLanguageTag( const LanguageTag& rLanguageTag )
|
||||||
|
{
|
||||||
|
DBG_CHKTHIS( Font, NULL );
|
||||||
|
|
||||||
|
if( mpImplFont->maCJKLanguageTag != rLanguageTag )
|
||||||
|
{
|
||||||
|
MakeUnique();
|
||||||
|
mpImplFont->maCJKLanguageTag = rLanguageTag;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Font::SetLanguage( LanguageType eLanguage )
|
void Font::SetLanguage( LanguageType eLanguage )
|
||||||
{
|
{
|
||||||
DBG_CHKTHIS( Font, NULL );
|
DBG_CHKTHIS( Font, NULL );
|
||||||
|
|
||||||
if( mpImplFont->meLanguage != eLanguage )
|
if( mpImplFont->maLanguageTag.getLanguageType( false) != eLanguage )
|
||||||
{
|
{
|
||||||
MakeUnique();
|
MakeUnique();
|
||||||
mpImplFont->meLanguage = eLanguage;
|
mpImplFont->maLanguageTag.reset( eLanguage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -399,10 +421,10 @@ void Font::SetCJKContextLanguage( LanguageType eLanguage )
|
|||||||
{
|
{
|
||||||
DBG_CHKTHIS( Font, NULL );
|
DBG_CHKTHIS( Font, NULL );
|
||||||
|
|
||||||
if( mpImplFont->meCJKLanguage != eLanguage )
|
if( mpImplFont->maCJKLanguageTag.getLanguageType( false) != eLanguage )
|
||||||
{
|
{
|
||||||
MakeUnique();
|
MakeUnique();
|
||||||
mpImplFont->meCJKLanguage = eLanguage;
|
mpImplFont->maCJKLanguageTag.reset( eLanguage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -623,8 +645,8 @@ void Font::Merge( const Font& rFont )
|
|||||||
SetName( rFont.GetName() );
|
SetName( rFont.GetName() );
|
||||||
SetStyleName( rFont.GetStyleName() );
|
SetStyleName( rFont.GetStyleName() );
|
||||||
SetCharSet( GetCharSet() );
|
SetCharSet( GetCharSet() );
|
||||||
SetLanguage( rFont.GetLanguage() );
|
SetLanguageTag( rFont.GetLanguageTag() );
|
||||||
SetCJKContextLanguage( rFont.GetCJKContextLanguage() );
|
SetCJKContextLanguageTag( rFont.GetCJKContextLanguageTag() );
|
||||||
// don't use access methods here, might lead to AskConfig(), if DONTKNOW
|
// don't use access methods here, might lead to AskConfig(), if DONTKNOW
|
||||||
SetFamily( rFont.mpImplFont->meFamily );
|
SetFamily( rFont.mpImplFont->meFamily );
|
||||||
SetPitch( rFont.mpImplFont->mePitch );
|
SetPitch( rFont.mpImplFont->mePitch );
|
||||||
@@ -697,7 +719,7 @@ SvStream& operator>>( SvStream& rIStm, Impl_Font& rImpl_Font )
|
|||||||
rIStm >> nTmp16; rImpl_Font.meUnderline = (FontUnderline) nTmp16;
|
rIStm >> nTmp16; rImpl_Font.meUnderline = (FontUnderline) nTmp16;
|
||||||
rIStm >> nTmp16; rImpl_Font.meStrikeout = (FontStrikeout) nTmp16;
|
rIStm >> nTmp16; rImpl_Font.meStrikeout = (FontStrikeout) nTmp16;
|
||||||
rIStm >> nTmp16; rImpl_Font.meItalic = (FontItalic) nTmp16;
|
rIStm >> nTmp16; rImpl_Font.meItalic = (FontItalic) nTmp16;
|
||||||
rIStm >> nTmp16; rImpl_Font.meLanguage = (LanguageType) nTmp16;
|
rIStm >> nTmp16; rImpl_Font.maLanguageTag.reset( (LanguageType) nTmp16);
|
||||||
rIStm >> nTmp16; rImpl_Font.meWidthType = (FontWidth) nTmp16;
|
rIStm >> nTmp16; rImpl_Font.meWidthType = (FontWidth) nTmp16;
|
||||||
|
|
||||||
rIStm >> rImpl_Font.mnOrientation;
|
rIStm >> rImpl_Font.mnOrientation;
|
||||||
@@ -710,7 +732,7 @@ SvStream& operator>>( SvStream& rIStm, Impl_Font& rImpl_Font )
|
|||||||
if( aCompat.GetVersion() >= 2 )
|
if( aCompat.GetVersion() >= 2 )
|
||||||
{
|
{
|
||||||
rIStm >> nTmp8; rImpl_Font.meRelief = (FontRelief)nTmp8;
|
rIStm >> nTmp8; rImpl_Font.meRelief = (FontRelief)nTmp8;
|
||||||
rIStm >> nTmp16; rImpl_Font.meCJKLanguage = (LanguageType)nTmp16;
|
rIStm >> nTmp16; rImpl_Font.maCJKLanguageTag.reset( (LanguageType)nTmp16);
|
||||||
rIStm >> bTmp; rImpl_Font.mbVertical = bTmp;
|
rIStm >> bTmp; rImpl_Font.mbVertical = bTmp;
|
||||||
rIStm >> nTmp16; rImpl_Font.meEmphasisMark = (FontEmphasisMark)nTmp16;
|
rIStm >> nTmp16; rImpl_Font.meEmphasisMark = (FontEmphasisMark)nTmp16;
|
||||||
}
|
}
|
||||||
@@ -738,7 +760,7 @@ SvStream& operator<<( SvStream& rOStm, const Impl_Font& rImpl_Font )
|
|||||||
rOStm << (sal_uInt16) rImpl_Font.meUnderline;
|
rOStm << (sal_uInt16) rImpl_Font.meUnderline;
|
||||||
rOStm << (sal_uInt16) rImpl_Font.meStrikeout;
|
rOStm << (sal_uInt16) rImpl_Font.meStrikeout;
|
||||||
rOStm << (sal_uInt16) rImpl_Font.meItalic;
|
rOStm << (sal_uInt16) rImpl_Font.meItalic;
|
||||||
rOStm << (sal_uInt16) rImpl_Font.meLanguage;
|
rOStm << (sal_uInt16) rImpl_Font.maLanguageTag.getLanguageType( false);
|
||||||
rOStm << (sal_uInt16) rImpl_Font.meWidthType;
|
rOStm << (sal_uInt16) rImpl_Font.meWidthType;
|
||||||
|
|
||||||
rOStm << rImpl_Font.mnOrientation;
|
rOStm << rImpl_Font.mnOrientation;
|
||||||
@@ -750,7 +772,7 @@ SvStream& operator<<( SvStream& rOStm, const Impl_Font& rImpl_Font )
|
|||||||
|
|
||||||
// new in version 2
|
// new in version 2
|
||||||
rOStm << (sal_uInt8) rImpl_Font.meRelief;
|
rOStm << (sal_uInt8) rImpl_Font.meRelief;
|
||||||
rOStm << (sal_uInt16) rImpl_Font.meCJKLanguage;
|
rOStm << (sal_uInt16) rImpl_Font.maCJKLanguageTag.getLanguageType( false);
|
||||||
rOStm << (sal_Bool) rImpl_Font.mbVertical;
|
rOStm << (sal_Bool) rImpl_Font.mbVertical;
|
||||||
rOStm << (sal_uInt16) rImpl_Font.meEmphasisMark;
|
rOStm << (sal_uInt16) rImpl_Font.meEmphasisMark;
|
||||||
|
|
||||||
@@ -1004,9 +1026,13 @@ long Font::GetWidth() const { return mpImplFont->maSize.Width(); }
|
|||||||
|
|
||||||
rtl_TextEncoding Font::GetCharSet() const { return mpImplFont->meCharSet; }
|
rtl_TextEncoding Font::GetCharSet() const { return mpImplFont->meCharSet; }
|
||||||
|
|
||||||
LanguageType Font::GetLanguage() const { return mpImplFont->meLanguage; }
|
const LanguageTag& Font::GetLanguageTag() const { return mpImplFont->maLanguageTag; }
|
||||||
|
|
||||||
LanguageType Font::GetCJKContextLanguage() const { return mpImplFont->meCJKLanguage; }
|
const LanguageTag& Font::GetCJKContextLanguageTag() const { return mpImplFont->maCJKLanguageTag; }
|
||||||
|
|
||||||
|
LanguageType Font::GetLanguage() const { return mpImplFont->maLanguageTag.getLanguageType( false); }
|
||||||
|
|
||||||
|
LanguageType Font::GetCJKContextLanguage() const { return mpImplFont->maCJKLanguageTag.getLanguageType( false); }
|
||||||
|
|
||||||
short Font::GetOrientation() const { return mpImplFont->mnOrientation; }
|
short Font::GetOrientation() const { return mpImplFont->mnOrientation; }
|
||||||
|
|
||||||
|
@@ -5744,7 +5744,7 @@ ImplLayoutArgs OutputDevice::ImplPrepareLayoutArgs( OUString& rStr,
|
|||||||
nLayoutFlags |= SAL_LAYOUT_RIGHT_ALIGN;
|
nLayoutFlags |= SAL_LAYOUT_RIGHT_ALIGN;
|
||||||
|
|
||||||
// set layout options
|
// set layout options
|
||||||
ImplLayoutArgs aLayoutArgs( rStr.getStr(), rStr.getLength(), nMinIndex, nEndIndex, nLayoutFlags, maFont.GetLanguage() );
|
ImplLayoutArgs aLayoutArgs( rStr.getStr(), rStr.getLength(), nMinIndex, nEndIndex, nLayoutFlags, maFont.GetLanguageTag() );
|
||||||
|
|
||||||
int nOrientation = mpFontEntry ? mpFontEntry->mnOrientation : 0;
|
int nOrientation = mpFontEntry ? mpFontEntry->mnOrientation : 0;
|
||||||
aLayoutArgs.SetOrientation( nOrientation );
|
aLayoutArgs.SetOrientation( nOrientation );
|
||||||
|
@@ -506,9 +506,9 @@ bool ImplLayoutRuns::GetRun( int* nMinRunPos, int* nEndRunPos, bool* bRightToLef
|
|||||||
// =======================================================================
|
// =======================================================================
|
||||||
|
|
||||||
ImplLayoutArgs::ImplLayoutArgs( const sal_Unicode* pStr, int nLen,
|
ImplLayoutArgs::ImplLayoutArgs( const sal_Unicode* pStr, int nLen,
|
||||||
int nMinCharPos, int nEndCharPos, int nFlags, LanguageType eLanguage )
|
int nMinCharPos, int nEndCharPos, int nFlags, const LanguageTag& rLanguageTag )
|
||||||
:
|
:
|
||||||
meLanguage( eLanguage ),
|
maLanguageTag( rLanguageTag ),
|
||||||
mnFlags( nFlags ),
|
mnFlags( nFlags ),
|
||||||
mnLength( nLen ),
|
mnLength( nLen ),
|
||||||
mnMinCharPos( nMinCharPos ),
|
mnMinCharPos( nMinCharPos ),
|
||||||
|
Reference in New Issue
Block a user