diff --git a/src/option.h b/src/option.h
index 06a9b1ff15..9f37d56d46 100644
--- a/src/option.h
+++ b/src/option.h
@@ -672,7 +672,7 @@ namespace librealsense
/** \brief class provided a control
* that changes min distance value when changing max distance value */
- class max_distance_option : public proxy_option
+ class max_distance_option : public proxy_option, public observable_option
{
public:
explicit max_distance_option(std::shared_ptr max_option,
@@ -680,21 +680,23 @@ namespace librealsense
: proxy_option(max_option), _min_option(min_option)
{}
- void set(float value) override
+ void set( float value ) override
{
auto strong = _min_option.lock();
- if (!strong)
+ if( ! strong )
return;
auto min_value = strong->query();
- if (min_value > value)
+ if( min_value > value )
{
auto min = strong->get_range().min;
- strong->set(min);
+ strong->set( min );
}
- _proxy->set(value);
- _recording_function(*this);
+ _proxy->set( value );
+ _recording_function( *this );
+
+ notify( value );
}
private:
@@ -703,7 +705,7 @@ namespace librealsense
/** \brief class provided a control
* that changes max distance value when changing min distance value */
- class min_distance_option : public proxy_option
+ class min_distance_option : public proxy_option, public observable_option
{
public:
explicit min_distance_option(std::shared_ptr min_option,
@@ -711,21 +713,23 @@ namespace librealsense
: proxy_option(min_option), _max_option(max_option)
{}
- void set(float value) override
+ void set( float value ) override
{
auto strong = _max_option.lock();
- if (!strong)
+ if( ! strong )
return;
auto max_value = strong->query();
- if (max_value < value)
+ if( max_value < value )
{
auto max = strong->get_range().max;
- strong->set(max);
+ strong->set( max );
}
- _proxy->set(value);
- _recording_function(*this);
+ _proxy->set( value );
+ _recording_function( *this );
+
+ notify( value );
}
private:
diff --git a/src/proc/colorizer.cpp b/src/proc/colorizer.cpp
index 0fd0dce74c..744722de53 100644
--- a/src/proc/colorizer.cpp
+++ b/src/proc/colorizer.cpp
@@ -150,19 +150,38 @@ namespace librealsense
_maps = { &jet, &classic, &grayscale, &inv_grayscale, &biomes, &cold, &warm, &quantized, &pattern, &hue };
- auto min_opt = std::make_shared>(0.f, 16.f, 0.1f, 0.f, &_min, "Min range in meters");
+ auto min_opt = std::make_shared< ptr_option< float > >( 0.f, 16.f, 0.1f, 0.f, &_min, "Min range in meters" );
- auto max_opt = std::make_shared>(0.f, 16.f, 0.1f, 6.f, &_max, "Max range in meters");
+ auto max_opt = std::make_shared< ptr_option< float > >( 0.f, 16.f, 0.1f, 6.f, &_max, "Max range in meters" );
- register_option(RS2_OPTION_MAX_DISTANCE,
- std::make_shared(
- max_opt,
- min_opt));
+ auto max_dist_opt = std::make_shared< max_distance_option >( max_opt, min_opt );
- register_option(RS2_OPTION_MIN_DISTANCE,
- std::make_shared(
- min_opt,
- max_opt));
+ auto min_dist_opt = std::make_shared< min_distance_option >( min_opt, max_opt );
+
+ register_option( RS2_OPTION_MAX_DISTANCE, max_dist_opt );
+
+ register_option( RS2_OPTION_MIN_DISTANCE, min_dist_opt );
+
+ auto hist_opt = std::make_shared< ptr_option< bool > >( false,
+ true,
+ true,
+ true,
+ &_equalize,
+ "Perform histogram equalization" );
+
+ auto weak_hist_opt = std::weak_ptr< ptr_option< bool > >( hist_opt );
+
+ max_dist_opt->add_observer( [weak_hist_opt]( float val ) {
+ auto strong_hist_opt = weak_hist_opt.lock();
+ if( strong_hist_opt )
+ strong_hist_opt->set( false );
+ } );
+
+ min_dist_opt->add_observer( [weak_hist_opt]( float val ) {
+ auto strong_hist_opt = weak_hist_opt.lock();
+ if( strong_hist_opt )
+ strong_hist_opt->set( false );
+ } );
auto color_map = std::make_shared>(0, (int)_maps.size() - 1, 1, 0, &_map_index, "Color map");
color_map->set_description(0.f, "Jet");
@@ -218,7 +237,6 @@ namespace librealsense
});
register_option(RS2_OPTION_VISUAL_PRESET, preset_opt);
- auto hist_opt = std::make_shared>(false, true, true, true, &_equalize, "Perform histogram equalization");
register_option(RS2_OPTION_HISTOGRAM_EQUALIZATION_ENABLED, hist_opt);
}