From 26139c4ae2aa3d7304c9daf7a002344b28c94427 Mon Sep 17 00:00:00 2001 From: David Capello Date: Fri, 29 Mar 2019 15:57:10 -0300 Subject: [PATCH] Add tilemap layers (#977) This is the first commit with a simple tilemap editor. Still buggy but functional in several ways. Several changes were made: * NewLayer command can receive a tilemap=true to create a new tilemap layer * New ToggleTilesMode command added to switch between the palette and the tileset in the ColorBar (the ColorBar was expanded to show colors or tilesets with a generic AbstractPaletteViewAdapter) * All commands to create new layers were moved to Layer > New... submenu * There are a new tileset chunk to save tilesets in .aseprite files, and a new kind of cels to save tilemaps * Added doc::LayerTilemap, doc::Tileset, etc. and several other types to handle tilesets/tilemaps in the doc layer. * Added doc::Grid class with grid specifications that indicates how a tilemap <-> tileset must be drawn * Added and expanded cel operations to work with tilemaps and conversions between regular LayerImage cels <-> LayerTilemap cels (e.g. copy cels in the timeline between layer types) --- data/gui.xml | 4 + data/pref.xml | 1 + data/strings/en.ini | 3 + docs/ase-file-specs.md | 67 ++- src/app/CMakeLists.txt | 11 +- src/app/cmd/add_tile.cpp | 92 ++++ src/app/cmd/add_tile.h | 56 +++ src/app/cmd/add_tileset.cpp | 88 ++++ src/app/cmd/add_tileset.h | 53 ++ src/app/cmd/copy_cel.cpp | 12 +- src/app/cmd/copy_cel.h | 9 +- src/app/cmd/crop_cel.cpp | 8 +- src/app/cmd/crop_cel.h | 1 + src/app/cmd/flatten_layers.cpp | 2 +- src/app/cmd/move_cel.cpp | 4 +- src/app/cmd/remove_tile.cpp | 42 ++ src/app/cmd/remove_tile.h | 30 ++ src/app/cmd/remove_tileset.cpp | 43 ++ src/app/cmd/remove_tileset.h | 31 ++ src/app/cmd/set_cel_data.cpp | 5 +- src/app/cmd/shift_masked_cel.cpp | 2 +- src/app/cmd/trim_cel.cpp | 4 +- src/app/cmd/unlink_cel.cpp | 3 +- src/app/cmd/with_tileset.cpp | 31 ++ src/app/cmd/with_tileset.h | 32 ++ src/app/cmd_sequence.h | 8 +- src/app/commands/cmd_clear_cel.cpp | 7 +- src/app/commands/cmd_fill_and_stroke.cpp | 1 + src/app/commands/cmd_mask_content.cpp | 4 +- src/app/commands/cmd_new_layer.cpp | 24 +- src/app/commands/cmd_toggle_tiles_mode.cpp | 42 ++ src/app/commands/commands_list.h | 1 + src/app/doc.cpp | 12 +- src/app/doc.h | 2 + src/app/doc_api.cpp | 13 +- src/app/doc_api.h | 2 +- src/app/doc_event.h | 5 + src/app/doc_exporter.cpp | 6 +- src/app/doc_observer.h | 3 + src/app/file/ase_format.cpp | 164 +++++-- src/app/file/file.cpp | 3 +- src/app/file/gif_format.cpp | 2 +- src/app/script/app_object.cpp | 7 + src/app/script/engine.cpp | 16 + src/app/script/engine.h | 5 + src/app/script/grid_class.cpp | 94 ++++ src/app/script/image_class.cpp | 12 +- src/app/script/layer_class.cpp | 20 + src/app/script/pixel_color_object.cpp | 24 + src/app/script/sprite_class.cpp | 8 + src/app/script/tileset_class.cpp | 104 ++++ src/app/script/tilesets_class.cpp | 62 +++ src/app/site.cpp | 12 + src/app/site.h | 8 +- src/app/tileset_mode.h | 24 + src/app/transaction.h | 4 +- src/app/tx.h | 4 + src/app/ui/color_bar.cpp | 230 ++++++++- src/app/ui/color_bar.h | 25 +- src/app/ui/doc_view.cpp | 6 + src/app/ui/doc_view.h | 2 + src/app/ui/editor/drawing_state.cpp | 10 + src/app/ui/editor/drawing_state.h | 2 + src/app/ui/editor/editor.cpp | 15 +- src/app/ui/editor/editor_state.h | 6 + src/app/ui/editor/pixels_movement.cpp | 9 +- src/app/ui/palette_view.cpp | 321 +++++++++--- src/app/ui/palette_view.h | 31 +- src/app/util/autocrop.cpp | 2 +- src/app/util/cel_ops.cpp | 540 +++++++++++++++++++++ src/app/util/cel_ops.h | 67 +++ src/app/util/clipboard.cpp | 8 +- src/app/util/create_cel_copy.cpp | 116 ----- src/app/util/create_cel_copy.h | 27 -- src/app/util/expand_cel_canvas.cpp | 173 +++++-- src/app/util/expand_cel_canvas.h | 12 +- src/app/util/new_image_from_mask.cpp | 3 +- src/dio/LICENSE.txt | 2 +- src/dio/aseprite_common.h | 2 + src/dio/aseprite_decoder.cpp | 155 ++++-- src/dio/aseprite_decoder.h | 8 +- src/dio/pixel_io.h | 43 +- src/doc/CMakeLists.txt | 9 +- src/doc/algorithm/fill_selection.cpp | 1 + src/doc/algorithm/shift_image.cpp | 5 +- src/doc/algorithm/shrink_bounds.cpp | 163 ++++++- src/doc/algorithm/shrink_bounds.h | 22 +- src/doc/cel.cpp | 5 +- src/doc/cel_data.cpp | 36 +- src/doc/cel_data.h | 11 +- src/doc/cels_range.cpp | 1 + src/doc/color_mode.h | 4 +- src/doc/doc.h | 4 + src/doc/grid.cpp | 163 +++++++ src/doc/grid.h | 76 +++ src/doc/grid_io.cpp | 84 ++++ src/doc/grid_io.h | 22 + src/doc/grid_tests.cpp | 86 ++++ src/doc/image.cpp | 3 +- src/doc/image.h | 3 +- src/doc/image_io.cpp | 7 +- src/doc/image_iterator.h | 4 + src/doc/image_traits.h | 32 ++ src/doc/layer.cpp | 17 +- src/doc/layer.h | 8 +- src/doc/layer_io.cpp | 17 +- src/doc/layer_tilemap.cpp | 31 ++ src/doc/layer_tilemap.h | 35 ++ src/doc/object_type.h | 3 + src/doc/pixel_format.h | 10 +- src/doc/primitives.cpp | 10 + src/doc/primitives.h | 1 + src/doc/sprite.cpp | 19 +- src/doc/sprite.h | 9 + src/doc/tile.h | 44 ++ src/doc/tileset.cpp | 45 ++ src/doc/tileset.h | 76 +++ src/doc/tileset_hash_table.h | 29 ++ src/doc/tileset_io.cpp | 49 ++ src/doc/tileset_io.h | 29 ++ src/doc/tilesets.cpp | 42 ++ src/doc/tilesets.h | 64 +++ src/render/render.cpp | 81 +++- src/render/render.h | 1 + 124 files changed, 4007 insertions(+), 506 deletions(-) create mode 100644 src/app/cmd/add_tile.cpp create mode 100644 src/app/cmd/add_tile.h create mode 100644 src/app/cmd/add_tileset.cpp create mode 100644 src/app/cmd/add_tileset.h create mode 100644 src/app/cmd/remove_tile.cpp create mode 100644 src/app/cmd/remove_tile.h create mode 100644 src/app/cmd/remove_tileset.cpp create mode 100644 src/app/cmd/remove_tileset.h create mode 100644 src/app/cmd/with_tileset.cpp create mode 100644 src/app/cmd/with_tileset.h create mode 100644 src/app/commands/cmd_toggle_tiles_mode.cpp create mode 100644 src/app/script/grid_class.cpp create mode 100644 src/app/script/tileset_class.cpp create mode 100644 src/app/script/tilesets_class.cpp create mode 100644 src/app/tileset_mode.h create mode 100644 src/app/util/cel_ops.cpp create mode 100644 src/app/util/cel_ops.h delete mode 100644 src/app/util/create_cel_copy.cpp delete mode 100644 src/app/util/create_cel_copy.h create mode 100644 src/doc/grid.cpp create mode 100644 src/doc/grid.h create mode 100644 src/doc/grid_io.cpp create mode 100644 src/doc/grid_io.h create mode 100644 src/doc/grid_tests.cpp create mode 100644 src/doc/layer_tilemap.cpp create mode 100644 src/doc/layer_tilemap.h create mode 100644 src/doc/tile.h create mode 100644 src/doc/tileset.cpp create mode 100644 src/doc/tileset.h create mode 100644 src/doc/tileset_hash_table.h create mode 100644 src/doc/tileset_io.cpp create mode 100644 src/doc/tileset_io.h create mode 100644 src/doc/tilesets.cpp create mode 100644 src/doc/tilesets.h diff --git a/data/gui.xml b/data/gui.xml index c1e9a4287..3934a44a7 100644 --- a/data/gui.xml +++ b/data/gui.xml @@ -138,6 +138,7 @@ + @@ -807,6 +808,9 @@ + + + diff --git a/data/pref.xml b/data/pref.xml index 57a5f2a26..cc83d4dba 100644 --- a/data/pref.xml +++ b/data/pref.xml @@ -195,6 +195,7 @@