+PerspectiveZoomView::PerspectiveZoomView(PerspectiveWindow *gui,
+ int x, int y, int w)
+ : BC_FSlider(x, y, 0, w, w, -2., 2.,
+ log10(gui->plugin->config.view_zoom < 0.01 ?
+ 0.01 : gui->plugin->config.view_zoom))
+{
+ this->gui = gui;
+ set_precision(0.001);
+ set_tooltip(_("Zoom"));
+}
+PerspectiveZoomView::~PerspectiveZoomView()
+{
+}
+int PerspectiveZoomView::handle_event()
+{
+ float value = get_value();
+ BC_FSlider::update(value);
+ PerspectiveMain *plugin = gui->plugin;
+ float view_zoom = plugin->config.view_zoom;
+ double new_zoom = pow(10.,value);
+ double scale = new_zoom / view_zoom;
+ plugin->config.view_zoom = new_zoom;
+ plugin->config.view_x *= scale;
+ plugin->config.view_y *= scale;
+ gui->update_canvas();
+ plugin->send_configure_change();
+ return 1;
+}
+
+char *PerspectiveZoomView::get_caption()
+{
+ double value = get_value();
+ int frac = value >= 0. ? 1 : value >= -1. ? 2 : 3;
+ double zoom = pow(10., value);
+ char *caption = BC_Slider::get_caption();
+ sprintf(caption, "%.*f", frac, zoom);
+ return caption;
+}
+
+void PerspectiveZoomView::update(float zoom)
+{
+ if( zoom < 0.01 ) zoom = 0.01;
+ float value = log10f(zoom);
+ BC_FSlider::update(value);
+}
+