diff options
author | Tomaz Canabrava <tomaz.canabrava@gmail.com> | 2015-08-06 11:57:06 -0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2015-08-15 05:00:30 -0700 |
commit | b62cf45d59bc953ca074df4bdc2829bbff7010f5 (patch) | |
tree | 20b14e81bcf4eb48c4754a7d1085148f12b9f2d3 /qt-ui/starwidget.cpp | |
parent | 25273a3912ab579f594b377b9b15d805d6e9c183 (diff) | |
download | subsurface-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.cpp | 26 |
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); |