made L*a*b* color correction grid respect options.adjusterMinDelay for updating the preview

This commit is contained in:
Alberto Griggio
2018-01-11 09:40:51 +01:00
parent 7e2dcf7fdf
commit 840d3d1de4

View File

@@ -39,13 +39,15 @@ private:
float high_b_; float high_b_;
ToolPanelListener *listener_; ToolPanelListener *listener_;
bool edited_; bool edited_;
sigc::connection delay_conn_;
static const int inset = 2; static const int inset = 2;
void notify_listener() bool notify_listener()
{ {
if (listener_) { if (listener_) {
listener_->panelChanged(evt_, Glib::ustring::compose("%1 %2 %3 %4", int(low_a_), int(low_b_), int(high_a_), int(high_b_))); listener_->panelChanged(evt_, Glib::ustring::compose("%1 %2 %3 %4", int(low_a_), int(low_b_), int(high_a_), int(high_b_)));
} }
return false;
} }
public: public:
@@ -57,7 +59,7 @@ public:
edited_(false) edited_(false)
{ {
set_can_focus(true); set_can_focus(true);
add_events(Gdk::EXPOSURE_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::POINTER_MOTION_MASK); add_events(Gdk::EXPOSURE_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::POINTER_MOTION_MASK);
} }
void get_params(double &la, double &lb, double &ha, double &hb) const void get_params(double &la, double &lb, double &ha, double &hb) const
@@ -165,15 +167,6 @@ public:
return true; return true;
} }
bool on_button_release_event(GdkEventButton *event)
{
if (selected_ != OFF) {
edited_ = true;
notify_listener();
}
return true;
}
bool on_button_press_event(GdkEventButton *event) bool on_button_press_event(GdkEventButton *event)
{ {
if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) { if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) {
@@ -197,11 +190,16 @@ public:
bool on_motion_notify_event(GdkEventMotion *event) bool on_motion_notify_event(GdkEventMotion *event)
{ {
if (delay_conn_.connected()) {
delay_conn_.disconnect();
}
int width = get_allocated_width() - 2 * inset, height = get_allocated_height() - 2 * inset; int width = get_allocated_width() - 2 * inset, height = get_allocated_height() - 2 * inset;
const float mouse_x = std::min(std::max(event->x - inset, 0.), double(width)); const float mouse_x = std::min(std::max(event->x - inset, 0.), double(width));
const float mouse_y = std::min(std::max(height - 1 - event->y + inset, 0.), double(height)); const float mouse_y = std::min(std::max(height - 1 - event->y + inset, 0.), double(height));
const float ma = (2.0 * mouse_x - width) / (float)width; const float ma = (2.0 * mouse_x - width) / (float)width;
const float mb = (2.0 * mouse_y - height) / (float)height; const float mb = (2.0 * mouse_y - height) / (float)height;
bool refresh = selected_ != OFF;
if (event->state & GDK_BUTTON1_MASK) { if (event->state & GDK_BUTTON1_MASK) {
if (selected_ == LOW) { if (selected_ == LOW) {
low_a_ = ma * rtengine::ColorToningParams::LABGRID_CORR_MAX; low_a_ = ma * rtengine::ColorToningParams::LABGRID_CORR_MAX;
@@ -227,8 +225,15 @@ public:
} }
if (selected_ != OFF) { if (selected_ != OFF) {
grab_focus(); grab_focus();
if (options.adjusterMinDelay == 0) {
notify_listener();
} else {
delay_conn_ = Glib::signal_timeout().connect(sigc::mem_fun(*this, &LabGrid::notify_listener), options.adjusterMinDelay);
}
}
if (refresh) {
queue_draw();
} }
queue_draw();
return true; return true;
} }