summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--svx/inc/CommonStylePreviewRenderer.hxx9
-rw-r--r--svx/source/styles/CommonStylePreviewRenderer.cxx58
-rw-r--r--svx/source/tbxctrls/tbcontrl.cxx79
3 files changed, 56 insertions, 90 deletions
diff --git a/svx/inc/CommonStylePreviewRenderer.hxx b/svx/inc/CommonStylePreviewRenderer.hxx
index cb0563be15c4..0e99421b4bfe 100644
--- a/svx/inc/CommonStylePreviewRenderer.hxx
+++ b/svx/inc/CommonStylePreviewRenderer.hxx
@@ -12,6 +12,7 @@
#include <optional>
#include <vector>
+#include <editeng/editeng.hxx>
#include <editeng/svxfont.hxx>
#include <sfx2/objsh.hxx>
#include <sfx2/StylePreviewRenderer.hxx>
@@ -19,9 +20,6 @@
#include <tools/color.hxx>
#include <tools/gen.hxx>
-#include <com/sun/star/uno/Reference.h>
-#include <com/sun/star/i18n/BreakIterator.hpp>
-
class OutputDevice;
class SfxStyleSheetBase;
@@ -41,13 +39,12 @@ class CommonStylePreviewRenderer final : public sfx2::StylePreviewRenderer
tools::Long mnBaseLine;
OUString maStyleName;
OUString maScriptText;
- css::uno::Reference<css::i18n::XBreakIterator> mxBreak;
struct ScriptInfo
{
tools::Long textWidth;
- sal_uInt16 scriptType;
+ SvtScriptType scriptType;
sal_Int32 changePos;
- ScriptInfo(sal_uInt16 scrptType, sal_Int32 position)
+ ScriptInfo(SvtScriptType scrptType, sal_Int32 position)
: textWidth(0)
, scriptType(scrptType)
, changePos(position)
diff --git a/svx/source/styles/CommonStylePreviewRenderer.cxx b/svx/source/styles/CommonStylePreviewRenderer.cxx
index 5f12d209f0bf..9ddf3cf15017 100644
--- a/svx/source/styles/CommonStylePreviewRenderer.cxx
+++ b/svx/source/styles/CommonStylePreviewRenderer.cxx
@@ -29,6 +29,7 @@
#include <editeng/contouritem.hxx>
#include <editeng/colritem.hxx>
#include <editeng/crossedoutitem.hxx>
+#include <editeng/editeng.hxx>
#include <editeng/emphasismarkitem.hxx>
#include <editeng/postitem.hxx>
#include <editeng/shdditem.hxx>
@@ -39,9 +40,6 @@
#include <editeng/editids.hrc>
-#include <comphelper/processfactory.hxx>
-#include <com/sun/star/i18n/ScriptType.hpp>
-
using namespace css;
namespace svx
@@ -235,7 +233,7 @@ void CommonStylePreviewRenderer::CalcRenderSize()
mnBaseLine = 0;
mnHeight = 0;
- sal_uInt16 nScript;
+ SvtScriptType aScript;
sal_uInt16 nIdx = 0;
sal_Int32 nStart = 0;
sal_Int32 nEnd;
@@ -244,19 +242,19 @@ void CommonStylePreviewRenderer::CalcRenderSize()
if (nCnt)
{
nEnd = maScriptChanges[nIdx].changePos;
- nScript = maScriptChanges[nIdx].scriptType;
+ aScript = maScriptChanges[nIdx].scriptType;
}
else
{
nEnd = rText.getLength();
- nScript = css::i18n::ScriptType::LATIN;
+ aScript = SvtScriptType::LATIN;
}
do
{
- auto oFont = (nScript == css::i18n::ScriptType::ASIAN) ?
+ auto oFont = (aScript == SvtScriptType::ASIAN) ?
m_oCJKFont :
- ((nScript == css::i18n::ScriptType::COMPLEX) ?
+ ((aScript == SvtScriptType::COMPLEX) ?
m_oCTLFont :
m_oFont);
@@ -287,7 +285,7 @@ void CommonStylePreviewRenderer::CalcRenderSize()
{
nStart = nEnd;
nEnd = maScriptChanges[nIdx].changePos;
- nScript = maScriptChanges[nIdx].scriptType;
+ aScript = maScriptChanges[nIdx].scriptType;
}
else
break;
@@ -351,7 +349,7 @@ bool CommonStylePreviewRenderer::render(const tools::Rectangle& aRectangle, Rend
aFontDrawPosition.AdjustY((aRectangle.GetHeight() - mnHeight) / 2 );
}
- sal_uInt16 nScript;
+ SvtScriptType aScript;
sal_uInt16 nIdx = 0;
sal_Int32 nStart = 0;
sal_Int32 nEnd;
@@ -359,19 +357,19 @@ bool CommonStylePreviewRenderer::render(const tools::Rectangle& aRectangle, Rend
if (nCnt)
{
nEnd = maScriptChanges[nIdx].changePos;
- nScript = maScriptChanges[nIdx].scriptType;
+ aScript = maScriptChanges[nIdx].scriptType;
}
else
{
nEnd = rText.getLength();
- nScript = css::i18n::ScriptType::LATIN;
+ aScript = SvtScriptType::LATIN;
}
do
{
- auto oFont = (nScript == css::i18n::ScriptType::ASIAN)
+ auto oFont = (aScript == SvtScriptType::ASIAN)
? m_oCJKFont
- : ((nScript == css::i18n::ScriptType::COMPLEX)
+ : ((aScript == SvtScriptType::COMPLEX)
? m_oCTLFont
: m_oFont);
@@ -392,7 +390,7 @@ bool CommonStylePreviewRenderer::render(const tools::Rectangle& aRectangle, Rend
{
nStart = nEnd;
nEnd = maScriptChanges[nIdx].changePos;
- nScript = maScriptChanges[nIdx].scriptType;
+ aScript = maScriptChanges[nIdx].scriptType;
}
else
break;
@@ -413,30 +411,16 @@ void CommonStylePreviewRenderer::CheckScript()
maScriptText = maStyleName;
maScriptChanges.clear();
- if (!mxBreak.is())
- {
- auto xContext = comphelper::getProcessComponentContext();
- mxBreak = css::i18n::BreakIterator::create(xContext);
- }
-
- sal_Int16 nScript = mxBreak->getScriptType(maStyleName, 0);
- sal_Int32 nChg = 0;
- if (css::i18n::ScriptType::WEAK == nScript)
- {
- nChg = mxBreak->endOfScript(maStyleName, nChg, nScript);
- if (nChg < maStyleName.getLength())
- nScript = mxBreak->getScriptType(maStyleName, nChg);
- else
- nScript = css::i18n::ScriptType::LATIN;
- }
+ auto aEditEngine = EditEngine(nullptr);
+ aEditEngine.SetText(maScriptText);
- while (true)
+ auto aScript = aEditEngine.GetScriptType({ 0, 0, 0, 0 });
+ for (sal_Int32 i = 1; i <= maScriptText.getLength(); i++)
{
- nChg = mxBreak->endOfScript(maStyleName, nChg, nScript);
- maScriptChanges.emplace_back(nScript, nChg);
- if (nChg >= maStyleName.getLength() || nChg < 0)
- break;
- nScript = mxBreak->getScriptType(maStyleName, nChg);
+ auto aNextScript = aEditEngine.GetScriptType({ 0, i, 0, i });
+ if (aNextScript != aScript || i == maScriptText.getLength())
+ maScriptChanges.emplace_back(aScript, i);
+ aScript = aNextScript;
}
}
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index 8df461642233..18b6eab37c62 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -104,10 +104,7 @@
#include <comphelper/lok.hxx>
#include <tools/json_writer.hxx>
-#include <com/sun/star/uno/Reference.h>
-#include <com/sun/star/i18n/BreakIterator.hpp>
-#include <comphelper/processfactory.hxx>
-#include <com/sun/star/i18n/ScriptType.hpp>
+#include <editeng/editeng.hxx>
#define MAX_MRU_FONTNAME_ENTRIES 5
@@ -126,9 +123,9 @@ namespace
struct ScriptInfo
{
tools::Long textWidth;
- sal_uInt16 scriptType;
+ SvtScriptType scriptType;
sal_Int32 changePos;
- ScriptInfo(sal_uInt16 scrptType, sal_Int32 position)
+ ScriptInfo(SvtScriptType scrptType, sal_Int32 position)
: textWidth(0)
, scriptType(scrptType)
, changePos(position)
@@ -209,8 +206,6 @@ private:
std::optional<SvxFont> m_oCJKFont;
std::optional<SvxFont> m_oCTLFont;
- css::uno::Reference<css::i18n::XBreakIterator> mxBreak;
-
DECL_LINK(SelectHdl, weld::ComboBox&, void);
DECL_LINK(KeyInputHdl, const KeyEvent&, bool);
DECL_LINK(ActivateHdl, weld::ComboBox&, bool);
@@ -224,7 +219,6 @@ private:
void Select(bool bNonTravelSelect);
- std::vector<ScriptInfo> CheckScript(const OUString &rStyleName);
tools::Rectangle CalcBoundRect(vcl::RenderContext& rRenderContext, const OUString &rStyleName, std::vector<ScriptInfo>& rScriptChanges, double fRatio = 1);
protected:
@@ -1126,46 +1120,35 @@ void SvxStyleBox_Impl::SetOptimalSize()
SetSizePixel(get_preferred_size());
}
-std::vector<ScriptInfo> SvxStyleBox_Base::CheckScript(const OUString &rStyleName)
+namespace
+{
+std::vector<ScriptInfo> CheckScript(const OUString &rStyleName)
{
assert(!rStyleName.isEmpty()); // must have a preview text here!
std::vector<ScriptInfo> aScriptChanges;
- if (!mxBreak.is())
- {
- auto xContext = comphelper::getProcessComponentContext();
- mxBreak = css::i18n::BreakIterator::create(xContext);
- }
-
- sal_Int16 nScript = mxBreak->getScriptType(rStyleName, 0);
- sal_Int32 nChg = 0;
- if (css::i18n::ScriptType::WEAK == nScript)
- {
- nChg = mxBreak->endOfScript(rStyleName, nChg, nScript);
- if (nChg < rStyleName.getLength())
- nScript = mxBreak->getScriptType(rStyleName, nChg);
- else
- nScript = css::i18n::ScriptType::LATIN;
- }
+ auto aEditEngine = EditEngine(nullptr);
+ aEditEngine.SetText(rStyleName);
- while (true)
+ auto aScript = aEditEngine.GetScriptType({ 0, 0, 0, 0 });
+ for (sal_Int32 i = 1; i <= rStyleName.getLength(); i++)
{
- nChg = mxBreak->endOfScript(rStyleName, nChg, nScript);
- aScriptChanges.emplace_back(nScript, nChg);
- if (nChg >= rStyleName.getLength() || nChg < 0)
- break;
- nScript = mxBreak->getScriptType(rStyleName, nChg);
+ auto aNextScript = aEditEngine.GetScriptType({ 0, i, 0, i });
+ if (aNextScript != aScript || i == rStyleName.getLength())
+ aScriptChanges.emplace_back(aScript, i);
+ aScript = aNextScript;
}
return aScriptChanges;
}
+}
tools::Rectangle SvxStyleBox_Base::CalcBoundRect(vcl::RenderContext& rRenderContext, const OUString &rStyleName, std::vector<ScriptInfo>& rScriptChanges, double fRatio)
{
tools::Rectangle aTextRect;
- sal_uInt16 nScript;
+ SvtScriptType aScript;
sal_uInt16 nIdx = 0;
sal_Int32 nStart = 0;
sal_Int32 nEnd;
@@ -1174,19 +1157,19 @@ tools::Rectangle SvxStyleBox_Base::CalcBoundRect(vcl::RenderContext& rRenderCont
if (nCnt)
{
nEnd = rScriptChanges[nIdx].changePos;
- nScript = rScriptChanges[nIdx].scriptType;
+ aScript = rScriptChanges[nIdx].scriptType;
}
else
{
nEnd = rStyleName.getLength();
- nScript = css::i18n::ScriptType::LATIN;
+ aScript = SvtScriptType::LATIN;
}
do
{
- auto oFont = (nScript == css::i18n::ScriptType::ASIAN) ?
+ auto oFont = (aScript == SvtScriptType::ASIAN) ?
m_oCJKFont :
- ((nScript == css::i18n::ScriptType::COMPLEX) ?
+ ((aScript == SvtScriptType::COMPLEX) ?
m_oCTLFont :
m_oFont);
@@ -1222,7 +1205,7 @@ tools::Rectangle SvxStyleBox_Base::CalcBoundRect(vcl::RenderContext& rRenderCont
{
nStart = nEnd;
nEnd = rScriptChanges[nIdx].changePos;
- nScript = rScriptChanges[nIdx].scriptType;
+ aScript = rScriptChanges[nIdx].scriptType;
}
else
break;
@@ -1248,29 +1231,31 @@ void SvxStyleBox_Base::UserDrawEntry(vcl::RenderContext& rRenderContext, const t
else
aPos.AdjustY((rRect.GetHeight() - rTextRect.Bottom()) / 2);
- sal_uInt16 nScript;
+ SvtScriptType aScript;
sal_uInt16 nIdx = 0;
sal_Int32 nStart = 0;
sal_Int32 nEnd;
size_t nCnt = rScriptChanges.size();
+
if (nCnt)
{
nEnd = rScriptChanges[nIdx].changePos;
- nScript = rScriptChanges[nIdx].scriptType;
+ aScript = rScriptChanges[nIdx].scriptType;
}
else
{
nEnd = rStyleName.getLength();
- nScript = css::i18n::ScriptType::LATIN;
+ aScript = SvtScriptType::LATIN;
}
+
do
{
- auto oFont = (nScript == css::i18n::ScriptType::ASIAN)
- ? m_oCJKFont
- : ((nScript == css::i18n::ScriptType::COMPLEX)
- ? m_oCTLFont
- : m_oFont);
+ auto oFont = (aScript == SvtScriptType::ASIAN) ?
+ m_oCJKFont :
+ ((aScript == SvtScriptType::COMPLEX) ?
+ m_oCTLFont :
+ m_oFont);
rRenderContext.Push(vcl::PushFlags::FONT);
@@ -1296,7 +1281,7 @@ void SvxStyleBox_Base::UserDrawEntry(vcl::RenderContext& rRenderContext, const t
{
nStart = nEnd;
nEnd = rScriptChanges[nIdx].changePos;
- nScript = rScriptChanges[nIdx].scriptType;
+ aScript = rScriptChanges[nIdx].scriptType;
}
else
break;