Try something new: click-and-drag to modify scaling. Feedback appreciated.
This commit is contained in:
parent
5cdbf9a49a
commit
aed90f29ea
@ -627,6 +627,9 @@ HistogramArea::HistogramArea (DrawModeListener *fml) : //needChroma unactive by
|
||||
ghist(256);
|
||||
bhist(256);
|
||||
chist(256);
|
||||
|
||||
factor = 10.0;
|
||||
isPressed = false;
|
||||
|
||||
get_style_context()->add_class("drawingarea");
|
||||
set_name("HistogramArea");
|
||||
@ -934,12 +937,12 @@ void HistogramArea::on_realize ()
|
||||
|
||||
Gtk::DrawingArea::on_realize();
|
||||
Glib::RefPtr<Gdk::Window> window = get_window();
|
||||
add_events(Gdk::BUTTON_PRESS_MASK);
|
||||
add_events(Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK);
|
||||
}
|
||||
|
||||
double HistogramArea::scalingFunctionLog(double vsize, double val)
|
||||
{
|
||||
double factor = 10.0; // can be tuned if necessary - higher is flatter curve
|
||||
//double factor = 10.0; // can be tuned if necessary - higher is flatter curve
|
||||
return vsize * log(factor / (factor + val)) / log(factor / (factor + vsize));
|
||||
}
|
||||
|
||||
@ -1005,6 +1008,9 @@ bool HistogramArea::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr)
|
||||
|
||||
bool HistogramArea::on_button_press_event (GdkEventButton* event)
|
||||
{
|
||||
isPressed = true;
|
||||
movingPosition = event->x;
|
||||
|
||||
if (event->type == GDK_2BUTTON_PRESS && event->button == 1) {
|
||||
|
||||
drawMode = (drawMode + 1) % 3;
|
||||
@ -1021,3 +1027,27 @@ bool HistogramArea::on_button_press_event (GdkEventButton* event)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool HistogramArea::on_button_release_event (GdkEventButton* event)
|
||||
{
|
||||
isPressed = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool HistogramArea::on_motion_notify_event (GdkEventMotion* event)
|
||||
{
|
||||
if (isPressed)
|
||||
{
|
||||
double mod = 1 + (event->x - movingPosition) / get_width();
|
||||
|
||||
factor /= mod;
|
||||
if (factor < 1.0)
|
||||
factor = 1.0;
|
||||
if (factor > 100.0)
|
||||
factor = 100.0;
|
||||
|
||||
setDirty(true);
|
||||
queue_draw ();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -119,8 +119,9 @@ protected:
|
||||
int oldwidth, oldheight;
|
||||
|
||||
bool needLuma, needRed, needGreen, needBlue, rawMode, needChroma;
|
||||
|
||||
|
||||
double factor;
|
||||
bool isPressed;
|
||||
double movingPosition;
|
||||
|
||||
HistogramAreaIdleHelper* haih;
|
||||
|
||||
@ -134,6 +135,8 @@ public:
|
||||
void on_realize();
|
||||
bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr);
|
||||
bool on_button_press_event (GdkEventButton* event);
|
||||
bool on_button_release_event (GdkEventButton* event);
|
||||
bool on_motion_notify_event (GdkEventMotion* event);
|
||||
|
||||
private:
|
||||
void drawCurve(Cairo::RefPtr<Cairo::Context> &cr, LUTu & data, double scale, int hsize, int vsize);
|
||||
|
Loading…
x
Reference in New Issue
Block a user