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