diff --git a/libs/ui/KisNodeDelegate.cpp b/libs/ui/KisNodeDelegate.cpp --- a/libs/ui/KisNodeDelegate.cpp +++ b/libs/ui/KisNodeDelegate.cpp @@ -268,6 +268,8 @@ { KisNodeViewColorScheme scm; + + const int thumbSize = scm.thumbnailSize(); const qreal oldOpacity = p->opacity(); // remember previous opacity diff --git a/libs/ui/KisNodeView.cpp b/libs/ui/KisNodeView.cpp --- a/libs/ui/KisNodeView.cpp +++ b/libs/ui/KisNodeView.cpp @@ -194,7 +194,6 @@ return QAbstractItemView::selectionCommand(index, event); } - QRect KisNodeView::visualRect(const QModelIndex &index) const { QRect rc = QTreeView::visualRect(index); diff --git a/libs/ui/kis_config.h b/libs/ui/kis_config.h --- a/libs/ui/kis_config.h +++ b/libs/ui/kis_config.h @@ -399,6 +399,11 @@ QString toolbarSlider(int sliderNumber, bool defaultValue = false) const; void setToolbarSlider(int sliderNumber, const QString &slider); + + int layerThumbnailSize(bool defaultValue = false) const; + void setLayerThumbnailSize(int size); + + bool sliderLabels(bool defaultValue = false) const; void setSliderLabels(bool enabled); diff --git a/libs/ui/kis_config.cc b/libs/ui/kis_config.cc --- a/libs/ui/kis_config.cc +++ b/libs/ui/kis_config.cc @@ -1434,6 +1434,16 @@ m_cfg.writeEntry(QString("toolbarslider_%1").arg(sliderNumber), slider); } +int KisConfig::layerThumbnailSize(bool defaultValue) const +{ + return (defaultValue ? 20 : m_cfg.readEntry("layerThumbnailSize", 20)); +} + +void KisConfig::setLayerThumbnailSize(int size) +{ + m_cfg.writeEntry("layerThumbnailSize", size); +} + bool KisConfig::sliderLabels(bool defaultValue) const { return (defaultValue ? true : m_cfg.readEntry("sliderLabels", true)); diff --git a/libs/ui/kis_node_view_color_scheme.h b/libs/ui/kis_node_view_color_scheme.h --- a/libs/ui/kis_node_view_color_scheme.h +++ b/libs/ui/kis_node_view_color_scheme.h @@ -41,7 +41,7 @@ int visibilitySize() const; int visibilityMargin() const; - int thumbnailSize() const; + int thumbnailSize(); int thumbnailMargin() const; int decorationSize() const; @@ -54,13 +54,13 @@ int border() const; - int rowHeight() const; + int rowHeight(); int visibilityColumnWidth() const; - int indentation() const; + int indentation(); - QRect relThumbnailRect() const; + QRect relThumbnailRect(); QRect relDecorationRect() const; - QRect relExpandButtonRect() const; + QRect relExpandButtonRect(); QColor colorLabel(int index) const; QVector allColorLabels() const; diff --git a/libs/ui/kis_node_view_color_scheme.cpp b/libs/ui/kis_node_view_color_scheme.cpp --- a/libs/ui/kis_node_view_color_scheme.cpp +++ b/libs/ui/kis_node_view_color_scheme.cpp @@ -25,6 +25,7 @@ #include #include +#include Q_GLOBAL_STATIC(KisNodeViewColorScheme, s_instance) struct KisNodeViewColorScheme::Private @@ -86,9 +87,10 @@ } -int KisNodeViewColorScheme::thumbnailSize() const +int KisNodeViewColorScheme::thumbnailSize() { - return 20; + KisConfig cfg(true); + return cfg.layerThumbnailSize(false); } int KisNodeViewColorScheme::thumbnailMargin() const @@ -128,7 +130,7 @@ return 1; } -int KisNodeViewColorScheme::rowHeight() const +int KisNodeViewColorScheme::rowHeight() { return border() + 2 * thumbnailMargin() + thumbnailSize(); } @@ -140,14 +142,14 @@ border(); } -int KisNodeViewColorScheme::indentation() const +int KisNodeViewColorScheme::indentation() { return 2 * thumbnailMargin() + thumbnailSize() + border(); } -QRect KisNodeViewColorScheme::relThumbnailRect() const +QRect KisNodeViewColorScheme::relThumbnailRect() { return QRect(-indentation(), border(), @@ -163,7 +165,7 @@ decorationSize()); } -QRect KisNodeViewColorScheme::relExpandButtonRect() const +QRect KisNodeViewColorScheme::relExpandButtonRect() { const int newY = rowHeight() - decorationMargin() - decorationSize(); QRect rc = relDecorationRect(); diff --git a/plugins/dockers/defaultdockers/kis_layer_box.h b/plugins/dockers/defaultdockers/kis_layer_box.h --- a/plugins/dockers/defaultdockers/kis_layer_box.h +++ b/plugins/dockers/defaultdockers/kis_layer_box.h @@ -40,6 +40,7 @@ #include "KisViewManager.h" #include "kis_mainwindow_observer.h" #include "kis_signal_compressor.h" +#include class QModelIndex; @@ -127,6 +128,8 @@ void updateAvailableLabels(); void updateLayerFiltering(); + void slotUpdateThumbnailIconSize(); + // Opacity keyframing void slotKeyframeChannelAdded(KisKeyframeChannel *channel); @@ -160,6 +163,9 @@ KisAction* m_selectOpaque; KisSignalCompressor m_thumbnailCompressor; KisSignalCompressor m_colorLabelCompressor; + KisSignalCompressor m_thumbnailSizeCompressor; + + QSlider* thumbnailSizeSlider; KisNodeSP m_activeNode; QPointer m_opacityChannel; diff --git a/plugins/dockers/defaultdockers/kis_layer_box.cpp b/plugins/dockers/defaultdockers/kis_layer_box.cpp --- a/plugins/dockers/defaultdockers/kis_layer_box.cpp +++ b/plugins/dockers/defaultdockers/kis_layer_box.cpp @@ -155,8 +155,9 @@ , m_wdgLayerBox(new Ui_WdgLayerBox) , m_thumbnailCompressor(500, KisSignalCompressor::FIRST_INACTIVE) , m_colorLabelCompressor(900, KisSignalCompressor::FIRST_INACTIVE) + , m_thumbnailSizeCompressor(100, KisSignalCompressor::FIRST_INACTIVE) { - KisConfig cfg(true); + KisConfig cfg(false); QWidget* mainWidget = new QWidget(this); setWidget(mainWidget); @@ -256,6 +257,40 @@ connect(&m_thumbnailCompressor, SIGNAL(timeout()), SLOT(updateThumbnail())); connect(&m_colorLabelCompressor, SIGNAL(timeout()), SLOT(updateAvailableLabels())); + + + + // set up the configure menu for changing thumbnail size + QMenu* configureMenu = new QMenu(this); + configureMenu->setStyleSheet("margin: 6px"); + configureMenu->addSection(i18n("Thumbnail Size")); + + m_wdgLayerBox->configureLayerDockerToolbar->setMenu(configureMenu); + m_wdgLayerBox->configureLayerDockerToolbar->setIcon(KisIconUtils::loadIcon("configure")); + m_wdgLayerBox->configureLayerDockerToolbar->setIconSize(QSize(13, 13)); + + m_wdgLayerBox->configureLayerDockerToolbar->setPopupMode(QToolButton::InstantPopup); + + + // add horizontal slider + thumbnailSizeSlider = new QSlider(this); + thumbnailSizeSlider->setOrientation(Qt::Horizontal); + thumbnailSizeSlider->setRange(20, 80); + + thumbnailSizeSlider->setValue(cfg.layerThumbnailSize(false)); // grab this from the kritarc + + thumbnailSizeSlider->setMinimumHeight(20); + thumbnailSizeSlider->setMinimumWidth(40); + thumbnailSizeSlider->setTickInterval(5); + + + QWidgetAction *sliderAction= new QWidgetAction(this); + sliderAction->setDefaultWidget(thumbnailSizeSlider); + configureMenu->addAction(sliderAction); + + + connect(thumbnailSizeSlider, SIGNAL(sliderMoved(int)), &m_thumbnailSizeCompressor, SLOT(start())); + connect(&m_thumbnailSizeCompressor, SIGNAL(timeout()), SLOT(slotUpdateThumbnailIconSize())); } KisLayerBox::~KisLayerBox() @@ -1008,5 +1043,16 @@ m_wdgLayerBox->listLayers->slotUpdateIcons(); } +void KisLayerBox::slotUpdateThumbnailIconSize() +{ + KisConfig cfg(false); + cfg.setLayerThumbnailSize(thumbnailSizeSlider->value()); + + // this is a hack to force the layers list to update its display and + // re-layout all the layers with the new thumbnail size + resize(this->width()+1, this->height()+1); + resize(this->width()-1, this->height()-1); +} + #include "moc_kis_layer_box.cpp" diff --git a/plugins/dockers/defaultdockers/wdglayerbox.ui b/plugins/dockers/defaultdockers/wdglayerbox.ui --- a/plugins/dockers/defaultdockers/wdglayerbox.ui +++ b/plugins/dockers/defaultdockers/wdglayerbox.ui @@ -6,8 +6,8 @@ 0 0 - 238 - 83 + 220 + 384 @@ -62,7 +62,7 @@ - + 0 @@ -92,6 +92,13 @@ + + + + ... + + +