From 103091e2c9079f7b2834e40f99189283d96b44a0 Mon Sep 17 00:00:00 2001 From: Hombre Date: Fri, 7 Oct 2016 02:18:52 +0200 Subject: [PATCH] Code simplification + bugfix --- rtgui/cropwindow.cc | 57 +++++++++++++++--------------------- rtgui/cropwindow.h | 2 +- rtgui/lockablecolorpicker.cc | 36 +++++------------------ rtgui/lockablecolorpicker.h | 7 ++--- 4 files changed, 36 insertions(+), 66 deletions(-) diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index aa1e8c859..d40486627 100644 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -279,15 +279,11 @@ void CropWindow::scroll (int state, GdkScrollDirection direction, int x, int y) // resizing a color picker if (direction == GDK_SCROLL_UP) { hoveredPicker->incSize(); - rtengine::Coord imgPos; - screenCoordToImage(x, y, imgPos.x, imgPos.y); - updateHoveredPicker(imgPos); + updateHoveredPicker(); iarea->redraw (); }else if (direction == GDK_SCROLL_DOWN) { hoveredPicker->decSize(); - rtengine::Coord imgPos; - screenCoordToImage(x, y, imgPos.x, imgPos.y); - updateHoveredPicker(imgPos); + updateHoveredPicker(); iarea->redraw (); } } else { @@ -352,9 +348,7 @@ void CropWindow::buttonPress (int button, int type, int bstate, int x, int y) if (hoveredPicker) { if ((bstate & GDK_CONTROL_MASK) && !(bstate & GDK_SHIFT_MASK)) { hoveredPicker->decSize(); - rtengine::Coord imgPos; - screenCoordToImage(x, y, imgPos.x, imgPos.y); - updateHoveredPicker(imgPos); + updateHoveredPicker(); needRedraw = true; } else if (!(bstate & GDK_CONTROL_MASK) && (bstate & GDK_SHIFT_MASK)) { hoveredPicker->rollDisplayedValues(); @@ -367,10 +361,10 @@ void CropWindow::buttonPress (int button, int type, int bstate, int x, int y) // Add a new Color Picker 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); + LockableColorPicker *newPicker = new LockableColorPicker(this, &cropHandler.colorParams.output, &cropHandler.colorParams.working); colorPickers.push_back(newPicker); hoveredPicker = newPicker; - updateHoveredPicker(imgPos); + updateHoveredPicker(&imgPos); state = SDragPicker; press_x = x; press_y = y; @@ -502,11 +496,10 @@ void CropWindow::buttonPress (int button, int type, int bstate, int x, int y) } } else if (iarea->getToolMode () == TMColorPicker && hoveredPicker) { 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; + if (hoveredPicker->decSize()) { + updateHoveredPicker(); + needRedraw = true; + } } else if (!(bstate & GDK_CONTROL_MASK) && (bstate & GDK_SHIFT_MASK)) { hoveredPicker->rollDisplayedValues(); } else if (!(bstate & GDK_CONTROL_MASK) && !(bstate & GDK_SHIFT_MASK)) { @@ -568,11 +561,10 @@ void CropWindow::buttonPress (int button, int type, int bstate, int x, int y) 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; + if (hoveredPicker->incSize()) { + updateHoveredPicker(); + needRedraw = true; + } } else if (!(bstate & GDK_CONTROL_MASK) && !(bstate & GDK_SHIFT_MASK)) { // Deleting the hovered picker for (std::vector::iterator i = colorPickers.begin(); i != colorPickers.end(); i++) { @@ -898,7 +890,7 @@ void CropWindow::pointerMoved (int bstate, int x, int y) action_y = new_action_y; iarea->redraw (); } else if (state == SDragPicker) { - Coord imgPos, cropPos; + Coord imgPos; action_x = x - press_x; action_x = y - press_y; screenCoordToImage (x, y, imgPos.x, imgPos.y); @@ -912,15 +904,7 @@ void CropWindow::pointerMoved (int bstate, int x, int y) }else if (imgPos.y >= iarea->getImProcCoordinator()->getFullHeight()) { imgPos.y = iarea->getImProcCoordinator()->getFullHeight()-1; } - imageCoordToCropImage(imgPos.x, imgPos.y, cropPos.x, cropPos.y); - float r=0.f, g=0.f, b=0.f; - float rpreview=0.f, gpreview=0.f, bpreview=0.f; - LockableColorPicker::Validity validity = checkValidity (hoveredPicker, cropPos); - hoveredPicker->setValidity (validity); - if (validity == LockableColorPicker::Validity::INSIDE) { - cropHandler.colorPick(cropPos, r, g, b, rpreview, gpreview, bpreview, hoveredPicker->getSize()); - } - hoveredPicker->setPosition (imgPos, r, g, b, rpreview, gpreview, bpreview); + updateHoveredPicker (&imgPos); iarea->redraw (); } else if (state == SNormal && iarea->getToolMode () == TMColorPicker && onArea(ColorPicker, x, y)) { // TODO: we could set the hovered picker as Highlighted here @@ -2071,7 +2055,7 @@ void CropWindow::redrawNeeded (LWButton* button) iarea->redraw (); } -void CropWindow::updateHoveredPicker (rtengine::Coord &imgPos) +void CropWindow::updateHoveredPicker (rtengine::Coord *imgPos) { if (!hoveredPicker) { @@ -2079,9 +2063,16 @@ void CropWindow::updateHoveredPicker (rtengine::Coord &imgPos) } rtengine::Coord cropPos; - imageCoordToCropImage(imgPos.x, imgPos.y, cropPos.x, cropPos.y); float r=0.f, g=0.f, b=0.f; float rpreview=0.f, gpreview=0.f, bpreview=0.f; + if (imgPos) { + imageCoordToCropImage(imgPos->x, imgPos->y, cropPos.x, cropPos.y); + hoveredPicker->setPosition (*imgPos); + } else { + rtengine::Coord imgPos2; + hoveredPicker->getImagePosition(imgPos2); + imageCoordToCropImage(imgPos2.x, imgPos2.y, cropPos.x, cropPos.y); + } LockableColorPicker::Validity validity = checkValidity (hoveredPicker, cropPos); hoveredPicker->setValidity (validity); if (validity == LockableColorPicker::Validity::INSIDE) { diff --git a/rtgui/cropwindow.h b/rtgui/cropwindow.h index f976c98b1..eec1b812a 100644 --- a/rtgui/cropwindow.h +++ b/rtgui/cropwindow.h @@ -103,7 +103,7 @@ class CropWindow : public LWButtonListener, public CropDisplayHandler, public Ed void drawUnscaledSpotRectangle (Cairo::RefPtr cr, int rectSize); void drawObservedFrame (Cairo::RefPtr cr, int rw = 0, int rh = 0); void changeZoom (int zoom, bool notify = true, int centerx = -1, int centery = -1); - void updateHoveredPicker (rtengine::Coord &imgPos); + void updateHoveredPicker (rtengine::Coord *imgPos = nullptr); void cycleRGB (); void cycleHSV (); diff --git a/rtgui/lockablecolorpicker.cc b/rtgui/lockablecolorpicker.cc index 896bdaa2a..b52ad8a0e 100644 --- a/rtgui/lockablecolorpicker.cc +++ b/rtgui/lockablecolorpicker.cc @@ -28,20 +28,11 @@ extern Options options; LockableColorPicker::LockableColorPicker (CropWindow* cropWindow, Glib::ustring *oProfile, Glib::ustring *wProfile) -: cropWindow(cropWindow), displayedValues(ColorPickerType::RGB), position(0, 0), size(Size::S20), +: cropWindow(cropWindow), displayedValues(ColorPickerType::RGB), position(0, 0), size(Size::S15), outputProfile(oProfile), workingProfile(wProfile), validity(Validity::OUTSIDE), r(0.f), g(0.f), b(0.f), rpreview(0.f), gpreview(0.f), bpreview(0.f), h(0.f), s(0.f), v(0.f), L(0.f), a(0.f), bb(0.f) {} -LockableColorPicker::LockableColorPicker (int x, int y, Size size, const float R, const float G, const float B, CropWindow* cropWindow, Glib::ustring *oProfile, Glib::ustring *wProfile) -: cropWindow(cropWindow), displayedValues(ColorPickerType::RGB), position(x, y), size(size), - outputProfile(oProfile), workingProfile(wProfile), validity(Validity::OUTSIDE), - r(R), g(G), b(B), rpreview(R), gpreview(G), bpreview(B), L(0.f), a(0.f), bb(0.f) -{ - rtengine::Color::rgb2hsv(r*65535.f, g*65535.f, b*65535.f, h, s, v); - rtengine::Color::rgb2lab (*outputProfile, *workingProfile, r * 65535.f, g * 65535.f, b * 65535.f, L, a, bb, options.rtSettings.HistogramWorking); // TODO: Really sure this function works? -} - void LockableColorPicker::updateBackBuffer () { int newW, newH; @@ -263,25 +254,10 @@ void LockableColorPicker::draw (Cairo::RefPtr &cr) copySurface(cr); } -void LockableColorPicker::setPosition (const rtengine::Coord &newPos, const float R, const float G, float B, const float previewR, const float previewG, const float previewB) +void LockableColorPicker::setPosition (const rtengine::Coord &newPos) { // we're not checking bounds here, this will be done at rendering time position = newPos; - - r = R; - g = G; - b = B; - - rpreview = previewR; - gpreview = previewG; - bpreview = previewB; - - rtengine::Color::rgb2hsv(r*65535.f, g*65535.f, b*65535.f, h, s, v); - rtengine::Color::rgb2lab (*outputProfile, *workingProfile, r * 65535.f, g * 65535.f, b * 65535.f, L, a, bb, options.rtSettings.HistogramWorking); // TODO: Really sure this function works? - - if (validity != Validity::OUTSIDE) { - setDirty(true); - } } void LockableColorPicker::setRGB (const float R, const float G, const float B, const float previewR, const float previewG, const float previewB) @@ -366,20 +342,24 @@ void LockableColorPicker::rollDisplayedValues () } -void LockableColorPicker::incSize () +bool LockableColorPicker::incSize () { if (size < Size::S30) { size = (Size)((int)size + 5); setDirty(true); + return true; } + return false; } -void LockableColorPicker::decSize () +bool LockableColorPicker::decSize () { if (size > Size::S5) { size = (Size)((int)size - 5); setDirty(true); + return true; } + return false; } // return true if the picker has to be redrawn diff --git a/rtgui/lockablecolorpicker.h b/rtgui/lockablecolorpicker.h index 467df2d87..23f381cc2 100644 --- a/rtgui/lockablecolorpicker.h +++ b/rtgui/lockablecolorpicker.h @@ -75,12 +75,11 @@ private: public: LockableColorPicker (CropWindow* cropWindow, Glib::ustring *oProfile, Glib::ustring *wProfile); - LockableColorPicker (int x, int y, Size size, const float R, const float G, const float B, CropWindow* cropWindow, Glib::ustring *oProfile, Glib::ustring *wProfile); void draw (Cairo::RefPtr &cr); // Used to update the RGB color, the HSV values will be updated accordingly - void setPosition (const rtengine::Coord &newPos, const float R, const float G, float B, const float previewR, const float previewG, const float previewB); + void setPosition (const rtengine::Coord &newPos); void setRGB (const float R, const float G, const float B, const float previewR, const float previewG, const float previewB); void getImagePosition (rtengine::Coord &imgPos); void getScreenPosition (rtengine::Coord &screenPos); @@ -89,8 +88,8 @@ public: void setValidity (Validity isValid); void setSize (Size newSize); void rollDisplayedValues (); - void incSize (); - void decSize (); + bool incSize (); + bool decSize (); bool cycleRGB (); bool cycleHSV (); };