Compare commits

...

7 Commits

12 changed files with 241 additions and 115 deletions

View File

@ -32,7 +32,8 @@ For more documentation please see:
EFL is primarily developed on Linux (GNU/Linux) and should work on
most distributions as long as dependencies are provided. It has been
compiled and run also on Windows (using MSYS2 + mingw-w64)),
compiled and run also on Windows (using MSYS2 + mingw-w64) - please see
[windows docs](https://www.enlightenment.org/docs/distros/windows-start.md),
Mac OS X, FreeBSD and NetBSD.
## Components

View File

@ -1065,6 +1065,160 @@ group { name: "e/fileman/default/filedate";
}
}
group { name: "e/fileman/default/check";
parts {
part { name: "base";
clip_to: "selected";
scale: 1;
description { state: "default" 0.0;
image.normal: "i-check";
rel1.offset: 3 3;
rel2.offset: -4 -4;
min: 15 15;
max: 15 15;
visible: 0;
offscale;
}
description { state: "on" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
part { name: "selected"; type: RECT;
description { state: "default" 0.0;
rel.to: "base";
color_class: "/fg/normal/fileman/item/check/check";
}
description { state: "selected" 0.0;
inherit: "default" 0.0;
color_class: "/fg/selected/fileman/item/check/check";
}
}
}
programs {
program { signal: "e,state,selected"; source: "e";
action: STATE_SET "selected" 0.0;
target: "selected";
}
program { signal: "e,state,unselected"; source: "e";
action: STATE_SET "default" 0.0;
target: "selected";
}
program { signal: "e,state,on"; source: "e";
action: STATE_SET "on" 0.0;
target: "base";
}
program { signal: "e,state,off"; source: "e";
action: STATE_SET "default" 0.0;
target: "base";
}
}
}
group { name: "e/fileman/default/circle";
script {
hex(str[], len) {
new i, val = 0;
for (i = 0; i < len; i++) {
val <<= 4;
if ((str[i] >= '0') && (str[i] <= '9')) {
val += str[i] - '0';
} else if ((str[i] >= 'a') && (str[i] <= 'f')) {
val += 10 + str[i] - 'a';
} else if ((str[i] >= 'A') && (str[i] <= 'F')) {
val += 10 + str[i] - 'A';
}
}
return val;
}
public message(Msg_Type:type, id, ...) {
if ((type == MSG_STRING) && (id == 1)) {
new cc[256];
getsarg(2, cc, 255);
custom_state(PART:"base", "default", 0.0);
if (!strncmp(cc, "cc:", 3)) {
strcpy(cc, cc[3]);
set_state_val(PART:"base", STATE_COLOR, 255, 255, 255, 255);
set_state_val(PART:"base", STATE_COLOR_CLASS, cc);
} else if (!strncmp(cc, "#", 1)) {
new r = 255, g = 255, b = 255, a = 255;
strcpy(cc, cc[1]);
if (strlen(cc) == 3) { // #35a
r = hex(cc[0], 1);
g = hex(cc[1], 1);
b = hex(cc[2], 1);
} else if (strlen(cc) == 4) { // #35af
r = hex(cc[0], 1);
g = hex(cc[1], 1);
b = hex(cc[2], 1);
a = hex(cc[3], 1);
} else if (strlen(cc) == 6) { // #3355aa
r = hex(cc[0], 2);
g = hex(cc[2], 2);
b = hex(cc[4], 2);
} else if (strlen(cc) == 8) { // #3355aaff
r = hex(cc[0], 2);
g = hex(cc[2], 2);
b = hex(cc[4], 2);
a = hex(cc[6], 2);
}
set_state_val(PART:"base", STATE_COLOR, r, g, b, a);
set_state_val(PART:"base", STATE_COLOR_CLASS, "");
}
set_state(PART:"base", "custom", 0.0);
}
}
}
parts {
set { name: "file-circle-outline";
image { image: "speaker-clip-160.png" COMP; size: 81 81 99999 99999; }
image { image: "speaker-clip-080.png" COMP; size: 41 41 80 80 99999; }
image { image: "speaker-clip-040.png" COMP; size: 0 0 40 40; }
}
part { name: "base"; mouse_events: 0;
scale: 1;
description { state: "default" 0.0;
min: 15 15;
max: 15 15;
rel1.offset: 3 3;
rel2.offset: -4 -4;
image.normal: "i-radio";
offscale;
fixed: 1 1;
}
}
part { name: "circle"; mouse_events: 0;
scale: 1;
description { state: "default" 0.0;
min: 17 17;
max: 17 17;
rel.to: "base";
image.normal: "file-circle-outline";
fixed: 1 1;
color_class: "/fg/selected/list/item";
visible: 0;
}
description { state: "selected" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
}
programs {
program { signal: "e,state,selected"; source: "e";
action: STATE_SET "selected" 0.0;
target: "circle";
}
program { signal: "e,state,unselected"; source: "e";
action: STATE_SET "default" 0.0;
target: "circle";
}
}
}
group { name: "e/fileman/default/list/detailed";
inherit: "e/fileman/default/list/variable";
parts {
@ -1094,6 +1248,20 @@ group { name: "e/fileman/default/list/detailed";
color_class: "/fg/disabled/list/item"; \
} \
}
part { name: "e.text.label";
description { state: "default" 0.0;
rel2.to_x: "e.swallow.detail1";
rel2.relative: 0.0 1.0;
}
description { state: "selected" 0.0;
rel2.to_x: "e.swallow.detail1";
rel2.relative: 0.0 1.0;
}
description { state: "disabled" 0.0;
rel2.to_x: "e.swallow.detail1";
rel2.relative: 0.0 1.0;
}
}
DETAILTEXT("e.text.detail1", "e.swallow.detail1", "e.text.label")
DETAILTEXT("e.text.detail2", "e.swallow.detail2", "e.text.detail1")
DETAILTEXT("e.text.detail3", "e.swallow.detail3", "e.text.detail2")
@ -1119,15 +1287,15 @@ group { name: "e/fileman/default/list/detailed";
target: "e.text.detail5";
target: "e.text.detail6";
}
part { name: "e.swallow.detail6"; type: SWALLOW; nomouse; scale;
insert_after: "e.text.detail6";
part { name: "e.swallow.detail6"; type: SWALLOW; scale;
insert_after: "e.swallow.entry";
description { state: "default" 0.0; offscale;
align: 1.0 0.5; min: 15 5;
rel1 { offset: -5 0; relative: 1.0 0.0; }
rel2 { offset: -5 -1; relative: 1.0 1.0; }
}
}
part { name: "e.swallow.detail5"; type: SWALLOW; nomouse; scale;
part { name: "e.swallow.detail5"; type: SWALLOW; scale;
insert_after: "e.swallow.detail6";
description { state: "default" 0.0; offscale;
align: 1.0 0.5; min: 20 5;
@ -1135,7 +1303,7 @@ group { name: "e/fileman/default/list/detailed";
rel2 { to_x: "e.swallow.detail6"; offset: -1 -1; relative: 0.0 1.0; }
}
}
part { name: "e.swallow.detail4"; type: SWALLOW; nomouse; scale;
part { name: "e.swallow.detail4"; type: SWALLOW; scale;
insert_after: "e.swallow.detail5";
description { state: "default" 0.0; offscale;
align: 1.0 0.5; min: 20 5;
@ -1143,7 +1311,7 @@ group { name: "e/fileman/default/list/detailed";
rel2 { to_x: "e.swallow.detail5"; offset: -1 -1; relative: 0.0 1.0; }
}
}
part { name: "e.swallow.detail3"; type: SWALLOW; nomouse; scale;
part { name: "e.swallow.detail3"; type: SWALLOW; scale;
insert_after: "e.swallow.detail4";
description { state: "default" 0.0; offscale;
align: 1.0 0.5; min: 20 5;
@ -1151,7 +1319,7 @@ group { name: "e/fileman/default/list/detailed";
rel2 { to_x: "e.swallow.detail4"; offset: -1 -1; relative: 0.0 1.0; }
}
}
part { name: "e.swallow.detail2"; type: SWALLOW; nomouse; scale;
part { name: "e.swallow.detail2"; type: SWALLOW; scale;
insert_after: "e.swallow.detail3";
description { state: "default" 0.0; offscale;
align: 1.0 0.5; min: 20 5;
@ -1159,7 +1327,7 @@ group { name: "e/fileman/default/list/detailed";
rel2 { to_x: "e.swallow.detail3"; offset: -1 -1; relative: 0.0 1.0; }
}
}
part { name: "e.swallow.detail1"; type: SWALLOW; nomouse; scale;
part { name: "e.swallow.detail1"; type: SWALLOW; scale;
insert_after: "e.swallow.detail2";
description { state: "default" 0.0; offscale;
align: 1.0 0.5; min: 20 5;
@ -1167,20 +1335,6 @@ group { name: "e/fileman/default/list/detailed";
rel2 { to_x: "e.swallow.detail2"; offset: -1 -1; relative: 0.0 1.0; }
}
}
part { name: "e.text.label";
description { state: "default" 0.0;
rel2.to_x: "e.swallow.detail1";
rel2.relative: 0.0 1.0;
}
description { state: "selected" 0.0;
rel2.to_x: "e.swallow.detail1";
rel2.relative: 0.0 1.0;
}
description { state: "disabled" 0.0;
rel2.to_x: "e.swallow.detail1";
rel2.relative: 0.0 1.0;
}
}
}
}

View File

@ -618,9 +618,11 @@ foreach evas_loader_map_inst : evas_loader_map
meson.add_install_script('meson/evas_loader_conf.sh', evas_loader_original, evas_loader_link_types)
endforeach
doxygen = find_program('doxygen', required : false)
if doxygen.found()
doxygen = find_program('doxygen', required : get_option('docs'))
if get_option('docs')
if not doxygen.found()
error('Need doxygen for docs')
endif
subdir('doc')
endif

View File

@ -382,3 +382,9 @@ option('max-fd-size',
value : '8192',
description : 'This is the maximim set of fds and thus maximum fd value allowed +1 in the ecore main loop handler'
)
option('docs',
type: 'boolean',
value: false,
description: 'Enable building C of documentation (Requires doxygen)'
)

View File

@ -545,91 +545,6 @@ efreet_desktop_util_cache_file(void)
/*
* Needs EAPI because of helper binaries
*/
#define SHSH(n, v) ((((v) << (n)) & 0xffffffff) | ((v) >> (32 - (n))))
static inline int
int_to_bigendian(int in)
{
static const unsigned char test[4] = { 0x11, 0x22, 0x33, 0x44 };
static const unsigned int *test_i = (const unsigned int *)test;
if (test_i[0] == 0x44332211) return eina_swap32(in);
return in;
}
static void
sha1(unsigned char *data, int size, unsigned char *dst)
{
unsigned int digest[5], word[80], wa, wb, wc, wd, we, t;
unsigned char buf[64], *d;
int idx, left, i;
const unsigned int magic[4] =
{ 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6 };
idx = 0;
digest[0] = 0x67452301; digest[1] = 0xefcdab89; digest[2] = 0x98badcfe;
digest[3] = 0x10325476; digest[4] = 0xc3d2e1f0;
memset(buf, 0, sizeof(buf));
for (left = size, d = data; left > 0; left--, d++)
{
if ((idx == 0) && (left < 64))
{
memset(buf, 0, 60);
buf[60] = (size >> 24) & 0xff;
buf[61] = (size >> 16) & 0xff;
buf[62] = (size >> 8) & 0xff;
buf[63] = (size) & 0xff;
}
buf[idx] = *d;
idx++;
if ((idx == 64) || (left == 1))
{
if ((left == 1) && (idx < 64)) buf[idx] = 0x80;
for (i = 0; i < 16; i++)
{
word[i] = (unsigned int)buf[(i * 4) ] << 24;
word[i] |= (unsigned int)buf[(i * 4) + 1] << 16;
word[i] |= (unsigned int)buf[(i * 4) + 2] << 8;
word[i] |= (unsigned int)buf[(i * 4) + 3];
}
for (i = 16; i < 80; i++)
word[i] = SHSH(1,
word[i - 3 ] ^ word[i - 8 ] ^
word[i - 14] ^ word[i - 16]);
wa = digest[0]; wb = digest[1]; wc = digest[2];
wd = digest[3]; we = digest[4];
for (i = 0; i < 80; i++)
{
if (i < 20)
t = SHSH(5, wa) + ((wb & wc) | ((~wb) & wd)) +
we + word[i] + magic[0];
else if (i < 40)
t = SHSH(5, wa) + (wb ^ wc ^ wd) +
we + word[i] + magic[1];
else if (i < 60)
t = SHSH(5, wa) + ((wb & wc) | (wb & wd) | (wc & wd)) +
we + word[i] + magic[2];
else if (i < 80)
t = SHSH(5, wa) + (wb ^ wc ^ wd) +
we + word[i] + magic[3];
we = wd;
wd = wc;
wc = SHSH(30, wb);
wb = wa;
wa = t;
}
digest[0] += wa; digest[1] += wb; digest[2] += wc;
digest[3] += wd; digest[4] += we;
idx = 0;
}
}
t = int_to_bigendian(digest[0]); digest[0] = t;
t = int_to_bigendian(digest[1]); digest[1] = t;
t = int_to_bigendian(digest[2]); digest[2] = t;
t = int_to_bigendian(digest[3]); digest[3] = t;
t = int_to_bigendian(digest[4]); digest[4] = t;
memcpy(dst, digest, 5 * 4);
}
EAPI Eina_Bool
efreet_file_cache_fill(const char *file, Efreet_Cache_Check *check)
@ -651,7 +566,7 @@ efreet_file_cache_fill(const char *file, Efreet_Cache_Check *check)
if ((size > 0) && ((size_t)size >= sizeof(link))) return EINA_FALSE;
if (stat(file, &st) != 0) return EINA_FALSE;
}
if (size > 0) sha1((unsigned char *)link, size, check->link_sha1);
if (size > 0) eina_sha1((const unsigned char *)link, size, check->link_sha1);
#endif
check->uid = st.st_uid;
check->gid = st.st_gid;

View File

@ -1526,7 +1526,7 @@ _efl_ui_focus_manager_calc_efl_ui_focus_manager_manager_focus_set(Eo *obj, Efl_U
}
else
{
ERR("Could not fetch a node located at %p", node->focusable);
F_DBG("Could not fetch a node located at %p", node->focusable);
goto end;
}
}

View File

@ -25,6 +25,8 @@ EVAS_API Cutout_Rects *evas_common_draw_context_cutouts_new (vo
EVAS_API void evas_common_draw_context_cutouts_free (Cutout_Rects* rects);
EVAS_API void evas_common_draw_context_cutouts_real_free (Cutout_Rects* rects);
EVAS_API void evas_common_draw_context_cutouts_del (Cutout_Rects* rects, int idx);
EVAS_API void evas_common_draw_context_cutout_max_set (RGBA_Draw_Context *dc, int max);
EVAS_API void evas_common_draw_context_cutout_size_min_set (RGBA_Draw_Context *dc, int min);
EVAS_API void evas_common_draw_context_add_cutout (RGBA_Draw_Context *dc, int x, int y, int w, int h);
EVAS_API void evas_common_draw_context_clear_cutouts (RGBA_Draw_Context *dc);
EVAS_API Cutout_Rects *evas_common_draw_context_apply_cutouts (RGBA_Draw_Context *dc, Cutout_Rects *recycle);

View File

@ -174,6 +174,8 @@ evas_common_draw_context_new(void)
dc = _evas_common_draw_context_find();
if (!dc) return NULL;
memset(dc, 0, sizeof(RGBA_Draw_Context));
dc->cutout.count_max = 0x7fffffff;
dc->cutout.size_min = 8 * 8;
return dc;
}
@ -296,11 +298,23 @@ evas_common_draw_context_unset_multiplier(RGBA_Draw_Context *dc)
dc->mul.use = 0;
}
EVAS_API void
evas_common_draw_context_cutout_max_set(RGBA_Draw_Context *dc, int max)
{
dc->cutout.count_max = max;
}
EVAS_API void
evas_common_draw_context_cutout_size_min_set(RGBA_Draw_Context *dc, int min)
{
dc->cutout.size_min = min;
}
EVAS_API void
evas_common_draw_context_add_cutout(RGBA_Draw_Context *dc, int x, int y, int w, int h)
{
// if (dc->cutout.rects > 512) return;
if (dc->cutout.active >= dc->cutout.count_max) return;
if ((w * h) < dc->cutout.size_min) return;
if (dc->clip.use)
{
#if 1 // this is a bit faster
@ -335,8 +349,8 @@ evas_common_draw_context_add_cutout(RGBA_Draw_Context *dc, int x, int y, int w,
RECTS_CLIP_TO_RECT(x, y, w, h,
dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h);
#endif
if ((w * h) < dc->cutout.size_min) return;
}
if ((w * h) <= (8 * 8)) return;
if (dc->cutout.last_add.w > 0)
{
if ((dc->cutout.last_add.x == x) && (dc->cutout.last_add.y == y) &&

View File

@ -645,6 +645,8 @@ struct _Cutout_Rects
Cutout_Rect *rects;
int active;
int max;
int count_max;
int size_min;
struct {
int x, w, y, h;
} last_add;

View File

@ -158,7 +158,8 @@ struct _Evas_GL_Shared
Eina_Bool etc1_subimage : 1;
Eina_Bool s3tc : 1;
// tuning params - per gpu/cpu combo?
#define DEF_CUTOUT 4096
#define DEF_CUTOUT 64
#define DEF_CUTOUT_SIZE_MIN (64*64)
#define MAX_PIPES 32
#define DEF_PIPES 8
@ -188,6 +189,9 @@ struct _Evas_GL_Shared
struct {
int max;
} cutout;
struct {
int min;
} cutout_size;
struct {
int max;
} pipes;

View File

@ -1004,6 +1004,7 @@ evas_gl_common_context_new(void)
// magic numbers that are a result of imperical testing and getting
// "best case" performance across a range of systems
shared->info.tune.cutout.max = DEF_CUTOUT;
shared->info.tune.cutout_size.min = DEF_CUTOUT_SIZE_MIN;
shared->info.tune.pipes.max = DEF_PIPES;
shared->info.tune.atlas.max_alloc_size = DEF_ATLAS_ALLOC;
shared->info.tune.atlas.max_alloc_alpha_size = DEF_ATLAS_ALLOC_ALPHA;
@ -1040,6 +1041,7 @@ evas_gl_common_context_new(void)
} while (0)
GETENVOPT("EVAS_GL_CUTOUT_MAX", cutout.max, -1, 0x7fffffff);
GETENVOPT("EVAS_GL_CUTOUT_SIZE_MIN", cutout_size.min, -1, 0x7fffffff);
GETENVOPT("EVAS_GL_PIPES_MAX", pipes.max, 1, MAX_PIPES);
GETENVOPT("EVAS_GL_ATLAS_ALLOC_SIZE", atlas.max_alloc_size, MIN_ATLAS_ALLOC, MAX_ATLAS_ALLOC);
GETENVOPT("EVAS_GL_ATLAS_ALLOC_ALPHA_SIZE", atlas.max_alloc_alpha_size, MIN_ATLAS_ALLOC_ALPHA, MAX_ATLAS_ALLOC_ALPHA);
@ -1109,6 +1111,7 @@ evas_gl_common_context_new(void)
"\n"
"EVAS_GL_GET_PROGRAM_BINARY: %i\n"
"EVAS_GL_CUTOUT_MAX: %i\n"
"EVAS_GL_CUTOUT_SIZE_MIN: %i\n"
"EVAS_GL_PIPES_MAX: %i\n"
"EVAS_GL_ATLAS_ALLOC_SIZE: %i\n"
"EVAS_GL_ATLAS_ALLOC_ALPHA_SIZE: %i\n"
@ -1128,6 +1131,7 @@ evas_gl_common_context_new(void)
(int)shared->info.bin_program,
(int)shared->info.tune.cutout.max,
(int)shared->info.tune.cutout_size.min,
(int)shared->info.tune.pipes.max,
(int)shared->info.tune.atlas.max_alloc_size,
(int)shared->info.tune.atlas.max_alloc_alpha_size,

View File

@ -788,6 +788,10 @@ _rotate_image_data(Render_Engine_GL_Generic *re, Evas_GL_Image *im1)
// Create a new and temporary context
dc = evas_common_draw_context_new();
evas_common_draw_context_cutout_max_set
(dc, gl_context->shared->info.tune.cutout.max);
evas_common_draw_context_cutout_size_min_set
(dc, gl_context->shared->info.tune.cutout_size.min);
evas_common_draw_context_set_clip(dc, 0, 0, im2->w, im2->h);
gl_context->dc = dc;
@ -2317,6 +2321,23 @@ eng_pixel_alpha_get(void *image, int x, int y, DATA8 *alpha, int src_region_x, i
return EINA_TRUE;
}
static void *
eng_context_new(void *engine)
{
Render_Engine_GL_Generic *re = engine;
Evas_Engine_GL_Context *gl_context;
void *ctx;
gl_context = gl_generic_context_find(re, 1);
ctx = pfunc.context_new(&re->software);
evas_common_draw_context_cutout_max_set
(ctx, gl_context->shared->info.tune.cutout.max);
evas_common_draw_context_cutout_size_min_set
(ctx, gl_context->shared->info.tune.cutout_size.min);
return ctx;
}
static void
eng_context_flush(void *engine)
{
@ -3110,6 +3131,7 @@ module_open(Evas_Module *em)
ORD(engine_new);
ORD(engine_free);
ORD(context_new);
ORD(context_clip_image_set);
ORD(context_clip_image_unset);
ORD(context_clip_image_get);