diff options
author | Arno <am@disconnect.de> | 2012-10-27 14:52:25 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2012-10-27 14:52:25 +0200 |
commit | 39c06f2366d7b50418b0b060cb05cec7b62a4376 (patch) | |
tree | a7e9339535d8832400afd8b8fc6042ba504910db | |
parent | 97e8c68d7a92d6ccdb5f6ead8bba0d0af58efb3b (diff) | |
download | SheMov-39c06f2366d7b50418b0b060cb05cec7b62a4376.tar.gz SheMov-39c06f2366d7b50418b0b060cb05cec7b62a4376.tar.bz2 SheMov-39c06f2366d7b50418b0b060cb05cec7b62a4376.zip |
Fix display of caption when hovering
Well, centering and sizing text is a bitch when operating with QPixmaps
and QImages...
-rw-r--r-- | hoverwindow.cpp | 30 | ||||
-rw-r--r-- | hoverwindow.h | 1 | ||||
-rw-r--r-- | pictureswidget.cpp | 2 |
3 files changed, 14 insertions, 19 deletions
diff --git a/hoverwindow.cpp b/hoverwindow.cpp index 4bfdae4..5c9db7a 100644 --- a/hoverwindow.cpp +++ b/hoverwindow.cpp @@ -7,7 +7,6 @@ #include <QHBoxLayout> #include <QLabel> -#include <QApplication> #include <QDesktopWidget> #include <QSize> #include <QTextDocument> @@ -20,6 +19,7 @@ #include <QPen> #include <QColor> #include <QApplication> +#include <QStaticText> #include "hoverwindow.h" #include "smglobals.h" @@ -100,30 +100,26 @@ void HoverWindow::setData(const QList<QVariant> &data){ } void HoverWindow::setCaption(const QString &caption){ - const QPixmap *pm = mLabel->pixmap(); + const QPixmap *pm = mLabel->pixmap(); if(!pm){ return; - } + } QFontMetrics fm = qApp->fontMetrics(); - QString elidedCap = fm.elidedText(caption, Qt::ElideMiddle, pm->size().width() - 18, Qt::TextSingleLine); - QSize captionSize = fm.size(Qt::TextSingleLine, elidedCap); - QImage img = pm->toImage(); - QPainter *p = new QPainter(&img); + QString elidedCap = fm.elidedText(caption, Qt::ElideLeft, pm->size().width() - 18, Qt::TextSingleLine); + QStaticText myCap(elidedCap); + QImage img = pm->toImage(); + QPainter *p = new QPainter(&img); QColor bgColor(Qt::white); p->setBrush(QBrush(bgColor)); p->setPen(Qt::NoPen); - qreal xStart = (pm->size().width() - captionSize.width()) / 2.0; - QRectF bgRect(xStart, 5, captionSize.width() + 6, captionSize.height()); - p->drawRect(bgRect); + p->setOpacity(0.4); + qreal xStart = (mLabel->width() - myCap.size().width() - 9) / 2.0; + p->drawRect(QRect(QPoint(xStart, 5), QSize(myCap.size().toSize()))); + p->setOpacity(1.0); p->setPen(Qt::black); - p->drawText(bgRect.topLeft().x() + 3, bgRect.topLeft().y() + fm.ascent(), elidedCap); + p->drawStaticText(xStart, 5, myCap); delete p; - mLabel->setPixmap(QPixmap::fromImage(img)); -} - -int HoverWindow::pixmapHeight() const{ - const QPixmap *pm = mLabel->pixmap(); - return pm ? pm->height() : 0; + mLabel->setPixmap(QPixmap::fromImage(img)); } void HoverWindow::setPos(){ diff --git a/hoverwindow.h b/hoverwindow.h index 4e79f5f..4ed210e 100644 --- a/hoverwindow.h +++ b/hoverwindow.h @@ -23,7 +23,6 @@ class HoverWindow : public QWidget { void setPixmap(const QPixmap &pm, bool scale = true); void setData(const QList<QVariant> &data); void setCaption(const QString &caption); - int pixmapHeight() const; void setPos(); QPoint hoverOffset() const { return mHoverOffset; } void setHoverOffset(const QPoint &point) { mHoverOffset = point; } diff --git a/pictureswidget.cpp b/pictureswidget.cpp index 54d86e2..9708802 100644 --- a/pictureswidget.cpp +++ b/pictureswidget.cpp @@ -274,8 +274,8 @@ bool PictureView::event(QEvent *e){ pm.load(mCurHover.data(PicFilesModel::FullPathRole).toString()); mHoverWin->setPixmap(pm); mHoverWin->setPos(); - mHoverWin->setCaption(mCurHover.data().toString()); mHoverWin->setVisible(true); + mHoverWin->setCaption(mCurHover.data().toString()); return true; } } |