diff options
author | Leandro Melo <leandro.melo@nokia.com> | 2010-08-23 15:21:02 +0200 |
---|---|---|
committer | Leandro Melo <leandro.melo@nokia.com> | 2010-08-24 13:39:40 +0200 |
commit | 14ffff317cbecfe8fa36a5437ed22bd55cd2261d (patch) | |
tree | c50b4606a5dd119ae8b4031494dfe3d70e5b59d7 /src/plugins/texteditor/tooltip/tips.cpp | |
parent | 42d15fcf743ad5722b217e3b616b41f3b349e5a8 (diff) | |
download | qt-creator-14ffff317cbecfe8fa36a5437ed22bd55cd2261d.tar.gz |
Better flexibility and extensibility in text editor tooltip's internals.
Diffstat (limited to 'src/plugins/texteditor/tooltip/tips.cpp')
-rw-r--r-- | src/plugins/texteditor/tooltip/tips.cpp | 123 |
1 files changed, 104 insertions, 19 deletions
diff --git a/src/plugins/texteditor/tooltip/tips.cpp b/src/plugins/texteditor/tooltip/tips.cpp index 2825f1c955..606d622590 100644 --- a/src/plugins/texteditor/tooltip/tips.cpp +++ b/src/plugins/texteditor/tooltip/tips.cpp @@ -33,7 +33,13 @@ #include <QtCore/QRect> #include <QtGui/QColor> #include <QtGui/QPainter> +#include <QtGui/QPen> #include <QtGui/QPixmap> +#include <QtGui/QStyle> +#include <QtGui/QFontMetrics> +#include <QtGui/QTextDocument> +#include <QtGui/QStylePainter> +#include <QtGui/QStyleOptionFrame> using namespace TextEditor; using namespace Internal; @@ -53,31 +59,36 @@ namespace { } } -Tip::Tip(QWidget *parent) : QFrame(parent) -{ - setWindowFlags(Qt::ToolTip); - setAutoFillBackground(true); - ensurePolished(); -} +QT_BEGIN_NAMESPACE -Tip::~Tip() +QTipLabel::QTipLabel(QWidget *parent) : + QLabel(parent, Qt::ToolTip | Qt::BypassGraphicsProxyWidget), + m_tipContent(0) {} -void Tip::setContent(const QSharedPointer<TipContent> &content) +QTipLabel::~QTipLabel() { - m_content = content; + if (m_tipContent) + delete m_tipContent; +} + +void QTipLabel::setContent(const TipContent &content) +{ + if (m_tipContent) + delete m_tipContent; + m_tipContent = content.clone(); configure(); } -const QSharedPointer<TipContent> &Tip::content() const -{ return m_content; } +const TipContent &QTipLabel::content() const +{ return *m_tipContent; } + +QT_END_NAMESPACE -ColorTip::ColorTip(QWidget *parent) : Tip(parent) +ColorTip::ColorTip(QWidget *parent) : QTipLabel(parent) { - setFrameStyle(QFrame::Box); resize(QSize(40, 40)); - - m_tilePixMap = tilePixMap(9); + m_tilePixMap = tilePixMap(10); } ColorTip::~ColorTip() @@ -88,13 +99,87 @@ void ColorTip::configure() update(); } +bool ColorTip::handleContentReplacement(const TipContent &content) const +{ + if (content.typeId() == ColorContent::COLOR_CONTENT_ID) + return true; + return false; +} + void ColorTip::paintEvent(QPaintEvent *event) { + const QColor &color = static_cast<const ColorContent &>(content()).color(); + + QPen pen; + pen.setWidth(1); + if (color.value() > 100) + pen.setColor(color.darker()); + else + pen.setColor(color.lighter()); + QPainter painter(this); - QRect r(1, 1, width() - 2, height() - 2); + painter.setPen(pen); + painter.setBrush(color); + QRect r(1, 1, rect().width() - 2, rect().height() - 2); painter.drawTiledPixmap(r, m_tilePixMap); - painter.setBrush(static_cast<QColorContent *>(content().data())->color()); - painter.drawRect(rect()); + painter.drawRect(r); + + QLabel::paintEvent(event); +} + +TextTip::TextTip(QWidget *parent) : QTipLabel(parent) +{ + setForegroundRole(QPalette::ToolTipText); + setBackgroundRole(QPalette::ToolTipBase); + ensurePolished(); + setMargin(1 + style()->pixelMetric(QStyle::PM_ToolTipLabelFrameWidth, 0, this)); + setFrameStyle(QFrame::NoFrame); + setAlignment(Qt::AlignLeft); + setIndent(1); + setWindowOpacity(style()->styleHint(QStyle::SH_ToolTipLabel_Opacity, 0, this) / 255.0); +} + +TextTip::~TextTip() +{} + +void TextTip::configure() +{ + const QString &text = static_cast<const TextContent &>(content()).text(); + setWordWrap(Qt::mightBeRichText(text)); + setText(text); + QFontMetrics fm(font()); + QSize extra(1, 0); + // Make it look good with the default ToolTip font on Mac, which has a small descent. + if (fm.descent() == 2 && fm.ascent() >= 11) + ++extra.rheight(); + resize(sizeHint() + extra); +} + +bool TextTip::handleContentReplacement(const TipContent &content) const +{ + if (content.typeId() == TextContent::TEXT_CONTENT_ID) + return true; + return false; +} + +void TextTip::paintEvent(QPaintEvent *event) +{ + QStylePainter p(this); + QStyleOptionFrame opt; + opt.init(this); + p.drawPrimitive(QStyle::PE_PanelTipLabel, opt); + p.end(); + + QLabel::paintEvent(event); +} + +void TextTip::resizeEvent(QResizeEvent *event) +{ + QStyleHintReturnMask frameMask; + QStyleOption option; + option.init(this); + if (style()->styleHint(QStyle::SH_ToolTip_Mask, &option, this, &frameMask)) + setMask(frameMask.region); - QFrame::paintEvent(event); + QLabel::resizeEvent(event); } |