summaryrefslogtreecommitdiff
path: root/starmath
diff options
context:
space:
mode:
authordante <dante19031999@gmail.com>2021-04-25 00:26:38 +0200
committerMike Kaganski <mike.kaganski@collabora.com>2021-05-15 08:15:53 +0200
commit7beb507edbf94627c639483175be730f38f90dcd (patch)
tree115104e08d206986289459d361165e4449b66a20 /starmath
parentcb63fad5a1967d20d067cd4ee2c8ddc7ba8ff1ea (diff)
tdf#130654 editable smeditwindow zoom
Setting only accessible from advanced configuration. Access: org.openoffice.Office.Math.smeditwindowzoom Note that the change won't take immediate effect. LibreOffice has to be restarted to the change to take effect. Math configuration entries are not synced correctly. More detailed explanation can be fond in tdf#132145. Change-Id: I0017ddda73ab2916c6ad1fa238265d57a2a3020e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114616 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'starmath')
-rw-r--r--starmath/Library_sm.mk1
-rw-r--r--starmath/inc/cfgitem.hxx2
-rw-r--r--starmath/inc/document.hxx5
-rw-r--r--starmath/inc/smediteng.hxx60
-rw-r--r--starmath/inc/starmath.hrc1
-rw-r--r--starmath/source/cfgitem.cxx33
-rw-r--r--starmath/source/document.cxx84
-rw-r--r--starmath/source/edit.cxx14
-rw-r--r--starmath/source/smediteng.cxx155
9 files changed, 273 insertions, 82 deletions
diff --git a/starmath/Library_sm.mk b/starmath/Library_sm.mk
index d5d3657f2120..297cca650684 100644
--- a/starmath/Library_sm.mk
+++ b/starmath/Library_sm.mk
@@ -75,6 +75,7 @@ $(eval $(call gb_Library_add_exception_objects,sm,\
starmath/source/dialog \
starmath/source/document \
starmath/source/edit \
+ starmath/source/smediteng \
starmath/source/format \
starmath/source/mathtype \
starmath/source/node \
diff --git a/starmath/inc/cfgitem.hxx b/starmath/inc/cfgitem.hxx
index 9e1438b68c38..6342d740c35c 100644
--- a/starmath/inc/cfgitem.hxx
+++ b/starmath/inc/cfgitem.hxx
@@ -162,6 +162,8 @@ public:
void SetPrintSize(SmPrintSize eSize);
sal_uInt16 GetPrintZoomFactor() const;
void SetPrintZoomFactor(sal_uInt16 nVal);
+ sal_uInt16 GetSmEditWindowZoomFactor() const;
+ void SetSmEditWindowZoomFactor(sal_uInt16 nVal);
bool IsSaveOnlyUsedSymbols() const;
void SetSaveOnlyUsedSymbols(bool bVal);
diff --git a/starmath/inc/document.hxx b/starmath/inc/document.hxx
index 2c3a9183bf87..588a8d93f1b0 100644
--- a/starmath/inc/document.hxx
+++ b/starmath/inc/document.hxx
@@ -58,6 +58,7 @@ namespace oox::formulaimport { class XmlStream; }
class SmDocShell;
class EditEngine;
+class SmEditEngine;
class SmPrinterAccess
{
@@ -82,7 +83,7 @@ class SM_DLLPUBLIC SmDocShell : public SfxObjectShell, public SfxListener
SvtLinguOptions maLinguOptions;
std::unique_ptr<SmTableNode> mpTree;
rtl::Reference<SfxItemPool> mpEditEngineItemPool;
- std::unique_ptr<EditEngine> mpEditEngine;
+ std::unique_ptr<SmEditEngine> mpEditEngine;
VclPtr<SfxPrinter> mpPrinter; //q.v. comment to SmPrinter Access!
VclPtr<Printer> mpTmpPrinter; //ditto
sal_uInt16 mnModifyCount;
@@ -210,7 +211,7 @@ public:
void writeFormulaRtf(OStringBuffer& rBuffer, rtl_TextEncoding nEncoding);
void readFormulaOoxml( oox::formulaimport::XmlStream& stream );
- void UpdateEditEngineDefaultFonts(const Color& aTextColor);
+ void UpdateEditEngineDefaultFonts();
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/starmath/inc/smediteng.hxx b/starmath/inc/smediteng.hxx
new file mode 100644
index 000000000000..c3d3d576467e
--- /dev/null
+++ b/starmath/inc/smediteng.hxx
@@ -0,0 +1,60 @@
+/* This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#pragma once
+
+#include <editeng/editeng.hxx>
+#include <editeng/fontitem.hxx>
+#include <unotools/lingucfg.hxx>
+
+class SmEditEngine : public EditEngine
+{
+public:
+ SmEditEngine(SfxItemPool* pItemPool);
+ SmEditEngine(const SmEditEngine&) = delete;
+
+public:
+ /**
+ * Runs checkZoom and if true runs updateZoom
+ */
+ void executeZoom(EditView* pEditView = nullptr);
+
+ /**
+ * Sets up default font parameters for the item pool.
+ */
+ static void setSmItemPool(SfxItemPool* mpItemPool, const SvtLinguOptions& maLangOptions);
+
+ // Deal with text scaling
+private:
+ sal_Int32 m_nOldZoom;
+ sal_Int32 m_nNewZoom;
+ sal_Int32 m_nDefaultFontSize;
+
+ /**
+ * Checks if the zoom of smeditwindow has changed.
+ * m_nNewZoom is updated.
+ * @return zoom has changed
+ */
+ bool checkZoom();
+
+ /**
+ * Updates the zoom of smeditwindow.
+ * m_nOldZoom is set to m_nNewZoom.
+ */
+
+ void updateZoom();
+
+ // Gather information for more complex tasks
+private:
+ ESelection m_aAllSelection;
+
+ /**
+ * Finds the ESelection wich contains all the text.
+ */
+ void updateAllESelection();
+};
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/starmath/inc/starmath.hrc b/starmath/inc/starmath.hrc
index 5001b29b0f51..c566783156ca 100644
--- a/starmath/inc/starmath.hrc
+++ b/starmath/inc/starmath.hrc
@@ -67,6 +67,7 @@
#define SID_SAVE_ONLY_USED_SYMBOLS (SID_SMA_START + 125)
#define SID_ELEMENTSDOCKINGWINDOW (SID_SMA_START + 126)
#define SID_AUTO_CLOSE_BRACKETS (SID_SMA_START + 127)
+#define SID_SMEDITWINDOWZOOM (SID_SMA_START + 129)
#define SID_DEFAULT_SM_SYNTAX_VERSION (SID_SMA_START + 130)
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/starmath/source/cfgitem.cxx b/starmath/source/cfgitem.cxx
index b4c950233ac4..9b86a972a877 100644
--- a/starmath/source/cfgitem.cxx
+++ b/starmath/source/cfgitem.cxx
@@ -121,6 +121,7 @@ struct SmCfgOther
{
SmPrintSize ePrintSize;
sal_uInt16 nPrintZoomFactor;
+ sal_uInt16 nSmEditWindowZoomFactor;
sal_uInt16 nSmSyntaxVersion;
bool bPrintTitle;
bool bPrintFormulaText;
@@ -140,6 +141,7 @@ constexpr sal_uInt16 nDefaultSmSyntaxVersion(5);
SmCfgOther::SmCfgOther()
: ePrintSize(PRINT_SIZE_NORMAL)
, nPrintZoomFactor(100)
+ , nSmEditWindowZoomFactor(100)
// Defaulted as 5 so I have time to code the parser 6
, nSmSyntaxVersion(nDefaultSmSyntaxVersion)
, bPrintTitle(true)
@@ -746,6 +748,8 @@ void SmMathConfig::LoadOther()
pOther->bPrintFormulaText = officecfg::Office::Math::Print::FormulaText::get();
pOther->bPrintFrame = officecfg::Office::Math::Print::Frame::get();
pOther->ePrintSize = static_cast<SmPrintSize>(officecfg::Office::Math::Print::Size::get());
+ pOther->nSmEditWindowZoomFactor = officecfg::Office::Math::Misc::SmEditWindowZoomFactor::get();
+ pOther->bIsSaveOnlyUsedSymbols = officecfg::Office::Math::LoadSave::IsSaveOnlyUsedSymbols::get();
pOther->nPrintZoomFactor = officecfg::Office::Math::Print::ZoomFactor::get();
pOther->bIsSaveOnlyUsedSymbols = officecfg::Office::Math::LoadSave::IsSaveOnlyUsedSymbols::get();
pOther->bIsAutoCloseBrackets = officecfg::Office::Math::Misc::AutoCloseBrackets::get();
@@ -770,6 +774,7 @@ void SmMathConfig::SaveOther()
officecfg::Office::Math::Print::Frame::set(pOther->bPrintFrame, batch);
officecfg::Office::Math::Print::Size::set(pOther->ePrintSize, batch);
officecfg::Office::Math::Print::ZoomFactor::set(pOther->nPrintZoomFactor, batch);
+ officecfg::Office::Math::Misc::SmEditWindowZoomFactor::set(pOther->nSmEditWindowZoomFactor, batch);
officecfg::Office::Math::LoadSave::IsSaveOnlyUsedSymbols::set(pOther->bIsSaveOnlyUsedSymbols, batch);
officecfg::Office::Math::Misc::AutoCloseBrackets::set(pOther->bIsAutoCloseBrackets, batch);
officecfg::Office::Math::Misc::DefaultSmSyntaxVersion::set(pOther->nSmSyntaxVersion, batch);
@@ -1058,6 +1063,28 @@ void SmMathConfig::SetPrintZoomFactor( sal_uInt16 nVal )
}
+sal_uInt16 SmMathConfig::GetSmEditWindowZoomFactor() const
+{
+ sal_uInt16 smzoomfactor;
+ if (!pOther)
+ const_cast<SmMathConfig*>(this)->LoadOther();
+ smzoomfactor = pOther->nSmEditWindowZoomFactor;
+ return smzoomfactor < 10 || smzoomfactor > 1000 ? 100 : smzoomfactor;
+}
+
+
+void SmMathConfig::SetSmEditWindowZoomFactor( sal_uInt16 nVal )
+{
+ if (!pOther)
+ LoadOther();
+ if (nVal != pOther->nSmEditWindowZoomFactor)
+ {
+ pOther->nSmEditWindowZoomFactor = nVal;
+ SetOtherModified( true );
+ }
+}
+
+
void SmMathConfig::SetOtherIfNotEqual( bool &rbItem, bool bNewVal )
{
if (bNewVal != rbItem)
@@ -1231,6 +1258,10 @@ void SmMathConfig::ItemSetToConfig(const SfxItemSet &rSet)
{ nU16 = static_cast<const SfxUInt16Item *>(pItem)->GetValue();
SetPrintZoomFactor( nU16 );
}
+ if (rSet.GetItemState(SID_SMEDITWINDOWZOOM, true, &pItem) == SfxItemState::SET)
+ { nU16 = static_cast<const SfxUInt16Item *>(pItem)->GetValue();
+ SetSmEditWindowZoomFactor( nU16 );
+ }
if (rSet.GetItemState(SID_PRINTTITLE, true, &pItem) == SfxItemState::SET)
{ bVal = static_cast<const SfxBoolItem *>(pItem)->GetValue();
SetPrintTitle( bVal );
@@ -1286,6 +1317,8 @@ void SmMathConfig::ConfigToItemSet(SfxItemSet &rSet) const
sal::static_int_cast<sal_uInt16>(GetPrintSize())));
rSet.Put(SfxUInt16Item(pPool->GetWhich(SID_PRINTZOOM),
GetPrintZoomFactor()));
+ rSet.Put(SfxUInt16Item(pPool->GetWhich(SID_SMEDITWINDOWZOOM),
+ GetSmEditWindowZoomFactor()));
rSet.Put(SfxBoolItem(pPool->GetWhich(SID_PRINTTITLE), IsPrintTitle()));
rSet.Put(SfxBoolItem(pPool->GetWhich(SID_PRINTTEXT), IsPrintFormulaText()));
diff --git a/starmath/source/document.cxx b/starmath/source/document.cxx
index 09078d11f94d..ccf07fb6127b 100644
--- a/starmath/source/document.cxx
+++ b/starmath/source/document.cxx
@@ -47,7 +47,6 @@
#include <svl/stritem.hxx>
#include <svl/undo.hxx>
#include <svl/whiter.hxx>
-#include <editeng/editeng.hxx>
#include <editeng/editstat.hxx>
#include <editeng/eeitem.hxx>
#include <editeng/fhgtitem.hxx>
@@ -84,6 +83,7 @@
#include <utility>
#include <oox/mathml/export.hxx>
#include <ElementsDockingWindow.hxx>
+#include <smediteng.hxx>
using namespace ::com::sun::star;
using namespace ::com::sun::star::accessibility;
@@ -291,58 +291,9 @@ void SmDocShell::ArrangeFormula()
maAccText.clear();
}
-void SmDocShell::UpdateEditEngineDefaultFonts(const Color& aTextColor)
+void SmDocShell::UpdateEditEngineDefaultFonts()
{
- assert(mpEditEngineItemPool);
- if (!mpEditEngineItemPool)
- return;
-
- // set fonts to be used
- struct FontDta {
- LanguageType nFallbackLang;
- LanguageType nLang;
- DefaultFontType nFontType;
- sal_uInt16 nFontInfoId;
- } aTable[3] =
- {
- // info to get western font to be used
- { LANGUAGE_ENGLISH_US, LANGUAGE_NONE,
- DefaultFontType::FIXED, EE_CHAR_FONTINFO },
- // info to get CJK font to be used
- { LANGUAGE_JAPANESE, LANGUAGE_NONE,
- DefaultFontType::CJK_TEXT, EE_CHAR_FONTINFO_CJK },
- // info to get CTL font to be used
- { LANGUAGE_ARABIC_SAUDI_ARABIA, LANGUAGE_NONE,
- DefaultFontType::CTL_TEXT, EE_CHAR_FONTINFO_CTL }
- };
-
- aTable[0].nLang = maLinguOptions.nDefaultLanguage;
- aTable[1].nLang = maLinguOptions.nDefaultLanguage_CJK;
- aTable[2].nLang = maLinguOptions.nDefaultLanguage_CTL;
-
- for (const FontDta & rFntDta : aTable)
- {
- LanguageType nLang = (LANGUAGE_NONE == rFntDta.nLang) ?
- rFntDta.nFallbackLang : rFntDta.nLang;
- vcl::Font aFont = OutputDevice::GetDefaultFont(
- rFntDta.nFontType, nLang, GetDefaultFontFlags::OnlyOne );
- aFont.SetColor(aTextColor);
- mpEditEngineItemPool->SetPoolDefaultItem(
- SvxFontItem( aFont.GetFamilyType(), aFont.GetFamilyName(),
- aFont.GetStyleName(), aFont.GetPitch(), aFont.GetCharSet(),
- rFntDta.nFontInfoId ) );
- }
-
- // set font heights
- SvxFontHeightItem aFontHeigt(
- Application::GetDefaultDevice()->LogicToPixel(
- Size( 0, 11 ), MapMode( MapUnit::MapPoint ) ).Height(), 100,
- EE_CHAR_FONTHEIGHT );
- mpEditEngineItemPool->SetPoolDefaultItem( aFontHeigt );
- aFontHeigt.SetWhich( EE_CHAR_FONTHEIGHT_CJK );
- mpEditEngineItemPool->SetPoolDefaultItem( aFontHeigt );
- aFontHeigt.SetWhich( EE_CHAR_FONTHEIGHT_CTL );
- mpEditEngineItemPool->SetPoolDefaultItem( aFontHeigt );
+ SmEditEngine::setSmItemPool(mpEditEngineItemPool.get(), maLinguOptions);
}
EditEngine& SmDocShell::GetEditEngine()
@@ -352,32 +303,9 @@ EditEngine& SmDocShell::GetEditEngine()
//!
//! see also SmEditWindow::DataChanged !
//!
-
mpEditEngineItemPool = EditEngine::CreatePool();
-
- const StyleSettings& rStyleSettings = Application::GetDefaultDevice()->GetSettings().GetStyleSettings();
- UpdateEditEngineDefaultFonts(rStyleSettings.GetFieldTextColor());
-
- mpEditEngine.reset( new EditEngine( mpEditEngineItemPool.get() ) );
-
- mpEditEngine->SetAddExtLeading(true);
-
- mpEditEngine->EnableUndo( true );
- mpEditEngine->SetDefTab( sal_uInt16(
- Application::GetDefaultDevice()->GetTextWidth("XXXX")) );
-
- mpEditEngine->SetBackgroundColor(rStyleSettings.GetFieldColor());
-
- mpEditEngine->SetControlWord(
- (mpEditEngine->GetControlWord() | EEControlBits::AUTOINDENTING) &
- EEControlBits(~EEControlBits::UNDOATTRIBS) &
- EEControlBits(~EEControlBits::PASTESPECIAL) );
-
- mpEditEngine->SetWordDelimiters(" .=+-*/(){}[];\"");
- mpEditEngine->SetRefMapMode(MapMode(MapUnit::MapPixel));
-
- mpEditEngine->SetPaperSize( Size( 800, 0 ) );
-
+ SmEditEngine::setSmItemPool(mpEditEngineItemPool.get(), maLinguOptions);
+ mpEditEngine.reset( new SmEditEngine( mpEditEngineItemPool.get() ) );
mpEditEngine->EraseVirtualDevice();
// set initial text if the document already has some...
@@ -385,9 +313,7 @@ EditEngine& SmDocShell::GetEditEngine()
OUString aTxt( GetText() );
if (!aTxt.isEmpty())
mpEditEngine->SetText( aTxt );
-
mpEditEngine->ClearModifyFlag();
-
}
return *mpEditEngine;
}
diff --git a/starmath/source/edit.cxx b/starmath/source/edit.cxx
index 53115b6c093e..373d3e8349d7 100644
--- a/starmath/source/edit.cxx
+++ b/starmath/source/edit.cxx
@@ -39,6 +39,7 @@
#include <view.hxx>
#include <document.hxx>
#include <cfgitem.hxx>
+#include <smediteng.hxx>
#include "accessibility.hxx"
using namespace com::sun::star::accessibility;
@@ -118,6 +119,10 @@ void SmEditTextWindow::SetDrawingArea(weld::DrawingArea* pDrawingArea)
pEditEngine->SetStatusEventHdl(LINK(this, SmEditTextWindow, EditStatusHdl));
InitAccessible();
+
+ //Apply zoom to smeditwindow text
+ if(GetEditView())
+ static_cast<SmEditEngine*>(GetEditEngine())->executeZoom(GetEditView());
}
SmEditWindow::SmEditWindow(SmCmdBoxWindow &rMyCmdBoxWin, weld::Builder& rBuilder)
@@ -190,7 +195,7 @@ void SmEditTextWindow::StyleUpdated()
//!
const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
- pDoc->UpdateEditEngineDefaultFonts(rStyleSettings.GetFieldTextColor());
+ pDoc->UpdateEditEngineDefaultFonts();
pEditEngine->SetBackgroundColor(rStyleSettings.GetFieldColor());
pEditEngine->SetDefTab(sal_uInt16(GetTextWidth("XXXX")));
@@ -203,6 +208,9 @@ void SmEditTextWindow::StyleUpdated()
Resize();
}
+
+ // Apply zoom to smeditwindow text
+ static_cast<SmEditEngine*>(GetEditEngine())->executeZoom(GetEditView());
}
IMPL_LINK_NOARG(SmEditTextWindow, ModifyTimerHdl, Timer *, void)
@@ -522,6 +530,8 @@ void SmEditTextWindow::SetText(const OUString& rText)
// math tasks
aModifyIdle.Start();
+ // Apply zoom to smeditwindow text
+ static_cast<SmEditEngine*>(pEditView->GetEditEngine())->executeZoom(pEditView);
pEditView->SetSelection(eSelection);
}
@@ -704,6 +714,8 @@ void SmEditTextWindow::UpdateStatus(bool bSetDocModified)
SmDocShell* pDoc = bSetDocModified ? mrEditWindow.GetDoc() : nullptr;
if (pDoc)
pDoc->SetModified();
+
+ static_cast<SmEditEngine*>(GetEditEngine())->executeZoom(GetEditView());
}
void SmEditWindow::Cut()
diff --git a/starmath/source/smediteng.cxx b/starmath/source/smediteng.cxx
new file mode 100644
index 000000000000..b782d5abc77b
--- /dev/null
+++ b/starmath/source/smediteng.cxx
@@ -0,0 +1,155 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+#include <smediteng.hxx>
+#include <smmod.hxx>
+#include <cfgitem.hxx>
+
+#include <svx/weldeditview.hxx>
+#include <vcl/settings.hxx>
+#include <sfx2/viewfrm.hxx>
+#include <editeng/eeitem.hxx>
+#include <editeng/fhgtitem.hxx>
+#include <svl/itemset.hxx>
+
+SmEditEngine::SmEditEngine(SfxItemPool* pItemPool)
+ : EditEngine(pItemPool)
+ , m_nOldZoom(100)
+ , m_nNewZoom(100)
+ , m_nDefaultFontSize(0)
+ , m_aAllSelection(0, 0, 0, 0)
+{
+ SetText(u"");
+
+ // Add external text leading
+ SetAddExtLeading(true);
+
+ // Allow to undo changes ( Ctrl + z )
+ EnableUndo(true);
+
+ // Length in pixel of a tabulation
+ SetDefTab(sal_uInt16(Application::GetDefaultDevice()->GetTextWidth("XXXX")));
+
+ // Set default background color by theme
+ SetBackgroundColor(
+ Application::GetDefaultDevice()->GetSettings().GetStyleSettings().GetFieldColor());
+
+ // Control words
+ SetControlWord((GetControlWord() | EEControlBits::AUTOINDENTING)
+ & EEControlBits(~EEControlBits::UNDOATTRIBS)
+ & EEControlBits(~EEControlBits::PASTESPECIAL));
+
+ // Word delimiters for auto word selection by double click
+ SetWordDelimiters(" .=+-*/(){}[];\"");
+
+ // Default mapping mode
+ SetRefMapMode(MapMode(MapUnit::MapPixel));
+
+ // Default size of the box
+ SetPaperSize(Size(1000, 0));
+}
+
+bool SmEditEngine::checkZoom()
+{
+ return m_nOldZoom != (m_nNewZoom = SM_MOD()->GetConfig()->GetSmEditWindowZoomFactor());
+}
+
+void SmEditEngine::executeZoom(EditView* pEditView)
+{
+ if (checkZoom())
+ {
+ updateZoom();
+ if (pEditView)
+ {
+ FormatAndUpdate(pEditView);
+ pEditView->SetSelection(pEditView->GetSelection());
+ }
+ }
+}
+
+void SmEditEngine::updateZoom()
+{
+ // In first run get font size as base to scale
+ if (m_nDefaultFontSize == 0)
+ {
+ SfxItemSet sfxatts = GetAttribs(0, 0, 0, GetAttribsFlags::CHARATTRIBS);
+ const SvxFontHeightItem* sfxattsh = sfxatts.GetItem(EE_CHAR_FONTHEIGHT);
+ m_nDefaultFontSize = sfxattsh->GetHeight();
+ }
+
+ // Now we calculate the new font size
+ sal_Int32 nNewFontSize = m_nDefaultFontSize * m_nNewZoom / 100;
+
+ // We apply the new font size to all the text
+ updateAllESelection(); // Update length of the text
+ SfxItemSet aSet = GetEmptyItemSet();
+ aSet.Put(SvxFontHeightItem(nNewFontSize, 100, EE_CHAR_FONTHEIGHT));
+ QuickSetAttribs(aSet, m_aAllSelection);
+
+ // We don't forget to equalize the zoomvalues
+ m_nOldZoom = m_nNewZoom;
+}
+
+void SmEditEngine::updateAllESelection()
+{
+ sal_Int32 paracount = GetParagraphCount();
+ m_aAllSelection.nEndPara = paracount > 0 ? paracount - 1 : 0;
+ sal_Int32 textlength = GetTextLen(m_aAllSelection.nEndPara);
+ m_aAllSelection.nEndPos = textlength > 0 ? textlength : 0;
+}
+
+void SmEditEngine::setSmItemPool(SfxItemPool* mpItemPool, const SvtLinguOptions& maLangOptions)
+{
+ // Set fonts to be used
+ struct FontData
+ {
+ LanguageType nFallbackLang;
+ LanguageType nLang;
+ DefaultFontType nFontType;
+ sal_uInt16 nFontInfoId;
+ };
+
+ FontData aFontDataTable[3]
+ = { // info to get western font to be used
+ { LANGUAGE_ENGLISH_US, maLangOptions.nDefaultLanguage, DefaultFontType::FIXED,
+ EE_CHAR_FONTINFO },
+ // info to get CJK font to be used
+ { LANGUAGE_JAPANESE, maLangOptions.nDefaultLanguage_CJK, DefaultFontType::CJK_TEXT,
+ EE_CHAR_FONTINFO_CJK },
+ // info to get CTL font to be used
+ { LANGUAGE_ARABIC_SAUDI_ARABIA, maLangOptions.nDefaultLanguage_CTL,
+ DefaultFontType::CTL_TEXT, EE_CHAR_FONTINFO_CTL }
+ };
+
+ // Text color
+ auto aDefaultDevice = Application::GetDefaultDevice();
+ Color aTextColor = aDefaultDevice->GetSettings().GetStyleSettings().GetFieldTextColor();
+ for (const FontData& aFontData : aFontDataTable)
+ {
+ LanguageType nLang
+ = (LANGUAGE_NONE == aFontData.nLang) ? aFontData.nFallbackLang : aFontData.nLang;
+ vcl::Font aFont = OutputDevice::GetDefaultFont(aFontData.nFontType, nLang,
+ GetDefaultFontFlags::OnlyOne);
+ aFont.SetColor(aTextColor);
+ mpItemPool->SetPoolDefaultItem(SvxFontItem(aFont.GetFamilyType(), aFont.GetFamilyName(),
+ aFont.GetStyleName(), aFont.GetPitch(),
+ aFont.GetCharSet(), aFontData.nFontInfoId));
+ }
+
+ // Set font heights
+ SvxFontHeightItem aFontHeigt(
+ aDefaultDevice->LogicToPixel(Size(0, 11), MapMode(MapUnit::MapPoint)).Height(), 100,
+ EE_CHAR_FONTHEIGHT);
+ mpItemPool->SetPoolDefaultItem(aFontHeigt);
+ aFontHeigt.SetWhich(EE_CHAR_FONTHEIGHT_CJK);
+ mpItemPool->SetPoolDefaultItem(aFontHeigt);
+ aFontHeigt.SetWhich(EE_CHAR_FONTHEIGHT_CTL);
+ mpItemPool->SetPoolDefaultItem(aFontHeigt);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */