Add Lock Alpha to Smart Raster - Standard brush
This commit is contained in:
parent
36c1db068c
commit
d9ca25d58e
3 changed files with 34 additions and 15 deletions
|
@ -58,6 +58,7 @@ TEnv::IntVar BrushPressureSensitivity("InknpaintBrushPressureSensitivity", 1);
|
|||
TEnv::DoubleVar RasterBrushHardness("RasterBrushHardness", 100);
|
||||
TEnv::DoubleVar RasterBrushModifierSize("RasterBrushModifierSize", 0);
|
||||
TEnv::StringVar RasterBrushPreset("RasterBrushPreset", "<custom>");
|
||||
TEnv::IntVar BrushLockAlpha("InknpaintBrushLockAlpha", 0);
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
#define CUSTOM_WSTR L"<custom>"
|
||||
|
@ -438,12 +439,13 @@ class RasterBrushUndo final : public TRasterUndo {
|
|||
bool m_isPaletteOrder;
|
||||
bool m_isPencil;
|
||||
bool m_isStraight;
|
||||
bool m_modifierLockAlpha;
|
||||
|
||||
public:
|
||||
RasterBrushUndo(TTileSetCM32 *tileSet, const std::vector<TThickPoint> &points,
|
||||
int styleId, bool selective, TXshSimpleLevel *level,
|
||||
const TFrameId &frameId, bool isPencil, bool isFrameCreated,
|
||||
bool isLevelCreated, bool isPaletteOrder,
|
||||
bool isLevelCreated, bool isPaletteOrder, bool lockAlpha,
|
||||
bool isStraight = false)
|
||||
: TRasterUndo(tileSet, level, frameId, isFrameCreated, isLevelCreated, 0)
|
||||
, m_points(points)
|
||||
|
@ -451,15 +453,16 @@ public:
|
|||
, m_selective(selective)
|
||||
, m_isPencil(isPencil)
|
||||
, m_isStraight(isStraight)
|
||||
, m_isPaletteOrder(isPaletteOrder) {}
|
||||
, m_isPaletteOrder(isPaletteOrder)
|
||||
, m_modifierLockAlpha(lockAlpha) {}
|
||||
|
||||
void redo() const override {
|
||||
insertLevelAndFrameIfNeeded();
|
||||
TToonzImageP image = getImage();
|
||||
TRasterCM32P ras = image->getRaster();
|
||||
RasterStrokeGenerator m_rasterTrack(ras, BRUSH, NONE, m_styleId,
|
||||
m_points[0], m_selective, 0, false,
|
||||
!m_isPencil, m_isPaletteOrder);
|
||||
RasterStrokeGenerator m_rasterTrack(
|
||||
ras, BRUSH, NONE, m_styleId, m_points[0], m_selective, 0,
|
||||
m_modifierLockAlpha, !m_isPencil, m_isPaletteOrder);
|
||||
if (m_isPaletteOrder) {
|
||||
QSet<int> aboveStyleIds;
|
||||
getAboveStyleIdSet(m_styleId, image->getPalette(), aboveStyleIds);
|
||||
|
@ -855,7 +858,8 @@ ToonzRasterBrushTool::ToonzRasterBrushTool(std::string name, int targetType)
|
|||
, m_presetsLoaded(false)
|
||||
, m_targetType(targetType)
|
||||
, m_workingFrameId(TFrameId())
|
||||
, m_notifier(0) {
|
||||
, m_notifier(0)
|
||||
, m_modifierLockAlpha("Lock Alpha", false) {
|
||||
bind(targetType);
|
||||
|
||||
m_rasThickness.setNonLinearSlider();
|
||||
|
@ -865,6 +869,7 @@ ToonzRasterBrushTool::ToonzRasterBrushTool(std::string name, int targetType)
|
|||
m_prop[0].bind(m_smooth);
|
||||
m_prop[0].bind(m_drawOrder);
|
||||
m_prop[0].bind(m_modifierSize);
|
||||
m_prop[0].bind(m_modifierLockAlpha);
|
||||
m_prop[0].bind(m_pencil);
|
||||
m_pencil.setId("PencilMode");
|
||||
|
||||
|
@ -879,6 +884,7 @@ ToonzRasterBrushTool::ToonzRasterBrushTool(std::string name, int targetType)
|
|||
m_preset.setId("BrushPreset");
|
||||
m_preset.addValue(CUSTOM_WSTR);
|
||||
m_pressure.setId("PressureSensitivity");
|
||||
m_modifierLockAlpha.setId("LockAlpha");
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------
|
||||
|
@ -1072,6 +1078,7 @@ void ToonzRasterBrushTool::updateTranslation() {
|
|||
m_preset.setItemUIName(CUSTOM_WSTR, tr("<custom>"));
|
||||
m_pencil.setQStringName(tr("Pencil"));
|
||||
m_pressure.setQStringName(tr("Pressure"));
|
||||
m_modifierLockAlpha.setQStringName(tr("Lock Alpha"));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
@ -1388,7 +1395,8 @@ void ToonzRasterBrushTool::leftButtonDown(const TPointD &pos,
|
|||
thickness);
|
||||
m_rasterTrack = new RasterStrokeGenerator(
|
||||
ras, BRUSH, NONE, m_styleId, thickPoint, drawOrder != OverAll, 0,
|
||||
false, !m_pencil.getValue(), drawOrder == PaletteOrder);
|
||||
m_modifierLockAlpha.getValue(), !m_pencil.getValue(),
|
||||
drawOrder == PaletteOrder);
|
||||
|
||||
if (drawOrder == PaletteOrder)
|
||||
m_rasterTrack->setAboveStyleIds(aboveStyleIds);
|
||||
|
@ -1935,7 +1943,8 @@ void ToonzRasterBrushTool::finishRasterBrush(const TPointD &pos,
|
|||
m_tileSet, m_rasterTrack->getPointsSequence(),
|
||||
m_rasterTrack->getStyleId(), m_rasterTrack->isSelective(),
|
||||
simLevel.getPointer(), frameId, m_pencil.getValue(), m_isFrameCreated,
|
||||
m_isLevelCreated, m_rasterTrack->isPaletteOrder(), m_isStraight));
|
||||
m_isLevelCreated, m_rasterTrack->isPaletteOrder(),
|
||||
m_rasterTrack->isAlphaLocked(), m_isStraight));
|
||||
}
|
||||
delete m_rasterTrack;
|
||||
m_rasterTrack = 0;
|
||||
|
@ -2356,6 +2365,7 @@ bool ToonzRasterBrushTool::onPropertyChanged(std::string propertyName) {
|
|||
BrushPressureSensitivity = m_pressure.getValue();
|
||||
RasterBrushHardness = m_hardness.getValue();
|
||||
RasterBrushModifierSize = m_modifierSize.getValue();
|
||||
BrushLockAlpha = m_modifierLockAlpha.getValue();
|
||||
|
||||
// Recalculate/reset based on changed settings
|
||||
if (propertyName == m_rasThickness.getName()) {
|
||||
|
@ -2427,6 +2437,7 @@ void ToonzRasterBrushTool::loadPreset() {
|
|||
m_pencil.setValue(preset.m_pencil);
|
||||
m_pressure.setValue(preset.m_pressure);
|
||||
m_modifierSize.setValue(preset.m_modifierSize);
|
||||
m_modifierLockAlpha.setValue(preset.m_modifierLockAlpha);
|
||||
|
||||
// Recalculate based on updated presets
|
||||
m_minThick = m_rasThickness.getValue().first;
|
||||
|
@ -2448,12 +2459,13 @@ void ToonzRasterBrushTool::addPreset(QString name) {
|
|||
preset.m_min = m_rasThickness.getValue().first;
|
||||
preset.m_max = m_rasThickness.getValue().second;
|
||||
|
||||
preset.m_smooth = m_smooth.getValue();
|
||||
preset.m_hardness = m_hardness.getValue();
|
||||
preset.m_drawOrder = m_drawOrder.getIndex();
|
||||
preset.m_pencil = m_pencil.getValue();
|
||||
preset.m_pressure = m_pressure.getValue();
|
||||
preset.m_modifierSize = m_modifierSize.getValue();
|
||||
preset.m_smooth = m_smooth.getValue();
|
||||
preset.m_hardness = m_hardness.getValue();
|
||||
preset.m_drawOrder = m_drawOrder.getIndex();
|
||||
preset.m_pencil = m_pencil.getValue();
|
||||
preset.m_pressure = m_pressure.getValue();
|
||||
preset.m_modifierSize = m_modifierSize.getValue();
|
||||
preset.m_modifierLockAlpha = m_modifierLockAlpha.getValue();
|
||||
|
||||
// Pass the preset to the manager
|
||||
m_presetsManager.addPreset(preset);
|
||||
|
@ -2491,6 +2503,7 @@ void ToonzRasterBrushTool::loadLastBrush() {
|
|||
m_pressure.setValue(BrushPressureSensitivity ? 1 : 0);
|
||||
m_smooth.setValue(BrushSmooth);
|
||||
m_modifierSize.setValue(RasterBrushModifierSize);
|
||||
m_modifierLockAlpha.setValue(BrushLockAlpha ? 1 : 0);
|
||||
|
||||
// Recalculate based on prior values
|
||||
m_minThick = m_rasThickness.getValue().first;
|
||||
|
|
|
@ -179,6 +179,7 @@ protected:
|
|||
TBoolProperty m_pencil;
|
||||
TBoolProperty m_pressure;
|
||||
TDoubleProperty m_modifierSize;
|
||||
TBoolProperty m_modifierLockAlpha;
|
||||
|
||||
RasterStrokeGenerator *m_rasterTrack;
|
||||
TTileSetCM32 *m_tileSet;
|
||||
|
|
|
@ -199,10 +199,15 @@ void RasterStrokeGenerator::placeOver(const TRasterCM32P &out,
|
|||
if (m_task == BRUSH) {
|
||||
int inTone = inPix->getTone();
|
||||
int outTone = outPix->getTone();
|
||||
if (inPix->isPureInk() && !m_selective) {
|
||||
if (inPix->isPureInk() && !m_selective && !m_modifierLockAlpha) {
|
||||
*outPix = TPixelCM32(inPix->getInk(), outPix->getPaint(), inTone);
|
||||
continue;
|
||||
}
|
||||
if (m_modifierLockAlpha && !outPix->isPureInk() &&
|
||||
outPix->getPaint() == 0 && outPix->getTone() == 255) {
|
||||
*outPix = TPixelCM32(outPix->getInk(), outPix->getPaint(), outTone);
|
||||
continue;
|
||||
}
|
||||
if (outPix->isPureInk() && m_selective) {
|
||||
if (!m_isPaletteOrder || m_aboveStyleIds.contains(outPix->getInk())) {
|
||||
*outPix = TPixelCM32(outPix->getInk(), outPix->getPaint(), outTone);
|
||||
|
|
Loading…
Reference in a new issue