Kaydet (Commit) 88158bb3 authored tarafından Jan-Marek Glogowski's avatar Jan-Marek Glogowski Kaydeden (comit) Michael Weghorn

tdf#123957 Qt5 IM generate correct formating

Actually really evaluate some of the formating provided by the
QInputMethodEvent::TextFormat attribute and not blindly underline
all of the text. This evaluates the same formating that the gtk3
backend evaluates from pango, so the result should be somehow on
par. Couldn't find a way to test the red strike-out text.

Don't know how often I typed hyoujunnsutairu to test this bug,
which - according to Google - translates to "standard style".

Reviewed-on: https://gerrit.libreoffice.org/71783
Tested-by: Jenkins
Reviewed-by: 's avatarJan-Marek Glogowski <glogow@fbihome.de>
(cherry picked from commit da310336)

This includes 48e44b36

Change-Id: I4263df6dc1e0e5ce5d8cb0be681656ccd662a830
Reviewed-on: https://gerrit.libreoffice.org/71990
Tested-by: Jenkins
Reviewed-by: 's avatarMichael Weghorn <m.weghorn@posteo.de>
üst b7e317b4
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <QtGui/QPaintEvent> #include <QtGui/QPaintEvent>
#include <QtGui/QResizeEvent> #include <QtGui/QResizeEvent>
#include <QtGui/QShowEvent> #include <QtGui/QShowEvent>
#include <QtGui/QTextCharFormat>
#include <QtGui/QWheelEvent> #include <QtGui/QWheelEvent>
#include <QtWidgets/QMainWindow> #include <QtWidgets/QMainWindow>
#include <QtWidgets/QToolTip> #include <QtWidgets/QToolTip>
...@@ -448,6 +449,24 @@ Qt5Widget::Qt5Widget(Qt5Frame& rFrame, Qt::WindowFlags f) ...@@ -448,6 +449,24 @@ Qt5Widget::Qt5Widget(Qt5Frame& rFrame, Qt::WindowFlags f)
setFocusPolicy(Qt::StrongFocus); setFocusPolicy(Qt::StrongFocus);
} }
static ExtTextInputAttr lcl_MapUndrelineStyle(QTextCharFormat::UnderlineStyle us)
{
switch (us)
{
case QTextCharFormat::NoUnderline:
return ExtTextInputAttr::NONE;
case QTextCharFormat::DotLine:
return ExtTextInputAttr::DottedUnderline;
case QTextCharFormat::DashDotDotLine:
case QTextCharFormat::DashDotLine:
return ExtTextInputAttr::DashDotUnderline;
case QTextCharFormat::WaveUnderline:
return ExtTextInputAttr::GrayWaveline;
default:
return ExtTextInputAttr::Underline;
}
}
void Qt5Widget::inputMethodEvent(QInputMethodEvent* pEvent) void Qt5Widget::inputMethodEvent(QInputMethodEvent* pEvent)
{ {
SolarMutexGuard aGuard; SolarMutexGuard aGuard;
...@@ -472,13 +491,32 @@ void Qt5Widget::inputMethodEvent(QInputMethodEvent* pEvent) ...@@ -472,13 +491,32 @@ void Qt5Widget::inputMethodEvent(QInputMethodEvent* pEvent)
const sal_Int32 nLength = aInputEvent.maText.getLength(); const sal_Int32 nLength = aInputEvent.maText.getLength();
const QList<QInputMethodEvent::Attribute>& rAttrList = pEvent->attributes(); const QList<QInputMethodEvent::Attribute>& rAttrList = pEvent->attributes();
std::vector<ExtTextInputAttr> aTextAttrs(nLength, ExtTextInputAttr::Underline); std::vector<ExtTextInputAttr> aTextAttrs(std::max(sal_Int32(1), nLength),
ExtTextInputAttr::NONE);
aInputEvent.mpTextAttr = &aTextAttrs[0];
for (int i = 0; i < rAttrList.size(); ++i) for (int i = 0; i < rAttrList.size(); ++i)
{ {
const QInputMethodEvent::Attribute& rAttr = rAttrList.at(i); const QInputMethodEvent::Attribute& rAttr = rAttrList.at(i);
switch (rAttr.type) switch (rAttr.type)
{ {
case QInputMethodEvent::TextFormat:
{
QTextCharFormat aCharFormat
= qvariant_cast<QTextFormat>(rAttr.value).toCharFormat();
if (aCharFormat.isValid())
{
ExtTextInputAttr aETIP
= lcl_MapUndrelineStyle(aCharFormat.underlineStyle());
if (aCharFormat.hasProperty(QTextFormat::BackgroundBrush))
aETIP |= ExtTextInputAttr::Highlight;
if (aCharFormat.fontStrikeOut())
aETIP |= ExtTextInputAttr::RedText;
for (int j = rAttr.start; j < rAttr.start + rAttr.length; j++)
aTextAttrs[j] = aETIP;
}
break;
}
case QInputMethodEvent::Cursor: case QInputMethodEvent::Cursor:
{ {
aInputEvent.mnCursorPos = rAttr.start; aInputEvent.mnCursorPos = rAttr.start;
...@@ -492,8 +530,6 @@ void Qt5Widget::inputMethodEvent(QInputMethodEvent* pEvent) ...@@ -492,8 +530,6 @@ void Qt5Widget::inputMethodEvent(QInputMethodEvent* pEvent)
break; break;
} }
} }
if (nLength)
aInputEvent.mpTextAttr = &aTextAttrs[0];
m_pFrame->CallCallback(SalEvent::ExtTextInput, &aInputEvent); m_pFrame->CallCallback(SalEvent::ExtTextInput, &aInputEvent);
pEvent->accept(); pEvent->accept();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment