officecfg/registry/schema/org/openoffice/Office/Writer.xcs | 8 officecfg/registry/schema/org/openoffice/Office/WriterWeb.xcs | 8 sw/inc/viewopt.hxx | 14 - sw/source/core/inc/scriptinfo.hxx | 10 sw/source/core/text/itradj.cxx | 6 sw/source/core/text/porlay.cxx | 10 sw/source/core/text/portxt.cxx | 4 sw/source/core/txtnode/fntcache.cxx | 128 ---------- sw/source/ui/config/optpage.cxx | 3 sw/source/uibase/config/cfgitems.cxx | 6 sw/source/uibase/config/usrpref.cxx | 77 ++---- sw/source/uibase/config/viewopt.cxx | 3 sw/source/uibase/inc/cfgitems.hxx | 3 sw/source/uibase/inc/optpage.hxx | 1 sw/uiconfig/swriter/ui/viewoptionspage.ui | 46 --- 15 files changed, 61 insertions(+), 266 deletions(-)
New commits: commit 4ed26badfd6fd9190cb6e54078b41eb38cb37dca Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Fri Jan 14 14:19:45 2022 +0000 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Thu Jan 20 21:15:25 2022 +0100 use resolution independent positions for writer's screen-rendering in favor of pushing it down to the text renderers and leave it to them to optimized as best they can the the rendering to make it look as well as possible. the separate ScrArray can then be dropped as a consequence Change-Id: Ic0849c091a36e1a90453771b1c91b8ff706b679e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128418 Tested-by: Caolán McNamara <caol...@redhat.com> Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/officecfg/registry/schema/org/openoffice/Office/Writer.xcs b/officecfg/registry/schema/org/openoffice/Office/Writer.xcs index dd96056b4f67..89c63d849cf7 100644 --- a/officecfg/registry/schema/org/openoffice/Office/Writer.xcs +++ b/officecfg/registry/schema/org/openoffice/Office/Writer.xcs @@ -1459,14 +1459,6 @@ </info> <value>false</value> </prop> - <prop oor:name="GlyphPositioningMode" oor:type="xs:int" oor:nillable="false"> - <!-- UIHints: Tools - Option - Text document - Layout - [Section] Window --> - <info> - <desc>Specifies the Glyph Positioning Mode.</desc> - <label>Glyph Positioning Mode</label> - </info> - <value>2</value> - </prop> </group> <group oor:name="Other"> <info> diff --git a/officecfg/registry/schema/org/openoffice/Office/WriterWeb.xcs b/officecfg/registry/schema/org/openoffice/Office/WriterWeb.xcs index b4fdab4b8890..8d633caae4f0 100644 --- a/officecfg/registry/schema/org/openoffice/Office/WriterWeb.xcs +++ b/officecfg/registry/schema/org/openoffice/Office/WriterWeb.xcs @@ -340,14 +340,6 @@ </info> <value>false</value> </prop> - <prop oor:name="GlyphPositioningMode" oor:type="xs:int" oor:nillable="false"> - <!-- UIHints: Tools - Option - HTML-Document - Layout - [Section] Window --> - <info> - <desc>Specifies the Glyph Positioning Mode.</desc> - <label>Glyph Positioning Mode</label> - </info> - <value>2</value> - </prop> </group> <group oor:name="Other"> <info> diff --git a/sw/inc/viewopt.hxx b/sw/inc/viewopt.hxx index a6ac48b31581..e8a1c299b496 100644 --- a/sw/inc/viewopt.hxx +++ b/sw/inc/viewopt.hxx @@ -126,12 +126,6 @@ namespace o3tl { template<> struct typed_flags<ViewOptFlags> : is_typed_flags<ViewOptFlags, 0x01ff> {}; } -enum class GlyphPositioningMode { - Classic, - Layout, - LayoutAndMatchRender -}; - class SW_DLLPUBLIC SwViewOption { static Color s_aDocColor; // color of document boundaries @@ -169,7 +163,6 @@ 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. @@ -433,12 +426,6 @@ 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) @@ -710,7 +697,6 @@ 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/inc/scriptinfo.hxx b/sw/source/core/inc/scriptinfo.hxx index cd479034ed06..cfe9ef3e55fb 100644 --- a/sw/source/core/inc/scriptinfo.hxx +++ b/sw/source/core/inc/scriptinfo.hxx @@ -281,8 +281,6 @@ public: positions in the kerning array. @param pKernArray The printers kerning array. Optional. - @param pScrArray - The screen kerning array. Optional. @param nStt Start referring to the paragraph. @param nLen @@ -291,7 +289,7 @@ public: The value which has to be added to a kashida opportunity. @return The number of kashida opportunities in the given range */ - sal_Int32 KashidaJustify( sal_Int32* pKernArray, sal_Int32* pScrArray, + sal_Int32 KashidaJustify( sal_Int32* pKernArray, TextFrameIndex nStt, TextFrameIndex nLen, tools::Long nSpaceAdd = 0) const; /** Clears array of kashidas marked as invalid @@ -354,8 +352,6 @@ public: The String @param pKernArray The printers kerning array. Optional. - @param pScrArray - The screen kerning array. Optional. @param nIdx Start referring to the paragraph. @param nLen @@ -365,7 +361,7 @@ public: @return The number of extra spaces in the given range */ static TextFrameIndex ThaiJustify( const OUString& rText, sal_Int32* pKernArray, - sal_Int32* pScrArray, TextFrameIndex nIdx, + TextFrameIndex nIdx, TextFrameIndex nLen, TextFrameIndex nNumberOfBlanks = TextFrameIndex(0), tools::Long nSpaceAdd = 0 ); @@ -374,7 +370,7 @@ public: TextFrameIndex nPos, TextFrameIndex nEnd, LanguageType aLang); static void CJKJustify( const OUString& rText, sal_Int32* pKernArray, - sal_Int32* pScrArray, TextFrameIndex nStt, + TextFrameIndex nStt, TextFrameIndex nLen, LanguageType aLang, tools::Long nSpaceAdd, bool bIsSpaceStop ); diff --git a/sw/source/core/text/itradj.cxx b/sw/source/core/text/itradj.cxx index d664602bf3ce..a952ce7649c2 100644 --- a/sw/source/core/text/itradj.cxx +++ b/sw/source/core/text/itradj.cxx @@ -122,7 +122,7 @@ static bool lcl_CheckKashidaPositions( SwScriptInfo& rSI, SwTextSizeInfo& rInf, // total number of kashida positions, or the number of kashida positions after some positions // have been dropped. // Here we want the clean total, which is OK: We have called ClearKashidaInvalid() before. - rKashidas = rSI.KashidaJustify ( nullptr, nullptr, rItr.GetStart(), rItr.GetLength() ); + rKashidas = rSI.KashidaJustify(nullptr, rItr.GetStart(), rItr.GetLength()); if (rKashidas <= 0) // nothing to do return true; @@ -147,7 +147,7 @@ static bool lcl_CheckKashidaPositions( SwScriptInfo& rSI, SwTextSizeInfo& rInf, if (nNext == TextFrameIndex(COMPLETE_STRING) || nNext > nEnd) nNext = nEnd; - sal_Int32 nKashidasInAttr = rSI.KashidaJustify ( nullptr, nullptr, nIdx, nNext - nIdx ); + sal_Int32 nKashidasInAttr = rSI.KashidaJustify(nullptr, nIdx, nNext - nIdx); if (nKashidasInAttr > 0) { // Kashida glyph looks suspicious, skip Kashida justification @@ -212,7 +212,7 @@ static bool lcl_CheckKashidaWidth ( SwScriptInfo& rSI, SwTextSizeInfo& rInf, SwT if (nNext == TextFrameIndex(COMPLETE_STRING) || nNext > nEnd) nNext = nEnd; - sal_Int32 nKashidasInAttr = rSI.KashidaJustify ( nullptr, nullptr, nIdx, nNext - nIdx ); + sal_Int32 nKashidasInAttr = rSI.KashidaJustify(nullptr, nIdx, nNext - nIdx); tools::Long nFontMinKashida = rInf.GetOut()->GetMinKashida(); if ( nFontMinKashida && nKashidasInAttr > 0 && SwScriptInfo::IsArabicText( rInf.GetText(), nIdx, nNext - nIdx ) ) diff --git a/sw/source/core/text/porlay.cxx b/sw/source/core/text/porlay.cxx index 3db5d2ab0ac3..bd9d6a0e143c 100644 --- a/sw/source/core/text/porlay.cxx +++ b/sw/source/core/text/porlay.cxx @@ -2183,7 +2183,6 @@ tools::Long SwScriptInfo::Compress(sal_Int32* pKernArray, TextFrameIndex nIdx, T // have been dropped, depending on the state of the m_KashidaInvalid set. sal_Int32 SwScriptInfo::KashidaJustify( sal_Int32* pKernArray, - sal_Int32* pScrArray, TextFrameIndex const nStt, TextFrameIndex const nLen, tools::Long nSpaceAdd ) const @@ -2253,8 +2252,6 @@ sal_Int32 SwScriptInfo::KashidaJustify( sal_Int32* pKernArray, while ( nArrayPos < nArrayEnd ) { pKernArray[ sal_Int32(nArrayPos) ] += nKashAdd; - if ( pScrArray ) - pScrArray[ sal_Int32(nArrayPos) ] += nKashAdd; ++nArrayPos; } nKashAdd += nSpaceAdd; @@ -2442,7 +2439,7 @@ void SwScriptInfo::MarkKashidasInvalid(sal_Int32 const nCnt, } TextFrameIndex SwScriptInfo::ThaiJustify( const OUString& rText, sal_Int32* pKernArray, - sal_Int32* pScrArray, TextFrameIndex const nStt, + TextFrameIndex const nStt, TextFrameIndex const nLen, TextFrameIndex nNumberOfBlanks, tools::Long nSpaceAdd ) @@ -2474,7 +2471,6 @@ TextFrameIndex SwScriptInfo::ThaiJustify( const OUString& rText, sal_Int32* pKer } if ( pKernArray ) pKernArray[ nI ] += nSpaceSum; - if ( pScrArray ) pScrArray[ nI ] += nSpaceSum; } return nCnt; @@ -2775,7 +2771,7 @@ TextFrameIndex SwScriptInfo::CountCJKCharacters(const OUString &rText, } void SwScriptInfo::CJKJustify( const OUString& rText, sal_Int32* pKernArray, - sal_Int32* pScrArray, TextFrameIndex const nStt, + TextFrameIndex const nStt, TextFrameIndex const nLen, LanguageType aLang, tools::Long nSpaceAdd, bool bIsSpaceStop ) { @@ -2798,8 +2794,6 @@ void SwScriptInfo::CJKJustify( const OUString& rText, sal_Int32* pKernArray, nSpaceSum += nSpaceAdd; } pKernArray[ nI ] += nSpaceSum; - if ( pScrArray ) - pScrArray[ nI ] += nSpaceSum; } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/text/portxt.cxx b/sw/source/core/text/portxt.cxx index 7def7badcc7a..219036aa834d 100644 --- a/sw/source/core/text/portxt.cxx +++ b/sw/source/core/text/portxt.cxx @@ -113,7 +113,7 @@ static TextFrameIndex lcl_AddSpace(const SwTextSizeInfo &rInf, { if ( SwScriptInfo::IsArabicText( *pStr, nPos, nEnd - nPos ) && pSI->CountKashida() ) { - const sal_Int32 nKashRes = pSI->KashidaJustify( nullptr, nullptr, nPos, nEnd - nPos ); + const sal_Int32 nKashRes = pSI->KashidaJustify(nullptr, nPos, nEnd - nPos); // i60591: need to check result of KashidaJustify // determine if kashida justification is applicable if (nKashRes != -1) @@ -129,7 +129,7 @@ static TextFrameIndex lcl_AddSpace(const SwTextSizeInfo &rInf, if ( LANGUAGE_THAI == aLang ) { - nCnt = SwScriptInfo::ThaiJustify( *pStr, nullptr, nullptr, nPos, nEnd - nPos ); + nCnt = SwScriptInfo::ThaiJustify(*pStr, nullptr, nPos, nEnd - nPos); const SwLinePortion* pPor = rPor.GetNextPortion(); if ( pPor && ( pPor->IsKernPortion() || diff --git a/sw/source/core/txtnode/fntcache.cxx b/sw/source/core/txtnode/fntcache.cxx index 2c5f81a63390..b99408177d0a 100644 --- a/sw/source/core/txtnode/fntcache.cxx +++ b/sw/source/core/txtnode/fntcache.cxx @@ -855,50 +855,6 @@ static void lcl_DrawLineForWrongListData( rInf.GetOut().Pop(); } -namespace -{ - 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]; - switch (eGlyphPositioningMode) - { - case GlyphPositioningMode::Layout: // <- glyph positioning stable during editing, - // but at ~90% screen zoom rendering will - // start to show kerning problems - case GlyphPositioningMode::LayoutAndMatchRender: // <- glyph positioning stable during editing, - // and should render nicely at sane zoom levels - rScrPos = rKernArray[i - 1] + nScr; - // just accept the print layout positions, this is what editeng does - // https://freddie.witherden.org/pages/font-rasterisation/#application-requirements - break; - case GlyphPositioningMode::Classic: // <- layout unstable during editing, fairly arbitrary glyph - // positioning depends on zoom - { - // https://wiki.openoffice.org/wiki/Writer/WYSIWYG - 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; - } - } - rKernArray[i - 1] = rScrPos - nScr; - break; - } - } - } -} - void SwFntObj::GetTextArray(const OutputDevice& rDevice, const OUString& rStr, std::vector<sal_Int32>& rDXAry, sal_Int32 nIndex, sal_Int32 nLen, bool bCaching) { @@ -1393,7 +1349,7 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) if (!MsLangId::isKorean(aLang)) { - SwScriptInfo::CJKJustify( rInf.GetText(), aKernArray.data(), nullptr, + SwScriptInfo::CJKJustify( rInf.GetText(), aKernArray.data(), rInf.GetIdx(), rInf.GetLen(), aLang, nSpaceAdd, rInf.IsSpaceStop() ); bSpecialJust = true; @@ -1407,7 +1363,7 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) if ( SwScriptInfo::IsArabicText( rInf.GetText(), rInf.GetIdx(), rInf.GetLen() ) ) { if ( pSI && pSI->CountKashida() && - pSI->KashidaJustify( aKernArray.data(), nullptr, rInf.GetIdx(), + pSI->KashidaJustify( aKernArray.data(), rInf.GetIdx(), rInf.GetLen(), nSpaceAdd ) != -1 ) { bSpecialJust = true; @@ -1425,7 +1381,7 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) { // Use rInf.GetSpace() because it has more precision than // nSpaceAdd: - SwScriptInfo::ThaiJustify( rInf.GetText(), aKernArray.data(), nullptr, + SwScriptInfo::ThaiJustify( rInf.GetText(), aKernArray.data(), rInf.GetIdx(), rInf.GetLen(), rInf.GetNumberOfBlanks(), rInf.GetSpace() ); @@ -1534,11 +1490,9 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) else { - GlyphPositioningMode eGlyphPositioningMode = rInf.GetShell()->GetViewOptions()->GetGlyphPositioningMode(); const bool bOrigTextRenderModeForResolutionIndependentLayout(rInf.GetOut().GetTextRenderModeForResolutionIndependentLayout()); - // set text render mode to suit use of resolution independent text layout - rInf.GetOut().SetTextRenderModeForResolutionIndependentLayout(eGlyphPositioningMode == GlyphPositioningMode::LayoutAndMatchRender); + rInf.GetOut().SetTextRenderModeForResolutionIndependentLayout(true); const OUString* pStr = &rInf.GetText(); @@ -1550,11 +1504,6 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) std::vector<sal_Int32> aKernArray; CreateScrFont( *rInf.GetShell(), rInf.GetOut() ); - // get screen array - std::vector<sal_Int32> aScrArray; - GetTextArray(rInf.GetOut(), rInf.GetText(), aScrArray, - sal_Int32(rInf.GetIdx()), sal_Int32(rInf.GetLen()), true); - // OLE: no printer available // OSL_ENSURE( pPrinter, "DrawText needs pPrinter" ) if ( m_pPrinter ) @@ -1570,12 +1519,8 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) } else { -#ifndef NDEBUG GetTextArray(rInf.GetOut(), rInf.GetText(), aKernArray, - sal_Int32(rInf.GetIdx()), sal_Int32(rInf.GetLen()), false); - assert(aKernArray == aScrArray); -#endif - aKernArray = aScrArray; + sal_Int32(rInf.GetIdx()), sal_Int32(rInf.GetLen()), true); } // Modify Printer and ScreenArrays for special justifications @@ -1593,10 +1538,6 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) pSI && pSI->CountCompChg() && lcl_IsMonoSpaceFont( rInf.GetOut() ) ) { - Point aTmpPos( aTextOriginPos ); - pSI->Compress( aScrArray.data(), rInf.GetIdx(), rInf.GetLen(), - rInf.GetKanaComp(), - o3tl::narrowing<sal_uInt16>(m_aFont.GetFontSize().Height()), lcl_IsFullstopCentered( rInf.GetOut() ), &aTmpPos ); pSI->Compress( aKernArray.data(), rInf.GetIdx(), rInf.GetLen(), rInf.GetKanaComp(), o3tl::narrowing<sal_uInt16>(m_aFont.GetFontSize().Height()), lcl_IsFullstopCentered( rInf.GetOut() ), &aTextOriginPos ); @@ -1609,7 +1550,7 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) if (!MsLangId::isKorean(aLang)) { - SwScriptInfo::CJKJustify( rInf.GetText(), aKernArray.data(), aScrArray.data(), + SwScriptInfo::CJKJustify( rInf.GetText(), aKernArray.data(), rInf.GetIdx(), rInf.GetLen(), aLang, nSpaceAdd, rInf.IsSpaceStop() ); nSpaceAdd = 0; @@ -1622,7 +1563,7 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) if ( SwScriptInfo::IsArabicText( rInf.GetText(), rInf.GetIdx(), rInf.GetLen() ) ) { if ( pSI && pSI->CountKashida() && - pSI->KashidaJustify( aKernArray.data(), aScrArray.data(), rInf.GetIdx(), + pSI->KashidaJustify( aKernArray.data(), rInf.GetIdx(), rInf.GetLen(), nSpaceAdd ) != -1 ) nSpaceAdd = 0; else @@ -1638,7 +1579,7 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) if ( LANGUAGE_THAI == aLang ) { SwScriptInfo::ThaiJustify( rInf.GetText(), aKernArray.data(), - aScrArray.data(), rInf.GetIdx(), + rInf.GetIdx(), rInf.GetLen(), rInf.GetNumberOfBlanks(), rInf.GetSpace() ); @@ -1649,8 +1590,6 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) } } - tools::Long nScrPos = aScrArray[ 0 ]; - if( bBullet ) { // !!! HACK !!! @@ -1722,10 +1661,6 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) } else { - // In case of Pair Kerning the printer influence on the positioning - // grows - const int nMul = m_pPrtFont->GetKerning() != FontKerning::NONE ? 1 : 3; - // nSpaceSum contains the sum of the intermediate space distributed // among Spaces by the Justification. // The Spaces themselves will be positioned in the middle of the @@ -1745,7 +1680,6 @@ 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(eGlyphPositioningMode, i, nScrPos, cChPrev, nCh, aScrArray, aKernArray, nMul); // Apply SpaceSum if (cChPrev == CH_BLANK) @@ -2055,45 +1989,7 @@ Size SwFntObj::GetTextSize( SwDrawTextInfo& rInf ) else rInf.SetKanaDiff( 0 ); - if ( rInf.GetKanaDiff() ) - { - aTextSize.setWidth(aKernArray[sal_Int32(nLn) - 1]); - } - else - { - GlyphPositioningMode eGlyphPositioningMode = rInf.GetShell()->GetViewOptions()->GetGlyphPositioningMode(); - if (eGlyphPositioningMode == GlyphPositioningMode::Classic) - { - std::vector<sal_Int32> aScrArray; - GetTextArray(rInf.GetOut(), rInf.GetText(), aScrArray, - sal_Int32(rInf.GetIdx()), sal_Int32(rInf.GetLen()), false); - 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; - - 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 ); - } - else - { - aTextSize.setWidth(aKernArray[sal_Int32(nLn) - 1]); - } - } + aTextSize.setWidth(aKernArray[sal_Int32(nLn) - 1]); } else { @@ -2177,7 +2073,7 @@ TextFrameIndex SwFntObj::GetModelPositionForViewPoint(SwDrawTextInfo &rInf) if (!MsLangId::isKorean(aLang)) { - SwScriptInfo::CJKJustify( rInf.GetText(), aKernArray.data(), nullptr, + SwScriptInfo::CJKJustify( rInf.GetText(), aKernArray.data(), rInf.GetIdx(), rInf.GetLen(), aLang, nSpaceAdd, rInf.IsSpaceStop() ); nSpaceAdd = 0; @@ -2191,7 +2087,7 @@ TextFrameIndex SwFntObj::GetModelPositionForViewPoint(SwDrawTextInfo &rInf) if ( SwScriptInfo::IsArabicText( rInf.GetText(), rInf.GetIdx(), rInf.GetLen() ) ) { if ( pSI && pSI->CountKashida() && - pSI->KashidaJustify( aKernArray.data(), nullptr, rInf.GetIdx(), rInf.GetLen(), + pSI->KashidaJustify( aKernArray.data(), rInf.GetIdx(), rInf.GetLen(), nSpaceAdd ) != -1 ) nSpaceAdd = 0; } @@ -2204,7 +2100,7 @@ TextFrameIndex SwFntObj::GetModelPositionForViewPoint(SwDrawTextInfo &rInf) if ( LANGUAGE_THAI == aLang ) { - SwScriptInfo::ThaiJustify( rInf.GetText(), aKernArray.data(), nullptr, + SwScriptInfo::ThaiJustify( rInf.GetText(), aKernArray.data(), rInf.GetIdx(), rInf.GetLen(), rInf.GetNumberOfBlanks(), rInf.GetSpace() ); diff --git a/sw/source/ui/config/optpage.cxx b/sw/source/ui/config/optpage.cxx index 6cfe9b99d1c6..30a3c4cac6e4 100644 --- a/sw/source/ui/config/optpage.cxx +++ b/sw/source/ui/config/optpage.cxx @@ -91,7 +91,6 @@ 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")) @@ -220,7 +219,6 @@ 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); @@ -248,7 +246,6 @@ 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 39f4d43d63bf..e32c86e14c52 100644 --- a/sw/source/uibase/config/cfgitems.cxx +++ b/sw/source/uibase/config/cfgitems.cxx @@ -104,7 +104,6 @@ SwElemItem::SwElemItem() : m_bShowChangesInMargin = m_bFieldHiddenText = m_bShowHiddenPara = false; - m_eGlyphPositioningMode = GlyphPositioningMode::Classic; } SwElemItem::SwElemItem(const SwViewOption& rVOpt) : @@ -124,7 +123,6 @@ 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 @@ -151,8 +149,7 @@ 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_eGlyphPositioningMode == rItem.m_eGlyphPositioningMode); + m_bShowHiddenPara == rItem.m_bShowHiddenPara); } void SwElemItem::FillViewOptions( SwViewOption& rVOpt) const @@ -172,7 +169,6 @@ 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 ed33926492eb..45590d5e0b8a 100644 --- a/sw/source/uibase/config/usrpref.cxx +++ b/sw/source/uibase/config/usrpref.cxx @@ -259,22 +259,21 @@ Sequence<OUString> SwLayoutViewConfig::GetPropertyNames() const "Window/HorizontalRulerUnit", // 6 "Window/VerticalRulerUnit", // 7 "Window/SmoothScroll", // 8 - "Window/GlyphPositioningMode", // 9 - "Zoom/Value", //10 - "Zoom/Type", //11 - "Other/IsAlignMathObjectsToBaseline", //12 - "Other/MeasureUnit", //13 + "Zoom/Value", // 9 + "Zoom/Type", //10 + "Other/IsAlignMathObjectsToBaseline", //11 + "Other/MeasureUnit", //12 // below properties are not available in WriterWeb - "Other/TabStop", //14 - "Window/IsVerticalRulerRight", //15 - "ViewLayout/Columns", //16 - "ViewLayout/BookMode", //17 - "Other/IsSquaredPageMode", //18 - "Other/ApplyCharUnit", //19 - "Window/ShowScrollBarTips", //20 - "ViewLayout/HideWhitespace", //21 + "Other/TabStop", //13 + "Window/IsVerticalRulerRight", //14 + "ViewLayout/Columns", //15 + "ViewLayout/BookMode", //16 + "Other/IsSquaredPageMode", //17 + "Other/ApplyCharUnit", //18 + "Window/ShowScrollBarTips", //19 + "ViewLayout/HideWhitespace", //20 }; - const int nCount = m_bWeb ? 14 : 22; + const int nCount = m_bWeb ? 13 : 21; Sequence<OUString> aNames(nCount); OUString* pNames = aNames.getArray(); for(int i = 0; i < nCount; i++) @@ -325,19 +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.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", - case 21: rVal <<= m_rParent.IsHideWhitespaceMode(); break; // "ViewLayout/HideWhitespace" + 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 20: rVal <<= m_rParent.IsHideWhitespaceMode(); break; // "ViewLayout/HideWhitespace" } } PutProperties(aNames, aValues); @@ -382,19 +380,18 @@ void SwLayoutViewConfig::Load() } break; case 8: m_rParent.SetSmoothScroll(bSet); break;// "Window/SmoothScroll", - 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", - case 21: m_rParent.SetHideWhitespaceMode(bSet); break;// "ViewLayout/HideWhitespace" + 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 29: m_rParent.SetShowScrollBarTips(bSet); break;// "Window/ShowScrollBarTips", + case 20: m_rParent.SetHideWhitespaceMode(bSet); break;// "ViewLayout/HideWhitespace" } } } diff --git a/sw/source/uibase/config/viewopt.cxx b/sw/source/uibase/config/viewopt.cxx index 12a7336f62ad..66ea4daa05f4 100644 --- a/sw/source/uibase/config/viewopt.cxx +++ b/sw/source/uibase/config/viewopt.cxx @@ -166,7 +166,6 @@ 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), @@ -254,7 +253,6 @@ 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; @@ -297,7 +295,6 @@ 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 18ffc5c9b40b..34ffa2d24e12 100644 --- a/sw/source/uibase/inc/cfgitems.hxx +++ b/sw/source/uibase/inc/cfgitems.hxx @@ -35,7 +35,6 @@ class SwViewShell; class SwViewOption; class SwContentOptPage; class SwShdwCursorOptionsTabPage; -enum class GlyphPositioningMode; enum class SwFillMode; /// Item for settings dialog - document view @@ -85,8 +84,6 @@ 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 e7a6fe34b1fb..99e24ed7f487 100644 --- a/sw/source/uibase/inc/optpage.hxx +++ b/sw/source/uibase/inc/optpage.hxx @@ -42,7 +42,6 @@ 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 e74d9d270b39..b3e071bf04ec 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=3 --> + <!-- n-columns=1 n-rows=2 --> <object class="GtkGrid" id="grid4"> <property name="visible">True</property> <property name="can-focus">False</property> @@ -494,49 +494,6 @@ <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">Layout</item> - <item translatable="yes" context="viewoptionspage|glyphposmode">Layout & Match Render</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"> @@ -714,7 +671,6 @@ <widgets> <widget name="vruler"/> <widget name="hruler"/> - <widget name="glyphposlabel"/> <widget name="measureunitlabel"/> </widgets> </object>