cui/source/dialogs/FontFeaturesDialog.cxx         |   19 +----------
 include/vcl/font/Feature.hxx                      |   10 +++++
 vcl/inc/font/OpenTypeFeatureDefinitionList.hxx    |    6 +--
 vcl/source/font/FeatureCollector.cxx              |    2 -
 vcl/source/font/OpenTypeFeatureDefinitionList.cxx |   38 ++++++++--------------
 5 files changed, 30 insertions(+), 45 deletions(-)

New commits:
commit b6e338fe746028f82c973987eaf04280715110e4
Author:     Khaled Hosny <kha...@aliftype.com>
AuthorDate: Sat Dec 3 16:07:24 2022 +0200
Commit:     خالد حسني <kha...@aliftype.com>
CommitDate: Sun Dec 4 08:20:35 2022 +0000

    Add and use Feature::isCharacterVariant/isStylisticSet
    
    Change-Id: Ifd772da1f4b81aa08440025a5c960fb226281194
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143613
    Tested-by: Jenkins
    Reviewed-by: خالد حسني <kha...@aliftype.com>

diff --git a/cui/source/dialogs/FontFeaturesDialog.cxx 
b/cui/source/dialogs/FontFeaturesDialog.cxx
index e4154e640ab5..f618d0a59ef3 100644
--- a/cui/source/dialogs/FontFeaturesDialog.cxx
+++ b/cui/source/dialogs/FontFeaturesDialog.cxx
@@ -87,21 +87,6 @@ void FontFeaturesDialog::initialize()
     updateFontPreview();
 }
 
-namespace
-{
-bool isCharacterVariantCode(sal_uInt32 nFeatureCode)
-{
-    return ((sal_uInt32(nFeatureCode) >> 24) & 0xFF) == 'c'
-           && ((sal_uInt32(nFeatureCode) >> 16) & 0xFF) == 'v';
-}
-
-bool isStylisticSetCode(sal_uInt32 nFeatureCode)
-{
-    return ((sal_uInt32(nFeatureCode) >> 24) & 0xFF) == 's'
-           && ((sal_uInt32(nFeatureCode) >> 16) & 0xFF) == 's';
-}
-}
-
 int FontFeaturesDialog::fillGrid(std::vector<vcl::font::Feature> const& 
rFontFeatures)
 {
     int nRowHeight(0);
@@ -120,13 +105,13 @@ int 
FontFeaturesDialog::fillGrid(std::vector<vcl::font::Feature> const& rFontFea
         if (!aDefinition)
             aDefinition = { nFontFeatureCode, "" };
 
-        if (isStylisticSetCode(nFontFeatureCode))
+        if (rFontFeature.isStylisticSet())
         {
             n = j++;
             m_xStylisticSetsBox->set_visible(true);
             m_aFeatureItems.emplace_back(m_xStylisticSetsGrid.get());
         }
-        else if (isCharacterVariantCode(nFontFeatureCode))
+        else if (rFontFeature.isCharacterVariant())
         {
             n = k++;
             m_xCharacterVariantsBox->set_visible(true);
diff --git a/include/vcl/font/Feature.hxx b/include/vcl/font/Feature.hxx
index acb70bfe6980..c5bd497532e8 100644
--- a/include/vcl/font/Feature.hxx
+++ b/include/vcl/font/Feature.hxx
@@ -90,6 +90,16 @@ struct Feature
     Feature();
     Feature(uint32_t const nCode, FeatureType eType);
 
+    bool isCharacterVariant() const
+    {
+        return ((m_nCode >> 24) & 0xFF) == 'c' && ((m_nCode >> 16) & 0xFF) == 
'v';
+    }
+
+    bool isStylisticSet() const
+    {
+        return ((m_nCode >> 24) & 0xFF) == 's' && ((m_nCode >> 16) & 0xFF) == 
's';
+    }
+
     uint32_t m_nCode;
     FeatureType m_eType;
     FeatureDefinition m_aDefinition;
diff --git a/vcl/inc/font/OpenTypeFeatureDefinitionList.hxx 
b/vcl/inc/font/OpenTypeFeatureDefinitionList.hxx
index 52dbcfb5b9f0..c8fb6f7a449d 100644
--- a/vcl/inc/font/OpenTypeFeatureDefinitionList.hxx
+++ b/vcl/inc/font/OpenTypeFeatureDefinitionList.hxx
@@ -25,12 +25,12 @@ private:
 
     void init();
 
-    static bool isSpecialFeatureCode(sal_uInt32 nFeatureCode);
-    static FeatureDefinition handleSpecialFeatureCode(sal_uInt32 nFeatureCode);
+    static bool isSpecialFeature(vcl::font::Feature& rFeature);
+    static FeatureDefinition handleSpecialFeature(vcl::font::Feature& 
rFeature);
 
 public:
     OpenTypeFeatureDefinitionListPrivate();
-    FeatureDefinition getDefinition(sal_uInt32 nFeatureCode);
+    FeatureDefinition getDefinition(vcl::font::Feature& rFeature);
     bool isRequired(sal_uInt32 nFeatureCode);
 };
 
diff --git a/vcl/source/font/FeatureCollector.cxx 
b/vcl/source/font/FeatureCollector.cxx
index a97988ca46ce..fd175eade022 100644
--- a/vcl/source/font/FeatureCollector.cxx
+++ b/vcl/source/font/FeatureCollector.cxx
@@ -102,7 +102,7 @@ void FeatureCollector::collectForTable(hb_tag_t aTableTag)
         vcl::font::Feature& rFeature = m_rFontFeatures.back();
         rFeature.m_nCode = aFeatureTag;
 
-        FeatureDefinition aDefinition = 
OpenTypeFeatureDefinitionList().getDefinition(aFeatureTag);
+        FeatureDefinition aDefinition = 
OpenTypeFeatureDefinitionList().getDefinition(rFeature);
         std::vector<vcl::font::FeatureParameter> aParameters{
             { 0, VclResId(STR_FONT_FEATURE_PARAM_NONE) }
         };
diff --git a/vcl/source/font/OpenTypeFeatureDefinitionList.cxx 
b/vcl/source/font/OpenTypeFeatureDefinitionList.cxx
index f49837ccec43..4cc370cec3c7 100644
--- a/vcl/source/font/OpenTypeFeatureDefinitionList.cxx
+++ b/vcl/source/font/OpenTypeFeatureDefinitionList.cxx
@@ -127,20 +127,9 @@ void OpenTypeFeatureDefinitionListPrivate::init()
 
 namespace
 {
-bool isCharacterVariantCode(sal_uInt32 nFeatureCode)
-{
-    return ((sal_uInt32(nFeatureCode) >> 24) & 0xFF) == 'c'
-           && ((sal_uInt32(nFeatureCode) >> 16) & 0xFF) == 'v';
-}
-
-bool isStylisticSetCode(sal_uInt32 nFeatureCode)
-{
-    return ((sal_uInt32(nFeatureCode) >> 24) & 0xFF) == 's'
-           && ((sal_uInt32(nFeatureCode) >> 16) & 0xFF) == 's';
-}
-
-OUString getNumericLowerPart(sal_uInt32 nFeatureCode)
+OUString getNumericLowerPart(vcl::font::Feature& rFeature)
 {
+    auto nFeatureCode = rFeature.m_nCode;
     char cChar1((sal_uInt32(nFeatureCode) >> 8) & 0xFF);
     char cChar2((sal_uInt32(nFeatureCode) >> 0) & 0xFF);
 
@@ -154,33 +143,34 @@ OUString getNumericLowerPart(sal_uInt32 nFeatureCode)
 
 } // end anonymous namespace
 
-bool OpenTypeFeatureDefinitionListPrivate::isSpecialFeatureCode(sal_uInt32 
nFeatureCode)
+bool 
OpenTypeFeatureDefinitionListPrivate::isSpecialFeature(vcl::font::Feature& 
rFeature)
 {
-    return isCharacterVariantCode(nFeatureCode) || 
isStylisticSetCode(nFeatureCode);
+    return rFeature.isCharacterVariant() || rFeature.isStylisticSet();
 }
 
 FeatureDefinition
-OpenTypeFeatureDefinitionListPrivate::handleSpecialFeatureCode(sal_uInt32 
nFeatureCode)
+OpenTypeFeatureDefinitionListPrivate::handleSpecialFeature(vcl::font::Feature& 
rFeature)
 {
     FeatureDefinition aFeatureDefinition;
-    OUString sNumericPart = getNumericLowerPart(nFeatureCode);
+    OUString sNumericPart = getNumericLowerPart(rFeature);
     if (!sNumericPart.isEmpty())
     {
-        if (isCharacterVariantCode(nFeatureCode))
-            aFeatureDefinition = { nFeatureCode, STR_FONT_FEATURE_ID_CVXX, 
sNumericPart };
-        else if (isStylisticSetCode(nFeatureCode))
-            aFeatureDefinition = { nFeatureCode, STR_FONT_FEATURE_ID_SSXX, 
sNumericPart };
+        if (rFeature.isCharacterVariant())
+            aFeatureDefinition = { rFeature.m_nCode, STR_FONT_FEATURE_ID_CVXX, 
sNumericPart };
+        else if (rFeature.isStylisticSet())
+            aFeatureDefinition = { rFeature.m_nCode, STR_FONT_FEATURE_ID_SSXX, 
sNumericPart };
     }
     return aFeatureDefinition;
 }
 
-FeatureDefinition 
OpenTypeFeatureDefinitionListPrivate::getDefinition(sal_uInt32 nFeatureCode)
+FeatureDefinition 
OpenTypeFeatureDefinitionListPrivate::getDefinition(vcl::font::Feature& 
rFeature)
 {
-    if (isSpecialFeatureCode(nFeatureCode))
+    if (isSpecialFeature(rFeature))
     {
-        return handleSpecialFeatureCode(nFeatureCode);
+        return handleSpecialFeature(rFeature);
     }
 
+    auto nFeatureCode = rFeature.m_nCode;
     if (m_aCodeToIndex.find(nFeatureCode) != m_aCodeToIndex.end())
     {
         size_t nIndex = m_aCodeToIndex.at(nFeatureCode);

Reply via email to