handle gl init fialure correctly and dont mess up font init.

SVN revision: 48959
This commit is contained in:
Carsten Haitzler 2010-05-18 04:22:33 +00:00
parent 0cad792cb6
commit cedba3f7d9
3 changed files with 66 additions and 25 deletions

View File

@ -774,7 +774,14 @@ EAPI void
evas_common_font_flush(void)
{
if (font_cache_usage < font_cache) return;
while (font_cache_usage > font_cache) evas_common_font_flush_last();
while (font_cache_usage > font_cache)
{
int pfont_cache_usage;
pfont_cache_usage = font_cache_usage;
evas_common_font_flush_last();
if (pfont_cache_usage == font_cache_usage) break;
}
}
/* We run this when the cache gets larger than allowed size

View File

@ -15,11 +15,7 @@ evas_common_font_init(void)
initialised++;
if (initialised != 1) return;
error = FT_Init_FreeType(&evas_ft_lib);
if (error)
{
initialised--;
return;
}
if (error) return;
evas_common_font_load_init();
}
@ -28,6 +24,7 @@ evas_common_font_shutdown(void)
{
int error;
if (initialised < 1) return;
initialised--;
if (initialised != 0) return;

View File

@ -198,6 +198,9 @@ eng_info_free(Evas *e __UNUSED__, void *info)
free(in);
}
static int initted = 0;
static int gl_wins = 0;
static int
eng_setup(Evas *e, void *in)
{
@ -235,6 +238,7 @@ eng_setup(Evas *e, void *in)
e->engine.data.output = NULL;
return 0;
}
gl_wins++;
{
int status;
@ -289,20 +293,24 @@ eng_setup(Evas *e, void *in)
}
}
}
evas_common_cpu_init();
evas_common_blend_init();
evas_common_image_init();
evas_common_convert_init();
evas_common_scale_init();
evas_common_rectangle_init();
evas_common_gradient_init();
evas_common_polygon_init();
evas_common_line_init();
evas_common_font_init();
evas_common_draw_init();
evas_common_tilebuf_init();
if (!initted)
{
evas_common_cpu_init();
evas_common_blend_init();
evas_common_image_init();
evas_common_convert_init();
evas_common_scale_init();
evas_common_rectangle_init();
evas_common_gradient_init();
evas_common_polygon_init();
evas_common_line_init();
evas_common_font_init();
evas_common_draw_init();
evas_common_tilebuf_init();
initted = 1;
}
}
else
{
@ -316,7 +324,11 @@ eng_setup(Evas *e, void *in)
(info->info.destination_alpha != re->win->alpha) ||
(info->info.rotation != re->win->rot))
{
eng_window_free(re->win);
if (re->win)
{
eng_window_free(re->win);
gl_wins--;
}
re->win = eng_window_new(info->info.display,
info->info.drawable,
info->info.screen,
@ -328,6 +340,7 @@ eng_setup(Evas *e, void *in)
info->indirect,
info->info.destination_alpha,
info->info.rotation);
if (re->win) gl_wins++;
}
else if ((re->win->w != e->output.w) ||
(re->win->h != e->output.h))
@ -344,9 +357,14 @@ eng_setup(Evas *e, void *in)
free(re);
return 0;
}
if (!e->engine.data.output)
{
if (re->win) eng_window_free(re->win);
if (re->win)
{
eng_window_free(re->win);
gl_wins--;
}
free(re);
return 0;
}
@ -378,11 +396,30 @@ eng_output_free(void *data)
// NOTE: XrmGetDatabase() result is shared per connection, do not free it.
// if (re->xrdb) XrmDestroyDatabase(re->xrdb);
if (re->win) eng_window_free(re->win);
if (re->win)
{
eng_window_free(re->win);
gl_wins--;
}
free(re);
}
evas_common_font_shutdown();
evas_common_image_shutdown();
if ((initted == 1) && (gl_wins == 0))
{
evas_common_cpu_shutdown();
evas_common_blend_shutdown();
evas_common_image_shutdown();
evas_common_convert_shutdown();
evas_common_scale_shutdown();
evas_common_rectangle_shutdown();
evas_common_gradient_shutdown();
evas_common_polygon_shutdown();
evas_common_line_shutdown();
evas_common_font_shutdown();
evas_common_draw_shutdown();
evas_common_tilebuf_shutdown();
initted = 0;
}
}
static void