summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2012-10-27 14:52:25 +0200
committerArno <am@disconnect.de>2012-10-27 14:52:25 +0200
commit39c06f2366d7b50418b0b060cb05cec7b62a4376 (patch)
treea7e9339535d8832400afd8b8fc6042ba504910db
parent97e8c68d7a92d6ccdb5f6ead8bba0d0af58efb3b (diff)
downloadSheMov-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.cpp30
-rw-r--r--hoverwindow.h1
-rw-r--r--pictureswidget.cpp2
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;
}
}