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