Add support to change the transparent color with middle click

This commit is contained in:
David Capello 2015-05-20 12:11:47 -03:00
parent 1ff4f06a69
commit 13aef4eecf
3 changed files with 40 additions and 9 deletions

View File

@ -21,6 +21,7 @@
#include "app/commands/params.h"
#include "app/console.h"
#include "app/context_access.h"
#include "app/document_api.h"
#include "app/ini_file.h"
#include "app/modules/gui.h"
#include "app/modules/palettes.h"
@ -376,8 +377,10 @@ void ColorBar::onPaletteViewIndexChange(int index, ui::MouseButtons buttons)
if ((buttons & kButtonRight) == kButtonRight)
setBgColor(color);
else
else if ((buttons & kButtonLeft) == kButtonLeft)
setFgColor(color);
else if ((buttons & kButtonMiddle) == kButtonMiddle)
setTransparentIndex(index);
m_lock = false;
}
@ -421,6 +424,29 @@ void ColorBar::setPalette(const doc::Palette* newPalette, const std::string& act
getManager()->invalidate();
}
void ColorBar::setTransparentIndex(int index)
{
try {
ContextWriter writer(UIContext::instance(), 500);
Sprite* sprite = writer.sprite();
frame_t frame = writer.frame();
if (sprite &&
sprite->pixelFormat() == IMAGE_INDEXED &&
sprite->transparentColor() != index) {
// TODO merge this code with SpritePropertiesCommand
Transaction transaction(writer.context(), "Set Transparent Color");
DocumentApi api = writer.document()->getApi(transaction);
api.setSpriteTransparentColor(sprite, index);
transaction.commit();
update_screen_for_document(writer.document());
}
}
catch (base::Exception& e) {
Console::showException(e);
}
}
void ColorBar::onPaletteViewChangeSize(int boxsize)
{
Preferences::instance().colorBar.boxSize(boxsize);

View File

@ -99,6 +99,7 @@ namespace app {
void destroyRemap();
void applyRemap(const doc::Remap& remap, const doc::Palette* newPalette, const std::string& actionText);
void setPalette(const doc::Palette* newPalette, const std::string& actionText);
void setTransparentIndex(int index);
class ScrollableView : public ui::View {
public:

View File

@ -318,19 +318,23 @@ bool PaletteView::onProcessMessage(Message* msg)
app::Color::fromIndex(idx), 255);
if (hasCapture() && (idx != m_currentEntry || msg->type() == kMouseDownMessage)) {
if (!msg->ctrlPressed())
deselect();
MouseButtons buttons = mouseMsg->buttons();
if (msg->type() == kMouseMoveMessage)
selectRange(m_rangeAnchor, idx);
else {
selectColor(idx);
m_selectedEntries[idx] = true;
if ((buttons & kButtonMiddle) == 0) {
if (!msg->ctrlPressed())
deselect();
if (msg->type() == kMouseMoveMessage)
selectRange(m_rangeAnchor, idx);
else {
selectColor(idx);
m_selectedEntries[idx] = true;
}
}
// Emit signal
if (m_delegate)
m_delegate->onPaletteViewIndexChange(idx, mouseMsg->buttons());
m_delegate->onPaletteViewIndexChange(idx, buttons);
}
}
}