Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/tuxpaint.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tuxpaint.c')
-rw-r--r--src/tuxpaint.c100
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);