summaryrefslogtreecommitdiffstats
path: root/qt-ui/starwidget.cpp
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tomaz.canabrava@gmail.com>2015-08-06 11:57:06 -0300
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-08-15 05:00:30 -0700
commitb62cf45d59bc953ca074df4bdc2829bbff7010f5 (patch)
tree20b14e81bcf4eb48c4754a7d1085148f12b9f2d3 /qt-ui/starwidget.cpp
parent25273a3912ab579f594b377b9b15d805d6e9c183 (diff)
downloadsubsurface-b62cf45d59bc953ca074df4bdc2829bbff7010f5.tar.gz
Change colors of stars if widget has focus
Some widgets on the main tab don't show any kind of focus indicator on some systems (like Mac), so it's a good thing to provide another way to show that they indeed have focus. Signed-off-by: Tomaz Canabrava <tomaz.canabrava@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui/starwidget.cpp')
-rw-r--r--qt-ui/starwidget.cpp26
1 files changed, 23 insertions, 3 deletions
diff --git a/qt-ui/starwidget.cpp b/qt-ui/starwidget.cpp
index 508d9a746..117eaf7ff 100644
--- a/qt-ui/starwidget.cpp
+++ b/qt-ui/starwidget.cpp
@@ -17,6 +17,25 @@ const QImage& StarWidget::starInactive()
return inactiveStar;
}
+QImage focusedImage(const QImage& coloredImg)
+{
+ QImage img = coloredImg;
+ for (int i = 0; i < img.width(); ++i) {
+ for (int j = 0; j < img.height(); ++j) {
+ QRgb rgb = img.pixel(i, j);
+ if (!rgb)
+ continue;
+
+ QColor c(rgb);
+ c = c.dark();
+ img.setPixel(i, j, c.rgb());
+ }
+ }
+
+ return img;
+}
+
+
int StarWidget::currentStars() const
{
return current;
@@ -44,13 +63,14 @@ void StarWidget::mouseReleaseEvent(QMouseEvent *event)
void StarWidget::paintEvent(QPaintEvent *event)
{
QPainter p(this);
- QPixmap active = QPixmap::fromImage(starActive());
+ QImage star = hasFocus() ? focusedImage(starActive()) : starActive();
+ QPixmap selected = QPixmap::fromImage(star);
QPixmap inactive = QPixmap::fromImage(starInactive());
-
const IconMetrics& metrics = defaultIconMetrics();
+
for (int i = 0; i < current; i++)
- p.drawPixmap(i * metrics.sz_small + metrics.spacing, 0, active);
+ p.drawPixmap(i * metrics.sz_small + metrics.spacing, 0, selected);
for (int i = current; i < TOTALSTARS; i++)
p.drawPixmap(i * metrics.sz_small + metrics.spacing, 0, inactive);