diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 511098ba95d8d1af4ab9eb1209ebd70c1668866f..2770184978f4a0fd05f889043611f51a88fd9ae0 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -65,15 +65,32 @@ #include <QtGui/QDesktopWidget> #include <QtGui/QKeyEvent> #include <QtGui/QLabel> +#include <QtGui/QStyleOption> +#include <QtGui/QStylePainter> +#include <QtGui/QTextDocument> // Qt::escape() #include <QtGui/QToolButton> #include <QtGui/QVBoxLayout> -#include <QtGui/QTextDocument> // Qt::escape() using namespace CPlusPlus; namespace CppTools { namespace Internal { +class FakeToolTipFrame : public QWidget +{ +public: + FakeToolTipFrame(QWidget *parent = 0) : + QWidget(parent, Qt::ToolTip | Qt::WindowStaysOnTopHint) + { + setFocusPolicy(Qt::NoFocus); + setAttribute(Qt::WA_DeleteOnClose); + } + +protected: + void paintEvent(QPaintEvent *e); + void resizeEvent(QResizeEvent *e); +}; + class FunctionArgumentWidget : public QLabel { Q_OBJECT @@ -107,7 +124,7 @@ private: QWidget *m_pager; QLabel *m_numberLabel; - QFrame *m_popupFrame; + FakeToolTipFrame *m_popupFrame; QList<Function *> m_items; LookupContext m_context; }; @@ -198,6 +215,26 @@ protected: using namespace CppTools::Internal; + +void FakeToolTipFrame::paintEvent(QPaintEvent *ev) +{ + QStylePainter p(this); + QStyleOptionFrame opt; + opt.init(this); + p.drawPrimitive(QStyle::PE_PanelTipLabel, opt); + p.end(); +} + +void FakeToolTipFrame::resizeEvent(QResizeEvent *e) +{ + QStyleHintReturnMask frameMask; + QStyleOption option; + option.init(this); + if (style()->styleHint(QStyle::SH_ToolTip_Mask, &option, this, &frameMask)) + setMask(frameMask.region); +} + + FunctionArgumentWidget::FunctionArgumentWidget(): m_startpos(-1), m_current(0), @@ -206,9 +243,7 @@ FunctionArgumentWidget::FunctionArgumentWidget(): QObject *editorObject = Core::EditorManager::instance()->currentEditor(); m_editor = qobject_cast<TextEditor::ITextEditor *>(editorObject); - m_popupFrame = new QFrame(m_editor->widget(), Qt::ToolTip | Qt::WindowStaysOnTopHint); - m_popupFrame->setFocusPolicy(Qt::NoFocus); - m_popupFrame->setAttribute(Qt::WA_DeleteOnClose); + m_popupFrame = new FakeToolTipFrame(m_editor->widget()); QToolButton *downArrow = new QToolButton; downArrow->setArrowType(Qt::DownArrow); @@ -220,9 +255,6 @@ FunctionArgumentWidget::FunctionArgumentWidget(): upArrow->setFixedSize(16, 16); upArrow->setAutoRaise(true); - m_popupFrame->setFrameStyle(QFrame::Box); - m_popupFrame->setFrameShadow(QFrame::Plain); - setParent(m_popupFrame); setFocusPolicy(Qt::NoFocus); @@ -245,11 +277,6 @@ FunctionArgumentWidget::FunctionArgumentWidget(): connect(upArrow, SIGNAL(clicked()), SLOT(previousPage())); connect(downArrow, SIGNAL(clicked()), SLOT(nextPage())); - QPalette pal = m_popupFrame->palette(); - setAutoFillBackground(true); - pal.setColor(QPalette::Background, QColor(255, 255, 220)); - m_popupFrame->setPalette(pal); - setTextFormat(Qt::RichText); setMargin(1);