From 91dcdb553068cd7e6709ed7eeb7c241ea86ab8f5 Mon Sep 17 00:00:00 2001 From: "Hombrenatureh.510" Date: Sat, 29 Mar 2014 20:15:56 +0100 Subject: [PATCH] New batch of "uninitialized values" bugfix. No issue. --- rtengine/dcrop.cc | 4 +++ rtengine/editbuffer.cc | 22 ++++++------ rtengine/editbuffer.h | 8 +++++ rtengine/improcfun.cc | 1 - rtgui/hsvequalizer.cc | 78 ---------------------------------------- rtgui/mydiagonalcurve.cc | 67 +++++++++++++++++----------------- rtgui/previewwindow.cc | 2 +- rtgui/toolpanel.h | 30 +++++++++------- rtgui/toolpanelcoord.cc | 40 ++++++++++----------- 9 files changed, 95 insertions(+), 157 deletions(-) diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 8dc9c8a46..8281da91b 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -307,6 +307,10 @@ void Crop::update (int todo) { if (cieCrop) delete cieCrop; cieCrop=NULL; } } + + // all pipette buffer processing should be finished now + EditBuffer::setReady(); + // switch back to rgb parent->ipf.lab2monitorRgb (labnCrop, cropImg); diff --git a/rtengine/editbuffer.cc b/rtengine/editbuffer.cc index 5adda4b94..a72d05651 100644 --- a/rtengine/editbuffer.cc +++ b/rtengine/editbuffer.cc @@ -23,7 +23,7 @@ namespace rtengine { EditBuffer::EditBuffer(::EditDataProvider *dataProvider) : objectMap(NULL), objectMap2(NULL), objectMode(OM_255), dataProvider(dataProvider), - imgFloatBuffer(NULL), LabBuffer(NULL), singlePlaneBuffer() {} + imgFloatBuffer(NULL), LabBuffer(NULL), singlePlaneBuffer(), ready(false) {} EditBuffer::~EditBuffer() { flush(); @@ -50,6 +50,7 @@ void EditBuffer::flush() { LabBuffer = NULL; } singlePlaneBuffer.flushData(); + ready = false; } /* Upgrade or downgrade the objectModeType; we're assuming that objectMap has been allocated */ @@ -155,6 +156,7 @@ void EditBuffer::resize(int newWidth, int newHeight, EditSubscriber* newSubscrib if (objectMap2) objectMap2.clear(); } } + ready = false; } bool EditBuffer::bufferCreated() { @@ -190,29 +192,29 @@ int EditBuffer::getObjectID(const Coord& location) { } void EditBuffer::getPipetteData(float* v, int x, int y, int squareSize) { - if (dataProvider && dataProvider->getCurrSubscriber()) { + if (ready && dataProvider && dataProvider->getCurrSubscriber()) { switch (dataProvider->getCurrSubscriber()->getEditBufferType()) { case (BT_IMAGEFLOAT): - if (imgFloatBuffer) + if (imgFloatBuffer) { imgFloatBuffer->getPipetteData(v[0], v[1], v[2], x, y, squareSize, 0); - else - v[0] = v[1] = v[2] = -1.f; + return; + } break; case (BT_LABIMAGE): - if (LabBuffer) + if (LabBuffer) { LabBuffer->getPipetteData(v[0], v[1], v[2], x, y, squareSize); - else - v[0] = v[1] = v[2] = -1.f; + return; + } break; case (BT_SINGLEPLANE_FLOAT): if (singlePlaneBuffer.data != NULL) { singlePlaneBuffer.getPipetteData(v[0], x, y, squareSize, 0); v[1] = v[2] = -1.f; + return; } - else - v[0] = v[1] = v[2] = -1.f; } } + v[0] = v[1] = v[2] = -1.f; } } diff --git a/rtengine/editbuffer.h b/rtengine/editbuffer.h index d8632285e..f52373349 100644 --- a/rtengine/editbuffer.h +++ b/rtengine/editbuffer.h @@ -47,6 +47,8 @@ protected: LabImage* LabBuffer; PlanarWhateverData singlePlaneBuffer; + bool ready; // flag that indicates if the _pipette_ buffer is ready + void createBuffer(int width, int height); void resize(int newWidth, int newHeight, EditSubscriber* newSubscriber); void resize(int newWidth, int newHeight); @@ -56,6 +58,12 @@ public: EditBuffer(::EditDataProvider *dataProvider); ~EditBuffer(); + /** @brief Getter to know if the pipette buffer is correctly filled */ + bool isReady() { return ready; } + + /** @brief Setter to tell that the pipette buffer is correctly filled + * You have to use this method once the pipette is filled, so it can be read. */ + void setReady() { ready = true; } void setObjectMode(ObjectMode newType); ::EditDataProvider* getDataProvider() { return dataProvider; } diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index 95fca7263..81509515e 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -2245,7 +2245,6 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, EditBuffer *e // Allocating buffer for the EditBuffer float *editIFloatTmpR, *editIFloatTmpG, *editIFloatTmpB, *editWhateverTmp; - char *editIFBuffer = NULL; if (editImgFloat) { editIFloatBuffer = (char *) malloc(3*sizeof(float)*TS*TS + 20*64 + 63); data = (char*)( ( uintptr_t(editIFloatBuffer) + uintptr_t(63)) / 64 * 64); diff --git a/rtgui/hsvequalizer.cc b/rtgui/hsvequalizer.cc index 2805968bf..e56683690 100644 --- a/rtgui/hsvequalizer.cc +++ b/rtgui/hsvequalizer.cc @@ -116,32 +116,6 @@ void HSVEqualizer::write (ProcParams* pp, ParamsEdited* pedited) { } } -/* -void HSVEqualizer::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited) { - - for (int i = 0; i < 8; i++) { - sat[i]->setDefault(defParams->hsvequalizer.sat[i]); - val[i]->setDefault(defParams->hsvequalizer.val[i]); - hue[i]->setDefault(defParams->hsvequalizer.hue[i]); - } - - if (pedited) { - for (int i = 0; i < 8; i++) { - sat[i]->setDefaultEditedState(pedited->hsvequalizer.sat[i] ? Edited : UnEdited); - val[i]->setDefaultEditedState(pedited->hsvequalizer.val[i] ? Edited : UnEdited); - hue[i]->setDefaultEditedState(pedited->hsvequalizer.hue[i] ? Edited : UnEdited); - } - } - else { - for (int i = 0; i < 8; i++) { - sat[i]->setDefaultEditedState(Irrelevant); - val[i]->setDefaultEditedState(Irrelevant); - hue[i]->setDefaultEditedState(Irrelevant); - } - } -} -*/ - /* * Curve listener * @@ -160,58 +134,6 @@ void HSVEqualizer::curveChanged (CurveEditor* ce) { } } -/* -void HSVEqualizer::adjusterChanged (Adjuster* a, double newval) { - - if (listener && enabled->get_active()) { - std::stringstream ss; - ss << "("; - int i; - if (hsvchannel->get_active_row_number()==0) { - for (i = 0; i < 8; i++) { - if (i > 0) { - ss << ", "; - } - if (i == 4) { - ss << "\n"; - } - ss << static_cast(sat[i]->getValue()); - } - ss << ")"; - listener->panelChanged (EvHSVEqualizerS, ss.str()); - } - else if (hsvchannel->get_active_row_number()==1) { - for (i = 0; i < 8; i++) { - if (i > 0) { - ss << ", "; - } - if (i == 4) { - ss << "\n"; - } - ss << static_cast(val[i]->getValue()); - } - ss << ")"; - listener->panelChanged (EvHSVEqualizerV, ss.str()); - } - else if (hsvchannel->get_active_row_number()==2) { - for (i = 0; i < 8; i++) { - if (i > 0) { - ss << ", "; - } - if (i == 4) { - ss << "\n"; - } - ss << static_cast(hue[i]->getValue()); - } - ss << ")"; - listener->panelChanged (EvHSVEqualizerH, ss.str()); - } - - //listener->panelChanged (EvHSVEqualizer, ss.str()); - } -} -*/ - void HSVEqualizer::colorForValue (double valX, double valY, int callerId, ColorCaller* caller) { float r, g, b; diff --git a/rtgui/mydiagonalcurve.cc b/rtgui/mydiagonalcurve.cc index 9529b57cb..7a5bacf7b 100644 --- a/rtgui/mydiagonalcurve.cc +++ b/rtgui/mydiagonalcurve.cc @@ -751,45 +751,42 @@ void MyDiagonalCurve::pipetteButton1Pressed(EditDataProvider *provider, int modi snapToElmt = -100; if (curve.type!=DCT_Parametric) { - snapToElmt = -100; - if (curve.type!=DCT_Parametric) { - std::vector::iterator itx, ity; - buttonPressed = true; + std::vector::iterator itx, ity; + buttonPressed = true; - // get the pointer position - int px = graphX + int(float(graphW)*pipetteVal); // WARNING: converting pipetteVal from float to int, precision loss here! - getCursorPosition(Gdk::BUTTON_PRESS, false, px, graphY, Gdk::ModifierType(modifierKey)); - findClosestPoint(); + // get the pointer position + int px = graphX + int(float(graphW)*pipetteVal); // WARNING: converting pipetteVal from float to int, precision loss here! + getCursorPosition(Gdk::BUTTON_PRESS, false, px, graphY, Gdk::ModifierType(modifierKey)); + findClosestPoint(); - if (distanceX > minDistanceX) { - rtengine::DiagonalCurve rtCurve(getPoints(), 200); + if (distanceX > minDistanceX) { + rtengine::DiagonalCurve rtCurve(getPoints(), 200); - /* insert a new control point */ - if (num > 0) { - if (clampedX > curve.x[closest_point]) - ++closest_point; - } - itx = curve.x.begin(); - ity = curve.y.begin(); - for (int i=0; i 0) { + if (clampedX > curve.x[closest_point]) + ++closest_point; } - grab_point = closest_point; - lit_point = closest_point; - ugpX = curve.x[closest_point]; - ugpY = curve.y[closest_point]; + itx = curve.x.begin(); + ity = curve.y.begin(); + for (int i=0; iset_expanded( expanded ); } + bool getExpanded () { if (exp) return exp->get_expanded(); return false; } void setParent (Gtk::Box* parent) { parentContainer = parent; } Gtk::Box* getParent () { return parentContainer; } void setLabel (Glib::ustring label, bool need100Percent=false); diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index d091fa577..5cfc462d7 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -213,8 +213,8 @@ void ToolPanelCoordinator::addPanel (Gtk::Box* where, FoldableToolPanel* panel, panel->setParent(where); panel->setLabel(escapeHtmlChars(label), need100Percent); - expList.push_back (panel->exp); - where->pack_start(*panel->exp, false, false); + expList.push_back (panel->getExpander()); + where->pack_start(*panel->getExpander(), false, false); } ToolPanelCoordinator::~ToolPanelCoordinator () { @@ -542,18 +542,18 @@ void ToolPanelCoordinator::updateCurveBackgroundHistogram (LUTu & histToneCurve, void ToolPanelCoordinator::foldAllButOne (Gtk::Box* parent, FoldableToolPanel* openedSection) { - FoldableToolPanel* currentTP; - - for (size_t i=0; i(toolPanels[i]); - if (currentTP->getParent() == parent) { - // Section in the same tab, we unfold it if it's not the one that has been clicked - if (currentTP != openedSection) { - currentTP->exp->set_expanded(false); - } - else { - if (!currentTP->exp->get_expanded()) - currentTP->exp->set_expanded(true); + for (size_t i=0; igetParent() != NULL) { + ToolPanel* currentTP = toolPanels[i]; + if (currentTP->getParent() == parent) { + // Section in the same tab, we unfold it if it's not the one that has been clicked + if (currentTP != openedSection) { + currentTP->setExpanded(false); + } + else { + if (!currentTP->getExpanded()) + currentTP->setExpanded(true); + } } } } @@ -561,8 +561,8 @@ void ToolPanelCoordinator::foldAllButOne (Gtk::Box* parent, FoldableToolPanel* o bool ToolPanelCoordinator::handleShortcutKey (GdkEventKey* event) { - //bool ctrl = event->state & GDK_CONTROL_MASK; temporarilly removed because unused - //bool shift = event->state & GDK_SHIFT_MASK; temporarilly removed because unused + //bool ctrl = event->state & GDK_CONTROL_MASK; temporarily removed because unused + //bool shift = event->state & GDK_SHIFT_MASK; temporarily removed because unused bool alt = event->state & GDK_MOD1_MASK; if (alt){ @@ -627,16 +627,16 @@ void ToolPanelCoordinator::toolSelected (ToolMode tool) { GThreadLock lock; // All GUI acces from idle_add callbacks or separate thread HAVE to be protected switch (tool) { case TMCropSelect: - crop->exp->set_expanded(true); + crop->setExpanded(true); toolPanelNotebook->set_current_page(toolPanelNotebook->page_num(*transformPanelSW)); break; case TMSpotWB: - whitebalance->exp->set_expanded(true); + whitebalance->setExpanded(true); toolPanelNotebook->set_current_page(toolPanelNotebook->page_num(*colorPanelSW)); break; case TMStraighten: - lensgeom->exp->set_expanded(true); - rotate->exp->set_expanded(true); + lensgeom->setExpanded(true); + rotate->setExpanded(true); toolPanelNotebook->set_current_page(toolPanelNotebook->page_num(*transformPanelSW)); break; default: