global freeze/thaw. much more optimial for COMPLEX edjed that take a fair bit

of grunt to re-calculate. avoid caclulations until idle time by freezing and
thawing appropriately pre/post render


SVN revision: 7178
This commit is contained in:
Carsten Haitzler 2003-07-16 05:15:15 +00:00
parent 583791b12e
commit fa42fa6de5
8 changed files with 47 additions and 6 deletions

View File

@ -160,7 +160,7 @@ collections {
to, "logo";
}
rel2 {
relative, 2.0, 1.0;
relative, 3.0, 1.0;
offset, -64, -1;
to, "logo";
}
@ -171,8 +171,8 @@ collections {
text, "This is a longer test string";
font, "Vera";
size, 6;
fit, 0 0;
// min, 1 1;
// fit, 0 1;
// min, 1 1;
align, 0.0 0.5;
}
}

View File

@ -5,6 +5,8 @@ static void main_stop(void);
static void main_resize(Ecore_Evas *ee);
static int main_signal_exit(void *data, int ev_type, void *ev);
static void main_delete_request(Ecore_Evas *ee);
static void main_pre_rend(Ecore_Evas *ee);
static void main_post_rend(Ecore_Evas *ee);
void bg_setup(void);
void bg_resize(double w, double h);
@ -55,6 +57,8 @@ main_start(int argc, char **argv)
if (!ecore_evas) return -1;
ecore_evas_callback_delete_request_set(ecore_evas, main_delete_request);
ecore_evas_callback_resize_set(ecore_evas, main_resize);
ecore_evas_callback_pre_render_set(ecore_evas, main_pre_rend);
ecore_evas_callback_post_render_set(ecore_evas, main_post_rend);
ecore_evas_title_set(ecore_evas, "Edje Test Program");
ecore_evas_name_class_set(ecore_evas, "edje", "main");
ecore_evas_show(ecore_evas);
@ -95,6 +99,18 @@ main_delete_request(Ecore_Evas *ee)
ecore_main_loop_quit();
}
static void
main_pre_rend(Ecore_Evas *ee)
{
edje_thaw();
}
static void
main_post_rend(Ecore_Evas *ee)
{
edje_freeze();
}
void
bg_setup(void)
{

View File

@ -10,6 +10,8 @@ extern "C" {
void edje_init (void);
void edje_frametime_set (double t);
double edje_frametime_get (void);
void edje_freeze (void);
void edje_thaw (void);
Evas_Object *edje_object_add (Evas *evas);
void edje_object_file_set (Evas_Object *o, const char *file, const char *part);

View File

@ -32,7 +32,6 @@ edje_object_file_set(Evas_Object *obj, const char *file, const char *part)
Edje_Real_Part *rp;
char buf[256];
printf("PART!\n");
ep = l->data;
rp = calloc(1, sizeof(Edje_Real_Part));
if (!rp) return;

View File

@ -533,5 +533,6 @@ extern int _edje_anim_count;
extern Ecore_Timer *_edje_timer;
extern Evas_List *_edje_animators;
extern Ejde_Text_Style _edje_text_styles[EDJE_TEXT_EFFECT_LAST];
extern Evas_List *_edje_edjes;
#endif

View File

@ -18,6 +18,8 @@ static void _edje_smart_clip_unset(Evas_Object * obj);
static Evas_Smart *_edje_smart = NULL;
Evas_List *_edje_edjes = NULL;
/* API Routines */
Evas_Object *
edje_object_add(Evas *evas)
@ -56,6 +58,7 @@ _edje_smart_add(Evas_Object * obj)
evas_object_smart_data_set(obj, ed);
ed->obj = obj;
evas_object_smart_member_add(ed->clipper, ed->obj);
_edje_edjes = evas_list_append(_edje_edjes, obj);
}
static void
@ -67,6 +70,7 @@ _edje_smart_del(Evas_Object * obj)
if (!ed) return;
_edje_clean_objects(ed);
_edje_unref(ed);
_edje_edjes = evas_list_remove(_edje_edjes, obj);
}
static void

View File

@ -339,7 +339,7 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep,
dif = (th - sh) / 4;
if (dif < 1) dif = 1;
while ((th < sh) && (sw >= 0.0))
while ((th > sh) && (sw >= 0.0))
{
size -= dif;
evas_object_text_font_set(ep->object, font, size);

View File

@ -1,6 +1,24 @@
#include "Edje.h"
#include "edje_private.h"
void
edje_freeze(void)
{
Evas_List *l;
for (l = _edje_edjes; l; l = l->next)
edje_object_freeze((Evas_Object *)(l->data));
}
void
edje_thaw(void)
{
Evas_List *l;
for (l = _edje_edjes; l; l = l->next)
edje_object_thaw((Evas_Object *)(l->data));
}
int
edje_object_freeze(Evas_Object *obj)
{
@ -424,7 +442,8 @@ int
_edje_thaw(Edje *ed)
{
ed->freeze--;
if ((ed->freeze <= 0) && (ed->recalc))
if (ed->freeze < 0) ed->freeze = 0;
if ((ed->freeze == 0) && (ed->recalc))
_edje_recalc(ed);
return ed->freeze;
}