Update the preedit styling mapping

- None mapping to no style.
- Default/Underline mapping to underline.
- Highlight/Selection mapping to background color/text color with highlight/highlight
text with underline.
- Active/Inactive mapping to bold text with underline.
- Incorrect mapping to red wave underline.

Pick-to: 5.15 6.2 6.3
Change-Id: Iab51d671b8f83aece8596f7f7610de19343fcceb
Reviewed-by: Aleix Pol Gonzalez <aleixpol@kde.org>
This commit is contained in:
Weng Xuetian 2021-12-22 10:42:38 -08:00
parent 0f2af27045
commit 651d6dcfe3

View File

@ -39,7 +39,10 @@
#include "qwaylandinputmethodeventbuilder_p.h" #include "qwaylandinputmethodeventbuilder_p.h"
#include <QBrush>
#include <QGuiApplication>
#include <QInputMethod> #include <QInputMethod>
#include <QPalette>
#include <QTextCharFormat> #include <QTextCharFormat>
#ifdef QT_BUILD_WAYLANDCOMPOSITOR_LIB #ifdef QT_BUILD_WAYLANDCOMPOSITOR_LIB
@ -83,32 +86,38 @@ void QWaylandInputMethodEventBuilder::addPreeditStyling(uint32_t index, uint32_t
QTextCharFormat format; QTextCharFormat format;
switch (style) { switch (style) {
case 0: case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_NONE:
case 1: break;
case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_DEFAULT:
case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_UNDERLINE:
format.setFontUnderline(true); format.setFontUnderline(true);
format.setUnderlineStyle(QTextCharFormat::SingleUnderline); format.setUnderlineStyle(QTextCharFormat::SingleUnderline);
m_preeditStyles.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, index, length, format)); m_preeditStyles.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, index, length, format));
break; break;
case 2: case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_ACTIVE:
case 3: case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_INACTIVE:
format.setFontWeight(QFont::Bold); format.setFontWeight(QFont::Bold);
format.setFontUnderline(true); format.setFontUnderline(true);
format.setUnderlineStyle(QTextCharFormat::SingleUnderline); format.setUnderlineStyle(QTextCharFormat::SingleUnderline);
m_preeditStyles.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, index, length, format)); m_preeditStyles.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, index, length, format));
break; break;
case 4: case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_HIGHLIGHT:
case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_SELECTION:
{
format.setFontUnderline(true); format.setFontUnderline(true);
format.setUnderlineStyle(QTextCharFormat::SingleUnderline); format.setUnderlineStyle(QTextCharFormat::SingleUnderline);
QPalette palette = qApp->palette();
format.setBackground(QBrush(palette.color(QPalette::Active, QPalette::Highlight)));
format.setForeground(QBrush(palette.color(QPalette::Active, QPalette::HighlightedText)));
m_preeditStyles.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, index, length, format)); m_preeditStyles.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, index, length, format));
}
break; break;
case 5: case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_INCORRECT:
format.setFontUnderline(true); format.setFontUnderline(true);
format.setUnderlineStyle(QTextCharFormat::WaveUnderline); format.setUnderlineStyle(QTextCharFormat::WaveUnderline);
format.setUnderlineColor(QColor(Qt::red)); format.setUnderlineColor(QColor(Qt::red));
m_preeditStyles.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, index, length, format)); m_preeditStyles.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, index, length, format));
break; break;
// case QtWayland::wl_text_input::preedit_style_selection:
// case QtWayland::wl_text_input::preedit_style_none:
default: default:
break; break;
} }