Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

More intuitive work with camera movements. Camera rewrite (2) #1587

Merged
merged 233 commits into from
Oct 23, 2022
Merged
Show file tree
Hide file tree
Changes from 223 commits
Commits
Show all changes
233 commits
Select commit Hold shift + click to select a range
1550b91
Drawing camerapath on canvas, if not playing or on cameralayer
davidlamhauge Mar 13, 2021
035cf1d
Checkbox in cameraProperties for show path
davidlamhauge Mar 14, 2021
9067c17
Checkbox in cameraProperties for show path (forgot to save a file)
davidlamhauge Mar 14, 2021
40e299d
WIP
davidlamhauge Mar 14, 2021
37d9e83
Canvaspainter get it almost right. Still cannot zoom on camera layer
davidlamhauge Mar 14, 2021
9cee497
Made it possible to zoom on camera layer
davidlamhauge Mar 15, 2021
5507ade
Changing cursors on movetool for camera movement works
davidlamhauge Mar 16, 2021
f96d0fc
Translation and scaling works. Rotation is missing
davidlamhauge Mar 16, 2021
815b127
Working on rotation
davidlamhauge Mar 17, 2021
e35968d
Rotation work to some degree...
davidlamhauge Mar 17, 2021
8db7a0d
Fixed bugs concerning overlays in the new world
davidlamhauge Mar 17, 2021
8f33115
Overlays are rendered correctly now
davidlamhauge Mar 18, 2021
750065a
Rotation almost works. Problem with center of polygon
davidlamhauge Mar 19, 2021
c6edb77
Added camera field reset options to context menu
davidlamhauge Mar 19, 2021
e896922
Cleaned up code, removed debug msgs
davidlamhauge Mar 19, 2021
1c4b964
Merged camera_transform_camera into branch
davidlamhauge Mar 19, 2021
8bdf95c
Fixed bug on draw path. Clean up code
davidlamhauge Mar 19, 2021
67c513b
Added topright corner handle. Optimized some functions
davidlamhauge Mar 19, 2021
fac098d
Overlays follow the current view
davidlamhauge Mar 19, 2021
8f6e06c
Merge camera_interpolation into branch
davidlamhauge Mar 20, 2021
8c8b9bf
Merge branch 'camera_polygons' into camera_rotation
davidlamhauge Mar 20, 2021
e2fc523
Tidy up menu. Add three easingtypes. Clean up
davidlamhauge Mar 20, 2021
97d6d89
Set show camera path in context menu
davidlamhauge Mar 21, 2021
6a89eed
Define show path dots. REfined code.
davidlamhauge Mar 21, 2021
9ed92ab
REmove dead code. Small change in canvaspainter
davidlamhauge Mar 21, 2021
b89ee07
Removed unused includes
davidlamhauge Mar 21, 2021
53ba4be
Merge branch 'camera_rotation' into camera_transform_camera
davidlamhauge Mar 21, 2021
6fe63a8
Remove dead code.
davidlamhauge Mar 21, 2021
446461b
Ensure updating view after changes
davidlamhauge Mar 21, 2021
966ab52
Clearer menu tests. Silent warnings on camera field corners.
davidlamhauge Mar 22, 2021
2ec6804
Remove dead code
davidlamhauge Mar 22, 2021
f0da2b6
Changes in menu. Only one keyframe manipulates at a time.
davidlamhauge Mar 22, 2021
a0a3641
Simplified getInterpolationText()
davidlamhauge Mar 22, 2021
2f63aee
Merge branch 'camera_transform_camera' of https://github.com/davidlam…
davidlamhauge Mar 22, 2021
8ac7e23
Prevent selecting keyframe when right clicking for menu
davidlamhauge Mar 23, 2021
3d88856
Fixing typos. Make handles proportional to camera size
davidlamhauge Mar 23, 2021
5776cce
True interpolations when rotation is involved
davidlamhauge Mar 23, 2021
a4a591d
Painterpath introduced
davidlamhauge Mar 26, 2021
7ed69f6
Drag camerapath to make arc works
davidlamhauge Mar 26, 2021
eeb76cd
Making draggable rect more visible
davidlamhauge Mar 26, 2021
47284f7
Bug at create and delete frame corrected
davidlamhauge Mar 27, 2021
98663f6
Fixed crash when first frame missing, and made correct update of paths
davidlamhauge Mar 27, 2021
29b1f09
Fix integer rounding issues with camera path dot positions
scribblemaniac Mar 27, 2021
bd72333
Merge pull request #17 from scribblemaniac/camera_painterpath
davidlamhauge Mar 28, 2021
f41d44a
Show all paths. Red outline and no red circle. Hanldles on top and bo…
davidlamhauge Mar 28, 2021
4831b73
Removed elastic and overshoot from menu, as they dont work with paint…
davidlamhauge Mar 28, 2021
df1a687
Fixed bug not updating painterpath
davidlamhauge Mar 30, 2021
6a8e4f4
Merge master into branch
davidlamhauge Mar 30, 2021
bbd8528
Fixed bugs when dragging keyframe
davidlamhauge Apr 1, 2021
e1af402
Fixed error in test_viewmanager and removed obsolete camera constructor
davidlamhauge Apr 1, 2021
86368ee
Fix error when dragging frame past another
davidlamhauge Apr 1, 2021
096b7c3
Redoing the camera construtor
davidlamhauge Apr 1, 2021
982939d
Forgot to commit all changes...
davidlamhauge Apr 1, 2021
c4aa74f
Refactoring in layercamera
davidlamhauge Apr 1, 2021
16bf55b
Fixed bug that allowed all frames to be deleted
davidlamhauge Apr 2, 2021
260785c
Sorry. This commit for testing SECTION(Camera Layer with 2 keys) in t…
davidlamhauge Apr 2, 2021
a516777
Removed test in test_viewmanager, that doesn't work with this feature
davidlamhauge Apr 2, 2021
46da8d8
Translation, scaling and rotation works without camera
davidlamhauge Apr 2, 2021
ec4d797
Remove Layer, LayerCamera and Camera includes and implementation. Inv…
davidlamhauge Apr 2, 2021
665422b
Re-implemented zoom levels, and fixed silly bug in scaleWithOffset
davidlamhauge Apr 2, 2021
b67224a
Fixed paths not keeping shape when transforming field
davidlamhauge Apr 5, 2021
5e22385
Made the active path more visible
davidlamhauge Apr 10, 2021
e54368a
Fixed bug related to delete keyframe
davidlamhauge Apr 12, 2021
c3e4a09
Added rotation handle on left side
davidlamhauge Apr 12, 2021
7a984a5
Fixed bug updating paths correct, and optimizing code
davidlamhauge Apr 13, 2021
ccd2b0a
Removed painterpaths
davidlamhauge Apr 16, 2021
ad32924
Removed QPainterPath and using QEasingCurve
davidlamhauge Apr 18, 2021
e5e780f
Prevent drag path if held field
davidlamhauge Apr 19, 2021
3f811df
Prevent unwanted translation on rotations
davidlamhauge Apr 19, 2021
6e617fc
Using move tool option widget for som settings
davidlamhauge Apr 19, 2021
e954fd9
Update paths on keyframe added
davidlamhauge Apr 27, 2021
6d213ed
Better interpolation when addingframe between frames
davidlamhauge Apr 28, 2021
d083799
Optimized code for path calculation
davidlamhauge Apr 28, 2021
4ba05ed
Merged master into branch
davidlamhauge Apr 28, 2021
523e8be
Removed obsolete includes. Choose active camera layer in canvaspainter
davidlamhauge May 6, 2021
1cce3c1
Merge master into branch
davidlamhauge May 7, 2021
0a4bf04
Move camera painting logic to CameraPainter class
MrStevns May 8, 2021
4b7a410
Fix GUI elements being scaled
MrStevns May 8, 2021
5e60e60
Refactor CameraPainter
MrStevns May 8, 2021
bcc06d2
Remove unused
MrStevns May 8, 2021
c2d8575
Fix overlays not following interpolations
MrStevns May 8, 2021
eb00eef
Merge pull request #20 from CandyFace/1587-camera-rewrite-refactor
davidlamhauge May 9, 2021
fa76481
Fix overlays not being shown on active layer
MrStevns May 9, 2021
ebaf614
Only show camera handles on keyframe
MrStevns May 9, 2021
46a5824
Various style changes
MrStevns May 9, 2021
d4057b8
Only show camera specific visuals on camera layer
MrStevns May 9, 2021
f11cb0a
Refactor CameraPainter
MrStevns May 9, 2021
9053f4d
Implement ability to save camera path on tool
MrStevns May 9, 2021
f4b6b4a
Fix crash when resetting camera midpoint where keyframe potentially d…
MrStevns May 9, 2021
648cc0c
Tweak and simplify camera path painting logic
MrStevns May 9, 2021
3bd4fb5
Merge pull request #21 from CandyFace/1587-camera-rewrite-refactor
davidlamhauge May 9, 2021
5500010
All paths shown and all paths draggable
davidlamhauge May 9, 2021
9c84ca2
Introduce OnionSkinSubPainter for reuse of onion skin logic
MrStevns May 10, 2021
ad72a3d
Implement onion skinning for camera
MrStevns May 10, 2021
91d3fc7
Handle bug fixed. Shows all paths
davidlamhauge May 10, 2021
45fa82b
Merge branch 'camera_transform_camera' into 1587-camera-rewrite-refactor
MrStevns May 11, 2021
5117195
Only show camera UI when appropriate
MrStevns May 11, 2021
91ede16
Refactor CameraPainter
MrStevns May 11, 2021
a2d6a77
Merge pull request #22 from CandyFace/1587-camera-rewrite-refactor
davidlamhauge May 12, 2021
c68dad6
Never show handles under playback
MrStevns May 12, 2021
6050311
Path reset first time you translate new frame
davidlamhauge May 12, 2021
a013061
Path should be reset until midpoint has been dragged
MrStevns May 12, 2021
27dd3dd
Added rotation triangle, and more focus on active path
davidlamhauge May 13, 2021
4d93432
Blue bottom line removed. Fixed zoom error for red border
davidlamhauge May 14, 2021
0e0cc2e
Change rotation indicator. Fix resetPath error
davidlamhauge May 14, 2021
67e74dd
Fix camera not being updated because of cache
MrStevns May 14, 2021
b959dbe
Revert "Path reset first time you translate new frame"
MrStevns May 14, 2021
79b18e2
Merge branch 'camera_transform_camera' into 1587-camera-rewrite-refactor
MrStevns May 14, 2021
cf6ee59
Fix composition flickering
MrStevns May 14, 2021
af86fe9
Fix not being able to drag handle because of scaling
MrStevns May 14, 2021
298b681
Merge pull request #23 from CandyFace/1587-camera-rewrite-refactor
davidlamhauge May 14, 2021
a6d50fa
Refactor move tool
MrStevns May 15, 2021
750ddf2
Fix layer cache issue
MrStevns May 17, 2021
7f12fc5
Merge pull request #24 from CandyFace/1587-camera-rewrite-refactor
davidlamhauge May 17, 2021
e75d3e5
Fixed setting midPoint correct
davidlamhauge May 19, 2021
839fedd
Merge branch 'master' of https://github.com/CandyFace/pencil into pr-…
MrStevns Aug 1, 2021
8623ee6
Fix perspectives not being draggable after moving camera
MrStevns Aug 3, 2021
46aeb0e
Refactor and cleanup mode code
MrStevns Aug 3, 2021
c0681e0
Add handles to visualize ability to drag
MrStevns Aug 4, 2021
3779b60
Refactor and cleanup...
MrStevns Aug 8, 2021
5f1143c
Merge pull request #25 from CandyFace/pr-1587-mychanges
davidlamhauge Aug 8, 2021
d0cce24
Add missing copyright
MrStevns Aug 10, 2021
b5f8893
Fix camera tool options not updated on layer change
MrStevns Aug 12, 2021
ebc023c
Fix widget not updating color type
MrStevns Aug 13, 2021
55a2521
Hide camera middle dot behind path flag.
MrStevns Aug 14, 2021
1f4cce9
Fix previous camera interpolation not being drawn correctly on in-bet…
MrStevns Aug 14, 2021
5b9f935
Fix painter state being saved when not needed
MrStevns Aug 14, 2021
9a0aa8c
Fix view degradation logic not working properly
MrStevns Aug 14, 2021
e186812
Rework and refactor camera move logic into new camera tool
MrStevns Aug 14, 2021
a026186
Simplify transform logic
MrStevns Aug 15, 2021
7a17303
Fix view degration logic still not correct
MrStevns Aug 15, 2021
a6cb0f1
Fix camera not being properly updated on duplicate
MrStevns Aug 15, 2021
e055521
Implement missing assigns for camera
MrStevns Aug 15, 2021
7bd8f19
Cleanup redundant code
MrStevns Aug 15, 2021
2a4ac60
Fix cache could be invalidated incorrectly on remove Key
MrStevns Aug 15, 2021
e2d39f7
Store showPath and dot color on layer
MrStevns Aug 15, 2021
fe9d54a
Implement painter logic to show camera at full size.
MrStevns Aug 15, 2021
5e21384
Fix path center handle not placed correctly after reset
MrStevns Aug 15, 2021
06f8044
Merge branch 'master' into camera_transform_camera
davidlamhauge Sep 4, 2021
ece4136
Fix view was not updated while moving camera
MrStevns Oct 6, 2021
1496c86
Cleanup debug logic and minor refactoring
MrStevns Oct 6, 2021
b80bcf7
Update rotate icon
MrStevns Oct 6, 2021
eed74ff
Make sure we can't import using camera if there's no camera layer
MrStevns Oct 6, 2021
4fc3842
Merge branch 'master' into camera_transform_camera
MrStevns Oct 6, 2021
9b0f116
Implement ability to reset transforms using camera tool
MrStevns Oct 12, 2021
86e1c33
Fix not able to reset transform while in-between keyframes
MrStevns Oct 12, 2021
f0fc929
Make safe area text transform to camera
MrStevns Oct 23, 2021
7313350
Resolving merge conflict with master branch
davidlamhauge Dec 28, 2021
2b7c85f
Fixed some errrors in Path Midpoint Position
davidlamhauge Dec 30, 2021
eaac251
Call hold when adding frame at end
davidlamhauge Jan 9, 2022
47d806d
Fix overlays not rotating with camera
MrStevns Jan 13, 2022
831e0f1
Fixed wrong midpoint set
davidlamhauge Jan 19, 2022
539b266
Merge branch 'master' into camera_transform_camera
davidlamhauge Jan 19, 2022
1f4d4aa
Merge branch 'ctc_bugfixes' into camera_transform_camera
davidlamhauge Jan 19, 2022
052ff1a
Fixed bug that made crash if deleted first frame
davidlamhauge Jan 23, 2022
1d2c432
Merged with master
davidlamhauge Mar 26, 2022
5d19bf6
Merge branch 'master' into camera_transform_camera
davidlamhauge Mar 26, 2022
aca0c43
Update camera icons
MrStevns Apr 16, 2022
123c4a5
Remove unused function in camera
MrStevns Apr 16, 2022
c7dd16f
Cleanup more unused logic
MrStevns Apr 16, 2022
a0856c5
Add missing midpoint
MrStevns Apr 17, 2022
9659220
Add Camera layer tests
MrStevns Apr 17, 2022
06d8e6f
Add camera translation test
MrStevns Apr 17, 2022
1dd6235
Remove unused variable
MrStevns Apr 17, 2022
6767a39
Implement discrete rotation for camera
MrStevns Apr 19, 2022
6b97dd0
Fix transform bug when rotating exactly 180 deg
MrStevns Apr 19, 2022
b5dbaa2
Remove redundant code
MrStevns Apr 19, 2022
dccabd2
Fix scaling and rotation shouldn't re-center midpoint
MrStevns Apr 21, 2022
d53d25c
Implement path control point move state
MrStevns Apr 23, 2022
e72eb7c
Update layercamera tests
MrStevns Apr 23, 2022
f2ee386
Fix rotating transform resets control point
MrStevns Apr 23, 2022
b541380
Fix resetting camera affects the wrong keyframe
MrStevns Apr 23, 2022
bbe42ad
Make sure camera modification is triggered when updating path related…
MrStevns Apr 23, 2022
d436464
Refactor camera methods
MrStevns Apr 23, 2022
2655f24
Try to recover control points when adding and removing frames
MrStevns Apr 24, 2022
b15b8cf
Fix tests
MrStevns Apr 24, 2022
1fb7765
Revert "Try to recover control points when adding and removing frames"
MrStevns May 9, 2022
a9584d5
Only draw overlay handles when you can use them
MrStevns Jun 4, 2022
f176cc6
Merge branch 'master' into camera_transform_camera
J5lx Oct 4, 2022
9b0f1a7
Review tweaks and fixes
J5lx Oct 6, 2022
32db771
Make sure camera paths are only shown when there is at least one fram…
MrStevns Oct 9, 2022
c00971d
Make sure interpolation menu is disabled when clicking on either firs…
MrStevns Oct 9, 2022
04914eb
Fix assertion triggered because wrong tool was used when loading new …
MrStevns Oct 9, 2022
88101ee
Remove old TODO and fix typo
MrStevns Oct 9, 2022
3aad148
Move camera representation logic to camera tool
MrStevns Oct 9, 2022
1f530a2
Fix obsolete logic
MrStevns Oct 9, 2022
2ad82ef
Fix previous camera skin wasn't painted properly
MrStevns Oct 12, 2022
7c6a348
Show hollow camera handles when in between keyframes
MrStevns Oct 12, 2022
4c7aff8
Optimization: don't try to change MoveMode while dragging
MrStevns Oct 12, 2022
106c142
Refactor: Move camera move modes to own enum
MrStevns Oct 12, 2022
9b130c2
Merge branch 'master' into camera_transform_camera
MrStevns Oct 12, 2022
4b02a60
Regression: fix cannot move camera path point
MrStevns Oct 13, 2022
39c1e3a
Replace magic number regarding path point
MrStevns Oct 13, 2022
d63314c
Remove unnecessary code according to review comment
MrStevns Oct 13, 2022
11a1ec8
LayerCamera: Override for updating control point instead of signals
MrStevns Oct 13, 2022
6f330a3
CameraPainter: Only show handles while camera tool is active
MrStevns Oct 13, 2022
e99b070
Fix paint bug regarding non scaled camera rect
MrStevns Oct 15, 2022
2a10c38
Remove obsolete camera warning
MrStevns Oct 16, 2022
59a4827
Fix camera handles not being shown after playback stops
MrStevns Oct 16, 2022
9c9b44e
Implement ability to see camera outline for the current keyframe
MrStevns Oct 16, 2022
e36801b
Rework camera context menu setup
MrStevns Oct 16, 2022
47815e3
CameraPainter: Implement relative layer & current layer visibility mode
MrStevns Oct 16, 2022
f9a1115
Cleanup misplaced code
MrStevns Oct 17, 2022
eb7c715
Merge remote-tracking branch 'pencil2d/master' into camera_transform_…
MrStevns Oct 17, 2022
198b116
Fix non scaled camera rect transform
MrStevns Oct 17, 2022
0864963
Remove ability to delete first layer (camera layer)
MrStevns Oct 18, 2022
3e39f21
Rotation handle is now shown above the camera
MrStevns Oct 20, 2022
e23c941
Use selection handle color for camera handles
MrStevns Oct 20, 2022
c6898a6
Camera tool: cursor rotates based on camera orientation
MrStevns Oct 21, 2022
5958309
Fix wrong rotation after resetting
MrStevns Oct 21, 2022
6e09978
Only clear cache while tool is not active
MrStevns Oct 21, 2022
7f41be4
Fix camera options not being updated properly
MrStevns Oct 22, 2022
0f41504
Fix camera path moved property was not updated
MrStevns Oct 22, 2022
438f059
Update camera icons
MrStevns Oct 22, 2022
7c9762a
Fix operator not working as intended, prefer use of compare method in…
MrStevns Oct 22, 2022
5b612ee
Prevent keyframe deletion instead of delete and recover...
MrStevns Oct 22, 2022
b03a3a7
Fix various crash situations
MrStevns Oct 22, 2022
361e9f4
Approximate control point on delete keyframe
MrStevns Oct 22, 2022
ba42385
Show path point as hollow when it can't be interacted with
MrStevns Oct 22, 2022
72d2da1
Update canvas after closing camera menu if modified
MrStevns Oct 22, 2022
c8fc4a0
CameraContextMenu: Disable actions when they have no use
MrStevns Oct 22, 2022
6ad2da4
Update tests
MrStevns Oct 22, 2022
131a0e8
Prevent selection of camera point unless shown
MrStevns Oct 22, 2022
3cd3d65
Some cleanup
J5lx Oct 22, 2022
90b0561
Replace png cursors with svg
MrStevns Oct 23, 2022
32a245b
Optimize camera icons for display
MrStevns Oct 23, 2022
8f2832d
Prevent adding of additional data unless modified
MrStevns Oct 23, 2022
8c53440
CameraContextMenu should inherit from QMenu
MrStevns Oct 23, 2022
8dc8c60
Add missing license
MrStevns Oct 23, 2022
20f1174
Update layer menu immediately, not when about to show
MrStevns Oct 23, 2022
a90375e
CameraPainter: Implement colorize for onion skinning
MrStevns Oct 23, 2022
6e9f0e8
Use existing signal
J5lx Oct 23, 2022
fae5952
Make pathCPM attribute implicit
J5lx Oct 23, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions app/app.pro
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,8 @@ HEADERS += \
src/commandlineparser.h \
src/commandlineexporter.h \
src/statusbar.h \
src/elidedlabel.h
src/elidedlabel.h \
src/cameraoptionswidget.h

SOURCES += \
src/importlayersdialog.cpp \
Expand Down Expand Up @@ -158,9 +159,11 @@ SOURCES += \
src/commandlineparser.cpp \
src/commandlineexporter.cpp \
src/statusbar.cpp \
src/elidedlabel.cpp
src/elidedlabel.cpp \
src/cameraoptionswidget.cpp

FORMS += \
ui/cameraoptionswidget.ui \
ui/importimageseqpreview.ui \
ui/importlayersdialog.ui \
ui/importpositiondialog.ui \
Expand Down
4 changes: 4 additions & 0 deletions app/data/app.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,10 @@
<file>icons/overlayAngle.png</file>
<file>icons/controls/soundscrub.png</file>
<file>icons/controls/soundscrub-disabled.png</file>
<file>icons/new/arrow-rotate.png</file>
<file>icons/new/svg/transform-rotate.svg</file>
<file>icons/new/svg/transform-scale.svg</file>
<file>icons/new/svg/transform-translate.svg</file>
</qresource>
<qresource prefix="/app">
<file>icons/onion-blue.png</file>
Expand Down
Binary file added app/data/icons/new/arrow-rotate.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions app/data/icons/new/svg/transform-rotate.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions app/data/icons/new/svg/transform-scale.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions app/data/icons/new/svg/transform-translate.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 4 additions & 7 deletions app/src/actioncommands.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -696,13 +696,6 @@ void ActionCommands::reverseSelectedFrames()
void ActionCommands::removeKey()
{
mEditor->removeKey();

// Add a new keyframe at the beginning if there are none, unless it is a sound layer which can't have empty keyframes but can be an empty layer
Layer* layer = mEditor->layers()->currentLayer();
if (layer->keyFrameCount() == 0 && layer->type() != Layer::SOUND)
{
layer->addNewKeyFrameAt(1);
}
}

void ActionCommands::duplicateLayer()
Expand Down Expand Up @@ -851,6 +844,10 @@ Status ActionCommands::deleteCurrentLayer()
LayerManager* layerMgr = mEditor->layers();
QString strLayerName = layerMgr->currentLayer()->name();

if (!layerMgr->canDeleteLayer(mEditor->currentLayerIndex())) {
return Status::CANCELED;
}

int ret = QMessageBox::warning(mParent,
tr("Delete Layer", "Windows title of Delete current layer pop-up."),
tr("Are you sure you want to delete layer: %1? This cannot be undone.").arg(strLayerName),
Expand Down
96 changes: 96 additions & 0 deletions app/src/cameraoptionswidget.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
/*

Pencil2D - Traditional Animation Software
Copyright (C) 2005-2007 Patrick Corrieri & Pascal Naidon
Copyright (C) 2012-2020 Matthew Chiawen Chang

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; version 2 of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

*/
#include "cameraoptionswidget.h"
#include "ui_cameraoptionswidget.h"

#include "editor.h"
#include "toolmanager.h"
#include "layermanager.h"

#include "cameratool.h"

CameraOptionsWidget::CameraOptionsWidget(Editor* editor, QWidget *parent) :
QWidget(parent),
ui(new Ui::CameraOptionsWidget), mEditor(editor)
{
ui->setupUi(this);

auto toolMan = mEditor->tools();
connect(ui->showCameraPathCheckBox, &QCheckBox::clicked, toolMan, &ToolManager::setShowCameraPath);
connect(ui->pathColorComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), toolMan, &ToolManager::setCameraPathDotColor);
connect(ui->btnResetPath, &QPushButton::clicked, toolMan, &ToolManager::resetCameraPath);

connect(ui->resetAllButton, &QPushButton::clicked, toolMan, [=] {
toolMan->resetCameraTransform(CameraFieldOption::RESET_FIELD);
});
connect(ui->resetTranslationButton, &QPushButton::clicked, toolMan, [=] {
toolMan->resetCameraTransform(CameraFieldOption::RESET_TRANSLATION);
});
connect(ui->resetRotationButton, &QPushButton::clicked, toolMan, [=] {
toolMan->resetCameraTransform(CameraFieldOption::RESET_ROTATION);
});
connect(ui->resetScaleButton, &QPushButton::clicked, toolMan, [=] {
toolMan->resetCameraTransform(CameraFieldOption::RESET_SCALING);
});

connect(toolMan, &ToolManager::toolPropertyChanged, this, &CameraOptionsWidget::onToolPropertyChanged);

connect(mEditor->layers(), &LayerManager::currentLayerChanged, this, &CameraOptionsWidget::updateUI);
connect(mEditor->tools(), &ToolManager::toolChanged, this, &CameraOptionsWidget::updateUI);

mCameraTool = static_cast<CameraTool*>(mEditor->tools()->getTool(CAMERA));
}

CameraOptionsWidget::~CameraOptionsWidget()
{
delete ui;
}

void CameraOptionsWidget::updateUI()
{

Q_ASSERT(mCameraTool->type() == CAMERA);

Properties p = mCameraTool->properties;

setShowCameraPath(p.cameraShowPath);
setPathDotColorType(p.cameraPathDotColorType);
}

void CameraOptionsWidget::onToolPropertyChanged(ToolType, ToolPropertyType ePropertyType)
{
const Properties& p = mCameraTool->properties;

switch (ePropertyType)
{
case CAMERAPATH: { setShowCameraPath(p.cameraShowPath); break; }
default:
break;
}
}

void CameraOptionsWidget::setShowCameraPath(bool showCameraPath)
{
QSignalBlocker b(ui->showCameraPathCheckBox);
ui->showCameraPathCheckBox->setChecked(showCameraPath);
}

void CameraOptionsWidget::setPathDotColorType(DotColorType index)
{
QSignalBlocker b(ui->pathColorComboBox);
ui->pathColorComboBox->setCurrentIndex(static_cast<int>(index));
}
52 changes: 52 additions & 0 deletions app/src/cameraoptionswidget.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/*

Pencil2D - Traditional Animation Software
Copyright (C) 2005-2007 Patrick Corrieri & Pascal Naidon
Copyright (C) 2012-2020 Matthew Chiawen Chang

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; version 2 of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

*/
#ifndef CAMERAOPTIONSWIDGET_H
#define CAMERAOPTIONSWIDGET_H

#include <QWidget>

#include "pencildef.h"
#include "camera.h"

class Editor;
class CameraTool;

namespace Ui {
class CameraOptionsWidget;
}

class CameraOptionsWidget : public QWidget
{
Q_OBJECT
public:
explicit CameraOptionsWidget(Editor* editor, QWidget *parent = nullptr);
~CameraOptionsWidget();

void updateUI();

void setShowCameraPath(bool showCameraPath);
void setPathDotColorType(DotColorType index);
void onToolPropertyChanged(ToolType, ToolPropertyType ePropertyType);

private:
Ui::CameraOptionsWidget *ui;
Editor* mEditor = nullptr;

CameraTool* mCameraTool = nullptr;
};

#endif // CAMERAOPTIONSWIDGET_H
68 changes: 32 additions & 36 deletions app/src/displayoptionwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ GNU General Public License for more details.
#include "viewmanager.h"
#include "overlaymanager.h"
#include "layermanager.h"
#include "scribblearea.h"
#include "editor.h"
#include "util.h"
#include "movemode.h"
Expand Down Expand Up @@ -103,42 +102,30 @@ void DisplayOptionWidget::makeConnections()
connect(ui->overlayPerspective1Button, &QToolButton::clicked, this, &DisplayOptionWidget::toggleOverlayPerspective1);
connect(ui->overlayPerspective2Button, &QToolButton::clicked, this, &DisplayOptionWidget::toggleOverlayPerspective2);
connect(ui->overlayPerspective3Button, &QToolButton::clicked, this, &DisplayOptionWidget::toggleOverlayPerspective3);
connect(ui->thinLinesButton, &QToolButton::clicked, this, &DisplayOptionWidget::toggleThinLines);
connect(ui->outLinesButton, &QToolButton::clicked, this, &DisplayOptionWidget::toggleOutlines);

PreferenceManager* prefs = editor()->preference();
ScribbleArea* pScriArea = editor()->getScribbleArea();

connect(ui->thinLinesButton, &QToolButton::clicked, pScriArea, &ScribbleArea::toggleThinLines);
connect(ui->outLinesButton, &QToolButton::clicked, pScriArea, &ScribbleArea::toggleOutlines);
connect(prefs, &PreferenceManager::optionChanged, this, &DisplayOptionWidget::updateUI);

ViewManager* view = editor()->view();
connect(view, &ViewManager::viewFlipped, this, &DisplayOptionWidget::updateUI);
connect(editor()->preference(), &PreferenceManager::optionChanged, this, &DisplayOptionWidget::updateUI);
connect(editor()->view(), &ViewManager::viewFlipped, this, &DisplayOptionWidget::updateUI);
}

void DisplayOptionWidget::prepareOverlayManager()
{
editor()->overlays()->initPerspOverlay();
editor()->getScribbleArea()->prepOverlays();

if (ui->overlayPerspective1Button->isChecked())
{
editor()->overlays()->setOverlayPerspective1(true);
editor()->overlays()->updatePerspOverlay(1);
editor()->overlays()->setMoveMode(MoveMode::PERSP_SINGLE);
editor()->overlays()->setOnePointPerspectiveEnabled(true);
editor()->overlays()->updatePerspective(1);
}
if (ui->overlayPerspective2Button->isChecked())
{
editor()->overlays()->setOverlayPerspective2(true);
editor()->overlays()->updatePerspOverlay(2);
editor()->overlays()->setMoveMode(MoveMode::PERSP_LEFT);
editor()->overlays()->setTwoPointPerspectiveEnabled(true);
editor()->overlays()->updatePerspective(2);
}
if (ui->overlayPerspective3Button->isChecked())
{
editor()->overlays()->setOverlayPerspective3(true);
editor()->overlays()->updatePerspOverlay(3);
editor()->overlays()->setMoveMode(MoveMode::PERSP_LEFT);
editor()->overlays()->setThreePointPerspectiveEnabled(true);
editor()->overlays()->updatePerspective(3);
}
editor()->overlays()->updatePerspOverlayActiveList();
}

void DisplayOptionWidget::clearPreviousAngle(int angle)
Expand All @@ -161,8 +148,7 @@ void DisplayOptionWidget::changeAngle(int angle)
{
clearPreviousAngle(mOverlayAngle);
mOverlayAngle = angle;
QSettings settings(PENCIL2D, PENCIL2D);
settings.setValue("OverlayAngle", angle);
editor()->preference()->set(SETTING::OVERLAY_ANGLE, angle);
emit editor()->view()->viewChanged();
}

Expand Down Expand Up @@ -218,6 +204,16 @@ int DisplayOptionWidget::getMinHeightForWidth(int width)
return ui->innerWidget->layout()->heightForWidth(width);
}

void DisplayOptionWidget::toggleThinLines(bool isOn)
{
editor()->preference()->set(SETTING::INVISIBLE_LINES, isOn);
}

void DisplayOptionWidget::toggleOutlines(bool isOn)
{
editor()->preference()->set(SETTING::OUTLINES, isOn);
}

void DisplayOptionWidget::toggleMirror(bool isOn)
{
editor()->view()->flipHorizontal(isOn);
Expand All @@ -230,49 +226,49 @@ void DisplayOptionWidget::toggleMirrorV(bool isOn)

void DisplayOptionWidget::toggleOverlayCenter(bool isOn)
{
editor()->overlays()->setOverlayCenter(isOn);
editor()->overlays()->setCenterEnabled(isOn);
editor()->preference()->set(SETTING::OVERLAY_CENTER, isOn);
emit editor()->view()->viewChanged();
}

void DisplayOptionWidget::toggleOverlayThirds(bool isOn)
{
editor()->overlays()->setOverlayThirds(isOn);
editor()->overlays()->setThirdsEnabled(isOn);
editor()->preference()->set(SETTING::OVERLAY_THIRDS, isOn);
emit editor()->view()->viewChanged();
}

void DisplayOptionWidget::toggleOverlayGoldenRatio(bool isOn)
{
editor()->overlays()->setOverlayGoldenRatio(isOn);
editor()->overlays()->setGoldenRatioEnabled(isOn);
editor()->preference()->set(SETTING::OVERLAY_GOLDEN, isOn);
emit editor()->view()->viewChanged();
}

void DisplayOptionWidget::toggleOverlaySafeAreas(bool isOn)
{
editor()->overlays()->setOverlaySafeAreas(isOn);
editor()->overlays()->setSafeAreasEnabled(isOn);
editor()->preference()->set(SETTING::OVERLAY_SAFE, isOn);
emit editor()->view()->viewChanged();
}

void DisplayOptionWidget::toggleOverlayPerspective1(bool isOn)
{
editor()->overlays()->setOverlayPerspective1(isOn);
editor()->overlays()->setOnePointPerspectiveEnabled(isOn);
editor()->preference()->set(SETTING::OVERLAY_PERSPECTIVE1, isOn);
emit editor()->view()->viewChanged();
}

void DisplayOptionWidget::toggleOverlayPerspective2(bool isOn)
{
editor()->overlays()->setOverlayPerspective2(isOn);
editor()->overlays()->setTwoPointPerspectiveEnabled(isOn);
editor()->preference()->set(SETTING::OVERLAY_PERSPECTIVE2, isOn);
emit editor()->view()->viewChanged();
}

void DisplayOptionWidget::toggleOverlayPerspective3(bool isOn)
{
editor()->overlays()->setOverlayPerspective3(isOn);
editor()->overlays()->setThreePointPerspectiveEnabled(isOn);
editor()->preference()->set(SETTING::OVERLAY_PERSPECTIVE3, isOn);
emit editor()->view()->viewChanged();
}
Expand Down Expand Up @@ -312,10 +308,10 @@ void DisplayOptionWidget::anglePreferences()
default: ui->action15_degrees->setChecked(true);
}

connect( ui->action2_degrees, &QAction::triggered, this, &DisplayOptionWidget::angle2degrees);
connect( ui->action3_degrees, &QAction::triggered, this, &DisplayOptionWidget::angle3degrees);
connect( ui->action5_degrees, &QAction::triggered, this, &DisplayOptionWidget::angle5degrees);
connect( ui->action7_5_degrees, &QAction::triggered, this, &DisplayOptionWidget::angle7_5degrees);
connect(ui->action2_degrees, &QAction::triggered, this, &DisplayOptionWidget::angle2degrees);
connect(ui->action3_degrees, &QAction::triggered, this, &DisplayOptionWidget::angle3degrees);
connect(ui->action5_degrees, &QAction::triggered, this, &DisplayOptionWidget::angle5degrees);
connect(ui->action7_5_degrees, &QAction::triggered, this, &DisplayOptionWidget::angle7_5degrees);
connect(ui->action10_degrees, &QAction::triggered, this, &DisplayOptionWidget::angle10degrees);
connect(ui->action15_degrees, &QAction::triggered, this, &DisplayOptionWidget::angle15degrees);
connect(ui->action20_degrees, &QAction::triggered, this, &DisplayOptionWidget::angle20degrees);
Expand Down
2 changes: 2 additions & 0 deletions app/src/displayoptionwidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ public slots:
int getMinHeightForWidth(int width) override;

private slots:
void toggleThinLines(bool);
void toggleOutlines(bool);
void toggleMirror(bool);
void toggleMirrorV(bool);
void toggleOverlayCenter(bool isOn);
Expand Down
Loading