diff options
author | Khaled Hosny <khaledhosny@eglug.org> | 2018-06-17 15:48:14 +0200 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2018-06-18 14:53:45 +0200 |
commit | 80e9f9f8d8cc3e1073f98b1413bc0b80b93ec4f9 (patch) | |
tree | ed34b6b1d226b6944a718b54df8d292d0708f501 /vcl/source | |
parent | ba161dd0c1117915977fb2a8d6ea6adb37026a19 (diff) |
Skip required features from the features dialog
Many OpenType features are required features that are applied to certain
context determined by the layout engine, or should always be on. There
is no value in presenting these features to the user and they just
clutter the dialog for fonts that usually have many of such features
(e.g. Arabic or Indic fonts).
Change-Id: Idc3d7d3a9eb1c4f693ea6fdf9f26f0264b910f91
Reviewed-on: https://gerrit.libreoffice.org/55951
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'vcl/source')
-rw-r--r-- | vcl/source/font/FeatureCollector.cxx | 3 | ||||
-rw-r--r-- | vcl/source/font/OpenTypeFeatureDefinitonList.cxx | 72 |
2 files changed, 25 insertions, 50 deletions
diff --git a/vcl/source/font/FeatureCollector.cxx b/vcl/source/font/FeatureCollector.cxx index 1087a9311daf..790c3a484dcb 100644 --- a/vcl/source/font/FeatureCollector.cxx +++ b/vcl/source/font/FeatureCollector.cxx @@ -92,6 +92,9 @@ void FeatureCollector::collectForLanguage(hb_tag_t aTableTag, sal_uInt32 nScript for (hb_tag_t aFeatureTag : aFeatureTags) { + if (OpenTypeFeatureDefinitonList::get().isRequired(aFeatureTag)) + continue; + m_rFontFeatures.emplace_back(); vcl::font::Feature& rFeature = m_rFontFeatures.back(); rFeature.m_aID = { aFeatureTag, aScriptTag, aLanguageTag }; diff --git a/vcl/source/font/OpenTypeFeatureDefinitonList.cxx b/vcl/source/font/OpenTypeFeatureDefinitonList.cxx index 17ee8268c741..8b5ce4858956 100644 --- a/vcl/source/font/OpenTypeFeatureDefinitonList.cxx +++ b/vcl/source/font/OpenTypeFeatureDefinitonList.cxx @@ -22,27 +22,16 @@ void OpenTypeFeatureDefinitonListPrivate::init() { m_aFeatureDefinition.assign({ { featureCode("aalt"), STR_FONT_FEATURE_ID_AALT }, - { featureCode("abvf"), STR_FONT_FEATURE_ID_ABVF }, - { featureCode("abvm"), STR_FONT_FEATURE_ID_ABVM }, - { featureCode("abvs"), STR_FONT_FEATURE_ID_ABVS }, { featureCode("afrc"), STR_FONT_FEATURE_ID_AFRC }, - { featureCode("akhn"), STR_FONT_FEATURE_ID_AKHN }, { featureCode("alig"), STR_FONT_FEATURE_ID_ALIG }, - { featureCode("blwf"), STR_FONT_FEATURE_ID_BLWF }, - { featureCode("blwm"), STR_FONT_FEATURE_ID_BLWM }, - { featureCode("blws"), STR_FONT_FEATURE_ID_BLWS }, { featureCode("c2pc"), STR_FONT_FEATURE_ID_C2PC }, { featureCode("c2sc"), STR_FONT_FEATURE_ID_C2SC }, { featureCode("calt"), STR_FONT_FEATURE_ID_CALT }, { featureCode("case"), STR_FONT_FEATURE_ID_CASE }, - { featureCode("ccmp"), STR_FONT_FEATURE_ID_CCMP }, - { featureCode("cfar"), STR_FONT_FEATURE_ID_CFAR }, - { featureCode("cjct"), STR_FONT_FEATURE_ID_CJCT }, { featureCode("clig"), STR_FONT_FEATURE_ID_CLIG }, { featureCode("cpct"), STR_FONT_FEATURE_ID_CPCT }, { featureCode("cpsp"), STR_FONT_FEATURE_ID_CPSP }, { featureCode("cswh"), STR_FONT_FEATURE_ID_CSWH }, - { featureCode("curs"), STR_FONT_FEATURE_ID_CURS }, { featureCode("cv01"), STR_FONT_FEATURE_ID_CV01 }, { featureCode("cv02"), STR_FONT_FEATURE_ID_CV02 }, { featureCode("cv03"), STR_FONT_FEATURE_ID_CV03 }, @@ -53,23 +42,15 @@ void OpenTypeFeatureDefinitonListPrivate::init() { featureCode("cv08"), STR_FONT_FEATURE_ID_CV08 }, { featureCode("cv09"), STR_FONT_FEATURE_ID_CV09 }, { featureCode("dcap"), STR_FONT_FEATURE_ID_DCAP }, - { featureCode("dist"), STR_FONT_FEATURE_ID_DIST }, { featureCode("dlig"), STR_FONT_FEATURE_ID_DLIG }, { featureCode("dnom"), STR_FONT_FEATURE_ID_DNOM }, { featureCode("dpng"), STR_FONT_FEATURE_ID_DPNG }, - { featureCode("dtls"), STR_FONT_FEATURE_ID_DTLS }, { featureCode("expt"), STR_FONT_FEATURE_ID_EXPT }, { featureCode("falt"), STR_FONT_FEATURE_ID_FALT }, - { featureCode("fin2"), STR_FONT_FEATURE_ID_FIN2 }, - { featureCode("fin3"), STR_FONT_FEATURE_ID_FIN3 }, - { featureCode("fina"), STR_FONT_FEATURE_ID_FINA }, - { featureCode("flac"), STR_FONT_FEATURE_ID_FLAC }, { featureCode("frac"), STR_FONT_FEATURE_ID_FRAC, std::vector<FeatureParameter>{ { 1, STR_FONT_FEATURE_ID_FRAC_PARAM_1 }, { 2, STR_FONT_FEATURE_ID_FRAC_PARAM_2 } } }, { featureCode("fwid"), STR_FONT_FEATURE_ID_FWID }, - { featureCode("half"), STR_FONT_FEATURE_ID_HALF }, - { featureCode("haln"), STR_FONT_FEATURE_ID_HALN }, { featureCode("halt"), STR_FONT_FEATURE_ID_HALT }, { featureCode("hist"), STR_FONT_FEATURE_ID_HIST }, { featureCode("hkna"), STR_FONT_FEATURE_ID_HKNA }, @@ -77,8 +58,6 @@ void OpenTypeFeatureDefinitonListPrivate::init() { featureCode("hngl"), STR_FONT_FEATURE_ID_HNGL }, { featureCode("hojo"), STR_FONT_FEATURE_ID_HOJO }, { featureCode("hwid"), STR_FONT_FEATURE_ID_HWID }, - { featureCode("init"), STR_FONT_FEATURE_ID_INIT }, - { featureCode("isol"), STR_FONT_FEATURE_ID_ISOL }, { featureCode("ital"), STR_FONT_FEATURE_ID_ITAL }, { featureCode("jalt"), STR_FONT_FEATURE_ID_JALT }, { featureCode("jp78"), STR_FONT_FEATURE_ID_JP78 }, @@ -88,20 +67,10 @@ void OpenTypeFeatureDefinitonListPrivate::init() { featureCode("kern"), STR_FONT_FEATURE_ID_KERN }, { featureCode("lfbd"), STR_FONT_FEATURE_ID_LFBD }, { featureCode("liga"), STR_FONT_FEATURE_ID_LIGA }, - { featureCode("ljmo"), STR_FONT_FEATURE_ID_LJMO }, { featureCode("lnum"), STR_FONT_FEATURE_ID_LNUM }, - { featureCode("locl"), STR_FONT_FEATURE_ID_LOCL }, - { featureCode("ltra"), STR_FONT_FEATURE_ID_LTRA }, - { featureCode("ltrm"), STR_FONT_FEATURE_ID_LTRM }, - { featureCode("mark"), STR_FONT_FEATURE_ID_MARK }, - { featureCode("med2"), STR_FONT_FEATURE_ID_MED2 }, - { featureCode("medi"), STR_FONT_FEATURE_ID_MEDI }, { featureCode("mgrk"), STR_FONT_FEATURE_ID_MGRK }, - { featureCode("mkmk"), STR_FONT_FEATURE_ID_MKMK }, - { featureCode("mset"), STR_FONT_FEATURE_ID_MSET }, { featureCode("nalt"), STR_FONT_FEATURE_ID_NALT }, { featureCode("nlck"), STR_FONT_FEATURE_ID_NLCK }, - { featureCode("nukt"), STR_FONT_FEATURE_ID_NUKT }, { featureCode("numr"), STR_FONT_FEATURE_ID_NUMR }, { featureCode("onum"), STR_FONT_FEATURE_ID_ONUM }, { featureCode("opbd"), STR_FONT_FEATURE_ID_OPBD }, @@ -111,25 +80,12 @@ void OpenTypeFeatureDefinitonListPrivate::init() { featureCode("pcap"), STR_FONT_FEATURE_ID_PCAP }, { featureCode("pkna"), STR_FONT_FEATURE_ID_PKNA }, { featureCode("pnum"), STR_FONT_FEATURE_ID_PNUM }, - { featureCode("pref"), STR_FONT_FEATURE_ID_PREF }, - { featureCode("pres"), STR_FONT_FEATURE_ID_PRES }, - { featureCode("pstf"), STR_FONT_FEATURE_ID_PSTF }, - { featureCode("psts"), STR_FONT_FEATURE_ID_PSTS }, { featureCode("pwid"), STR_FONT_FEATURE_ID_PWID }, { featureCode("qwid"), STR_FONT_FEATURE_ID_QWID }, - { featureCode("rand"), STR_FONT_FEATURE_ID_RAND }, - { featureCode("rclt"), STR_FONT_FEATURE_ID_RCLT }, - { featureCode("rkrf"), STR_FONT_FEATURE_ID_RKRF }, - { featureCode("rlig"), STR_FONT_FEATURE_ID_RLIG }, - { featureCode("rphf"), STR_FONT_FEATURE_ID_RPHF }, { featureCode("rtbd"), STR_FONT_FEATURE_ID_RTBD }, - { featureCode("rtla"), STR_FONT_FEATURE_ID_RTLA }, - { featureCode("rtlm"), STR_FONT_FEATURE_ID_RTLM }, { featureCode("ruby"), STR_FONT_FEATURE_ID_RUBY }, - { featureCode("rvrn"), STR_FONT_FEATURE_ID_RVRN }, { featureCode("salt"), STR_FONT_FEATURE_ID_SALT }, { featureCode("sinf"), STR_FONT_FEATURE_ID_SINF }, - { featureCode("size"), STR_FONT_FEATURE_ID_SIZE }, { featureCode("smcp"), STR_FONT_FEATURE_ID_SMCP }, { featureCode("smpl"), STR_FONT_FEATURE_ID_SMPL }, { featureCode("ss01"), STR_FONT_FEATURE_ID_SS01 }, @@ -152,23 +108,17 @@ void OpenTypeFeatureDefinitonListPrivate::init() { featureCode("ss18"), STR_FONT_FEATURE_ID_SS18 }, { featureCode("ss19"), STR_FONT_FEATURE_ID_SS19 }, { featureCode("ss20"), STR_FONT_FEATURE_ID_SS20 }, - { featureCode("ssty"), STR_FONT_FEATURE_ID_SSTY }, - { featureCode("stch"), STR_FONT_FEATURE_ID_STCH }, { featureCode("subs"), STR_FONT_FEATURE_ID_SUBS }, { featureCode("sups"), STR_FONT_FEATURE_ID_SUPS }, { featureCode("swsh"), STR_FONT_FEATURE_ID_SWSH }, { featureCode("titl"), STR_FONT_FEATURE_ID_TITL }, - { featureCode("tjmo"), STR_FONT_FEATURE_ID_TJMO }, { featureCode("tnam"), STR_FONT_FEATURE_ID_TNAM }, { featureCode("tnum"), STR_FONT_FEATURE_ID_TNUM }, { featureCode("trad"), STR_FONT_FEATURE_ID_TRAD }, { featureCode("twid"), STR_FONT_FEATURE_ID_TWID }, { featureCode("unic"), STR_FONT_FEATURE_ID_UNIC }, { featureCode("valt"), STR_FONT_FEATURE_ID_VALT }, - { featureCode("vatu"), STR_FONT_FEATURE_ID_VATU }, - { featureCode("vert"), STR_FONT_FEATURE_ID_VERT }, { featureCode("vhal"), STR_FONT_FEATURE_ID_VHAL }, - { featureCode("vjmo"), STR_FONT_FEATURE_ID_VJMO }, { featureCode("vkna"), STR_FONT_FEATURE_ID_VKNA }, { featureCode("vkrn"), STR_FONT_FEATURE_ID_VKRN }, { featureCode("vpal"), STR_FONT_FEATURE_ID_VPAL }, @@ -181,6 +131,22 @@ void OpenTypeFeatureDefinitonListPrivate::init() { m_aCodeToIndex.emplace(m_aFeatureDefinition[i].getCode(), i); } + + m_aRequiredFeatures.assign({ + featureCode("abvf"), featureCode("abvm"), featureCode("abvs"), featureCode("akhn"), + featureCode("blwf"), featureCode("blwm"), featureCode("blws"), featureCode("ccmp"), + featureCode("cfar"), featureCode("cjct"), featureCode("curs"), featureCode("dist"), + featureCode("dtls"), featureCode("fin2"), featureCode("fin3"), featureCode("fina"), + featureCode("flac"), featureCode("half"), featureCode("haln"), featureCode("init"), + featureCode("isol"), featureCode("ljmo"), featureCode("locl"), featureCode("ltra"), + featureCode("ltrm"), featureCode("mark"), featureCode("med2"), featureCode("medi"), + featureCode("mkmk"), featureCode("mset"), featureCode("nukt"), featureCode("pref"), + featureCode("pres"), featureCode("pstf"), featureCode("psts"), featureCode("rand"), + featureCode("rclt"), featureCode("rkrf"), featureCode("rlig"), featureCode("rphf"), + featureCode("rtla"), featureCode("rtlm"), featureCode("rvrn"), featureCode("size"), + featureCode("ssty"), featureCode("stch"), featureCode("tjmo"), featureCode("vatu"), + featureCode("vert"), featureCode("vjmo"), + }); } FeatureDefinition OpenTypeFeatureDefinitonListPrivate::getDefinition(sal_uInt32 nFeatureCode) @@ -193,6 +159,12 @@ FeatureDefinition OpenTypeFeatureDefinitonListPrivate::getDefinition(sal_uInt32 return FeatureDefinition(); } +bool OpenTypeFeatureDefinitonListPrivate::isRequired(sal_uInt32 nFeatureCode) +{ + return std::find(m_aRequiredFeatures.begin(), m_aRequiredFeatures.end(), nFeatureCode) + != m_aRequiredFeatures.end(); +} + } // end font namespace } // end vcl namespace |