Adding Picker size support and Displayed values support (RGB/HSV/LAB)

This commit is contained in:
Hombre
2016-10-05 01:13:20 +02:00
parent 050d96c8aa
commit f60a4fc4b1
6 changed files with 123 additions and 38 deletions

View File

@@ -273,6 +273,38 @@ void CropWindow::flawnOver (bool isFlawnOver)
this->isFlawnOver = isFlawnOver;
}
void CropWindow::scroll (int state, GdkScrollDirection direction, int x, int y)
{
if ((state & GDK_CONTROL_MASK) && onArea(ColorPicker, x, y)) {
// resizing a color picker
if (direction == GDK_SCROLL_UP) {
hoveredPicker->incSize();
rtengine::Coord imgPos;
screenCoordToImage(x, y, imgPos.x, imgPos.y);
updateHoveredPicker(imgPos);
iarea->redraw ();
}else if (direction == GDK_SCROLL_DOWN) {
hoveredPicker->decSize();
rtengine::Coord imgPos;
screenCoordToImage(x, y, imgPos.x, imgPos.y);
updateHoveredPicker(imgPos);
iarea->redraw ();
}
} else {
// not over a color picker, we zoom in/out
int newCenterX = x;
int newCenterY = y;
screenCoordToImage(newCenterX, newCenterY, newCenterX, newCenterY);
if (direction == GDK_SCROLL_UP && !isMaxZoom()) {
zoomIn (true, newCenterX, newCenterY);
} else if (!isMinZoom()) {
zoomOut (true, newCenterX, newCenterY);
}
}
}
void CropWindow::buttonPress (int button, int type, int bstate, int x, int y)
{
@@ -282,7 +314,7 @@ void CropWindow::buttonPress (int button, int type, int bstate, int x, int y)
iarea->grabFocus (this);
if (button == 1) {
if (type == GDK_2BUTTON_PRESS && onArea (CropImage, x, y) && (state == SNormal || state == SCropImgMove)) {
if (type == GDK_2BUTTON_PRESS && onArea (CropImage, x, y) && !onArea (ColorPicker, x, y) && (state == SNormal || state == SCropImgMove)) {
if (fitZoomEnabled) {
if (fitZoom) {
state = SNormal;
@@ -318,23 +350,27 @@ void CropWindow::buttonPress (int button, int type, int bstate, int x, int y)
if (onArea (CropImage, x, y)) { // events inside of the image domain
if (iarea->getToolMode () == TMColorPicker) {
if (hoveredPicker) {
// Color Picker drag starts
state = SDragPicker;
if ((bstate & GDK_CONTROL_MASK) && !(bstate & GDK_SHIFT_MASK)) {
hoveredPicker->decSize();
rtengine::Coord imgPos;
screenCoordToImage(x, y, imgPos.x, imgPos.y);
updateHoveredPicker(imgPos);
needRedraw = true;
} else if (!(bstate & GDK_CONTROL_MASK) && (bstate & GDK_SHIFT_MASK)) {
hoveredPicker->rollDisplayedValues();
needRedraw = true;
} else if (!(bstate & GDK_CONTROL_MASK) && !(bstate & GDK_SHIFT_MASK)) {
// Color Picker drag starts
state = SDragPicker;
}
} else {
// Add a new Color Picker
rtengine::Coord imgPos, cropPos;
rtengine::Coord imgPos;
screenCoordToImage(x, y, imgPos.x, imgPos.y);
LockableColorPicker *newPicker = new LockableColorPicker(imgPos.x, imgPos.y, LockableColorPicker::Size::S15, 0., 0., 0., this, &cropHandler.colorParams.output, &cropHandler.colorParams.working);
colorPickers.push_back(newPicker);
hoveredPicker = newPicker;
imageCoordToCropImage(imgPos.x, imgPos.y, cropPos.x, cropPos.y);
float r=0.f, g=0.f, b=0.f;
LockableColorPicker::Validity validity = checkValidity (hoveredPicker, cropPos);
hoveredPicker->setValidity (validity);
if (validity == LockableColorPicker::Validity::INSIDE) {
cropHandler.colorPick(cropPos, r, g, b, hoveredPicker->getSize());
hoveredPicker->setRGB (r, g, b);
}
updateHoveredPicker(imgPos);
state = SDragPicker;
press_x = x;
press_y = y;
@@ -465,8 +501,18 @@ void CropWindow::buttonPress (int button, int type, int bstate, int x, int y)
action_y = 0;
}
} else if (iarea->getToolMode () == TMColorPicker && hoveredPicker) {
// Color Picker drag starts
state = SDragPicker;
if ((bstate & GDK_CONTROL_MASK) && !(bstate & GDK_SHIFT_MASK)) {
hoveredPicker->decSize();
rtengine::Coord imgPos;
screenCoordToImage(x, y, imgPos.x, imgPos.y);
updateHoveredPicker(imgPos);
needRedraw = true;
} else if (!(bstate & GDK_CONTROL_MASK) && (bstate & GDK_SHIFT_MASK)) {
hoveredPicker->rollDisplayedValues();
} else if (!(bstate & GDK_CONTROL_MASK) && !(bstate & GDK_SHIFT_MASK)) {
// Color Picker drag starts
state = SDragPicker;
}
}
}
}
@@ -521,6 +567,12 @@ void CropWindow::buttonPress (int button, int type, int bstate, int x, int y)
hoveredPicker = nullptr;
state = SDeletePicker;
needRedraw = true;
} else if ((bstate & GDK_CONTROL_MASK) && !(bstate & GDK_SHIFT_MASK)) {
hoveredPicker->incSize();
rtengine::Coord imgPos;
screenCoordToImage(x, y, imgPos.x, imgPos.y);
updateHoveredPicker(imgPos);
needRedraw = true;
} else if (!(bstate & GDK_CONTROL_MASK) && !(bstate & GDK_SHIFT_MASK)) {
// Deleting the hovered picker
for (std::vector<LockableColorPicker*>::iterator i = colorPickers.begin(); i != colorPickers.end(); i++) {
@@ -2018,6 +2070,23 @@ void CropWindow::redrawNeeded (LWButton* button)
iarea->redraw ();
}
void CropWindow::updateHoveredPicker (rtengine::Coord &imgPos)
{
if (!hoveredPicker) {
return;
}
rtengine::Coord cropPos;
imageCoordToCropImage(imgPos.x, imgPos.y, cropPos.x, cropPos.y);
float r=0.f, g=0.f, b=0.f;
LockableColorPicker::Validity validity = checkValidity (hoveredPicker, cropPos);
hoveredPicker->setValidity (validity);
if (validity == LockableColorPicker::Validity::INSIDE) {
cropHandler.colorPick(cropPos, r, g, b, hoveredPicker->getSize());
hoveredPicker->setRGB (r, g, b);
}
}
void CropWindow::changeZoom (int zoom, bool notify, int centerx, int centery)
{