/* * SPDX-FileCopyrightText: 2021~2021 CSSlayer * * SPDX-License-Identifier: BSD-3-Clause * */ #ifndef _PLATFORMINPUTCONTEXT_FCITXCANDIDATEWINDOW_H_ #define _PLATFORMINPUTCONTEXT_FCITXCANDIDATEWINDOW_H_ #include "fcitxflags.h" #include "fcitxqtdbustypes.h" #include #include #include #include #include #include #include #include #if defined(FCITX_ENABLE_QT6_WAYLAND_WORKAROUND) && \ QT_VERSION >= QT_VERSION_CHECK(6, 6, 0) #include #endif namespace fcitx { class FcitxTheme; class MultilineText; class QFcitxPlatformInputContext; class FcitxCandidateWindow : public QRasterWindow { Q_OBJECT public: explicit FcitxCandidateWindow(QWindow *window, QFcitxPlatformInputContext *context); ~FcitxCandidateWindow(); void render(QPainter *painter); public Q_SLOTS: void updateClientSideUI(const FcitxQtFormattedPreeditList &preedit, int cursorpos, const FcitxQtFormattedPreeditList &auxUp, const FcitxQtFormattedPreeditList &auxDown, const FcitxQtStringKeyValueList &candidates, int candidateIndex, int layoutHint, bool hasPrev, bool hasNext); QSize sizeHint(); Q_SIGNALS: void candidateSelected(int i); void prevClicked(); void nextClicked(); protected: bool event(QEvent *event) override; void paintEvent(QPaintEvent *event) override; void mouseMoveEvent(QMouseEvent *) override; void mouseReleaseEvent(QMouseEvent *) override; void wheelEvent(QWheelEvent *) override; int highlight() const { int highlightIndex = (hoverIndex_ >= 0) ? hoverIndex_ : highlight_; return highlightIndex; } private: const bool isWayland_ = QGuiApplication::platformName().startsWith("wayland"); uint32_t repositionToken_ = 0; QSize actualSize_; QPointer context_; QPointer theme_; QTextLayout upperLayout_; QTextLayout lowerLayout_; std::vector> candidateLayouts_; std::vector> labelLayouts_; int cursor_ = -1; int highlight_ = -1; int hoverIndex_ = -1; int accAngle_ = 0; bool prevHovered_ = false; bool nextHovered_ = false; bool hasPrev_ = false; bool hasNext_ = false; FcitxCandidateLayoutHint layoutHint_ = FcitxCandidateLayoutHint::NotSet; int candidatesHeight_ = 0; QRect prevRegion_; QRect nextRegion_; std::vector candidateRegions_; QPointer parent_; #if defined(FCITX_ENABLE_QT6_WAYLAND_WORKAROUND) && \ QT_VERSION >= QT_VERSION_CHECK(6, 6, 0) QScopedPointer xdgWmBase_; #endif }; } // namespace fcitx #endif // _PLATFORMINPUTCONTEXT_FCITXCANDIDATEWINDOW_H_