diff options
Diffstat (limited to 'sw')
-rw-r--r-- | sw/inc/viewopt.hxx | 15 | ||||
-rw-r--r-- | sw/source/core/txtnode/fntcache.cxx | 113 | ||||
-rw-r--r-- | sw/source/ui/config/optpage.cxx | 3 | ||||
-rw-r--r-- | sw/source/uibase/config/cfgitems.cxx | 6 | ||||
-rw-r--r-- | sw/source/uibase/config/usrpref.cxx | 71 | ||||
-rw-r--r-- | sw/source/uibase/config/viewopt.cxx | 3 | ||||
-rw-r--r-- | sw/source/uibase/inc/cfgitems.hxx | 3 | ||||
-rw-r--r-- | sw/source/uibase/inc/optpage.hxx | 1 | ||||
-rw-r--r-- | sw/uiconfig/swriter/ui/viewoptionspage.ui | 70 |
9 files changed, 195 insertions, 90 deletions
diff --git a/sw/inc/viewopt.hxx b/sw/inc/viewopt.hxx index e8a1c299b496..6c93602a85ae 100644 --- a/sw/inc/viewopt.hxx +++ b/sw/inc/viewopt.hxx @@ -126,6 +126,13 @@ namespace o3tl { template<> struct typed_flags<ViewOptFlags> : is_typed_flags<ViewOptFlags, 0x01ff> {}; } +enum class GlyphPositioningMode { + Classic, + ClassicInspired, + PreferLayout, + PreferReadability +}; + class SW_DLLPUBLIC SwViewOption { static Color s_aDocColor; // color of document boundaries @@ -163,6 +170,7 @@ class SW_DLLPUBLIC SwViewOption sal_uInt8 m_nPagePreviewRow; // Page Preview Row/Columns. sal_uInt8 m_nPagePreviewCol; // Page Preview Row/Columns. SwFillMode m_nShadowCursorFillMode; // FillMode for ShadowCursor. + GlyphPositioningMode m_eGlyphPositioningMode; // Positioning strategy for screen glyphs bool m_bReadonly : 1; // Readonly-Doc. bool m_bStarOneSetting : 1;// Prevent from UI automatics (no scrollbars in readonly documents). bool m_bIsPagePreview : 1; // The preview mustn't print field/footnote/... shadings. @@ -426,6 +434,12 @@ public: void SetPrinting(bool b) { SetCore2Option(b, ViewOptCoreFlags2::Printing); } + GlyphPositioningMode GetGlyphPositioningMode() const + { return m_eGlyphPositioningMode; } + + void SetGlyphPositioningMode(GlyphPositioningMode eMode) + { m_eGlyphPositioningMode = eMode; } + void SetCore2Option(bool b, ViewOptCoreFlags2 f) { if (b) @@ -697,6 +711,7 @@ inline void SwViewOption::SetUIOptions( const SwViewOption& rVOpt ) m_nUIOptions = rVOpt.m_nUIOptions; m_nTableDestination = rVOpt.m_nTableDestination; m_nShadowCursorFillMode = rVOpt.m_nShadowCursorFillMode; + m_eGlyphPositioningMode = rVOpt.m_eGlyphPositioningMode; } // Helper function for checking HTML-capabilities. diff --git a/sw/source/core/txtnode/fntcache.cxx b/sw/source/core/txtnode/fntcache.cxx index e02b3aa52602..df213b9553e9 100644 --- a/sw/source/core/txtnode/fntcache.cxx +++ b/sw/source/core/txtnode/fntcache.cxx @@ -857,26 +857,64 @@ static void lcl_DrawLineForWrongListData( namespace { - void AdjustKernArray(sal_Int32 i, tools::Long& rScrPos, sal_Unicode cChPrev, sal_Unicode nCh, + void AdjustKernArray(GlyphPositioningMode eGlyphPositioningMode, sal_Int32 i, tools::Long& rScrPos, + sal_Unicode cChPrev, sal_Unicode nCh, const std::vector<sal_Int32>& rScrArray, std::vector<sal_Int32>& rKernArray, int nMul) { tools::Long nScr = rScrArray[i] - rScrArray[i - 1]; - if (nCh == CH_BLANK) - rScrPos = rKernArray[i - 1] + nScr; - else + switch (eGlyphPositioningMode) { - if (cChPrev == CH_BLANK || cChPrev == '-') + case GlyphPositioningMode::PreferLayout: rScrPos = rKernArray[i - 1] + nScr; - else + // just accept the print layout positions, this is what editeng does + break; + case GlyphPositioningMode::PreferReadability: { + // Overwrite KernArray with the screen-optimized glyph positions + rKernArray[i - 1] = rScrPos; rScrPos += nScr; + break; + } + case GlyphPositioningMode::Classic: + { + if (nCh == CH_BLANK) + rScrPos = rKernArray[i - 1] + nScr; + else + { + if (cChPrev == CH_BLANK || cChPrev == '-') + rScrPos = rKernArray[i - 1] + nScr; + else + { + rScrPos += nScr; - const int nDiv = nMul+1; - rScrPos = (nMul * rScrPos + rKernArray[i]) / nDiv; + const int nDiv = nMul+1; + rScrPos = (nMul * rScrPos + rKernArray[i]) / nDiv; + } + } + rKernArray[i - 1] = rScrPos - nScr; + break; + } + case GlyphPositioningMode::ClassicInspired: + { + // use the print layout positions for blanks and the first glyph after a blank or - + // and use screen layout within a run of glyphs + const bool bSyncWithPrintLayout = nCh == CH_BLANK || cChPrev == CH_BLANK || cChPrev == '-'; + if (bSyncWithPrintLayout) + { + // Leave KernArray untouched at its print layout position in this case + // sync ScreenPos to print layout position + rScrPos = rKernArray[i - 1] + nScr; + } + else + { + // Overwrite KernArray within the run to use screen-optimized glyph positions + rKernArray[i - 1] = rScrPos; + rScrPos += nScr; + } + break; } } - rKernArray[i - 1] = rScrPos - nScr; } } @@ -1689,6 +1727,8 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) } else { + GlyphPositioningMode eGlyphPositioningMode = rInf.GetShell()->GetViewOptions()->GetGlyphPositioningMode(); + // In case of Pair Kerning the printer influence on the positioning // grows const int nMul = m_pPrtFont->GetKerning() != FontKerning::NONE ? 1 : 3; @@ -1712,7 +1752,7 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) for (sal_Int32 i = 1; i < sal_Int32(nCnt); ++i, nKernSum += rInf.GetKern()) { sal_Unicode nCh = rInf.GetText()[sal_Int32(rInf.GetIdx()) + i]; - AdjustKernArray(i, nScrPos, cChPrev, nCh, aScrArray, aKernArray, nMul); + AdjustKernArray(eGlyphPositioningMode, i, nScrPos, cChPrev, nCh, aScrArray, aKernArray, nMul); // Apply SpaceSum if (cChPrev == CH_BLANK) @@ -2012,7 +2052,6 @@ Size SwFntObj::GetTextSize( SwDrawTextInfo& rInf ) CreateScrFont( *rInf.GetShell(), rInf.GetOut() ); if( !GetScrFont()->IsSameInstance( rInf.GetOut().GetFont() ) ) rInf.GetOut().SetFont( *m_pScrFont ); - tools::Long nScrPos; m_pPrinter->GetTextArray(rInf.GetText(), &aKernArray, sal_Int32(rInf.GetIdx()), sal_Int32(nLn)); @@ -2024,34 +2063,44 @@ Size SwFntObj::GetTextSize( SwDrawTextInfo& rInf ) rInf.SetKanaDiff( 0 ); if ( rInf.GetKanaDiff() ) - nScrPos = aKernArray[ sal_Int32(nLn) - 1 ]; + { + aTextSize.setWidth(aKernArray[sal_Int32(nLn) - 1]); + } else { - std::vector<sal_Int32> aScrArray; - rInf.GetOut().GetTextArray( rInf.GetText(), &aScrArray, - sal_Int32(rInf.GetIdx()), sal_Int32(rInf.GetLen())); - nScrPos = aScrArray[ 0 ]; - TextFrameIndex nCnt(rInf.GetText().getLength()); - if ( nCnt < rInf.GetIdx() ) - nCnt = TextFrameIndex(0); // assert??? + GlyphPositioningMode eGlyphPositioningMode = rInf.GetShell()->GetViewOptions()->GetGlyphPositioningMode(); + if (eGlyphPositioningMode == GlyphPositioningMode::PreferLayout) + { + aTextSize.setWidth(aKernArray[sal_Int32(nLn) - 1]); + } else - nCnt = nCnt - rInf.GetIdx(); - nCnt = std::min(nCnt, nLn); - sal_Unicode nChPrev = rInf.GetText()[ sal_Int32(rInf.GetIdx()) ]; + { + std::vector<sal_Int32> aScrArray; + rInf.GetOut().GetTextArray( rInf.GetText(), &aScrArray, + sal_Int32(rInf.GetIdx()), sal_Int32(rInf.GetLen())); + tools::Long nScrPos = aScrArray[ 0 ]; + TextFrameIndex nCnt(rInf.GetText().getLength()); + if ( nCnt < rInf.GetIdx() ) + nCnt = TextFrameIndex(0); // assert??? + else + nCnt = nCnt - rInf.GetIdx(); + nCnt = std::min(nCnt, nLn); + sal_Unicode nChPrev = rInf.GetText()[ sal_Int32(rInf.GetIdx()) ]; - // In case of Pair Kerning the printer influence on the positioning - // grows - const int nMul = m_pPrtFont->GetKerning() != FontKerning::NONE ? 1 : 3; + // In case of Pair Kerning the printer influence on the positioning + // grows + const int nMul = m_pPrtFont->GetKerning() != FontKerning::NONE ? 1 : 3; - for (sal_Int32 i = 1; i < sal_Int32(nCnt); i++) - { - sal_Unicode nCh = rInf.GetText()[sal_Int32(rInf.GetIdx()) + i]; - AdjustKernArray(i, nScrPos, nChPrev, nCh, aScrArray, aKernArray, nMul); - nChPrev = nCh; + for (sal_Int32 i = 1; i < sal_Int32(nCnt); i++) + { + sal_Unicode nCh = rInf.GetText()[sal_Int32(rInf.GetIdx()) + i]; + AdjustKernArray(eGlyphPositioningMode, i, nScrPos, nChPrev, nCh, aScrArray, aKernArray, nMul); + nChPrev = nCh; + } + + aTextSize.setWidth( nScrPos ); } } - - aTextSize.setWidth( nScrPos ); } else { diff --git a/sw/source/ui/config/optpage.cxx b/sw/source/ui/config/optpage.cxx index 30a3c4cac6e4..6cfe9b99d1c6 100644 --- a/sw/source/ui/config/optpage.cxx +++ b/sw/source/ui/config/optpage.cxx @@ -91,6 +91,7 @@ SwContentOptPage::SwContentOptPage(weld::Container* pPage, weld::DialogControlle , m_xVRulerRightCBox(m_xBuilder->weld_check_button("vrulerright")) , m_xVMetric(m_xBuilder->weld_combo_box("vrulercombobox")) , m_xSmoothCBox(m_xBuilder->weld_check_button("smoothscroll")) + , m_xGlyphPosModeLB(m_xBuilder->weld_combo_box("glyphposmode")) , m_xGrfCB(m_xBuilder->weld_check_button("graphics")) , m_xTableCB(m_xBuilder->weld_check_button("tables")) , m_xDrwCB(m_xBuilder->weld_check_button("drawings")) @@ -219,6 +220,7 @@ void SwContentOptPage::Reset(const SfxItemSet* rSet) m_xShowChangesInMargin->set_active(pElemAttr->m_bShowChangesInMargin); m_xFieldHiddenCB->set_active( pElemAttr->m_bFieldHiddenText ); m_xFieldHiddenParaCB->set_active( pElemAttr->m_bShowHiddenPara ); + m_xGlyphPosModeLB->set_active(static_cast<int>(pElemAttr->m_eGlyphPositioningMode)); } m_xMetricLB->set_active(-1); lcl_SelectMetricLB(*m_xMetricLB, SID_ATTR_METRIC, *rSet); @@ -246,6 +248,7 @@ bool SwContentOptPage::FillItemSet(SfxItemSet* rSet) aElem.m_bShowChangesInMargin = m_xShowChangesInMargin->get_active(); aElem.m_bFieldHiddenText = m_xFieldHiddenCB->get_active(); aElem.m_bShowHiddenPara = m_xFieldHiddenParaCB->get_active(); + aElem.m_eGlyphPositioningMode = static_cast<GlyphPositioningMode>(m_xGlyphPosModeLB->get_active()); bool bRet = !pOldAttr || aElem != *pOldAttr; if(bRet) diff --git a/sw/source/uibase/config/cfgitems.cxx b/sw/source/uibase/config/cfgitems.cxx index e32c86e14c52..39f4d43d63bf 100644 --- a/sw/source/uibase/config/cfgitems.cxx +++ b/sw/source/uibase/config/cfgitems.cxx @@ -104,6 +104,7 @@ SwElemItem::SwElemItem() : m_bShowChangesInMargin = m_bFieldHiddenText = m_bShowHiddenPara = false; + m_eGlyphPositioningMode = GlyphPositioningMode::Classic; } SwElemItem::SwElemItem(const SwViewOption& rVOpt) : @@ -123,6 +124,7 @@ SwElemItem::SwElemItem(const SwViewOption& rVOpt) : m_bShowChangesInMargin = rVOpt.IsShowChangesInMargin(); m_bFieldHiddenText = rVOpt.IsShowHiddenField(); m_bShowHiddenPara = rVOpt.IsShowHiddenPara(); + m_eGlyphPositioningMode = rVOpt.GetGlyphPositioningMode(); } SwElemItem* SwElemItem::Clone( SfxItemPool* ) const @@ -149,7 +151,8 @@ bool SwElemItem::operator==( const SfxPoolItem& rAttr ) const m_bTreatSubOutlineLevelsAsContent == rItem.m_bTreatSubOutlineLevelsAsContent && m_bShowChangesInMargin == rItem.m_bShowChangesInMargin && m_bFieldHiddenText == rItem.m_bFieldHiddenText && - m_bShowHiddenPara == rItem.m_bShowHiddenPara); + m_bShowHiddenPara == rItem.m_bShowHiddenPara && + m_eGlyphPositioningMode == rItem.m_eGlyphPositioningMode); } void SwElemItem::FillViewOptions( SwViewOption& rVOpt) const @@ -169,6 +172,7 @@ void SwElemItem::FillViewOptions( SwViewOption& rVOpt) const rVOpt.SetShowChangesInMargin( m_bShowChangesInMargin ); rVOpt.SetShowHiddenField(m_bFieldHiddenText ); rVOpt.SetShowHiddenPara(m_bShowHiddenPara ); + rVOpt.SetGlyphPositioningMode(m_eGlyphPositioningMode); } // CTOR for empty Item diff --git a/sw/source/uibase/config/usrpref.cxx b/sw/source/uibase/config/usrpref.cxx index 0c759a78cf94..e0949660471d 100644 --- a/sw/source/uibase/config/usrpref.cxx +++ b/sw/source/uibase/config/usrpref.cxx @@ -259,20 +259,21 @@ Sequence<OUString> SwLayoutViewConfig::GetPropertyNames() const "Window/HorizontalRulerUnit", // 6 "Window/VerticalRulerUnit", // 7 "Window/SmoothScroll", // 8 - "Zoom/Value", // 9 - "Zoom/Type", //10 - "Other/IsAlignMathObjectsToBaseline", //11 - "Other/MeasureUnit", //12 + "Window/GlyphPositioningMode", // 9 + "Zoom/Value", //10 + "Zoom/Type", //11 + "Other/IsAlignMathObjectsToBaseline", //12 + "Other/MeasureUnit", //13 // below properties are not available in WriterWeb - "Other/TabStop", //13 - "Window/IsVerticalRulerRight", //14 - "ViewLayout/Columns", //15 - "ViewLayout/BookMode", //16 - "Other/IsSquaredPageMode", //17 - "Other/ApplyCharUnit", //18 - "Window/ShowScrollBarTips" //19 + "Other/TabStop", //14 + "Window/IsVerticalRulerRight", //15 + "ViewLayout/Columns", //16 + "ViewLayout/BookMode", //17 + "Other/IsSquaredPageMode", //18 + "Other/ApplyCharUnit", //19 + "Window/ShowScrollBarTips" //20 }; - const int nCount = m_bWeb ? 13 : 20; + const int nCount = m_bWeb ? 14 : 21; Sequence<OUString> aNames(nCount); OUString* pNames = aNames.getArray(); for(int i = 0; i < nCount; i++) @@ -323,17 +324,18 @@ void SwLayoutViewConfig::ImplCommit() rVal <<= static_cast<sal_Int32>(m_rParent.m_eVScrollMetric); // "Window/VerticalRulerUnit" break; case 8: rVal <<= m_rParent.IsSmoothScroll(); break; // "Window/SmoothScroll", - case 9: rVal <<= static_cast<sal_Int32>(m_rParent.GetZoom()); break; // "Zoom/Value", - case 10: rVal <<= static_cast<sal_Int32>(m_rParent.GetZoomType()); break; // "Zoom/Type", - case 11: rVal <<= m_rParent.IsAlignMathObjectsToBaseline(); break; // "Other/IsAlignMathObjectsToBaseline" - case 12: rVal <<= static_cast<sal_Int32>(m_rParent.GetMetric()); break; // "Other/MeasureUnit", - case 13: rVal <<= m_rParent.GetDefTabInMm100(); break;// "Other/TabStop", - case 14: rVal <<= m_rParent.IsVRulerRight(); break; // "Window/IsVerticalRulerRight", - case 15: rVal <<= static_cast<sal_Int32>(m_rParent.GetViewLayoutColumns()); break; // "ViewLayout/Columns", - case 16: rVal <<= m_rParent.IsViewLayoutBookMode(); break; // "ViewLayout/BookMode", - case 17: rVal <<= m_rParent.IsSquaredPageMode(); break; // "Other/IsSquaredPageMode", - case 18: rVal <<= m_rParent.IsApplyCharUnit(); break; // "Other/ApplyCharUnit", - case 19: rVal <<= m_rParent.IsShowScrollBarTips(); break; // "Window/ShowScrollBarTips", + case 9: rVal <<= static_cast<sal_Int32>(m_rParent.GetGlyphPositioningMode()); break; // "Window/GlyphPositioningMode", + case 10: rVal <<= static_cast<sal_Int32>(m_rParent.GetZoom()); break; // "Zoom/Value", + case 11: rVal <<= static_cast<sal_Int32>(m_rParent.GetZoomType()); break; // "Zoom/Type", + case 12: rVal <<= m_rParent.IsAlignMathObjectsToBaseline(); break; // "Other/IsAlignMathObjectsToBaseline" + case 13: rVal <<= static_cast<sal_Int32>(m_rParent.GetMetric()); break; // "Other/MeasureUnit", + case 14: rVal <<= m_rParent.GetDefTabInMm100(); break;// "Other/TabStop", + case 15: rVal <<= m_rParent.IsVRulerRight(); break; // "Window/IsVerticalRulerRight", + case 16: rVal <<= static_cast<sal_Int32>(m_rParent.GetViewLayoutColumns()); break; // "ViewLayout/Columns", + case 17: rVal <<= m_rParent.IsViewLayoutBookMode(); break; // "ViewLayout/BookMode", + case 18: rVal <<= m_rParent.IsSquaredPageMode(); break; // "Other/IsSquaredPageMode", + case 19: rVal <<= m_rParent.IsApplyCharUnit(); break; // "Other/ApplyCharUnit", + case 20: rVal <<= m_rParent.IsShowScrollBarTips(); break; // "Window/ShowScrollBarTips", } } PutProperties(aNames, aValues); @@ -378,17 +380,18 @@ void SwLayoutViewConfig::Load() } break; case 8: m_rParent.SetSmoothScroll(bSet); break;// "Window/SmoothScroll", - case 9: m_rParent.SetZoom( static_cast< sal_uInt16 >(nInt32Val) ); break;// "Zoom/Value", - case 10: m_rParent.SetZoomType( static_cast< SvxZoomType >(nInt32Val) ); break;// "Zoom/Type", - case 11: m_rParent.SetAlignMathObjectsToBaseline(bSet, true); break;// "Other/IsAlignMathObjectsToBaseline" - case 12: m_rParent.SetMetric(static_cast<FieldUnit>(nInt32Val), true); break;// "Other/MeasureUnit", - case 13: m_rParent.SetDefTabInMm100(nInt32Val, true); break;// "Other/TabStop", - case 14: m_rParent.SetVRulerRight(bSet); break;// "Window/IsVerticalRulerRight", - case 15: m_rParent.SetViewLayoutColumns( o3tl::narrowing<sal_uInt16>(nInt32Val) ); break;// "ViewLayout/Columns", - case 16: m_rParent.SetViewLayoutBookMode(bSet); break;// "ViewLayout/BookMode", - case 17: m_rParent.SetDefaultPageMode(bSet,true); break;// "Other/IsSquaredPageMode", - case 18: m_rParent.SetApplyCharUnit(bSet, true); break;// "Other/ApplyUserChar" - case 19: m_rParent.SetShowScrollBarTips(bSet); break;// "Window/ShowScrollBarTips", + case 9: m_rParent.SetGlyphPositioningMode(static_cast<GlyphPositioningMode>(nInt32Val)); break;// "Window/GlyphPositioningMode", + case 10: m_rParent.SetZoom( static_cast< sal_uInt16 >(nInt32Val) ); break;// "Zoom/Value", + case 11: m_rParent.SetZoomType( static_cast< SvxZoomType >(nInt32Val) ); break;// "Zoom/Type", + case 12: m_rParent.SetAlignMathObjectsToBaseline(bSet, true); break;// "Other/IsAlignMathObjectsToBaseline" + case 13: m_rParent.SetMetric(static_cast<FieldUnit>(nInt32Val), true); break;// "Other/MeasureUnit", + case 14: m_rParent.SetDefTabInMm100(nInt32Val, true); break;// "Other/TabStop", + case 15: m_rParent.SetVRulerRight(bSet); break;// "Window/IsVerticalRulerRight", + case 16: m_rParent.SetViewLayoutColumns( o3tl::narrowing<sal_uInt16>(nInt32Val) ); break;// "ViewLayout/Columns", + case 17: m_rParent.SetViewLayoutBookMode(bSet); break;// "ViewLayout/BookMode", + case 18: m_rParent.SetDefaultPageMode(bSet,true); break;// "Other/IsSquaredPageMode", + case 19: m_rParent.SetApplyCharUnit(bSet, true); break;// "Other/ApplyUserChar" + case 20: m_rParent.SetShowScrollBarTips(bSet); break;// "Window/ShowScrollBarTips", } } } diff --git a/sw/source/uibase/config/viewopt.cxx b/sw/source/uibase/config/viewopt.cxx index 66ea4daa05f4..12a7336f62ad 100644 --- a/sw/source/uibase/config/viewopt.cxx +++ b/sw/source/uibase/config/viewopt.cxx @@ -166,6 +166,7 @@ SwViewOption::SwViewOption() : m_nPagePreviewRow( 1 ), m_nPagePreviewCol( 2 ), m_nShadowCursorFillMode( SwFillMode::Tab ), + m_eGlyphPositioningMode( GlyphPositioningMode::Classic ), m_bReadonly(false), m_bStarOneSetting(false), m_bIsPagePreview(false), @@ -253,6 +254,7 @@ SwViewOption::SwViewOption(const SwViewOption& rVOpt) m_aRetouchColor = rVOpt.GetRetoucheColor(); m_sSymbolFont = rVOpt.m_sSymbolFont; m_nShadowCursorFillMode = rVOpt.m_nShadowCursorFillMode; + m_eGlyphPositioningMode = rVOpt.m_eGlyphPositioningMode; m_bStarOneSetting = rVOpt.m_bStarOneSetting; mbBookView = rVOpt.mbBookView; mbBrowseMode = rVOpt.mbBrowseMode; @@ -295,6 +297,7 @@ SwViewOption& SwViewOption::operator=( const SwViewOption &rVOpt ) m_aRetouchColor = rVOpt.GetRetoucheColor(); m_sSymbolFont = rVOpt.m_sSymbolFont; m_nShadowCursorFillMode = rVOpt.m_nShadowCursorFillMode; + m_eGlyphPositioningMode = rVOpt.m_eGlyphPositioningMode; m_bStarOneSetting = rVOpt.m_bStarOneSetting; mbBookView = rVOpt.mbBookView; mbBrowseMode = rVOpt.mbBrowseMode; diff --git a/sw/source/uibase/inc/cfgitems.hxx b/sw/source/uibase/inc/cfgitems.hxx index 34ffa2d24e12..18ffc5c9b40b 100644 --- a/sw/source/uibase/inc/cfgitems.hxx +++ b/sw/source/uibase/inc/cfgitems.hxx @@ -35,6 +35,7 @@ class SwViewShell; class SwViewOption; class SwContentOptPage; class SwShdwCursorOptionsTabPage; +enum class GlyphPositioningMode; enum class SwFillMode; /// Item for settings dialog - document view @@ -84,6 +85,8 @@ class SW_DLLPUBLIC SwElemItem final : public SfxPoolItem bool m_bFieldHiddenText :1; bool m_bShowHiddenPara :1; + GlyphPositioningMode m_eGlyphPositioningMode; + friend class SwContentOptPage; public: diff --git a/sw/source/uibase/inc/optpage.hxx b/sw/source/uibase/inc/optpage.hxx index 99e24ed7f487..e7a6fe34b1fb 100644 --- a/sw/source/uibase/inc/optpage.hxx +++ b/sw/source/uibase/inc/optpage.hxx @@ -42,6 +42,7 @@ class SwContentOptPage final : public SfxTabPage std::unique_ptr<weld::CheckButton> m_xVRulerRightCBox; std::unique_ptr<weld::ComboBox> m_xVMetric; std::unique_ptr<weld::CheckButton> m_xSmoothCBox; + std::unique_ptr<weld::ComboBox> m_xGlyphPosModeLB; std::unique_ptr<weld::CheckButton> m_xGrfCB; std::unique_ptr<weld::CheckButton> m_xTableCB; diff --git a/sw/uiconfig/swriter/ui/viewoptionspage.ui b/sw/uiconfig/swriter/ui/viewoptionspage.ui index 69dd85ed86ab..d8ca6ed7495c 100644 --- a/sw/uiconfig/swriter/ui/viewoptionspage.ui +++ b/sw/uiconfig/swriter/ui/viewoptionspage.ui @@ -357,7 +357,7 @@ <property name="label-xalign">0</property> <property name="shadow-type">none</property> <child> - <!-- n-columns=1 n-rows=2 --> + <!-- n-columns=1 n-rows=3 --> <object class="GtkGrid" id="grid4"> <property name="visible">True</property> <property name="can-focus">False</property> @@ -488,6 +488,50 @@ <property name="top-attach">0</property> </packing> </child> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="spacing">12</property> + <child> + <object class="GtkLabel" id="glyphposlabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="viewoptionspage|glyphposlabel">Glyph positioning:</property> + <property name="use-underline">True</property> + <property name="mnemonic-widget">glyphposmode</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkComboBoxText" id="glyphposmode"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="hexpand">True</property> + <property name="active">0</property> + <items> + <item translatable="yes" context="viewoptionspage|glyphposmode">Classic</item> + <item translatable="yes" context="viewoptionspage|glyphposmode">ClassicInspired</item> + <item translatable="yes" context="viewoptionspage|glyphposmode">Layout</item> + <item translatable="yes" context="viewoptionspage|glyphposmode">Readability</item> + </items> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left-attach">0</property> + <property name="top-attach">2</property> + </packing> + </child> </object> </child> <child type="label"> @@ -574,7 +618,7 @@ <property name="label-xalign">0</property> <property name="shadow-type">none</property> <child> - <!-- n-columns=3 n-rows=3 --> + <!-- n-columns=1 n-rows=2 --> <object class="GtkGrid"> <property name="visible">True</property> <property name="can-focus">False</property> @@ -621,27 +665,6 @@ <property name="top-attach">1</property> </packing> </child> - <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> </object> </child> <child type="label"> @@ -684,6 +707,7 @@ <widgets> <widget name="vruler"/> <widget name="hruler"/> + <widget name="glyphposlabel"/> <widget name="measureunitlabel"/> </widgets> </object> |