desktop/source/lib/init.cxx | 2 +- include/vcl/outdev.hxx | 19 +++++++++++-------- include/vcl/window.hxx | 2 +- sw/source/core/inc/drawfont.hxx | 10 ++++++---- sw/source/core/inc/fntcache.hxx | 2 +- sw/source/core/text/inftxt.cxx | 6 +++--- sw/source/core/text/inftxt.hxx | 14 +++++++------- sw/source/core/text/porfld.cxx | 2 +- sw/source/core/text/pormulti.cxx | 2 +- sw/source/core/txtnode/fntcache.cxx | 2 +- vcl/Library_vcl.mk | 1 + vcl/inc/TextLayoutCache.hxx | 18 ++++-------------- vcl/inc/sallayout.hxx | 8 ++++---- vcl/qa/cppunit/text.cxx | 6 +++--- vcl/source/gdi/CommonSalLayout.cxx | 12 ++++++------ vcl/source/gdi/sallayout.cxx | 2 +- vcl/source/outdev/text.cxx | 14 +++++++------- vcl/source/text/TextLayoutCache.cxx | 36 ++++++++++++++++++++++++++++++++++++ vcl/source/window/window3.cxx | 2 +- 19 files changed, 96 insertions(+), 64 deletions(-)
New commits: commit 229136b7c9363bc758c9e925ccfd0c9bb34ceaec Author: Chris Sherlock <chris.sherloc...@gmail.com> AuthorDate: Sun Aug 29 00:59:08 2021 +1000 Commit: Tomaž Vajngerl <qui...@gmail.com> CommitDate: Mon Aug 30 02:46:33 2021 +0200 vcl: move TextLayoutCache into vcl::text namespace Placed TextLayoutCache function into own source file and moved it into the new vcl::text namespace. With this patch we will have these vcl::* namespaces: namespace vcl::bitmap namespace vcl::CommandInfoProvider namespace vcl::detail namespace vcl::drawmode namespace vcl::fileregistration namespace vcl::filter namespace vcl::font namespace vcl::graphic namespace vcl::lok namespace vcl::pdf namespace vcl::table namespace vcl::test namespace vcl::text namespace vcl::unohelper namespace vcl::unotools Change-Id: Ia38c2d73715676a924cdbb0de6308a72a40ec3b3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121206 Reviewed-by: Hossein <hoss...@libreoffice.org> Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> Tested-by: Tomaž Vajngerl <qui...@gmail.com> diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index da8c0d5a1595..709b42038a0e 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -4543,7 +4543,7 @@ static bool doc_paste(LibreOfficeKitDocument* pThis, const char* pMimeType, cons uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence( { - {"AnchorType", uno::makeAny(static_cast<sal_uInt16>(text::TextContentAnchorType_AS_CHARACTER))}, + {"AnchorType", uno::makeAny(static_cast<sal_uInt16>(css::text::TextContentAnchorType_AS_CHARACTER))}, {"IgnoreComments", uno::makeAny(true)}, })); if (!comphelper::dispatchCommand(".uno:Paste", aPropertyValues)) diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx index 144a52308a3e..402b998bc1aa 100644 --- a/include/vcl/outdev.hxx +++ b/include/vcl/outdev.hxx @@ -101,12 +101,15 @@ namespace vcl class ExtOutDevData; class ITextLayout; struct FontCapabilities; - class TextLayoutCache; class Window; class WindowOutputDevice; namespace font { struct Feature; } + + namespace text { + class TextLayoutCache; + } } namespace basegfx { @@ -1027,7 +1030,7 @@ public: See also GetTextBoundRect() for more explanation + code examples. */ tools::Long GetTextWidth( const OUString& rStr, sal_Int32 nIndex = 0, sal_Int32 nLen = -1, - vcl::TextLayoutCache const* = nullptr, + vcl::text::TextLayoutCache const* = nullptr, SalLayoutGlyphs const*const pLayoutCache = nullptr) const; /** Height where any character of the current font fits; in logic coordinates. @@ -1045,7 +1048,7 @@ public: const SalLayoutGlyphs* pLayoutCache = nullptr); tools::Long GetTextArray( const OUString& rStr, tools::Long* pDXAry, sal_Int32 nIndex = 0, sal_Int32 nLen = -1, - vcl::TextLayoutCache const* = nullptr, + vcl::text::TextLayoutCache const* = nullptr, SalLayoutGlyphs const*const pLayoutCache = nullptr) const; void GetCaretPositions( const OUString&, tools::Long* pCaretXArray, @@ -1057,14 +1060,14 @@ public: sal_Int32 GetTextBreak( const OUString& rStr, tools::Long nTextWidth, sal_Int32 nIndex, sal_Int32 nLen = -1, tools::Long nCharExtra = 0, - vcl::TextLayoutCache const* = nullptr, + vcl::text::TextLayoutCache const* = nullptr, const SalLayoutGlyphs* pGlyphs = nullptr) const; sal_Int32 GetTextBreak( const OUString& rStr, tools::Long nTextWidth, sal_Unicode nExtraChar, sal_Int32& rExtraCharPos, sal_Int32 nIndex, sal_Int32 nLen, tools::Long nCharExtra, - vcl::TextLayoutCache const* = nullptr) const; - static std::shared_ptr<vcl::TextLayoutCache> CreateTextLayoutCache(OUString const&); + vcl::text::TextLayoutCache const* = nullptr) const; + static std::shared_ptr<vcl::text::TextLayoutCache> CreateTextLayoutCache(OUString const&); protected: SAL_DLLPRIVATE void ImplInitTextLineSize(); @@ -1214,12 +1217,12 @@ public: ImplLayout( const OUString&, sal_Int32 nIndex, sal_Int32 nLen, const Point& rLogicPos = Point(0,0), tools::Long nLogicWidth=0, const tools::Long* pLogicDXArray=nullptr, SalLayoutFlags flags = SalLayoutFlags::NONE, - vcl::TextLayoutCache const* = nullptr, + vcl::text::TextLayoutCache const* = nullptr, const SalLayoutGlyphs* pGlyphs = nullptr) const; SAL_DLLPRIVATE ImplLayoutArgs ImplPrepareLayoutArgs( OUString&, const sal_Int32 nIndex, const sal_Int32 nLen, DeviceCoordinate nPixelWidth, const DeviceCoordinate* pPixelDXArray, SalLayoutFlags flags = SalLayoutFlags::NONE, - vcl::TextLayoutCache const* = nullptr) const; + vcl::text::TextLayoutCache const* = nullptr) const; SAL_DLLPRIVATE std::unique_ptr<SalLayout> ImplGlyphFallbackLayout( std::unique_ptr<SalLayout>, ImplLayoutArgs&, diff --git a/include/vcl/window.hxx b/include/vcl/window.hxx index 4fb9e4ab15e0..8d918161c2e0 100644 --- a/include/vcl/window.hxx +++ b/include/vcl/window.hxx @@ -1536,7 +1536,7 @@ public: See also GetTextBoundRect() for more explanation + code examples. */ tools::Long GetTextWidth( const OUString& rStr, sal_Int32 nIndex = 0, sal_Int32 nLen = -1, - vcl::TextLayoutCache const* = nullptr, + vcl::text::TextLayoutCache const* = nullptr, SalLayoutGlyphs const*const pLayoutCache = nullptr) const; /** Height where any character of the current font fits; in logic coordinates. diff --git a/sw/source/core/inc/drawfont.hxx b/sw/source/core/inc/drawfont.hxx index 64739ef6d114..9f5a6e676291 100644 --- a/sw/source/core/inc/drawfont.hxx +++ b/sw/source/core/inc/drawfont.hxx @@ -33,7 +33,9 @@ namespace sw { class WrongListIterator; } class SwFont; namespace vcl { class Font; - class TextLayoutCache; + namespace text { + class TextLayoutCache; + } typedef OutputDevice RenderContext; } class SwUnderlineFont; @@ -46,7 +48,7 @@ class SW_DLLPUBLIC SwDrawTextInfo SwViewShell const * m_pSh; const SwScriptInfo* m_pScriptInfo; Point m_aPos; - vcl::TextLayoutCache const* m_pCachedVclData; + vcl::text::TextLayoutCache const* m_pCachedVclData; OUString m_aText; sw::WrongListIterator* m_pWrong; sw::WrongListIterator* m_pGrammarCheck; @@ -113,7 +115,7 @@ public: SwDrawTextInfo( SwViewShell const *pSh, OutputDevice &rOut, const SwScriptInfo* pSI, const OUString &rText, TextFrameIndex const nIdx, TextFrameIndex const nLen, sal_uInt16 nWidth = 0, bool bBullet = false, - vcl::TextLayoutCache const*const pCachedVclData = nullptr) + vcl::text::TextLayoutCache const*const pCachedVclData = nullptr) : m_pCachedVclData(pCachedVclData) { m_pFrame = nullptr; @@ -208,7 +210,7 @@ public: return m_pHyphPos; } - vcl::TextLayoutCache const* GetVclCache() const + vcl::text::TextLayoutCache const* GetVclCache() const { return m_pCachedVclData; } diff --git a/sw/source/core/inc/fntcache.hxx b/sw/source/core/inc/fntcache.hxx index 44a1483ed499..ab5c6a9e473b 100644 --- a/sw/source/core/inc/fntcache.hxx +++ b/sw/source/core/inc/fntcache.hxx @@ -116,7 +116,7 @@ public: sal_uInt16 GetPropWidth() const { return m_nPropWidth; } bool IsSymbol() const { return m_bSymbol; } - tools::Long GetCachedTextWidth(const SwTextGlyphsKey& key, const vcl::TextLayoutCache* vclCache); + tools::Long GetCachedTextWidth(const SwTextGlyphsKey& key, const vcl::text::TextLayoutCache* vclCache); SalLayoutGlyphs* GetCachedSalLayoutGlyphs(const SwTextGlyphsKey& key); void ClearCachedTextGlyphs(); diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx index ddfc54bc6fc3..4f5df3eb8f17 100644 --- a/sw/source/core/text/inftxt.cxx +++ b/sw/source/core/text/inftxt.cxx @@ -417,7 +417,7 @@ SwPosSize SwTextSizeInfo::GetTextSize() const void SwTextSizeInfo::GetTextSize( const SwScriptInfo* pSI, const TextFrameIndex nIndex, const TextFrameIndex nLength, const sal_uInt16 nComp, sal_uInt16& nMinSize, sal_uInt16& nMaxSizeDiff, - vcl::TextLayoutCache const*const pCache) const + vcl::text::TextLayoutCache const*const pCache) const { SwDrawTextInfo aDrawInf( m_pVsh, *m_pOut, pSI, *m_pText, nIndex, nLength, 0, false, pCache); @@ -433,7 +433,7 @@ void SwTextSizeInfo::GetTextSize( const SwScriptInfo* pSI, const TextFrameIndex TextFrameIndex SwTextSizeInfo::GetTextBreak( const tools::Long nLineWidth, const TextFrameIndex nMaxLen, const sal_uInt16 nComp, - vcl::TextLayoutCache const*const pCache) const + vcl::text::TextLayoutCache const*const pCache) const { const SwScriptInfo& rScriptInfo = const_cast<SwParaPortion*>(GetParaPortion())->GetScriptInfo(); @@ -454,7 +454,7 @@ TextFrameIndex SwTextSizeInfo::GetTextBreak( const tools::Long nLineWidth, const TextFrameIndex nMaxLen, const sal_uInt16 nComp, TextFrameIndex& rExtraCharPos, - vcl::TextLayoutCache const*const pCache) const + vcl::text::TextLayoutCache const*const pCache) const { const SwScriptInfo& rScriptInfo = const_cast<SwParaPortion*>(GetParaPortion())->GetScriptInfo(); diff --git a/sw/source/core/text/inftxt.hxx b/sw/source/core/text/inftxt.hxx index 4d5bb0651163..91fbf0c3aa7c 100644 --- a/sw/source/core/text/inftxt.hxx +++ b/sw/source/core/text/inftxt.hxx @@ -145,7 +145,7 @@ protected: // performance hack - this is only used by SwTextFormatInfo but // because it's not even possible to dynamic_cast these things // currently it has to be stored here - std::shared_ptr<vcl::TextLayoutCache> m_pCachedVclData; + std::shared_ptr<vcl::text::TextLayoutCache> m_pCachedVclData; SwFont *m_pFnt; SwUnderlineFont *m_pUnderFnt; // Font for underlining @@ -251,7 +251,7 @@ public: void GetTextSize( const SwScriptInfo* pSI, TextFrameIndex nIdx, TextFrameIndex nLen, const sal_uInt16 nComp, sal_uInt16& nMinSize, sal_uInt16& nMaxSizeDiff, - vcl::TextLayoutCache const* = nullptr) const; + vcl::text::TextLayoutCache const* = nullptr) const; inline SwPosSize GetTextSize(const SwScriptInfo* pSI, TextFrameIndex nIdx, TextFrameIndex nLen) const; inline SwPosSize GetTextSize( const OUString &rText ) const; @@ -259,12 +259,12 @@ public: TextFrameIndex GetTextBreak( const tools::Long nLineWidth, const TextFrameIndex nMaxLen, const sal_uInt16 nComp, - vcl::TextLayoutCache const*) const; + vcl::text::TextLayoutCache const*) const; TextFrameIndex GetTextBreak( const tools::Long nLineWidth, const TextFrameIndex nMaxLen, const sal_uInt16 nComp, TextFrameIndex& rExtraCharPos, - vcl::TextLayoutCache const*) const; + vcl::text::TextLayoutCache const*) const; sal_uInt16 GetAscent() const; @@ -325,11 +325,11 @@ public: { return ( m_pKanaComp && m_nKanaIdx < m_pKanaComp->size() ) ? (*m_pKanaComp)[m_nKanaIdx] : 0; } - const std::shared_ptr<vcl::TextLayoutCache>& GetCachedVclData() const + const std::shared_ptr<vcl::text::TextLayoutCache>& GetCachedVclData() const { return m_pCachedVclData; } - void SetCachedVclData(std::shared_ptr<vcl::TextLayoutCache> const& pCachedVclData) + void SetCachedVclData(std::shared_ptr<vcl::text::TextLayoutCache> const& pCachedVclData) { m_pCachedVclData = pCachedVclData; } @@ -673,7 +673,7 @@ public: class SwTextSlot final { OUString aText; - std::shared_ptr<vcl::TextLayoutCache> m_pOldCachedVclData; + std::shared_ptr<vcl::text::TextLayoutCache> m_pOldCachedVclData; const OUString *pOldText; sw::WrongListIterator * m_pOldSmartTagList; sw::WrongListIterator * m_pOldGrammarCheckList; diff --git a/sw/source/core/text/porfld.cxx b/sw/source/core/text/porfld.cxx index 4d589427850c..5a62aa07d290 100644 --- a/sw/source/core/text/porfld.cxx +++ b/sw/source/core/text/porfld.cxx @@ -137,7 +137,7 @@ namespace { */ class SwFieldSlot { - std::shared_ptr<vcl::TextLayoutCache> m_pOldCachedVclData; + std::shared_ptr<vcl::text::TextLayoutCache> m_pOldCachedVclData; const OUString *pOldText; OUString aText; TextFrameIndex nIdx; diff --git a/sw/source/core/text/pormulti.cxx b/sw/source/core/text/pormulti.cxx index b94302bd8ed7..5a617a26f041 100644 --- a/sw/source/core/text/pormulti.cxx +++ b/sw/source/core/text/pormulti.cxx @@ -1996,7 +1996,7 @@ bool SwTextFormatter::BuildMultiPortion( SwTextFormatInfo &rInf, // save some values const OUString* pOldText = &(rInf.GetText()); const SwTwips nOldPaintOfst = rInf.GetPaintOfst(); - std::shared_ptr<vcl::TextLayoutCache> const pOldCachedVclData(rInf.GetCachedVclData()); + std::shared_ptr<vcl::text::TextLayoutCache> const pOldCachedVclData(rInf.GetCachedVclData()); rInf.SetCachedVclData(nullptr); OUString const aMultiStr( rInf.GetText().copy(0, sal_Int32(nMultiLen + rInf.GetIdx())) ); diff --git a/sw/source/core/txtnode/fntcache.cxx b/sw/source/core/txtnode/fntcache.cxx index bf9bb3785678..9490fe51add0 100644 --- a/sw/source/core/txtnode/fntcache.cxx +++ b/sw/source/core/txtnode/fntcache.cxx @@ -257,7 +257,7 @@ SalLayoutGlyphs* SwFntObj::GetCachedSalLayoutGlyphs(const SwTextGlyphsKey& key) return lcl_CreateLayout(key, it); } -tools::Long SwFntObj::GetCachedTextWidth(const SwTextGlyphsKey& key, const vcl::TextLayoutCache* vclCache) +tools::Long SwFntObj::GetCachedTextWidth(const SwTextGlyphsKey& key, const vcl::text::TextLayoutCache* vclCache) { std::map<SwTextGlyphsKey, SwTextGlyphsData>::iterator it = m_aTextGlyphs.find(key); if(it != m_aTextGlyphs.end() && it->second.m_nTextWidth >= 0) diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk index e7ed402ef0d8..91b2023d3554 100644 --- a/vcl/Library_vcl.mk +++ b/vcl/Library_vcl.mk @@ -235,6 +235,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\ vcl/source/outdev/vclreferencebase \ vcl/source/outdev/nativecontrols \ vcl/source/outdev/map \ + vcl/source/text/TextLayoutCache \ vcl/source/treelist/headbar \ vcl/source/treelist/iconview \ vcl/source/treelist/iconviewimpl \ diff --git a/vcl/inc/TextLayoutCache.hxx b/vcl/inc/TextLayoutCache.hxx index 0118ba32fed8..0ce0c19d8278 100644 --- a/vcl/inc/TextLayoutCache.hxx +++ b/vcl/inc/TextLayoutCache.hxx @@ -23,13 +23,11 @@ #include <vcl/dllapi.h> -#include "scrptrun.h" - #include <hb-icu.h> #include <vector> -namespace vcl +namespace vcl::text { struct Run { @@ -44,19 +42,11 @@ struct Run } }; -class TextLayoutCache +class VCL_DLLPUBLIC TextLayoutCache { public: - std::vector<vcl::Run> runs; - TextLayoutCache(sal_Unicode const* pStr, sal_Int32 const nEnd) - { - vcl::ScriptRun aScriptRun(reinterpret_cast<const UChar*>(pStr), nEnd); - while (aScriptRun.next()) - { - runs.emplace_back(aScriptRun.getScriptStart(), aScriptRun.getScriptEnd(), - aScriptRun.getScriptCode()); - } - } + std::vector<vcl::text::Run> runs; + TextLayoutCache(sal_Unicode const* pStr, sal_Int32 const nEnd); }; } diff --git a/vcl/inc/sallayout.hxx b/vcl/inc/sallayout.hxx index f6783f3cc1ca..93d4b02d7dc8 100644 --- a/vcl/inc/sallayout.hxx +++ b/vcl/inc/sallayout.hxx @@ -46,7 +46,7 @@ class SalGraphics; class PhysicalFontFace; class GenericSalLayout; enum class SalLayoutFlags; -namespace vcl { +namespace vcl::text { class TextLayoutCache; } @@ -84,7 +84,7 @@ public: int mnEndCharPos; // performance hack - vcl::TextLayoutCache const* m_pTextLayoutCache; + vcl::text::TextLayoutCache const* m_pTextLayoutCache; // positioning related inputs const DeviceCoordinate* mpDXArray; // in pixel units @@ -98,7 +98,7 @@ public: ImplLayoutArgs( const OUString& rStr, int nMinCharPos, int nEndCharPos, SalLayoutFlags nFlags, const LanguageTag& rLanguageTag, - vcl::TextLayoutCache const* pLayoutCache); + vcl::text::TextLayoutCache const* pLayoutCache); void SetLayoutWidth( DeviceCoordinate nWidth ) { mnLayoutWidth = nWidth; } void SetDXArray( const DeviceCoordinate* pDXArray ) { mpDXArray = pDXArray; } @@ -171,7 +171,7 @@ public: void AdjustLayout(ImplLayoutArgs&) final override; bool LayoutText(ImplLayoutArgs&, const SalLayoutGlyphsImpl*) final override; void DrawText(SalGraphics&) const final override; - static std::shared_ptr<vcl::TextLayoutCache> CreateTextLayoutCache(OUString const&); + static std::shared_ptr<vcl::text::TextLayoutCache> CreateTextLayoutCache(OUString const&); SalLayoutGlyphs GetGlyphs() const final override; bool IsKashidaPosValid(int nCharPos) const final override; diff --git a/vcl/qa/cppunit/text.cxx b/vcl/qa/cppunit/text.cxx index 0db15435a675..548690674f47 100644 --- a/vcl/qa/cppunit/text.cxx +++ b/vcl/qa/cppunit/text.cxx @@ -382,10 +382,10 @@ void VclTextTest::testVerticalText() void VclTextTest::testTextLayoutCache() { OUString sTestString = u"The quick brown fox\n jumped over the lazy dogالعاشر"; - vcl::TextLayoutCache cache(sTestString.getStr(), sTestString.getLength()); + vcl::text::TextLayoutCache cache(sTestString.getStr(), sTestString.getLength()); - vcl::Run run1 = cache.runs[0]; - vcl::Run run2 = cache.runs[1]; + vcl::text::Run run1 = cache.runs[0]; + vcl::text::Run run2 = cache.runs[1]; bool bCorrectRuns = (cache.runs.size() == 2); CPPUNIT_ASSERT_MESSAGE("Wrong number of runs", bCorrectRuns); diff --git a/vcl/source/gdi/CommonSalLayout.cxx b/vcl/source/gdi/CommonSalLayout.cxx index 4adf864a933b..b2d332c82958 100644 --- a/vcl/source/gdi/CommonSalLayout.cxx +++ b/vcl/source/gdi/CommonSalLayout.cxx @@ -150,9 +150,9 @@ namespace { } // namespace -std::shared_ptr<vcl::TextLayoutCache> GenericSalLayout::CreateTextLayoutCache(OUString const& rString) +std::shared_ptr<vcl::text::TextLayoutCache> GenericSalLayout::CreateTextLayoutCache(OUString const& rString) { - return std::make_shared<vcl::TextLayoutCache>(rString.getStr(), rString.getLength()); + return std::make_shared<vcl::text::TextLayoutCache>(rString.getStr(), rString.getLength()); } SalLayoutGlyphs GenericSalLayout::GetGlyphs() const @@ -278,15 +278,15 @@ bool GenericSalLayout::LayoutText(ImplLayoutArgs& rArgs, const SalLayoutGlyphsIm const int nLength = rArgs.mrStr.getLength(); const sal_Unicode *pStr = rArgs.mrStr.getStr(); - std::unique_ptr<vcl::TextLayoutCache> pNewScriptRun; - vcl::TextLayoutCache const* pTextLayout; + std::unique_ptr<vcl::text::TextLayoutCache> pNewScriptRun; + vcl::text::TextLayoutCache const* pTextLayout; if (rArgs.m_pTextLayoutCache) { pTextLayout = rArgs.m_pTextLayoutCache; // use cache! } else { - pNewScriptRun.reset(new vcl::TextLayoutCache(pStr, rArgs.mnEndCharPos)); + pNewScriptRun.reset(new vcl::text::TextLayoutCache(pStr, rArgs.mnEndCharPos)); pTextLayout = pNewScriptRun.get(); } @@ -342,7 +342,7 @@ bool GenericSalLayout::LayoutText(ImplLayoutArgs& rArgs, const SalLayoutGlyphsIm size_t k = 0; for (; k < pTextLayout->runs.size(); ++k) { - vcl::Run const& rRun(pTextLayout->runs[k]); + vcl::text::Run const& rRun(pTextLayout->runs[k]); if (rRun.nStart <= nCurrentPos && nCurrentPos < rRun.nEnd) { break; diff --git a/vcl/source/gdi/sallayout.cxx b/vcl/source/gdi/sallayout.cxx index 7b8f2c2a2a05..a993b8131ca4 100644 --- a/vcl/source/gdi/sallayout.cxx +++ b/vcl/source/gdi/sallayout.cxx @@ -387,7 +387,7 @@ bool ImplLayoutRuns::GetRun( int* nMinRunPos, int* nEndRunPos, bool* bRightToLef ImplLayoutArgs::ImplLayoutArgs(const OUString& rStr, int nMinCharPos, int nEndCharPos, SalLayoutFlags nFlags, const LanguageTag& rLanguageTag, - vcl::TextLayoutCache const*const pLayoutCache) + vcl::text::TextLayoutCache const*const pLayoutCache) : maLanguageTag( rLanguageTag ), mnFlags( nFlags ), diff --git a/vcl/source/outdev/text.cxx b/vcl/source/outdev/text.cxx index d4d73d817654..b8cc324e14e9 100644 --- a/vcl/source/outdev/text.cxx +++ b/vcl/source/outdev/text.cxx @@ -836,7 +836,7 @@ void OutputDevice::DrawText( const Point& rStartPt, const OUString& rStr, } tools::Long OutputDevice::GetTextWidth( const OUString& rStr, sal_Int32 nIndex, sal_Int32 nLen, - vcl::TextLayoutCache const*const pLayoutCache, + vcl::text::TextLayoutCache const*const pLayoutCache, SalLayoutGlyphs const*const pSalLayoutCache) const { @@ -908,7 +908,7 @@ void OutputDevice::DrawTextArray( const Point& rStartPt, const OUString& rStr, tools::Long OutputDevice::GetTextArray( const OUString& rStr, tools::Long* pDXAry, sal_Int32 nIndex, sal_Int32 nLen, - vcl::TextLayoutCache const*const pLayoutCache, + vcl::text::TextLayoutCache const*const pLayoutCache, SalLayoutGlyphs const*const pSalLayoutCache) const { if( nIndex >= rStr.getLength() ) @@ -1101,7 +1101,7 @@ ImplLayoutArgs OutputDevice::ImplPrepareLayoutArgs( OUString& rStr, const sal_Int32 nMinIndex, const sal_Int32 nLen, DeviceCoordinate nPixelWidth, const DeviceCoordinate* pDXArray, SalLayoutFlags nLayoutFlags, - vcl::TextLayoutCache const*const pLayoutCache) const + vcl::text::TextLayoutCache const*const pLayoutCache) const { assert(nMinIndex >= 0); assert(nLen >= 0); @@ -1201,7 +1201,7 @@ std::unique_ptr<SalLayout> OutputDevice::ImplLayout(const OUString& rOrigStr, sal_Int32 nMinIndex, sal_Int32 nLen, const Point& rLogicalPos, tools::Long nLogicalWidth, const tools::Long* pDXArray, SalLayoutFlags flags, - vcl::TextLayoutCache const* pLayoutCache, + vcl::text::TextLayoutCache const* pLayoutCache, const SalLayoutGlyphs* pGlyphs) const { if (pGlyphs && !pGlyphs->IsValid()) @@ -1313,7 +1313,7 @@ std::unique_ptr<SalLayout> OutputDevice::ImplLayout(const OUString& rOrigStr, return pSalLayout; } -std::shared_ptr<vcl::TextLayoutCache> OutputDevice::CreateTextLayoutCache( +std::shared_ptr<vcl::text::TextLayoutCache> OutputDevice::CreateTextLayoutCache( OUString const& rString) { return GenericSalLayout::CreateTextLayoutCache(rString); @@ -1333,7 +1333,7 @@ bool OutputDevice::GetTextIsRTL( const OUString& rString, sal_Int32 nIndex, sal_ sal_Int32 OutputDevice::GetTextBreak( const OUString& rStr, tools::Long nTextWidth, sal_Int32 nIndex, sal_Int32 nLen, tools::Long nCharExtra, - vcl::TextLayoutCache const*const pLayoutCache, + vcl::text::TextLayoutCache const*const pLayoutCache, const SalLayoutGlyphs* pGlyphs) const { std::unique_ptr<SalLayout> pSalLayout = ImplLayout( rStr, nIndex, nLen, @@ -1365,7 +1365,7 @@ sal_Int32 OutputDevice::GetTextBreak( const OUString& rStr, tools::Long nTextWid sal_Unicode nHyphenChar, sal_Int32& rHyphenPos, sal_Int32 nIndex, sal_Int32 nLen, tools::Long nCharExtra, - vcl::TextLayoutCache const*const pLayoutCache) const + vcl::text::TextLayoutCache const*const pLayoutCache) const { rHyphenPos = -1; diff --git a/vcl/source/text/TextLayoutCache.cxx b/vcl/source/text/TextLayoutCache.cxx new file mode 100644 index 000000000000..00e9f9405358 --- /dev/null +++ b/vcl/source/text/TextLayoutCache.cxx @@ -0,0 +1,36 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <scrptrun.h> +#include <TextLayoutCache.hxx> + +namespace vcl::text +{ +TextLayoutCache::TextLayoutCache(sal_Unicode const* pStr, sal_Int32 const nEnd) +{ + vcl::ScriptRun aScriptRun(reinterpret_cast<const UChar*>(pStr), nEnd); + while (aScriptRun.next()) + { + runs.emplace_back(aScriptRun.getScriptStart(), aScriptRun.getScriptEnd(), + aScriptRun.getScriptCode()); + } +} +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/vcl/source/window/window3.cxx b/vcl/source/window/window3.cxx index 371b4066ed19..5b8dd5cff4ec 100644 --- a/vcl/source/window/window3.cxx +++ b/vcl/source/window/window3.cxx @@ -64,7 +64,7 @@ const Wallpaper& Window::GetBackground() const { return GetOutDev()->GetBackgrou bool Window::IsBackground() const { return GetOutDev()->IsBackground(); } tools::Long Window::GetTextHeight() const { return GetOutDev()->GetTextHeight(); } tools::Long Window::GetTextWidth(const OUString& rStr, sal_Int32 nIndex, sal_Int32 nLen, - vcl::TextLayoutCache const* pCache, + vcl::text::TextLayoutCache const* pCache, SalLayoutGlyphs const* const pLayoutCache) const { return GetOutDev()->GetTextWidth(rStr, nIndex, nLen, pCache, pLayoutCache);