[tor-commits] [vidalia/master] visual feedback from vclicklabel when "pressed"
chiiph at torproject.org
chiiph at torproject.org
Mon May 14 15:30:30 UTC 2012
commit 7c25ed518387ec31df516af1fe98ef121beb0f56
Author: Sebastian Baginski <sebthestampede at gmail.com>
Date: Mon May 14 16:25:43 2012 +0200
visual feedback from vclicklabel when "pressed"
---
changes/bug5766 | 3 +++
src/vidalia/VClickLabel.cpp | 32 +++++++++++++++++++++++++-------
src/vidalia/VClickLabel.h | 3 +++
3 files changed, 31 insertions(+), 7 deletions(-)
diff --git a/changes/bug5766 b/changes/bug5766
new file mode 100644
index 0000000..6332721
--- /dev/null
+++ b/changes/bug5766
@@ -0,0 +1,3 @@
+ New Features:
+ o Add visual feedback from VClickLabel when in "pressed" state.
+ Resolves ticket 5766.
diff --git a/src/vidalia/VClickLabel.cpp b/src/vidalia/VClickLabel.cpp
index 0165de4..a20df07 100644
--- a/src/vidalia/VClickLabel.cpp
+++ b/src/vidalia/VClickLabel.cpp
@@ -25,6 +25,7 @@ VClickLabel::VClickLabel(QWidget *parent)
{
setCursor(Qt::PointingHandCursor);
_flashToggle = false;
+ _isPressed = false;
}
/** Returns the current size hint for this widget's current contents. */
@@ -50,7 +51,7 @@ VClickLabel::paintEvent(QPaintEvent *e)
QPainter p(this);
QRect rect = this->rect();
- if(_flashToggle) {
+ if (_flashToggle || _isPressed) {
p.setBrush(QColor(150,150,150));
rect.setX(rect.x()+1);
rect.setY(rect.y()+1);
@@ -60,30 +61,47 @@ VClickLabel::paintEvent(QPaintEvent *e)
}
rect = this->rect();
+
+ // when label is in "pressed" state, we will translate the pixmap and text
+ // a bit, just like regular buttons do
+ const int d = _isPressed ? 2 : 0;
if (vApp->isLeftToRight()) {
if (!_pixmap.isNull())
- p.drawPixmap(0, qMax((rect.height()-_pixmap.height())/2, 0), _pixmap);
+ p.drawPixmap(d, qMax((rect.height()-_pixmap.height())/2+d, 0), _pixmap);
if (!_text.isEmpty())
- p.drawText(_pixmap.width()+2, (rect.height()+fontInfo().pixelSize())/2, _text);
+ p.drawText(_pixmap.width()+2+d, (rect.height()+fontInfo().pixelSize())/2+d, _text);
} else {
if (!_pixmap.isNull())
- p.drawPixmap(qMax(rect.right()-_pixmap.width(), 0),
- qMax((rect.height()-_pixmap.height())/2, 0), _pixmap);
+ p.drawPixmap(qMax(rect.right()-_pixmap.width()-d, d),
+ qMax((rect.height()-_pixmap.height())/2-d, d), _pixmap);
if (!_text.isEmpty()) {
int textWidth = fontMetrics().width(_text);
- p.drawText(qMax(rect.right()-_pixmap.width()-textWidth-2, 0),
- (rect.height()+fontInfo().pixelSize())/2, _text);
+ p.drawText(qMax(rect.right()-_pixmap.width()-textWidth-2-d, d),
+ (rect.height()+fontInfo().pixelSize())/2-d, _text);
}
}
e->accept();
}
+/** Overloaded mouse event to remember click state. */
+void
+VClickLabel::mousePressEvent(QMouseEvent * e)
+{
+ if (e->button() == Qt::LeftButton) {
+ _isPressed = true;
+ update();
+ }
+ e->accept();
+}
+
/** Overloaded mouse event to catch left mouse button clicks. */
void
VClickLabel::mouseReleaseEvent(QMouseEvent *e)
{
if (e->button() == Qt::LeftButton) {
+ _isPressed = false;
+ update();
emit clicked();
}
e->accept();
diff --git a/src/vidalia/VClickLabel.h b/src/vidalia/VClickLabel.h
index c9c0766..acdc58e 100644
--- a/src/vidalia/VClickLabel.h
+++ b/src/vidalia/VClickLabel.h
@@ -59,6 +59,8 @@ signals:
protected:
/** Overloaded paint event to draw a pixmap and a text label. */
virtual void paintEvent(QPaintEvent *e);
+ /** Overloaded mouse event to remember click state. */
+ virtual void mousePressEvent(QMouseEvent * e);
/** Overloaded mouse event to catch left mouse button clicks. */
virtual void mouseReleaseEvent(QMouseEvent *e);
@@ -66,6 +68,7 @@ private:
QString _text; /**< Text label to display in the widget. */
QPixmap _pixmap; /**< Image to display in the widget. */
bool _flashToggle;/**< Bool toggle for flashing the button. */
+ bool _isPressed; /**< Remember if label is currently pressed. */
};
#endif
More information about the tor-commits
mailing list