diff options
Diffstat (limited to 'src/tuxpaint.c')
-rw-r--r-- | src/tuxpaint.c | 100 |
1 files changed, 93 insertions, 7 deletions
diff --git a/src/tuxpaint.c b/src/tuxpaint.c index 6d271b3..6fafaf3 100644 --- a/src/tuxpaint.c +++ b/src/tuxpaint.c @@ -463,6 +463,7 @@ extern WrapperData macosx; #include "compiler.h" +#include "sugar.h" #include "tuxpaint.h" @@ -1734,6 +1735,7 @@ Bytef * get_chunk_data (FILE * fp, char *fname, png_structp png_ptr, static void get_new_file_id(void); static int do_quit(int tool); static int do_open(void); +static int do_open_image(void); static int do_new_dialog(void); static int do_color_picker(void); static int do_slideshow(void); @@ -10713,7 +10715,22 @@ static void load_template(char *img_id) static void load_current(void) { - SDL_Surface *tmp, *org_surf; + char *fname = NULL; + + if (sugar_detected()) + fname = sugar_get_image_file(); + else + fname = get_current_image_file(); + + if (fname != NULL) + load_current_image(fname); + + free(fname); +} + +static char * get_current_image_file(void) +{ + char *result = NULL; char *fname; char ftmp[1024]; FILE *fi; @@ -10761,7 +10778,15 @@ static void load_current(void) snprintf(ftmp, sizeof(ftmp), "saved/%s%s", file_id, FNAME_EXTENSION); - fname = get_fname(ftmp, DIR_SAVE); + result = get_fname(ftmp, DIR_SAVE); + } + + return result; +} + +static void load_current_image(char * fname) +{ + SDL_Surface *tmp, *org_surf; tmp = IMG_Load(fname); @@ -10802,9 +10827,6 @@ static void load_current(void) load_embedded_data(fname, org_surf); } - - free(fname); - } } @@ -12087,6 +12109,8 @@ static int do_save(int tool, int dont_show_success_results) } } + if (sugar_detected()) + sugar_save_image(fname); free(fname); @@ -12132,6 +12156,8 @@ static int do_save(int tool, int dont_show_success_results) } SDL_FreeSurface(thm); + if (sugar_detected()) + sugar_save_thumb(fname); free(fname); #if 0 /* No more writing the .dat file */ @@ -12175,6 +12201,10 @@ static int do_save(int tool, int dont_show_success_results) } undo_tmp_applied_text(); + + if (sugar_detected()) + /* In sugar, files are not stored in savedir, thus no need in file_id */ + file_id[0] = '\0'; return 1; } @@ -12818,6 +12848,50 @@ static int do_quit(int tool) static int do_open(void) { + if (sugar_detected()) + { + const char *fname = sugar_open(); + if (fname) + { + do_setcursor(cursor_watch); + SDL_Flip(screen); + show_progress_bar(screen); + SDL_UpdateRect(screen, 0, 0, 0, 0); + SDL_Flip(screen); + + free_surface(&img_starter); + free_surface(&img_starter_bkgd); + starter_id[0] = '\0'; + template_id[0] = '\0'; + starter_mirrored = 0; + starter_flipped = 0; + starter_personal = 0; + starter_modified = 0; + canvas_color_r = canvas_color_g = canvas_color_b = 255; + + SDL_Surface *tmp, *org_surf; + tmp = IMG_Load(fname); + org_surf = SDL_DisplayFormat(tmp); + autoscale_copy_smear_free(tmp, canvas, SDL_BlitSurface); + load_embedded_data(fname, org_surf); + free(fname); + + cur_undo = 0; + oldest_undo = 0; + newest_undo = 0; + been_saved = 1; + tool_avail_bak[TOOL_UNDO] = 0; + tool_avail_bak[TOOL_REDO] = 0; + + update_canvas(0, 0, canvas->w, canvas->h); + } + } else { + do_open_image(); + } +} + +static int do_open_image(void) +{ SDL_Surface *img, *img1, *img2, *org_surf; int things_alloced; SDL_Surface **thumbs = NULL; @@ -18081,7 +18155,7 @@ static int do_new_dialog(void) if (!been_saved && !disable_save) { - if (do_prompt_image_snd(PROMPT_OPEN_SAVE_TXT, + if (!sugar_detected() && do_prompt_image_snd(PROMPT_OPEN_SAVE_TXT, PROMPT_OPEN_SAVE_YES, PROMPT_OPEN_SAVE_NO, img_tools[TOOL_SAVE], NULL, NULL, @@ -20816,7 +20890,7 @@ static void do_lock_file(void) /* (Make sure the directory exists, first!) */ homedirdir = get_fname("", DIR_SAVE); - mkdir(homedirdir, 0755); + mkdir(homedirdir, 0775); free(homedirdir); @@ -20936,6 +21010,9 @@ static void setup(void) } } + // sugar X properties should be set before the window is shown on the screen + if (sugar_detected()) + sugar_setup_x11(&WINDOW_WIDTH, &WINDOW_HEIGHT); #ifndef NOSOUND #ifndef WIN32 @@ -21915,6 +21992,8 @@ int main(int argc, char *argv[]) if (envdir) LOCALEDIR = localedir_realpath = realpath(envdir, NULL); + sugar_setup(&argc, &argv); + CLOCK_ASM(time1); // do not add code (slowness) here unless required for scanning fonts @@ -21922,6 +22001,12 @@ int main(int argc, char *argv[]) chdir_to_binary(argv[0]); setup_config(argv); + if (sugar_detected()) { + savedir = sugar_get_savedir(); + /* With saving to Sugar Journal, only followed settings make sense */ + promptless_save = SAVE_OVER_ALWAYS; + autosave_on_quit = 1; + } @@ -21957,6 +22042,7 @@ int main(int argc, char *argv[]) save_current(); wait_for_sfx(); cleanup(); + sugar_cleanup(); free(data_prefix_realpath); free(magic_prefix_realpath); |