[Libreoffice-commits] core.git: Branch 'feature/commonsallayout' - vcl/inc vcl/source

Khaled Hosny khaledhosny at eglug.org
Mon Oct 17 18:20:00 UTC 2016


 vcl/inc/CommonSalLayout.hxx        |    8 ++++----
 vcl/source/gdi/CommonSalLayout.cxx |   34 ++++++++++++++++------------------
 2 files changed, 20 insertions(+), 22 deletions(-)

New commits:
commit 754fcf66f203f33840cfe08707a740db956fca12
Author: Khaled Hosny <khaledhosny at eglug.org>
Date:   Mon Oct 17 19:59:23 2016 +0200

    Fix debug build and few cleanups
    
    Change-Id: I805962667c3ef2dcaf07a0acebeacca74c74892a

diff --git a/vcl/inc/CommonSalLayout.hxx b/vcl/inc/CommonSalLayout.hxx
index abc5ea7..cd43bec 100644
--- a/vcl/inc/CommonSalLayout.hxx
+++ b/vcl/inc/CommonSalLayout.hxx
@@ -50,9 +50,10 @@ class CommonSalLayout : public GenericSalLayout
 #else
     ServerFont&             mrServerFont;
 #endif
-    OString mLang;
-    hb_feature_t * mpFeatures;
-    unsigned int mnFeats;
+
+    void                    ParseFeatures(const OUString& name);
+    OString                 msLanguage;
+    std::vector<hb_feature_t> maFeatures;
 
 public:
 #if defined(_WIN32)
@@ -66,7 +67,6 @@ public:
     const ServerFont&       getFontData() const { return mrServerFont; };
 #endif
 
-    void                    ParseFeatures(OUString name);
     void                    SetNeedFallback(ImplLayoutArgs&, sal_Int32, bool);
     void                    AdjustLayout(ImplLayoutArgs&) override;
     bool                    LayoutText(ImplLayoutArgs&) override;
diff --git a/vcl/source/gdi/CommonSalLayout.cxx b/vcl/source/gdi/CommonSalLayout.cxx
index 0966b29..f6088b8 100644
--- a/vcl/source/gdi/CommonSalLayout.cxx
+++ b/vcl/source/gdi/CommonSalLayout.cxx
@@ -126,18 +126,16 @@ static hb_unicode_funcs_t* getUnicodeFuncs()
 }
 #endif
 
-void CommonSalLayout::ParseFeatures(OUString name)
+void CommonSalLayout::ParseFeatures(const OUString& name)
 {
-    mnFeats = 0;
-    mpFeatures = 0;
-    mLang = OString("");
+    int nFeatures = 0;
     int nStart = name.indexOf(':');
     if (nStart < 0)
         return;
     OString oName = OUStringToOString(name, RTL_TEXTENCODING_ASCII_US);
     for (int nNext = nStart; nNext > 0; nNext = name.indexOf('&', nNext + 1))
     {
-        if (name.match("lang=", nNext+1))
+        if (name.match("lang=", nNext + 1))
         {
             int endamp = name.indexOf('&', nNext+1);
             int enddelim = name.indexOf(' ', nNext+1);
@@ -151,23 +149,23 @@ void CommonSalLayout::ParseFeatures(OUString name)
                 end = endamp;
             else
                 end = enddelim;
-            mLang = oName.copy(nNext+6, end-nNext-6);
+            msLanguage = oName.copy(nNext + 6, end - nNext - 6);
         }
         else
-            ++mnFeats;
+            ++nFeatures;
     }
-    if (mnFeats == 0)
+    if (nFeatures == 0)
         return;
 
-    mpFeatures = new hb_feature_t[mnFeats];
-    mnFeats = 0;
-    for (int nThis = nStart, nNext = name.indexOf('&', nStart+1); nThis > 0; nThis = nNext, nNext = name.indexOf('&', nNext + 1))
+    maFeatures.reserve(nFeatures);
+    for (int nThis = nStart, nNext = name.indexOf('&', nStart + 1); nThis > 0; nThis = nNext, nNext = name.indexOf('&', nNext + 1))
     {
-        if (!name.match("lang=", nThis+1))
+        if (!name.match("lang=", nThis + 1))
         {
             int end = nNext > 0 ? nNext : name.getLength();
-            if (hb_feature_from_string(oName.getStr() + nThis + 1, end - nThis - 1, &mpFeatures[mnFeats]))
-                ++mnFeats;
+            hb_feature_t aFeature;
+            if (hb_feature_from_string(oName.getStr() + nThis + 1, end - nThis - 1, &aFeature))
+                maFeatures.push_back(aFeature);
         }
     }
 }
@@ -463,9 +461,9 @@ bool CommonSalLayout::LayoutText(ImplLayoutArgs& rArgs)
             int nRunLen = nEndRunPos - nMinRunPos;
             aHbScript = hb_icu_script_to_script(aScriptRun.maScript);
 
-            // hb_language_from_string() accept ISO639-3 language tag except for Chinese.
-            LanguageTag &rTag = rArgs.maLanguageTag;
-            OString sLanguage = mLang.getLength() ? mLang : OUStringToOString(rTag.getBcp47(), RTL_TEXTENCODING_ASCII_US);
+            OString sLanguage = msLanguage;
+            if (sLanguage.isEmpty())
+                sLanguage = OUStringToOString(rArgs.maLanguageTag.getBcp47(), RTL_TEXTENCODING_ASCII_US);
 
             bool bVertical = false;
             if ((rArgs.mnFlags & SalLayoutFlags::Vertical) &&
@@ -498,7 +496,7 @@ bool CommonSalLayout::LayoutText(ImplLayoutArgs& rArgs)
 #if HB_VERSION_ATLEAST(0, 9, 42)
             hb_buffer_set_cluster_level(pHbBuffer, HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS);
 #endif
-            hb_shape(mpHbFont, pHbBuffer, mpFeatures, mnFeats);
+            hb_shape(mpHbFont, pHbBuffer, maFeatures.data(), maFeatures.size());
 
             int nRunGlyphCount = hb_buffer_get_length(pHbBuffer);
             hb_glyph_info_t *pHbGlyphInfos = hb_buffer_get_glyph_infos(pHbBuffer, nullptr);


More information about the Libreoffice-commits mailing list