20 #ifndef INCLUDED_VCL_INC_SALLAYOUT_HXX
21 #define INCLUDED_VCL_INC_SALLAYOUT_HXX
29 #include <com/sun/star/i18n/XBreakIterator.hpp>
42 #define MAX_FALLBACK 16
50 class TextLayoutCache;
63 void Clear() { maRuns.clear(); }
64 void AddPos(
int nCharPos,
bool bRTL );
65 void AddRun(
int nMinRunPos,
int nEndRunPos,
bool bRTL );
67 bool IsEmpty()
const {
return maRuns.empty(); }
70 bool GetRun(
int* nMinRunPos,
int* nEndRunPos,
bool* bRTL )
const;
110 {
return maRuns.
GetNextPos( nCharPos, bRTL ); }
111 bool GetNextRun(
int* nMinRunPos,
int* nEndRunPos,
bool* bRTL );
113 { maFallbackRuns.
AddRun( nMinRunPos, nEndRunPos, bRTL ); }
116 {
return !maFallbackRuns.
IsEmpty(); }
117 bool PrepareFallback();
120 void AddRun(
int nMinCharPos,
int nEndCharPos,
bool bRTL );
139 explicit MultiSalLayout( std::unique_ptr<SalLayout> pBaseLayout );
173 static std::shared_ptr<vcl::TextLayoutCache> CreateTextLayoutCache(OUString
const&);
186 {
return m_GlyphItems.Impl()->GetFont(); }
194 void DropGlyph(
int nStart);
195 void Simplify(
bool bIsBase);
202 void ApplyAsianKerning(
const OUString& rStr);
210 void ParseFeatures(
const OUString& name);
212 css::uno::Reference<css::i18n::XBreakIterator>
mxBreak;
225 #endif // INCLUDED_VCL_INC_SALLAYOUT_HXX
virtual sal_Int32 GetTextBreak(DeviceCoordinate nMaxWidth, DeviceCoordinate nCharExtra, int nFactor) const =0
MultiSalLayout & operator=(const MultiSalLayout &)=delete
void AddFallback(std::unique_ptr< SalLayout > pFallbackLayout, ImplLayoutRuns const &)
std::unique_ptr< SalLayout > ReleaseBaseLayout()
bool GetNextPos(int *nCharPos, bool *bRTL)
bool GetOutline(basegfx::B2DPolyPolygonVector &) const override
std::unique_ptr< GenericSalLayout > mpLayouts[MAX_FALLBACK]
void InitFont() const override
virtual DeviceCoordinate GetTextWidth() const
void SetLayoutWidth(DeviceCoordinate nWidth)
LogicalFontInstance & GetFont() const
MultiSalLayout(std::unique_ptr< SalLayout > pBaseLayout)
void NeedFallback(int nMinRunPos, int nEndRunPos, bool bRTL)
void GetCaretPositions(int nArraySize, tools::Long *pCaretXArray) const override
std::vector< int > maRuns
void SetIncomplete(bool bIncomplete)
void AddPos(int nCharPos, bool bRTL)
SalLayout & operator=(const SalLayout &)=delete
bool IsKashidaPosValid(int nCharPos) const override
virtual void AdjustLayout(ImplLayoutArgs &)
DeviceCoordinate mnLayoutWidth
virtual DeviceCoordinate FillDXArray(DeviceCoordinate *pDXArray) const =0
abstract base class for physical font faces
std::ostream & operator<<(std::ostream &s, ImplLayoutArgs const &rArgs)
virtual void DrawText(SalGraphics &) const =0
bool GetNextGlyph(const GlyphItem **pGlyph, Point &rPos, int &nStart, const PhysicalFontFace **pFallbackFont=nullptr) const override
bool PosIsInRun(int nCharPos) const
tools::Long DeviceCoordinate
virtual ~MultiSalLayout() override
virtual void GetCaretPositions(int nArraySize, tools::Long *pCaretXArray) const =0
vcl::TextLayoutCache const * m_pTextLayoutCache
bool NeedFallback() const
void SetOrientation(Degree10 nOrientation)
LanguageTag maLanguageTag
bool GetNextPos(int *nCharPos, bool *bRTL)
bool GetRun(int *nMinRunPos, int *nEndRunPos, bool *bRTL) const
void AdjustLayout(ImplLayoutArgs &) override
std::vector< hb_feature_t > maFeatures
void DrawText(SalGraphics &) const override
bool LayoutText(ImplLayoutArgs &, const SalLayoutGlyphs *) override
void SetDXArray(const DeviceCoordinate *pDXArray)
void AddRun(int nMinRunPos, int nEndRunPos, bool bRTL)
virtual bool IsKashidaPosValid(int) const
virtual bool LayoutText(ImplLayoutArgs &, const SalLayoutGlyphs *)=0
css::uno::Reference< css::i18n::XBreakIterator > mxBreak
SalLayoutGlyphs m_GlyphItems
ImplLayoutRuns maFallbackRuns
ImplLayoutRuns maFallbackRuns[MAX_FALLBACK]
virtual bool GetNextGlyph(const GlyphItem **pGlyph, Point &rPos, int &nStart, const PhysicalFontFace **pFallbackFont=nullptr) const =0
bool PosIsInAnyRun(int nCharPos) const
DeviceCoordinate FillDXArray(DeviceCoordinate *pDXArray) const override
virtual const SalLayoutGlyphs * GetGlyphs() const
sal_Int32 GetTextBreak(DeviceCoordinate nMaxWidth, DeviceCoordinate nCharExtra, int nFactor) const override
const DeviceCoordinate * mpDXArray
::std::vector< B2DPolyPolygon > B2DPolyPolygonVector