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()
- 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
- Add HAVE_CONFIG_H wrapper to #include "config.h"
- Removed widgets namespace (it's in app now)
- Move some functions from src/file/file.h to src/base/cfile.h
- Move Vector2d to base library
- Rename MenuItem2 to AppMenuItem
This change is the first step to create a mini editor with the capability
to show the animation while we edit other frames. Also it will allow us
to have two or more editors of the same document in different frames.
- Added DocumentLocation: now the location in a document is a property
of the current Context (Context::getActiveLocation()).
- Added ContextAccess/Reader/Writer classes.
- Added DocumentApi class: high-level API with the majority of methods
in UndoTransaction class (that were not directly related to a undo
transaction).
- Added AddFrame/RemoveFrame undoers to handle add/remove frame correctly:
this fix issue #212.
- Removed SetCurrentLayer/Frame undoers.
Now we have one editor for each Document we want to edit. Before we were
creating one editor and switching the document on it, but now we have
several Editors (one for each opened Document). This simplifies the
Document implementation, because it doesn't need to know temporal
Editor information (like "preferred editor settings").
- Removed all code from modules/editors.cpp (legacy from C code).
- Removed PreferredEditorSettings class and
Document::getPreferredEditorSettings().
- Added Workspace/WorkspaceView classes.
- Added DocumentView (a DocumentObserver).
- Added MiniEditorWindow class.
- Removed SelectFileCommand & CloseEditorCommand.
- Added TabView interface instead of using a raw void* in
Tabs/TabsDelegate classes.
- Modified editors_draw_sprite() calls to Document::notifySpritePixelsModified
notifications.
- The "current_editor" global variable wasn't removed because it's
used in several places yet, but it will be removed in the near future.
(Also this variable now can be NULL when we don't have an opened
document.)
The OpenGroup & CloseGroup undoers now save the current SpritePosition
when the Undoer instance is created. Before we were using the current
Layer and Frame at the moment of the OpenGroup creation, it was generating
buggy undoers.
This is the starting point to create a layer to isolate Allegro access.
In the future, we will be able to switch to SDL or Allegro 5 easily.
Anyway this will be a progressive refactoring.
The UndoHistory was simplified, m_enabled/label/modification members
were removed because they aren't part of the undo library goal.
Now the "label" field is part of Open/CloseGroup undoers, and all undoers
must be enclosed in a group (this restriction is only for the app, the
undo library doesn't have this restriction). In this way, the
label/modification information is exchanged between an
OpenGroup <-> CloseGroup pair only.
- Added ThumbnailGenerator class to avoid mixing the thumbnail generation
code with FileList widget.
- Added IFileOpProgress for fop_operate() so we can update the job progress
when the "file operation" progress changes.
Several refactoring tasks where made:
- Removed the old Widget::id field (JID).
- Renamed Widget::get/setName to get/setId.
- Moved load_widget_from_xmlfile() to app::load_widget and WidgetLoader
class.
- Removed jhook structure & jwidget_add_hook function. Hooks were replaced
subclassing widgets.
- Added InitThemeEvent class and Widget::onInitTheme member function.
+ Added support to rotate images of IMAGE_BITMAP type.
+ Added transformation_handle & pivot_handle parts in sheet.png.
+ Added rotation cursors in sheet.png.
+ Added gfx::Transformation class and Document::m_transformation field.
+ Added StandbyState::Decorator and TransformHandles class to draw
transformation handles.
+ Modified PixelsMovement class to support transformation handles.
+ Added new Linear Algebra library with Vector2d class.
+ Added "undo" library (undo namespace).
+ Moved UndoHistory to undo namespace.
+ Added Undoer and UndoersCollector interfaces.
+ Converted old UndoStream to UndoersStack class.
+ Added new "undoers" namespace and moved each Undoer implementation
(classes to undo different actions) to "undoers" directory.
+ Added IO operations to "raster" objects (image, cel, layer, palette,
mask).
obtain any kind of objects (not just GfxObj).
+ Removed GfxObjId.
+ Added ObjectsContainerImpl.
+ Use UniquePtr for each member in Document to avoid memory leaks in
Document() ctor.
+ Removed RasterModule class.
+ Moved some properties from Sprite to Document: lock/unlock/mutex,
filename, isModified flag, undo history, mask boundaries, file
format options, preferred editor settings, extra cel.
+ A Context now has an active document (instead of an active sprite).
+ Renamed all sprite wrappers to be document wrappers (as the mutex is
in the Document now).
+ Modifications to SharedPtr<> to be more like C++0x shared_ptr<>.
+ Added Filter, FilterManager, and FilterIndexedData interfaces.
+ Moved all widgets related to filters to src/commands/filters.
+ Added the filters library.
+ Added FilterWindow and one derived window for each filter.
+ Removed gfxdata.cpp file.
+ Removed get_gfx() from modules/gfx.h/cpp.
+ Added skin parts for each removed graphics of gfxdata.
+ Added IButtonIcon interface and an implementation for skin theme.
+ Removed "icon_buttons" from gui.cpp.
+ Now icons in button are set through set_gfxicon_to_button function.
+ Removed from Theme class check/radio_icon_size member variables
(they are replaced with the new IButtonIcon interface).
+ Removed jdraw_inverted_sprite(), now each icon has it normal/selected
version in the skin sheet.
With this changes a lot of bugs loading different kind of .gif
files are fixed. GIF files must be loaded as RGBA images to
support background color and different transparent color per
frame combinations.