mirror of https://github.com/aseprite/aseprite.git
Compare commits
5 Commits
e3942527a7
...
bc39d7d38e
Author | SHA1 | Date |
---|---|---|
|
bc39d7d38e | |
|
141849842f | |
|
80fa065bd5 | |
|
de1ccb24dd | |
|
7d91c4b9d9 |
2
laf
2
laf
|
@ -1 +1 @@
|
|||
Subproject commit a2bb9ec7fb98354279a2c49870a4a47a67a8e86e
|
||||
Subproject commit 8ec4b553f1618f7a4b47cdcf4cfc2663266111ac
|
|
@ -13,6 +13,8 @@
|
|||
#include "app/console.h"
|
||||
#include "app/context.h"
|
||||
#include "app/context_observer.h"
|
||||
#include "app/doc.h"
|
||||
#include "app/doc_undo.h"
|
||||
#include "app/script/docobj.h"
|
||||
#include "app/script/engine.h"
|
||||
#include "app/script/luacpp.h"
|
||||
|
|
|
@ -64,6 +64,7 @@
|
|||
#include "doc/tag.h"
|
||||
#include "doc/tileset.h"
|
||||
#include "doc/tilesets.h"
|
||||
#include "undo/undo_state.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
|
@ -1029,6 +1030,42 @@ int Sprite_set_useLayerUuids(lua_State* L)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int Sprite_get_undoHistory(lua_State* L)
|
||||
{
|
||||
const auto* sprite = get_docobj<Sprite>(L, 1);
|
||||
const auto* doc = static_cast<Doc*>(sprite->document());
|
||||
const auto* history = doc->undoHistory();
|
||||
|
||||
if (!history) {
|
||||
lua_pushnil(L);
|
||||
return 1;
|
||||
}
|
||||
|
||||
const undo::UndoState* currentState = history->currentState();
|
||||
const undo::UndoState* s = history->firstState();
|
||||
const bool canRedo = history->canRedo();
|
||||
bool pastCurrent = !currentState && canRedo;
|
||||
|
||||
int undoSteps = 0;
|
||||
int redoSteps = 0;
|
||||
while (s) {
|
||||
if (pastCurrent && canRedo)
|
||||
redoSteps++;
|
||||
else if (currentState || !canRedo)
|
||||
undoSteps++;
|
||||
|
||||
if (s == currentState || !currentState)
|
||||
pastCurrent = true;
|
||||
|
||||
s = s->next();
|
||||
}
|
||||
|
||||
lua_newtable(L);
|
||||
setfield_integer(L, "undoSteps", undoSteps);
|
||||
setfield_integer(L, "redoSteps", redoSteps);
|
||||
return 1;
|
||||
}
|
||||
|
||||
const luaL_Reg Sprite_methods[] = {
|
||||
{ "__eq", Sprite_eq },
|
||||
{ "resize", Sprite_resize },
|
||||
|
@ -1094,6 +1131,7 @@ const Property Sprite_properties[] = {
|
|||
{ "events", Sprite_get_events, nullptr },
|
||||
{ "tileManagementPlugin", Sprite_get_tileManagementPlugin, Sprite_set_tileManagementPlugin },
|
||||
{ "useLayerUuids", Sprite_get_useLayerUuids, Sprite_set_useLayerUuids },
|
||||
{ "undoHistory", Sprite_get_undoHistory, nullptr },
|
||||
{ nullptr, nullptr, nullptr }
|
||||
};
|
||||
|
||||
|
|
|
@ -443,12 +443,7 @@ bool WritingTextState::onSetCursor(Editor* editor, const gfx::Point& mouseScreen
|
|||
return true;
|
||||
}
|
||||
|
||||
bool WritingTextState::onKeyDown(Editor*, KeyMessage*)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool WritingTextState::onKeyUp(Editor*, KeyMessage* msg)
|
||||
bool WritingTextState::onKeyDown(Editor*, KeyMessage* msg)
|
||||
{
|
||||
// Cancel loop pressing Esc key
|
||||
if (msg->scancode() == ui::kKeyEsc) {
|
||||
|
@ -457,7 +452,17 @@ bool WritingTextState::onKeyUp(Editor*, KeyMessage* msg)
|
|||
// Drop text pressing Enter key
|
||||
else if (msg->scancode() == ui::kKeyEnter) {
|
||||
drop();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool WritingTextState::onKeyUp(Editor*, KeyMessage* msg)
|
||||
{
|
||||
// Note: We cannot process kKeyEnter key here to drop the text as it
|
||||
// could be received after the Enter key is pressed in the IME
|
||||
// dialog to accept the composition (not to accept the text). So we
|
||||
// process kKeyEnter in onKeyDown().
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<array>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>org.aseprite.aseprite.sprite</string>
|
||||
<string>org.aseprite.Aseprite.sprite</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Aseprite Sprite</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
|
@ -25,23 +25,93 @@
|
|||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleDocumentTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>aseprite</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>Document.icns</string>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>Aseprite Sprite</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Owner</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>ase</string>
|
||||
<string>bmp</string>
|
||||
<string>flc</string>
|
||||
<string>fli</string>
|
||||
<string>gif</string>
|
||||
<string>ico</string>
|
||||
<string>jpeg</string>
|
||||
<string>jpg</string>
|
||||
<string>pcx</string>
|
||||
<string>png</string>
|
||||
<string>tga</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>Document.icns</string>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>Aseprite Sprite</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>aseprite-extension</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>Extension.icns</string>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>Aseprite Extension</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Owner</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleName</key>
|
||||
<string>Aseprite</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.aseprite.aseprite</string>
|
||||
<string>org.aseprite.Aseprite</string>
|
||||
<key>BuildMachineOSBuild</key>
|
||||
<string>24C101</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Aseprite</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>aseprite</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>$VERSION</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$VERSION</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>Aseprite.icns</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.graphics-design</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2001-2025, Igara Studio S.A.
|
||||
All rights reserved.</string>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<true/>
|
||||
<key>NSRequiresAquaSystemAppearance</key>
|
||||
<false/>
|
||||
<key>CFBundleSupportedPlatforms</key>
|
||||
<array>
|
||||
<string>MacOSX</string>
|
||||
<string>MacOSX</string>
|
||||
</array>
|
||||
<key>CSResourcesFileMapped</key>
|
||||
<true/>
|
||||
|
@ -49,20 +119,6 @@
|
|||
<true/>
|
||||
<key>DTCompiler</key>
|
||||
<string>com.apple.compilers.llvm.clang.1_0</string>
|
||||
<key>DTPlatformBuild</key>
|
||||
<string>24C94</string>
|
||||
<key>DTPlatformName</key>
|
||||
<string>macosx</string>
|
||||
<key>DTPlatformVersion</key>
|
||||
<string>15.2</string>
|
||||
<key>DTSDKBuild</key>
|
||||
<string>24C94</string>
|
||||
<key>DTSDKName</key>
|
||||
<string>macosx15.2</string>
|
||||
<key>DTXcode</key>
|
||||
<string>1620</string>
|
||||
<key>DTXcodeBuild</key>
|
||||
<string>16C5032a</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.15</string>
|
||||
</dict>
|
||||
|
|
|
@ -2,8 +2,16 @@
|
|||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>AsepriteThumbnailer</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.aseprite.aseprite.AsepriteThumbnailer</string>
|
||||
<string>org.aseprite.Aseprite.AsepriteThumbnailer</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>AsepriteThumbnailer</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>$VERSION</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$VERSION</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>NSExtension</key>
|
||||
|
@ -22,5 +30,8 @@
|
|||
<key>NSExtensionPrincipalClass</key>
|
||||
<string>ThumbnailProvider</string>
|
||||
</dict>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2001-2025, Igara Studio S.A.
|
||||
All rights reserved.</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
@ -228,3 +228,69 @@ do
|
|||
c = app.open(fn)
|
||||
assert(c.tileManagementPlugin == nil)
|
||||
end
|
||||
|
||||
-- Undo History
|
||||
|
||||
function test_undo_history()
|
||||
local sprite = Sprite(1, 1)
|
||||
|
||||
assert(sprite.undoHistory.undoSteps == 0)
|
||||
assert(sprite.undoHistory.redoSteps == 0)
|
||||
|
||||
sprite:resize(10, 10)
|
||||
|
||||
assert(sprite.undoHistory.undoSteps == 1)
|
||||
assert(sprite.undoHistory.redoSteps == 0)
|
||||
|
||||
sprite:resize(10, 15)
|
||||
|
||||
assert(sprite.undoHistory.undoSteps == 2)
|
||||
assert(sprite.undoHistory.redoSteps == 0)
|
||||
|
||||
sprite:resize(10, 30)
|
||||
|
||||
assert(sprite.undoHistory.undoSteps == 3)
|
||||
assert(sprite.undoHistory.redoSteps == 0)
|
||||
|
||||
app.undo()
|
||||
assert(sprite.undoHistory.undoSteps == 2)
|
||||
assert(sprite.undoHistory.redoSteps == 1)
|
||||
|
||||
app.undo()
|
||||
assert(sprite.undoHistory.undoSteps == 1)
|
||||
assert(sprite.undoHistory.redoSteps == 2)
|
||||
|
||||
app.redo()
|
||||
assert(sprite.undoHistory.undoSteps == 2)
|
||||
assert(sprite.undoHistory.redoSteps == 1)
|
||||
|
||||
app.undo()
|
||||
app.undo()
|
||||
|
||||
assert(sprite.undoHistory.undoSteps == 0)
|
||||
assert(sprite.undoHistory.redoSteps == 3)
|
||||
|
||||
sprite:resize(10, 30)
|
||||
|
||||
if (app.preferences.undo.allow_nonlinear_history) then
|
||||
assert(sprite.undoHistory.undoSteps == 4)
|
||||
assert(sprite.undoHistory.redoSteps == 0)
|
||||
else
|
||||
assert(sprite.undoHistory.undoSteps == 1)
|
||||
assert(sprite.undoHistory.redoSteps == 0)
|
||||
end
|
||||
end
|
||||
|
||||
do
|
||||
local prevSetting = app.preferences.undo.allow_nonlinear_history
|
||||
app.preferences.undo.allow_nonlinear_history = true
|
||||
test_undo_history()
|
||||
app.preferences.undo.allow_nonlinear_history = prevSetting
|
||||
end
|
||||
|
||||
do
|
||||
local prevSetting = app.preferences.undo.allow_nonlinear_history
|
||||
app.preferences.undo.allow_nonlinear_history = false
|
||||
test_undo_history()
|
||||
app.preferences.undo.allow_nonlinear_history = prevSetting
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue