billiob pushed a commit to branch master. http://git.enlightenment.org/apps/terminology.git/commit/?id=c029c9fe9bc7456c77353b9c0447f1a14c67de93
commit c029c9fe9bc7456c77353b9c0447f1a14c67de93 Author: godfath3r <[email protected]> Date: Sun Jul 20 21:33:38 2014 +0200 Miniview: Fix indicators initial position Summary: When you scrollback to history and miniview is disable, when you enable it, it doesn't really know the correct position to show. Now it does! Reviewers: billiob Reviewed By: billiob Differential Revision: https://phab.enlightenment.org/D1206 --- src/bin/miniview.c | 43 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/src/bin/miniview.c b/src/bin/miniview.c index fca7201..0149642 100644 --- a/src/bin/miniview.c +++ b/src/bin/miniview.c @@ -64,6 +64,7 @@ struct _Miniview unsigned int is_shown : 1; unsigned int to_render : 1; + unsigned int initial_pos : 1; Eina_Bool fits_to_img; @@ -322,8 +323,7 @@ _smart_cb_mouse_down(void *data, Evas *e EINA_UNUSED, if (pos2 > -mv->img_hist) pos2 = -mv->img_hist; mv->screen.pos_val = (double) pos2 / (mv->img_h - mv->rows); edje_object_part_drag_value_set(mv->base, "miniview_screen", 0.0, mv->screen.pos_val); - edje_object_signal_emit(mv->base, "miniview_screen,inbounds", "miniview"); - + _screen_visual_bounds(mv); } static void @@ -366,6 +366,7 @@ _on_screen_moved(void *data, Evas_Object *o, const char *emission EINA_UNUSED, } } termio_scroll_set(mv->termio, (int) pos); + _screen_visual_bounds(mv); } static void @@ -451,6 +452,7 @@ _smart_show(Evas_Object *obj) if ((mv->rows == 0) || (mv->cols == 0)) return; + mv->initial_pos = 1; _queue_render(mv); evas_object_show(mv->base); _do_configure(obj); @@ -506,11 +508,12 @@ _deferred_renderer(void *data) { Miniview *mv = data; Evas_Coord ox, oy, ow, oh; - int history_len, wret; + int history_len, wret, pos; unsigned int *pixels, y; Termcell *cells; Termpty *ty; unsigned int colors[512]; + double bottom_bound; if (!mv) return EINA_FALSE; @@ -555,14 +558,42 @@ _deferred_renderer(void *data) if (history_len > (int)(mv->img_h - mv->rows)) mv->fits_to_img = EINA_FALSE; else mv->fits_to_img = EINA_TRUE; - if ((termio_scroll_get(mv->termio) == 0)) + bottom_bound = ((double) (-mv->img_hist )) / (mv->img_h - mv->rows); + pos = termio_scroll_get(mv->termio); + if ((pos != 0) && (mv->initial_pos)) { - mv->screen.pos_val = (double) -mv->img_hist / (mv->img_h - mv->rows); - edje_object_part_drag_value_set(mv->base, "miniview_screen", 0.0, mv->screen.pos_val); + double val; + val = (double) pos / (mv->img_h - mv->rows); + if ((mv->fits_to_img)) + { + mv->screen.pos_val = bottom_bound - val; + mv->initial_pos = 0; + } + else + { + if (val > 1) + { + mv->img_hist += (mv->img_hist * (int)val); + mv->screen.pos_val = (double)(1 - ( val - (int) val)); + mv->initial_pos = 0; + mv->to_render = 1; + return EINA_TRUE; + } + else + { + mv->screen.pos_val = bottom_bound - val; + mv->initial_pos = 0; + } + } } + if (pos == 0) + mv->screen.pos_val = bottom_bound; + + edje_object_part_drag_value_set(mv->base, "miniview_screen", 0.0, mv->screen.pos_val); mv->to_render = 0; mv->deferred_renderer = NULL; + _screen_visual_bounds(mv); return EINA_FALSE; } --
