private void UpdateLevels()
{
if(disable_updating)
return;
disable_updating = true;
if(skip_counter == max_skip || !button_down) {
Levels.ColorOutHigh = UpdateByMask (Levels.ColorOutHigh, (byte)spinOutHigh.Value);
Levels.ColorOutLow = UpdateByMask (Levels.ColorOutLow, (byte)spinOutLow.Value);
UpdateGammaByMask ((float) spinOutGamma.Value);
Levels.ColorInHigh = UpdateByMask (Levels.ColorInHigh, (byte)spinInHigh.Value);
Levels.ColorInLow = UpdateByMask (Levels.ColorInLow, (byte)spinInLow.Value);
colorpanelInLow.SetCairoColor (Levels.ColorInLow.ToCairoColor ());
colorpanelInHigh.SetCairoColor (Levels.ColorInHigh.ToCairoColor ());
colorpanelOutLow.SetCairoColor (Levels.ColorOutLow.ToCairoColor ());
colorpanelOutMid.SetCairoColor (GetOutMidColor ());
colorpanelOutHigh.SetCairoColor (Levels.ColorOutHigh.ToCairoColor ());
UpdateOutputHistogram ();
skip_counter = 0;
} else
skip_counter++;
GdkWindow.Invalidate ();
disable_updating = false;
}