mirror of
https://github.com/aseprite/aseprite.git
synced 2025-02-14 09:41:19 +00:00
Add new "Image Color" parameter in brush slots (fix #1259)
This commit is contained in:
parent
ae2acf62f7
commit
1ffbd4c343
@ -170,6 +170,7 @@
|
||||
<option id="brush_angle" type="bool" default="true" />
|
||||
<option id="fg_color" type="bool" default="false" />
|
||||
<option id="bg_color" type="bool" default="false" />
|
||||
<option id="image_color" type="bool" default="true" />
|
||||
<option id="ink_type" type="bool" default="true" />
|
||||
<option id="ink_opacity" type="bool" default="true" />
|
||||
<option id="shade" type="bool" default="true" />
|
||||
|
@ -1,5 +1,5 @@
|
||||
<!-- ASEPRITE -->
|
||||
<!-- Copyright (C) 2015 by David Capello -->
|
||||
<!-- Copyright (C) 2015-2016 by David Capello -->
|
||||
<gui>
|
||||
<vbox id="brush_slot_params">
|
||||
<grid columns="2">
|
||||
@ -15,6 +15,7 @@
|
||||
<buttonset id="color_params" columns="2" multiple="true">
|
||||
<item id="fg_color" text="Foreground" />
|
||||
<item id="bg_color" text="Background" />
|
||||
<item id="image_color" text="Image Color" hspan="2" />
|
||||
</buttonset>
|
||||
|
||||
<label text="Ink:" />
|
||||
|
@ -382,6 +382,11 @@ void AppBrushes::load(const std::string& filename)
|
||||
flags |= int(BrushSlot::Flags::PixelPerfect);
|
||||
}
|
||||
|
||||
// Image color (enabled by default for backward compatibility)
|
||||
if (!brushElem->Attribute("imagecolor") ||
|
||||
bool_attr_is_true(brushElem, "imagecolor"))
|
||||
flags |= int(BrushSlot::Flags::ImageColor);
|
||||
|
||||
if (flags != 0)
|
||||
flags |= int(BrushSlot::Flags::Locked);
|
||||
|
||||
@ -441,6 +446,11 @@ void AppBrushes::save(const std::string& filename) const
|
||||
save_xml_image(&maskElem, slot.brush()->maskBitmap());
|
||||
brushElem.InsertEndChild(maskElem);
|
||||
}
|
||||
|
||||
// Image color
|
||||
brushElem.SetAttribute(
|
||||
"imagecolor",
|
||||
(flags & int(BrushSlot::Flags::ImageColor)) ? "true": "false");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2001-2015 David Capello
|
||||
// Copyright (C) 2001-2016 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
// the End-User License Agreement for Aseprite.
|
||||
@ -28,7 +28,8 @@ public:
|
||||
InkType = 0x0040,
|
||||
InkOpacity = 0x0080,
|
||||
Shade = 0x0100,
|
||||
PixelPerfect = 0x0200
|
||||
PixelPerfect = 0x0200,
|
||||
ImageColor = 0x0400,
|
||||
};
|
||||
|
||||
BrushSlot(Flags flags = Flags(0),
|
||||
|
@ -150,8 +150,17 @@ void NewBrushCommand::createBrush(const Site& site, const Mask* mask)
|
||||
brush->setPatternOrigin(mask->bounds().origin());
|
||||
|
||||
ContextBar* ctxBar = App::instance()->contextBar();
|
||||
int flags = int(BrushSlot::Flags::BrushType);
|
||||
{
|
||||
// TODO merge this code with ContextBar::createBrushSlotFromPreferences()?
|
||||
auto& pref = Preferences::instance();
|
||||
auto& saveBrush = pref.saveBrush;
|
||||
if (saveBrush.imageColor())
|
||||
flags |= int(BrushSlot::Flags::ImageColor);
|
||||
}
|
||||
|
||||
int slot = App::instance()->brushes().addBrushSlot(
|
||||
BrushSlot(BrushSlot::Flags::BrushType, brush));
|
||||
BrushSlot(BrushSlot::Flags(flags), brush));
|
||||
ctxBar->setActiveBrush(brush);
|
||||
|
||||
// Get the shortcut for this brush and show it to the user
|
||||
|
@ -186,6 +186,7 @@ private:
|
||||
params.brushAngle()->setSelected(brush.hasFlag(BrushSlot::Flags::BrushAngle));
|
||||
params.fgColor()->setSelected(brush.hasFlag(BrushSlot::Flags::FgColor));
|
||||
params.bgColor()->setSelected(brush.hasFlag(BrushSlot::Flags::BgColor));
|
||||
params.imageColor()->setSelected(brush.hasFlag(BrushSlot::Flags::ImageColor));
|
||||
params.inkType()->setSelected(brush.hasFlag(BrushSlot::Flags::InkType));
|
||||
params.inkOpacity()->setSelected(brush.hasFlag(BrushSlot::Flags::InkOpacity));
|
||||
params.shade()->setSelected(brush.hasFlag(BrushSlot::Flags::Shade));
|
||||
@ -204,6 +205,7 @@ private:
|
||||
if (params.brushAngle()->isSelected()) flags |= int(BrushSlot::Flags::BrushAngle);
|
||||
if (params.fgColor()->isSelected()) flags |= int(BrushSlot::Flags::FgColor);
|
||||
if (params.bgColor()->isSelected()) flags |= int(BrushSlot::Flags::BgColor);
|
||||
if (params.imageColor()->isSelected()) flags |= int(BrushSlot::Flags::ImageColor);
|
||||
if (params.inkType()->isSelected()) flags |= int(BrushSlot::Flags::InkType);
|
||||
if (params.inkOpacity()->isSelected()) flags |= int(BrushSlot::Flags::InkOpacity);
|
||||
if (params.shade()->isSelected()) flags |= int(BrushSlot::Flags::Shade);
|
||||
@ -291,6 +293,7 @@ private:
|
||||
params.brushAngle()->setSelected(saveBrush.brushAngle());
|
||||
params.fgColor()->setSelected(saveBrush.fgColor());
|
||||
params.bgColor()->setSelected(saveBrush.bgColor());
|
||||
params.imageColor()->setSelected(saveBrush.imageColor());
|
||||
params.inkType()->setSelected(saveBrush.inkType());
|
||||
params.inkOpacity()->setSelected(saveBrush.inkOpacity());
|
||||
params.shade()->setSelected(saveBrush.shade());
|
||||
@ -310,6 +313,8 @@ private:
|
||||
saveBrush.fgColor(params.fgColor()->isSelected());
|
||||
if (saveBrush.bgColor() != params.bgColor()->isSelected())
|
||||
saveBrush.bgColor(params.bgColor()->isSelected());
|
||||
if (saveBrush.imageColor() != params.imageColor()->isSelected())
|
||||
saveBrush.imageColor(params.imageColor()->isSelected());
|
||||
if (saveBrush.inkType() != params.inkType()->isSelected())
|
||||
saveBrush.inkType(params.inkType()->isSelected());
|
||||
if (saveBrush.inkOpacity() != params.inkOpacity()->isSelected())
|
||||
|
@ -1795,6 +1795,25 @@ void ContextBar::setActiveBrushBySlot(tools::Tool* tool, int slot)
|
||||
if (brush.hasFlag(BrushSlot::Flags::BgColor))
|
||||
pref.colorBar.bgColor(brush.bgColor());
|
||||
|
||||
// If the image/stamp brush doesn't have the "ImageColor" flag, it
|
||||
// means that we have to change the image color to the current
|
||||
// "foreground color".
|
||||
if (brush.brush() &&
|
||||
brush.brush()->type() == doc::kImageBrushType &&
|
||||
!brush.hasFlag(BrushSlot::Flags::ImageColor)) {
|
||||
auto pixelFormat = brush.brush()->image()->pixelFormat();
|
||||
|
||||
brush.brush()->setImageColor(
|
||||
Brush::ImageColor::MainColor,
|
||||
color_utils::color_for_image(pref.colorBar.fgColor(),
|
||||
pixelFormat));
|
||||
|
||||
brush.brush()->setImageColor(
|
||||
Brush::ImageColor::BackgroundColor,
|
||||
color_utils::color_for_image(pref.colorBar.bgColor(),
|
||||
pixelFormat));
|
||||
}
|
||||
|
||||
if (brush.hasFlag(BrushSlot::Flags::InkType))
|
||||
setInkType(brush.inkType());
|
||||
|
||||
@ -1884,6 +1903,7 @@ BrushSlot ContextBar::createBrushSlotFromPreferences()
|
||||
if (saveBrush.brushAngle()) flags |= int(BrushSlot::Flags::BrushAngle);
|
||||
if (saveBrush.fgColor()) flags |= int(BrushSlot::Flags::FgColor);
|
||||
if (saveBrush.bgColor()) flags |= int(BrushSlot::Flags::BgColor);
|
||||
if (saveBrush.imageColor()) flags |= int(BrushSlot::Flags::ImageColor);
|
||||
if (saveBrush.inkType()) flags |= int(BrushSlot::Flags::InkType);
|
||||
if (saveBrush.inkOpacity()) flags |= int(BrushSlot::Flags::InkOpacity);
|
||||
if (saveBrush.shade()) flags |= int(BrushSlot::Flags::Shade);
|
||||
|
Loading…
x
Reference in New Issue
Block a user