From 3716c7ec51d25d93b70a5197bfbef4eb2f7b9e68 Mon Sep 17 00:00:00 2001 From: Boris Faure Date: Thu, 6 Aug 2015 21:26:43 +0200 Subject: [PATCH] apply zoom level/font size to all terms in a window --- src/bin/termcmd.c | 27 ++++++++++++++++----------- src/bin/termio.c | 20 ++++++++++---------- src/bin/win.c | 34 ++++++++++++++++++++++++++++++++++ src/bin/win.h | 8 ++++++++ 4 files changed, 68 insertions(+), 21 deletions(-) diff --git a/src/bin/termcmd.c b/src/bin/termcmd.c index cf5792fb..cbe00732 100644 --- a/src/bin/termcmd.c +++ b/src/bin/termcmd.c @@ -23,12 +23,17 @@ _termcmd_search(Evas_Object *obj EINA_UNUSED, Evas_Object *win EINA_UNUSED, Evas } static Eina_Bool -_termcmd_font_size(Evas_Object *obj, Evas_Object *win EINA_UNUSED, Evas_Object *bg EINA_UNUSED, const char *cmd) +_termcmd_font_size(Evas_Object *obj, Evas_Object *win EINA_UNUSED, + Evas_Object *bg EINA_UNUSED, const char *cmd) { Config *config = termio_config_get(obj); if (config) { + Term *term = termio_term_get(obj); + Win *wn = term_win_get(term); + int new_size; + if (cmd[0] == 0) // back to default { config->font.bitmap = config->font.orig_bitmap; @@ -37,8 +42,7 @@ _termcmd_font_size(Evas_Object *obj, Evas_Object *win EINA_UNUSED, Evas_Object * eina_stringshare_del(config->font.name); config->font.name = eina_stringshare_add(config->font.orig_name); } - termio_font_size_set(obj, config->font.orig_size); - return EINA_TRUE; + new_size = config->font.orig_size; } else if (cmd[0] == 'b') // big font size { @@ -47,23 +51,24 @@ _termcmd_font_size(Evas_Object *obj, Evas_Object *win EINA_UNUSED, Evas_Object * config->font.bitmap = 1; eina_stringshare_del(config->font.name); config->font.name = eina_stringshare_add("10x20.pcf"); - termio_font_size_set(obj, 20); - } - else - { - termio_font_size_set(obj, 20); } + new_size = 20; } else if (cmd[0] == '+') // size up { - termio_font_size_set(obj, config->font.size + 1); + new_size = config->font.size + 1; } else if (cmd[0] == '-') // size down { - termio_font_size_set(obj, config->font.size - 1); + new_size = config->font.size - 1; } else - ERR(_("Unknown font command: %s"), cmd); + { + ERR(_("Unknown font command: %s"), cmd); + return EINA_TRUE; + } + + win_font_size_set(wn, new_size); } return EINA_TRUE; } diff --git a/src/bin/termio.c b/src/bin/termio.c index 39cec99b..d8f319a4 100644 --- a/src/bin/termio.c +++ b/src/bin/termio.c @@ -4422,11 +4422,10 @@ _smart_cb_gest_zoom_start(void *data, void *event) config = sd->config; if (config) { - int sz; - + int sz = (double)config->font.size * p->zoom; sd->zoom_fontsize_start = config->font.size; - sz = (double)sd->zoom_fontsize_start * p->zoom; - if (sz != config->font.size) _font_size_set(data, sz); + if (sz != config->font.size) + win_font_size_set(term_win_get(sd->term), sz); } sd->didclick = EINA_TRUE; return EVAS_EVENT_FLAG_ON_HOLD; @@ -4443,8 +4442,9 @@ _smart_cb_gest_zoom_move(void *data, void *event) config = sd->config; if (config) { - int sz = (double)sd->zoom_fontsize_start * p->zoom; - if (sz != config->font.size) _font_size_set(data, sz); + int sz = (double)config->font.size * p->zoom; + if (sz != config->font.size) + win_font_size_set(term_win_get(sd->term), sz); } sd->didclick = EINA_TRUE; return EVAS_EVENT_FLAG_ON_HOLD; @@ -4461,8 +4461,9 @@ _smart_cb_gest_zoom_end(void *data, void *event) config = sd->config; if (config) { - int sz = (double)sd->zoom_fontsize_start * p->zoom; - if (sz != config->font.size) _font_size_set(data, sz); + int sz = (double)config->font.size * p->zoom; + if (sz != config->font.size) + win_font_size_set(term_win_get(sd->term), sz); } sd->didclick = EINA_TRUE; return EVAS_EVENT_FLAG_ON_HOLD; @@ -4471,7 +4472,6 @@ _smart_cb_gest_zoom_end(void *data, void *event) static Evas_Event_Flags _smart_cb_gest_zoom_abort(void *data, void *event EINA_UNUSED) { -// Elm_Gesture_Zoom_Info *p = event; Termio *sd = evas_object_smart_data_get(data); Config *config; @@ -4480,7 +4480,7 @@ _smart_cb_gest_zoom_abort(void *data, void *event EINA_UNUSED) if (config) { if (sd->zoom_fontsize_start != config->font.size) - _font_size_set(data, sd->zoom_fontsize_start); + win_font_size_set(term_win_get(sd->term), sd->zoom_fontsize_start); } sd->didclick = EINA_TRUE; return EVAS_EVENT_FLAG_ON_HOLD; diff --git a/src/bin/win.c b/src/bin/win.c index 9293f5bc..3a91d90d 100644 --- a/src/bin/win.c +++ b/src/bin/win.c @@ -4117,6 +4117,24 @@ term_new(Win *wn, Config *config, const char *cmd, /* }}} */ + + +static Eina_Bool +_font_size_set(Term *term, void *data) +{ + int fontsize = (intptr_t) data; + + termio_font_size_set(term->termio, fontsize); + + return ECORE_CALLBACK_PASS_ON; +} + +void +win_font_size_set(Win *wn, int new_size) +{ + for_each_term_do(wn, &_font_size_set, (void*)(intptr_t)new_size); +} + void windows_free(void) { @@ -4146,3 +4164,19 @@ windows_update(void) tc->update(tc); } } + +Eina_Bool +for_each_term_do(Win *wn, For_Each_Term cb, void *data) +{ + Eina_List *l; + Term *term; + Eina_Bool res = ECORE_CALLBACK_DONE; + + EINA_LIST_FOREACH(wn->terms, l, term) + { + res = cb(term, data); + if (res == ECORE_CALLBACK_CANCEL) + return res; + } + return res; +} diff --git a/src/bin/win.h b/src/bin/win.h index 0b414d81..fda7b44a 100644 --- a/src/bin/win.h +++ b/src/bin/win.h @@ -52,10 +52,18 @@ void term_next(Term *term); void term_prev(Term *term); Win * term_win_get(Term *term); +void +win_font_size_set(Win *wn, int new_size); Eina_Bool term_has_popmedia(const Term *term); void term_popmedia_close(Term *term); +typedef Eina_Bool (*For_Each_Term)(Term *term, void *data); + +Eina_Bool +for_each_term_do(Win *wn, For_Each_Term cb, void *data); + + #endif