No more wait for fonts at startup. Split the font stuff from load_info_about_label_surface to set_label_fonts so it can be runned later.
This commit is contained in:
parent
f5e4e4eb0f
commit
d7f621ce20
1 changed files with 69 additions and 76 deletions
145
src/tuxpaint.c
145
src/tuxpaint.c
|
|
@ -983,6 +983,8 @@ void delete_label_list(struct label_node**);
|
||||||
static void myblit(SDL_Surface * src_surf, SDL_Rect * src_rect,
|
static void myblit(SDL_Surface * src_surf, SDL_Rect * src_rect,
|
||||||
SDL_Surface * dest_surf, SDL_Rect * dest_rect);
|
SDL_Surface * dest_surf, SDL_Rect * dest_rect);
|
||||||
|
|
||||||
|
void set_label_fonts(void);
|
||||||
|
|
||||||
/* Magic tools API and tool handles: */
|
/* Magic tools API and tool handles: */
|
||||||
|
|
||||||
#include "tp_magic_api.h"
|
#include "tp_magic_api.h"
|
||||||
|
|
@ -2597,6 +2599,7 @@ static void mainloop(void)
|
||||||
/* FIXME: should kill this in any case */
|
/* FIXME: should kill this in any case */
|
||||||
SDL_WaitThread(font_thread, NULL);
|
SDL_WaitThread(font_thread, NULL);
|
||||||
#endif
|
#endif
|
||||||
|
set_label_fonts();
|
||||||
do_setcursor(cursor_arrow);
|
do_setcursor(cursor_arrow);
|
||||||
}
|
}
|
||||||
draw_tux_text(tool_tux[cur_tool], tool_tips[cur_tool], 1);
|
draw_tux_text(tool_tux[cur_tool], tool_tips[cur_tool], 1);
|
||||||
|
|
@ -18306,6 +18309,8 @@ void rec_undo_label(void)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
text_undo[cur_undo] = 0;
|
text_undo[cur_undo] = 0;
|
||||||
|
|
||||||
|
/* Have we cycled around NUM_UNDO_BUFS? */
|
||||||
if (current_label_node != NULL && current_label_node->save_undoid == (cur_undo + 1) % NUM_UNDO_BUFS)
|
if (current_label_node != NULL && current_label_node->save_undoid == (cur_undo + 1) % NUM_UNDO_BUFS)
|
||||||
current_label_node->save_undoid = 255;
|
current_label_node->save_undoid = 255;
|
||||||
}
|
}
|
||||||
|
|
@ -18640,56 +18645,12 @@ void load_info_about_label_surface(char lfname[1024])
|
||||||
fscanf(lfi, "%d\n", &new_node->save_cur_font);
|
fscanf(lfi, "%d\n", &new_node->save_cur_font);
|
||||||
new_node->save_cur_font = 0;
|
new_node->save_cur_font = 0;
|
||||||
|
|
||||||
char * font_type = NULL;
|
|
||||||
char * ttffont;
|
|
||||||
|
|
||||||
size_t max_text = 64;
|
size_t max_text = 64;
|
||||||
getline(&font_type, &max_text, lfi);
|
new_node->save_font_type = NULL;
|
||||||
|
|
||||||
|
getline(&new_node->save_font_type, &max_text, lfi);
|
||||||
|
|
||||||
|
|
||||||
int i;
|
|
||||||
for( i = 0; i < num_font_families; i++ )
|
|
||||||
{
|
|
||||||
Uint32 c;
|
|
||||||
/* FIXME: 2009/09/13 TTF_FontFaceFamilyName() appends random "\n" at the end
|
|
||||||
of the returned string. Should investigate why, and when corrected,
|
|
||||||
remove the code that deals whith the ending "\n"s in ttffont*/
|
|
||||||
ttffont = TTF_FontFaceFamilyName( getfonthandle(i)->ttf_font);
|
|
||||||
for (c = 0; c < strlen(ttffont); c++)
|
|
||||||
if (ttffont[c] == '\n')
|
|
||||||
ttffont[c] = '\0';
|
|
||||||
for (c = 0; c < strlen(font_type); c++)
|
|
||||||
if (font_type[c] == '\n')
|
|
||||||
font_type[c] = '\0';
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
printf("ttffont A%sA\n",ttffont);
|
|
||||||
printf("font_type B%sB\n", font_type);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (strcmp(font_type, ttffont) == 0)
|
|
||||||
|
|
||||||
{
|
|
||||||
#ifdef DEBUG
|
|
||||||
printf("Font matched %s !!!\n", ttffont);
|
|
||||||
#endif
|
|
||||||
new_node->save_cur_font = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
// if (strstr(TTF_FontFaceFamilyName( getfonthandle(i)->ttf_font), font_type))
|
|
||||||
if (strstr(ttffont, font_type) || strstr(font_type, ttffont))
|
|
||||||
{
|
|
||||||
#ifdef DEBUG
|
|
||||||
printf("setting %s as replacement",TTF_FontFaceFamilyName( getfonthandle(i)->ttf_font) );
|
|
||||||
#endif
|
|
||||||
new_node->save_cur_font = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (new_node->save_cur_font > num_font_families) /* This should never happens, setting default font. */
|
|
||||||
new_node->save_cur_font = 0;
|
|
||||||
fscanf(lfi, "%d\n", &new_node->save_text_state);
|
fscanf(lfi, "%d\n", &new_node->save_text_state);
|
||||||
fscanf(lfi, "%u\n", &new_node->save_text_size);
|
fscanf(lfi, "%u\n", &new_node->save_text_size);
|
||||||
|
|
||||||
|
|
@ -18750,6 +18711,67 @@ void load_info_about_label_surface(char lfname[1024])
|
||||||
}
|
}
|
||||||
first_label_node_in_redo_stack = NULL;
|
first_label_node_in_redo_stack = NULL;
|
||||||
fclose(lfi);
|
fclose(lfi);
|
||||||
|
|
||||||
|
if (font_thread_done)
|
||||||
|
set_label_fonts();
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_label_fonts()
|
||||||
|
{
|
||||||
|
struct label_node* node;
|
||||||
|
int i;
|
||||||
|
char * ttffont;
|
||||||
|
|
||||||
|
node = current_label_node;
|
||||||
|
while (node != NULL)
|
||||||
|
|
||||||
|
{
|
||||||
|
for( i = 0; i < num_font_families; i++ )
|
||||||
|
{
|
||||||
|
Uint32 c;
|
||||||
|
/* FIXME: 2009/09/13 TTF_FontFaceFamilyName() appends random "\n" at the end
|
||||||
|
of the returned string. Should investigate why, and when corrected,
|
||||||
|
remove the code that deals whith the ending "\n"s in ttffont*/
|
||||||
|
ttffont = TTF_FontFaceFamilyName( getfonthandle(i)->ttf_font);
|
||||||
|
for (c = 0; c < strlen(ttffont); c++)
|
||||||
|
if (ttffont[c] == '\n')
|
||||||
|
ttffont[c] = '\0';
|
||||||
|
for (c = 0; c < strlen(node->save_font_type); c++)
|
||||||
|
if (node->save_font_type[c] == '\n')
|
||||||
|
node->save_font_type[c] = '\0';
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
printf("ttffont A%sA\n",ttffont);
|
||||||
|
printf("font_type B%sB\n", node->save_font_type);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (strcmp(node->save_font_type, ttffont) == 0)
|
||||||
|
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
printf("Font matched %s !!!\n", ttffont);
|
||||||
|
#endif
|
||||||
|
node->save_cur_font = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (strstr(ttffont, node->save_font_type) || strstr(node->save_font_type, ttffont))
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
printf("setting %s as replacement",TTF_FontFaceFamilyName( getfonthandle(i)->ttf_font) );
|
||||||
|
#endif
|
||||||
|
node->save_cur_font = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node->save_cur_font > num_font_families) /* This should never happens, setting default font. */
|
||||||
|
node->save_cur_font = 0;
|
||||||
|
|
||||||
|
free(node->save_font_type); /* Not needed anymore */
|
||||||
|
|
||||||
|
node = node->next_to_down_label_node;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
@ -20802,35 +20824,6 @@ static int old_main(int argc, char *argv[])
|
||||||
|
|
||||||
reset_avail_tools();
|
reset_avail_tools();
|
||||||
|
|
||||||
/* Load fonts */
|
|
||||||
|
|
||||||
if (!font_thread_done)
|
|
||||||
{
|
|
||||||
draw_colors(COLORSEL_DISABLE);
|
|
||||||
draw_none();
|
|
||||||
update_screen_rect(&r_toolopt);
|
|
||||||
update_screen_rect(&r_ttoolopt);
|
|
||||||
do_setcursor(cursor_watch);
|
|
||||||
|
|
||||||
// Wait while Text tool finishes loading fonts
|
|
||||||
draw_tux_text(TUX_WAIT, gettext("Please wait…"), 1);
|
|
||||||
|
|
||||||
waiting_for_fonts = 1;
|
|
||||||
#ifdef FORKED_FONTS
|
|
||||||
receive_some_font_info(screen); // FIXME: this MUST NOT be called until the text tool runs!
|
|
||||||
#else
|
|
||||||
while (!font_thread_done && !font_thread_aborted)
|
|
||||||
{
|
|
||||||
// FIXME: should have a read-depends memory barrier around here
|
|
||||||
show_progress_bar(screen);
|
|
||||||
SDL_Delay(20);
|
|
||||||
}
|
|
||||||
// FIXME: should kill this in any case
|
|
||||||
SDL_WaitThread(font_thread, NULL);
|
|
||||||
#endif
|
|
||||||
do_setcursor(cursor_arrow);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Load current image (if any): */
|
/* Load current image (if any): */
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue