From 596d234ba1852d8e2f0cced4f6aceba89bd2e6ef Mon Sep 17 00:00:00 2001 From: Boris Faure Date: Thu, 23 Jul 2020 22:52:47 +0200 Subject: [PATCH] about: add youtube channel --- data/themes/default/base.edc | 237 +++++++++++++++++++++++++++++++++++ src/bin/about.c | 94 +++++++++++++- 2 files changed, 329 insertions(+), 2 deletions(-) diff --git a/data/themes/default/base.edc b/data/themes/default/base.edc index e835479f..b1b848b7 100644 --- a/data/themes/default/base.edc +++ b/data/themes/default/base.edc @@ -381,12 +381,248 @@ group { name: "terminology/base"; signal: "mouse,clicked,3"; source: "twitter.txt"; action: SIGNAL_EMIT "about,twitter,ctx" "terminology"; } + + part { name: "youtube.base"; type: RECT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + fixed: 1 1; + rel1 { + to_y: "terminology.about"; + relative: 0.5 1.0; + } + rel2 { + relative: 1.0 1.0; + } + } + } + part { name: "youtube.txt"; type: TEXT; + mouse_events: 1; + scale: 1; + effect: GLOW; + description { state: "default" 0.0; + visible: 0; + align: 0.0 0.5; + fixed: 1 1; + rel1 { + to: "youtube.base"; + relative: 0.5 0.5; + } + rel2 { + to: "youtube.base"; + relative: 0.5 0.5; + } + color: 51 255 17 255; + color2: 136 255 136 40; + color3: 136 255 136 8; + text { + font: "Sans"; size: 11; + text: "Youtube channel"; + align: 0.0 0.5; + min: 1 1; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "youtube.bottom"; + mouse_events: 0; + description { state: "default" 0.0; + fixed: 1 1; + image.normal: "lk_bottom.png"; + image.border: 9 9 0 0; + align: 0.5 1.0; + min: 20 8; + rel1 { + to: "youtube.txt"; + offset: -6 -2; + relative: 0.0 1.0; + } + rel2 { + to: "youtube.txt"; + offset: 5 -1; + } + color: 51 255 17 255; + fill.smooth: 0; + visible: 0; + } + description { state: "visible" 0.0; + inherit: "default"; + visible: 1; + } + } + part { name: "youtube.l"; + mouse_events: 0; + description { state: "default" 0.0; + fixed: 1 1; + image.normal: "lk_left.png"; + align: 0.0 1.0; + min: 4 4; + rel1 { + to: "youtube.txt"; + offset: 6 -2; + relative: 0.0 1.0; + } + rel2 { + to: "youtube.txt"; + offset: 6 -2; + relative: 0.0 1.0; + } + color: 51 255 17 255; + visible: 0; + } + description { state: "visible" 0.0; + inherit: "default"; + visible: 1; + } + description { state: "out" 0.0; + fixed: 1 1; + inherit: "visible" 0.0; + min: 16 16; + rel1 { + to: "youtube.txt"; + offset: -10 -2; + } + rel2 { + to: "youtube.txt"; + offset: -10 -2; + } + color: 51 255 17 255; + } + description { state: "out2" 0.0; + fixed: 1 1; + inherit: "visible" 0.0; + min: 32 32; + rel1 { + to: "youtube.txt"; + offset: -26 -2; + } + rel2 { + to: "youtube.txt"; + offset: -26 -2; + } + color: 51 255 17 0; + } + } + part { name: "youtube.r"; + mouse_events: 0; + description { state: "default" 0.0; + fixed: 1 1; + image.normal: "lk_right.png"; + align: 1.0 1.0; + min: 4 4; + rel1 { + to: "youtube.txt"; + offset: -5 -1; + relative: 1.0 1.0; + } + rel2 { + to: "youtube.txt"; + offset: -5 -1; + relative: 1.0 1.0; + } + color: 51 255 17 0; + visible: 0; + } + description { state: "visible" 0.0; + inherit: "default"; + visible: 1; + } + description { state: "out" 0.0; + fixed: 1 1; + inherit: "visible" 0.0; + min: 16 16; + rel1 { + to: "youtube.txt"; + offset: 9 -2; + } + rel2 { + to: "youtube.txt"; + offset: 9 -2; + } + color: 51 255 17 255; + } + description { state: "out2" 0.0; + fixed: 1 1; + inherit: "visible" 0.0; + min: 32 32; + rel1 { + to: "youtube.txt"; + offset: 25 -2; + } + rel2 { + to: "youtube.txt"; + offset: 25 -2; + } + color: 51 255 17 0; + } + } + program { name: "youtube.show2"; + action: STATE_SET "out2" 0.0; + transition: LINEAR 0.3; + target: "youtube.l"; + target: "youtube.r"; + after: "youtube.show3"; + } + program { name: "youtube.show3"; + action: STATE_SET "default" 0.0; + target: "youtube.l"; + target: "youtube.r"; + after: "youtube.show"; + } + program { + name: "youtube.show_bottom"; + signal: "mouse,in"; source: "youtube.txt"; + action: STATE_SET "visible" 0.0; + target: "youtube.bottom"; + } + program { + name: "youtube.show"; + signal: "mouse,in"; source: "youtube.txt"; + action: STATE_SET "out" 0.0; + transition: LINEAR 0.3; + target: "youtube.l"; + target: "youtube.r"; + after: "youtube.show2"; + } + program { + signal: "mouse,out"; source: "youtube.txt"; + action: STATE_SET "visible" 0.0; + target: "youtube.txt"; + } + program { + signal: "mouse,out"; source: "youtube.txt"; + action: ACTION_STOP; + target: "youtube.show"; + target: "youtube.show2"; + target: "youtube.show3"; + } + program { + signal: "mouse,out"; source: "youtube.txt"; + action: STATE_SET "default" 0.0; + target: "youtube.bottom"; + target: "youtube.l"; + target: "youtube.r"; + } + program { + signal: "mouse,clicked,1"; source: "youtube.txt"; + action: SIGNAL_EMIT "about,youtube" "terminology"; + } + program { + signal: "mouse,clicked,3"; source: "youtube.txt"; + action: SIGNAL_EMIT "about,youtube,ctx" "terminology"; + } + program { signal: "about,show"; source: "terminology"; action: STATE_SET "visible" 0.0; transition: SPRING 1.2 2.0 6; target: "terminology.about"; target: "twitter.txt"; + target: "youtube.txt"; } program { signal: "about,hide"; source: "terminology"; @@ -394,6 +630,7 @@ group { name: "terminology/base"; transition: DECELERATE 0.6; target: "terminology.about"; target: "twitter.txt"; + target: "youtube.txt"; } diff --git a/src/bin/about.c b/src/bin/about.c index c19278c1..787e7fd6 100644 --- a/src/bin/about.c +++ b/src/bin/about.c @@ -7,6 +7,7 @@ #include "termio.h" #define TWITTER_HANDLE "@_Terminology_" +#define YOUTUBE_URL "https://www.youtube.com/channel/UCZ2iBYbbxvcZfcUmnz-rmlQ" typedef struct _about_ctx { Evas_Object *layout; @@ -67,6 +68,8 @@ _cb_ctxpopup_dismissed(void *data, evas_object_del(obj); } +/* Twitter {{{ */ + static void _cb_ctxpopup_copy_twitter(void *data, Evas_Object *obj, @@ -95,8 +98,6 @@ _cb_ctxpopup_open_twitter_as_url(void *data, evas_object_del(obj); } - - static void _cb_twitter(void *data, Evas_Object *_obj EINA_UNUSED, @@ -139,6 +140,82 @@ _cb_twitter_ctx(void *data, evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _cb_ctxpopup_del, ctx); } +/* }}} */ +/* Youtube {{{ */ + +static void +_cb_ctxpopup_copy_youtube(void *data, + Evas_Object *obj, + void *_event EINA_UNUSED) +{ + About_Ctx *ctx = data; + + elm_cnp_selection_set(ctx->win, ELM_SEL_TYPE_CLIPBOARD, + ELM_SEL_FORMAT_TEXT, + YOUTUBE_URL, + strlen(YOUTUBE_URL)); + ctx->ctxpopup = NULL; + evas_object_del(obj); +} + +static void +_cb_ctxpopup_open_youtube_as_url(void *data, + Evas_Object *obj, + void *_event EINA_UNUSED) +{ + About_Ctx *ctx = data; + + _run_url(ctx, YOUTUBE_URL); + + ctx->ctxpopup = NULL; + evas_object_del(obj); +} + + + +static void +_cb_youtube(void *data, + Evas_Object *_obj EINA_UNUSED, + const char *_sig EINA_UNUSED, + const char *_src EINA_UNUSED) +{ + About_Ctx *ctx = data; + + _run_url(ctx, YOUTUBE_URL); +} + +static void +_cb_youtube_ctx(void *data, + Evas_Object *_obj EINA_UNUSED, + const char *_sig EINA_UNUSED, + const char *_src EINA_UNUSED) +{ + About_Ctx *ctx = data; + Evas_Object *popup; + const char *fmt; + Evas *e = evas_object_evas_get(ctx->base); + Evas_Coord x; + Evas_Coord y; + + evas_pointer_canvas_xy_get(e, &x, &y); + + popup = elm_ctxpopup_add(ctx->win); + ctx->ctxpopup = popup; + fmt = eina_stringshare_printf(_("Copy '%s'"), + YOUTUBE_URL); + + elm_ctxpopup_item_append(popup, fmt, NULL, + _cb_ctxpopup_copy_youtube, ctx); + elm_ctxpopup_item_append(popup, _("Open"), NULL, + _cb_ctxpopup_open_youtube_as_url, ctx); + evas_object_move(popup, x, y); + evas_object_show(popup); + evas_object_smart_callback_add(popup, "dismissed", + _cb_ctxpopup_dismissed, ctx); + evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, + _cb_ctxpopup_del, ctx); +} +/* }}} */ static void _cb_mouse_down(void *data, @@ -165,6 +242,11 @@ _cb_mouse_down(void *data, elm_layout_signal_callback_del(ctx->base, "about,twitter,ctx", "*", _cb_twitter_ctx); + elm_layout_signal_callback_del(ctx->base, "about,youtube", "*", + _cb_youtube); + elm_layout_signal_callback_del(ctx->base, "about,youtube,ctx", "*", + _cb_youtube_ctx); + free(ctx); } @@ -189,6 +271,8 @@ about_show(Evas_Object *win, Evas_Object *base, Evas_Object *term, elm_object_part_text_set(base, "twitter.txt", _("Twitter: @_Terminology_")); + elm_object_part_text_set(base, "youtube.txt", + _("Youtube channel")); ctx->layout = o = elm_layout_add(win); if (elm_layout_file_set(o, config_theme_path_get(config), @@ -321,6 +405,12 @@ about_show(Evas_Object *win, Evas_Object *base, Evas_Object *term, elm_layout_signal_callback_add(base, "about,twitter,ctx", "*", _cb_twitter_ctx, ctx); + elm_layout_signal_callback_add(base, "about,youtube", "*", + _cb_youtube, ctx); + elm_layout_signal_callback_add(base, "about,youtube,ctx", "*", + _cb_youtube_ctx, ctx); + + elm_layout_signal_emit(base, "about,show", "terminology"); elm_object_signal_emit(ctx->layout, "begin" ,"terminology"); elm_object_focus_set(ctx->layout, EINA_TRUE);