Thumbnail rotation does not include crop rotation, on behalf of Adam Reichold, Issue 1716
This commit is contained in:
@@ -305,7 +305,120 @@ void BatchToolPanelCoordinator::panelChanged (rtengine::ProcEvent event, const G
|
||||
for (size_t i=0; i<toolPanels.size(); i++)
|
||||
toolPanels[i]->write (&pparams, &pparamsEdited);
|
||||
|
||||
// TODO: We may update the crop on coarse rotate events here, like in ToolPanelCoordinator::panelChanged
|
||||
// If only a single item is selected, we emulate the behaviour of the editor tool panel coordinator,
|
||||
// otherwise we adjust the inital parameters on a per-image basis.
|
||||
if (selected.size()==1) {
|
||||
// Compensate rotation on flip
|
||||
if (event==rtengine::EvCTHFlip || event==rtengine::EvCTVFlip) {
|
||||
if (fabs(pparams.rotate.degree)>0.001) {
|
||||
pparams.rotate.degree *= -1;
|
||||
rotate->read (&pparams);
|
||||
}
|
||||
}
|
||||
|
||||
int w, h;
|
||||
selected[0]->getFinalSize (selected[0]->getProcParams (), w, h);
|
||||
crop->setDimensions(w, h);
|
||||
|
||||
// Some transformations change the crop and resize parameter for convenience.
|
||||
if (event==rtengine::EvCTHFlip) {
|
||||
crop->hFlipCrop ();
|
||||
crop->write (&pparams, &pparamsEdited);
|
||||
}
|
||||
else if (event==rtengine::EvCTVFlip) {
|
||||
crop->vFlipCrop ();
|
||||
crop->write (&pparams, &pparamsEdited);
|
||||
}
|
||||
else if (event==rtengine::EvCTRotate) {
|
||||
crop->rotateCrop (pparams.coarse.rotate, pparams.coarse.hflip, pparams.coarse.vflip);
|
||||
crop->write (&pparams, &pparamsEdited);
|
||||
resize->update (pparams.crop.enabled, pparams.crop.w, pparams.crop.h, w, h);
|
||||
resize->write (&pparams, &pparamsEdited);
|
||||
}
|
||||
else if (event==rtengine::EvCrop) {
|
||||
resize->update (pparams.crop.enabled, pparams.crop.w, pparams.crop.h);
|
||||
resize->write (&pparams, &pparamsEdited);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Compensate rotation on flip
|
||||
if (event==rtengine::EvCTHFlip || event==rtengine::EvCTVFlip) {
|
||||
for (size_t i=0; i<selected.size(); i++) {
|
||||
if (fabs(initialPP[i].rotate.degree) > 0.001) {
|
||||
initialPP[i].rotate.degree *= -1.0;
|
||||
|
||||
pparamsEdited.rotate.degree = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// some transformations make the crop change for convenience
|
||||
if (event==rtengine::EvCTHFlip) {
|
||||
for (size_t i=0; i<selected.size(); i++) {
|
||||
int w, h;
|
||||
selected[i]->getFinalSize (selected[i]->getProcParams (), w, h);
|
||||
|
||||
rtengine::procparams::CropParams& crop = initialPP[i].crop;
|
||||
crop.x = w - crop.x - crop.w;
|
||||
|
||||
pparamsEdited.crop.x = false;
|
||||
}
|
||||
}
|
||||
else if (event==rtengine::EvCTVFlip) {
|
||||
for (size_t i=0; i<selected.size(); i++) {
|
||||
int w, h;
|
||||
selected[i]->getFinalSize (selected[i]->getProcParams (), w, h);
|
||||
|
||||
rtengine::procparams::CropParams& crop = initialPP[i].crop;
|
||||
crop.y = h - crop.y - crop.h;
|
||||
|
||||
pparamsEdited.crop.y = false;
|
||||
}
|
||||
}
|
||||
else if (event==rtengine::EvCTRotate) {
|
||||
int newDeg = pparams.coarse.rotate;
|
||||
for (size_t i=0; i<selected.size(); i++) {
|
||||
int w, h;
|
||||
selected[i]->getFinalSize (selected[i]->getProcParams (), w, h);
|
||||
|
||||
int oldDeg = initialPP[i].coarse.rotate;
|
||||
|
||||
rtengine::procparams::CropParams& crop = initialPP[i].crop;
|
||||
int rotation = (360 + newDeg - oldDeg) % 360;
|
||||
ProcParams pptemp = selected[i]->getProcParams(); // Get actual procparams
|
||||
if((pptemp.coarse.hflip != pptemp.coarse.vflip) && ((rotation%180)==90))
|
||||
rotation = (rotation + 180)%360;
|
||||
|
||||
|
||||
switch (rotation) {
|
||||
case 90:
|
||||
std::swap(crop.x, crop.y);
|
||||
std::swap(crop.w, crop.h);
|
||||
|
||||
crop.x = h - crop.x - crop.w;
|
||||
break;
|
||||
case 270:
|
||||
std::swap(crop.x, crop.y);
|
||||
std::swap(crop.w, crop.h);
|
||||
|
||||
crop.y = w - crop.y - crop.h;
|
||||
break;
|
||||
case 180:
|
||||
crop.x = w - crop.x - crop.w;
|
||||
crop.y = h - crop.y - crop.h;
|
||||
break;
|
||||
}
|
||||
|
||||
initialPP[i].coarse.rotate = newDeg;
|
||||
|
||||
}
|
||||
pparamsEdited.crop.x = false;
|
||||
pparamsEdited.crop.y = false;
|
||||
pparamsEdited.crop.w = false;
|
||||
pparamsEdited.crop.h = false;
|
||||
pparamsEdited.coarse.rotate = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (event==rtengine::EvAutoExp || event==rtengine::EvClip)
|
||||
for (size_t i=0; i<selected.size(); i++) {
|
||||
|
Reference in New Issue
Block a user