From 7e83608a957dfeacc739ec0a09a89291de0d4e6b Mon Sep 17 00:00:00 2001 From: Matt Chang Date: Wed, 19 Jun 2024 01:01:26 +0800 Subject: [PATCH 01/10] Trigger Actions --- app/src/aboutdialog.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/aboutdialog.cpp b/app/src/aboutdialog.cpp index ad1a9b1a4f..ca790211d4 100644 --- a/app/src/aboutdialog.cpp +++ b/app/src/aboutdialog.cpp @@ -49,7 +49,6 @@ void AboutDialog::init() #else devText << "Development Build " __DATE__; #endif - devText << ""; // An empty line #if defined(GIT_EXISTS) @@ -60,7 +59,7 @@ void AboutDialog::init() devText << QString("Operating System: %1").arg(QSysInfo::prettyProductName()) << QString("CPU Architecture: %1").arg(QSysInfo::buildCpuArchitecture()); - if(QString(qVersion()) == QT_VERSION_STR) + if (QString(qVersion()) == QT_VERSION_STR) { devText << QString("Qt Version: %1").arg(QT_VERSION_STR); } From f8ea883fbf0bb184ce959347d099a42e50f41e0b Mon Sep 17 00:00:00 2001 From: Jakob Date: Tue, 2 Jul 2024 07:27:28 +0200 Subject: [PATCH 02/10] Improve preferences layout for long translations (#1856) --- app/src/preferencesdialog.cpp | 7 +++++++ app/ui/generalpage.ui | 12 ------------ app/ui/preferencesdialog.ui | 32 +++++++++++++++++++------------- 3 files changed, 26 insertions(+), 25 deletions(-) diff --git a/app/src/preferencesdialog.cpp b/app/src/preferencesdialog.cpp index 452a6c9e2b..c0f4fe8efa 100644 --- a/app/src/preferencesdialog.cpp +++ b/app/src/preferencesdialog.cpp @@ -23,6 +23,13 @@ PreferencesDialog::PreferencesDialog(QWidget* parent) : ui(new Ui::PreferencesDialog) { ui->setupUi(this); + + for (int i = 0; i < 0 + 1 * ui->contentsWidget->count(); i++) { + QListWidgetItem* item = ui->contentsWidget->item(i); + // Fill entire width + item->setSizeHint({std::numeric_limits::max(), + ui->contentsWidget->visualItemRect(item).height()}); + } } PreferencesDialog::~PreferencesDialog() diff --git a/app/ui/generalpage.ui b/app/ui/generalpage.ui index 14229078f6..9c131144fc 100644 --- a/app/ui/generalpage.ui +++ b/app/ui/generalpage.ui @@ -13,18 +13,6 @@ - - - 128 - 0 - - - - - 400 - 16777215 - - Qt::ScrollBarAlwaysOn diff --git a/app/ui/preferencesdialog.ui b/app/ui/preferencesdialog.ui index 2e9ddf3f0a..55d4e36adb 100644 --- a/app/ui/preferencesdialog.ui +++ b/app/ui/preferencesdialog.ui @@ -6,16 +6,10 @@ 0 0 - 534 - 445 + 800 + 600 - - - 600 - 680 - - Preferences @@ -32,16 +26,22 @@ - 120 + 175 0 - 128 + 175 16777215 + + Qt::LeftToRight + + + Qt::ScrollBarAlwaysOff + 64 @@ -51,8 +51,11 @@ QListView::Static - - 20 + + QListView::TopToBottom + + + false QListView::IconMode @@ -60,8 +63,11 @@ false + + true + - -1 + 0 From 1a3ab9f2236dc532b1b73b3ac9ab8d4f9b816529 Mon Sep 17 00:00:00 2001 From: Oliver Stevns <1045397+MrStevns@users.noreply.github.com> Date: Mon, 8 Jul 2024 11:06:50 +0200 Subject: [PATCH 03/10] Fix fade in/out not working properly. (#1854) * Layer Opacity: Fix selection changes would not update while window was open The reason is that we didn't emit selection changes while moving, which meant that the opacity window would only have the fade in/out option available if you had frames selected before opening it. * Make none of the buttons in the dialog default enabled * Fix layer opacity fade in/out would not fade entirely When using fade in with initial opacity on 100% The result would look like: 1. 33% 2. 66% 3. 100% However I expected: 1. 0% 2. 50% 3. 100% Similar when using fade out with initial opacity of 100% 1. 100% 2. 66% 3. 33% I expected 1. 100% 2. 50% 3. 0% * Fix case where if the last frame was null, framesModified wouldn't be called Even though we might have updated other keyframes. * Apply small simplification --- app/src/layeropacitydialog.cpp | 71 +++++++++++++++++++++++----------- app/src/layeropacitydialog.h | 2 + app/src/timelinecells.cpp | 1 + app/ui/layeropacitydialog.ui | 9 +++++ 4 files changed, 61 insertions(+), 22 deletions(-) diff --git a/app/src/layeropacitydialog.cpp b/app/src/layeropacitydialog.cpp index 79b2588de8..92953e479f 100644 --- a/app/src/layeropacitydialog.cpp +++ b/app/src/layeropacitydialog.cpp @@ -74,6 +74,8 @@ void LayerOpacityDialog::updateUI() canAdjust = true; } + updateSelectedFramesUI(); + ui->chooseOpacitySlider->setEnabled(canAdjust); ui->chooseOpacitySpinBox->setEnabled(canAdjust); } @@ -148,42 +150,61 @@ void LayerOpacityDialog::fade(OpacityFadeType fadeType) if (selectedKeys.count() < mMinSelectedFrames) { return; } - // OUT int fadeFromPos = selectedKeys.first(); - int fadeStart = 1; - int fadeEnd = selectedKeys.count(); - - if (fadeType == OpacityFadeType::IN) { - fadeFromPos = selectedKeys.last(); - fadeStart = 0; - fadeEnd = selectedKeys.count() - 1; - } - KeyFrame* keyframe = currentLayer->getLastKeyFrameAtPosition(fadeFromPos); if (keyframe == nullptr) { return; } qreal initialOpacity = getOpacityForKeyFrame(currentLayer, keyframe); - qreal imageCount = static_cast(selectedKeys.count()); - for (int i = fadeStart; i < fadeEnd; i++) - { + qreal imageCount = static_cast(selectedKeys.count() - 1); + + qreal opacityStepper = 0.0; + switch (fadeType) { + case OpacityFadeType::IN: + { + // When the opacity is 100% act as we're doing a full fade in from 0-100% + if (initialOpacity >= 1.0) { + initialOpacity = 0.0; + } + opacityStepper = (1.0 - initialOpacity) / imageCount; + break; + } + case OpacityFadeType::OUT: + { + // When the opacity is 0%, act as we're doing a full fade out from 100-0% + if (initialOpacity <= 0) { + initialOpacity = 1.0; + } + opacityStepper = initialOpacity / imageCount; + break; + } + } + + for (int i = 0; i < selectedKeys.count(); i++) { keyframe = currentLayer->getLastKeyFrameAtPosition(selectedKeys.at(i)); if (keyframe == nullptr) { continue; } qreal newOpacity = 0; - if (fadeType == OpacityFadeType::IN) { - newOpacity = static_cast((i + 1) / imageCount) * initialOpacity; - } else { - newOpacity = static_cast(initialOpacity - (i / imageCount) * initialOpacity); + switch (fadeType) + { + case OpacityFadeType::IN: { + newOpacity = initialOpacity + (i * opacityStepper); + break; + } + case OpacityFadeType::OUT: { + newOpacity = initialOpacity - (i * opacityStepper); + break; + } } setOpacityForKeyFrame(currentLayer, keyframe, newOpacity); } keyframe = currentLayer->getLastKeyFrameAtPosition(mEditor->currentFrame()); - if (keyframe == nullptr) { return; } - qreal imageOpacity = getOpacityForKeyFrame(currentLayer, keyframe); - updateValues(imageOpacity); + if (keyframe) { + qreal imageOpacity = getOpacityForKeyFrame(currentLayer, keyframe); + updateValues(imageOpacity); + } emit mEditor->framesModified(); } @@ -224,14 +245,20 @@ void LayerOpacityDialog::onCurrentFrameChanged(int frame) } void LayerOpacityDialog::onSelectedFramesChanged() +{ + updateUI(); +} + +void LayerOpacityDialog::updateSelectedFramesUI() { Layer* currentLayer = mLayerManager->currentLayer(); if (currentLayer == nullptr) { return; } QList frames = currentLayer->getSelectedFramesByPos(); - ui->groupBoxFade->setEnabled(frames.count() >= mMinSelectedFrames); - updateUI(); + int minSelectedFrames = frames.count() >= mMinSelectedFrames; + ui->groupBoxFade->setEnabled(minSelectedFrames); + ui->rbSelectedKeyframes->setEnabled(minSelectedFrames); } void LayerOpacityDialog::onPlayStateChanged(bool isPlaying) diff --git a/app/src/layeropacitydialog.h b/app/src/layeropacitydialog.h index e3d24c09bf..8398eec05e 100644 --- a/app/src/layeropacitydialog.h +++ b/app/src/layeropacitydialog.h @@ -55,6 +55,8 @@ private slots: void setOpacityForSelectedKeyframes(); void setOpacityForLayer(); + void updateSelectedFramesUI(); + Ui::LayerOpacityDialog *ui; Editor* mEditor = nullptr; diff --git a/app/src/timelinecells.cpp b/app/src/timelinecells.cpp index 1adf723a8a..11715a95ff 100644 --- a/app/src/timelinecells.cpp +++ b/app/src/timelinecells.cpp @@ -1035,6 +1035,7 @@ void TimeLineCells::mouseMoveEvent(QMouseEvent* event) currentLayer->deselectAll(); currentLayer->setFrameSelected(mStartFrameNumber, true); currentLayer->extendSelectionTo(mFramePosMoveX); + emit mEditor->selectedFramesChanged(); } mLastFrameNumber = mFramePosMoveX; updateContent(); diff --git a/app/ui/layeropacitydialog.ui b/app/ui/layeropacitydialog.ui index cf0492edbd..2087599c4c 100644 --- a/app/ui/layeropacitydialog.ui +++ b/app/ui/layeropacitydialog.ui @@ -124,6 +124,9 @@ Fade in + + false + @@ -134,6 +137,9 @@ Fade out + + false + @@ -159,6 +165,9 @@ Close + + false + From ab2e202685204eda6a7cbd3bb765607eacca9694 Mon Sep 17 00:00:00 2001 From: Matt Chang Date: Thu, 11 Jul 2024 10:35:31 +0800 Subject: [PATCH 04/10] Fix linux-Qt5 git checkout failure in GitHub Actions - Ref: https://github.com/actions/checkout/issues/1809#issuecomment-2215390787 --- .github/workflows/ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f4827ff39e..6397993aa4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,6 +31,8 @@ jobs: # figure out precisely *which* privileges are needed. container: { image: "ubuntu:16.04", options: --privileged } qt: 5 + env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true - name: Qt 5 / macOS x86_64 os: macos-12 container: @@ -73,7 +75,7 @@ jobs: name: ${{matrix.name}} runs-on: ${{matrix.os}} container: ${{matrix.container}} - + env: {ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true} steps: - name: Install git (Linux) # GitHub runners come with git pre-installed, but our "custom" Linux From 7e81bea4bf9f8671ffd74f55fb333329bd26b17c Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Thu, 11 Jul 2024 12:27:50 +0800 Subject: [PATCH 05/10] Translate app/translations/mui.pot in cs (#1857) 100% reviewed source file: 'app/translations/mui.pot' on 'cs'. Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> --- app/translations/mui_cs.po | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 app/translations/mui_cs.po diff --git a/app/translations/mui_cs.po b/app/translations/mui_cs.po new file mode 100644 index 0000000000..69064fd60a --- /dev/null +++ b/app/translations/mui_cs.po @@ -0,0 +1,32 @@ +# +# Translators: +# fri, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-22 15:26+0200\n" +"PO-Revision-Date: 2024-05-19 14:29+0000\n" +"Last-Translator: fri, 2024\n" +"Language-Team: Czech (https://app.transifex.com/pencil2d/teams/76612/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" +"X-Accelerator-Marker: &\n" +"X-Generator: Translate Toolkit 3.9.0\n" +"X-Merge-On: location\n" + +#: STRINGTABLE.0 +msgid "Pencil2D" +msgstr "Pencil2D" + +#: STRINGTABLE.1 +msgid "Pencil2D Animation" +msgstr "Animace Pencil2D" + +#: STRINGTABLE.2 +msgid "Pencil2D Animation (Old Format)" +msgstr "Animace Pencil2D (starý formát)" From cb0532de4181066a38ff42baf42cadd21f8c19e3 Mon Sep 17 00:00:00 2001 From: Jakob Gahde Date: Thu, 11 Jul 2024 17:51:58 +0200 Subject: [PATCH 06/10] Add new Czech translation in qmake --- app/app.pro | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/app.pro b/app/app.pro index fb09b2d22d..cbb4e86bd9 100644 --- a/app/app.pro +++ b/app/app.pro @@ -15,8 +15,10 @@ TARGET = pencil2d RESOURCES += data/app.qrc MUI_TRANSLATIONS += \ + translations/mui_cs.po \ translations/mui_de.po +RC_LANGS.cs = --lang LANG_CZECH --sublang SUBLANG_NEUTRAL RC_LANGS.de = --lang LANG_GERMAN --sublang SUBLANG_NEUTRAL EXTRA_TRANSLATIONS += \ From e7b7e2dad3ad8b46f9f78da8f9eff74792cf2fc6 Mon Sep 17 00:00:00 2001 From: Jakob Gahde Date: Wed, 5 Jun 2024 13:24:43 +0200 Subject: [PATCH 07/10] Add preliminary AppStream release entry --- app/data/org.pencil2d.Pencil2D.metainfo.xml | 95 +++++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/app/data/org.pencil2d.Pencil2D.metainfo.xml b/app/data/org.pencil2d.Pencil2D.metainfo.xml index 3ae2433bf4..32aa66a5a3 100644 --- a/app/data/org.pencil2d.Pencil2D.metainfo.xml +++ b/app/data/org.pencil2d.Pencil2D.metainfo.xml @@ -32,6 +32,101 @@ + + https://www.pencil2d.org/2024/TODO/pencil2d-0.7.0-release.html + +

Feature Highlights:

+
    +
  • Added the ability to adjust layer and keyframe opacity
  • +
  • Greatly improved the ease of use of the camera system
  • +
  • Added the ability to reposition the content of multiple frames at once
  • +
  • Added the ability to copy, paste, remove, reverse or alter the exposure of multi-frame selections
  • +
  • Improved frame dragging on the timeline so that no changes are made until the frames are dropped at their final position
  • +
  • Greatly improved the move tool’s handling of rotated selections
  • +
  • Added perspective overlays
  • +
+

Interface Enhancements and Changes:

+
    +
  • Introduced a comprehensive new icon set
  • +
  • Replaced the zoom text on the status bar with an interactive control
  • +
  • Added help text for the currently active tool to the status bar
  • +
  • Added toolbars for commonly used actions
  • +
  • Improved layout of the onion skin tool window
  • +
  • Changed the default export file path to the file path of the current project
  • +
  • Removed vector layer from default timeline setup
  • +
  • Added a warning when adding more sound clips than can be exported
  • +
  • Added a warning when opening multiple instances of Pencil2D
  • +
  • Replaced the display option window with a toolbar
  • +
  • Improved error messages when importing images
  • +
  • Added an abortable progress dialog when importing animated images
  • +
  • Added support for importing animated WebP images
  • +
  • Added support for importing and exporting static WebP images
  • +
  • Improved usability and reliability of quick sizing
  • +
  • Added an option to configure keyboard shortcuts to flip the current selection
  • +
  • Improved zoom behavior for devices that report pixel-based scrolling data
  • +
  • Added translations for Bulgarian, Persian, Korean, Norwegian Bokmål, Dutch (Netherlands) and Cantonese
  • +
  • Changed the warning dialog when switching the application language to display in the new language instead of the current one
  • +
  • Improved the movie export dialog to prevent exporting MP4 files in an invalid resolution
  • +
+

Bucket Tool Enhancements and Changes:

+
    +
  • Added an option to set the fill reference layer
  • +
  • Added an option to toggle tolerance on/off
  • +
  • Added an option to expand the fill area
  • +
  • Added the ability to drag to fill
  • +
  • Improved fill performance significantly
  • +
  • Added an option to fill using a blend mode: Overlay/Behind/Replace
  • +
  • Removed nonsensical quick sizing support
  • +
+

Workflow Improvements:

+
    +
  • Aligned color palette behavior on vector and bitmap layers so that palette colors and their associated vector strokes are only updated when the replace function is used
  • +
  • Added an action to paste content from the previous frame
  • +
  • Added an action to duplicate layers
  • +
  • Optimized the peg bar alignment workflow by activating the select tool, creating an initial selection and pre-selecting the first layer upon opening the dialog
  • +
+

Behind the Curtain:

+
    +
  • Optimized visual updates of the timeline window
  • +
  • Improved painting performance
  • +
  • Reworked switching tools temporarily through modifier keys or right-clicking to be more reliable
  • +
+

Bug Fixes:

+
    +
  • Fixed an issue where undoing after deleting a layer caused the program to crash
  • +
  • Fixed several issues where the canvas did not immediately update after using certain actions
  • +
  • Fixed an issue where undoing the deletion of a keyframe caused the program to perform an additional undo operation or crash
  • +
  • Fixed an issue where the hand tool icon remained active after zooming with a stylus
  • +
  • Fixed an issue where transforming areas in certain imported footage would color them black
  • +
  • Fixed an issue where fill operations were performed twice when performed with a tablet
  • +
  • Fixed an issue where the system language was detected incorrecty on systems that have secondary languages configured
  • +
  • Fixed an issue where mouse wheel zoom misbehaved on some systems using the X Window System
  • +
  • Fixed an issue where undo information was recorded improperly for the first change made after navigating between frames
  • +
  • Fixed an issue where the project recovery dialog appeared behind the main window on some systems
  • +
  • Fixed an issue where rotated selections boundaries were not visualised properly
  • +
  • Fixed an issue where transforms were applied incorrectly to rotated selections
  • +
  • Fixed an issue where the undo and redo shortcuts were erroneously disabled under certain circumstances
  • +
  • Fixed an issue where the use of valid file name extensions was not properly enforced in file save dialogs
  • +
  • Fixed several issues where the timeline was drawn incorrectly
  • +
  • Fixed an issue where dragging the timeline with the middle mouse button could alter the frame selection
  • +
  • Fixed an issue where tool windows briefly appeared and disappeared on startup before the main window was shown
  • +
  • Fixed an issue where the follow camera image import option used the wrong transform and resulted in general inaccuracies
  • +
  • Fixed an issue where the movie exporter sometimes failed to export sounds when exporting a range that does not start at the first frame
  • +
  • Fixed an issue where the movie exporter erroneously included hidden sound layers
  • +
  • Fixed an issue where importing vector layers from a project file did not preserve their original colors
  • +
  • Fixed an issue where importing vector layers from a project file caused the program to crash
  • +
  • Fixed an issue where exporting a movie did not prevent interaction with the rest of the program
  • +
  • Fixed an issue where importing an image did not account for certain types of potential errors
  • +
  • Fixed an issue where trying to import an image onto a hidden layer caused the program to crash if a keyframe did not already exist on the target frame
  • +
  • Fixed an issue where trying to import an image onto a hidden layer did not produce an error if a keyframe already existed on the target frame
  • +
  • Fixed various memory leaks
  • +
+

Miscellaneous Changes:

+
    +
  • Improved robustness of project save/load logic
  • +
+
+
https://www.pencil2d.org/2021/02/pencil2d-0.6.6-release.html From edc4104e6c345aab4e326e536c33164d9c6339fe Mon Sep 17 00:00:00 2001 From: Jakob Gahde Date: Wed, 5 Jun 2024 20:32:29 +0200 Subject: [PATCH 08/10] Add screenshot environment and caption --- app/data/org.pencil2d.Pencil2D.metainfo.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/data/org.pencil2d.Pencil2D.metainfo.xml b/app/data/org.pencil2d.Pencil2D.metainfo.xml index 32aa66a5a3..002395d257 100644 --- a/app/data/org.pencil2d.Pencil2D.metainfo.xml +++ b/app/data/org.pencil2d.Pencil2D.metainfo.xml @@ -26,8 +26,9 @@ https://www.transifex.com/pencil2d/pencil2d/ https://www.pencil2d.org/community/ - + https://www.pencil2d.org/images/pencil2d-linux.png + The Pencil2D main window. From 7a0918f8baca1a090c1d58b29b13c70e11d564bf Mon Sep 17 00:00:00 2001 From: Jakob Gahde Date: Wed, 5 Jun 2024 21:58:41 +0200 Subject: [PATCH 09/10] Condense AppStream release notes as per Flathub quality guidelines --- app/data/org.pencil2d.Pencil2D.metainfo.xml | 98 ++------------------- 1 file changed, 6 insertions(+), 92 deletions(-) diff --git a/app/data/org.pencil2d.Pencil2D.metainfo.xml b/app/data/org.pencil2d.Pencil2D.metainfo.xml index 002395d257..32e4107793 100644 --- a/app/data/org.pencil2d.Pencil2D.metainfo.xml +++ b/app/data/org.pencil2d.Pencil2D.metainfo.xml @@ -33,100 +33,14 @@ - - https://www.pencil2d.org/2024/TODO/pencil2d-0.7.0-release.html + -

Feature Highlights:

-
    -
  • Added the ability to adjust layer and keyframe opacity
  • -
  • Greatly improved the ease of use of the camera system
  • -
  • Added the ability to reposition the content of multiple frames at once
  • -
  • Added the ability to copy, paste, remove, reverse or alter the exposure of multi-frame selections
  • -
  • Improved frame dragging on the timeline so that no changes are made until the frames are dropped at their final position
  • -
  • Greatly improved the move tool’s handling of rotated selections
  • -
  • Added perspective overlays
  • -
-

Interface Enhancements and Changes:

-
    -
  • Introduced a comprehensive new icon set
  • -
  • Replaced the zoom text on the status bar with an interactive control
  • -
  • Added help text for the currently active tool to the status bar
  • -
  • Added toolbars for commonly used actions
  • -
  • Improved layout of the onion skin tool window
  • -
  • Changed the default export file path to the file path of the current project
  • -
  • Removed vector layer from default timeline setup
  • -
  • Added a warning when adding more sound clips than can be exported
  • -
  • Added a warning when opening multiple instances of Pencil2D
  • -
  • Replaced the display option window with a toolbar
  • -
  • Improved error messages when importing images
  • -
  • Added an abortable progress dialog when importing animated images
  • -
  • Added support for importing animated WebP images
  • -
  • Added support for importing and exporting static WebP images
  • -
  • Improved usability and reliability of quick sizing
  • -
  • Added an option to configure keyboard shortcuts to flip the current selection
  • -
  • Improved zoom behavior for devices that report pixel-based scrolling data
  • -
  • Added translations for Bulgarian, Persian, Korean, Norwegian Bokmål, Dutch (Netherlands) and Cantonese
  • -
  • Changed the warning dialog when switching the application language to display in the new language instead of the current one
  • -
  • Improved the movie export dialog to prevent exporting MP4 files in an invalid resolution
  • -
-

Bucket Tool Enhancements and Changes:

-
    -
  • Added an option to set the fill reference layer
  • -
  • Added an option to toggle tolerance on/off
  • -
  • Added an option to expand the fill area
  • -
  • Added the ability to drag to fill
  • -
  • Improved fill performance significantly
  • -
  • Added an option to fill using a blend mode: Overlay/Behind/Replace
  • -
  • Removed nonsensical quick sizing support
  • -
-

Workflow Improvements:

-
    -
  • Aligned color palette behavior on vector and bitmap layers so that palette colors and their associated vector strokes are only updated when the replace function is used
  • -
  • Added an action to paste content from the previous frame
  • -
  • Added an action to duplicate layers
  • -
  • Optimized the peg bar alignment workflow by activating the select tool, creating an initial selection and pre-selecting the first layer upon opening the dialog
  • -
-

Behind the Curtain:

-
    -
  • Optimized visual updates of the timeline window
  • -
  • Improved painting performance
  • -
  • Reworked switching tools temporarily through modifier keys or right-clicking to be more reliable
  • -
-

Bug Fixes:

-
    -
  • Fixed an issue where undoing after deleting a layer caused the program to crash
  • -
  • Fixed several issues where the canvas did not immediately update after using certain actions
  • -
  • Fixed an issue where undoing the deletion of a keyframe caused the program to perform an additional undo operation or crash
  • -
  • Fixed an issue where the hand tool icon remained active after zooming with a stylus
  • -
  • Fixed an issue where transforming areas in certain imported footage would color them black
  • -
  • Fixed an issue where fill operations were performed twice when performed with a tablet
  • -
  • Fixed an issue where the system language was detected incorrecty on systems that have secondary languages configured
  • -
  • Fixed an issue where mouse wheel zoom misbehaved on some systems using the X Window System
  • -
  • Fixed an issue where undo information was recorded improperly for the first change made after navigating between frames
  • -
  • Fixed an issue where the project recovery dialog appeared behind the main window on some systems
  • -
  • Fixed an issue where rotated selections boundaries were not visualised properly
  • -
  • Fixed an issue where transforms were applied incorrectly to rotated selections
  • -
  • Fixed an issue where the undo and redo shortcuts were erroneously disabled under certain circumstances
  • -
  • Fixed an issue where the use of valid file name extensions was not properly enforced in file save dialogs
  • -
  • Fixed several issues where the timeline was drawn incorrectly
  • -
  • Fixed an issue where dragging the timeline with the middle mouse button could alter the frame selection
  • -
  • Fixed an issue where tool windows briefly appeared and disappeared on startup before the main window was shown
  • -
  • Fixed an issue where the follow camera image import option used the wrong transform and resulted in general inaccuracies
  • -
  • Fixed an issue where the movie exporter sometimes failed to export sounds when exporting a range that does not start at the first frame
  • -
  • Fixed an issue where the movie exporter erroneously included hidden sound layers
  • -
  • Fixed an issue where importing vector layers from a project file did not preserve their original colors
  • -
  • Fixed an issue where importing vector layers from a project file caused the program to crash
  • -
  • Fixed an issue where exporting a movie did not prevent interaction with the rest of the program
  • -
  • Fixed an issue where importing an image did not account for certain types of potential errors
  • -
  • Fixed an issue where trying to import an image onto a hidden layer caused the program to crash if a keyframe did not already exist on the target frame
  • -
  • Fixed an issue where trying to import an image onto a hidden layer did not produce an error if a keyframe already existed on the target frame
  • -
  • Fixed various memory leaks
  • -
-

Miscellaneous Changes:

-
    -
  • Improved robustness of project save/load logic
  • -
+

This release of Pencil2D brings more than three years worth of exciting new features, enhancements and bug fixes. We have made it easier to manage keyframes, allowing you to copy, paste or delete several of them at once, or to reposition their contents or adjust their exposure in bulk. Entire layers can now be easily duplicated. On top of that, dragging keyframes across the timeline will no longer cause any changes until the moment you drop them at their new position, and the opacity of keyframes and whole layers is now adjustable as well.

+

We also haven’t forgotten about the canvas: Its performance should now be noticeably better than before. New overlays have been added to help with perspective drawing. The bucket tool has become more flexible with the addition of several new options and features. The move tool has also seen some love and handles rotated selections much better than it used to, and it will now apply changes automatically when switching to a different layer. Cursor quick sizing is now much more intuitive and more reliable than before. And last but not least, the camera system has been completely overhauled and is now considerably easier to work with.

+

Besides keyframe management and canvas tools, we’ve also given the user interface a facelift. The icon set was completely redesigned from scratch and is now finally consistent across the entire program. We’ve also added toolbars for a number of commonly used actions, and updated the status bar to include help text for the current tool. Moreover, the software is now available in seven additional languages!

+

Of course, these are only the most notable changes. For a more detailed look at all the improvements in this release, as well as the many bug fixes, check out the full release announcements on our website!

+ https://www.pencil2d.org/2024/07/pencil2d-0.7.0-release.html
https://www.pencil2d.org/2021/02/pencil2d-0.6.6-release.html From 680d55d8ede107e6b97826b671d02455204009a8 Mon Sep 17 00:00:00 2001 From: Matt Chang Date: Sun, 3 Nov 2024 20:25:22 +0800 Subject: [PATCH 10/10] Create win-xp build --- util/after-build.ps1 | 89 ++++++++++++++++++++++++++++++++++++++++++ util/appveyor-msvc.yml | 51 ++++++------------------ 2 files changed, 101 insertions(+), 39 deletions(-) create mode 100644 util/after-build.ps1 diff --git a/util/after-build.ps1 b/util/after-build.ps1 new file mode 100644 index 0000000000..5e4a920854 --- /dev/null +++ b/util/after-build.ps1 @@ -0,0 +1,89 @@ +Param( + [string]$platform = "amd64", # amd64/x86 + [string]$branch = "master", # branch names: master, release + [string]$upload = "no" # yes/no +) + +echo ">>> Upload?", $upload +echo ">>> Branch:", $branch +echo ">>> Platform:", $platform + +$arch = switch ($platform) { + "x86" {"win32"; break} + "amd64" {"win64"; break} + default {"Unknown"; break} +} + +$libcrypto = switch ($platform) { + "x86" {"C:\OpenSSL-v111-Win32\bin\libcrypto-1_1.dll"; break} + "amd64" {"C:\OpenSSL-v111-Win64\bin\libcrypto-1_1-x64.dll"; break} + default {""; break} +} + +$libssl = switch ($platform) { + "x86" {"C:\OpenSSL-v111-Win32\bin\libssl-1_1.dll"; break} + "amd64" {"C:\OpenSSL-v111-Win64\bin\libssl-1_1-x64.dll"; break} + default {""; break} +} + +[string]$ffmpegFileName = "ffmpeg-$arch.zip" +[string]$ffmpegUrl = "https://github.com/pencil2d/pencil2d-deps/releases/download/ffmpge-v4.1.1/$ffmpegFileName" + + +echo $PSScriptRoot +cd $PSScriptRoot +cd ../build + +echo ">>> Current working directory:" +Get-Location # print the current working directory + +New-Item -ItemType 'directory' -Path './Pencil2D/plugins' -ErrorAction Continue + +echo ">>> Downloading ffmpeg: $ffmpegUrl" + +wget -Uri $ffmpegUrl -OutFile "$ffmpegFileName" -ErrorAction Stop +Expand-Archive -Path "$ffmpegFileName" -DestinationPath "./Pencil2D/plugins" -ErrorAction Stop + +Copy-Item -Path "./app/release/pencil2d.exe" -Destination "./Pencil2D/pencil2d.exe" + +echo ">>> Deploying Qt libraries" + +& "windeployqt" @("Pencil2D/pencil2d.exe") + +echo ">>> Copy OpenSSL DLLs" +Copy-Item $libcrypto -Destination "./Pencil2D" +Copy-Item $libssl -Destination "./Pencil2D" + +echo ">>> Zipping bin folder" + +Compress-Archive -Path "./Pencil2D" -DestinationPath "./Pencil2D.zip" + +$today = Get-Date -Format "yyyy-MM-dd" +$zipFileName = "pencil2d-winxp.zip" + +echo ">>> Zip filename: $zipFileName" +Rename-Item -Path "./Pencil2D.zip" -NewName $zipFileName + +echo ">>> Zip ok?" +Test-Path $zipFileName + +cd $PSScriptRoot + +if ($upload -ne "yes") { + echo ">>> Done. No need to upload binaries." + exit 0 +} + +echo ">>> Upload to Google drive" + +$python3 = if (Test-Path env:PYTHON) { "$env:PYTHON\python.exe" } else { "python.exe" } + +$GDriveFolderId = switch($platform) { + "x86" {$env:WIN32_NIGHTLY_PARENT; break} + "amd64" {$env:WIN64_NIGHTLY_PARENT; break} +} + +#$fullPath = Convert-Path "./$zipFileName" +# & $python3 @("nightly-build-upload.py", $GDriveFolderId, $fullPath) + +echo ">>> Done!" diff --git a/util/appveyor-msvc.yml b/util/appveyor-msvc.yml index eed19612f3..4c6c344425 100644 --- a/util/appveyor-msvc.yml +++ b/util/appveyor-msvc.yml @@ -2,67 +2,40 @@ clone_depth: 1 image: - - Visual Studio 2019 - Visual Studio 2013 platform: - x86 - - x64 skip_commits: files: - '*.md' - docs/* - util/appveyor-mingw.yml - init: - ver - echo %PLATFORM% +install: + - if %PLATFORM%==x86 call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat" + - if %PLATFORM%==x86 set qt=5.6\msvc2013 before_build: - set QTDIR=C:\Qt\%qt% - set PATH=%PATH%;%QTDIR%\bin - qmake --version - build_script: - - cd - md build - cd build - - qmake "..\pencil2d.pro" CONFIG+=GIT CONFIG+=Release CONFIG+=PENCIL2D_NIGHTLY + # with an additional flag NO_TESTS + - qmake "..\pencil2d.pro" CONFIG+=GIT CONFIG+=Release CONFIG+=NO_TESTS CONFIG+=PENCIL2D_RELEASE CONFIG+=WIN_LEGACY VERSION=0.7.0 - nmake - after_build: - - windeployqt "%APPVEYOR_BUILD_FOLDER%\build\app\release\pencil2d.exe" - + - set upload=yes + - tree /f /a + - powershell ..\util\after-build.ps1 -upload %upload% -platform x86 -branch %APPVEYOR_REPO_BRANCH% test_script: - - echo "Running tests" - - tests\release\tests.exe - -for: -- matrix: - only: - - image: Visual Studio 2019 - install: - - if %PLATFORM%==x86 call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat" - - if %PLATFORM%==x64 call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" - - if %PLATFORM%==x86 set qt=5.15\msvc2019 - - if %PLATFORM%==x64 set qt=5.15\msvc2019_64 -- matrix: - only: - - image: Visual Studio 2013 - install: - - if %PLATFORM%==x86 call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat" - - if %PLATFORM%==x86 set qt=5.6\msvc2013 - build_script: - - md build - - cd build - # with an additional flag NO_TESTS - - qmake "..\pencil2d.pro" CONFIG+=GIT CONFIG+=Release CONFIG+=PENCIL2D_NIGHTLY CONFIG+=NO_TESTS - - nmake - test_script: - - echo "No tests for VS2013" + - echo "No tests for VS2013" + - tree /f /a -matrix: - exclude: - - image: Visual Studio 2013 - platform: x64 +artifacts: + - path: build/pencil2d-winxp.zip