# # # patch "res/forms/workspace_floater.ui" # from [fcc18234e572f930fe1da8a69c86657da94c34e8] # to [165989f017be406ba809198e0a3f08a7e5ebed5f] # # patch "src/util/IconProvider.cpp" # from [2a1d882189b0e4a1b047fbf5c2d7cf5ab36e99b1] # to [1ac69c33c4dcd6da77d0411c5ee3cf3688a41a43] # ============================================================ --- res/forms/workspace_floater.ui fcc18234e572f930fe1da8a69c86657da94c34e8 +++ res/forms/workspace_floater.ui 165989f017be406ba809198e0a3f08a7e5ebed5f @@ -5,8 +5,8 @@ 0 0 - 340 - 530 + 448 + 684 @@ -14,17 +14,14 @@ - - - - 0 - 0 - + + + QFrame::Panel - - + + QFrame::Sunken - + ============================================================ --- src/util/IconProvider.cpp 2a1d882189b0e4a1b047fbf5c2d7cf5ab36e99b1 +++ src/util/IconProvider.cpp 1ac69c33c4dcd6da77d0411c5ee3cf3688a41a43 @@ -38,14 +38,21 @@ IconProvider::IconProvider() IconProvider::IconProvider() { - QStyle *style = QApplication::style(); + QStyle * style = QApplication::style(); + int iconSize = style->pixelMetric(QStyle::PM_ListViewIconSize); // default icons if no state matches - fileIcons["default"] = QIcon(style->standardPixmap(QStyle::SP_FileIcon)); - folderIcons["default"] = QIcon(style->standardPixmap(QStyle::SP_DirClosedIcon)); - folderIcons["default"].addPixmap(style->standardPixmap(QStyle::SP_DirOpenIcon), - QIcon::Active, QIcon::On); + fileIcons["default"] = QIcon(style->standardIcon(QStyle::SP_FileIcon)); + folderIcons["default"] = QIcon(style->standardIcon(QStyle::SP_DirClosedIcon)); + + folderIcons["default"].addPixmap( + style->standardIcon(QStyle::SP_DirOpenIcon).pixmap(iconSize), + QIcon::Active, QIcon::On + ); + + folderIcons["cdup"] = QIcon(style->standardIcon(QStyle::SP_FileDialogToParent)); + // node overlay states QMap states; states["added"] = QString(":/overlays/added.png"); @@ -59,10 +66,12 @@ IconProvider::IconProvider() states["renamed"] = QString(":/overlays/renamed.png"); states["unknown"] = QString(":/overlays/unknown.png"); - // special overlay states - states["cdup"] = QString(":/overlays/cdup.png"); + // FIXME: remove this + //states["cdup"] = QString(":/overlays/cdup.png"); QMapIterator i(states); + Qt::AspectRatioMode ratio = Qt::KeepAspectRatio; + Qt::TransformationMode transform = Qt::SmoothTransformation; while (i.hasNext()) { @@ -72,41 +81,63 @@ IconProvider::IconProvider() // the basic icons have to be recreated for each state // since we later paint on them - QImage fileImage(style->standardPixmap(QStyle::SP_FileIcon).toImage()); - QImage folderImageClosed(style->standardPixmap(QStyle::SP_DirClosedIcon).toImage()); - QImage folderImageOpened(style->standardPixmap(QStyle::SP_DirOpenIcon).toImage()); + QImage fileImage( + fileIcons["default"]. + pixmap(iconSize). + toImage() + ); + QImage folderImageClosed( + folderIcons["default"]. + pixmap(iconSize, QIcon::Normal, QIcon::Off). + toImage() + ); + QImage folderImageOpened( + folderIcons["default"]. + pixmap(iconSize, QIcon::Normal, QIcon::On). + toImage() + ); // note: the overlays are scaled to fit the different icon sizes // on different platforms / with different stylings, so the overlay // always perfectly fits the actual image + // // file icon + // QPainter filePainter(&fileImage); if (i.key() == "ignored") + { filePainter.setCompositionMode(QPainter::CompositionMode_SourceAtop); + } filePainter.drawImage( - 0, 0, - overlay.scaled(fileImage.width(), fileImage.height()) + 0, 0, overlay.scaled(fileImage.size(), ratio, transform) ); filePainter.end(); fileIcons[i.key()] = QIcon(QPixmap::fromImage(fileImage)); + // // folder icons + // QPainter folderPainter1(&folderImageClosed); if (i.key() == "ignored") + { folderPainter1.setCompositionMode(QPainter::CompositionMode_SourceAtop); + } + folderPainter1.drawImage( - 0, 0, - overlay.scaled(folderImageClosed.width(), folderImageClosed.height()) + 0, 0, overlay.scaled(folderImageClosed.size(), ratio, transform) ); folderPainter1.end(); + QPainter folderPainter2(&folderImageOpened); if (i.key() == "ignored") + { folderPainter2.setCompositionMode(QPainter::CompositionMode_SourceAtop); + } + folderPainter2.drawImage( - 0, 0, - overlay.scaled(folderImageOpened.width(), folderImageOpened.height()) + 0, 0, overlay.scaled(folderImageOpened.size(), ratio, transform) ); folderPainter2.end();