diff options
Diffstat (limited to 'riscos/save.c')
-rw-r--r-- | riscos/save.c | 121 |
1 files changed, 38 insertions, 83 deletions
diff --git a/riscos/save.c b/riscos/save.c index a47de318f..b1b743e59 100644 --- a/riscos/save.c +++ b/riscos/save.c @@ -1013,7 +1013,7 @@ void ro_gui_save_done(void) */ bool save_complete_gui_save(const char *path, const char *filename, size_t len, - const char *sourcedata, content_type type) + const char *sourcedata, lwc_string *mime_type) { char *fullpath; os_error *error; @@ -1025,7 +1025,7 @@ bool save_complete_gui_save(const char *path, const char *filename, size_t len, return false; } snprintf(fullpath, namelen, "%s.%s", path, filename); - rotype = ro_content_filetype_from_type(type); + rotype = ro_content_filetype_from_mime_type(mime_type); error = xosfile_save_stamped(fullpath, rotype, (byte *) sourcedata, (byte *) sourcedata + len); free(fullpath); @@ -1162,63 +1162,43 @@ bool ro_gui_save_complete(hlcache_handle *h, char *path) bool ro_gui_save_object_native(hlcache_handle *h, char *path) { - const char *source_data; - unsigned long source_size; + int file_type = ro_content_filetype(h); - switch (content_get_type(h)) { -#ifdef WITH_JPEG - case CONTENT_JPEG: -#endif -#if defined(WITH_MNG) || defined(WITH_PNG) - case CONTENT_PNG: -#endif -#ifdef WITH_MNG - case CONTENT_JNG: - case CONTENT_MNG: -#endif -#ifdef WITH_GIF - case CONTENT_GIF: -#endif -#ifdef WITH_BMP - case CONTENT_BMP: - case CONTENT_ICO: -#endif + if (file_type == osfile_TYPE_SPRITE || file_type == osfile_TYPE_DRAW) { + /* Native sprite or drawfile */ + const char *source_data; + unsigned long source_size; + os_error *error; + + source_data = content_get_source_data(h, &source_size); + error = xosfile_save_stamped(path, file_type, + (byte *) source_data, + (byte *) source_data + source_size); + if (error != NULL) { + LOG(("xosfile_save_stamped: 0x%x: %s", + error->errnum, error->errmess)); + warn_user("SaveError", error->errmess); + return false; + } + } else { + /* Non-native type: export */ + switch (ro_content_native_type(h)) { + case osfile_TYPE_SPRITE: { unsigned flags = (os_version == 0xA9) ? BITMAP_SAVE_FULL_ALPHA : 0; bitmap_save(content_get_bitmap(h), path, flags); - return true; } - break; -#ifdef WITH_SPRITE - case CONTENT_SPRITE: -#endif -#ifdef WITH_DRAW - case CONTENT_DRAW: -#endif - { - os_error *error; - source_data = content_get_source_data(h, &source_size); - error = xosfile_save_stamped(path, - ro_content_filetype(h), - (byte *) source_data, - (byte *) source_data + source_size); - if (error) { - LOG(("xosfile_save_stamped: 0x%x: %s", - error->errnum, error->errmess)); - warn_user("SaveError", error->errmess); - return false; - } - return true; - } - break; -#if defined(WITH_NS_SVG) || defined(WITH_RSVG) - case CONTENT_SVG: + break; + case osfile_TYPE_DRAW: + /* Must be SVG */ return save_as_draw(h, path); -#endif default: return false; + } } + + return true; } @@ -1306,40 +1286,15 @@ void ro_gui_save_set_state(hlcache_handle *h, gui_save_type save_type, gui_save_filetype = gui_save_table[save_type].filetype; if (!gui_save_filetype && h) { if (save_type == GUI_SAVE_OBJECT_NATIVE) { - switch (content_get_type(h)) { - /* bitmap images */ -#ifdef WITH_JPEG - case CONTENT_JPEG: -#endif -#if defined(WITH_MNG) || defined(WITH_PNG) - case CONTENT_PNG: -#endif -#ifdef WITH_MNG - case CONTENT_JNG: - case CONTENT_MNG: -#endif -#ifdef WITH_GIF - case CONTENT_GIF: -#endif -#ifdef WITH_BMP - case CONTENT_BMP: - case CONTENT_ICO: -#endif - gui_save_filetype = osfile_TYPE_SPRITE; - break; - /* vector formats */ -#if defined(WITH_NS_SVG) || defined(WITH_RSVG) - case CONTENT_SVG: - gui_save_filetype = osfile_TYPE_DRAW; - break; -#endif -#ifdef WITH_DRAW - case CONTENT_DRAW: - gui_save_filetype = osfile_TYPE_DRAW; - break; -#endif - default: - break; + switch (ro_content_native_type(h)) { + case osfile_TYPE_SPRITE: + gui_save_filetype = osfile_TYPE_SPRITE; + break; + case osfile_TYPE_DRAW: + gui_save_filetype = osfile_TYPE_DRAW; + break; + default: + break; } } if (!gui_save_filetype) |