Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve color palette selection behavior #1028

Merged
merged 2 commits into from
Aug 2, 2018
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 65 additions & 30 deletions app/src/colorpalettewidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,13 @@ void ColorPaletteWidget::refreshColorList()
swatchPainter.drawTiledPixmap(0, 0, mIconSize.width(), mIconSize.height(), QPixmap(":/background/checkerboard.png"));
swatchPainter.end();
QPixmap colourSwatch;
QPen borderShadow(QColor(0, 0, 0, 200), 1, Qt::DotLine, Qt::FlatCap, Qt::MiterJoin);
QVector<qreal> dashPattern;
dashPattern << 4 << 4;
borderShadow.setDashPattern(dashPattern);
QPen borderHighlight(borderShadow);
borderHighlight.setColor(QColor(255, 255, 255, 200));
borderHighlight.setDashOffset(4);

int colourCount = editor()->object()->getColourCount();

Expand All @@ -204,12 +211,26 @@ void ColorPaletteWidget::refreshColorList()
colourSwatch = originalColourSwatch;
swatchPainter.begin(&colourSwatch);
swatchPainter.fillRect(0, 0, mIconSize.width(), mIconSize.height(), colourRef.colour);

QIcon swatchIcon;
swatchIcon.addPixmap(colourSwatch, QIcon::Normal);

// Draw selection border
if(ui->colorListWidget->viewMode() == QListView::IconMode) {
swatchPainter.setPen(borderHighlight);
swatchPainter.drawRect(0, 0, mIconSize.width() - 1, mIconSize.height() - 1);
swatchPainter.setPen(borderShadow);
swatchPainter.drawRect(0, 0, mIconSize.width() - 1, mIconSize.height() - 1);
}
swatchIcon.addPixmap(colourSwatch, QIcon::Selected);

colourItem->setIcon(swatchIcon);
swatchPainter.end();
colourItem->setIcon(colourSwatch);
colourItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable);

ui->colorListWidget->addItem(colourItem);
}
updateGridUI();
update();
}

Expand Down Expand Up @@ -316,7 +337,8 @@ void ColorPaletteWidget::setGridMode()
ui->colorListWidget->setViewMode(QListView::IconMode);
ui->colorListWidget->setMovement(QListView::Static); // TODO: update swatch index on move
ui->colorListWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
ui->colorListWidget->setGridSize(mIconSize);
ui->colorListWidget->setGridSize(QSize(mIconSize.width() + 1, mIconSize.height() + 1));

updateUI();

QSettings settings(PENCIL2D, PENCIL2D);
Expand All @@ -325,28 +347,7 @@ void ColorPaletteWidget::setGridMode()

void ColorPaletteWidget::resizeEvent(QResizeEvent* event)
{
if (ui->colorListWidget->viewMode() == QListView::IconMode)
{
// Find the value to divide with
for (int i = 1; i < 75; i++)
{
int size = (ui->colorListWidget->width() - 18) / i; // subtract scrollbar width
if (size >= mIconSize.width() && size <= mIconSize.width() + 8)
{
stepper = size;
}
}
QSize tempSize = QSize(stepper, mIconSize.height());

ui->colorListWidget->setIconSize(QSize(tempSize.width(), mIconSize.height()));
ui->colorListWidget->setGridSize(QSize(tempSize.width(), mIconSize.height()));
mIconSize.setWidth(mIconSize.width());
}
else
{
ui->colorListWidget->setIconSize(mIconSize);
ui->colorListWidget->setGridSize(QSize(-1, -1));
}
updateUI();
QWidget::resizeEvent(event);
}

Expand Down Expand Up @@ -388,12 +389,26 @@ void ColorPaletteWidget::setSwatchSizeLarge()

void ColorPaletteWidget::updateGridUI()
{
if (ui->colorListWidget->viewMode() == QListView::IconMode)
ui->colorListWidget->setGridSize(mIconSize);
else
ui->colorListWidget->setGridSize(QSize(-1, -1));
if (ui->colorListWidget->viewMode() == QListView::IconMode) {
// Find the value to divide with
for (int i = 1; i < 75; i++)
{
int size = (ui->colorListWidget->width() - 18) / i; // subtract scrollbar width
if (size >= mIconSize.width() && size <= mIconSize.width() + 8)
{
stepper = size;
}
}
QSize tempSize = QSize(stepper, mIconSize.height());

ui->colorListWidget->setIconSize(mIconSize);
ui->colorListWidget->setIconSize(QSize(tempSize.width(), mIconSize.height()));
ui->colorListWidget->setGridSize(QSize(tempSize.width(), mIconSize.height() + 2));
mIconSize.setWidth(mIconSize.width());
}
else {
ui->colorListWidget->setIconSize(mIconSize);
ui->colorListWidget->setGridSize(QSize(-1, -1));
}
}

QString ColorPaletteWidget::getDefaultColorName(QColor c)
Expand Down Expand Up @@ -558,7 +573,27 @@ void ColorPaletteWidget::updateItemColor(int itemIndex, QColor newColor)
swatchPainter.drawTiledPixmap(0, 0, mIconSize.width(), mIconSize.height(), QPixmap(":/background/checkerboard.png"));
swatchPainter.fillRect(0, 0, mIconSize.width(), mIconSize.height(), newColor);

ui->colorListWidget->item(itemIndex)->setIcon(colourSwatch);
QPen borderShadow(QColor(0, 0, 0, 200), 1, Qt::DotLine, Qt::FlatCap, Qt::MiterJoin);
QVector<qreal> dashPattern;
dashPattern << 4 << 4;
borderShadow.setDashPattern(dashPattern);
QPen borderHighlight(borderShadow);
borderHighlight.setColor(QColor(255, 255, 255, 200));
borderHighlight.setDashOffset(4);

QIcon swatchIcon;
swatchIcon.addPixmap(colourSwatch, QIcon::Normal);

if(ui->colorListWidget->viewMode() == QListView::IconMode) {
// Draw selection border
swatchPainter.setPen(borderHighlight);
swatchPainter.drawRect(0, 0, mIconSize.width() - 1, mIconSize.height() - 1);
swatchPainter.setPen(borderShadow);
swatchPainter.drawRect(0, 0, mIconSize.width() - 1, mIconSize.height() - 1);
}
swatchIcon.addPixmap(colourSwatch, QIcon::Selected);

ui->colorListWidget->item(itemIndex)->setIcon(swatchIcon);

// Make sure to update grid in grid mode
if (ui->colorListWidget->viewMode() == QListView::IconMode)
Expand Down