aseprite/src
2021-05-22 00:42:36 -03:00
..
app Add theme variants to switch easily between Light/Dark themes 2021-05-22 00:42:36 -03:00
cfg
clip@a65a9e543e Fix some issues detected with the ThreadSanitizer 2021-04-13 15:35:34 -03:00
desktop
dio Fix regression loading tag colors incorrectly from .aseprite files 2021-04-13 10:07:28 -03:00
doc Add PalettePicks::invert() member function 2021-05-20 17:57:22 -03:00
filters
fixmath
flic@876ef60df5 Update flic and tga modules 2021-04-07 11:24:39 -03:00
gen Avoid leaks running "gen" when memory sanitizer is enabled 2021-04-15 10:43:17 -03:00
main
net
observable@bddbeed8b9
render Fix preview in ChangePixelFormatCommand 2021-05-10 18:41:37 -03:00
steam
tests
tga@16b8bb25e3 Update flic and tga modules 2021-04-07 11:24:39 -03:00
ui Select the initial ColorButton color when we go back to the button 2021-05-20 15:42:09 -03:00
undo@e72730478a
updater
ver
CMakeLists.txt
config.h
README.md

Aseprite Source Code

If you are here is because you want to learn about Aseprite source code. We'll try to write in these README.md files a summary of each module/library.

Modules & Libraries

Aseprite is separated in the following layers/modules:

Level 0: Completely independent modules

These libraries are easy to be used and embedded in other software because they don't depend on any other component.

  • clip: Clipboard library.
  • fixmath: Fixed point operations (original code from Allegro code by Shawn Hargreaves).
  • flic: Library to load/save FLI/FLC files.
  • laf/base: Core/basic stuff, multithreading, utf8, sha1, file system, memory, etc.
  • laf/gfx: Abstract graphics structures like point, size, rectangle, region, color, etc.
  • observable: Signal/slot functions.
  • scripting: JavaScript engine.
  • steam: Steam API wrapper to avoid static linking to the .lib file.
  • undo: Generic library to manage a history of undoable commands.

Level 1

  • cfg (base): Library to load/save .ini files.
  • gen (base): Helper utility to generate C++ files from different XMLs.
  • net (base): Networking library to send HTTP requests.
  • laf/os (base, gfx, wacom): OS input/output.

Level 2

  • doc (base, fixmath, gfx): Document model library.
  • ui (base, gfx, os): Portable UI library (buttons, windows, text fields, etc.)
  • updater (base, cfg, net): Component to check for updates.

Level 3

  • dio (base, doc, fixmath, flic): Load/save sprites/documents.
  • filters (base, doc, gfx): Effects for images.
  • render (base, doc, gfx): Library to render documents.

Level 4

  • app (base, doc, dio, filters, fixmath, flic, gfx, pen, render, scripting, os, ui, undo, updater)
  • desktop (base, doc, dio, render): Integration with the desktop (Windows Explorer, Finder, GNOME, KDE, etc.)

Level 5

  • main (app, base, os, ui)

Debugging Tricks

When Aseprite is compiled with ENABLE_DEVMODE, you have the following extra commands/features available:

  • F5: On Windows shows the amount of used memory.
  • F1: Switch new/old render engine.
  • Ctrl+F1: Switch/test Screen/UI Scaling values.
  • Ctrl+Alt+Shift+Q: crashes the application in case that you want to test the anticrash feature or your need a memory dump file.
  • Ctrl+Alt+Shift+R: recover the active document from the data recovery store.
  • aseprite.ini: [perf] show_render_time=true shows a performance clock in the Editor.

In Debug mode (_DEBUG):

  • TRACEARGS: in debug mode, it prints in the terminal/console each given argument

Detect Platform

You can check the platform using the following checks:

#ifdef _WIN32
  #ifdef _WIN64
    // Windows x64
  #else
    // Windows x86
  #endif
#elif defined(__APPLE__)
    // macOS
#else
    // Linux
#endif