font previews in efm - in thumbnails and in efm preview

This commit is contained in:
Carsten Haitzler 2013-07-02 14:01:49 +09:00
parent 0782545137
commit 934e02b320
4 changed files with 396 additions and 103 deletions

View File

@ -633,6 +633,58 @@ group "E_Config" struct {
value "mime" string: "image/x-compressed-xcf";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-ttf";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-type1";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-afm";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-snf";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-otf";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/vnd.font-fontforge-sfd";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-linux-psf";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-ttx";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-speedo";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-pcf";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-bdf";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-cisco-vpn-settings";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "video/3gpp";
value "icon" string: "THUMB";

View File

@ -361,6 +361,58 @@ group "E_Config" struct {
value "mime" string: "image/x-compressed-xcf";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-ttf";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-type1";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-afm";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-snf";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-otf";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/vnd.font-fontforge-sfd";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-linux-psf";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-ttx";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-speedo";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-pcf";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-font-bdf";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "application/x-cisco-vpn-settings";
value "icon" string: "THUMB";
}
group "E_Config_Mime_Icon" struct {
value "mime" string: "video/3gpp";
value "icon" string: "THUMB";

View File

@ -309,6 +309,12 @@ _e_thumb_generate(E_Thumb *eth)
while (mtime_thumb <= mtime_orig)
{
unsigned int *data1;
Eina_Bool sortkey;
Evas_Object *im2, *bg;
im = NULL;
im2 = NULL;
bg = NULL;
ecore_file_mkdir(dbuf);
@ -323,6 +329,8 @@ _e_thumb_generate(E_Thumb *eth)
alpha = 1;
ext = strrchr(eth->file, '.');
sortkey = EINA_FALSE;
if ((ext) && (eth->key) &&
((!strcasecmp(ext, ".edj")) ||
(!strcasecmp(ext, ".eap"))))
@ -347,6 +355,64 @@ _e_thumb_generate(E_Thumb *eth)
evas_object_resize(edje, ww * 4, hh * 4);
evas_object_show(edje);
}
evas_object_move(im, 0, 0);
evas_object_resize(im, ww, hh);
sortkey = EINA_TRUE;
}
else if ((ext) &&
((!strcasecmp(ext, ".ttf")) ||
(!strcasecmp(ext, ".pcf")) ||
(!strcasecmp(ext, ".bdf")) ||
(!strcasecmp(ext, ".ttx")) ||
(!strcasecmp(ext, ".pfa")) ||
(!strcasecmp(ext, ".pfb")) ||
(!strcasecmp(ext, ".afm")) ||
(!strcasecmp(ext, ".sfd")) ||
(!strcasecmp(ext, ".snf")) ||
(!strcasecmp(ext, ".otf")) ||
(!strcasecmp(ext, ".psf")) ||
(!strcasecmp(ext, ".ttc")) ||
(!strcasecmp(ext, ".ttx")) ||
(!strcasecmp(ext, ".gsf")) ||
(!strcasecmp(ext, ".spd"))
))
{
Evas_Coord tx = 0, ty = 0, tw = 0, th = 0;
ww = eth->w;
hh = eth->h;
alpha = 0;
bg = evas_object_rectangle_add(evas);
evas_object_color_set(bg, 96, 96, 96, 255);
evas_object_move(bg, 0, 0);
evas_object_resize(bg, ww, hh);
evas_object_show(bg);
im = evas_object_text_add(evas);
evas_object_text_font_set(im, eth->file, hh / 4);
evas_object_color_set(im, 192, 192, 192, 255);
evas_object_text_ellipsis_set(im, 0.0);
evas_object_text_text_set(im, "ABCabc");
evas_object_geometry_get(im, NULL, NULL, &tw, &th);
if (tw > ww) tw = ww;
tx = 0 + ((ww - tw) / 2);
ty = 0 + (((hh / 2) - th) / 2);
evas_object_move(im, tx, ty);
evas_object_resize(im, tw, th);
evas_object_show(im);
im2 = evas_object_text_add(evas);
evas_object_text_font_set(im2, eth->file, hh / 4);
evas_object_color_set(im2, 255, 255, 255, 255);
evas_object_text_ellipsis_set(im2, 0.0);
evas_object_text_text_set(im2, "123!@?");
evas_object_geometry_get(im2, NULL, NULL, &tw, &th);
if (tw > ww) tw = ww;
tx = 0 + ((ww - tw) / 2);
ty = (hh / 2) + (((hh / 2) - th) / 2);
evas_object_move(im2, tx, ty);
evas_object_resize(im2, tw, th);
evas_object_show(im2);
}
else if (evas_object_image_extension_can_load_get(ext))
{
@ -367,12 +433,14 @@ _e_thumb_generate(E_Thumb *eth)
}
evas_object_image_fill_set(im, 0, 0, ww, hh);
}
evas_object_move(im, 0, 0);
evas_object_resize(im, ww, hh);
sortkey = EINA_TRUE;
}
else
goto end;
ecore_evas_alpha_set(ee, alpha);
evas_object_move(im, 0, 0);
evas_object_resize(im, ww, hh);
ecore_evas_resize(ee, ww, hh);
evas_object_show(im);
if (ww <= 0) goto end;
@ -388,55 +456,57 @@ _e_thumb_generate(E_Thumb *eth)
eet_data_image_write(ef, "/thumbnail/data",
(void *)data, ww, hh, alpha,
0, 91, 1);
ww = 4; hh = 4;
evas_object_image_fill_set(im, 0, 0, ww, hh);
evas_object_resize(im, ww, hh);
ecore_evas_resize(ee, ww, hh);
data = ecore_evas_buffer_pixels_get(ee);
if (!data) goto end;
data1 = malloc(ww * hh * sizeof(unsigned int));
memcpy(data1, data, ww * hh * sizeof(unsigned int));
ww = 2; hh = 2;
evas_object_image_fill_set(im, 0, 0, ww, hh);
evas_object_resize(im, ww, hh);
ecore_evas_resize(ee, ww, hh);
data = ecore_evas_buffer_pixels_get(ee);
if (data)
if (sortkey)
{
unsigned int *data2;
ww = 4; hh = 4;
evas_object_image_fill_set(im, 0, 0, ww, hh);
evas_object_resize(im, ww, hh);
ecore_evas_resize(ee, ww, hh);
data = ecore_evas_buffer_pixels_get(ee);
if (!data) goto end;
data2 = malloc(ww * hh * sizeof(unsigned int));
memcpy(data2, data, ww * hh * sizeof(unsigned int));
ww = 1; hh = 1;
data1 = malloc(ww * hh * sizeof(unsigned int));
memcpy(data1, data, ww * hh * sizeof(unsigned int));
ww = 2; hh = 2;
evas_object_image_fill_set(im, 0, 0, ww, hh);
evas_object_resize(im, ww, hh);
ecore_evas_resize(ee, ww, hh);
data = ecore_evas_buffer_pixels_get(ee);
if (data)
{
unsigned int *data3;
unsigned char id2[(21 * 4) + 1];
int n, i;
int hi, si, vi;
float h, s, v;
const int pat2[4] =
{
0, 3, 1, 2
};
const int pat1[16] =
{
5, 10, 6, 9,
0, 15, 3, 12,
1, 14, 7, 8,
4, 11, 2, 13
};
/* ww = hh = 1 here */
data3 = malloc(sizeof(unsigned int));
memcpy(data3, data, sizeof(unsigned int));
// sort_id
n = 0;
unsigned int *data2;
data2 = malloc(ww * hh * sizeof(unsigned int));
memcpy(data2, data, ww * hh * sizeof(unsigned int));
ww = 1; hh = 1;
evas_object_image_fill_set(im, 0, 0, ww, hh);
evas_object_resize(im, ww, hh);
ecore_evas_resize(ee, ww, hh);
data = ecore_evas_buffer_pixels_get(ee);
if (data)
{
unsigned int *data3;
unsigned char id2[(21 * 4) + 1];
int n, i;
int hi, si, vi;
float h, s, v;
const int pat2[4] =
{
0, 3, 1, 2
};
const int pat1[16] =
{
5, 10, 6, 9,
0, 15, 3, 12,
1, 14, 7, 8,
4, 11, 2, 13
};
/* ww = hh = 1 here */
data3 = malloc(sizeof(unsigned int));
memcpy(data3, data, sizeof(unsigned int));
// sort_id
n = 0;
#define A(v) (((v) >> 24) & 0xff)
#define R(v) (((v) >> 16) & 0xff)
#define G(v) (((v) >> 8) & 0xff)
@ -454,71 +524,73 @@ _e_thumb_generate(E_Thumb *eth)
#define SAVEX(x) \
id2[n++] = 'a' + x;
#if 0
HSV(data3[0]);
SAVEHSV(hi, si, vi);
for (i = 0; i < 4; i++)
{
HSV(data2[pat2[i]]);
HSV(data3[0]);
SAVEHSV(hi, si, vi);
}
for (i = 0; i < 16; i++)
{
HSV(data1[pat1[i]]);
SAVEHSV(hi, si, vi);
}
for (i = 0; i < 4; i++)
{
HSV(data2[pat2[i]]);
SAVEHSV(hi, si, vi);
}
for (i = 0; i < 16; i++)
{
HSV(data1[pat1[i]]);
SAVEHSV(hi, si, vi);
}
#else
HSV(data3[0]);
SAVEX(hi);
for (i = 0; i < 4; i++)
{
HSV(data2[pat2[i]]);
HSV(data3[0]);
SAVEX(hi);
}
for (i = 0; i < 16; i++)
{
HSV(data1[pat1[i]]);
SAVEX(hi);
}
HSV(data3[0]);
SAVEX(vi);
for (i = 0; i < 4; i++)
{
HSV(data2[pat2[i]]);
for (i = 0; i < 4; i++)
{
HSV(data2[pat2[i]]);
SAVEX(hi);
}
for (i = 0; i < 16; i++)
{
HSV(data1[pat1[i]]);
SAVEX(hi);
}
HSV(data3[0]);
SAVEX(vi);
}
for (i = 0; i < 16; i++)
{
HSV(data1[pat1[i]]);
SAVEX(vi);
}
HSV(data3[0]);
SAVEX(si);
for (i = 0; i < 4; i++)
{
HSV(data2[pat2[i]]);
for (i = 0; i < 4; i++)
{
HSV(data2[pat2[i]]);
SAVEX(vi);
}
for (i = 0; i < 16; i++)
{
HSV(data1[pat1[i]]);
SAVEX(vi);
}
HSV(data3[0]);
SAVEX(si);
}
for (i = 0; i < 16; i++)
{
HSV(data1[pat1[i]]);
SAVEX(si);
}
for (i = 0; i < 4; i++)
{
HSV(data2[pat2[i]]);
SAVEX(si);
}
for (i = 0; i < 16; i++)
{
HSV(data1[pat1[i]]);
SAVEX(si);
}
#endif
id2[n++] = 0;
eet_write(ef, "/thumbnail/sort_id", id2, n, 1);
free(data3);
id2[n++] = 0;
eet_write(ef, "/thumbnail/sort_id", id2, n, 1);
free(data3);
}
free(data2);
}
free(data2);
free(data1);
}
free(data1);
end:
if (ef) eet_close(ef);
/* will free all */
if (edje) evas_object_del(edje);
if (ee_im) ecore_evas_free(ee_im);
else if (im)
evas_object_del(im);
else if (im) evas_object_del(im);
if (im2) evas_object_del(im2);
if (bg) evas_object_del(bg);
ecore_evas_free(ee);
eet_clearcache();
break;

View File

@ -43,8 +43,10 @@ struct _E_Widget_Data
Eina_Bool mime_icon : 1;
Eina_Bool is_dir : 1;
Eina_Bool is_txt : 1;
Eina_Bool is_font : 1;
Eina_Bool prev_is_fm : 1;
Eina_Bool prev_is_txt : 1;
Eina_Bool prev_is_font : 1;
Eina_Bool prev_is_video : 1;
};
@ -58,6 +60,7 @@ static void _e_wid_fprev_img_update(E_Widget_Data *wd, const char *path, const
static void _e_wid_del_hook(Evas_Object *obj);
static void _e_wid_fprev_preview_reset(E_Widget_Data *wd);
static void _e_wid_fprev_preview_txt(E_Widget_Data *wd);
static void _e_wid_fprev_preview_font(E_Widget_Data *wd);
static void _e_wid_fprev_preview_fm(E_Widget_Data *wd);
static void
@ -131,7 +134,7 @@ static void
_e_wid_fprev_img_update(E_Widget_Data *wd, const char *path, const char *key)
{
if (!path) return;
if (wd->is_dir || wd->is_txt) return;
if (wd->is_dir || wd->is_txt || wd->is_font) return;
evas_object_smart_callback_del_full(wd->o_preview_preview, "preview_update", _e_wid_fprev_preview_update, wd);
if (eina_str_has_extension(path, ".gif"))
{
@ -207,7 +210,7 @@ _e_wid_fprev_clear_widgets(E_Widget_Data *wd)
CLRWID(o_preview_time_entry);
CLRWID(o_preview_preview);
CLRWID(o_preview_scrollframe);
wd->is_dir = wd->is_txt = wd->prev_is_fm = wd->prev_is_video = EINA_FALSE;
wd->is_dir = wd->is_txt = wd->is_font = wd->prev_is_fm = wd->prev_is_video = EINA_FALSE;
wd->vid_pct = 0;
if (wd->preview_text_file_thread) ecore_thread_cancel(wd->preview_text_file_thread);
wd->preview_text_file_thread = NULL;
@ -418,7 +421,7 @@ _e_wid_fprev_preview_fs_widgets(E_Widget_Data *wd, Eina_Bool mount_point)
}
static void
_e_wid_fprev_preview_file_widgets(E_Widget_Data *wd, Eina_Bool dir, Eina_Bool txt)
_e_wid_fprev_preview_file_widgets(E_Widget_Data *wd, Eina_Bool dir, Eina_Bool txt, Eina_Bool font)
{
Evas *evas = evas_object_evas_get(wd->obj);
Evas_Object *o;
@ -438,6 +441,7 @@ _e_wid_fprev_preview_file_widgets(E_Widget_Data *wd, Eina_Bool dir, Eina_Bool tx
wd->o_preview_properties_table = o;
wd->is_dir = dir;
wd->is_txt = txt;
wd->is_font = font;
if (!dir)
{
@ -659,12 +663,41 @@ _e_wid_fprev_preview_file(E_Widget_Data *wd)
wd->is_txt = !strncmp(wd->mime, "text/", 5);
if (!wd->is_txt)
wd->is_txt = !strcmp(wd->mime, "application/x-shellscript");
if (!wd->is_txt)
{
wd->is_font = !strcmp(wd->mime, "application/x-font");
if (!wd->is_font)
wd->is_font = !strcmp(wd->mime, "application/x-font-ttf");
if (!wd->is_font)
wd->is_font = !strcmp(wd->mime, "application/x-font-type1");
if (!wd->is_font)
wd->is_font = !strcmp(wd->mime, "application/x-font-afm");
if (!wd->is_font)
wd->is_font = !strcmp(wd->mime, "application/x-font-snf");
if (!wd->is_font)
wd->is_font = !strcmp(wd->mime, "application/x-font-otf");
if (!wd->is_font)
wd->is_font = !strcmp(wd->mime, "application/vnd.font-fontforge-sfd");
if (!wd->is_font)
wd->is_font = !strcmp(wd->mime, "application/x-font-linux-psf");
if (!wd->is_font)
wd->is_font = !strcmp(wd->mime, "application/x-font-ttx");
if (!wd->is_font)
wd->is_font = !strcmp(wd->mime, "application/x-font-speedo");
if (!wd->is_font)
wd->is_font = !strcmp(wd->mime, "application/x-font-pcf");
if (!wd->is_font)
wd->is_font = !strcmp(wd->mime, "application/x-font-bdf");
if (!wd->is_font)
wd->is_font = !strcmp(wd->mime, "application/x-cisco-vpn-settings");
}
}
_e_wid_fprev_preview_file_widgets(wd, wd->is_dir, wd->is_txt);
_e_wid_fprev_preview_file_widgets(wd, wd->is_dir, wd->is_txt, wd->is_font);
_e_wid_fprev_preview_reset(wd);
_e_wid_fprev_preview_fm(wd);
_e_wid_fprev_preview_txt(wd);
_e_wid_fprev_preview_font(wd);
_e_wid_fprev_img_update(wd, wd->path, NULL);
e_widget_size_min_get(wd->o_preview_list, &mw, &mh);
@ -812,9 +845,9 @@ _e_wid_fprev_preview_reset(E_Widget_Data *wd)
wd->o_preview_scrollframe = wd->o_preview_preview = NULL;
if (wd->preview_text_file_thread) ecore_thread_cancel(wd->preview_text_file_thread);
wd->preview_text_file_thread = NULL;
if (wd->is_dir || wd->is_txt) return;
if (wd->is_dir || wd->is_txt || wd->is_font) return;
o = e_widget_preview_add(evas_object_evas_get(wd->obj), wd->w, wd->h);
wd->prev_is_txt = wd->prev_is_fm = EINA_FALSE;
wd->prev_is_txt = wd->prev_is_fm = wd->prev_is_font = EINA_FALSE;
wd->o_preview_preview = o;
e_widget_table_object_append(wd->o_preview_preview_table,
wd->o_preview_preview,
@ -871,9 +904,13 @@ static void
_e_wid_fprev_preview_txt_read_notify(void *data, Ecore_Thread *eth __UNUSED__, void *msg)
{
E_Widget_Data *wd = data;
char *buf;
//INF("text='%s'", (char*)msg);
edje_object_part_text_set(wd->o_preview_preview, "e.textblock.message", msg);
buf = alloca(strlen(msg) + 4096);
strcpy(buf, "<align=left>");
strcat(buf, msg);
edje_object_part_text_set(wd->o_preview_preview, "e.textblock.message", buf);
free(msg);
}
@ -920,7 +957,6 @@ _e_wid_fprev_preview_txt(E_Widget_Data *wd)
e_theme_edje_object_set(o, "base/theme/dialog", "e/widgets/dialog/text");
edje_object_signal_emit(o, "e,state,left", "e");
edje_object_message_signal_process(o);
edje_object_part_text_set(wd->o_preview_preview, "e.textblock.message", "");
wd->o_preview_preview = o;
wd->prev_is_txt = EINA_TRUE;
evas_object_resize(o, wd->w, wd->h);
@ -945,6 +981,87 @@ _e_wid_fprev_preview_txt(E_Widget_Data *wd)
_e_wid_fprev_preview_txt_read_end, _e_wid_fprev_preview_txt_read_cancel, wd, EINA_FALSE);
}
static void
_e_wid_fprev_preview_font(E_Widget_Data *wd)
{
Evas_Object *o;
int mw;
if (!wd->is_font) return;
if (!wd->path) return;
if (wd->o_preview_preview && (!wd->prev_is_font))
{
evas_object_del(wd->o_preview_preview);
wd->o_preview_preview = NULL;
}
if (!wd->o_preview_preview)
{
Evas *evas;
char *buf, *escaped;
evas = evas_object_evas_get(wd->obj);
o = edje_object_add(evas);
/* using dialog theme for now because it's simple, common, and doesn't require all
* themes to be updated
*/
e_theme_edje_object_set(o, "base/theme/dialog", "e/widgets/dialog/text");
edje_object_signal_emit(o, "e,state,left", "e");
edje_object_message_signal_process(o);
escaped = eina_str_escape(wd->path);
if (escaped)
{
buf = alloca(strlen(escaped) + 4096);
snprintf(buf, strlen(wd->path) + 4096,
"<font=%s>"
"<font_size=28>"
"28 - ABC abc 0123 @!?#$*{}<br>"
"The quick brown fox jumps.<br>"
"<font_size=20>"
"20 - ABC abc 0123 @!?#$*{}<br>"
"The quick brown fox jumps.<br>"
"<font_size=16>"
"16 - ABC abc 0123 @!?#$*{}<br>"
"The quick brown fox jumps.<br>"
"<font_size=12>"
"12 - ABC abc 0123 @!?#$*{}<br>"
"The quick brown fox jumps.<br>"
"<font_size=10>"
"10 - ABC abc 0123 @!?#$*{}<br>"
"The quick brown fox jumps.<br>"
"<font_size=8>"
"8 - ABC abc 0123 @!?#$*{}<br>"
"The quick brown fox jumps.<br>"
, escaped
);
edje_object_part_text_set(o, "e.textblock.message", buf);
free(escaped);
}
wd->o_preview_preview = o;
wd->prev_is_font = EINA_TRUE;
evas_object_resize(o, wd->w, wd->h);
o = e_widget_scrollframe_simple_add(evas, o);
wd->o_preview_scrollframe = o;
e_widget_size_min_get(wd->o_preview_list, &mw, NULL);
e_widget_size_min_set(o, wd->w, wd->h);
evas_object_propagate_events_set(wd->o_preview_preview, 0);
e_widget_table_object_append(wd->o_preview_preview_table,
o, 0, 0, 2, 1, 1, 1, 1, 1);
e_widget_list_object_repack(wd->o_preview_list,
wd->o_preview_preview_table,
1, 1, 0.5);
e_widget_list_object_repack(wd->o_preview_list,
wd->o_preview_properties_table,
1, 1, 0.5);
evas_object_show(o);
}
}
static void
_e_wid_fprev_preview_fm(E_Widget_Data *wd)
{
@ -1105,6 +1222,6 @@ e_widget_filepreview_filemode_force(Evas_Object *obj)
if (!obj) return;
wd = e_widget_data_get(obj);
if (!wd) return;
_e_wid_fprev_preview_file_widgets(wd, 0, 0);
_e_wid_fprev_preview_file_widgets(wd, 0, 0, 0);
}