billiob pushed a commit to branch master.

http://git.enlightenment.org/apps/terminology.git/commit/?id=f43decc7900c63cbaed66231f64f6a8b0bbcd901

commit f43decc7900c63cbaed66231f64f6a8b0bbcd901
Author: Boris Faure <[email protected]>
Date:   Sun Aug 10 18:06:28 2014 +0200

    have an exponential scale for scrollback
---
 src/bin/config.c           |  2 +-
 src/bin/options_behavior.c | 42 ++++++++++++++++++++++++++++++++++++++----
 2 files changed, 39 insertions(+), 5 deletions(-)

diff --git a/src/bin/config.c b/src/bin/config.c
index 2396d0d..2059967 100644
--- a/src/bin/config.c
+++ b/src/bin/config.c
@@ -288,7 +288,7 @@ config_load(const char *key)
                   /*pass through*/
                 case 2:
                   LIM(config->font.size, 3, 400);
-                  LIM(config->scrollback, 0, 200000);
+                  LIM(config->scrollback, 0, 524288);
                   LIM(config->tab_zoom, 0.0, 1.0);
                   LIM(config->vidmod, 0, 3)
 
diff --git a/src/bin/options_behavior.c b/src/bin/options_behavior.c
index c3840f3..92012c4 100644
--- a/src/bin/options_behavior.c
+++ b/src/bin/options_behavior.c
@@ -203,13 +203,34 @@ _cb_op_behavior_wsep_chg(void *data, Evas_Object *obj, 
void *event EINA_UNUSED)
    config_save(config, NULL);
 }
 
+static unsigned int
+sback_double_to_expo_int(double d)
+{
+    if (d < 1.0)
+        return 0;
+    if (d >= 19.0)
+        d = 19.0;
+    return 1 << (unsigned char) d;
+}
+
+static char *
+sback_indicator_units_format(double d)
+{
+    return (char*)eina_stringshare_printf("%'d", sback_double_to_expo_int(d));
+}
+static char *
+sback_units_format(double d)
+{
+    return (char*)eina_stringshare_printf(_("%'d lines"), 
sback_double_to_expo_int(d));
+}
+
 static void
 _cb_op_behavior_sback_chg(void *data, Evas_Object *obj, void *event 
EINA_UNUSED)
 {
    Evas_Object *term = data;
    Config *config = termio_config_get(term);
 
-   config->scrollback = elm_slider_value_get(obj) + 0.5;
+   config->scrollback = (double) 
sback_double_to_expo_int(elm_slider_value_get(obj));
    termio_config_update(term);
    config_save(config, NULL);
 }
@@ -572,10 +593,23 @@ options_behavior(Evas_Object *opbox, Evas_Object *term)
    evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
    evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.0);
    elm_slider_span_size_set(o, 40);
-   elm_slider_unit_format_set(o, "%1.0f");
-   elm_slider_indicator_format_set(o, "%1.0f");
+   elm_slider_step_set(o, 1);
+   elm_slider_units_format_function_set(o,
+                                        sback_units_format,
+                                        (void(*)(char*))eina_stringshare_del);
+   elm_slider_indicator_format_function_set(o,
+                                            sback_indicator_units_format,
+                                            
(void(*)(char*))eina_stringshare_del);
    elm_slider_min_max_set(o, 0, 10000);
-   elm_slider_value_set(o, config->scrollback);
+   /* http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogFloat */
+   union {
+       float v;
+       int c;
+   } u;
+   u.v = config->scrollback;
+   u.c = (u.c >> 23) - 127;
+   elm_slider_value_set(o, u.c);
+   elm_slider_min_max_set(o, 0.0, 19.0);
    elm_box_pack_end(bx, o);
    evas_object_show(o);
    evas_object_smart_callback_add(o, "delay,changed",

-- 


Reply via email to