diff --git a/src/file/ase_format.cpp b/src/file/ase_format.cpp index c393e4765..3dabd857f 100644 --- a/src/file/ase_format.cpp +++ b/src/file/ase_format.cpp @@ -287,7 +287,6 @@ static bool save_ASE(FileOp *fop) Sprite *sprite = fop->sprite; ASE_Header header; ASE_FrameHeader frame_header; - JLink link; int frame; FILE *f; @@ -323,10 +322,10 @@ static bool save_ASE(FileOp *fop) for (; it != end; ++it) ase_file_write_layers(f, *it); - /* write masks */ - JList masks = sprite->getMasksRepository(); - JI_LIST_FOR_EACH(masks, link) - ase_file_write_mask_chunk(f, reinterpret_cast(link->data)); + // Write all masks. + MasksList masks = sprite->getMasksRepository(); + for (MasksList::iterator it = masks.begin(); it != masks.end(); ++it) + ase_file_write_mask_chunk(f, *it); } /* write cel chunks */ diff --git a/src/file/file.cpp b/src/file/file.cpp index eec468c69..850004455 100644 --- a/src/file/file.cpp +++ b/src/file/file.cpp @@ -320,8 +320,8 @@ FileOp *fop_to_save_sprite(Sprite *sprite) } } - /* palettes support */ - if (jlist_length(fop->sprite->getPalettes()) > 1) { + // Palettes support. + if (fop->sprite->getPalettes().size() > 1) { if (!(fop->format->flags & (FILE_SUPPORT_PALETTES | FILE_SUPPORT_SEQUENCES))) { usprintf(buf+ustrlen(buf), "<<- Palette changes between frames"); @@ -329,14 +329,12 @@ FileOp *fop_to_save_sprite(Sprite *sprite) } /* repositories */ - JList masks = fop->sprite->getMasksRepository(); - if (!jlist_empty(masks)) { - Mask *mask; - JLink link; + MasksList masks = fop->sprite->getMasksRepository(); + if (!masks.empty()) { int count = 0; - JI_LIST_FOR_EACH(masks, link) { - mask = reinterpret_cast(link->data); + for (MasksList::iterator it = masks.begin(); it != masks.end(); ++it) { + Mask* mask = *it; // Names starting with '*' are ignored if (mask->name && *mask->name == '*') @@ -350,7 +348,7 @@ FileOp *fop_to_save_sprite(Sprite *sprite) } } - if (!jlist_empty(fop->sprite->getPathsRepository())) { + if (!fop->sprite->getPathsRepository().empty()) { if (!(fop->format->flags & FILE_SUPPORT_PATHS_REPOSITORY)) { usprintf(buf+ustrlen(buf), "<<- Path Repository"); } diff --git a/src/raster/sprite.cpp b/src/raster/sprite.cpp index e76cf4c7f..33f4580eb 100644 --- a/src/raster/sprite.cpp +++ b/src/raster/sprite.cpp @@ -21,9 +21,8 @@ #include #include -#include "gui/jlist.h" - #include "base/mutex.h" +#include "base/remove_from_container.h" #include "base/scoped_lock.h" #include "file/format_options.h" #include "raster/raster.h" @@ -152,11 +151,9 @@ public: return layer2index(getFolder(), layer, &index_count); } - const Palette* getPalette(int frame) const; + Palette* getPalette(int frame) const; - Palette* getPalette(int frame); - - JList getPalettes() { + PalettesList getPalettes() const { return m_palettes; } @@ -322,28 +319,28 @@ public: return; // And add the new mask - jlist_append(m_repository.masks, mask); + m_repository.masks.push_back(mask); } void removeMask(Mask* mask) { // Remove the mask from the repository - jlist_remove(m_repository.masks, mask); + base::remove_from_container(m_repository.masks, mask); } Mask* requestMask(const char* name) const; void generateMaskBoundaries(Mask* mask = NULL); - JList getMasksRepository() { + MasksList getMasksRepository() { return m_repository.masks; } void addPath(Path* path) { - jlist_append(m_repository.paths, path); + m_repository.paths.push_back(path); } void removePath(Path* path) { - jlist_remove(m_repository.paths, path); + base::remove_from_container(m_repository.paths, path); } void setPath(const Path* path) { @@ -353,7 +350,7 @@ public: m_path = path_new_copy(path); } - JList getPathsRepository() { + PathsList getPathsRepository() { return m_repository.paths; } @@ -402,7 +399,7 @@ private: int m_frames; // how many frames has this sprite std::vector m_frlens; // duration per frame int m_frame; // current frame, range [0,frames) - JList m_palettes; // list of palettes + PalettesList m_palettes; // list of palettes Stock* m_stock; // stock to get images LayerFolder* m_folder; // main folder of layers Layer* m_layer; // current layer @@ -410,8 +407,8 @@ private: Mask* m_mask; // selected mask region Undo* m_undo; // undo stack struct { - JList paths; // paths - JList masks; // masks + PathsList paths; // paths + MasksList masks; // masks } m_repository; // Selected mask region boundaries @@ -454,15 +451,12 @@ SpriteImpl::SpriteImpl(Sprite* sprite, int imgtype, int width, int height, int n m_frames = 1; m_frlens.push_back(100); // First frame with 100 msecs of duration m_frame = 0; - m_palettes = jlist_new(); m_stock = stock_new(imgtype); m_folder = new LayerFolder(m_self); m_layer = NULL; m_path = NULL; m_mask = mask_new(); m_undo = new Undo(m_self); - m_repository.paths = jlist_new(); - m_repository.masks = jlist_new(); m_extraCel = NULL; m_extraImage = NULL; @@ -516,7 +510,6 @@ SpriteImpl::SpriteImpl(Sprite* sprite, int imgtype, int width, int height, int n */ SpriteImpl* SpriteImpl::copyBase(Sprite* new_sprite, const SpriteImpl* src_sprite) { - JLink link; SpriteImpl* dst_sprite = new SpriteImpl(new_sprite, src_sprite->m_imgtype, src_sprite->m_width, src_sprite->m_height, @@ -539,9 +532,13 @@ SpriteImpl* SpriteImpl::copyBase(Sprite* new_sprite, const SpriteImpl* src_sprit dst_sprite->m_frlens.begin()); // Copy color palettes - JI_LIST_FOR_EACH(src_sprite->m_palettes, link) { - Palette* pal = reinterpret_cast(link->data); - dst_sprite->setPalette(pal, true); + { + PalettesList::const_iterator end = src_sprite->m_palettes.end(); + PalettesList::const_iterator it = src_sprite->m_palettes.begin(); + for (; it != end; ++it) { + Palette* pal = *it; + dst_sprite->setPalette(pal, true); + } } // Copy path @@ -563,16 +560,24 @@ SpriteImpl* SpriteImpl::copyBase(Sprite* new_sprite, const SpriteImpl* src_sprit dst_sprite->m_mask = mask_new_copy(src_sprite->m_mask); /* copy repositories */ - JI_LIST_FOR_EACH(src_sprite->m_repository.paths, link) { - Path* path_copy = path_new_copy(reinterpret_cast(link->data)); - if (path_copy) - dst_sprite->addPath(path_copy); + { + PathsList::const_iterator end = src_sprite->m_repository.paths.end(); + PathsList::const_iterator it = src_sprite->m_repository.paths.begin(); + for (; it != end; ++it) { + Path* path_copy = path_new_copy(*it); + if (path_copy) + dst_sprite->addPath(path_copy); + } } - JI_LIST_FOR_EACH(src_sprite->m_repository.masks, link) { - Mask* mask_copy = mask_new_copy(reinterpret_cast(link->data)); - if (mask_copy) - dst_sprite->addMask(mask_copy); + { + MasksList::const_iterator end = src_sprite->m_repository.masks.end(); + MasksList::const_iterator it = src_sprite->m_repository.masks.begin(); + for (; it != end; ++it) { + Mask* mask_copy = mask_new_copy(*it); + if (mask_copy) + dst_sprite->addMask(mask_copy); + } } // Copy preferred edition options @@ -613,8 +618,6 @@ SpriteImpl* SpriteImpl::copyLayers(SpriteImpl* dst_sprite, const SpriteImpl* src SpriteImpl::~SpriteImpl() { - JLink link; - // Destroy layers delete m_folder; @@ -623,27 +626,27 @@ SpriteImpl::~SpriteImpl() stock_free(m_stock); // Destroy paths - if (m_repository.paths) { - JI_LIST_FOR_EACH(m_repository.paths, link) - path_free(reinterpret_cast(link->data)); - - jlist_free(m_repository.paths); + { + PathsList::iterator end = m_repository.paths.end(); + PathsList::iterator it = m_repository.paths.begin(); + for (; it != end; ++it) + path_free(*it); } // Destroy masks - if (m_repository.masks) { - JI_LIST_FOR_EACH(m_repository.masks, link) - mask_free(reinterpret_cast(link->data)); - - jlist_free(m_repository.masks); + { + MasksList::iterator end = m_repository.masks.end(); + MasksList::iterator it = m_repository.masks.begin(); + for (; it != end; ++it) + mask_free(*it); } // Destroy palettes - if (m_palettes) { - JI_LIST_FOR_EACH(m_palettes, link) - delete reinterpret_cast(link->data); - - jlist_free(m_palettes); + { + PalettesList::iterator end = m_palettes.end(); + PalettesList::iterator it = m_palettes.begin(); + for (; it != end; ++it) + delete *it; // palette } // Destroy undo, mask, etc. @@ -794,11 +797,11 @@ void SpriteImpl::setTotalFrames(int frames) Mask *SpriteImpl::requestMask(const char *name) const { - Mask *mask; - JLink link; + MasksList::const_iterator end = m_repository.masks.end(); + MasksList::const_iterator it = m_repository.masks.begin(); - JI_LIST_FOR_EACH(m_repository.masks, link) { - mask = reinterpret_cast(link->data); + for (; it != end; ++it) { + Mask* mask = *it; if (strcmp(mask->name, name) == 0) return mask; } @@ -849,38 +852,16 @@ int SpriteImpl::getPixel(int x, int y) const return color; } -const Palette* SpriteImpl::getPalette(int frame) const +Palette* SpriteImpl::getPalette(int frame) const { - const Palette* found = NULL; - const Palette* pal; - JLink link; - ASSERT(frame >= 0); - JI_LIST_FOR_EACH(m_palettes, link) { - pal = reinterpret_cast(link->data); - if (frame < pal->getFrame()) - break; - - found = pal; - if (frame == pal->getFrame()) - break; - } - - ASSERT(found != NULL); - return found; -} - -Palette* SpriteImpl::getPalette(int frame) -{ Palette* found = NULL; - Palette* pal; - JLink link; - ASSERT(frame >= 0); - - JI_LIST_FOR_EACH(m_palettes, link) { - pal = reinterpret_cast(link->data); + PalettesList::const_iterator end = m_palettes.end(); + PalettesList::const_iterator it = m_palettes.begin(); + for (; it != end; ++it) { + Palette* pal = *it; if (frame < pal->getFrame()) break; @@ -902,11 +883,12 @@ void SpriteImpl::setPalette(Palette* pal, bool truncate) pal->copyColorsTo(sprite_pal); } else { - JLink link = NULL; Palette* other; - JI_LIST_FOR_EACH(m_palettes, link) { - other = reinterpret_cast(link->data); + PalettesList::iterator end = m_palettes.end(); + PalettesList::iterator it = m_palettes.begin(); + for (; it != end; ++it) { + other = *it; if (pal->getFrame() == other->getFrame()) { pal->copyColorsTo(other); @@ -916,31 +898,26 @@ void SpriteImpl::setPalette(Palette* pal, bool truncate) break; } - jlist_insert_before(m_palettes, link, new Palette(*pal)); + m_palettes.insert(it, new Palette(*pal)); } } void SpriteImpl::resetPalettes() { - JLink link, next; + PalettesList::iterator end = m_palettes.end(); + PalettesList::iterator it = m_palettes.begin(); + for (; it != end; ++it) + delete *it; // palette - JI_LIST_FOR_EACH_SAFE(m_palettes, link, next) { - if (jlist_first(m_palettes) != link) { - delete reinterpret_cast(link->data); - jlist_delete_link(m_palettes, link); - } - } + m_palettes.clear(); } void SpriteImpl::deletePalette(Palette* pal) { ASSERT(pal != NULL); - JLink link = jlist_find(m_palettes, pal); - ASSERT(link != NULL); - - delete pal; - jlist_delete_link(m_palettes, link); + base::remove_from_container(m_palettes, pal); + delete pal; // palette } void SpriteImpl::destroyExtraCel() @@ -1252,17 +1229,12 @@ int Sprite::layerToIndex(const Layer* layer) const ////////////////////////////////////////////////////////////////////// // Palettes -const Palette* Sprite::getPalette(int frame) const +Palette* Sprite::getPalette(int frame) const { return m_impl->getPalette(frame); } -Palette* Sprite::getPalette(int frame) -{ - return m_impl->getPalette(frame); -} - -JList Sprite::getPalettes() +PalettesList Sprite::getPalettes() const { return m_impl->getPalettes(); } @@ -1445,7 +1417,7 @@ void Sprite::generateMaskBoundaries(Mask* mask) m_impl->generateMaskBoundaries(mask); } -JList Sprite::getMasksRepository() +MasksList Sprite::getMasksRepository() { return m_impl->getMasksRepository(); } @@ -1477,7 +1449,7 @@ void Sprite::setPath(const Path* path) m_impl->setPath(path); } -JList Sprite::getPathsRepository() +PathsList Sprite::getPathsRepository() { return m_impl->getPathsRepository(); } diff --git a/src/raster/sprite.h b/src/raster/sprite.h index f6bb7a099..133acbc77 100644 --- a/src/raster/sprite.h +++ b/src/raster/sprite.h @@ -19,7 +19,6 @@ #ifndef RASTER_SPRITE_H_INCLUDED #define RASTER_SPRITE_H_INCLUDED -#include "gui/jbase.h" #include "raster/gfxobj.h" #include @@ -44,6 +43,10 @@ struct PreferredEditorSettings int zoom; }; +typedef std::vector PalettesList; +typedef std::vector MasksList; +typedef std::vector PathsList; + /** * The main structure used in the whole program to handle a sprite. */ @@ -115,9 +118,8 @@ public: //////////////////////////////////////// // Palettes - const Palette* getPalette(int frame) const; - Palette* getPalette(int frame); - JList getPalettes(); + Palette* getPalette(int frame) const; + PalettesList getPalettes() const; void setPalette(Palette* pal, bool truncate); void resetPalettes(); @@ -174,7 +176,7 @@ public: void generateMaskBoundaries(Mask* mask = NULL); - JList getMasksRepository(); + MasksList getMasksRepository(); //////////////////////////////////////// // Path @@ -183,7 +185,7 @@ public: void removePath(Path* path); void setPath(const Path* path); - JList getPathsRepository(); + PathsList getPathsRepository(); //////////////////////////////////////// // Loaded options from file diff --git a/src/undoable.cpp b/src/undoable.cpp index dc0157d87..d54890b3f 100644 --- a/src/undoable.cpp +++ b/src/undoable.cpp @@ -233,12 +233,10 @@ void Undoable::setImgType(int new_imgtype, int dithering_method) // change "sprite.palette" if (new_imgtype == IMAGE_GRAYSCALE) { if (isEnabled()) { - Palette* palette; - JLink link; - // Save all palettes - JI_LIST_FOR_EACH(m_sprite->getPalettes(), link) { - palette = reinterpret_cast(link->data); + PalettesList palettes = m_sprite->getPalettes(); + for (PalettesList::iterator it = palettes.begin(); it != palettes.end(); ++it) { + Palette* palette = *it; undo_remove_palette(m_sprite->getUndo(), m_sprite, palette); } }