这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
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
128 changes: 67 additions & 61 deletions app/src/colorpalettewidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -129,13 +129,11 @@ void ColorPaletteWidget::showContextMenu(const QPoint& pos)
void ColorPaletteWidget::addItem()
{
QSignalBlocker b(ui->colorListWidget);
QColor newColor = mEditor->color()->frontColor();

// add at bottom
int colorIndex = ui->colorListWidget->count();
QColor newColor = mEditor->color()->frontColor(false);

ColorRef ref(newColor);

const int colorIndex = ui->colorListWidget->count();
mObject->addColorAtIndex(colorIndex, ref);

refreshColorList();
Expand All @@ -155,14 +153,13 @@ void ColorPaletteWidget::replaceItem()
QSignalBlocker b(ui->colorListWidget);
int index = ui->colorListWidget->currentRow();

QColor newColor = mEditor->color()->frontColor();
QColor newColor = mEditor->color()->frontColor(false);

if (index >= 0)
{
updateItemColor(index, newColor);
emit colorChanged(newColor);
ui->colorListWidget->setCurrentRow(index);
}
if (index < 0 ) { return; }

updateItemColor(index, newColor);
emit colorNumberChanged(index);
ui->colorListWidget->setCurrentRow(index);
}

void ColorPaletteWidget::removeItem()
Expand All @@ -171,18 +168,7 @@ void ColorPaletteWidget::removeItem()
clickRemoveColorButton();
}

void ColorPaletteWidget::setColor(QColor newColor, int colorIndex)
{
QSignalBlocker b(ui->colorListWidget);
ui->colorListWidget->setCurrentRow(colorIndex);

if (colorIndex >= 0)
{
emit colorChanged(newColor);
}
}

void ColorPaletteWidget::selectColorNumber(int colorNumber)
void ColorPaletteWidget::selectColorNumber(int colorNumber) const
{
ui->colorListWidget->setCurrentRow(colorNumber);
}
Expand All @@ -204,6 +190,20 @@ void ColorPaletteWidget::refreshColorList()
ui->colorListWidget->clear();
}

int colorCount = editor()->object()->getColorCount();

for (int i = 0; i < colorCount; i++)
{
addSwatch(i);
}

selectColorNumber(editor()->color()->frontColorNumber());
updateGridUI();
update();
}

void ColorPaletteWidget::addSwatch(int colorIndex) const
{
QPixmap originalColorSwatch(mIconSize);
QPainter painter(&originalColorSwatch);
painter.drawTiledPixmap(0, 0, mIconSize.width(), mIconSize.height(), QPixmap(":/background/checkerboard.png"));
Expand All @@ -217,45 +217,39 @@ void ColorPaletteWidget::refreshColorList()
borderHighlight.setColor(QColor(255, 255, 255, 200));
borderHighlight.setDashOffset(4);

const int colorCount = mObject->getColorCount();
const ColorRef colorRef = mObject->getColor(colorIndex);
QListWidgetItem* colorItem = new QListWidgetItem(ui->colorListWidget);

for (int i = 0; i < colorCount; i++)
if (ui->colorListWidget->viewMode() != QListView::IconMode)
{
const ColorRef colorRef = mObject->getColor(i);
QListWidgetItem* colorItem = new QListWidgetItem(ui->colorListWidget);
colorItem->setText(colorRef.name);
}
else
{
colorItem->setToolTip(colorRef.name);
}

if (ui->colorListWidget->viewMode() != QListView::IconMode)
{
colorItem->setText(colorRef.name);
}
else
{
colorItem->setToolTip(colorRef.name);
}
QPixmap colorSwatch = originalColorSwatch;
QPainter swatchPainter(&colorSwatch);
swatchPainter.fillRect(0, 0, mIconSize.width(), mIconSize.height(), colorRef.color);
QPixmap colorSwatch = originalColorSwatch;
QPainter swatchPainter(&colorSwatch);
swatchPainter.fillRect(0, 0, mIconSize.width(), mIconSize.height(), colorRef.color);

QIcon swatchIcon;
swatchIcon.addPixmap(colorSwatch, QIcon::Normal);
QIcon swatchIcon;
swatchIcon.addPixmap(colorSwatch, 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(colorSwatch, QIcon::Selected);
// 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(colorSwatch, QIcon::Selected);

colorItem->setIcon(swatchIcon);
colorItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsDragEnabled);
colorItem->setIcon(swatchIcon);
colorItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsDragEnabled);

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

void ColorPaletteWidget::changeColorName(QListWidgetItem* item)
Expand Down Expand Up @@ -574,7 +568,7 @@ void ColorPaletteWidget::clickAddColorButton()
if (mIsColorDialog)
newColor = QColorDialog::getColor(prevColor.rgba(), this, QString(), QColorDialog::ShowAlphaChannel);
else
newColor = mEditor->color()->frontColor();
newColor = mEditor->color()->frontColor(false);

if (!newColor.isValid())
{
Expand All @@ -588,7 +582,7 @@ void ColorPaletteWidget::clickAddColorButton()
refreshColorList();

editor()->color()->setColorNumber(colorIndex);
editor()->color()->setColor(ref.color);
editor()->color()->setIndexedColor(ref.color);
if (mFitSwatches)
{
fitSwatchSize();
Expand All @@ -604,6 +598,14 @@ void ColorPaletteWidget::clickRemoveColorButton()
// items are not deleted by qt, it has to be done manually
// delete should happen before removing the color from from palette
// as the palette will be one ahead and crash otherwise

if (mObject->getColorCount() == 1)
{
showPaletteReminder();
break;
}

bool colorRemoved = false;
if (mObject->isColorInUse(index))
{
bool accepted = false;
Expand All @@ -614,24 +616,27 @@ void ColorPaletteWidget::clickRemoveColorButton()
{
delete item;
mObject->removeColor(index);
colorRemoved = true;
}
}
else if (mObject->getColorCount() > 1)
{
delete item;
mObject->removeColor(index);
colorRemoved = true;
}
else if (mObject->getColorCount() == 1)
{
showPaletteReminder();

if (colorRemoved) {
int newIndex = qBound(0, index-1, mObject->getColorCount() - 1);
emit colorNumberChanged(newIndex);
}
mEditor->updateCurrentFrame();
}
mMultipleSelected = false;
if (mFitSwatches)
{
fitSwatchSize();
}
mEditor->updateCurrentFrame();
}

bool ColorPaletteWidget::showPaletteWarning()
Expand Down Expand Up @@ -688,6 +693,7 @@ void ColorPaletteWidget::updateItemColor(int itemIndex, QColor newColor)
swatchIcon.addPixmap(colorSwatch, QIcon::Selected);

ui->colorListWidget->item(itemIndex)->setIcon(swatchIcon);
editor()->object()->setColor(itemIndex, newColor);

// Make sure to update grid in grid mode
if (ui->colorListWidget->viewMode() == QListView::IconMode)
Expand Down
5 changes: 2 additions & 3 deletions app/src/colorpalettewidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,16 +50,14 @@ class ColorPaletteWidget : public BaseDockWidget

int currentColorNumber();

void selectColorNumber(int);
void setColor(QColor, int);
void selectColorNumber(int) const;
void refreshColorList();

void adjustSwatches();

void showContextMenu(const QPoint&);

signals:
void colorChanged(QColor);
void colorNumberChanged(int);

protected:
Expand Down Expand Up @@ -90,6 +88,7 @@ private slots:
private:
void updateItemColor(int, QColor);
void updateGridUI();
void addSwatch(int colorIndex) const;

Ui::ColorPalette* ui = nullptr;
QActionGroup* mLayoutModeActionGroup = nullptr;
Expand Down
10 changes: 3 additions & 7 deletions app/src/mainwindow2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1405,13 +1405,13 @@ void MainWindow2::makeConnections(Editor* editor)

void MainWindow2::makeConnections(Editor* editor, ColorBox* colorBox)
{
connect(colorBox, &ColorBox::colorChanged, editor->color(), &ColorManager::setColor);
connect(colorBox, &ColorBox::colorChanged, editor->color(), &ColorManager::setFrontColor);
connect(editor->color(), &ColorManager::colorChanged, colorBox, &ColorBox::setColor);
}

void MainWindow2::makeConnections(Editor* editor, ColorInspector* colorInspector)
{
connect(colorInspector, &ColorInspector::colorChanged, editor->color(), &ColorManager::setColor);
connect(colorInspector, &ColorInspector::colorChanged, editor->color(), &ColorManager::setFrontColor);
connect(editor->color(), &ColorManager::colorChanged, colorInspector, &ColorInspector::setColor);
}

Expand Down Expand Up @@ -1489,12 +1489,8 @@ void MainWindow2::makeConnections(Editor* pEditor, ColorPaletteWidget* pColorPal
ColorManager* pColorManager = pEditor->color();
ScribbleArea* pScribbleArea = pEditor->getScribbleArea();

connect(pColorPalette, &ColorPaletteWidget::colorChanged, pColorManager, &ColorManager::setColor);
connect(pColorPalette, &ColorPaletteWidget::colorNumberChanged, pColorManager, &ColorManager::setColorNumber);

connect(pColorPalette, &ColorPaletteWidget::colorChanged, pScribbleArea, &ScribbleArea::paletteColorChanged);

connect(pColorManager, &ColorManager::colorChanged, pColorPalette, &ColorPaletteWidget::setColor);
connect(pColorManager, &ColorManager::colorNumberChanged, pScribbleArea, &ScribbleArea::paletteColorChanged);
connect(pColorManager, &ColorManager::colorNumberChanged, pColorPalette, &ColorPaletteWidget::selectColorNumber);
}

Expand Down
10 changes: 8 additions & 2 deletions core_lib/src/graphics/vector/vectorimage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1150,11 +1150,17 @@ void VectorImage::removeColor(int index)
{
for (int i = 0; i < mArea.size(); i++)
{
if (mArea[i].getColorNumber() > index) mArea[i].decreaseColorNumber();
int colorNumber = mArea[i].getColorNumber();
if (colorNumber >= index && colorNumber > 0) {
mArea[i].decreaseColorNumber();
}
}
for (int i = 0; i < mCurves.size(); i++)
{
if (mCurves[i].getColorNumber() > index) mCurves[i].decreaseColorNumber();
int colorNumber = mCurves[i].getColorNumber();
if (colorNumber >= index && colorNumber > 0) {
mCurves[i].decreaseColorNumber();
}
}
}

Expand Down
28 changes: 12 additions & 16 deletions core_lib/src/managers/colormanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,9 @@ void ColorManager::workingLayerChanged(Layer* layer)
}
}

QColor ColorManager::frontColor()
QColor ColorManager::frontColor(bool useIndexedColor)
{

if (mIsWorkingOnVectorLayer)
if (mIsWorkingOnVectorLayer && useIndexedColor)
return object()->getColor(mCurrentColorIndex).color;
else
return mCurrentFrontColor;
Expand All @@ -76,25 +75,22 @@ void ColorManager::setColorNumber(int n)
QColor currentColor = object()->getColor(mCurrentColorIndex).color;

emit colorNumberChanged(mCurrentColorIndex);
emit colorChanged(currentColor, mCurrentColorIndex);
setFrontColor(currentColor);
}

void ColorManager::setColor(const QColor& newColor)
void ColorManager::setFrontColor(const QColor& newFrontColor)
{
if (mCurrentFrontColor != newColor)
{
mCurrentFrontColor = newColor;

emit colorChanged(mCurrentFrontColor, mCurrentColorIndex);
mCurrentFrontColor = newFrontColor;
emit colorChanged(newFrontColor, mCurrentColorIndex);
}

if (mIsWorkingOnVectorLayer)
{
object()->setColor(mCurrentColorIndex, newColor);
}
}
void ColorManager::setIndexedColor(const QColor& newColor)
{
object()->setColor(mCurrentColorIndex, newColor);
emit colorChanged(newColor, mCurrentColorIndex);
}

int ColorManager::frontColorNumber()
int ColorManager::frontColorNumber() const
{
return mCurrentColorIndex;
}
13 changes: 10 additions & 3 deletions core_lib/src/managers/colormanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,17 @@ class ColorManager : public BaseManager
Status save(Object*) override;
void workingLayerChanged(Layer*) override;

QColor frontColor();
int frontColorNumber();
void setColor(const QColor& color);
/** frontColor
* @param useIndexedColor default true, will only affect vector layer
* @return Latest stored color for bitmap or indexed color for vector, unless useIndexedColor is false
*/
QColor frontColor(bool useIndexedColor = true);
void setFrontColor(const QColor& newFrontColor);

/** Set color for current index */
void setIndexedColor(const QColor& newColor);
void setColorNumber(int n);
int frontColorNumber() const;

signals:
void colorChanged(QColor, int); // new color and color index
Expand Down
2 changes: 1 addition & 1 deletion core_lib/src/tool/eyedroppertool.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ void EyedropperTool::updateFrontColor()
QColor pickedColor = getBitmapColor(static_cast<LayerBitmap*>(layer));
if (pickedColor.isValid())
{
mEditor->color()->setColor(pickedColor);
mEditor->color()->setFrontColor(pickedColor);
}
}
else if (layer->type() == Layer::VECTOR)
Expand Down
Loading