From d79cdef0f1058f258f14bb25aad579640368fb0b Mon Sep 17 00:00:00 2001 From: Boris Faure Date: Tue, 11 Oct 2022 23:07:31 +0200 Subject: [PATCH] win: make background opacity work with color scheme --- src/bin/media.c | 5 +- src/bin/media.h | 1 + src/bin/win.c | 123 +++++++++++++++++++++++++++++------------------- 3 files changed, 78 insertions(+), 51 deletions(-) diff --git a/src/bin/media.c b/src/bin/media.c index 1915bf34..2bb89feb 100644 --- a/src/bin/media.c +++ b/src/bin/media.c @@ -1057,13 +1057,13 @@ _smart_calculate(Evas_Object *obj) sd->h = oh; switch (sd->type) { + case MEDIA_TYPE_RECT: return; /* NOT HANDLED HERE */ case MEDIA_TYPE_IMG: _type_img_calc(obj, ox, oy, ow, oh); break; case MEDIA_TYPE_SCALE: _type_scale_calc(obj, ox, oy, ow, oh); break; case MEDIA_TYPE_EDJE: _type_edje_calc(obj, ox, oy, ow, oh); break; case MEDIA_TYPE_MOV: _type_mov_calc(obj, ox, oy, ow, oh); break; case MEDIA_TYPE_THUMB: _type_thumb_calc(obj, ox, oy, ow, oh); break; - case MEDIA_TYPE_UNKNOWN: - return; + case MEDIA_TYPE_UNKNOWN: return; } evas_object_move(sd->clip, ox, oy); evas_object_resize(sd->clip, ow, oh); @@ -1283,6 +1283,7 @@ media_add(Evas_Object *parent, const char *src, const Config *config, int mode, case MEDIA_TYPE_EDJE: sd->ext = ".edj"; break; + case MEDIA_TYPE_RECT: case MEDIA_TYPE_MOV: case MEDIA_TYPE_UNKNOWN: case MEDIA_TYPE_THUMB: diff --git a/src/bin/media.h b/src/bin/media.h index 4cb27bdb..be8198ac 100644 --- a/src/bin/media.h +++ b/src/bin/media.h @@ -18,6 +18,7 @@ typedef enum tag_Media_Type Media_Type; enum tag_Media_Type { MEDIA_TYPE_UNKNOWN, + MEDIA_TYPE_RECT, MEDIA_TYPE_IMG, MEDIA_TYPE_SCALE, MEDIA_TYPE_EDJE, diff --git a/src/bin/win.c b/src/bin/win.c index 1f284c77..0aced5ac 100644 --- a/src/bin/win.c +++ b/src/bin/win.c @@ -1057,9 +1057,20 @@ _term_trans(Term *term) Evas_Object *edje = elm_layout_edje_get(term->core); Win *wn = term->wn; - msg.val = term->config->opacity; - edje_object_message_send(term->bg_edj, EDJE_MESSAGE_INT, 1, &msg); - edje_object_message_send(edje, EDJE_MESSAGE_INT, 1, &msg); + if (term->config->translucent) + { + msg.val = term->config->opacity; + edje_object_message_send(term->bg_edj, EDJE_MESSAGE_INT, 1, &msg); + msg.val = term->config->opacity; + edje_object_message_send(edje, EDJE_MESSAGE_INT, 1, &msg); + } + else + { + msg.val = 100; + edje_object_message_send(term->bg_edj, EDJE_MESSAGE_INT, 1, &msg); + msg.val = term->config->opacity; + edje_object_message_send(edje, EDJE_MESSAGE_INT, 1, &msg); + } if (term->config->translucent != wn->translucent) { @@ -5895,7 +5906,6 @@ void change_theme(Evas_Object *win, Config *config) { const Eina_List *terms, *l; Term *term; - Win *wn; terms = terms_from_win_object(win); if (!terms) return; @@ -5908,7 +5918,13 @@ void change_theme(Evas_Object *win, Config *config) colors_term_init(termio_textgrid_get(term->termio), config->color_scheme); termio_config_set(term->termio, config); - /* TODO: change background color */ + if (config->color_scheme && term->mediatype == MEDIA_TYPE_RECT) + { + evas_object_color_set(term->media, + config->color_scheme->bg.r, + config->color_scheme->bg.g, + config->color_scheme->bg.b, 255); + } } l = elm_theme_extension_list_get(NULL); @@ -6854,63 +6870,72 @@ _cb_media_del(void *data, static void _term_media_update(Term *term, const Config *config) { + Media_Type type; + Evas_Object *o; + + if (term->media) + { + evas_object_event_callback_del(term->media, + EVAS_CALLBACK_DEL, + _cb_media_del); + evas_object_del(term->media); + } + if ((config->background) && (config->background[0])) { - Evas_Object *o; - Media_Type type; - - if (term->media) - { - evas_object_event_callback_del(term->media, - EVAS_CALLBACK_DEL, - _cb_media_del); - evas_object_del(term->media); - } type = media_src_type_get(config->background, strlen(config->background)); - term->media = o = media_add(term->wn->win, - config->background, config, - MEDIA_BG, type); + o = media_add(term->wn->win, + config->background, config, + MEDIA_BG, type); evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, _cb_media_del, term); elm_layout_content_set(term->core, "terminology.background", o); evas_object_show(o); - term->mediatype = type; - switch (type) - { - case MEDIA_TYPE_IMG: - elm_layout_signal_emit(term->bg, "media,image", "terminology"); - elm_layout_signal_emit(term->core, "media,image", "terminology"); - break; - case MEDIA_TYPE_SCALE: - elm_layout_signal_emit(term->bg, "media,scale", "terminology"); - elm_layout_signal_emit(term->core, "media,scale", "terminology"); - break; - case MEDIA_TYPE_EDJE: - elm_layout_signal_emit(term->bg, "media,edje", "terminology"); - elm_layout_signal_emit(term->core, "media,edje", "terminology"); - break; - case MEDIA_TYPE_MOV: - elm_layout_signal_emit(term->bg, "media,movie", "terminology"); - elm_layout_signal_emit(term->core, "media,movie", "terminology"); - break; - case MEDIA_TYPE_UNKNOWN: - default: - break; - } } else { - if (term->media) + type = MEDIA_TYPE_RECT; + o = evas_object_rectangle_add(evas_object_evas_get(term->wn->win)); + evas_object_color_set(o, 0, 0, 0, 255); + if (config->color_scheme) { - evas_object_event_callback_del(term->media, - EVAS_CALLBACK_DEL, - _cb_media_del); - elm_layout_signal_emit(term->bg, "media,off", "terminology"); - elm_layout_signal_emit(term->core, "media,off", "terminology"); - evas_object_del(term->media); - term->media = NULL; + evas_object_color_set(o, + config->color_scheme->bg.r, + config->color_scheme->bg.g, + config->color_scheme->bg.b, 255); } + else + evas_object_color_set(o, 0, 0, 0, 255); + } + evas_object_show(o); + term->media = o; + term->mediatype = type; + switch (type) + { + case MEDIA_TYPE_RECT: + elm_layout_signal_emit(term->bg, "media,off", "terminology"); + elm_layout_signal_emit(term->core, "media,off", "terminology"); + break; + case MEDIA_TYPE_IMG: + elm_layout_signal_emit(term->bg, "media,image", "terminology"); + elm_layout_signal_emit(term->core, "media,image", "terminology"); + break; + case MEDIA_TYPE_SCALE: + elm_layout_signal_emit(term->bg, "media,scale", "terminology"); + elm_layout_signal_emit(term->core, "media,scale", "terminology"); + break; + case MEDIA_TYPE_EDJE: + elm_layout_signal_emit(term->bg, "media,edje", "terminology"); + elm_layout_signal_emit(term->core, "media,edje", "terminology"); + break; + case MEDIA_TYPE_MOV: + elm_layout_signal_emit(term->bg, "media,movie", "terminology"); + elm_layout_signal_emit(term->core, "media,movie", "terminology"); + break; + case MEDIA_TYPE_UNKNOWN: + default: + break; } }