51 Commits

Author SHA1 Message Date
David Capello
af74f8bc84 Fix memory leak when the created cel is not used in ExpandCelCanvas 2022-06-14 23:25:10 -03:00
David Capello
d32fd97da5 Replace base::SharedPtr with std::shared_ptr
We can remove our smart pointer (base::SharedPtr) as we're already
using C++11 compilers on all platforms.
2019-08-01 19:16:16 -03:00
David Capello
f97d76344d Fix useTool() with images: brushes must be created like when we use the UI, with a mask 2019-04-29 10:25:44 -03:00
David Capello
b768d99743 Check that region to patch/copy on "cmd" is not empty to avoid useless cmds 2019-04-28 21:26:12 -03:00
David Capello
af0b700a6d Fix typo in comment 2019-04-22 09:05:33 -03:00
David Capello
eeec66f307 Minor change ImageRef::reset(nullptr) -> reset() 2018-11-19 23:35:45 -03:00
David Capello
f2ed45e795 Replace base::UniquePtr -> std::unique_ptr 2018-08-08 17:27:26 -03:00
David Capello
9c79ea2b77 Rename app::Document -> Doc 2018-07-07 11:54:44 -03:00
David Capello
457a9999b5 Move doc::Context to app::Context (#378)
We've moved everything related to Context/active site/observable
documents from "doc" namespace to "app" namespace.
2018-07-07 02:47:42 -03:00
David Capello
d6c5f1ecb2 Don't crash when using selection tool on a layer group 2016-12-08 09:37:28 -03:00
David Capello
5ecc356a41 Replace GPL license with the new EULA 2016-08-29 13:08:21 -03:00
David Capello
9897256d26 Don't trim background layer cels automatically (fix #1166) 2016-07-01 11:14:50 -03:00
David Capello
94e56ad97a Fix spray and jumble tools (fix #1130) 2016-05-11 13:14:52 -03:00
David Capello
4f97970b98 Remove unused variable in ExpandCelCanvas 2016-05-11 13:00:25 -03:00
David Capello
c12100dedb Reduce the patched region with ExpandCelCanvas when we have the source image to compare with 2016-05-10 11:06:55 -03:00
David Capello
cee3c246bb Add cmd::PatchCel to reduce undo space after a ExpandCelCanvas 2016-05-10 10:47:48 -03:00
David Capello
6556f97b8c Try to directly add a trimmed image in the undo history instead of calling TrimCel 2016-05-05 15:40:37 -03:00
David Capello
5d8af3ca36 Trim (or remove) cels automatically (when they are completely empty) (fix #559, fix #1111) 2016-05-04 12:32:39 -03:00
David Capello
6dc9bb984d New option for paint bucket using all layers as reference/stop fill (fix #969) 2016-05-03 15:31:27 -03:00
David Capello
640025e84b Fix selection UX to show white/black negative for the stroke
With this patch now we can use the selection tool in locked or hidden
layers, because the selection doesn't modify the layers (only the
selection). Also we can use the selection tool on any layer and we'll
always see the feedback stroke/shape/rectangle while we're creating
the new selection.
2016-05-02 18:42:02 -03:00
David Capello
2f7e36a95e Fix crash when we copy a cel w/drag-and-drop and change cel properties
This is because Context::notifyActiveSiteChanged() wasn't called on
each onAdd/RemoveCel() events. This should fix several bugs.
2015-12-11 14:27:30 -03:00
David Capello
1aaeacc460 Refactor several "getNoun()" getters to "noun()"
This is a work-in-progress to create a consistent API and finally
separate the whole Aseprite base/gfx/ui libs into a reusable C++ library.

Classes:
app::IFileItem, app::AppMenuItem, app::skin::SkinPart,
gfx::Rect, gfx::Border, she::FileDialog,
ui::IButtonIcon, ui::Graphics, ui::Overlay, ui::Widget,
ui::ScrollableViewDelegate, and UI events
2015-12-04 14:39:04 -03:00
David Capello
b4568f1fdc Add some debug checks in ExpandCelCanvas 2015-08-18 18:34:58 -03:00
David Capello
cb5fd3963f Fix problem where the cel opacity slider in StatusBar was not activated
After creating a new cel from a tool loop, we have to generate an
ActiveSiteChange notification (because now we have a cel in the active
position). In this way the StatusBar can update/enable the opacity slider.
2015-05-06 17:08:08 -03:00
David Capello
21c4fd51d9 Move app::DocumentLocation to doc::Site
This is a first step to include the current selected range of layers
and frames inside the doc::Site structure. So in the future we'll not need
to know about the Timeline in commands that handle those ranges.
2015-04-20 16:27:09 -03:00
David Capello
14fed8afd5 Avoid leaving a Layer in a invalid state (a Cel without image) in ExpandCelCanvas 2015-04-07 17:49:40 -03:00
David Capello
22c3c4f20e Remove implicit SharedPtr conversion to T* 2015-04-02 20:42:43 -03:00
David Capello
e85c63aa93 Merge branch '1.0'
Conflicts:
	src/app/ui/editor/editor.cpp
	src/app/ui/editor/moving_pixels_state.h
	src/app/ui/editor/pixels_movement.cpp
	src/app/ui/editor/pixels_movement.h
	src/app/ui/editor/standby_state.cpp
	src/app/ui/editor/tool_loop_impl.cpp
	src/app/util/expand_cel_canvas.cpp
	src/app/util/expand_cel_canvas.h
2015-02-15 18:12:03 -03:00
David Capello
02ad6b9b78 Fix several bugs dropping pixels in the invalid editor 2015-02-15 17:08:21 -03:00
David Capello
69ac11eea2 Remove IDocumentSettings and DocumentSettingsObserver
Document user options are completely replaced with DocumentPreferences.
2015-02-15 09:48:38 -03:00
David Capello
2c6067f7e4 Update license of app/ module to GPLv2 2015-02-12 12:16:25 -03:00
David Capello
3ebb708000 Add CelData to share image/position/opacity between linked cels
Changes:
- Merged app::cmd::ObjectIO into doc::SubObjectsIO
- Changed app::cmd::SetCelImage with app::cmd::SetCelData
- Added Cel::createCopy/Link() to avoid confunsion with Cel copy ctor
- Renamed Sprite::getImage() -> getImageRef()
- Added Sprite::getDataCelRef()
- Added doc::CelsRange helper to iterate cels
- Added Sprite::cels()/uniqueCels() member functions (removed
  Sprite::getCels())
- Added DocumentRange::convertToCels()
2015-02-09 11:40:43 -03:00
David Capello
e55865843e Replace undo impl: replace undoers with cmds
Undoers were little objects to swap/revert an action. They didn't
execute the action itself, they just revert its previous state. Now
undoers were replaced with cmds: A cmd is an object that
executes/undoes/redoes just one action.

Changes:
* Remove old undo library and app/objects_container_impl.cpp
  (now we use the doc::ObjectId directly to store undo info)
* Remove all Undoers from app/undoers/
* Replace DocumentApi impl with little Cmds in app/cmd/, these
  cmds handle execute/undo/redo of each action at the logic layer
* Remove doc::Dirty object
* Remove doc::Settings: all undo configuration is in the app side
* Move undo options from app:ISettings to app::Preferences
* Rename UndoTransaction to Transaction
* Create a CmdSequence to store a sequence of Cmds (as now the new
  undo library doesn't support open/close groups)
* Add doc::get<T>(ObjectId) function to get any kind of object
  from the doc library by its ID
* Add Cel::document() and Sprite::document() members
* Add Sprite::cels(frame_t) to get all cels in the given frame
* Add Layer::displaceFrames() member function
* Move the "allow non-linear history" flag from undo2::UndoHistory
  to app::DocumentUndo
2015-01-18 22:05:33 -03:00
David Capello
f1f24cbcdd Replace doc::Stock with doc::ImageRef shared pointer
Changes:
* Add doc::ImageRef to count references to the same image between Cels
  (at this moment we cannot generate linked cels anyway)
* Remove doc:Stock class and doc::Sprite::m_stock member variable
* Remove app::undoers::Add/RemoveImage
* Add doc::SubObjectsIO and app::undoers::ObjectIO to
  replace doc::LayerSubObjectsSerializer
2015-01-04 10:58:14 -03:00
David Capello
603dde343f Replace doc::LayerImage::getCel() with doc::Layer::cel() 2014-12-28 21:04:08 -03:00
David Capello
da1358c5dc Unify all render code in one library
Changes:
* Create render library (move util/render.cpp to render/render.cpp)
* Move app::Zoom class to render::Zoom
* Remove doc::Image::merge() member function
* Add gfx::Clip helper class (to clip dst/src rectangles before a blit)
* Move doc::composite_image() to render::composite_image()
* Remove doc::Sprite::render()
* Replace Sprite::getPixel() with render::get_sprite_pixel()
* Remove doc::layer_render() function
* Convert DitheringMethod to a enum class
* Add AppRender to configure a render::Render with the app configuration
* Move checked background preferences as document-specific configuration
* Add doc::Sprite::layer() and palette() member functions
* Add doc::Layer::cel() member function
* Add doc::Palette::entry() member function()
* Add doc::frame_t type
* Move create_palette_from_rgb/convert_pixel_format to render library
* ExportSpriteSheet doesn't need a temporary image now that we can specify
  the source rectangle in the render routine
2014-12-28 11:06:11 -03:00
David Capello
afbd3b2d96 Optimize ToolLoop with modified regions of pixels
Here we avoid copying and clearing pixels that will not be used
in the whole tool loop process.
Changes:
* Add several member functions in ToolLoop to validate/invalidate regions
  of source/destination images so we know what regions are safe to use
  by inks and can be shown in the editor
* Add new DocumentObserver::onExposeSpritePixels() member to validate
  pixels that will be displayed in the editor
* Add Ink::needs/createSpecialSourceArea() member functions to validate
  extra areas for inks like blur or jumble
* Add undoers::ModifiedRegion to save the undo information about the
  modified region
* Add ShowHideDrawingCursor class
* Change "blur" tool policy from overlap to accumulate

(This is a real fix for issue #239)
2014-12-08 14:57:56 -03:00
David Capello
63995c6f0a Merge "raster" namespace into "doc" library 2014-10-20 22:21:31 -03:00
David Capello
91b0c2d071 Refactor: Remove "get" part for member functions that act like a simple getter
Additional change:
- Added Cel::image() to get the related image of the cel directly
2014-07-30 01:28:15 -03:00
David Capello
81ffb0c5bd Refactor: Create doc::Context and move some logic from app::Document to doc::Document
The objective of these changes is to create a more testable doc/logic API.

Included changes:
- Added doc::Context, doc::Documents (the old app::Documents),
  and doc::Sprites (and observers for each)
- Added raster::Sprite::createBasicSprite()
- Added doc::ColorMode (equal to raster::PixelFormat)
- Added some methods to doc::Document: context(), sprites(), sprite()
  (to replace app::Document::getSprite()), width/height(), colorMode(),
  name(), and close()
- Moved app::DocumentObserver/Event to doc::DocumentObserver/Event
- Replaced app::ContextObserver with doc::DocumentsObserver and a couple
  of signals.
- Renamed app::Context::getActiveDocument() with
  doc::Context::activeDocument()
- Renamed app::Context::getActiveLocation() with
  app::Context::activeLocation()
- Removed app::ContextObserverList
- Removed app::DocumentId (now we can use doc::ObjectId)
- Removed app::Context::getSettings()
2014-07-29 00:53:24 -03:00
David Capello
be817c515c Fix issue 410: Unexpected drawing behaviour on empty layer with Transparent Color index set to non-0
When we create a new image for the sprite, we've to adjust the image mask
color to the sprite mask color (as the image isn't in the Stock yet).
This problem appears in v1.0.1 (9dfec919e4b35502fdeb88ca5c10b41af3faa9a5)
because now we don't change the mask color of sprite images in the
rendering process. This kind of bug can be detected running on debug
mode with an assert in the render procedure.
2014-06-12 23:44:34 -03:00
David Capello
289b729e3e ExpandCelCanvas: Fix problems generating Dirty area for cels with origin != 0,0 2014-06-03 20:23:53 -03:00
David Capello
badbb7ad32 Minor changes in ExpandCelCanvas 2014-06-03 20:22:50 -03:00
David Capello
c3a03565fb Fix issue 314 (crash): We were adding an image in the sprite's stock with a shared ImageBuffer 2014-02-02 23:10:09 -03:00
David Capello
7b09aefe6a Fix bug mixing image buffers in ExpandCelCanvas for new cels
Bug introduced from commit 48864b440b82a710076a8af66d98c95343407e40
2013-12-15 10:31:25 -03:00
David Capello
efbb3e52e2 Fix bug where dirty bounds are out of the image bounds 2013-11-10 16:09:46 -03:00
David Capello
13946b310c Improve creation of Dirty() instance (fix issue #239)
Now Dirty() ctor receives the bounds, so we don't need to iterate over
the whole image to find/shrink the modified region.
2013-11-10 15:54:36 -03:00
David Capello
48864b440b Add ImageBuffer class
It tries to mitigate issue #239, but it's not a full fix yet. A good
possibility would be to change the internal structure of images, creating
tiles. So we don't need to allocate/copy/clear/etc. huge images in each
step.
2013-11-10 13:26:48 -03:00
David Capello
e5ba8e0922 Encapsulate Image implementation (private members, accessors, iterators, etc.)
- Rename _rgba/_graya to raster::rgba()/graya()
- Add raster::color_t type (alias for uint32_t)
- Rename raster::GfxObj to Object. And GfxObj::getType() to Object::type()
- Move conversion from raster::Image/Palette to Allegro BITMAP/RGB
  to raster/conversion_alleg.h file
- Add raster/color_scales.h
- Rename image_* functions to raster/primitives.h
- Reimplement ink processing with templates instead of macros
2013-11-09 19:59:05 -03:00
David Capello
cde54f3682 Change BSD license to MIT in sublibraries and fix headers 2013-08-08 21:01:20 -03:00