22#include <rtl/ustrbuf.hxx>
52#include <unicode/uchar.h>
136 return (pFound !=
nullptr);
189 aMetric.
SetFontSize(
PixelToLogic(
Size( xFontMetric->GetWidth(), xFontMetric->GetAscent() + xFontMetric->GetDescent() - xFontMetric->GetInternalLeading() ) ) );
190 aMetric.
SetCharSet( xFontMetric->IsMicrosoftSymbolEncoded() ? RTL_TEXTENCODING_SYMBOL : RTL_TEXTENCODING_UNICODE );
191 aMetric.
SetFamily( xFontMetric->GetFamilyType() );
192 aMetric.
SetPitch( xFontMetric->GetPitch() );
193 aMetric.
SetWeight( xFontMetric->GetWeight() );
194 aMetric.
SetItalic( xFontMetric->GetItalic() );
215 aMetric.
SetQuality( xFontMetric->GetQuality() );
217 SAL_INFO(
"vcl.gdi.fontmetric",
"OutputDevice::GetFontMetric:" << aMetric);
219 xFontMetric =
nullptr;
240 if (!xFontCharMap.
is())
243 rxFontCharMap = xDefaultMap;
246 rxFontCharMap = xFontCharMap;
248 return !rxFontCharMap->IsDefaultMap();
317 if ( !bNewFontLists )
352 ( pFrame->
GetOutDev()->*pHdl )( bNewFontLists );
357 ( pSysWin->
GetOutDev()->*pHdl )( bNewFontLists );
361 pFrame = pFrame->
mpWindowImpl->mpFrameData->mpNextFrame;
368 ( pVirDev->*pHdl )( bNewFontLists );
369 pVirDev = pVirDev->
mpNext;
376 ( pPrinter->*pHdl )( bNewFontLists );
377 pPrinter = pPrinter->
mpNext;
402 const OUString& rReplaceFontName,
424 static bool bAbortOnFontSubstitute = [] {
425 const char* pEnv = getenv(
"SAL_NON_APPLICATION_FONT_USE");
426 return pEnv && strcmp(pEnv,
"abort") == 0;
429 if (!pOutDev && !bFuzzing)
443 if( !aDefault.isEmpty() )
452 if (bAbortOnFontSubstitute)
455 aSearch =
"DejaVu Sans";
459 aSearch =
"Liberation Serif";
466 case DefaultFontType::SANS_UNICODE:
467 case DefaultFontType::UI_SANS:
471 case DefaultFontType::SANS:
472 case DefaultFontType::LATIN_HEADING:
473 case DefaultFontType::LATIN_SPREADSHEET:
474 case DefaultFontType::LATIN_DISPLAY:
478 case DefaultFontType::SERIF:
479 case DefaultFontType::LATIN_TEXT:
480 case DefaultFontType::LATIN_PRESENTATION:
484 case DefaultFontType::FIXED:
485 case DefaultFontType::LATIN_FIXED:
486 case DefaultFontType::UI_FIXED:
491 case DefaultFontType::SYMBOL:
495 case DefaultFontType::CJK_TEXT:
496 case DefaultFontType::CJK_PRESENTATION:
497 case DefaultFontType::CJK_SPREADSHEET:
498 case DefaultFontType::CJK_HEADING:
499 case DefaultFontType::CJK_DISPLAY:
503 case DefaultFontType::CTL_TEXT:
504 case DefaultFontType::CTL_PRESENTATION:
505 case DefaultFontType::CTL_SPREADSHEET:
506 case DefaultFontType::CTL_HEADING:
507 case DefaultFontType::CTL_DISPLAY:
512 if ( !aSearch.isEmpty() )
518 if ( aFont.
GetCharSet() == RTL_TEXTENCODING_DONTKNOW )
519 aFont.
SetCharSet( osl_getThreadTextEncoding() );
575 float fExactHeight =
static_cast<float>(aSize.
Height());
579 assert(pFontInstance->GetFontFace());
580 aFont.
SetFamilyName(pFontInstance->GetFontFace()->GetFamilyName());
589#if OSL_DEBUG_LEVEL > 2
590 const char* s =
"SANS_UNKNOWN";
593 case DefaultFontType::SANS_UNICODE: s =
"SANS_UNICODE";
break;
594 case DefaultFontType::UI_SANS: s =
"UI_SANS";
break;
596 case DefaultFontType::SANS: s =
"SANS";
break;
597 case DefaultFontType::LATIN_HEADING: s =
"LATIN_HEADING";
break;
598 case DefaultFontType::LATIN_SPREADSHEET: s =
"LATIN_SPREADSHEET";
break;
599 case DefaultFontType::LATIN_DISPLAY: s =
"LATIN_DISPLAY";
break;
601 case DefaultFontType::SERIF: s =
"SERIF";
break;
602 case DefaultFontType::LATIN_TEXT: s =
"LATIN_TEXT";
break;
603 case DefaultFontType::LATIN_PRESENTATION: s =
"LATIN_PRESENTATION";
break;
605 case DefaultFontType::FIXED: s =
"FIXED";
break;
606 case DefaultFontType::LATIN_FIXED: s =
"LATIN_FIXED";
break;
607 case DefaultFontType::UI_FIXED: s =
"UI_FIXED";
break;
609 case DefaultFontType::SYMBOL: s =
"SYMBOL";
break;
611 case DefaultFontType::CJK_TEXT: s =
"CJK_TEXT";
break;
612 case DefaultFontType::CJK_PRESENTATION: s =
"CJK_PRESENTATION";
break;
613 case DefaultFontType::CJK_SPREADSHEET: s =
"CJK_SPREADSHEET";
break;
614 case DefaultFontType::CJK_HEADING: s =
"CJK_HEADING";
break;
615 case DefaultFontType::CJK_DISPLAY: s =
"CJK_DISPLAY";
break;
617 case DefaultFontType::CTL_TEXT: s =
"CTL_TEXT";
break;
618 case DefaultFontType::CTL_PRESENTATION: s =
"CTL_PRESENTATION";
break;
619 case DefaultFontType::CTL_SPREADSHEET: s =
"CTL_SPREADSHEET";
break;
620 case DefaultFontType::CTL_HEADING: s =
"CTL_HEADING";
break;
621 case DefaultFontType::CTL_DISPLAY: s =
"CTL_DISPLAY";
break;
624 "OutputDevice::GetDefaultFont() Type=" << s
626 <<
" flags=" <<
static_cast<int>(nFlags)
642 SAL_INFO(
"vcl.gdi",
"OutputDevice::ImplInitFontList()" );
648 OUString aError(
"Application error: no fonts and no vcl resource found on your system" );
649 OUString aResStr(
VclResId(SV_ACCESSERROR_NO_FONTS));
650 if (!aResStr.isEmpty())
695 SAL_WARN(
"vcl.gdi",
"OutputDevice::ImplNewFont(): no Graphics, no Font");
713 fExactHeight =
static_cast<float>(aSize.
Height());
732 const bool bNewFontInstance = pOldFontInstance.get() !=
mpFontInstance.get();
733 pOldFontInstance.clear();
739 SAL_WARN(
"vcl.gdi",
"OutputDevice::ImplNewFont(): no LogicalFontInstance, no Font");
745 if( bNewFontInstance )
752 pFontInstance->
mbInit =
true;
757 pFontInstance->
mxFontMetric->ImplInitTextLineSize(
this );
758 pFontInstance->
mxFontMetric->ImplInitAboveTextLineSize(
this );
773 if ( nEmphasisHeight < 1 )
775 if ( nEmphasisMark & FontEmphasisMark::PosBelow )
794 Point aOriginPt(0, 0);
804 Point aOriginPt(0, 0);
828 if (fDenominator == 0.0)
831 float fStretch = fNumerator / fDenominator;
833 int nNewWidth =
static_cast<int>(nOrigWidth * fStretch + 0.5);
835 if (nNewWidth != nOrigWidth && nNewWidth != 0)
866 nX = nBaseX - (nX - nBaseX - 1);
871 if ( rPolyPoly.
Count() )
876 aPoly.
Move( nX, nY );
882 aPolyPoly.
Move( nX, nY );
907 bool bOldMap =
mbMap;
915 if ( nEmphasisMark & FontEmphasisMark::PosBelow )
934 Point aOffsetVert(0,0);
936 if ( nEmphasisMark & FontEmphasisMark::PosBelow )
939 aOffsetVert = aOffset;
950 tools::Long nEmphasisHeight2 = nEmphasisHeight / 2;
951 aOffset +=
Point( nEmphasisWidth2, nEmphasisHeight2 );
958 while (rSalLayout.
GetNextGlyph(&pGlyph, aOutPoint, nStart, &pGlyphFont))
968 aAdjPoint = aOffsetVert;
979 Point aOriginPt(0, 0);
982 aOutPoint.
adjustX(aAdjPoint.
X() - nEmphasisWidth2);
983 aOutPoint.
adjustY(aAdjPoint.
Y() - nEmphasisHeight2);
1014 if (!pFallback->LayoutText(rLayoutArgs, pGlyphs ? pGlyphs->
Impl(nFallbackLevel) :
nullptr))
1031 SAL_WARN (
"vcl.gdi",
"No font entry set in OutputDevice");
1037 std::unique_ptr<MultiSalLayout> pMultiSalLayout;
1044 int nMinRunPos, nEndRunPos;
1045 OUStringBuffer aMissingCodeBuf(512);
1046 while (rLayoutArgs.
GetNextRun(&nMinRunPos, &nEndRunPos, &bRTL))
1047 aMissingCodeBuf.append(rLayoutArgs.
mrStr.subView(nMinRunPos, nEndRunPos - nMinRunPos));
1049 OUString aMissingCodes = aMissingCodeBuf.makeStringAndClear();
1055 for(
int nFallbackLevel = 1; nFallbackLevel <
MAX_FALLBACK; ++nFallbackLevel )
1058 if(pGlyphsImpl !=
nullptr)
1059 pFallbackFont = pGlyphsImpl->
GetFont();
1063 OUString oldMissingCodes = aMissingCodes;
1064 if( !pFallbackFont )
1066 aFontSelData,
mpFontInstance.get(), nFallbackLevel, aMissingCodes );
1067 if( !pFallbackFont )
1079 if(
mpFontInstance->GetFontFace() == pFallbackFont->GetFontFace())
1081 if(aMissingCodes != oldMissingCodes)
1083 SAL_WARN(
"vcl.gdi",
"Font fallback to the same font, but has missing codes");
1085 aMissingCodes = oldMissingCodes;
1093 nFallbackLevel, rLayoutArgs, pGlyphs);
1096 if( !pMultiSalLayout )
1097 pMultiSalLayout.reset(
new MultiSalLayout( std::move(pSalLayout) ) );
1098 pMultiSalLayout->AddFallback(std::move(pFallback), rLayoutArgs.
maRuns);
1100 pMultiSalLayout->SetIncomplete(
true);
1103 if (pGlyphs !=
nullptr)
1104 pGlyphsImpl = pGlyphs->
Impl(nFallbackLevel + 1);
1111 if (pMultiSalLayout)
1114 if (pMultiSalLayout->LayoutText(rLayoutArgs,
nullptr))
1115 pSalLayout = std::move(pMultiSalLayout);
1120 pSalLayout = pMultiSalLayout->ReleaseBaseLayout();
1125 pSalLayout->InitFont();
1126 rLayoutArgs.
maRuns = aLayoutRuns;
1136 auto nKashidaWidth =
mpFontInstance->mxFontMetric->GetMinKashida();
1138 nKashidaWidth = std::ceil(nKashidaWidth);
1144 sal_Int32 nIdx, sal_Int32 nLen,
1145 sal_Int32 nKashCount,
1146 const sal_Int32* pKashidaPos,
1147 sal_Int32* pKashidaPosDropped )
const
1150 std::unique_ptr<SalLayout> pSalLayout =
ImplLayout( rTxt, nIdx, nLen );
1154 auto nEnd = nIdx + nLen - 1;
1155 sal_Int32 nDropped = 0;
1156 for(
int i = 0;
i < nKashCount; ++
i )
1158 auto nPos = pKashidaPos[
i];
1159 auto nNextPos =
nPos + 1;
1162 while (nNextPos <= nEnd &&
1163 u_getIntPropertyValue(rTxt[nNextPos], UCHAR_JOINING_TYPE) == U_JT_TRANSPARENT)
1170 if (nNextPos > nEnd)
1173 if (!pSalLayout->IsKashidaPosValid(
nPos, nNextPos))
1174 pKashidaPosDropped[nDropped++] =
nPos;
1180 int nIndex,
int nLen, std::vector< tools::Rectangle >& rVector )
const
1184 if(
nIndex >= rStr.getLength() )
1187 if( nLen < 0 || nIndex + nLen >= rStr.getLength() )
1189 nLen = rStr.getLength() -
nIndex;
1193 for(
int i = 0;
i < nLen;
i++ )
1197 aRect.
Move( rOrigin.
X(), rOrigin.
Y() );
1198 rVector.push_back( aRect );
1201 return (nLen ==
static_cast<int>(rVector.size()));
1205 sal_Int32 nIndex, sal_Int32 nLen )
const
1207 if(
nIndex >=
static_cast<sal_Int32
>(rStr.size()) )
1213 nEnd = std::min<sal_Int32>( rStr.size(),
nIndex + nLen );
1216 SAL_WARN_IF( nEnd >
static_cast<sal_Int32
>(rStr.size()),
"vcl.gdi",
"String too short" );
1230 if( ! xFontCharMap->HasChar( rStr[
i] ) )
const LanguageTag & GetUILanguageTag() const
const StyleSettings & GetStyleSettings() const
static void ImplCallEventListenersApplicationDataChanged(void *pData)
Send event to all VCL application event listeners.
static OutputDevice * GetDefaultDevice()
Get the default "device" (in this case the default window).
static void Abort(const OUString &rErrorText)
Ends the program prematurely with an error message.
static const AllSettings & GetSettings()
Gets the application's settings.
static void NotifyAllWindows(DataChangedEvent &rDCEvt)
Notify all windows that the application has changed data.
void SetDescent(tools::Long nDescent)
void SetFullstopCenteredFlag(bool bCentered)
void SetAscent(tools::Long nAscent)
void SetExternalLeading(tools::Long nExtLeading)
void SetLineHeight(tools::Long nHeight)
void SetHangingBaseline(tools::Long nBaseline)
void SetSlant(tools::Long nSlant)
void SetInternalLeading(tools::Long nIntLeading)
void SetBulletOffset(tools::Long nOffset)
bool GetGlyphBoundRect(const LogicalFontInstance *, tools::Rectangle &) const
const vcl::font::PhysicalFontFace * GetFontFace() const
FontMetricDataRef mxFontMetric
Degree10 mnOwnOrientation
const vcl::font::FontSelectPattern & GetFontSelectPattern() const
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
tools::Long mnEmphasisAscent
static SAL_DLLPRIVATE void ImplUpdateAllFontData(bool bNewFontLists)
LogicalFontInstance const * GetFontInstance() const
bool GetGlyphBoundRects(const Point &rOrigin, const OUString &rStr, int nIndex, int nLen, std::vector< tools::Rectangle > &rVector) const
SAL_DLLPRIVATE std::unique_ptr< SalLayout > ImplGlyphFallbackLayout(std::unique_ptr< SalLayout >, vcl::text::ImplLayoutArgs &, const SalLayoutGlyphs *) const
void EnableMapMode(bool bEnable=true)
static void ImplClearAllFontData(bool bNewFontLists)
sal_Int32 ValidateKashidas(const OUString &rTxt, sal_Int32 nIdx, sal_Int32 nLen, sal_Int32 nKashCount, const sal_Int32 *pKashidaPos, sal_Int32 *pKashidaPosDropped) const
const vcl::Font & GetFont() const
virtual tools::Long GetFontExtLeading() const
void DrawPolyLine(const tools::Polygon &rPoly)
Render the given polygon as a line stroke.
tools::Long mnOutOffY
Output offset for device output in pixel (pseudo window offset within window system's frames)
SAL_DLLPRIVATE tools::Long ImplDevicePixelToLogicHeight(tools::Long nHeight) const
Convert device pixels to a height in logical units.
void SetFont(const vcl::Font &rNewFont)
SAL_DLLPRIVATE tools::Rectangle ImplLogicToDevicePixel(const tools::Rectangle &rLogicRect) const
Convert a logical rectangle to a rectangle in physical device pixel units.
std::shared_ptr< ImplFontCache > mxFontCache
SAL_DLLPRIVATE sal_Int32 GetDPIY() const
Get the output device's DPI y-axis value.
SAL_DLLPRIVATE void ImplDrawEmphasisMark(tools::Long nBaseX, tools::Long nX, tools::Long nY, const tools::PolyPolygon &rPolyPoly, bool bPolyLine, const tools::Rectangle &rRect1, const tools::Rectangle &rRect2)
virtual bool ImplNewFont() const
SAL_DLLPRIVATE double ImplLogicHeightToDeviceSubPixel(tools::Long nHeight) const
virtual bool AcquireGraphics() const =0
Acquire a graphics device that the output device uses to draw on.
tools::Long mnOutOffX
Output offset for device output in pixel (pseudo window offset within window system's frames)
SAL_WARN_UNUSED_RESULT Point PixelToLogic(const Point &rDevicePt) const
std::shared_ptr< vcl::font::PhysicalFontCollection > mxFontCollection
void ReleaseFontCollection()
void DrawRect(const tools::Rectangle &rRect)
SAL_DLLPRIVATE std::unique_ptr< SalLayout > getFallbackLayout(LogicalFontInstance *pLogicalFont, int nFallbackLevel, vcl::text::ImplLayoutArgs &rLayoutArgs, const SalLayoutGlyphs *) const
static void EndFontSubstitution()
bool GetTextBoundRect(tools::Rectangle &rRect, const OUString &rStr, sal_Int32 nBase=0, sal_Int32 nIndex=0, sal_Int32 nLen=-1, sal_uLong nLayoutWidth=0, KernArraySpan aDXArray=KernArraySpan(), o3tl::span< const sal_Bool > pKashidaArray={}, const SalLayoutGlyphs *pGlyphs=nullptr) const
Return the exact bounding rectangle of rStr.
virtual void ImplReleaseFonts()
void RefreshFontData(const bool bNewFontLists)
bool AddTempDevFont(const OUString &rFileURL, const OUString &rFontName)
tools::Long mnEmphasisDescent
SalGraphics * mpGraphics
Graphics context to draw on.
void SetTextColor(const Color &rColor)
bool GetFontCharMap(FontCharMapRef &rxFontCharMap) const
rtl::Reference< LogicalFontInstance > mpFontInstance
SAL_DLLPRIVATE void ImplDrawEmphasisMarks(SalLayout &)
static void ImplRefreshAllFontData(bool bNewFontLists)
bool IsRTLEnabled() const
bool GetFontCapabilities(vcl::FontCapabilities &rFontCapabilities) const
virtual void ImplClearFontData(bool bNewFontLists)
static void AddFontSubstitute(const OUString &rFontName, const OUString &rReplaceFontName, AddFontSubstituteFlags nFlags)
int GetFontFaceCollectionCount() const
SAL_DLLPRIVATE tools::Long ImplDevicePixelToLogicWidth(tools::Long nWidth) const
Convert device pixels to a width in logical units.
FontMetric GetFontMetric() const
const Color & GetLineColor() const
static SAL_DLLPRIVATE void ImplUpdateFontDataForAllFrames(FontUpdateHandler_t pHdl, bool bNewFontLists)
sal_Int32 HasGlyphs(const vcl::Font &rFont, std::u16string_view rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1) const
VclPtr< VirtualDevice > mpAlphaVDev
const Color & GetTextColor() const
tools::Long GetMinKashida() const
static void BeginFontSubstitution()
SAL_DLLPRIVATE void ImplInitFontList() const
void DrawPolyPolygon(const tools::PolyPolygon &rPolyPoly)
Render the given poly-polygon.
static vcl::Font GetDefaultFont(DefaultFontType nType, LanguageType eLang, GetDefaultFontFlags nFlags, const OutputDevice *pOutDev=nullptr)
std::unique_ptr< vcl::font::PhysicalFontFaceCollection > mpFontFaceCollection
FontMetric GetFontMetricFromCollection(int nDevFontIndex) const
std::unique_ptr< SalLayout > ImplLayout(const OUString &, sal_Int32 nIndex, sal_Int32 nLen, const Point &rLogicPos=Point(0, 0), tools::Long nLogicWidth=0, KernArraySpan aKernArray=KernArraySpan(), o3tl::span< const sal_Bool > pKashidaArray={}, SalLayoutFlags flags=SalLayoutFlags::NONE, vcl::text::TextLayoutCache const *=nullptr, const SalLayoutGlyphs *pGlyphs=nullptr) const
virtual void ImplRefreshFontData(bool bNewFontLists)
AntialiasingFlags GetAntialiasing() const
tools::Long mnTextOffX
font specific text alignment offsets in pixel units
virtual void SetFontOrientation(LogicalFontInstance *const pFontInstance) const
DrawModeFlags GetDrawMode() const
const AllSettings & GetSettings() const
SAL_DLLPRIVATE bool AttemptOLEFontScaleFix(vcl::Font &rFont, tools::Long nHeight) const
bool GetFontFeatures(std::vector< vcl::font::Feature > &rFontFeatures) const
void SetFontCollectionFromSVData()
bool IsFontAvailable(std::u16string_view rFontName) const
SAL_DLLPRIVATE bool InitFont() const
static void RemoveFontsSubstitute()
SAL_DLLPRIVATE void ImplUpdateFontData()
const Color & GetFillColor() const
constexpr tools::Long Y() const
void RotateAround(tools::Long &rX, tools::Long &rY, Degree10 nOrientation) const
tools::Long AdjustY(tools::Long nVertMove)
tools::Long AdjustX(tools::Long nHorzMove)
constexpr tools::Long X() const
virtual bool GetFontCapabilities(vcl::FontCapabilities &rFontCapabilities) const =0
virtual FontCharMapRef GetFontCharMap() const =0
virtual void ClearDevFontCache()=0
virtual bool AddTempDevFont(vcl::font::PhysicalFontCollection *, const OUString &rFileURL, const OUString &rFontName)=0
virtual void GetDevFontList(vcl::font::PhysicalFontCollection *)=0
virtual std::unique_ptr< GenericSalLayout > GetTextLayout(int nFallbackLevel)=0
virtual void SetFont(LogicalFontInstance *, int nFallbackLevel)=0
virtual void GetFontMetric(FontMetricDataRef &, int nFallbackLevel)=0
const rtl::Reference< LogicalFontInstance > & GetFont() const
SalLayoutGlyphsImpl * Impl(unsigned int nLevel) const
basegfx::B2DPoint & DrawBase()
virtual bool GetNextGlyph(const GlyphItem **pGlyph, basegfx::B2DPoint &rPos, int &nStart, const LogicalFontInstance **ppGlyphFont=nullptr) const =0
constexpr tools::Long Height() const
void setWidth(tools::Long nWidth)
void setHeight(tools::Long nHeight)
constexpr tools::Long Width() const
DisplayOptions GetDisplayOptions() const
sal_Int32 GetAntialiasingMinPixelHeight() const
VclPtr< VirtualDevice > mpNext
OUString getUserInterfaceFont(const LanguageTag &rLanguageTag) const
OUString getDefaultFont(const LanguageTag &rLanguageTag, DefaultFontType nType) const
static DefaultFontConfiguration & get()
tools::Long GetFontHeight() const
void SetFontSize(const Size &)
void SetOrientation(Degree10 nLineOrientation)
bool IsSameInstance(const Font &) const
void SetWidthType(FontWidth)
void SetStyleName(const OUString &rStyleName)
void SetPitch(FontPitch ePitch)
void SetColor(const Color &)
FontStrikeout GetStrikeout() const
FontLineStyle GetOverline() const
FontRelief GetRelief() const
FontEmphasisMark GetEmphasisMark() const
void SetItalic(FontItalic)
void SetWeight(FontWeight)
void SetFontHeight(tools::Long nHeight)
bool IsTransparent() const
const OUString & GetFamilyName() const
void SetFamily(FontFamily)
TextAlign GetAlignment() const
void SetCharSet(rtl_TextEncoding)
const Size & GetFontSize() const
const Color & GetColor() const
void SetAlignment(TextAlign)
void SetFamilyName(const OUString &rFamilyName)
FontLineStyle GetUnderline() const
rtl_TextEncoding GetCharSet() const
void SetLanguage(LanguageType)
FontEmphasisMark GetEmphasisMarkStyle() const
const Color & GetFillColor() const
::OutputDevice const * GetOutDev() const
std::unique_ptr< WindowImpl > mpWindowImpl
DirectFontSubstitution is for Tools->Options->FontReplacement and PsPrinter substitutions The class i...
void RemoveFontsSubstitute()
void AddFontSubstitute(const OUString &rFontName, const OUString &rSubstName, AddFontSubstituteFlags nFlags)
tools::Long GetYOffset() const
tools::Rectangle GetRect1() const
tools::PolyPolygon GetShape() const
tools::Rectangle GetRect2() const
tools::Long GetWidth() const
bool IsShapePolyLine() const
const OUString & GetFamilyName() const
bool GetNextRun(int *nMinRunPos, int *nEndRunPos, bool *bRTL)
bool PrepareFallback(const SalLayoutGlyphsImpl *pGlyphsImpl)
constexpr ::Color COL_ALPHA_OPAQUE(0xff, 0xff, 0xff)
constexpr ::Color COL_TRANSPARENT(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
#define DBG_TESTSOLARMUTEX()
void AddTokenFontName(OUString &rName, std::u16string_view rNewToken)
UNOTOOLS_DLLPUBLIC std::u16string_view GetNextFontToken(std::u16string_view rTokenStr, sal_Int32 &rIndex)
#define LANGUAGE_CHINESE_SIMPLIFIED
#define LANGUAGE_DONTKNOW
#define SAL_WARN_IF(condition, area, stream)
#define SAL_WARN(area, stream)
#define SAL_INFO(area, stream)
if(aStr !=aBuf) UpdateName_Impl(m_xFollowLb.get()
vcl::Font GetFont(vcl::Font const &rFont, DrawModeFlags nDrawMode, StyleSettings const &rStyleSettings)
const wchar_t *typedef int(__stdcall *DllNativeUnregProc)(int
tools::Long mnMapScDenomX
Scaling factor - denominator in X direction.
tools::Long mnMapScDenomY
Scaling factor - denominator in Y direction.
tools::Long mnMapScNumY
Scaling factor - numerator in Y direction.
tools::Long mnMapScNumX
Scaling factor - numerator in X direction.
ImplSVFrameData maFrameData
VclPtr< vcl::Window > mpFirstFrame
std::shared_ptr< vcl::font::PhysicalFontCollection > mxScreenFontList
VclPtr< Printer > mpFirstPrinter
std::shared_ptr< ImplFontCache > mxScreenFontCache
VclPtr< VirtualDevice > mpFirstVirDev
vcl::font::DirectFontSubstitution * mpDirectFontSubst
ImplSVData * ImplGetSVData()
OUString VclResId(TranslateId aId)