forked from enlightenment/efl
From: Hyoyoung Chang <hyoyoung.chang@samsung.com>
Subject: [E-devel] [patch] elm_win - add continuous capturing screen I've made a patch about elm_win. Adding repeat option to support continuous capturing the screen. Repeat range is can set from 1 to 999. Filename is set like "filename001.png" SVN revision: 61034
This commit is contained in:
parent
a36e9072b6
commit
eaa1afc111
|
@ -42,7 +42,7 @@
|
||||||
* screenshot and how long to delay in the engine string. The engine string
|
* screenshot and how long to delay in the engine string. The engine string
|
||||||
* is encoded in the following way:
|
* is encoded in the following way:
|
||||||
*
|
*
|
||||||
* "shot:[delay=XX][:][file=XX]"
|
* "shot:[delay=XX][:][repeat=DDD][:][file=XX]"
|
||||||
*
|
*
|
||||||
* Where options are separated by a ":" char if more than one option is given,
|
* Where options are separated by a ":" char if more than one option is given,
|
||||||
* with delay, if provided being the first option and file the last (order
|
* with delay, if provided being the first option and file the last (order
|
||||||
|
@ -50,8 +50,12 @@
|
||||||
* shown before doing the virtual "in memory" rendering and then save the
|
* shown before doing the virtual "in memory" rendering and then save the
|
||||||
* output to the file specified by the file option (and then exit). If no
|
* output to the file specified by the file option (and then exit). If no
|
||||||
* delay is given, the default is 0.5 seconds. If no file is given the
|
* delay is given, the default is 0.5 seconds. If no file is given the
|
||||||
* default output file is "out.png". Some examples of using the shot engine:
|
* default output file is "out.png". Repeat option is for continous
|
||||||
|
* capturing screenshots. Repeat range is from 1 to 999 and
|
||||||
|
* filename is fixed to "out001.png"
|
||||||
|
* Some examples of using the shot engine:
|
||||||
*
|
*
|
||||||
|
* ELM_ENGINE="shot:delay=1.0:repeat=5:file=elm_test.png" elementary_test
|
||||||
* ELM_ENGINE="shot:delay=1.0:file=elm_test.png" elementary_test
|
* ELM_ENGINE="shot:delay=1.0:file=elm_test.png" elementary_test
|
||||||
* ELM_ENGINE="shot:file=elm_test2.png" elementary_test
|
* ELM_ENGINE="shot:file=elm_test2.png" elementary_test
|
||||||
* ELM_ENGINE="shot:delay=2.0" elementary_test
|
* ELM_ENGINE="shot:delay=2.0" elementary_test
|
||||||
|
@ -85,6 +89,8 @@ struct _Elm_Win
|
||||||
struct {
|
struct {
|
||||||
const char *info;
|
const char *info;
|
||||||
Ecore_Timer *timer;
|
Ecore_Timer *timer;
|
||||||
|
int repeat_count;
|
||||||
|
int shot_counter;
|
||||||
} shot;
|
} shot;
|
||||||
Eina_Bool autodel : 1;
|
Eina_Bool autodel : 1;
|
||||||
int *autodel_clear, rot;
|
int *autodel_clear, rot;
|
||||||
|
@ -188,18 +194,69 @@ _shot_file_get(Elm_Win *win)
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
char *tmp = strdup(win->shot.info);
|
char *tmp = strdup(win->shot.info);
|
||||||
|
char *repname = NULL;
|
||||||
|
|
||||||
if (!tmp) return NULL;
|
if (!tmp) return NULL;
|
||||||
|
|
||||||
for (p = (char *)win->shot.info; *p; p++)
|
for (p = (char *)win->shot.info; *p; p++)
|
||||||
{
|
{
|
||||||
if (!strncmp(p, "file=", 5))
|
if (!strncmp(p, "file=", 5))
|
||||||
{
|
{
|
||||||
strcpy(tmp, p + 5);
|
strcpy(tmp, p + 5);
|
||||||
return tmp;
|
if (!win->shot.repeat_count) return tmp;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char *dotptr = rindex(tmp, '.');
|
||||||
|
if (dotptr)
|
||||||
|
{
|
||||||
|
repname = malloc(sizeof(char)*(strlen(tmp) + 16));
|
||||||
|
strncpy(repname, tmp, dotptr - tmp);
|
||||||
|
sprintf(repname + (dotptr - tmp), "%03i",
|
||||||
|
win->shot.shot_counter + 1);
|
||||||
|
strcat(repname, dotptr);
|
||||||
|
return repname;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(tmp);
|
free(tmp);
|
||||||
return strdup("out.png");
|
if (!win->shot.repeat_count) return strdup("out.png");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
repname = malloc(sizeof(char) * 24);
|
||||||
|
sprintf(repname, "out%03i.png", win->shot.shot_counter + 1);
|
||||||
|
return repname;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_shot_repeat_count_get(Elm_Win *win)
|
||||||
|
{
|
||||||
|
|
||||||
|
char *p, *pd;
|
||||||
|
char *d = strdup(win->shot.info);
|
||||||
|
|
||||||
|
if (!d) return 0;
|
||||||
|
for (p = (char *)win->shot.info; *p; p++)
|
||||||
|
{
|
||||||
|
if (!strncmp(p, "repeat=", 7))
|
||||||
|
{
|
||||||
|
int v;
|
||||||
|
|
||||||
|
for (pd = d, p += 7; (*p) && (*p != ':'); p++, pd++)
|
||||||
|
{
|
||||||
|
*pd = *p;
|
||||||
|
}
|
||||||
|
*pd = 0;
|
||||||
|
v = atoi(d);
|
||||||
|
if (v < 0) v = 0;
|
||||||
|
if (v > 1000) v = 999;
|
||||||
|
free(d);
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(d);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
|
@ -246,6 +303,7 @@ _shot_do(Elm_Win *win)
|
||||||
if (key) free(key);
|
if (key) free(key);
|
||||||
if (flags) free(flags);
|
if (flags) free(flags);
|
||||||
ecore_evas_free(ee);
|
ecore_evas_free(ee);
|
||||||
|
if (win->shot.repeat_count) win->shot.shot_counter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
|
@ -253,11 +311,24 @@ _shot_delay(void *data)
|
||||||
{
|
{
|
||||||
Elm_Win *win = data;
|
Elm_Win *win = data;
|
||||||
_shot_do(win);
|
_shot_do(win);
|
||||||
|
if (win->shot.repeat_count)
|
||||||
|
{
|
||||||
|
int remainshot = (win->shot.repeat_count - win->shot.shot_counter);
|
||||||
|
if (remainshot > 0) return EINA_TRUE;
|
||||||
|
}
|
||||||
win->shot.timer = NULL;
|
win->shot.timer = NULL;
|
||||||
elm_exit();
|
elm_exit();
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_shot_init(Elm_Win *win)
|
||||||
|
{
|
||||||
|
if (!win->shot.info) return;
|
||||||
|
win->shot.repeat_count = _shot_repeat_count_get(win);
|
||||||
|
win->shot.shot_counter = 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_shot_handle(Elm_Win *win)
|
_shot_handle(Elm_Win *win)
|
||||||
{
|
{
|
||||||
|
@ -1470,6 +1541,7 @@ elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type)
|
||||||
win->ee = ecore_evas_buffer_new(1, 1);
|
win->ee = ecore_evas_buffer_new(1, 1);
|
||||||
ecore_evas_manual_render_set(win->ee, EINA_TRUE);
|
ecore_evas_manual_render_set(win->ee, EINA_TRUE);
|
||||||
win->shot.info = eina_stringshare_add(_elm_config->engine + 5);
|
win->shot.info = eina_stringshare_add(_elm_config->engine + 5);
|
||||||
|
_shot_init(win);
|
||||||
}
|
}
|
||||||
#undef FALLBACK_TRY
|
#undef FALLBACK_TRY
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue