mirror of
https://github.com/aseprite/aseprite.git
synced 2025-02-18 21:40:46 +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="brush_angle" type="bool" default="true" />
|
||||||
<option id="fg_color" type="bool" default="false" />
|
<option id="fg_color" type="bool" default="false" />
|
||||||
<option id="bg_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_type" type="bool" default="true" />
|
||||||
<option id="ink_opacity" type="bool" default="true" />
|
<option id="ink_opacity" type="bool" default="true" />
|
||||||
<option id="shade" type="bool" default="true" />
|
<option id="shade" type="bool" default="true" />
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!-- ASEPRITE -->
|
<!-- ASEPRITE -->
|
||||||
<!-- Copyright (C) 2015 by David Capello -->
|
<!-- Copyright (C) 2015-2016 by David Capello -->
|
||||||
<gui>
|
<gui>
|
||||||
<vbox id="brush_slot_params">
|
<vbox id="brush_slot_params">
|
||||||
<grid columns="2">
|
<grid columns="2">
|
||||||
@ -15,6 +15,7 @@
|
|||||||
<buttonset id="color_params" columns="2" multiple="true">
|
<buttonset id="color_params" columns="2" multiple="true">
|
||||||
<item id="fg_color" text="Foreground" />
|
<item id="fg_color" text="Foreground" />
|
||||||
<item id="bg_color" text="Background" />
|
<item id="bg_color" text="Background" />
|
||||||
|
<item id="image_color" text="Image Color" hspan="2" />
|
||||||
</buttonset>
|
</buttonset>
|
||||||
|
|
||||||
<label text="Ink:" />
|
<label text="Ink:" />
|
||||||
|
@ -382,6 +382,11 @@ void AppBrushes::load(const std::string& filename)
|
|||||||
flags |= int(BrushSlot::Flags::PixelPerfect);
|
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)
|
if (flags != 0)
|
||||||
flags |= int(BrushSlot::Flags::Locked);
|
flags |= int(BrushSlot::Flags::Locked);
|
||||||
|
|
||||||
@ -441,6 +446,11 @@ void AppBrushes::save(const std::string& filename) const
|
|||||||
save_xml_image(&maskElem, slot.brush()->maskBitmap());
|
save_xml_image(&maskElem, slot.brush()->maskBitmap());
|
||||||
brushElem.InsertEndChild(maskElem);
|
brushElem.InsertEndChild(maskElem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Image color
|
||||||
|
brushElem.SetAttribute(
|
||||||
|
"imagecolor",
|
||||||
|
(flags & int(BrushSlot::Flags::ImageColor)) ? "true": "false");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2001-2015 David Capello
|
// Copyright (C) 2001-2016 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
@ -28,7 +28,8 @@ public:
|
|||||||
InkType = 0x0040,
|
InkType = 0x0040,
|
||||||
InkOpacity = 0x0080,
|
InkOpacity = 0x0080,
|
||||||
Shade = 0x0100,
|
Shade = 0x0100,
|
||||||
PixelPerfect = 0x0200
|
PixelPerfect = 0x0200,
|
||||||
|
ImageColor = 0x0400,
|
||||||
};
|
};
|
||||||
|
|
||||||
BrushSlot(Flags flags = Flags(0),
|
BrushSlot(Flags flags = Flags(0),
|
||||||
|
@ -150,8 +150,17 @@ void NewBrushCommand::createBrush(const Site& site, const Mask* mask)
|
|||||||
brush->setPatternOrigin(mask->bounds().origin());
|
brush->setPatternOrigin(mask->bounds().origin());
|
||||||
|
|
||||||
ContextBar* ctxBar = App::instance()->contextBar();
|
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(
|
int slot = App::instance()->brushes().addBrushSlot(
|
||||||
BrushSlot(BrushSlot::Flags::BrushType, brush));
|
BrushSlot(BrushSlot::Flags(flags), brush));
|
||||||
ctxBar->setActiveBrush(brush);
|
ctxBar->setActiveBrush(brush);
|
||||||
|
|
||||||
// Get the shortcut for this brush and show it to the user
|
// 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.brushAngle()->setSelected(brush.hasFlag(BrushSlot::Flags::BrushAngle));
|
||||||
params.fgColor()->setSelected(brush.hasFlag(BrushSlot::Flags::FgColor));
|
params.fgColor()->setSelected(brush.hasFlag(BrushSlot::Flags::FgColor));
|
||||||
params.bgColor()->setSelected(brush.hasFlag(BrushSlot::Flags::BgColor));
|
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.inkType()->setSelected(brush.hasFlag(BrushSlot::Flags::InkType));
|
||||||
params.inkOpacity()->setSelected(brush.hasFlag(BrushSlot::Flags::InkOpacity));
|
params.inkOpacity()->setSelected(brush.hasFlag(BrushSlot::Flags::InkOpacity));
|
||||||
params.shade()->setSelected(brush.hasFlag(BrushSlot::Flags::Shade));
|
params.shade()->setSelected(brush.hasFlag(BrushSlot::Flags::Shade));
|
||||||
@ -204,6 +205,7 @@ private:
|
|||||||
if (params.brushAngle()->isSelected()) flags |= int(BrushSlot::Flags::BrushAngle);
|
if (params.brushAngle()->isSelected()) flags |= int(BrushSlot::Flags::BrushAngle);
|
||||||
if (params.fgColor()->isSelected()) flags |= int(BrushSlot::Flags::FgColor);
|
if (params.fgColor()->isSelected()) flags |= int(BrushSlot::Flags::FgColor);
|
||||||
if (params.bgColor()->isSelected()) flags |= int(BrushSlot::Flags::BgColor);
|
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.inkType()->isSelected()) flags |= int(BrushSlot::Flags::InkType);
|
||||||
if (params.inkOpacity()->isSelected()) flags |= int(BrushSlot::Flags::InkOpacity);
|
if (params.inkOpacity()->isSelected()) flags |= int(BrushSlot::Flags::InkOpacity);
|
||||||
if (params.shade()->isSelected()) flags |= int(BrushSlot::Flags::Shade);
|
if (params.shade()->isSelected()) flags |= int(BrushSlot::Flags::Shade);
|
||||||
@ -291,6 +293,7 @@ private:
|
|||||||
params.brushAngle()->setSelected(saveBrush.brushAngle());
|
params.brushAngle()->setSelected(saveBrush.brushAngle());
|
||||||
params.fgColor()->setSelected(saveBrush.fgColor());
|
params.fgColor()->setSelected(saveBrush.fgColor());
|
||||||
params.bgColor()->setSelected(saveBrush.bgColor());
|
params.bgColor()->setSelected(saveBrush.bgColor());
|
||||||
|
params.imageColor()->setSelected(saveBrush.imageColor());
|
||||||
params.inkType()->setSelected(saveBrush.inkType());
|
params.inkType()->setSelected(saveBrush.inkType());
|
||||||
params.inkOpacity()->setSelected(saveBrush.inkOpacity());
|
params.inkOpacity()->setSelected(saveBrush.inkOpacity());
|
||||||
params.shade()->setSelected(saveBrush.shade());
|
params.shade()->setSelected(saveBrush.shade());
|
||||||
@ -310,6 +313,8 @@ private:
|
|||||||
saveBrush.fgColor(params.fgColor()->isSelected());
|
saveBrush.fgColor(params.fgColor()->isSelected());
|
||||||
if (saveBrush.bgColor() != params.bgColor()->isSelected())
|
if (saveBrush.bgColor() != params.bgColor()->isSelected())
|
||||||
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())
|
if (saveBrush.inkType() != params.inkType()->isSelected())
|
||||||
saveBrush.inkType(params.inkType()->isSelected());
|
saveBrush.inkType(params.inkType()->isSelected());
|
||||||
if (saveBrush.inkOpacity() != params.inkOpacity()->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))
|
if (brush.hasFlag(BrushSlot::Flags::BgColor))
|
||||||
pref.colorBar.bgColor(brush.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))
|
if (brush.hasFlag(BrushSlot::Flags::InkType))
|
||||||
setInkType(brush.inkType());
|
setInkType(brush.inkType());
|
||||||
|
|
||||||
@ -1884,6 +1903,7 @@ BrushSlot ContextBar::createBrushSlotFromPreferences()
|
|||||||
if (saveBrush.brushAngle()) flags |= int(BrushSlot::Flags::BrushAngle);
|
if (saveBrush.brushAngle()) flags |= int(BrushSlot::Flags::BrushAngle);
|
||||||
if (saveBrush.fgColor()) flags |= int(BrushSlot::Flags::FgColor);
|
if (saveBrush.fgColor()) flags |= int(BrushSlot::Flags::FgColor);
|
||||||
if (saveBrush.bgColor()) flags |= int(BrushSlot::Flags::BgColor);
|
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.inkType()) flags |= int(BrushSlot::Flags::InkType);
|
||||||
if (saveBrush.inkOpacity()) flags |= int(BrushSlot::Flags::InkOpacity);
|
if (saveBrush.inkOpacity()) flags |= int(BrushSlot::Flags::InkOpacity);
|
||||||
if (saveBrush.shade()) flags |= int(BrushSlot::Flags::Shade);
|
if (saveBrush.shade()) flags |= int(BrushSlot::Flags::Shade);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user