win: make background opacity work with color scheme

This commit is contained in:
Boris Faure 2022-10-11 23:07:31 +02:00
parent 1de8762caf
commit d79cdef0f1
Signed by untrusted user who does not match committer: borisfaure
GPG Key ID: EAA9CD729F522998
3 changed files with 78 additions and 51 deletions

View File

@ -1057,13 +1057,13 @@ _smart_calculate(Evas_Object *obj)
sd->h = oh; sd->h = oh;
switch (sd->type) 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_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_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_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_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_THUMB: _type_thumb_calc(obj, ox, oy, ow, oh); break;
case MEDIA_TYPE_UNKNOWN: case MEDIA_TYPE_UNKNOWN: return;
return;
} }
evas_object_move(sd->clip, ox, oy); evas_object_move(sd->clip, ox, oy);
evas_object_resize(sd->clip, ow, oh); 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: case MEDIA_TYPE_EDJE:
sd->ext = ".edj"; sd->ext = ".edj";
break; break;
case MEDIA_TYPE_RECT:
case MEDIA_TYPE_MOV: case MEDIA_TYPE_MOV:
case MEDIA_TYPE_UNKNOWN: case MEDIA_TYPE_UNKNOWN:
case MEDIA_TYPE_THUMB: case MEDIA_TYPE_THUMB:

View File

@ -18,6 +18,7 @@ typedef enum tag_Media_Type Media_Type;
enum tag_Media_Type { enum tag_Media_Type {
MEDIA_TYPE_UNKNOWN, MEDIA_TYPE_UNKNOWN,
MEDIA_TYPE_RECT,
MEDIA_TYPE_IMG, MEDIA_TYPE_IMG,
MEDIA_TYPE_SCALE, MEDIA_TYPE_SCALE,
MEDIA_TYPE_EDJE, MEDIA_TYPE_EDJE,

View File

@ -1057,9 +1057,20 @@ _term_trans(Term *term)
Evas_Object *edje = elm_layout_edje_get(term->core); Evas_Object *edje = elm_layout_edje_get(term->core);
Win *wn = term->wn; Win *wn = term->wn;
msg.val = term->config->opacity; if (term->config->translucent)
edje_object_message_send(term->bg_edj, EDJE_MESSAGE_INT, 1, &msg); {
edje_object_message_send(edje, EDJE_MESSAGE_INT, 1, &msg); 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) if (term->config->translucent != wn->translucent)
{ {
@ -5895,7 +5906,6 @@ void change_theme(Evas_Object *win, Config *config)
{ {
const Eina_List *terms, *l; const Eina_List *terms, *l;
Term *term; Term *term;
Win *wn;
terms = terms_from_win_object(win); terms = terms_from_win_object(win);
if (!terms) return; if (!terms) return;
@ -5908,7 +5918,13 @@ void change_theme(Evas_Object *win, Config *config)
colors_term_init(termio_textgrid_get(term->termio), colors_term_init(termio_textgrid_get(term->termio),
config->color_scheme); config->color_scheme);
termio_config_set(term->termio, config); 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); l = elm_theme_extension_list_get(NULL);
@ -6854,63 +6870,72 @@ _cb_media_del(void *data,
static void static void
_term_media_update(Term *term, const Config *config) _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])) 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, type = media_src_type_get(config->background,
strlen(config->background)); strlen(config->background));
term->media = o = media_add(term->wn->win, o = media_add(term->wn->win,
config->background, config, config->background, config,
MEDIA_BG, type); MEDIA_BG, type);
evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, evas_object_event_callback_add(o, EVAS_CALLBACK_DEL,
_cb_media_del, term); _cb_media_del, term);
elm_layout_content_set(term->core, "terminology.background", o); elm_layout_content_set(term->core, "terminology.background", o);
evas_object_show(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 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_object_color_set(o,
EVAS_CALLBACK_DEL, config->color_scheme->bg.r,
_cb_media_del); config->color_scheme->bg.g,
elm_layout_signal_emit(term->bg, "media,off", "terminology"); config->color_scheme->bg.b, 255);
elm_layout_signal_emit(term->core, "media,off", "terminology");
evas_object_del(term->media);
term->media = NULL;
} }
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;
} }
} }