diff --git a/data/images/exit.png b/data/images/exit.png index a07f059..8b19a9a 100644 Binary files a/data/images/exit.png and b/data/images/exit.png differ diff --git a/data/images/ladyhand.png b/data/images/ladyhand.png index edc1e40..06c12bc 100644 Binary files a/data/images/ladyhand.png and b/data/images/ladyhand.png differ diff --git a/data/images/lovethisdogharvey.png b/data/images/lovethisdogharvey.png new file mode 100644 index 0000000..85851a4 Binary files /dev/null and b/data/images/lovethisdogharvey.png differ diff --git a/data/images/meson.build b/data/images/meson.build index 89c4cc7..5b7c0c1 100644 --- a/data/images/meson.build +++ b/data/images/meson.build @@ -9,4 +9,5 @@ install_data('go-up.png', 'go-down.png', 'sky_01.jpg', 'sky_02.jpg', 'sky_03.jpg', 'sky_04.jpg', 'effects.png', 'clo.png', 'bolt.png', 'menu.png', + 'lovethisdogharvey.png', install_dir: join_paths(dir_data, 'evisum/images')) diff --git a/src/bin/evisum_config.h b/src/bin/evisum_config.h index bd3465f..ac4882a 100644 --- a/src/bin/evisum_config.h +++ b/src/bin/evisum_config.h @@ -3,7 +3,7 @@ #include "ui/ui.h" -#define CONFIG_VERSION 0x0003 +#define CONFIG_VERSION 0x0004 typedef struct _Evisum_Config { @@ -12,6 +12,7 @@ typedef struct _Evisum_Config Eina_Bool sort_reverse; int width; int height; + int poll_delay; Eina_Bool effects; } Evisum_Config; diff --git a/src/bin/ui/ui.c b/src/bin/ui/ui.c index f421e50..260e06a 100644 --- a/src/bin/ui/ui.c +++ b/src/bin/ui/ui.c @@ -29,6 +29,7 @@ _config_save(Ui *ui) _evisum_config->width = w; _evisum_config->height = h; _evisum_config->effects = evisum_ui_effects_enabled_get(); + _evisum_config->poll_delay = ui->poll_delay; config_save(_evisum_config); } @@ -40,6 +41,7 @@ _config_load(Ui *ui) ui->sort_type = _evisum_config->sort_type; ui->sort_reverse = _evisum_config->sort_reverse; + ui->poll_delay = _evisum_config->poll_delay; if ((_evisum_config->width > 0) && (_evisum_config->height > 0)) evas_object_resize(ui->win, _evisum_config->width, _evisum_config->height); @@ -1133,54 +1135,12 @@ _main_menu_dismissed_cb(void *data, Evas_Object *obj EINA_UNUSED, { Ui *ui = data; - elm_menu_close(ui->main_menu); + elm_ctxpopup_dismiss(ui->main_menu); evas_object_del(ui->main_menu); ui->main_menu = NULL; } -static void -_main_menu_create(Ui *ui) -{ - Evas_Object *menu; - Elm_Object_Item *menu_it; - - menu = elm_menu_add(ui->win); - menu_it = elm_menu_item_add(menu, NULL, NULL, _("File"), NULL, NULL); - elm_menu_item_add(menu, menu_it, evisum_icon_path_get("exit"), _("Quit"), _quit_cb, ui); - menu_it = elm_menu_item_add(menu, NULL, NULL, _("View"), NULL, NULL); - elm_menu_item_add(menu, menu_it, evisum_icon_path_get("cpu"), _("CPU"), - _menu_cpu_activity_clicked_cb, ui); - elm_menu_item_add(menu, menu_it, evisum_icon_path_get("memory"), _("Memory"), - _menu_memory_activity_clicked_cb, ui); - elm_menu_item_add(menu, menu_it, evisum_icon_path_get("storage"), _("Storage"), - _menu_disk_activity_clicked_cb, ui); - elm_menu_item_add(menu, menu_it, evisum_icon_path_get("misc"), _("Misc"), - _menu_misc_activity_clicked_cb, ui); - elm_menu_item_separator_add(menu, menu_it); - elm_menu_item_add(menu, menu_it, evisum_icon_path_get("effects"), _("Effects"), - _menu_effects_clicked_cb, ui); - menu_it = elm_menu_item_add(menu, NULL, NULL, _("Help"), NULL, NULL); - elm_menu_item_add(menu, menu_it, "evisum", _("About"), _about_clicked_cb, ui); - evas_object_show(menu); - - ui->main_menu = menu; - - evas_object_smart_callback_add(menu, "dismissed", _main_menu_dismissed_cb, ui); -} - -static void -_btn_menu_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Ui *ui = data; - - if (!ui->main_menu) - _main_menu_create(ui); - else - _main_menu_dismissed_cb(ui, NULL, NULL); -} - static Evas_Object * _btn_create(Evas_Object *parent, const char *icon, const char *text, void *cb, void *data) { @@ -1203,6 +1163,122 @@ _btn_create(Evas_Object *parent, const char *icon, const char *text, void *cb, v return btn; } +static void +_main_menu_slider_changed_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +{ + Ui *ui = data; + + ui->poll_delay = elm_slider_value_get(obj) + 0.5; + + _config_save(ui); +} + +static void +_main_menu_create(Ui *ui, Evas_Object *btn) +{ + Evas_Object *o, *bx, *hbox, *sep, *fr, *sli; + Evas_Coord ox, oy, ow, oh; + int r, g, b, a; + + evas_object_geometry_get(btn, &ox, &oy, &ow, &oh); + o = elm_ctxpopup_add(ui->win); + evas_object_size_hint_weight_set(o, EXPAND, EXPAND); + evas_object_size_hint_align_set(o, FILL, FILL); + elm_object_style_set(o, "noblock"); + evas_object_color_get(o, &r, &g, &b, &a); + evas_object_color_set(o, r * 0.75, g * 0.75, b * 0.75, a * 0.75); + + bx = elm_box_add(o); + evas_object_size_hint_weight_set(bx, EXPAND, EXPAND); + evas_object_size_hint_align_set(bx, FILL, FILL); + evas_object_show(bx); + + fr = elm_frame_add(o); + elm_object_text_set(fr, _("Options")); + evas_object_size_hint_weight_set(fr, EXPAND, EXPAND); + evas_object_size_hint_align_set(fr, FILL, FILL); + evas_object_show(fr); + + hbox = elm_box_add(o); + elm_box_horizontal_set(hbox, 1); + evas_object_size_hint_align_set(hbox, FILL, FILL); + evas_object_size_hint_weight_set(hbox, EXPAND, EXPAND); + evas_object_show(hbox); + + btn = _btn_create(hbox, "cpu", _("CPU"), _menu_cpu_activity_clicked_cb, ui); + elm_box_pack_end(hbox, btn); + + btn = _btn_create(hbox, "memory", _("Memory"), _menu_memory_activity_clicked_cb, ui); + elm_box_pack_end(hbox, btn); + + btn = _btn_create(hbox, "storage", _("Storage"), _menu_disk_activity_clicked_cb, ui); + elm_box_pack_end(hbox, btn); + + btn = _btn_create(hbox, "misc", _("Misc"), _menu_misc_activity_clicked_cb, ui); + elm_box_pack_end(hbox, btn); + + sep = elm_separator_add(hbox); + evas_object_size_hint_align_set(sep, FILL, FILL); + evas_object_size_hint_weight_set(sep, EXPAND, EXPAND); + elm_separator_horizontal_set(sep, 0); + evas_object_show(sep); + elm_box_pack_end(hbox, sep); + + btn = _btn_create(hbox, "effects", _("Effects"), _menu_effects_clicked_cb, ui); + elm_box_pack_end(hbox, btn); + + sep = elm_separator_add(hbox); + evas_object_size_hint_align_set(sep, FILL, FILL); + evas_object_size_hint_weight_set(sep, EXPAND, EXPAND); + elm_separator_horizontal_set(sep, 0); + evas_object_show(sep); + elm_box_pack_end(hbox, sep); + + btn = _btn_create(hbox, "evisum", _("About"), _about_clicked_cb, ui); + elm_box_pack_end(hbox, btn); + btn = _btn_create(hbox, "exit", _("Quit"), _quit_cb, ui); + elm_box_pack_end(hbox, btn); + + sli = elm_slider_add(o); + evas_object_size_hint_weight_set(sli, EXPAND, EXPAND); + elm_slider_min_max_set(sli, 1.0, 10.0); + elm_slider_span_size_set(sli, 10.0); + elm_slider_step_set(sli, 1 / 10.0); + elm_slider_indicator_format_set(sli, "%1.0f"); + elm_slider_unit_format_set(sli, _("%1.0f secs")); + elm_slider_value_set(sli, ui->poll_delay); + evas_object_size_hint_align_set(sli, FILL, FILL); + elm_object_tooltip_text_set(sli, _("Poll delay (seconds)")); + evas_object_smart_callback_add(sli, "slider,drag,stop", _main_menu_slider_changed_cb, ui); + evas_object_smart_callback_add(sli, "delay,changed", _main_menu_slider_changed_cb, ui); + evas_object_show(sli); + + elm_box_pack_end(bx, hbox); + elm_box_pack_end(bx, sli); + + evas_object_size_hint_min_set(fr, 100, 100); + elm_object_content_set(fr, bx); + elm_object_content_set(o, fr); + + elm_ctxpopup_direction_priority_set(o, ELM_CTXPOPUP_DIRECTION_UP, ELM_CTXPOPUP_DIRECTION_DOWN, + ELM_CTXPOPUP_DIRECTION_LEFT, ELM_CTXPOPUP_DIRECTION_RIGHT); + evas_object_move(o, ox + (ow / 2), oy); + evas_object_show(o); + ui->main_menu = o; +} + +static void +_btn_menu_clicked_cb(void *data, Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + Ui *ui = data; + + if (!ui->main_menu) + _main_menu_create(ui, obj); + else + _main_menu_dismissed_cb(ui, NULL, NULL); +} + static void _ui_content_system_add(Ui *ui) { @@ -1374,7 +1450,7 @@ _ui_content_system_add(Ui *ui) evas_object_show(hbox); elm_box_pack_end(box2, hbox); - btn = _btn_create(hbox, "menu", _("Menu"), _btn_menu_clicked_cb, ui); + btn = _btn_create(hbox, "menu", NULL, _btn_menu_clicked_cb, ui); elm_box_pack_end(hbox, btn); ui->entry_search = entry = elm_entry_add(parent); @@ -1510,6 +1586,9 @@ _evisum_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) eina_lock_release(&_lock); } + if (ui->main_menu) + _main_menu_dismissed_cb(ui, NULL, NULL); + _config_save(ui); } @@ -1589,7 +1668,7 @@ _system_info_all_poll(void *data, Ecore_Thread *thread) return; } ecore_thread_feedback(thread, info); - for (int i = 0; i < 4; i++) + for (int i = 0; i < 4 * ui->poll_delay; i++) { if (ecore_thread_check(thread)) return; @@ -1695,12 +1774,8 @@ _ui_init(Evas_Object *parent) _config_load(ui); - // **** it!!! full steam ahead if (evisum_ui_effects_enabled_get()) - { - evisum_ui_background_random_add(ui->win, 1); - ui->poll_delay = 1; - } + evisum_ui_background_random_add(ui->win, 1); _ui_content_add(parent, ui); diff --git a/src/bin/ui/ui_util.c b/src/bin/ui/ui_util.c index e3e8a88..fe05a09 100644 --- a/src/bin/ui/ui_util.c +++ b/src/bin/ui/ui_util.c @@ -229,8 +229,10 @@ evisum_child_window_show(Evas_Object *parent, Evas_Object *win) typedef struct { Ui *ui; Evas_Object *label; + Evas_Object *win; Evas_Object *version; Evas_Object *bg; + Evas_Object *im; Ecore_Animator *animator; int pos; } Animate_Data; @@ -262,7 +264,7 @@ about_anim(void *data) ad = data; - evas_object_geometry_get(ad->bg, NULL, NULL, &w, &h); + evas_object_geometry_get(ad->bg, NULL, NULL, &w, &h); evas_object_geometry_get(ad->label, &x, NULL, &ow, &oh); evas_object_move(ad->label, x, ad->pos); evas_object_show(ad->label); @@ -278,7 +280,9 @@ evisum_about_window_show(void *data) { Ui *ui; Animate_Data *about; - Evas_Object *win, *bg, *box, *version, *label, *btn; + Evas_Object *win, *bg, *box, *version, *label, *btn, *im; + Evas_Coord x, y, w, h; + Evas_Coord iw, ih; const char *copyright = "" "" @@ -306,7 +310,7 @@ evisum_about_window_show(void *data) if (ui->win_about) return; - ui->win_about = win = elm_win_add(ui->win, "evisum", ELM_WIN_DIALOG_BASIC); + ui->win_about = win = elm_win_add(ui->win, "evisum", ELM_WIN_BASIC); elm_win_title_set(win, "About Evisum"); bg = elm_bg_add(win); @@ -334,18 +338,31 @@ evisum_about_window_show(void *data) eina_slstr_printf("%s", PACKAGE_VERSION)); + evas_object_geometry_get(win, &x, &y, &w, &h); + + im = evas_object_image_filled_add(evas_object_evas_get(bg)); + evas_object_image_file_set(im, evisum_icon_path_get("lovethisdogharvey"), NULL); + evas_object_image_size_get(im, &iw, &ih); + evas_object_size_hint_min_set(im, iw, ih); + evas_object_resize(im, iw, ih); + evas_object_pass_events_set(im, 1); + evas_object_move(im, x + (iw), y + (ih / 2)); + evas_object_show(im); + about = malloc(sizeof(Animate_Data)); + about->win = win; about->bg = bg; about->label = label; about->version = version; about->pos = elm_config_scale_get() * 320; about->ui = ui; + about->im = im; about->animator = ecore_animator_add(about_anim, about); btn = elm_button_add(win); evas_object_size_hint_align_set(btn, 0.5, 0.9); evas_object_size_hint_weight_set(btn, EXPAND, EXPAND); - elm_object_text_set(btn, _("Okay!")); + elm_object_text_set(btn, _("Close")); evas_object_show(btn); evas_object_smart_callback_add(btn, "clicked", _win_del_cb, about);