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);

Reply via email to