ecrire/src/bin/ui/font_dialog.c

140 lines
3.8 KiB
C

#include <Elementary.h>
#include "../mess_header.h"
Evas_Object *font_win, *list, *fsize;
void
my_win_del(void *data, Evas_Object *obj, void *event_info)
{
(void) data;
(void) obj;
(void) event_info;
font_win = NULL;
}
static Eina_List *
_font_list_get(const Evas *e)
{
Eina_List *flist = evas_font_available_list(e);
Eina_List *itr, *nitr;
const char *font, *prev_font = NULL;
flist = eina_list_sort(flist, eina_list_count(flist),
(Eina_Compare_Cb) strcasecmp);
EINA_LIST_FOREACH_SAFE(flist, itr, nitr, font)
{
Elm_Font_Properties *efp;
efp = elm_font_properties_get(font);
/* Remove dups */
if (prev_font && !strcmp(efp->name, prev_font))
{
flist = eina_list_remove_list(flist, itr);
}
else
{
eina_stringshare_replace(&font, efp->name);
prev_font = font;
eina_list_data_set(itr, font);
}
elm_font_properties_free(efp);
}
return flist;
}
static void
_set_clicked(void *data,
Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
const char *selected = NULL;
Elm_List_Item *it = elm_list_selected_item_get(list);
if (it)
selected = elm_list_item_label_get(it);
editor_font_choose(data, selected, elm_spinner_value_get(fsize));
}
Evas_Object *
ui_font_dialog_open(Evas_Object *parent, Evas_Object *entry)
{
Evas_Object *win, *bg, *bx, *btn, *hbx, *lbl;
if (font_win)
{
evas_object_show(font_win);
return font_win;
}
font_win = win = elm_win_add(parent, "font-select", ELM_WIN_TOOLBAR);
elm_win_autodel_set(win, EINA_TRUE);
elm_win_title_set(win, _("Select Font"));
evas_object_smart_callback_add(win, "delete,request", my_win_del, entry);
bg = elm_bg_add(win);
elm_win_resize_object_add(win, bg);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(bg);
bx = elm_box_add(win);
elm_win_resize_object_add(win, bx);
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(bx);
list = elm_list_add(win);
evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(bx, list);
evas_object_show(list);
hbx = elm_box_add(bx);
elm_box_horizontal_set(hbx, EINA_TRUE);
elm_box_pack_end(bx, hbx);
evas_object_show(hbx);
lbl = elm_label_add(hbx);
elm_object_text_set(lbl, _("Font size:"));
elm_box_pack_end(hbx, lbl);
evas_object_show(lbl);
fsize = elm_spinner_add(hbx);
elm_spinner_label_format_set(fsize, _("%.0f pts"));
elm_spinner_step_set(fsize, 1);
elm_spinner_wrap_set(fsize, EINA_FALSE);
elm_object_style_set (fsize, "vertical");
elm_spinner_min_max_set(fsize, 0, 72);
evas_object_size_hint_align_set(fsize, 0.0, 0.5);
elm_box_pack_end(hbx, fsize);
evas_object_show(fsize);
btn = elm_button_add(win);
elm_object_text_set(btn, _("Set"));
evas_object_size_hint_align_set(btn, 1.0, 0.0);
evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(btn);
elm_box_pack_end(hbx, btn);
evas_object_smart_callback_add(btn, "clicked", _set_clicked, entry);
/* Populate list */
{
const char *font;
Eina_List *flist, *itr;
flist = _font_list_get(evas_object_evas_get(list));
EINA_LIST_FOREACH(flist, itr, font)
{
elm_list_item_append(list, font, NULL, NULL, NULL, NULL);
}
EINA_LIST_FREE(flist, font)
eina_stringshare_del(font);
}
/* Forcing it to be the min height. */
evas_object_resize(win, 300, 500);
evas_object_show(win);
return win;
}