summaryrefslogtreecommitdiff
path: root/cui
diff options
context:
space:
mode:
authorKhaled Hosny <khaled@aliftype.com>2022-12-03 15:33:08 +0200
committerخالد حسني <khaled@aliftype.com>2022-12-04 08:19:58 +0000
commitdf57f192c03b38b834a8283b80fc9cd9610b1583 (patch)
tree083c88436be1e778d345f141354c86c36a51a425 /cui
parent402d331a0e75a340a3b01cf12b5a61a3266c50fe (diff)
Seperate Stylistic Sets and Character Variants in Font Features Dialog
Makes clear what these features are when we use feature names provided by the font. Change-Id: I98a7294d3e1e7fef5293d0444c0fbbfcc131ed44 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143611 Tested-by: Jenkins Reviewed-by: خالد حسني <khaled@aliftype.com>
Diffstat (limited to 'cui')
-rw-r--r--cui/source/dialogs/FontFeaturesDialog.cxx53
-rw-r--r--cui/source/inc/FontFeaturesDialog.hxx5
-rw-r--r--cui/uiconfig/ui/fontfeaturesdialog.ui133
3 files changed, 176 insertions, 15 deletions
diff --git a/cui/source/dialogs/FontFeaturesDialog.cxx b/cui/source/dialogs/FontFeaturesDialog.cxx
index a23c0083c1b3..e4154e640ab5 100644
--- a/cui/source/dialogs/FontFeaturesDialog.cxx
+++ b/cui/source/dialogs/FontFeaturesDialog.cxx
@@ -23,7 +23,12 @@ FontFeaturesDialog::FontFeaturesDialog(weld::Window* pParent, OUString aFontName
: GenericDialogController(pParent, "cui/ui/fontfeaturesdialog.ui", "FontFeaturesDialog")
, m_sFontName(std::move(aFontName))
, m_xContentWindow(m_xBuilder->weld_scrolled_window("contentWindow"))
+ , m_xContentBox(m_xBuilder->weld_container("contentBox"))
, m_xContentGrid(m_xBuilder->weld_container("contentGrid"))
+ , m_xStylisticSetsBox(m_xBuilder->weld_container("stylisticSetsBox"))
+ , m_xStylisticSetsGrid(m_xBuilder->weld_container("stylisticSetsGrid"))
+ , m_xCharacterVariantsBox(m_xBuilder->weld_container("characterVariantsBox"))
+ , m_xCharacterVariantsGrid(m_xBuilder->weld_container("characterVariantsGrid"))
, m_xPreviewWindow(new weld::CustomWeld(*m_xBuilder, "preview", m_aPreviewWindow))
{
initialize();
@@ -66,9 +71,11 @@ void FontFeaturesDialog::initialize()
int nRowHeight = fillGrid(rFilteredFontFeatures);
+ auto nFeaturesHeight = m_xContentBox->get_preferred_size().Height()
+ + m_xStylisticSetsBox->get_preferred_size().Height()
+ + m_xCharacterVariantsBox->get_preferred_size().Height();
m_xContentWindow->set_size_request(
- -1, std::min(std::max(m_xContentWindow->get_preferred_size().Height(),
- m_xContentGrid->get_preferred_size().Height()),
+ -1, std::min(std::max(m_xContentWindow->get_preferred_size().Height(), nFeaturesHeight),
static_cast<tools::Long>(300L)));
if (nRowHeight)
@@ -80,6 +87,21 @@ 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);
@@ -87,7 +109,7 @@ int FontFeaturesDialog::fillGrid(std::vector<vcl::font::Feature> const& rFontFea
vcl::font::FeatureParser aParser(m_sFontName);
auto aExistingFeatures = aParser.getFeaturesMap();
- sal_Int32 i = 0;
+ sal_Int32 i = 0, j = 0, k = 0, n = 0;
for (vcl::font::Feature const& rFontFeature : rFontFeatures)
{
sal_uInt32 nFontFeatureCode = rFontFeature.m_nCode;
@@ -98,7 +120,24 @@ int FontFeaturesDialog::fillGrid(std::vector<vcl::font::Feature> const& rFontFea
if (!aDefinition)
aDefinition = { nFontFeatureCode, "" };
- m_aFeatureItems.emplace_back(m_xContentGrid.get());
+ if (isStylisticSetCode(nFontFeatureCode))
+ {
+ n = j++;
+ m_xStylisticSetsBox->set_visible(true);
+ m_aFeatureItems.emplace_back(m_xStylisticSetsGrid.get());
+ }
+ else if (isCharacterVariantCode(nFontFeatureCode))
+ {
+ n = k++;
+ m_xCharacterVariantsBox->set_visible(true);
+ m_aFeatureItems.emplace_back(m_xCharacterVariantsGrid.get());
+ }
+ else
+ {
+ n = i++;
+ m_xContentBox->set_visible(true);
+ m_aFeatureItems.emplace_back(m_xContentGrid.get());
+ }
int32_t nValue = 0;
if (aExistingFeatures.find(nFontFeatureCode) != aExistingFeatures.end())
@@ -110,8 +149,8 @@ int FontFeaturesDialog::fillGrid(std::vector<vcl::font::Feature> const& rFontFea
aCurrentItem.m_aFeatureCode = nFontFeatureCode;
aCurrentItem.m_nDefault = aDefinition.getDefault();
- sal_Int32 nGridPositionX = (i % 2) * 2;
- sal_Int32 nGridPositionY = i / 2;
+ sal_Int32 nGridPositionX = (n % 2) * 2;
+ sal_Int32 nGridPositionY = n / 2;
aCurrentItem.m_xContainer->set_grid_left_attach(nGridPositionX);
aCurrentItem.m_xContainer->set_grid_top_attach(nGridPositionY);
@@ -144,8 +183,6 @@ int FontFeaturesDialog::fillGrid(std::vector<vcl::font::Feature> const& rFontFea
nRowHeight
= std::max<int>(nRowHeight, aCurrentItem.m_xContainer->get_preferred_size().Height());
-
- i++;
}
return nRowHeight;
diff --git a/cui/source/inc/FontFeaturesDialog.hxx b/cui/source/inc/FontFeaturesDialog.hxx
index 6b30a33111b2..c4eb43b79e98 100644
--- a/cui/source/inc/FontFeaturesDialog.hxx
+++ b/cui/source/inc/FontFeaturesDialog.hxx
@@ -49,7 +49,12 @@ private:
SvxFontPrevWindow m_aPreviewWindow;
std::unique_ptr<weld::ScrolledWindow> m_xContentWindow;
+ std::unique_ptr<weld::Container> m_xContentBox;
std::unique_ptr<weld::Container> m_xContentGrid;
+ std::unique_ptr<weld::Container> m_xStylisticSetsBox;
+ std::unique_ptr<weld::Container> m_xStylisticSetsGrid;
+ std::unique_ptr<weld::Container> m_xCharacterVariantsBox;
+ std::unique_ptr<weld::Container> m_xCharacterVariantsGrid;
std::unique_ptr<weld::CustomWeld> m_xPreviewWindow;
void initialize();
diff --git a/cui/uiconfig/ui/fontfeaturesdialog.ui b/cui/uiconfig/ui/fontfeaturesdialog.ui
index 4b4427f0041f..c0eca92c3b73 100644
--- a/cui/uiconfig/ui/fontfeaturesdialog.ui
+++ b/cui/uiconfig/ui/fontfeaturesdialog.ui
@@ -89,16 +89,135 @@
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
- <!-- n-columns=1 n-rows=1 -->
- <object class="GtkGrid" id="contentGrid">
+ <object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
- <property name="valign">start</property>
- <property name="row-spacing">6</property>
- <property name="column-spacing">12</property>
- <property name="row-homogeneous">True</property>
+ <property name="orientation">vertical</property>
<child>
- <placeholder/>
+ <object class="GtkBox" id="contentBox">
+ <property name="can-focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <!-- n-columns=1 n-rows=1 -->
+ <object class="GtkGrid" id="contentGrid">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="valign">start</property>
+ <property name="row-spacing">6</property>
+ <property name="column-spacing">12</property>
+ <property name="row-homogeneous">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="stylisticSetsBox">
+ <property name="can-focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="margin-top">6</property>
+ <property name="label" translatable="yes" context="fontfeaturesdialog">Stylistic Sets</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <!-- n-columns=1 n-rows=1 -->
+ <object class="GtkGrid" id="stylisticSetsGrid">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="valign">start</property>
+ <property name="row-spacing">6</property>
+ <property name="column-spacing">12</property>
+ <property name="row-homogeneous">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="characterVariantsBox">
+ <property name="can-focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="margin-top">6</property>
+ <property name="label" translatable="yes" context="fontfeaturesdialog">Character Variants</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <!-- n-columns=1 n-rows=1 -->
+ <object class="GtkGrid" id="characterVariantsGrid">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="valign">start</property>
+ <property name="row-spacing">6</property>
+ <property name="column-spacing">12</property>
+ <property name="row-homogeneous">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
</child>
</object>
</child>