This commit is contained in:
Gabriel Gazzán 2016-11-09 19:42:13 -03:00
commit 558b63ef19
147 changed files with 5665 additions and 833 deletions

View file

@ -1,42 +1,43 @@
# Setting up the development environment for GNU/Linux and Unix
# Setting up the development environment for GNU/Linux
## Required software
You will need to install some dependencies before you can build. Depending on your distribution you will be able to install the packages directly with the command lines below or will have to manually install:
Building OpenToonz from source requires the following dependencies:
- Git
- GCC
- CMake
- confirmed to work with 3.4.1.
- Qt5
- http://download.qt.io/official_releases/qt/5.5/5.5.1/
- Boost
- http://www.boost.org/users/history/version_1_55_0.html
- GCC or Clang
- CMake (3.4.1 or newer).
- Qt5 (5.5 or newer)
- Boost (1.55 or newer)
- SDL2
- LibPNG
- SuperLU
- Lzo2
- FreeType
### Installing required packages on Debian / Ubuntu
### Installing Dependencies on Debian / Ubuntu
```
$ sudo apt-get install build-essential git cmake pkg-config libboost-all-dev qt5-default qtbase5-dev libqt5svg5-dev qtscript5-dev qttools5-dev-tools libqt5opengl5-dev qtmultimedia5-dev libsuperlu-dev liblz4-dev libusb-1.0-0-dev liblzo2-dev libpng-dev libjpeg-dev libglew-dev freeglut3-dev libsdl2-dev libfreetype6-dev
$ sudo apt-get install build-essential git cmake pkg-config libboost-all-dev qt5-default qtbase5-dev libqt5svg5-dev qtscript5-dev qttools5-dev qttools5-dev-tools libqt5opengl5-dev qtmultimedia5-dev libsuperlu-dev liblz4-dev libusb-1.0-0-dev liblzo2-dev libpng-dev libjpeg-dev libglew-dev freeglut3-dev libsdl2-dev libfreetype6-dev
```
Notes:
* It's possible we also need libgsl2 (or maybe libopenbias-dev)
* It's possible we also need `libgsl2` (or maybe `libopenblas-dev`)
### Installing required packages on RedHat / Mageia
### Installing Dependencies on RedHat / CentOS
TODO
```
$ rpm ...
```
### Installing required packages on Fedora
### Installing Dependencies on Fedora
(it may include some useless packages)
```
dnf install gcc gcc-c++ automake git cmake boost boost-devel SuperLU SuperLU-devel lz4-devel libusb-devel lzo-devel libjpeg-turbo-devel GLEW libGLEW freeglut-devel freeglut SDL2 SDL2-devel freetype-devel libpng-devel qt5-base qt5-qtbase-devel qt5-qtsvg qt5-qtsvg-devel qt5-qtscript qt5-qtscript-devel qt5-qttools qt5-qttools-devel blas blas-devel
$ dnf install gcc gcc-c++ automake git cmake boost boost-devel SuperLU SuperLU-devel lz4-devel lzma libusb-devel lzo-devel libjpeg-turbo-devel libGLEW glew-devel freeglut-devel freeglut SDL2 SDL2-devel freetype-devel libpng-devel qt5-qtbase-devel qt5-qtsvg qt5-qtsvg-devel qt5-qtscript qt5-qtscript-devel qt5-qttools qt5-qttools-devel qt5-qtmultimedia-devel blas blas-devel
```
### Installing required packages on ArchLinux
### Installing Dependencies on ArchLinux
```
$ sudo pacman -S base-devel git cmake boost boost-libs qt5-base qt5-svg qt5-script qt5-tools qt5-multimedia lz4 libusb lzo libjpeg-turbo glew freeglut sdl2 freetype2
@ -48,38 +49,40 @@ $ yaourt -S superlu
```
Notes:
* ArchLinux had BLAS splitted in blas and cblas
* ArchLinux has `blas` split into `blas` and `cblas`.
### Installing required packages on openSUSE
### Installing Dependencies on openSUSE
```
zypper in boost-devel cmake freeglut-devel freetype2-devel gcc-c++ glew-devel libQt5OpenGL-devel libSDL2-devel libjpeg-devel liblz4-devel libpng16-compat-devel libqt5-linguist-devel libqt5-qtbase-devel libqt5-qtmultimedia-devel libqt5-qtscript-devel libqt5-qtsvg-devel libtiff-devel libusb-devel lzo-devel openblas-devel pkgconfig sed superlu-devel zlib-devel
$ zypper in boost-devel cmake freeglut-devel freetype2-devel gcc-c++ glew-devel libQt5OpenGL-devel libSDL2-devel libjpeg-devel liblz4-devel libpng16-compat-devel libqt5-linguist-devel libqt5-qtbase-devel libqt5-qtmultimedia-devel libqt5-qtscript-devel libqt5-qtsvg-devel libtiff-devel libusb-devel lzo-devel openblas-devel pkgconfig sed superlu-devel zlib-devel
```
## Build instructions
### cloning the git tree
### Cloning the GIT Tree
```
$ git clone https://github.com/opentoonz/opentoonz
```
### Copying the stuff directory
### Copying the 'stuff' Directory
TODO: some parts should really be installed in $prefix/ instead... and some other in various cache or user-local places.
cf. https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
Until then we just follow the Win32/OSX layout.
It is supposedly optional but some files are actually required to run the executable properly.
The `~/.config/OpenToonz/` directory contains your settings, work and other files.
The .config/OpenToonz/ directory in your home folder will contain your settings, work and other files. We need to create it from the command-line:
Initialize this path with the folling commands:
```
$ mkdir -p $HOME/.config/OpenToonz
$ cp -r opentoonz/stuff $HOME/.config/OpenToonz/
```
### Creating a default ini file for stuff folders
*Currently this is required to run OpenToonz.*
### Creating SystemVar.ini
TODO: fix the code to discover it automatically
@ -98,20 +101,21 @@ TOONZROOT="$HOME/.config/OpenToonz/stuff"
TOONZSTUDIOPALETTE="$HOME/.config/OpenToonz/stuff/projects/studiopalette"
EOF
```
Note the generated file must not actually contain "$HOME", this shell command repaces it with /home/youraccount in the generated file.
Note the generated file must not actually contain `$HOME`, this expands to an absolute path in the generated file.
### Building the tiff library from thirdparty
### Building LibTIFF
TODO: make sure we can use the system libtiff instead and remove this section.
Features from the modified libtiff and needed currently, so this isn't a simple switch.
```
$ cd opentoonz/thirdparty/tiff-4.0.3
$ CFLAGS="-fPIC" ./configure && make
$ ./configure --with-pic --disable-jbig
$ make
$ cd -
```
### Compiling the actual application
### Building OpenToonz
```
$ cd ../../toonz
@ -123,18 +127,18 @@ $ make
The build takes a lot of time, be patient.
### Debugging the build
### Troubleshooting Build Errors
If something doesn't compile or link, please run `make` this way to help spot the problem:
```
LANG=C make VERBOSE=1
$ LANG=C make VERBOSE=1
```
#### Debug build
#### Debug Build
If you need to debug the application, you should be able to use `cmake -DCMAKE_BUILD_TYPE=Debug`.
### Running the application
### Running OpenToonz
You can now run the application:
@ -143,7 +147,7 @@ $ cd bin
$ LD_LIBRARY_PATH=./lib/opentoonz:$LD_LIBRARY_PATH ./bin/OpenToonz_1.0
```
### Performing a system installation
### Performing a System Installation
The steps above show how to run OpenToonz from the build directory,
however you may wish to install OpenToonz onto your system.
@ -158,3 +162,15 @@ Then you can launch OpenToonz by running `/opt/opentoonz/bin/opentoonz`.
You can change the installation path by modifying the `CMAKE_INSTALL_PREFIX` CMake variable.
----
# Linux Package Definitions
It may be helpful to use existing packages as a reference when creating a package for your own distribution.
- ArchLinux (AUR):
https://aur.archlinux.org/packages/opentoonz-git/
- App-Image (Portable):
https://github.com/morevnaproject/morevna-builds

View file

@ -1,4 +1,4 @@
// out: gray_048.qss
/* LESS Definitions */
/*Image URL*/
@ -748,7 +748,7 @@ DvDirTreeView {
/*---------------------------------------------------------------------------*/
#CleanupSettingsFrame,
#LoadLevelFrame,
#SolidLineFrame{
#SolidLineFrame {
border: 1px solid @m_baseTxtColor;
}
@ -821,30 +821,29 @@ ParamsPage {
}
}
/* Customize QScrollBar vertical*/
#XsheetScrollBar {
.baseBG(light, 10%);
QScrollBar {
border: 1px solid black;
&:vertical {
width: 18px;
.set_margin( 0px, 20px );
width: 16px;
.set_margin( 0px, 16px );
}
&:horizontal {
height: 18px;
.set_margin( 20px, 0px );
height: 16px;
.set_margin( 16px, 0px );
}
&::handle {
border-width: 4;
border-width: 3;
image-position: center center;
&:vertical {
border-image: url("@{image_url}/sb_g_vhandle.png")4;
border-image: url("@{image_url}/sb_g_vhandle.png")3;
image: url("@{image_url}/sb_g_vline.png");
min-height: 40px;
}
&:horizontal {
border-image: url("@{image_url}/sb_g_hhandle.png")4;
border-image: url("@{image_url}/sb_g_hhandle.png")3;
image: url("@{image_url}/sb_g_hline.png");
min-width: 40px;
}
@ -854,7 +853,7 @@ ParamsPage {
subcontrol-origin: margin;
&:vertical {
image: url("@{image_url}/sb_g_downarrow.png");
height: 20px;
height: 16px;
subcontrol-position: bottom;
&:pressed {
image: url("@{image_url}/sb_g_downarrow_pressed.png");
@ -862,7 +861,7 @@ ParamsPage {
}
&:horizontal {
image: url("@{image_url}/sb_g_rarrow.png");
width: 20px;
width: 16px;
subcontrol-position: right;
&:pressed{
image: url("@{image_url}/sb_g_rarrow_pressed.png");
@ -874,7 +873,7 @@ ParamsPage {
subcontrol-origin: margin;
&:vertical {
image: url("@{image_url}/sb_g_uparrow.png");
height: 20px;
height: 16px;
subcontrol-position: top;
&:pressed {
image: url("@{image_url}/sb_g_uparrow_pressed.png");
@ -882,7 +881,7 @@ ParamsPage {
}
&:horizontal {
image: url("@{image_url}/sb_g_larrow.png");
width: 20px;
width: 16px;
subcontrol-position: left;
&:pressed{
image: url("@{image_url}/sb_g_larrow_pressed.png");
@ -890,8 +889,8 @@ ParamsPage {
}
}
&::add-page {
background: none;
&::add-page, &::sub-page {
.baseBG(light, 10%);
}
}
@ -1365,4 +1364,15 @@ QDialog #dialogButtonFrame {
#LargeSizedText {
font-size: 17px;
}
#GearButton {
qproperty-icon: url("@{image_url}/gear.png");
}
#StartupLabel {
padding: 3px;
&:hover {
.baseBG(light, 10%);
}
}

View file

@ -841,79 +841,79 @@ ParamsPage {
background-color: #000080;
}
/* Customize QScrollBar vertical*/
#XsheetScrollBar {
background-color: #4a4a4a;
QScrollBar {
border: 1px solid black;
/* buttons */
}
#XsheetScrollBar:vertical {
width: 18px;
QScrollBar:vertical {
width: 16px;
margin-left: 0px;
margin-right: 0px;
margin-top: 20px;
margin-bottom: 20px;
margin-top: 16px;
margin-bottom: 16px;
}
#XsheetScrollBar:horizontal {
height: 18px;
margin-left: 20px;
margin-right: 20px;
QScrollBar:horizontal {
height: 16px;
margin-left: 16px;
margin-right: 16px;
margin-top: 0px;
margin-bottom: 0px;
}
#XsheetScrollBar::handle {
border-width: 4;
QScrollBar::handle {
border-width: 3;
image-position: center center;
}
#XsheetScrollBar::handle:vertical {
border-image: url("../gray_072/imgs/sb_g_vhandle.png") 4;
QScrollBar::handle:vertical {
border-image: url("../gray_072/imgs/sb_g_vhandle.png") 3;
image: url("../gray_072/imgs/sb_g_vline.png");
min-height: 40px;
}
#XsheetScrollBar::handle:horizontal {
border-image: url("../gray_072/imgs/sb_g_hhandle.png") 4;
QScrollBar::handle:horizontal {
border-image: url("../gray_072/imgs/sb_g_hhandle.png") 3;
image: url("../gray_072/imgs/sb_g_hline.png");
min-width: 40px;
}
#XsheetScrollBar::add-line {
QScrollBar::add-line {
subcontrol-origin: margin;
}
#XsheetScrollBar::add-line:vertical {
QScrollBar::add-line:vertical {
image: url("../gray_072/imgs/sb_g_downarrow.png");
height: 20px;
height: 16px;
subcontrol-position: bottom;
}
#XsheetScrollBar::add-line:vertical:pressed {
QScrollBar::add-line:vertical:pressed {
image: url("../gray_072/imgs/sb_g_downarrow_pressed.png");
}
#XsheetScrollBar::add-line:horizontal {
QScrollBar::add-line:horizontal {
image: url("../gray_072/imgs/sb_g_rarrow.png");
width: 20px;
width: 16px;
subcontrol-position: right;
}
#XsheetScrollBar::add-line:horizontal:pressed {
QScrollBar::add-line:horizontal:pressed {
image: url("../gray_072/imgs/sb_g_rarrow_pressed.png");
}
#XsheetScrollBar::sub-line {
QScrollBar::sub-line {
subcontrol-origin: margin;
}
#XsheetScrollBar::sub-line:vertical {
QScrollBar::sub-line:vertical {
image: url("../gray_072/imgs/sb_g_uparrow.png");
height: 20px;
height: 16px;
subcontrol-position: top;
}
#XsheetScrollBar::sub-line:vertical:pressed {
QScrollBar::sub-line:vertical:pressed {
image: url("../gray_072/imgs/sb_g_uparrow_pressed.png");
}
#XsheetScrollBar::sub-line:horizontal {
QScrollBar::sub-line:horizontal {
image: url("../gray_072/imgs/sb_g_larrow.png");
width: 20px;
width: 16px;
subcontrol-position: left;
}
#XsheetScrollBar::sub-line:horizontal:pressed {
QScrollBar::sub-line:horizontal:pressed {
image: url("../gray_072/imgs/sb_g_larrow_pressed.png");
}
#XsheetScrollBar::add-page {
background: none;
QScrollBar::add-page,
QScrollBar::sub-page {
background-color: #4a4a4a;
}
#noteTextEdit {
color: black;
@ -1369,5 +1369,14 @@ QDialog #dialogButtonFrame {
#LargeSizedText {
font-size: 17px;
}
#GearButton {
qproperty-icon: url("../gray_072/imgs/gear.png");
}
#StartupLabel {
padding: 3px;
}
#StartupLabel:hover {
background-color: #4a4a4a;
}
//# sourceMappingURL=gray_048.qss.map

View file

@ -841,79 +841,79 @@ ParamsPage {
background-color: #000080;
}
/* Customize QScrollBar vertical*/
#XsheetScrollBar {
background-color: #4a4a4a;
QScrollBar {
border: 1px solid black;
/* buttons */
}
#XsheetScrollBar:vertical {
width: 18px;
QScrollBar:vertical {
width: 16px;
margin-left: 0px;
margin-right: 0px;
margin-top: 20px;
margin-bottom: 20px;
margin-top: 16px;
margin-bottom: 16px;
}
#XsheetScrollBar:horizontal {
height: 18px;
margin-left: 20px;
margin-right: 20px;
QScrollBar:horizontal {
height: 16px;
margin-left: 16px;
margin-right: 16px;
margin-top: 0px;
margin-bottom: 0px;
}
#XsheetScrollBar::handle {
border-width: 4;
QScrollBar::handle {
border-width: 3;
image-position: center center;
}
#XsheetScrollBar::handle:vertical {
border-image: url("../gray_072/imgs/sb_g_vhandle.png") 4;
QScrollBar::handle:vertical {
border-image: url("../gray_072/imgs/sb_g_vhandle.png") 3;
image: url("../gray_072/imgs/sb_g_vline.png");
min-height: 40px;
}
#XsheetScrollBar::handle:horizontal {
border-image: url("../gray_072/imgs/sb_g_hhandle.png") 4;
QScrollBar::handle:horizontal {
border-image: url("../gray_072/imgs/sb_g_hhandle.png") 3;
image: url("../gray_072/imgs/sb_g_hline.png");
min-width: 40px;
}
#XsheetScrollBar::add-line {
QScrollBar::add-line {
subcontrol-origin: margin;
}
#XsheetScrollBar::add-line:vertical {
QScrollBar::add-line:vertical {
image: url("../gray_072/imgs/sb_g_downarrow.png");
height: 20px;
height: 16px;
subcontrol-position: bottom;
}
#XsheetScrollBar::add-line:vertical:pressed {
QScrollBar::add-line:vertical:pressed {
image: url("../gray_072/imgs/sb_g_downarrow_pressed.png");
}
#XsheetScrollBar::add-line:horizontal {
QScrollBar::add-line:horizontal {
image: url("../gray_072/imgs/sb_g_rarrow.png");
width: 20px;
width: 16px;
subcontrol-position: right;
}
#XsheetScrollBar::add-line:horizontal:pressed {
QScrollBar::add-line:horizontal:pressed {
image: url("../gray_072/imgs/sb_g_rarrow_pressed.png");
}
#XsheetScrollBar::sub-line {
QScrollBar::sub-line {
subcontrol-origin: margin;
}
#XsheetScrollBar::sub-line:vertical {
QScrollBar::sub-line:vertical {
image: url("../gray_072/imgs/sb_g_uparrow.png");
height: 20px;
height: 16px;
subcontrol-position: top;
}
#XsheetScrollBar::sub-line:vertical:pressed {
QScrollBar::sub-line:vertical:pressed {
image: url("../gray_072/imgs/sb_g_uparrow_pressed.png");
}
#XsheetScrollBar::sub-line:horizontal {
QScrollBar::sub-line:horizontal {
image: url("../gray_072/imgs/sb_g_larrow.png");
width: 20px;
width: 16px;
subcontrol-position: left;
}
#XsheetScrollBar::sub-line:horizontal:pressed {
QScrollBar::sub-line:horizontal:pressed {
image: url("../gray_072/imgs/sb_g_larrow_pressed.png");
}
#XsheetScrollBar::add-page {
background: none;
QScrollBar::add-page,
QScrollBar::sub-page {
background-color: #4a4a4a;
}
#noteTextEdit {
color: black;
@ -1369,5 +1369,14 @@ QDialog #dialogButtonFrame {
#LargeSizedText {
font-size: 17px;
}
#GearButton {
qproperty-icon: url("../gray_072/imgs/gear.png");
}
#StartupLabel {
padding: 3px;
}
#StartupLabel:hover {
background-color: #4a4a4a;
}
//# sourceMappingURL=gray_048_mac.qss.map

View file

@ -747,7 +747,7 @@ DvDirTreeView {
/*---------------------------------------------------------------------------*/
#CleanupSettingsFrame,
#LoadLevelFrame,
#SolidLineFrame{
#SolidLineFrame {
border: 1px solid @m_baseTxtColor;
}
@ -821,30 +821,29 @@ ParamsPage {
}
}
/* Customize QScrollBar vertical*/
#XsheetScrollBar {
.baseBG(light, 10%);
QScrollBar {
border: 1px solid black;
&:vertical {
width: 18px;
.set_margin( 0px, 20px );
width: 16px;
.set_margin( 0px, 16px );
}
&:horizontal {
height: 18px;
.set_margin( 20px, 0px );
height: 16px;
.set_margin( 16px, 0px );
}
&::handle {
border-width: 4;
border-width: 3;
image-position: center center;
&:vertical {
border-image: url("@{image_url}/sb_g_vhandle.png")4;
border-image: url("@{image_url}/sb_g_vhandle.png")3;
image: url("@{image_url}/sb_g_vline.png");
min-height: 40px;
}
&:horizontal {
border-image: url("@{image_url}/sb_g_hhandle.png")4;
border-image: url("@{image_url}/sb_g_hhandle.png")3;
image: url("@{image_url}/sb_g_hline.png");
min-width: 40px;
}
@ -854,7 +853,7 @@ ParamsPage {
subcontrol-origin: margin;
&:vertical {
image: url("@{image_url}/sb_g_downarrow.png");
height: 20px;
height: 16px;
subcontrol-position: bottom;
&:pressed {
image: url("@{image_url}/sb_g_downarrow_pressed.png");
@ -862,7 +861,7 @@ ParamsPage {
}
&:horizontal {
image: url("@{image_url}/sb_g_rarrow.png");
width: 20px;
width: 16px;
subcontrol-position: right;
&:pressed{
image: url("@{image_url}/sb_g_rarrow_pressed.png");
@ -874,7 +873,7 @@ ParamsPage {
subcontrol-origin: margin;
&:vertical {
image: url("@{image_url}/sb_g_uparrow.png");
height: 20px;
height: 16px;
subcontrol-position: top;
&:pressed {
image: url("@{image_url}/sb_g_uparrow_pressed.png");
@ -882,7 +881,7 @@ ParamsPage {
}
&:horizontal {
image: url("@{image_url}/sb_g_larrow.png");
width: 20px;
width: 16px;
subcontrol-position: left;
&:pressed{
image: url("@{image_url}/sb_g_larrow_pressed.png");
@ -890,8 +889,8 @@ ParamsPage {
}
}
&::add-page {
background: none;
&::add-page, &::sub-page {
.baseBG(light, 10%);
}
}
@ -1365,4 +1364,15 @@ QDialog #dialogButtonFrame {
#LargeSizedText {
font-size: 17px;
}
#GearButton {
qproperty-icon: url("@{image_url}/gear.png");
}
#StartupLabel {
padding: 3px;
&:hover {
.baseBG(light, 10%);
}
}

View file

@ -841,79 +841,79 @@ ParamsPage {
background-color: #000080;
}
/* Customize QScrollBar vertical*/
#XsheetScrollBar {
background-color: #626262;
QScrollBar {
border: 1px solid black;
/* buttons */
}
#XsheetScrollBar:vertical {
width: 18px;
QScrollBar:vertical {
width: 16px;
margin-left: 0px;
margin-right: 0px;
margin-top: 20px;
margin-bottom: 20px;
margin-top: 16px;
margin-bottom: 16px;
}
#XsheetScrollBar:horizontal {
height: 18px;
margin-left: 20px;
margin-right: 20px;
QScrollBar:horizontal {
height: 16px;
margin-left: 16px;
margin-right: 16px;
margin-top: 0px;
margin-bottom: 0px;
}
#XsheetScrollBar::handle {
border-width: 4;
QScrollBar::handle {
border-width: 3;
image-position: center center;
}
#XsheetScrollBar::handle:vertical {
border-image: url("imgs/sb_g_vhandle.png") 4;
QScrollBar::handle:vertical {
border-image: url("imgs/sb_g_vhandle.png") 3;
image: url("imgs/sb_g_vline.png");
min-height: 40px;
}
#XsheetScrollBar::handle:horizontal {
border-image: url("imgs/sb_g_hhandle.png") 4;
QScrollBar::handle:horizontal {
border-image: url("imgs/sb_g_hhandle.png") 3;
image: url("imgs/sb_g_hline.png");
min-width: 40px;
}
#XsheetScrollBar::add-line {
QScrollBar::add-line {
subcontrol-origin: margin;
}
#XsheetScrollBar::add-line:vertical {
QScrollBar::add-line:vertical {
image: url("imgs/sb_g_downarrow.png");
height: 20px;
height: 16px;
subcontrol-position: bottom;
}
#XsheetScrollBar::add-line:vertical:pressed {
QScrollBar::add-line:vertical:pressed {
image: url("imgs/sb_g_downarrow_pressed.png");
}
#XsheetScrollBar::add-line:horizontal {
QScrollBar::add-line:horizontal {
image: url("imgs/sb_g_rarrow.png");
width: 20px;
width: 16px;
subcontrol-position: right;
}
#XsheetScrollBar::add-line:horizontal:pressed {
QScrollBar::add-line:horizontal:pressed {
image: url("imgs/sb_g_rarrow_pressed.png");
}
#XsheetScrollBar::sub-line {
QScrollBar::sub-line {
subcontrol-origin: margin;
}
#XsheetScrollBar::sub-line:vertical {
QScrollBar::sub-line:vertical {
image: url("imgs/sb_g_uparrow.png");
height: 20px;
height: 16px;
subcontrol-position: top;
}
#XsheetScrollBar::sub-line:vertical:pressed {
QScrollBar::sub-line:vertical:pressed {
image: url("imgs/sb_g_uparrow_pressed.png");
}
#XsheetScrollBar::sub-line:horizontal {
QScrollBar::sub-line:horizontal {
image: url("imgs/sb_g_larrow.png");
width: 20px;
width: 16px;
subcontrol-position: left;
}
#XsheetScrollBar::sub-line:horizontal:pressed {
QScrollBar::sub-line:horizontal:pressed {
image: url("imgs/sb_g_larrow_pressed.png");
}
#XsheetScrollBar::add-page {
background: none;
QScrollBar::add-page,
QScrollBar::sub-page {
background-color: #626262;
}
#noteTextEdit {
color: black;
@ -1369,5 +1369,14 @@ QDialog #dialogButtonFrame {
#LargeSizedText {
font-size: 17px;
}
#GearButton {
qproperty-icon: url("imgs/gear.png");
}
#StartupLabel {
padding: 3px;
}
#StartupLabel:hover {
background-color: #626262;
}
//# sourceMappingURL=gray_072.qss.map

View file

@ -841,79 +841,79 @@ ParamsPage {
background-color: #000080;
}
/* Customize QScrollBar vertical*/
#XsheetScrollBar {
background-color: #626262;
QScrollBar {
border: 1px solid black;
/* buttons */
}
#XsheetScrollBar:vertical {
width: 18px;
QScrollBar:vertical {
width: 16px;
margin-left: 0px;
margin-right: 0px;
margin-top: 20px;
margin-bottom: 20px;
margin-top: 16px;
margin-bottom: 16px;
}
#XsheetScrollBar:horizontal {
height: 18px;
margin-left: 20px;
margin-right: 20px;
QScrollBar:horizontal {
height: 16px;
margin-left: 16px;
margin-right: 16px;
margin-top: 0px;
margin-bottom: 0px;
}
#XsheetScrollBar::handle {
border-width: 4;
QScrollBar::handle {
border-width: 3;
image-position: center center;
}
#XsheetScrollBar::handle:vertical {
border-image: url("imgs/sb_g_vhandle.png") 4;
QScrollBar::handle:vertical {
border-image: url("imgs/sb_g_vhandle.png") 3;
image: url("imgs/sb_g_vline.png");
min-height: 40px;
}
#XsheetScrollBar::handle:horizontal {
border-image: url("imgs/sb_g_hhandle.png") 4;
QScrollBar::handle:horizontal {
border-image: url("imgs/sb_g_hhandle.png") 3;
image: url("imgs/sb_g_hline.png");
min-width: 40px;
}
#XsheetScrollBar::add-line {
QScrollBar::add-line {
subcontrol-origin: margin;
}
#XsheetScrollBar::add-line:vertical {
QScrollBar::add-line:vertical {
image: url("imgs/sb_g_downarrow.png");
height: 20px;
height: 16px;
subcontrol-position: bottom;
}
#XsheetScrollBar::add-line:vertical:pressed {
QScrollBar::add-line:vertical:pressed {
image: url("imgs/sb_g_downarrow_pressed.png");
}
#XsheetScrollBar::add-line:horizontal {
QScrollBar::add-line:horizontal {
image: url("imgs/sb_g_rarrow.png");
width: 20px;
width: 16px;
subcontrol-position: right;
}
#XsheetScrollBar::add-line:horizontal:pressed {
QScrollBar::add-line:horizontal:pressed {
image: url("imgs/sb_g_rarrow_pressed.png");
}
#XsheetScrollBar::sub-line {
QScrollBar::sub-line {
subcontrol-origin: margin;
}
#XsheetScrollBar::sub-line:vertical {
QScrollBar::sub-line:vertical {
image: url("imgs/sb_g_uparrow.png");
height: 20px;
height: 16px;
subcontrol-position: top;
}
#XsheetScrollBar::sub-line:vertical:pressed {
QScrollBar::sub-line:vertical:pressed {
image: url("imgs/sb_g_uparrow_pressed.png");
}
#XsheetScrollBar::sub-line:horizontal {
QScrollBar::sub-line:horizontal {
image: url("imgs/sb_g_larrow.png");
width: 20px;
width: 16px;
subcontrol-position: left;
}
#XsheetScrollBar::sub-line:horizontal:pressed {
QScrollBar::sub-line:horizontal:pressed {
image: url("imgs/sb_g_larrow_pressed.png");
}
#XsheetScrollBar::add-page {
background: none;
QScrollBar::add-page,
QScrollBar::sub-page {
background-color: #626262;
}
#noteTextEdit {
color: black;
@ -1369,5 +1369,14 @@ QDialog #dialogButtonFrame {
#LargeSizedText {
font-size: 17px;
}
#GearButton {
qproperty-icon: url("imgs/gear.png");
}
#StartupLabel {
padding: 3px;
}
#StartupLabel:hover {
background-color: #626262;
}
//# sourceMappingURL=gray_072_mac.qss.map

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 546 B

After

Width:  |  Height:  |  Size: 545 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 551 B

After

Width:  |  Height:  |  Size: 543 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 554 B

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 555 B

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 545 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 543 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 549 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 534 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 554 B

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 552 B

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 562 B

After

Width:  |  Height:  |  Size: 549 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 549 B

After

Width:  |  Height:  |  Size: 534 B

View file

@ -1,3 +1,4 @@
// out: gray_128.qss
/* LESS Definitions */
/*Image URL*/
@ -595,7 +596,7 @@ DvDirTreeView {
/*---------------------------------------------------------------------------*/
#CleanupSettingsFrame,
#LoadLevelFrame,
#SolidLineFrame{
#SolidLineFrame {
border: 1px solid rgb(20,20,20);
}
@ -661,30 +662,29 @@ ParamsPage {
}
}
/* Customize QScrollBar vertical*/
#XsheetScrollBar {
background-color: rgb(160,160,160);
QScrollBar {
border: 1px solid black;
&:vertical {
width: 18px;
.set_margin( 0px, 20px );
width: 16px;
.set_margin( 0px, 16px );
}
&:horizontal {
height: 18px;
.set_margin( 20px, 0px );
height: 16px;
.set_margin( 16px, 0px );
}
&::handle {
border-width: 4;
border-width: 3;
image-position: center center;
&:vertical {
border-image: url("@{image_url}/sb_g_vhandle.png")4;
border-image: url("@{image_url}/sb_g_vhandle.png")3;
image: url("@{image_url}/sb_g_vline.png");
min-height: 40px;
}
&:horizontal {
border-image: url("@{image_url}/sb_g_hhandle.png")4;
border-image: url("@{image_url}/sb_g_hhandle.png")3;
image: url("@{image_url}/sb_g_hline.png");
min-width: 40px;
}
@ -694,7 +694,7 @@ ParamsPage {
subcontrol-origin: margin;
&:vertical {
image: url("@{image_url}/sb_g_downarrow.png");
height: 20px;
height: 16px;
subcontrol-position: bottom;
&:pressed {
image: url("@{image_url}/sb_g_downarrow_pressed.png");
@ -702,7 +702,7 @@ ParamsPage {
}
&:horizontal {
image: url("@{image_url}/sb_g_rarrow.png");
width: 20px;
width: 16px;
subcontrol-position: right;
&:pressed{
image: url("@{image_url}/sb_g_rarrow_pressed.png");
@ -714,7 +714,7 @@ ParamsPage {
subcontrol-origin: margin;
&:vertical {
image: url("@{image_url}/sb_g_uparrow.png");
height: 20px;
height: 16px;
subcontrol-position: top;
&:pressed {
image: url("@{image_url}/sb_g_uparrow_pressed.png");
@ -722,7 +722,7 @@ ParamsPage {
}
&:horizontal {
image: url("@{image_url}/sb_g_larrow.png");
width: 20px;
width: 16px;
subcontrol-position: left;
&:pressed{
image: url("@{image_url}/sb_g_larrow_pressed.png");
@ -730,8 +730,8 @@ ParamsPage {
}
}
&::add-page {
background: none;
&::add-page, &::sub-page {
background-color: rgb(160,160,160);
}
}
@ -1190,4 +1190,15 @@ QDialog #dialogButtonFrame {
#LargeSizedText {
font-size: 17px;
}
#GearButton {
qproperty-icon: url("@{image_url}/gear.png");
}
#StartupLabel {
padding: 3px;
&:hover {
.baseBG(light, 10%);
}
}

View file

@ -591,79 +591,79 @@ ParamsPage {
background-color: #000080;
}
/* Customize QScrollBar vertical*/
#XsheetScrollBar {
background-color: #a0a0a0;
QScrollBar {
border: 1px solid black;
/* buttons */
}
#XsheetScrollBar:vertical {
width: 18px;
QScrollBar:vertical {
width: 16px;
margin-left: 0px;
margin-right: 0px;
margin-top: 20px;
margin-bottom: 20px;
margin-top: 16px;
margin-bottom: 16px;
}
#XsheetScrollBar:horizontal {
height: 18px;
margin-left: 20px;
margin-right: 20px;
QScrollBar:horizontal {
height: 16px;
margin-left: 16px;
margin-right: 16px;
margin-top: 0px;
margin-bottom: 0px;
}
#XsheetScrollBar::handle {
border-width: 4;
QScrollBar::handle {
border-width: 3;
image-position: center center;
}
#XsheetScrollBar::handle:vertical {
border-image: url("imgs/sb_g_vhandle.png") 4;
QScrollBar::handle:vertical {
border-image: url("imgs/sb_g_vhandle.png") 3;
image: url("imgs/sb_g_vline.png");
min-height: 40px;
}
#XsheetScrollBar::handle:horizontal {
border-image: url("imgs/sb_g_hhandle.png") 4;
QScrollBar::handle:horizontal {
border-image: url("imgs/sb_g_hhandle.png") 3;
image: url("imgs/sb_g_hline.png");
min-width: 40px;
}
#XsheetScrollBar::add-line {
QScrollBar::add-line {
subcontrol-origin: margin;
}
#XsheetScrollBar::add-line:vertical {
QScrollBar::add-line:vertical {
image: url("imgs/sb_g_downarrow.png");
height: 20px;
height: 16px;
subcontrol-position: bottom;
}
#XsheetScrollBar::add-line:vertical:pressed {
QScrollBar::add-line:vertical:pressed {
image: url("imgs/sb_g_downarrow_pressed.png");
}
#XsheetScrollBar::add-line:horizontal {
QScrollBar::add-line:horizontal {
image: url("imgs/sb_g_rarrow.png");
width: 20px;
width: 16px;
subcontrol-position: right;
}
#XsheetScrollBar::add-line:horizontal:pressed {
QScrollBar::add-line:horizontal:pressed {
image: url("imgs/sb_g_rarrow_pressed.png");
}
#XsheetScrollBar::sub-line {
QScrollBar::sub-line {
subcontrol-origin: margin;
}
#XsheetScrollBar::sub-line:vertical {
QScrollBar::sub-line:vertical {
image: url("imgs/sb_g_uparrow.png");
height: 20px;
height: 16px;
subcontrol-position: top;
}
#XsheetScrollBar::sub-line:vertical:pressed {
QScrollBar::sub-line:vertical:pressed {
image: url("imgs/sb_g_uparrow_pressed.png");
}
#XsheetScrollBar::sub-line:horizontal {
QScrollBar::sub-line:horizontal {
image: url("imgs/sb_g_larrow.png");
width: 20px;
width: 16px;
subcontrol-position: left;
}
#XsheetScrollBar::sub-line:horizontal:pressed {
QScrollBar::sub-line:horizontal:pressed {
image: url("imgs/sb_g_larrow_pressed.png");
}
#XsheetScrollBar::add-page {
background: none;
QScrollBar::add-page,
QScrollBar::sub-page {
background-color: #a0a0a0;
}
XsheetViewer {
qproperty-TextColor: black;
@ -1108,5 +1108,14 @@ QDialog #dialogButtonFrame {
#LargeSizedText {
font-size: 17px;
}
#GearButton {
qproperty-icon: url("imgs/gear.png");
}
#StartupLabel {
padding: 3px;
}
#StartupLabel:hover {
background-color: #9a9a9a;
}
//# sourceMappingURL=gray_128.qss.map

View file

@ -591,79 +591,79 @@ ParamsPage {
background-color: #000080;
}
/* Customize QScrollBar vertical*/
#XsheetScrollBar {
background-color: #a0a0a0;
QScrollBar {
border: 1px solid black;
/* buttons */
}
#XsheetScrollBar:vertical {
width: 18px;
QScrollBar:vertical {
width: 16px;
margin-left: 0px;
margin-right: 0px;
margin-top: 20px;
margin-bottom: 20px;
margin-top: 16px;
margin-bottom: 16px;
}
#XsheetScrollBar:horizontal {
height: 18px;
margin-left: 20px;
margin-right: 20px;
QScrollBar:horizontal {
height: 16px;
margin-left: 16px;
margin-right: 16px;
margin-top: 0px;
margin-bottom: 0px;
}
#XsheetScrollBar::handle {
border-width: 4;
QScrollBar::handle {
border-width: 3;
image-position: center center;
}
#XsheetScrollBar::handle:vertical {
border-image: url("imgs/sb_g_vhandle.png") 4;
QScrollBar::handle:vertical {
border-image: url("imgs/sb_g_vhandle.png") 3;
image: url("imgs/sb_g_vline.png");
min-height: 40px;
}
#XsheetScrollBar::handle:horizontal {
border-image: url("imgs/sb_g_hhandle.png") 4;
QScrollBar::handle:horizontal {
border-image: url("imgs/sb_g_hhandle.png") 3;
image: url("imgs/sb_g_hline.png");
min-width: 40px;
}
#XsheetScrollBar::add-line {
QScrollBar::add-line {
subcontrol-origin: margin;
}
#XsheetScrollBar::add-line:vertical {
QScrollBar::add-line:vertical {
image: url("imgs/sb_g_downarrow.png");
height: 20px;
height: 16px;
subcontrol-position: bottom;
}
#XsheetScrollBar::add-line:vertical:pressed {
QScrollBar::add-line:vertical:pressed {
image: url("imgs/sb_g_downarrow_pressed.png");
}
#XsheetScrollBar::add-line:horizontal {
QScrollBar::add-line:horizontal {
image: url("imgs/sb_g_rarrow.png");
width: 20px;
width: 16px;
subcontrol-position: right;
}
#XsheetScrollBar::add-line:horizontal:pressed {
QScrollBar::add-line:horizontal:pressed {
image: url("imgs/sb_g_rarrow_pressed.png");
}
#XsheetScrollBar::sub-line {
QScrollBar::sub-line {
subcontrol-origin: margin;
}
#XsheetScrollBar::sub-line:vertical {
QScrollBar::sub-line:vertical {
image: url("imgs/sb_g_uparrow.png");
height: 20px;
height: 16px;
subcontrol-position: top;
}
#XsheetScrollBar::sub-line:vertical:pressed {
QScrollBar::sub-line:vertical:pressed {
image: url("imgs/sb_g_uparrow_pressed.png");
}
#XsheetScrollBar::sub-line:horizontal {
QScrollBar::sub-line:horizontal {
image: url("imgs/sb_g_larrow.png");
width: 20px;
width: 16px;
subcontrol-position: left;
}
#XsheetScrollBar::sub-line:horizontal:pressed {
QScrollBar::sub-line:horizontal:pressed {
image: url("imgs/sb_g_larrow_pressed.png");
}
#XsheetScrollBar::add-page {
background: none;
QScrollBar::add-page,
QScrollBar::sub-page {
background-color: #a0a0a0;
}
XsheetViewer {
qproperty-TextColor: black;
@ -1108,5 +1108,14 @@ QDialog #dialogButtonFrame {
#LargeSizedText {
font-size: 17px;
}
#GearButton {
qproperty-icon: url("imgs/gear.png");
}
#StartupLabel {
padding: 3px;
}
#StartupLabel:hover {
background-color: #9a9a9a;
}
//# sourceMappingURL=gray_128_mac.qss.map

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 628 B

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 631 B

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 630 B

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 631 B

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 639 B

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 641 B

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 648 B

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 633 B

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -2,9 +2,9 @@
<menu title="File">
<command>MI_NewScene</command>
<command>MI_LoadScene</command>
<command>MI_SaveAll</command>
<command>MI_SaveScene</command>
<command>MI_SaveSceneAs</command>
<command>MI_SaveAll</command>
<command>MI_OpenRecentScene</command>
<command>MI_RevertScene</command>
<separator/>
@ -13,6 +13,7 @@
<separator/>
<command>MI_NewLevel</command>
<command>MI_LoadLevel</command>
<command>MI_SaveAllLevels</command>
<command>MI_SaveLevel</command>
<command>MI_SaveLevelAs</command>
<command>MI_ExportLevel</command>
@ -33,6 +34,7 @@
<separator/>
<command>MI_OutputSettings</command>
<command>MI_Render</command>
<command>MI_FastRender</command>
<separator/>
<command>MI_PrintXsheet</command>
<command>MI_Print</command>
@ -233,6 +235,7 @@
<command>MI_ResetRoomLayout</command>
</menu>
<menu title="Help">
<command>MI_StartupPopup</command>
<command>MI_About</command>
</menu>
</menubar>

View file

@ -13,6 +13,7 @@
<separator/>
<command>MI_NewLevel</command>
<command>MI_LoadLevel</command>
<command>MI_SaveAllLevels</command>
<command>MI_SaveLevel</command>
<command>MI_SaveLevelAs</command>
<command>MI_ExportLevel</command>

View file

@ -0,0 +1,366 @@
[shortcuts]
MI_Clear=Del
MI_OnionSkin=/
A_DecreaseBrushHardness=
A_DecreaseMaxBrushThickness=U
A_DecreaseMinBrushThickness=H
A_FxSchematicToggle=
A_IncreaseBrushHardness=
A_IncreaseMaxBrushThickness=I
A_IncreaseMinBrushThickness=J
A_ToolOption_AutoGroup=
A_ToolOption_AutoSelect%3AColumn=
A_ToolOption_AutoSelect%3ANone=
A_ToolOption_AutoSelect%3APegbar=
A_ToolOption_AutoSelectDrawing=
A_ToolOption_Autofill=
A_ToolOption_BreakSharpAngles=
A_ToolOption_BrushPreset=
A_ToolOption_EditToolActiveAxis=
A_ToolOption_EditToolActiveAxis%3ACenter=
A_ToolOption_EditToolActiveAxis%3APosition=
A_ToolOption_EditToolActiveAxis%3ARotation=
A_ToolOption_EditToolActiveAxis%3AScale=
A_ToolOption_EditToolActiveAxis%3AShear=
A_ToolOption_FrameRange=F6
A_ToolOption_GeometricEdge=
A_ToolOption_GeometricShape=
A_ToolOption_GlobalKey=
A_ToolOption_IK=
A_ToolOption_Invert=
A_ToolOption_JoinVectors=
A_ToolOption_Manual=
A_ToolOption_Meshify=
A_ToolOption_Mode=
A_ToolOption_Mode%3AAreas=
A_ToolOption_Mode%3ALines=
A_ToolOption_Mode%3ALines%20%26%20Areas=
A_ToolOption_OnionSkin=
A_ToolOption_Orientation=
A_ToolOption_PencilMode=
A_ToolOption_PickScreen=
A_ToolOption_PreserveThickness=
A_ToolOption_PressureSensitivity=Shift+P
A_ToolOption_SegmentInk=F8
A_ToolOption_Selective=F7
A_ToolOption_ShowOnlyActiveSkeleton=
A_ToolOption_SkeletonMode%3AAnimate=
A_ToolOption_SkeletonMode%3ABuild%20Skeleton=
A_ToolOption_SkeletonMode%3AInverse%20Kinematics=
A_ToolOption_Smooth=
A_ToolOption_Snap=
A_ToolOption_Type=
A_ToolOption_Type%3AFreehand=
A_ToolOption_Type%3ANormal=
A_ToolOption_Type%3APolyline=
A_ToolOption_Type%3ARectangular=F5
A_ToolOption_TypeFont=
A_ToolOption_TypeSize=
A_ToolOption_TypeStyle=
MI_ACheck=
MI_About=
MI_ActivateAllColumns=
MI_ActivateSelectedColumns=
MI_ActivateThisColumnOnly=
MI_AddFrames=
MI_AddToBatchCleanupList=
MI_AddToBatchRenderList=
MI_AdjustLevels=
MI_AdjustThickness=
MI_Antialias=
MI_ApplyMatchLines=
MI_AutoFillToggle=Shift+A
MI_Autocenter=
MI_Autorenumber=
MI_BCheck=
MI_Binarize=
MI_BlendColors=
MI_BlueChannel=
MI_BlueChannelGreyscale=
MI_BrightnessAndContrast=
MI_BringForward=]
MI_BringToFront=Ctrl+]
MI_CameraSettings=
MI_CameraStage=
MI_CameraTest=
MI_CanvasSize=
MI_Cleanup=
MI_CleanupPreview=
MI_CleanupSettings=
MI_ClearRecentImage=
MI_ClearRecentLevel=
MI_ClearRecentScene=
MI_CloneChild=
MI_CloneLevel=
MI_ClonePreview=
MI_CloseChild=
MI_Collapse=
MI_CollectAssets=
MI_CompareToSnapshot=
MI_ConvertFileWithInput=
MI_ConvertFiles=
MI_ConvertToVectors=
MI_Copy=Ctrl+C
MI_Cut=Ctrl+X
MI_DeactivateAllColumns=
MI_DeactivateSelectedColumns=
MI_DeactivateUpperColumns=
MI_DecreaseStep=";"
MI_DefineScanner=
MI_DeleteInk=
MI_DeleteMatchLines=
MI_DisableAllColumns=
MI_DisableSelectedColumns=
MI_DockingCheck=
MI_DrawingSubBackward=Q
MI_DrawingSubForward=W
MI_DrawingSubGroupBackward=Alt+Q
MI_DrawingSubGroupForward=Alt+W
MI_Dup=
MI_Duplicate=D
MI_DuplicateFile=
MI_Each2=
MI_Each3=
MI_Each4=
MI_EditLevel=
MI_EditShift=
MI_EnableAllColumns=
MI_EnableSelectedColumns=
MI_EnableThisColumnOnly=
MI_EnterGroup=
MI_EraseUnusedStyles=
MI_ExitGroup=
MI_ExplodeChild=
MI_ExportLevel=
MI_ExportScenes=
MI_ExposeResource=
MI_FieldGuide=Shift+G
MI_FileInfo=
MI_FillAreas=
MI_FillLines=
MI_FirstFrame="Alt+,"
MI_FoldColumns=
MI_FrezzePreview=
MI_FullScreenWindow=Ctrl+`
MI_FxParamEditor=Ctrl+K
MI_GCheck=
MI_GetColorFromStudioPalette=
MI_GreenChannel=
MI_GreenChannelGreyscale=
MI_Group=Ctrl+G
MI_Histogram=
MI_ICheck=
MI_IOnly=
MI_ImportMagpieFile=
MI_ImportScenes=
MI_IncreaseStep="'"
MI_Increment=
MI_Ink1Check=
MI_Insert=Ins
MI_InsertFx=Ctrl+F
MI_InsertGlobalKeyframe=
MI_InsertSceneFrame=
MI_InvertKeyframeSelection=
MI_InvertSelection=
MI_LastFrame=Alt+.
MI_LevelSettings=
MI_LinesFade=
MI_Link=
MI_LoadColorModel=
MI_LoadFolder=
MI_LoadLevel=
MI_LoadScene=Ctrl+L
MI_LoadSubSceneFile=
MI_LockAllColumns=Ctrl+Alt+Shift+L
MI_LockSelectedColumns=Ctrl+Shift+L
MI_LockThisColumnOnly=Shift+L
MI_Loop=L
MI_MatteChannel=
MI_MaximizePanel=`
MI_MergeCmapped=
MI_MergeColumns=
MI_MergeFrames=
MI_NewLevel=Alt+N
MI_NewOutputFx=
MI_NewProject=
MI_NewScene=Ctrl+N
MI_NextDrawing=.
MI_NextFrame=Shift+.
MI_NextStep=
MI_NoShift=
MI_OpacityCheck=Alt+1
MI_OpenBatchServers=
MI_OpenChild=
MI_OpenCleanupSettings=
MI_OpenColorModel=
MI_OpenComboViewer=
MI_OpenFileBrowser=
MI_OpenFileBrowser2=
MI_OpenFileViewer=
MI_OpenFilmStrip=
MI_OpenFunctionEditor=
MI_OpenHistoryPanel=Ctrl+H
MI_OpenLevelView=
MI_OpenPalette=
MI_OpenPltGizmo=
MI_OpenRecentLevel=
MI_OpenRecentScene=
MI_OpenSchematic=
MI_OpenScriptConsole=
MI_OpenStudioPalette=
MI_OpenStyleControl=
MI_OpenTMessage=
MI_OpenTasks=
MI_OpenToolOptionBar=
MI_OpenToolbar=
MI_OpenXshView=
MI_OutputSettings=Ctrl+O
MI_OverwritePalette=
MI_PCheck=
MI_Paste=Ctrl+V
MI_PasteColors=
MI_PasteInto=
MI_PasteNames=
MI_PasteValues=
MI_Pause=
MI_PencilTest=
MI_PickStyleAreas=
MI_PickStyleLines=
MI_Play=P
MI_Preferences=Ctrl+U
MI_PrevDrawing=","
MI_PrevFrame="Shift+,"
MI_PrevStep=
MI_Preview=Ctrl+R
MI_PreviewFx=
MI_PreviewSettings=
MI_Print=Ctrl+P
MI_PrintXsheet=
MI_ProjectSettings=
MI_Quit=Ctrl+Q
MI_Random=
MI_RasterizePli=
MI_RedChannel=
MI_RedChannelGreyscale=
MI_Redo=Ctrl+Y
MI_Reframe1=
MI_Reframe2=
MI_Reframe3=
MI_Reframe4=
MI_RefreshTree=
MI_RegenerateFramePr=
MI_RegeneratePreview=
MI_ReloadStyle=
MI_RemoveEndpoints=
MI_RemoveGlobalKeyframe=
MI_RemoveLevel=
MI_RemoveSceneFrame=
MI_RemoveUnused=
MI_Render=Ctrl+Shift+R
MI_Renumber=
MI_ReplaceLevel=
MI_ReplaceParentDirectory=
MI_Resequence=
MI_ResetInterpolation=
MI_ResetRoomLayout=
MI_ResetScanCropbox=
MI_ResetShift=
MI_ResetStep=
MI_Reverse=
MI_RevertScene=
MI_RevertToCleanedUp=
MI_RevertToLastSaved=
MI_Rolldown=
MI_Rollup=
MI_RunScript=
MI_SafeArea=
MI_SaveAll=Ctrl+S
MI_SaveDefaultSettings=
MI_SaveLevel=
MI_SaveLevelAs=
MI_SavePaletteAs=
MI_SavePreset=
MI_SavePreviewedFrames=
MI_SaveScene=Ctrl+Shift+S
MI_SaveSceneAs=
MI_SaveSubxsheetAs=
MI_Scan=
MI_ScanSettings=
MI_SceneSettings=
MI_SelectAll=Ctrl+A
MI_SelectAllKeyframes=
MI_SelectAllKeyframesNotAfter=
MI_SelectAllKeyframesNotBefore=
MI_SelectColumnKeyframes=
MI_SelectFollowingKeysInColumn=
MI_SelectFollowingKeysInRow=
MI_SelectPreviousKeysInColumn=
MI_SelectPreviousKeysInRow=
MI_SelectRowKeyframes=
MI_SendBack=Ctrl+[
MI_SendBackward=[
MI_SetAcceleration=
MI_SetConstantSpeed=
MI_SetDeceleration=
MI_SetKeyframes=Z
MI_SetScanCropbox=
MI_ShiftTrace=
MI_ShortcutPopup=
MI_ShowFolderContents=
MI_Step2=
MI_Step3=
MI_Step4=
MI_SwapEnabledColumns=
MI_Swing=
MI_TCheck=
MI_TimeStretch=
MI_ToggleColumnLocks=
MI_ToggleColumnsActivation=
MI_ToggleEditInPlace=
MI_Tracking=
MI_Undo=Ctrl+Z
MI_Ungroup=Ctrl+Shift+G
MI_UnlockAllColumns=Ctrl+Alt+Shift+U
MI_UnlockSelectedColumns=Ctrl+Shift+U
MI_ViewBBox=
MI_ViewCamera=
MI_ViewColorcard=
MI_ViewFile=
MI_ViewGuide=
MI_ViewRuler=
MI_ViewTable=
MI_ZeroThick=Shift+/
T_ActualPixelSize=N
T_Bender=
T_Brush=B
T_ControlPointEditor=C
T_Cutter=
T_Edit=E
T_Eraser=A
T_Fill=F
T_Finger=
T_Geometric=G
T_Hand=Space
T_Hook=O
T_Iron=
T_Magnet=
T_PaintBrush=
T_Pinch=M
T_Plastic=X
T_Pump=
T_RGBPicker=R
T_Rotate=Ctrl+Space
T_Ruler=
T_Selection=S
T_ShowHideFullScreen=Alt+F
T_Skeleton=V
T_StylePicker=K
T_Tape=T
T_Tracker=
T_Type=Y
T_Zoom=Shift+Space
T_ZoomFit=Alt+9
T_ZoomReset=Alt+0
T_Zoomin=+
T_Zoomout=-
MI_LoadRecentImage=

View file

@ -0,0 +1,366 @@
[shortcuts]
MI_LoadRecentImage=
A_ToolOption_FrameRange=
A_ToolOption_SegmentInk=
A_ToolOption_Selective=
A_ToolOption_Type%3ARectangular=
MI_BringForward=Ctrl+Up
MI_BringToFront=Ctrl+Shift+Up
MI_Clear=Delete
MI_Copy=Ctrl+C
MI_Cut=Ctrl+X
MI_DrawingSubBackward=[
MI_DrawingSubForward=]
MI_DrawingSubGroupBackward=Ctrl+[
MI_DrawingSubGroupForward=Ctrl+]
MI_Duplicate=
MI_FullScreenWindow=Ctrl+F
MI_FxParamEditor=
MI_Group=Ctrl+G
MI_Insert=Ins
MI_InsertFx=
MI_LoadScene=Ctrl+O
MI_MaximizePanel=
MI_NewScene=Ctrl+N
MI_NextDrawing=G
MI_NextFrame=.
MI_OpacityCheck=
MI_Paste=Ctrl+V
MI_PrevDrawing=F
MI_PrevFrame=","
MI_Preview=Alt+P
MI_Quit=Ctrl+Q
MI_Redo=Ctrl+Y
MI_SaveScene=Ctrl+Shift+S
MI_SaveSceneAs=Ctrl+Alt+Shift+S
MI_SelectAll=Shift+A
MI_SendBack=Ctrl+Shift+Down
MI_SendBackward=Ctrl+Down
MI_Undo=Ctrl+Z
MI_ZeroThick=D
T_ActualPixelSize=
T_Brush=Alt+B
T_ControlPointEditor=Alt+A
T_Edit=Alt+Q
T_Eraser=Alt+E
T_Fill=Alt+K
T_Geometric=Atl+R
T_Hand=
T_Pinch=
T_Rotate=
T_Selection=Alt+V
T_StylePicker=Alt+I
T_Tape=Alt+C
T_Type=
T_Zoom=Alt+Z
T_ZoomReset=Shift+Z
T_Zoomin=Ctrl+=
T_Zoomout=Ctrl+-
A_DecreaseBrushHardness=
A_DecreaseMaxBrushThickness=
A_DecreaseMinBrushThickness=
A_FxSchematicToggle=
A_IncreaseBrushHardness=
A_IncreaseMaxBrushThickness=
A_IncreaseMinBrushThickness=
A_ToolOption_AutoGroup=
A_ToolOption_AutoSelect%3AColumn=
A_ToolOption_AutoSelect%3ANone=
A_ToolOption_AutoSelect%3APegbar=
A_ToolOption_AutoSelectDrawing=
A_ToolOption_Autofill=
A_ToolOption_BreakSharpAngles=
A_ToolOption_BrushPreset=
A_ToolOption_EditToolActiveAxis=
A_ToolOption_EditToolActiveAxis%3ACenter=
A_ToolOption_EditToolActiveAxis%3APosition=
A_ToolOption_EditToolActiveAxis%3ARotation=
A_ToolOption_EditToolActiveAxis%3AScale=
A_ToolOption_EditToolActiveAxis%3AShear=
A_ToolOption_GeometricEdge=
A_ToolOption_GeometricShape=
A_ToolOption_GlobalKey=
A_ToolOption_IK=Alt+8
A_ToolOption_Invert=
A_ToolOption_JoinVectors=
A_ToolOption_Manual=
A_ToolOption_Meshify=
A_ToolOption_Mode=
A_ToolOption_Mode%3AAreas=
A_ToolOption_Mode%3ALines=
A_ToolOption_Mode%3ALines%20%26%20Areas=
A_ToolOption_OnionSkin=
A_ToolOption_Orientation=
A_ToolOption_PencilMode=
A_ToolOption_PickScreen=
A_ToolOption_PreserveThickness=
A_ToolOption_PressureSensitivity=
A_ToolOption_ShowOnlyActiveSkeleton=
A_ToolOption_SkeletonMode%3AAnimate=
A_ToolOption_SkeletonMode%3ABuild%20Skeleton=
A_ToolOption_SkeletonMode%3AInverse%20Kinematics=
A_ToolOption_Smooth=
A_ToolOption_Snap=
A_ToolOption_Type=
A_ToolOption_Type%3AFreehand=
A_ToolOption_Type%3ANormal=
A_ToolOption_Type%3APolyline=
A_ToolOption_TypeFont=
A_ToolOption_TypeSize=
A_ToolOption_TypeStyle=
MI_ACheck=
MI_About=
MI_ActivateAllColumns=
MI_ActivateSelectedColumns=
MI_ActivateThisColumnOnly=
MI_AddFrames=Ctrl+H
MI_AddToBatchCleanupList=
MI_AddToBatchRenderList=
MI_AdjustLevels=
MI_AdjustThickness=
MI_Antialias=
MI_ApplyMatchLines=
MI_AutoFillToggle=
MI_Autocenter=
MI_Autorenumber=
MI_BCheck=
MI_Binarize=
MI_BlendColors=
MI_BlueChannel=
MI_BlueChannelGreyscale=
MI_BrightnessAndContrast=
MI_CameraSettings=
MI_CameraStage=
MI_CameraTest=
MI_CanvasSize=
MI_Cleanup=
MI_CleanupPreview=
MI_CleanupSettings=
MI_ClearRecentImage=
MI_ClearRecentLevel=
MI_ClearRecentScene=
MI_CloneChild=
MI_CloneLevel=
MI_ClonePreview=
MI_CloseChild=
MI_Collapse=
MI_CollectAssets=
MI_CompareToSnapshot=
MI_ConvertFileWithInput=
MI_ConvertFiles=
MI_ConvertToVectors=
MI_DeactivateAllColumns=
MI_DeactivateSelectedColumns=Alt+H
MI_DeactivateUpperColumns=
MI_DecreaseStep=
MI_DefineScanner=
MI_DeleteInk=
MI_DeleteMatchLines=
MI_DisableAllColumns=
MI_DisableSelectedColumns=
MI_DockingCheck=
MI_Dup=
MI_DuplicateFile=
MI_Each2=
MI_Each3=
MI_Each4=
MI_EditLevel=
MI_EditShift=
MI_EnableAllColumns=Alt+Shift+H
MI_EnableSelectedColumns=
MI_EnableThisColumnOnly=
MI_EnterGroup=Ctrl+Return
MI_EraseUnusedStyles=
MI_ExitGroup=Backspace
MI_ExplodeChild=Ctrl+B
MI_ExportLevel=
MI_ExportScenes=
MI_ExposeResource=
MI_FieldGuide="Ctrl+'"
MI_FileInfo=
MI_FillAreas=
MI_FillLines=
MI_FirstFrame=Home
MI_FoldColumns=
MI_FrezzePreview=
MI_GCheck=
MI_GetColorFromStudioPalette=
MI_GreenChannel=
MI_GreenChannelGreyscale=
MI_Histogram=
MI_ICheck=
MI_IOnly=
MI_ImportMagpieFile=
MI_ImportScenes=
MI_IncreaseStep="+"
MI_Increment=
MI_Ink1Check=
MI_InsertGlobalKeyframe=
MI_InsertSceneFrame=
MI_InvertKeyframeSelection=
MI_InvertSelection=
MI_LastFrame=End
MI_LevelSettings=
MI_LinesFade=
MI_Link=
MI_LoadColorModel=
MI_LoadFolder=
MI_LoadLevel=
MI_LoadSubSceneFile=
MI_LockAllColumns=
MI_LockSelectedColumns=
MI_LockThisColumnOnly=
MI_Loop=
MI_MatteChannel=
MI_MergeCmapped=
MI_MergeColumns=
MI_MergeFrames=
MI_NewLevel=
MI_NewOutputFx=
MI_NewProject=
MI_NextStep=
MI_NoShift=
MI_OnionSkin=Ctrl+Alt+O
MI_OpenBatchServers=
MI_OpenChild=
MI_OpenCleanupSettings=
MI_OpenColorModel=
MI_OpenComboViewer=
MI_OpenFileBrowser=
MI_OpenFileBrowser2=
MI_OpenFileViewer=
MI_OpenFilmStrip=
MI_OpenFunctionEditor=Alt+F
MI_OpenHistoryPanel=
MI_OpenLevelView=
MI_OpenPalette=
MI_OpenPltGizmo=
MI_OpenRecentScene=
MI_OpenSchematic=
MI_OpenScriptConsole=
MI_OpenStudioPalette=
MI_OpenStyleControl=
MI_OpenTMessage=
MI_OpenTasks=
MI_OpenToolOptionBar=
MI_OpenToolbar=
MI_OpenXshView=
MI_OutputSettings=
MI_OverwritePalette=
MI_PCheck=
MI_PasteColors=
MI_PasteInto=
MI_PasteNames=
MI_PasteValues=
MI_Pause=
MI_PencilTest=
MI_PickStyleAreas=
MI_PickStyleLines=
MI_Play=Return
MI_Preferences=Ctrl+U
MI_PrevStep=
MI_PreviewFx=
MI_PreviewSettings=
MI_Print=
MI_PrintXsheet=
MI_ProjectSettings=
MI_Random=
MI_RasterizePli=
MI_RedChannel=
MI_RedChannelGreyscale=
MI_Reframe1=
MI_Reframe2=
MI_Reframe3=
MI_Reframe4=
MI_RefreshTree=
MI_RegenerateFramePr=
MI_RegeneratePreview=
MI_ReloadStyle=
MI_RemoveEndpoints=
MI_RemoveGlobalKeyframe=
MI_RemoveLevel=
MI_RemoveSceneFrame=
MI_RemoveUnused=
MI_Render=Ctrl+Alt+Shift+S
MI_Renumber=
MI_ReplaceLevel=
MI_ReplaceParentDirectory=
MI_Resequence=
MI_ResetInterpolation=
MI_ResetRoomLayout=
MI_ResetScanCropbox=
MI_ResetShift=
MI_ResetStep=
MI_Reverse=
MI_RevertScene=
MI_RevertToCleanedUp=
MI_RevertToLastSaved=
MI_Rolldown=
MI_Rollup=
MI_RunScript=
MI_SafeArea=
MI_SaveAll=Ctrl+S
MI_SaveDefaultSettings=
MI_SaveLevel=
MI_SaveLevelAs=
MI_SavePaletteAs=
MI_SavePreset=
MI_SavePreviewedFrames=
MI_SaveSubxsheetAs=
MI_Scan=
MI_ScanSettings=
MI_SceneSettings=Ctrl+F3
MI_SelectAllKeyframes=
MI_SelectAllKeyframesNotAfter=
MI_SelectAllKeyframesNotBefore=
MI_SelectColumnKeyframes=
MI_SelectFollowingKeysInColumn=
MI_SelectFollowingKeysInRow=
MI_SelectPreviousKeysInColumn=
MI_SelectPreviousKeysInRow=
MI_SelectRowKeyframes=
MI_SetAcceleration=
MI_SetConstantSpeed=
MI_SetDeceleration=
MI_SetKeyframes=Ctrl+F6
MI_SetScanCropbox=
MI_ShiftTrace=
MI_ShortcutPopup=
MI_ShowFolderContents=
MI_Step2=
MI_Step3=
MI_Step4=
MI_SwapEnabledColumns=
MI_Swing=
MI_TCheck=
MI_TimeStretch=
MI_ToggleColumnLocks=
MI_ToggleColumnsActivation=
MI_ToggleEditInPlace=
MI_Tracking=
MI_Ungroup=Ctrl+Shift+G
MI_UnlockAllColumns=Ctrl+Alt+Shift+L
MI_UnlockSelectedColumns=Ctrl+Shift+K
MI_ViewBBox=
MI_ViewCamera=
MI_ViewColorcard=
MI_ViewFile=
MI_ViewGuide=
MI_ViewRuler=Ctrl+Alt+Shift+R
MI_ViewTable=
T_Bender=
T_Cutter=Alt+T
T_Finger=
T_Hook=
T_Iron=
T_Magnet=
T_PaintBrush=
T_Plastic=
T_Pump=
T_RGBPicker=
T_Ruler=
T_ShowHideFullScreen=F4
T_Skeleton=
T_Tracker=
T_ZoomFit=
MI_OpenRecentLevel=

View file

@ -0,0 +1,366 @@
[shortcuts]
MI_LoadRecentImage=
A_ToolOption_FrameRange=
A_ToolOption_SegmentInk=
A_ToolOption_Selective=
A_ToolOption_Type%3ARectangular=
MI_BringForward=Ctrl+PgUp
MI_BringToFront=Ctrl+Shift+PgUp
MI_Clear=Delete
MI_Copy=Ctrl+C
MI_Cut=Ctrl+X
MI_DrawingSubBackward=[
MI_DrawingSubForward=]
MI_DrawingSubGroupBackward=Ctrl+[
MI_DrawingSubGroupForward=Ctrl+]
MI_Duplicate=
MI_FullScreenWindow=Ctrl+F
MI_FxParamEditor=
MI_Group=Ctrl+G
MI_Insert=Ins
MI_InsertFx=
MI_LoadScene=Ctrl+O
MI_MaximizePanel=`
MI_NewScene=Ctrl+N
MI_NextDrawing=G
MI_NextFrame=.
MI_OpacityCheck=
MI_Paste=Ctrl+V
MI_PrevDrawing=F
MI_PrevFrame=","
MI_Preview=
MI_Quit=Ctrl+Q
MI_Redo=Ctrl+Shift+Z
MI_SaveScene=Ctrl+Shift+S
MI_SaveSceneAs=Ctrl+Shift+Alt+S
MI_SelectAll=Ctrl+A
MI_SendBack=Ctrl+PgDown
MI_SendBackward=Ctrl+Shift+PgDown
MI_Undo=Ctrl+Z
MI_ZeroThick=
T_ActualPixelSize=
T_Brush=Alt+B
T_ControlPointEditor=Alt+Q
T_Edit=Shift+T
T_Eraser=Alt+E
T_Fill=Alt+I
T_Geometric=Alt+7
T_Hand=
T_Pinch=
T_Rotate=
T_Selection=Alt+S
T_StylePicker=Alt+D
T_Tape=Alt+C
T_Type=Alt+9
T_Zoom=Alt+Z
T_ZoomReset=
T_Zoomin=Alt+2
T_Zoomout=Alt+1
A_DecreaseBrushHardness=
A_DecreaseMaxBrushThickness=
A_DecreaseMinBrushThickness=
A_FxSchematicToggle=
A_IncreaseBrushHardness=
A_IncreaseMaxBrushThickness=
A_IncreaseMinBrushThickness=
A_ToolOption_AutoGroup=
A_ToolOption_AutoSelect%3AColumn=
A_ToolOption_AutoSelect%3ANone=
A_ToolOption_AutoSelect%3APegbar=
A_ToolOption_AutoSelectDrawing=
A_ToolOption_Autofill=
A_ToolOption_BreakSharpAngles=
A_ToolOption_BrushPreset=
A_ToolOption_EditToolActiveAxis=
A_ToolOption_EditToolActiveAxis%3ACenter=
A_ToolOption_EditToolActiveAxis%3APosition=Alt+2
A_ToolOption_EditToolActiveAxis%3ARotation=Alt+3
A_ToolOption_EditToolActiveAxis%3AScale=Alt+4
A_ToolOption_EditToolActiveAxis%3AShear=Alt+5
A_ToolOption_GeometricEdge=
A_ToolOption_GeometricShape=
A_ToolOption_GlobalKey=
A_ToolOption_IK=
A_ToolOption_Invert=
A_ToolOption_JoinVectors=
A_ToolOption_Manual=
A_ToolOption_Meshify=
A_ToolOption_Mode=
A_ToolOption_Mode%3AAreas=
A_ToolOption_Mode%3ALines=
A_ToolOption_Mode%3ALines%20%26%20Areas=
A_ToolOption_OnionSkin=
A_ToolOption_Orientation=
A_ToolOption_PencilMode=
A_ToolOption_PickScreen=
A_ToolOption_PreserveThickness=
A_ToolOption_PressureSensitivity=
A_ToolOption_ShowOnlyActiveSkeleton=
A_ToolOption_SkeletonMode%3AAnimate=
A_ToolOption_SkeletonMode%3ABuild%20Skeleton=
A_ToolOption_SkeletonMode%3AInverse%20Kinematics=
A_ToolOption_Smooth=
A_ToolOption_Snap=
A_ToolOption_Type=
A_ToolOption_Type%3AFreehand=
A_ToolOption_Type%3ANormal=
A_ToolOption_Type%3APolyline=
A_ToolOption_TypeFont=
A_ToolOption_TypeSize=
A_ToolOption_TypeStyle=
MI_ACheck=
MI_About=
MI_ActivateAllColumns=
MI_ActivateSelectedColumns=
MI_ActivateThisColumnOnly=
MI_AddFrames=
MI_AddToBatchCleanupList=
MI_AddToBatchRenderList=
MI_AdjustLevels=
MI_AdjustThickness=
MI_Antialias=
MI_ApplyMatchLines=
MI_AutoFillToggle=
MI_Autocenter=
MI_Autorenumber=
MI_BCheck=
MI_Binarize=
MI_BlendColors=
MI_BlueChannel=
MI_BlueChannelGreyscale=
MI_BrightnessAndContrast=
MI_CameraSettings=
MI_CameraStage=
MI_CameraTest=
MI_CanvasSize=
MI_Cleanup=
MI_CleanupPreview=
MI_CleanupSettings=
MI_ClearRecentImage=
MI_ClearRecentLevel=
MI_ClearRecentScene=
MI_CloneChild=
MI_CloneLevel=
MI_ClonePreview=
MI_CloseChild=
MI_Collapse=Alt+0
MI_CollectAssets=
MI_CompareToSnapshot=
MI_ConvertFileWithInput=
MI_ConvertFiles=
MI_ConvertToVectors=
MI_DeactivateAllColumns=
MI_DeactivateSelectedColumns=
MI_DeactivateUpperColumns=
MI_DecreaseStep=-
MI_DefineScanner=
MI_DeleteInk=
MI_DeleteMatchLines=
MI_DisableAllColumns=
MI_DisableSelectedColumns=Alt+H
MI_DockingCheck=
MI_Dup=
MI_DuplicateFile=
MI_Each2=
MI_Each3=
MI_Each4=
MI_EditLevel=
MI_EditShift=
MI_EnableAllColumns=Alt+Shift+H
MI_EnableSelectedColumns=
MI_EnableThisColumnOnly=
MI_EnterGroup=Ctrl+Return
MI_EraseUnusedStyles=
MI_ExitGroup=Backspace
MI_ExplodeChild=Ctrl+B
MI_ExportLevel=
MI_ExportScenes=
MI_ExposeResource=
MI_FieldGuide="Ctrl+'"
MI_FileInfo=
MI_FillAreas=
MI_FillLines=
MI_FirstFrame="Shift+<"
MI_FoldColumns=
MI_FrezzePreview=
MI_GCheck=
MI_GetColorFromStudioPalette=
MI_GreenChannel=
MI_GreenChannelGreyscale=
MI_Histogram=
MI_ICheck=
MI_IOnly=
MI_ImportMagpieFile=
MI_ImportScenes=
MI_IncreaseStep="+"
MI_Increment=
MI_Ink1Check=
MI_InsertGlobalKeyframe=
MI_InsertSceneFrame=
MI_InvertKeyframeSelection=
MI_InvertSelection=
MI_LastFrame="Shift+>"
MI_LevelSettings=
MI_LinesFade=
MI_Link=
MI_LoadColorModel=
MI_LoadFolder=
MI_LoadLevel=
MI_LoadSubSceneFile=
MI_LockAllColumns=Ctrl+Shift+L
MI_LockSelectedColumns=Ctrl+Alt+L
MI_LockThisColumnOnly=
MI_Loop=
MI_MatteChannel=
MI_MergeCmapped=
MI_MergeColumns=
MI_MergeFrames=
MI_NewLevel=
MI_NewOutputFx=
MI_NewProject=
MI_NextStep=
MI_NoShift=
MI_OnionSkin=Alt+O
MI_OpenBatchServers=
MI_OpenChild=
MI_OpenCleanupSettings=
MI_OpenColorModel=
MI_OpenComboViewer=
MI_OpenFileBrowser=
MI_OpenFileBrowser2=
MI_OpenFileViewer=
MI_OpenFilmStrip=
MI_OpenFunctionEditor=Alt+F
MI_OpenHistoryPanel=
MI_OpenLevelView=
MI_OpenPalette=
MI_OpenPltGizmo=
MI_OpenRecentScene=
MI_OpenSchematic=
MI_OpenScriptConsole=
MI_OpenStudioPalette=
MI_OpenStyleControl=
MI_OpenTMessage=
MI_OpenTasks=
MI_OpenToolOptionBar=
MI_OpenToolbar=
MI_OpenXshView=
MI_OutputSettings=
MI_OverwritePalette=
MI_PCheck=
MI_PasteColors=
MI_PasteInto=
MI_PasteNames=
MI_PasteValues=
MI_Pause=
MI_PencilTest=
MI_PickStyleAreas=
MI_PickStyleLines=
MI_Play=Ctrl+Return
MI_Preferences=Ctrl+U
MI_PrevStep=
MI_PreviewFx=
MI_PreviewSettings=
MI_Print=
MI_PrintXsheet=
MI_ProjectSettings=
MI_Random=
MI_RasterizePli=
MI_RedChannel=
MI_RedChannelGreyscale=
MI_Reframe1=
MI_Reframe2=
MI_Reframe3=
MI_Reframe4=
MI_RefreshTree=
MI_RegenerateFramePr=
MI_RegeneratePreview=
MI_ReloadStyle=
MI_RemoveEndpoints=
MI_RemoveGlobalKeyframe=
MI_RemoveLevel=
MI_RemoveSceneFrame=
MI_RemoveUnused=
MI_Render=
MI_Renumber=
MI_ReplaceLevel=
MI_ReplaceParentDirectory=
MI_Resequence=
MI_ResetInterpolation=
MI_ResetRoomLayout=
MI_ResetScanCropbox=
MI_ResetShift=
MI_ResetStep=
MI_Reverse=
MI_RevertScene=
MI_RevertToCleanedUp=
MI_RevertToLastSaved=
MI_Rolldown=
MI_Rollup=
MI_RunScript=
MI_SafeArea=
MI_SaveAll=Ctrl+S
MI_SaveDefaultSettings=
MI_SaveLevel=
MI_SaveLevelAs=
MI_SavePaletteAs=
MI_SavePreset=
MI_SavePreviewedFrames=
MI_SaveSubxsheetAs=
MI_Scan=Ctrl+Shift+S
MI_ScanSettings=
MI_SceneSettings=
MI_SelectAllKeyframes=
MI_SelectAllKeyframesNotAfter=
MI_SelectAllKeyframesNotBefore=
MI_SelectColumnKeyframes=
MI_SelectFollowingKeysInColumn=
MI_SelectFollowingKeysInRow=
MI_SelectPreviousKeysInColumn=
MI_SelectPreviousKeysInRow=
MI_SelectRowKeyframes=
MI_SetAcceleration=
MI_SetConstantSpeed=
MI_SetDeceleration=
MI_SetKeyframes=F6
MI_SetScanCropbox=
MI_ShiftTrace=
MI_ShortcutPopup=
MI_ShowFolderContents=
MI_Step2=
MI_Step3=
MI_Step4=
MI_SwapEnabledColumns=
MI_Swing=
MI_TCheck=
MI_TimeStretch=
MI_ToggleColumnLocks=
MI_ToggleColumnsActivation=
MI_ToggleEditInPlace=
MI_Tracking=
MI_Ungroup=Ctrl+Shift+G
MI_UnlockAllColumns=Ctrl+Alt+Shift+K
MI_UnlockSelectedColumns=Ctrl+Shift+K
MI_ViewBBox=
MI_ViewCamera=
MI_ViewColorcard=
MI_ViewFile=
MI_ViewGuide="Ctrl+'"
MI_ViewRuler=
MI_ViewTable=
T_Bender=
T_Cutter=Alt+T
T_Finger=
T_Hook=
T_Iron=
T_Magnet=
T_PaintBrush=
T_Plastic=
T_Pump=
T_RGBPicker=
T_Ruler=
T_ShowHideFullScreen=
T_Skeleton=
T_Tracker=
T_ZoomFit=
MI_OpenRecentLevel=

View file

@ -0,0 +1,366 @@
[shortcuts]
MI_LoadRecentImage=
A_ToolOption_FrameRange=
A_ToolOption_SegmentInk=
A_ToolOption_Selective=
A_ToolOption_Type%3ARectangular=
MI_BringForward=Ctrl+Up
MI_BringToFront=Ctrl+Shift+Up
MI_Clear=Delete
MI_Copy=Ctrl+C
MI_Cut=Ctrl+X
MI_DrawingSubBackward=[
MI_DrawingSubForward=]
MI_DrawingSubGroupBackward=Ctrl+[
MI_DrawingSubGroupForward=Ctrl+]
MI_Duplicate=
MI_FullScreenWindow=Ctrl+F
MI_FxParamEditor=
MI_Group=Ctrl+G
MI_Insert=Ins
MI_InsertFx=
MI_LoadScene=Ctrl+O
MI_MaximizePanel=
MI_NewScene=Ctrl+N
MI_NextDrawing=G
MI_NextFrame=.
MI_OpacityCheck=
MI_Paste=Ctrl+V
MI_PrevDrawing=F
MI_PrevFrame=","
MI_Preview=Alt+P
MI_Quit=Ctrl+Q
MI_Redo=Ctrl+Y
MI_SaveScene=Ctrl+Shift+S
MI_SaveSceneAs=Ctrl+Alt+Shift+S
MI_SelectAll=Shift+A
MI_SendBack=Ctrl+Shift+Down
MI_SendBackward=Ctrl+Down
MI_Undo=Ctrl+Z
MI_ZeroThick=D
T_ActualPixelSize=
T_Brush=Alt+B
T_ControlPointEditor=Alt+A
T_Edit=Alt+Q
T_Eraser=Alt+E
T_Fill=Alt+K
T_Geometric=Atl+R
T_Hand=
T_Pinch=
T_Rotate=
T_Selection=Alt+V
T_StylePicker=Alt+I
T_Tape=Alt+C
T_Type=
T_Zoom=Alt+Z
T_ZoomReset=Shift+Z
T_Zoomin=Ctrl+=
T_Zoomout=Ctrl+-
A_DecreaseBrushHardness=
A_DecreaseMaxBrushThickness=
A_DecreaseMinBrushThickness=
A_FxSchematicToggle=
A_IncreaseBrushHardness=
A_IncreaseMaxBrushThickness=
A_IncreaseMinBrushThickness=
A_ToolOption_AutoGroup=
A_ToolOption_AutoSelect%3AColumn=
A_ToolOption_AutoSelect%3ANone=
A_ToolOption_AutoSelect%3APegbar=
A_ToolOption_AutoSelectDrawing=
A_ToolOption_Autofill=
A_ToolOption_BreakSharpAngles=
A_ToolOption_BrushPreset=
A_ToolOption_EditToolActiveAxis=
A_ToolOption_EditToolActiveAxis%3ACenter=
A_ToolOption_EditToolActiveAxis%3APosition=
A_ToolOption_EditToolActiveAxis%3ARotation=
A_ToolOption_EditToolActiveAxis%3AScale=
A_ToolOption_EditToolActiveAxis%3AShear=
A_ToolOption_GeometricEdge=
A_ToolOption_GeometricShape=
A_ToolOption_GlobalKey=
A_ToolOption_IK=Alt+8
A_ToolOption_Invert=
A_ToolOption_JoinVectors=
A_ToolOption_Manual=
A_ToolOption_Meshify=
A_ToolOption_Mode=
A_ToolOption_Mode%3AAreas=
A_ToolOption_Mode%3ALines=
A_ToolOption_Mode%3ALines%20%26%20Areas=
A_ToolOption_OnionSkin=
A_ToolOption_Orientation=
A_ToolOption_PencilMode=
A_ToolOption_PickScreen=
A_ToolOption_PreserveThickness=
A_ToolOption_PressureSensitivity=
A_ToolOption_ShowOnlyActiveSkeleton=
A_ToolOption_SkeletonMode%3AAnimate=
A_ToolOption_SkeletonMode%3ABuild%20Skeleton=
A_ToolOption_SkeletonMode%3AInverse%20Kinematics=
A_ToolOption_Smooth=
A_ToolOption_Snap=
A_ToolOption_Type=
A_ToolOption_Type%3AFreehand=
A_ToolOption_Type%3ANormal=
A_ToolOption_Type%3APolyline=
A_ToolOption_TypeFont=
A_ToolOption_TypeSize=
A_ToolOption_TypeStyle=
MI_ACheck=
MI_About=
MI_ActivateAllColumns=
MI_ActivateSelectedColumns=
MI_ActivateThisColumnOnly=
MI_AddFrames=Ctrl+H
MI_AddToBatchCleanupList=
MI_AddToBatchRenderList=
MI_AdjustLevels=
MI_AdjustThickness=
MI_Antialias=
MI_ApplyMatchLines=
MI_AutoFillToggle=
MI_Autocenter=
MI_Autorenumber=
MI_BCheck=
MI_Binarize=
MI_BlendColors=
MI_BlueChannel=
MI_BlueChannelGreyscale=
MI_BrightnessAndContrast=
MI_CameraSettings=
MI_CameraStage=
MI_CameraTest=
MI_CanvasSize=
MI_Cleanup=
MI_CleanupPreview=
MI_CleanupSettings=
MI_ClearRecentImage=
MI_ClearRecentLevel=
MI_ClearRecentScene=
MI_CloneChild=
MI_CloneLevel=
MI_ClonePreview=
MI_CloseChild=
MI_Collapse=
MI_CollectAssets=
MI_CompareToSnapshot=
MI_ConvertFileWithInput=
MI_ConvertFiles=
MI_ConvertToVectors=
MI_DeactivateAllColumns=
MI_DeactivateSelectedColumns=Alt+H
MI_DeactivateUpperColumns=
MI_DecreaseStep=
MI_DefineScanner=
MI_DeleteInk=
MI_DeleteMatchLines=
MI_DisableAllColumns=
MI_DisableSelectedColumns=
MI_DockingCheck=
MI_Dup=
MI_DuplicateFile=
MI_Each2=
MI_Each3=
MI_Each4=
MI_EditLevel=
MI_EditShift=
MI_EnableAllColumns=Alt+Shift+H
MI_EnableSelectedColumns=
MI_EnableThisColumnOnly=
MI_EnterGroup=Ctrl+Return
MI_EraseUnusedStyles=
MI_ExitGroup=Backspace
MI_ExplodeChild=Ctrl+B
MI_ExportLevel=
MI_ExportScenes=
MI_ExposeResource=
MI_FieldGuide="Ctrl+'"
MI_FileInfo=
MI_FillAreas=
MI_FillLines=
MI_FirstFrame=Home
MI_FoldColumns=
MI_FrezzePreview=
MI_GCheck=
MI_GetColorFromStudioPalette=
MI_GreenChannel=
MI_GreenChannelGreyscale=
MI_Histogram=
MI_ICheck=
MI_IOnly=
MI_ImportMagpieFile=
MI_ImportScenes=
MI_IncreaseStep="+"
MI_Increment=
MI_Ink1Check=
MI_InsertGlobalKeyframe=
MI_InsertSceneFrame=
MI_InvertKeyframeSelection=
MI_InvertSelection=
MI_LastFrame=End
MI_LevelSettings=
MI_LinesFade=
MI_Link=
MI_LoadColorModel=
MI_LoadFolder=
MI_LoadLevel=
MI_LoadSubSceneFile=
MI_LockAllColumns=
MI_LockSelectedColumns=
MI_LockThisColumnOnly=
MI_Loop=
MI_MatteChannel=
MI_MergeCmapped=
MI_MergeColumns=
MI_MergeFrames=
MI_NewLevel=
MI_NewOutputFx=
MI_NewProject=
MI_NextStep=
MI_NoShift=
MI_OnionSkin=Ctrl+Alt+O
MI_OpenBatchServers=
MI_OpenChild=
MI_OpenCleanupSettings=
MI_OpenColorModel=
MI_OpenComboViewer=
MI_OpenFileBrowser=
MI_OpenFileBrowser2=
MI_OpenFileViewer=
MI_OpenFilmStrip=
MI_OpenFunctionEditor=Alt+F
MI_OpenHistoryPanel=
MI_OpenLevelView=
MI_OpenPalette=
MI_OpenPltGizmo=
MI_OpenRecentScene=
MI_OpenSchematic=
MI_OpenScriptConsole=
MI_OpenStudioPalette=
MI_OpenStyleControl=
MI_OpenTMessage=
MI_OpenTasks=
MI_OpenToolOptionBar=
MI_OpenToolbar=
MI_OpenXshView=
MI_OutputSettings=
MI_OverwritePalette=
MI_PCheck=
MI_PasteColors=
MI_PasteInto=
MI_PasteNames=
MI_PasteValues=
MI_Pause=
MI_PencilTest=
MI_PickStyleAreas=
MI_PickStyleLines=
MI_Play=Return
MI_Preferences=Ctrl+U
MI_PrevStep=
MI_PreviewFx=
MI_PreviewSettings=
MI_Print=
MI_PrintXsheet=
MI_ProjectSettings=
MI_Random=
MI_RasterizePli=
MI_RedChannel=
MI_RedChannelGreyscale=
MI_Reframe1=
MI_Reframe2=
MI_Reframe3=
MI_Reframe4=
MI_RefreshTree=
MI_RegenerateFramePr=
MI_RegeneratePreview=
MI_ReloadStyle=
MI_RemoveEndpoints=
MI_RemoveGlobalKeyframe=
MI_RemoveLevel=
MI_RemoveSceneFrame=
MI_RemoveUnused=
MI_Render=Ctrl+Alt+Shift+S
MI_Renumber=
MI_ReplaceLevel=
MI_ReplaceParentDirectory=
MI_Resequence=
MI_ResetInterpolation=
MI_ResetRoomLayout=
MI_ResetScanCropbox=
MI_ResetShift=
MI_ResetStep=
MI_Reverse=
MI_RevertScene=
MI_RevertToCleanedUp=
MI_RevertToLastSaved=
MI_Rolldown=
MI_Rollup=
MI_RunScript=
MI_SafeArea=
MI_SaveAll=Ctrl+S
MI_SaveDefaultSettings=
MI_SaveLevel=
MI_SaveLevelAs=
MI_SavePaletteAs=
MI_SavePreset=
MI_SavePreviewedFrames=
MI_SaveSubxsheetAs=
MI_Scan=
MI_ScanSettings=
MI_SceneSettings=Ctrl+F3
MI_SelectAllKeyframes=
MI_SelectAllKeyframesNotAfter=
MI_SelectAllKeyframesNotBefore=
MI_SelectColumnKeyframes=
MI_SelectFollowingKeysInColumn=
MI_SelectFollowingKeysInRow=
MI_SelectPreviousKeysInColumn=
MI_SelectPreviousKeysInRow=
MI_SelectRowKeyframes=
MI_SetAcceleration=
MI_SetConstantSpeed=
MI_SetDeceleration=
MI_SetKeyframes=Ctrl+F6
MI_SetScanCropbox=
MI_ShiftTrace=
MI_ShortcutPopup=
MI_ShowFolderContents=
MI_Step2=
MI_Step3=
MI_Step4=
MI_SwapEnabledColumns=
MI_Swing=
MI_TCheck=
MI_TimeStretch=
MI_ToggleColumnLocks=
MI_ToggleColumnsActivation=
MI_ToggleEditInPlace=
MI_Tracking=
MI_Ungroup=Ctrl+Shift+G
MI_UnlockAllColumns=Ctrl+Alt+Shift+L
MI_UnlockSelectedColumns=Ctrl+Shift+K
MI_ViewBBox=
MI_ViewCamera=
MI_ViewColorcard=
MI_ViewFile=
MI_ViewGuide=
MI_ViewRuler=Ctrl+Alt+Shift+R
MI_ViewTable=
T_Bender=
T_Cutter=Alt+T
T_Finger=
T_Hook=
T_Iron=
T_Magnet=
T_PaintBrush=
T_Plastic=
T_Pump=
T_RGBPicker=
T_Ruler=
T_ShowHideFullScreen=F4
T_Skeleton=
T_Tracker=
T_ZoomFit=
MI_OpenRecentLevel=

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1d6be973caafd36b6dcf9b8fcb2d030ad2e0c3c523527fad7bbf7da9f9ba5b6e
size 56118
oid sha256:e005a1c28ab5a1f8ed57793a79c883f0b44cd5d2b25152544e3dca5fbdd616bc
size 374568

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:be7784d0f86cf87b9dd965a32707e1a999b059d57fbeddb4066a033200e0fbc9
size 56118
oid sha256:f61acffbae2925d60a61bd11b6d5b09502843c89c8b3f20b89f240e050a1e916
size 858596

View file

@ -74,6 +74,7 @@ libtiff_la_SOURCES = \
tif_fax3sm.c \
tif_flush.c \
tif_getimage.c \
tif_getimage_64.c \
tif_jbig.c \
tif_jpeg.c \
tif_jpeg_12.c \

View file

@ -92,7 +92,7 @@ elseif(UNIX)
else()
set(PLATFORM 32)
endif()
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
add_definitions(-DLINUX)
else()
message(WARNING "Support for generic Unix (Not Apple or Linux) isn't yet working!")

View file

@ -480,6 +480,7 @@ bool TFilePath::isRoot() const {
// ritorna ""(niente tipo, niente punto), "." (file con tipo) o ".." (file con
// tipo e frame)
std::string TFilePath::getDots() const {
if (isFfmpegType()) return ".";
int i = getLastSlash(m_path);
std::wstring str = m_path.substr(i + 1);
// potrei anche avere a.b.c.d dove d e' l'estensione
@ -561,7 +562,7 @@ std::string TFilePath::getLevelName() const {
std::wstring TFilePath::getLevelNameW() const {
int i = getLastSlash(m_path); // cerco l'ultimo slash
std::wstring str = m_path.substr(i + 1); // str e' m_path senza directory
if (isFfmpegType()) return str;
int j = str.rfind(L"."); // str[j..] = ".type"
if (j == (int)std::wstring::npos) return str; // no frame; no type
i = str.substr(0, j).rfind(L'.');
@ -597,6 +598,7 @@ TFilePath TFilePath::getParentDir() const // noSlash!
//-----------------------------------------------------------------------------
bool TFilePath::isLevelName() const {
if (isFfmpegType()) return false;
try {
return getFrame() == TFrameId(TFrameId::EMPTY_FRAME);
}
@ -638,6 +640,15 @@ TFrameId TFilePath::getFrame() const {
//-----------------------------------------------------------------------------
bool TFilePath::isFfmpegType() const {
QString type = QString::fromStdString(getType()).toLower();
if (type == "gif" || type == "mp4" || type == "webm")
return true;
else
return false;
}
//-----------------------------------------------------------------------------
TFilePath TFilePath::withType(const std::string &type) const {
assert(type.length() < 2 || type.substr(0, 2) != "..");
int i = getLastSlash(m_path); // cerco l'ultimo slash

View file

@ -50,7 +50,8 @@ TColorStyle::TColorStyle()
, m_enabled(true)
, m_icon(0)
, m_validIcon(false)
, m_isEditedFromOriginal(false) {}
, m_isEditedFromOriginal(false)
, m_pickedPosition() {}
//-------------------------------------------------------------------
@ -66,7 +67,8 @@ TColorStyle::TColorStyle(const TColorStyle &other)
, m_flags(other.m_flags)
, m_enabled(other.m_enabled)
, m_validIcon(false)
, m_isEditedFromOriginal(other.m_isEditedFromOriginal) {}
, m_isEditedFromOriginal(other.m_isEditedFromOriginal)
, m_pickedPosition(other.m_pickedPosition) {}
//-------------------------------------------------------------------
@ -79,6 +81,7 @@ TColorStyle &TColorStyle::operator=(const TColorStyle &other) {
m_enabled = other.m_enabled;
m_validIcon = false;
m_isEditedFromOriginal = other.m_isEditedFromOriginal;
m_pickedPosition = other.m_pickedPosition;
return *this;
}
@ -100,6 +103,7 @@ bool TColorStyle::operator==(const TColorStyle &cs) const {
if (m_originalName != cs.getOriginalName()) return false;
if (m_globalName != cs.getGlobalName()) return false;
if (m_isEditedFromOriginal != cs.getIsEditedFlag()) return false;
if (m_pickedPosition != cs.getPickedPosition()) return false;
for (int p = 0; p < colorParamCount; ++p)
if (getColorParamValue(p) != cs.getColorParamValue(p)) return false;

View file

@ -15,6 +15,7 @@
#include "tpalette.h"
#include <memory>
#include <sstream>
PERSIST_IDENTIFIER(TPalette, "palette")
@ -30,6 +31,21 @@ namespace {
const int maxStyleIndex = 32765;
const std::string pointToString(const TPoint &point) {
return std::to_string(point.x) + "," + std::to_string(point.y);
}
// splitting string with ','
const TPoint stringToPoint(const std::string &string) {
std::string buffer;
std::stringstream ss(string);
std::getline(ss, buffer, ','); // getting the first part of string
int x = std::stoi(buffer);
std::getline(ss, buffer); // getting the second part of string
int y = std::stoi(buffer);
return TPoint(x, y);
}
} // namespace
//===================================================================
@ -168,7 +184,8 @@ TPalette::TPalette()
, m_dirtyFlag(false)
, m_mutex(QMutex::Recursive)
, m_isLocked(false)
, m_askOverwriteFlag(false) {
, m_askOverwriteFlag(false)
, m_shortcutScopeIndex(0) {
QString tempName(QObject::tr("colors"));
std::wstring pageName = tempName.toStdWString();
Page *page = addPage(pageName);
@ -563,10 +580,17 @@ void TPalette::saveData(TOStream &os) {
os.openChild("styles");
{
for (int i = 0; i < getStyleCount(); ++i) {
os.openChild("style");
TColorStyleP style = m_styles[i].second;
if (style->getPickedPosition() == TPoint())
os.openChild("style");
else {
std::map<std::string, std::string> attr;
attr["pickedpos"] = pointToString(style->getPickedPosition());
os.openChild("style", attr);
}
{
StyleWriter w(os, i);
m_styles[i].second->save(w);
style->save(w);
}
os.closeChild();
}
@ -680,6 +704,10 @@ void TPalette::loadData(TIStream &is) {
StyleReader r(is, version);
TColorStyle *cs = TColorStyle::load(r);
std::string pickedPosStr;
if (is.getTagParam("pickedpos", pickedPosStr))
cs->setPickedPosition(stringToPoint(pickedPosStr));
addStyle(cs);
}
@ -851,9 +879,10 @@ void TPalette::assign(const TPalette *src, bool isFromStudioPalette) {
j->second = j->second->clone();
m_styleAnimationTable[cit->first] = cit->second;
}
m_globalName = src->getGlobalName();
m_shortcuts = src->m_shortcuts;
m_currentFrame = src->m_currentFrame;
m_globalName = src->getGlobalName();
m_shortcuts = src->m_shortcuts;
m_currentFrame = src->m_currentFrame;
m_shortcutScopeIndex = src->m_shortcutScopeIndex;
// setDirtyFlag(true);
}
@ -1053,22 +1082,26 @@ void TPalette::clearKeyframe(int styleId, int frame) {
//-------------------------------------------------------------------
int TPalette::getShortcutValue(int key) const {
assert('0' <= key && key <= '9');
std::map<int, int>::const_iterator it;
it = m_shortcuts.find(key);
if (it == m_shortcuts.end()) return -1;
int styleId = it->second;
return 0 <= styleId && styleId < getStyleCount() ? styleId : -1;
assert(Qt::Key_0 <= key && key <= Qt::Key_9);
int shortcutIndex = (key == Qt::Key_0) ? 9 : key - Qt::Key_1;
int indexInPage = m_shortcutScopeIndex * 10 + shortcutIndex;
// shortcut is available only in the first page
return getPage(0)->getStyleId(indexInPage);
}
//-------------------------------------------------------------------
int TPalette::getStyleShortcut(int styleId) const {
assert(0 <= styleId && styleId < getStyleCount());
std::map<int, int>::const_iterator it;
for (it = m_shortcuts.begin(); it != m_shortcuts.end(); ++it)
if (it->second == styleId) return it->first;
return -1;
Page *page = getStylePage(styleId);
// shortcut is available only in the first page
if (!page || page->getIndex() != 0) return -1;
int indexInPage = page->search(styleId);
int shortcutIndex = indexInPage - m_shortcutScopeIndex * 10;
if (shortcutIndex < 0 || shortcutIndex > 9) return -1;
return (shortcutIndex == 9) ? Qt::Key_0 : Qt::Key_1 + shortcutIndex;
}
//-------------------------------------------------------------------
@ -1088,3 +1121,31 @@ void TPalette::setShortcutValue(int key, int styleId) {
m_shortcuts[key] = styleId;
}
}
//-------------------------------------------------------------------
// Returns true if there is at least one style with picked pos value
//-------------------------------------------------------------------
bool TPalette::hasPickedPosStyle() {
for (int i = 0; i < getStyleCount(); ++i) {
TColorStyleP style = m_styles[i].second;
if (style->getPickedPosition() != TPoint()) return true;
}
return false;
}
//-------------------------------------------------------------------
void TPalette::nextShortcutScope(bool invert) {
if (invert) {
if (m_shortcutScopeIndex > 0)
m_shortcutScopeIndex -= 1;
else
m_shortcutScopeIndex = getPage(0)->getStyleCount() / 10;
} else {
if ((m_shortcutScopeIndex + 1) * 10 < getPage(0)->getStyleCount())
m_shortcutScopeIndex += 1;
else
m_shortcutScopeIndex = 0;
}
}

View file

@ -6,6 +6,7 @@
#include <QProcess>
#include <QDir>
#include <QtGui/QImage>
#include <QRegExp>
#include "toonz/preferences.h"
#include "toonz/toonzfolders.h"
@ -98,8 +99,9 @@ void Ffmpeg::setFrameRate(double fps) { m_frameRate = fps; }
void Ffmpeg::setPath(TFilePath path) { m_path = path; }
void Ffmpeg::createIntermediateImage(const TImageP &img, int frameIndex) {
m_frameCount++;
QString tempPath = m_path.getQString() + "tempOut" +
QString::number(frameIndex) + "." + m_intermediateFormat;
QString::number(m_frameCount) + "." + m_intermediateFormat;
std::string saveStatus = "";
TRasterImageP tempImage(img);
TRasterImage *image = (TRasterImage *)tempImage->cloneImage();
@ -127,7 +129,7 @@ void Ffmpeg::createIntermediateImage(const TImageP &img, int frameIndex) {
qi->save(tempPath, format, -1);
free(buffer);
m_cleanUpList.push_back(tempPath);
m_frameCount++;
delete qi;
delete image;
}
@ -217,9 +219,9 @@ void Ffmpeg::saveSoundTrack(TSoundTrack *st) {
bool Ffmpeg::checkFilesExist() {
QString ffmpegCachePath = getFfmpegCache().getQString();
QString tempPath = ffmpegCachePath + "//" +
QString::fromStdString(m_path.getName()) +
QString::fromStdString(m_path.getType()) + "In0001." +
m_intermediateFormat;
m_path.getQString().remove(QRegExp(QString::fromUtf8(
"[-`~!@#$%^&*()_—+=|:;<>«»,.?/{}\'\"\\[\\]\\\\]"))) +
"In0001." + m_intermediateFormat;
if (TSystem::doesExistFileOrLevel(TFilePath(tempPath))) {
return true;
} else
@ -229,8 +231,9 @@ bool Ffmpeg::checkFilesExist() {
ffmpegFileInfo Ffmpeg::getInfo() {
QString ffmpegCachePath = getFfmpegCache().getQString();
QString tempPath = ffmpegCachePath + "//" +
QString::fromStdString(m_path.getName()) +
QString::fromStdString(m_path.getType()) + ".txt";
m_path.getQString().remove(QRegExp(QString::fromUtf8(
"[-`~!@#$%^&*()_—+=|:;<>«»,.?/{}\'\"\\[\\]\\\\]"))) +
".txt";
if (QFile::exists(tempPath)) {
QFile infoText(tempPath);
infoText.open(QIODevice::ReadOnly);
@ -264,8 +267,8 @@ ffmpegFileInfo Ffmpeg::getInfo() {
TRasterImageP Ffmpeg::getImage(int frameIndex) {
QString ffmpegCachePath = getFfmpegCache().getQString();
QString tempPath = ffmpegCachePath + "//" +
QString::fromStdString(m_path.getName()) +
QString::fromStdString(m_path.getType());
m_path.getQString().remove(QRegExp(QString::fromUtf8(
"[-`~!@#$%^&*()_—+=|:;<>«»,.?/{}\'\"\\[\\]\\\\]")));
std::string tmpPath = tempPath.toStdString();
// QString tempPath= m_path.getQString();
QString number = QString("%1").arg(frameIndex, 4, 10, QChar('0'));
@ -356,8 +359,8 @@ int Ffmpeg::getFrameCount() {
void Ffmpeg::getFramesFromMovie(int frame) {
QString ffmpegCachePath = getFfmpegCache().getQString();
QString tempPath = ffmpegCachePath + "//" +
QString::fromStdString(m_path.getName()) +
QString::fromStdString(m_path.getType());
m_path.getQString().remove(QRegExp(QString::fromUtf8(
"[-`~!@#$%^&*()_—+=|:;<>«»,.?/{}\'\"\\[\\]\\\\]")));
std::string tmpPath = tempPath.toStdString();
QString tempName = "In%04d." + m_intermediateFormat;
tempName = tempPath + tempName;
@ -399,6 +402,26 @@ void Ffmpeg::getFramesFromMovie(int frame) {
}
}
int Ffmpeg::getGifFrameCount() {
int frame = 1;
QString ffmpegCachePath = getFfmpegCache().getQString();
QString tempPath = ffmpegCachePath + "//" +
QString::fromStdString(m_path.getName()) +
QString::fromStdString(m_path.getType());
std::string tmpPath = tempPath.toStdString();
QString tempName = "In%04d." + m_intermediateFormat;
tempName = tempPath + tempName;
QString tempStart;
tempStart = "In0001." + m_intermediateFormat;
tempStart = tempPath + tempStart;
while (TSystem::doesExistFileOrLevel(TFilePath(tempStart))) {
frame++;
QString number = QString("%1").arg(frame, 4, 10, QChar('0'));
tempStart = tempPath + "In" + number + "." + m_intermediateFormat;
}
return frame - 1;
}
void Ffmpeg::addToCleanUp(QString path) {
if (TSystem::doesExistFileOrLevel(TFilePath(path))) {
m_cleanUpList.push_back(path);

View file

@ -41,6 +41,7 @@ public:
TFilePath getFfmpegCache();
ffmpegFileInfo getInfo();
void disablePrecompute();
int getGifFrameCount();
private:
QString m_intermediateFormat, m_ffmpegPath, m_audioPath, m_audioFormat;

View file

@ -3,6 +3,7 @@
#include "tiio_gif.h"
#include "trasterimage.h"
#include "timageinfo.h"
#include "toonz/stage.h"
#include <QStringList>
//===========================================================
@ -151,8 +152,9 @@ class TImageReaderGif final : public TImageReader {
public:
int m_frameIndex;
TImageReaderGif(const TFilePath &path, int index, TLevelReaderGif *lra)
: TImageReader(path), m_lra(lra), m_frameIndex(index) {
TImageReaderGif(const TFilePath &path, int index, TLevelReaderGif *lra,
TImageInfo *info)
: TImageReader(path), m_lra(lra), m_frameIndex(index), m_info(info) {
m_lra->addRef();
}
~TImageReaderGif() { m_lra->release(); }
@ -160,9 +162,11 @@ public:
TImageP load() override { return m_lra->load(m_frameIndex); }
TDimension getSize() const { return m_lra->getSize(); }
TRect getBBox() const { return TRect(); }
const TImageInfo *getImageInfo() const override { return m_info; }
private:
TLevelReaderGif *m_lra;
TImageInfo *m_info;
// not implemented
TImageReaderGif(const TImageReaderGif &);
@ -190,7 +194,7 @@ TLevelReaderGif::TLevelReaderGif(const TFilePath &path)
m_ly = m_size.ly;
ffmpegReader->getFramesFromMovie();
m_frameCount = ffmpegReader->getGifFrameCount();
// set values
m_info = new TImageInfo();
m_info->m_frameRate = fps;
@ -198,6 +202,8 @@ TLevelReaderGif::TLevelReaderGif(const TFilePath &path)
m_info->m_ly = m_ly;
m_info->m_bitsPerSample = 8;
m_info->m_samplePerPixel = 4;
m_info->m_dpix = Stage::standardDpi;
m_info->m_dpiy = Stage::standardDpi;
}
//-----------------------------------------------------------
@ -220,9 +226,8 @@ TImageReaderP TLevelReaderGif::getFrameReader(TFrameId fid) {
// if (IOError != 0)
// throw TImageException(m_path, buildAVIExceptionString(IOError));
if (fid.getLetter() != 0) return TImageReaderP(0);
int index = fid.getNumber();
TImageReaderGif *irm = new TImageReaderGif(m_path, index, this);
int index = fid.getNumber();
TImageReaderGif *irm = new TImageReaderGif(m_path, index, this, m_info);
return TImageReaderP(irm);
}

View file

@ -4,6 +4,7 @@
#include "trasterimage.h"
#include "timageinfo.h"
#include "tsound.h"
#include "toonz/stage.h"
#include <QStringList>
//===========================================================
@ -38,11 +39,16 @@ private:
TLevelWriterMp4::TLevelWriterMp4(const TFilePath &path, TPropertyGroup *winfo)
: TLevelWriter(path, winfo) {
if (!m_properties) m_properties = new Tiio::Mp4WriterProperties();
std::string scale = m_properties->getProperty("Scale")->getValueAsString();
m_scale = QString::fromStdString(scale).toInt();
std::string quality =
m_properties->getProperty("Quality")->getValueAsString();
m_vidQuality = QString::fromStdString(quality).toInt();
if (m_properties->getPropertyCount() == 0) {
m_scale = 100;
m_vidQuality = 100;
} else {
std::string scale = m_properties->getProperty("Scale")->getValueAsString();
m_scale = QString::fromStdString(scale).toInt();
std::string quality =
m_properties->getProperty("Quality")->getValueAsString();
m_vidQuality = QString::fromStdString(quality).toInt();
}
ffmpegWriter = new Ffmpeg();
ffmpegWriter->setPath(m_path);
if (TSystem::doesExistFileOrLevel(m_path)) TSystem::deleteFile(m_path);
@ -129,8 +135,9 @@ class TImageReaderMp4 final : public TImageReader {
public:
int m_frameIndex;
TImageReaderMp4(const TFilePath &path, int index, TLevelReaderMp4 *lra)
: TImageReader(path), m_lra(lra), m_frameIndex(index) {
TImageReaderMp4(const TFilePath &path, int index, TLevelReaderMp4 *lra,
TImageInfo *info)
: TImageReader(path), m_lra(lra), m_frameIndex(index), m_info(info) {
m_lra->addRef();
}
~TImageReaderMp4() { m_lra->release(); }
@ -138,9 +145,11 @@ public:
TImageP load() override { return m_lra->load(m_frameIndex); }
TDimension getSize() const { return m_lra->getSize(); }
TRect getBBox() const { return TRect(); }
const TImageInfo *getImageInfo() const override { return m_info; }
private:
TLevelReaderMp4 *m_lra;
TImageInfo *m_info;
// not implemented
TImageReaderMp4(const TImageReaderMp4 &);
@ -173,6 +182,8 @@ TLevelReaderMp4::TLevelReaderMp4(const TFilePath &path) : TLevelReader(path) {
m_info->m_ly = m_ly;
m_info->m_bitsPerSample = 8;
m_info->m_samplePerPixel = 4;
m_info->m_dpix = Stage::standardDpi;
m_info->m_dpiy = Stage::standardDpi;
}
//-----------------------------------------------------------
@ -197,7 +208,7 @@ TImageReaderP TLevelReaderMp4::getFrameReader(TFrameId fid) {
if (fid.getLetter() != 0) return TImageReaderP(0);
int index = fid.getNumber();
TImageReaderMp4 *irm = new TImageReaderMp4(m_path, index, this);
TImageReaderMp4 *irm = new TImageReaderMp4(m_path, index, this, m_info);
return TImageReaderP(irm);
}

View file

@ -4,6 +4,7 @@
#include "trasterimage.h"
#include "tsound.h"
#include "timageinfo.h"
#include "toonz/stage.h"
#include <QStringList>
//===========================================================
@ -133,8 +134,9 @@ class TImageReaderWebm final : public TImageReader {
public:
int m_frameIndex;
TImageReaderWebm(const TFilePath &path, int index, TLevelReaderWebm *lra)
: TImageReader(path), m_lra(lra), m_frameIndex(index) {
TImageReaderWebm(const TFilePath &path, int index, TLevelReaderWebm *lra,
TImageInfo *info)
: TImageReader(path), m_lra(lra), m_frameIndex(index), m_info(info) {
m_lra->addRef();
}
~TImageReaderWebm() { m_lra->release(); }
@ -142,9 +144,11 @@ public:
TImageP load() override { return m_lra->load(m_frameIndex); }
TDimension getSize() const { return m_lra->getSize(); }
TRect getBBox() const { return TRect(); }
const TImageInfo *getImageInfo() const override { return m_info; }
private:
TLevelReaderWebm *m_lra;
TImageInfo *m_info;
// not implemented
TImageReaderWebm(const TImageReaderWebm &);
@ -177,6 +181,8 @@ TLevelReaderWebm::TLevelReaderWebm(const TFilePath &path) : TLevelReader(path) {
m_info->m_ly = m_ly;
m_info->m_bitsPerSample = 8;
m_info->m_samplePerPixel = 4;
m_info->m_dpix = Stage::standardDpi;
m_info->m_dpiy = Stage::standardDpi;
}
//-----------------------------------------------------------
@ -201,7 +207,7 @@ TImageReaderP TLevelReaderWebm::getFrameReader(TFrameId fid) {
if (fid.getLetter() != 0) return TImageReaderP(0);
int index = fid.getNumber();
TImageReaderWebm *irm = new TImageReaderWebm(m_path, index, this);
TImageReaderWebm *irm = new TImageReaderWebm(m_path, index, this, m_info);
return TImageReaderP(irm);
}

View file

@ -118,6 +118,9 @@ private:
// This flag will be set when the
//! style is edited from the original one.
TPoint m_pickedPosition; // picked position from color model by using style
// picker tool with "organize palette" option.
protected:
TRaster32P m_icon; //!< Icon shown on TPalette viewers.
bool m_validIcon; //!< Icon's validity status.
@ -212,6 +215,9 @@ The \a global name contains information about palette id.
m_flags = flags;
} //!< Returns color attributes.
void setPickedPosition(const TPoint &pos) { m_pickedPosition = pos; }
TPoint getPickedPosition() const { return m_pickedPosition; }
// Color-related functions
/*! \detail

View file

@ -177,7 +177,7 @@ If the path is "<alpha>:" a slash will be added*/
TFilePath getParentDir() const; // noSlash!;
TFrameId getFrame() const;
bool isFfmpegType() const;
bool isLevelName()
const; //{return getFrame() == TFrameId(TFrameId::EMPTY_FRAME);};
bool isAbsolute() const;

View file

@ -66,6 +66,8 @@ enum {
PickerCursorWhite,
PickerCursorWhiteLine,
PickerCursorWhiteArea,
PickerCursorOrganize,
PickerCursorWhiteOrganize,
PickerRGB,
PickerRGBWhite,

View file

@ -647,7 +647,9 @@ public slots:
void onToolChanged();
void onStageObjectChange();
// signals:
signals:
// used in ComboViewer to handle Tab focus
void newPanelCreated();
// void toolOptionChange();
};

View file

@ -146,7 +146,8 @@ public:
return -1;
}
TToonzImageP makeTlv(bool transparentSyntheticInks);
TToonzImageP makeTlv(bool transparentSyntheticInks,
bool removeUnusedStyles = false);
TVectorImageP vectorize(const TToonzImageP &ti);
TVectorImageP vectorize(const TRaster32P &ras);

View file

@ -88,6 +88,17 @@ DVAPI void renamePalettePage(TPaletteHandle *paletteHandle, int pageIndex,
DVAPI void renamePaletteStyle(TPaletteHandle *paletteHandle,
const std::wstring &newName);
/* called in ColorModelViewer::pick() - move selected style to the first page */
DVAPI void organizePaletteStyle(TPaletteHandle *paletteHandle, int styleId,
const TPoint &point);
/*
called in ColorModelViewer::repickFromColorModel().
Pick color from the img for all styles with "picked position" value.
*/
DVAPI void pickColorByUsingPickedPosition(TPaletteHandle *paletteHandle,
TImageP img);
} // namespace
#endif

View file

@ -99,6 +99,14 @@ public:
void setAutosavePeriod(int minutes);
int getAutosavePeriod() const { return m_autosavePeriod; } // minutes
void enableAutosaveScene(bool on);
bool isAutosaveSceneEnabled() const { return m_autosaveSceneEnabled; }
void enableAutosaveOtherFiles(bool on);
bool isAutosaveOtherFilesEnabled() const {
return m_autosaveOtherFilesEnabled;
}
void enableLevelsBackup(bool enabled);
bool isLevelsBackupEnabled() const { return m_levelsBackupEnabled; }
@ -110,6 +118,9 @@ public:
return m_replaceAfterSaveLevelAs;
}
void enableStartupPopup(bool on);
bool isStartupPopupEnabled() { return m_startupPopupEnabled; }
void setProjectRoot(int index);
int getProjectRoot() { return m_projectRoot; }
@ -296,6 +307,11 @@ public:
return m_multiLayerStylePickerEnabled;
}
void enableUseNumpadForSwitchingStyles(bool on);
bool isUseNumpadForSwitchingStylesEnabled() const {
return m_useNumpadForSwitchingStyles;
}
// Xsheet tab
void setXsheetStep(int step); //!< Sets the step used for the <I>next/prev
@ -395,7 +411,8 @@ public:
bool getPrecompute() { return m_precompute; }
void setFfmpegTimeout(int seconds);
int getFfmpegTimeout() { return m_ffmpegTimeout; }
void setFastRenderPath(std::string path);
QString getFastRenderPath() const { return m_fastRenderPath; }
// Uncategorized - internals
void setAskForOverrideRender(bool on);
@ -407,6 +424,9 @@ public:
int getTextureSize() const { return m_textureSize; }
bool useDrawPixel() { return m_textureSize == 0; }
void setShortcutPreset(std::string preset);
QString getShortcutPreset() { return m_shortcutPreset; }
int getShmMax() const {
return m_shmmax;
} //! \sa The \p sysctl unix command.
@ -434,7 +454,9 @@ private:
std::vector<LevelFormat> m_levelFormats;
QString m_units, m_cameraUnits, m_scanLevelType, m_currentRoomChoice,
m_oldUnits, m_oldCameraUnits, m_ffmpegPath, m_customProjectRoot;
m_oldUnits, m_oldCameraUnits, m_ffmpegPath, m_shortcutPreset,
m_customProjectRoot;
QString m_fastRenderPath;
double m_defLevelWidth, m_defLevelHeight, m_defLevelDpi;
@ -457,11 +479,13 @@ private:
m_generatedMovieViewEnabled, m_xsheetAutopanEnabled,
m_ignoreAlphaonColumn1Enabled, m_previewAlwaysOpenNewFlipEnabled,
m_rewindAfterPlaybackEnabled, m_fitToFlipbookEnabled, m_autosaveEnabled,
m_autosaveSceneEnabled, m_autosaveOtherFilesEnabled,
m_defaultViewerEnabled, m_pixelsOnly;
bool m_rasterOptimizedMemory, m_saveUnpaintedInCleanup,
m_askForOverrideRender, m_automaticSVNFolderRefreshEnabled, m_SVNEnabled,
m_levelsBackupEnabled, m_minimizeSaveboxAfterEditing,
m_sceneNumberingEnabled, m_animationSheetEnabled, m_inksOnly;
m_sceneNumberingEnabled, m_animationSheetEnabled, m_inksOnly,
m_startupPopupEnabled;
bool m_fillOnlySavebox, m_show0ThickLines, m_regionAntialias;
bool m_onionSkinDuringPlayback;
TPixel32 m_viewerBGColor, m_previewBGColor, m_chessboardColor1,
@ -499,6 +523,8 @@ private:
std::string m_layerNameEncoding = "SJIS"; // Fixed to SJIS for now. You can
// add interface if you wanna
// change encoding.
// whether to use numpad and tab key shortcut for selecting styles
bool m_useNumpadForSwitchingStyles;
private:
Preferences();

View file

@ -57,7 +57,7 @@ public:
bool isConstantFolder(int index) const;
TFilePath getFolder(int index) const;
TFilePath getFolder(std::string name) const;
TFilePath getFolder(std::string name, bool absolute = false) const;
TFilePath getScenesPath() const;

View file

@ -52,7 +52,9 @@ public:
}
void notifyNameSceneChange() { emit nameSceneChanged(); }
void notifyPreferenceChanged() { emit preferenceChanged(); }
void notifyPreferenceChanged(const QString &prefName) {
emit preferenceChanged(prefName);
}
void notifyPixelUnitSelected(bool on) { emit pixelUnitSelected(on); }
@ -76,7 +78,7 @@ signals:
void castChanged();
void castFolderAdded(const TFilePath &path);
void nameSceneChanged();
void preferenceChanged();
void preferenceChanged(const QString &prefName);
void pixelUnitSelected(bool on);
};

View file

@ -71,6 +71,7 @@ protected:
//---------------------------------------------------------------
class DVAPI CameraSettingsWidget final : public QFrame {
friend class StartupPopup;
Q_OBJECT
bool m_forCleanup;

View file

@ -58,10 +58,11 @@ void DVAPI MsgBoxInPopup(MsgType type, const QString &text);
// ATTENZIONE: Valore di ritorno
// 0 = l'utente ha chiuso la finestra (dovrebbe corrispondere ad un cancel o ad
// un NO)
// 1 = primo bottone da sx premuto
// 2 = secondo bottone da sx premuto
// 3 = terzo bottone da sx premuto
// un NO) - closed window
// 1 = primo bottone da sx premuto - first button selected
// 2 = secondo bottone da sx premuto - second button
// 3 = terzo bottone da sx premuto - third button
// 4 = fourth button
int DVAPI MsgBox(MsgType type, const QString &text,
const std::vector<QString> &buttons,
@ -77,6 +78,12 @@ int DVAPI MsgBox(const QString &text, const QString &button1,
const QString &button2, const QString &button3,
int defaultButtonIndex = 0, QWidget *parent = 0);
// QUESTION: four botton user defined
int DVAPI MsgBox(const QString &text, const QString &button1,
const QString &button2, const QString &button3,
const QString &button4, int defaultButtonIndex = 0,
QWidget *parent = 0);
Dialog DVAPI *createMsgBox(MsgType type, const QString &text,
const QStringList &buttons, int defaultButtonIndex,
QWidget *parent = 0);
@ -229,6 +236,8 @@ public:
void addButtonBarWidget(QWidget *widget);
void addButtonBarWidget(QWidget *first, QWidget *second);
void addButtonBarWidget(QWidget *first, QWidget *second, QWidget *third);
void addButtonBarWidget(QWidget *first, QWidget *second, QWidget *third,
QWidget *fourth);
void hideEvent(QHideEvent *event) override;

View file

@ -53,6 +53,8 @@ class DVAPI FileField : public QWidget {
QStringList m_filters;
QFileDialog::FileMode m_fileMode;
QString m_windowTitle;
QString m_descriptionText; // if the initial text is not path, set the string
// here and prevent browsing
protected: // used in the child class for CleanupSettings
QPushButton *m_fileBrowseButton;
@ -73,7 +75,7 @@ public:
static BrowserPopupController *m_browserPopupController;
FileField(QWidget *parent = 0, QString path = QString(),
bool readOnly = false);
bool readOnly = false, bool doNotBrowseInitialPath = false);
~FileField() {}
/*! Set what the user may select in the file dialog:

View file

@ -214,7 +214,8 @@ public:
eFilledRaster = 0x4000000, // Used only in LineTest
eDefineLoadBox = 0x8000000,
eUseLoadBox = 0x10000000,
eEnd = 0x20000000
eLocator = 0x20000000,
eEnd = 0x40000000
};
static const UINT cFullConsole = eEnd - 1;
@ -249,6 +250,7 @@ public:
void enableButton(UINT button, bool enable, bool doShowHide = true);
void showCurrentFrame();
int getCurrentFrame() const { return m_currentFrame; }
int getCurrentFps() const { return m_fps; }
void setChecked(UINT button, bool state);
bool isChecked(UINT button) const;
void setCurrentFrame(int frame, bool forceResetting = false);

View file

@ -111,8 +111,10 @@ void DVAPI convertNaa2Tlv(
FrameTaskNotifier
*frameNotifier, //!< Observer class for frame success notifications.
TPalette *palette =
0); //!< Special conversion function from an antialiased level to tlv.
//! \sa Function ImageUtils::convert().
0, //!< Special conversion function from an antialiased level to tlv.
//! \sa Function ImageUtils::convert().
bool removeUnusedStyles =
false); //! Remove unused styles from input palette.
double DVAPI getQuantizedZoomFactor(double zf, bool forward);

View file

@ -145,7 +145,8 @@ public:
std::string getShortcutFromId(CommandId id);
int getKeyFromShortcut(const std::string &shortcut);
int getKeyFromId(CommandId id);
void setShortcut(QAction *action, std::string shortcutString);
void setShortcut(QAction *action, std::string shortcutString,
bool keepDefault = true);
QAction *getAction(CommandId id, bool createIfNeeded = false);

View file

@ -199,11 +199,7 @@ protected:
void zoomInChip();
void zoomOutChip();
protected slots:
void toggleLink();
void eraseToggleLink();
void removeLink();
bool hasShortcut(int indexInPage);
private:
DVGui::LineEdit *m_renameTextField;

View file

@ -12,6 +12,8 @@
#define MI_PasteColors "MI_PasteColors"
#define MI_PasteNames "MI_PasteNames"
#define MI_GetColorFromStudioPalette "MI_GetColorFromStudioPalette"
#define MI_ToggleLinkToStudioPalette "MI_ToggleLinkToStudioPalette"
#define MI_RemoveReferenceToStudioPalette "MI_RemoveReferenceToStudioPalette"
#define MI_Clear "MI_Clear"
#define MI_SelectAll "MI_SelectAll"
#define MI_InvertSelection "MI_InvertSelection"

View file

@ -95,9 +95,11 @@ public:
void toggleKeyframe(int frame);
// remove link from the studio palette (if linked)
bool removeLink();
void removeLink();
// get back the style from the studio palette (if linked)
void getBackOriginalStyle();
// return true if there is at least one linked style in the selection
bool hasLinkedStyle();
};
#endif // STYLESELECTION_INCLUDED

View file

@ -211,6 +211,9 @@ private:
//! The confirmation dialog will not be opened unless the palette is edited
//! again,
//! even if the palette's dirtyflag is true.
int m_shortcutScopeIndex;
public:
TPalette();
~TPalette();
@ -417,6 +420,11 @@ between RGBA color components.
m_isLocked = lock;
}
bool hasPickedPosStyle(); // Returns true if there is at least one style with
// picked pos value
void nextShortcutScope(bool invert);
public:
// Deprecated functions

View file

@ -11,6 +11,7 @@ set(MOC_HEADERS
../include/tools/screenpicker.h
rgbpickertool.h
rulertool.h
stylepickertool.h
)
set(HEADERS ${MOC_HEADERS}

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -45,7 +45,7 @@ using namespace ToolUtils;
TEnv::DoubleVar VectorBrushMinSize("InknpaintVectorBrushMinSize", 1);
TEnv::DoubleVar VectorBrushMaxSize("InknpaintVectorBrushMaxSize", 5);
TEnv::IntVar VectorCapStyle("InknpaintVectorCapStyle", 0);
TEnv::IntVar VectorCapStyle("InknpaintVectorCapStyle", 1);
TEnv::IntVar VectorJoinStyle("InknpaintVectorJoinStyle", 0);
TEnv::IntVar VectorMiterValue("InknpaintVectorMiterValue", 4);
TEnv::DoubleVar RasterBrushMinSize("InknpaintRasterBrushMinSize", 1);

View file

@ -73,6 +73,9 @@ const struct {
{ToolCursor::PickerCursorWhiteLine, "picker_style_white_line", 7, 22},
{ToolCursor::PickerCursorWhiteArea, "picker_style_white_area", 7, 22},
{ToolCursor::PickerCursorWhite, "picker_style_white", 7, 22},
{ToolCursor::PickerCursorOrganize, "picker_style_organize", 7, 22},
{ToolCursor::PickerCursorWhiteOrganize, "picker_style_white_organize", 7,
22},
{ToolCursor::PickerRGB, "picker_rgb", 7, 22},
{ToolCursor::PickerRGBWhite, "picker_rgb_white", 7, 22},
{ToolCursor::FillCursorF, "fill_f", 6, 23},

View file

@ -1,238 +1,307 @@
#include "stylepickertool.h"
// TnzTools includes
#include "tools/tool.h"
#include "tools/cursors.h"
#include "tools/stylepicker.h"
#include "toonz/txshsimplelevel.h"
#include "toonz/txshlevelhandle.h"
#include "tools/toolhandle.h"
#include "drawutil.h"
#include "tvectorimage.h"
#include "ttoonzimage.h"
#include "tundo.h"
#include "toonz/tpalettehandle.h"
#include "toonz/stage2.h"
#include "tproperty.h"
// TnzQt includes
#include "toonzqt/tselectionhandle.h"
#include "toonzqt/styleselection.h"
#include "tools/toolhandle.h"
// TnzLib includes
#include "toonz/txshsimplelevel.h"
#include "toonz/txshlevelhandle.h"
#include "toonz/tpalettehandle.h"
#include "toonz/stage2.h"
#include "toonz/tframehandle.h"
#include "toonz/txsheethandle.h"
#include "toonz/preferences.h"
#include "toonz/tcolumnhandle.h"
#include "toonz/dpiscale.h"
#include "toonz/palettecontroller.h"
#include "toonz/txshleveltypes.h"
#include "toonz/txshpalettelevel.h"
// TnzCore includes
#include "drawutil.h"
#include "tvectorimage.h"
#include "ttoonzimage.h"
#include "tundo.h"
#include "tmsgcore.h"
#define LINES L"Lines"
#define AREAS L"Areas"
#define ALL L"Lines & Areas"
namespace {
//========================================================================
// Pick Style Tool
//------------------------------------------------------------------------
class StylePickerTool final : public TTool {
int m_oldStyleId, m_currentStyleId;
StylePickerTool::StylePickerTool()
: TTool("T_StylePicker")
, m_currentStyleId(0)
, m_colorType("Mode:")
, m_passivePick("Passive Pick", false)
, m_organizePalette("Organize Palette", false)
, m_paletteToBeOrganized(NULL) {
m_prop.bind(m_colorType);
m_colorType.addValue(AREAS);
m_colorType.addValue(LINES);
m_colorType.addValue(ALL);
m_colorType.setId("Mode");
bind(TTool::CommonLevels);
TEnumProperty m_colorType;
TPropertyGroup m_prop;
m_prop.bind(m_passivePick);
m_passivePick.setId("PassivePick");
TBoolProperty m_passivePick;
m_prop.bind(m_organizePalette);
m_organizePalette.setId("OrganizePalette");
}
public:
TPropertyGroup *getProperties(int targetType) override { return &m_prop; }
void StylePickerTool::leftButtonDown(const TPointD &pos, const TMouseEvent &e) {
m_oldStyleId = m_currentStyleId =
getApplication()->getCurrentLevelStyleIndex();
pick(pos, e);
}
StylePickerTool()
: TTool("T_StylePicker")
, m_currentStyleId(0)
, m_colorType("Mode:")
, m_passivePick("Passive Pick", false) {
m_prop.bind(m_colorType);
m_colorType.addValue(AREAS);
m_colorType.addValue(LINES);
m_colorType.addValue(ALL);
m_colorType.setId("Mode");
bind(TTool::CommonLevels);
void StylePickerTool::leftButtonDrag(const TPointD &pos, const TMouseEvent &e) {
pick(pos, e);
}
m_prop.bind(m_passivePick);
m_passivePick.setId("PassivePick");
}
void StylePickerTool::pick(const TPointD &pos, const TMouseEvent &e) {
// Area = 0, Line = 1, All = 2
int modeValue = m_colorType.getIndex();
ToolType getToolType() const override { return TTool::LevelReadTool; }
//------------------------------------
// MultiLayerStylePicker
/*---
PickしたStyleId = 0
Preference MultiLayerStylePickerが有効
Scene編集モード
Transparentでない場合
Levelを移動する
---*/
if (Preferences::instance()->isMultiLayerStylePickerEnabled() &&
getApplication()->getCurrentFrame()->isEditingScene()) {
int superPickedColumnId = getViewer()->posToColumnIndex(
e.m_pos, getPixelSize() * getPixelSize(), false);
void draw() override {}
if (superPickedColumnId >= 0 /*-- 何かColumnに当たった場合 --*/
&&
getApplication()->getCurrentColumn()->getColumnIndex() !=
superPickedColumnId) /*-- かつ、Current Columnでない場合 --*/
{
/*-- そのColumnからPickを試みる --*/
int currentFrame = getApplication()->getCurrentFrame()->getFrame();
TXshCell pickedCell =
getApplication()->getCurrentXsheet()->getXsheet()->getCell(
currentFrame, superPickedColumnId);
TImageP pickedImage = pickedCell.getImage(false).getPointer();
TToonzImageP picked_ti = pickedImage;
TVectorImageP picked_vi = pickedImage;
TXshSimpleLevel *picked_level = pickedCell.getSimpleLevel();
if ((picked_ti || picked_vi) && picked_level) {
TPointD tmpMousePosition = getColumnMatrix(superPickedColumnId).inv() *
getViewer()->winToWorld(e.m_pos);
void leftButtonDown(const TPointD &pos, const TMouseEvent &e) override {
m_oldStyleId = m_currentStyleId =
getApplication()->getCurrentLevelStyleIndex();
pick(pos, e);
}
void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override {
pick(pos, e);
}
TPointD tmpDpiScale = getCurrentDpiScale(picked_level, getCurrentFid());
void pick(const TPointD &pos, const TMouseEvent &e) {
// Area = 0, Line = 1, All = 2
int modeValue = m_colorType.getIndex();
tmpMousePosition.x /= tmpDpiScale.x;
tmpMousePosition.y /= tmpDpiScale.y;
//------------------------------------
// MultiLayerStylePicker
/*---
PickしたStyleId = 0
Preference MultiLayerStylePickerが有効
Scene編集モード
Transparentでない場合
Levelを移動する
---*/
if (Preferences::instance()->isMultiLayerStylePickerEnabled() &&
getApplication()->getCurrentFrame()->isEditingScene()) {
int superPickedColumnId = getViewer()->posToColumnIndex(
e.m_pos, getPixelSize() * getPixelSize(), false);
if (superPickedColumnId >= 0 /*-- 何かColumnに当たった場合 --*/
&&
getApplication()->getCurrentColumn()->getColumnIndex() !=
superPickedColumnId) /*-- かつ、Current Columnでない場合 --*/
{
/*-- そのColumnからPickを試みる --*/
int currentFrame = getApplication()->getCurrentFrame()->getFrame();
TXshCell pickedCell =
getApplication()->getCurrentXsheet()->getXsheet()->getCell(
currentFrame, superPickedColumnId);
TImageP pickedImage = pickedCell.getImage(false).getPointer();
TToonzImageP picked_ti = pickedImage;
TVectorImageP picked_vi = pickedImage;
TXshSimpleLevel *picked_level = pickedCell.getSimpleLevel();
if ((picked_ti || picked_vi) && picked_level) {
TPointD tmpMousePosition =
getColumnMatrix(superPickedColumnId).inv() *
getViewer()->winToWorld(e.m_pos);
TPointD tmpDpiScale =
getCurrentDpiScale(picked_level, getCurrentFid());
tmpMousePosition.x /= tmpDpiScale.x;
tmpMousePosition.y /= tmpDpiScale.y;
StylePicker superPicker(pickedImage);
int picked_subsampling =
picked_level->getImageSubsampling(pickedCell.getFrameId());
int superPicked_StyleId = superPicker.pickStyleId(
TScale(1.0 / picked_subsampling) * tmpMousePosition +
TPointD(-0.5, -0.5),
getPixelSize() * getPixelSize(), modeValue);
/*-- 何かStyleが拾えて、Transparentでない場合 --*/
if (superPicked_StyleId > 0) {
/*-- Levelの移動 --*/
getApplication()->getCurrentLevel()->setLevel(picked_level);
/*-- Columnの移動 --*/
getApplication()->getCurrentColumn()->setColumnIndex(
superPickedColumnId);
/*-- 選択の解除 --*/
if (getApplication()->getCurrentSelection()->getSelection())
getApplication()
->getCurrentSelection()
->getSelection()
->selectNone();
/*-- StyleIdの移動 --*/
getApplication()->setCurrentLevelStyleIndex(superPicked_StyleId);
return;
}
StylePicker superPicker(pickedImage);
int picked_subsampling =
picked_level->getImageSubsampling(pickedCell.getFrameId());
int superPicked_StyleId = superPicker.pickStyleId(
TScale(1.0 / picked_subsampling) * tmpMousePosition +
TPointD(-0.5, -0.5),
getPixelSize() * getPixelSize(), modeValue);
/*-- 何かStyleが拾えて、Transparentでない場合 --*/
if (superPicked_StyleId > 0) {
/*-- Levelの移動 --*/
getApplication()->getCurrentLevel()->setLevel(picked_level);
/*-- Columnの移動 --*/
getApplication()->getCurrentColumn()->setColumnIndex(
superPickedColumnId);
/*-- 選択の解除 --*/
if (getApplication()->getCurrentSelection()->getSelection())
getApplication()
->getCurrentSelection()
->getSelection()
->selectNone();
/*-- StyleIdの移動 --*/
getApplication()->setCurrentLevelStyleIndex(superPicked_StyleId);
return;
}
}
}
/*-- MultiLayerStylePicker ここまで --*/
//------------------------------------
TImageP image = getImage(false);
TToonzImageP ti = image;
TVectorImageP vi = image;
TXshSimpleLevel *level =
getApplication()->getCurrentLevel()->getSimpleLevel();
if ((!ti && !vi) || !level) return;
/*-- 画面外をpickしても拾えないようにする --*/
if (!m_viewer->getGeometry().contains(pos)) return;
int subsampling = level->getImageSubsampling(getCurrentFid());
StylePicker picker(image);
int styleId = picker.pickStyleId(
TScale(1.0 / subsampling) * pos + TPointD(-0.5, -0.5),
getPixelSize() * getPixelSize(), modeValue);
if (styleId < 0) return;
if (modeValue == 1) // LINES
{
/*-- pickLineモードのとき、取得Styleが0の場合はカレントStyleを変えない。
* --*/
if (styleId == 0) return;
/*--
* pickLineモードのときPurePaintの部分をクリックしてもカレントStyleを変えない
* --*/
if (ti &&
picker.pickTone(TScale(1.0 / subsampling) * pos +
TPointD(-0.5, -0.5)) == 255)
return;
}
/*--- Styleを選択している場合は選択を解除する ---*/
TSelection *selection =
TTool::getApplication()->getCurrentSelection()->getSelection();
if (selection) {
TStyleSelection *styleSelection =
dynamic_cast<TStyleSelection *>(selection);
if (styleSelection) styleSelection->selectNone();
}
getApplication()->setCurrentLevelStyleIndex(styleId);
}
/*-- MultiLayerStylePicker ここまで --*/
//------------------------------------
TImageP image = getImage(false);
TToonzImageP ti = image;
TVectorImageP vi = image;
TXshSimpleLevel *level =
getApplication()->getCurrentLevel()->getSimpleLevel();
if ((!ti && !vi) || !level) return;
void mouseMove(const TPointD &pos, const TMouseEvent &e) override {
if (!m_passivePick.getValue()) return;
/*--- PassiveにStyleを拾う機能 ---*/
PaletteController *controller =
TTool::getApplication()->getPaletteController();
/*-- 画面外をpickしても拾えないようにする --*/
if (!m_viewer->getGeometry().contains(pos)) return;
TImageP image = getImage(false);
TToonzImageP ti = image;
TVectorImageP vi = image;
TXshSimpleLevel *level =
getApplication()->getCurrentLevel()->getSimpleLevel();
if ((!ti && !vi) || !level || !m_viewer->getGeometry().contains(pos)) {
controller->notifyStylePassivePicked(-1, -1, -1);
int subsampling = level->getImageSubsampling(getCurrentFid());
StylePicker picker(image);
int styleId =
picker.pickStyleId(TScale(1.0 / subsampling) * pos + TPointD(-0.5, -0.5),
getPixelSize() * getPixelSize(), modeValue);
if (styleId < 0) return;
if (modeValue == 1) // LINES
{
/*-- pickLineモードのとき、取得Styleが0の場合はカレントStyleを変えない。
* --*/
if (styleId == 0) return;
/*--
* pickLineモードのときPurePaintの部分をクリックしてもカレントStyleを変えない
* --*/
if (ti &&
picker.pickTone(TScale(1.0 / subsampling) * pos +
TPointD(-0.5, -0.5)) == 255)
return;
}
int subsampling = level->getImageSubsampling(getCurrentFid());
StylePicker picker(image);
TPointD pickPos(TScale(1.0 / subsampling) * pos + TPointD(-0.5, -0.5));
int inkStyleId =
picker.pickStyleId(pickPos, getPixelSize() * getPixelSize(), 1);
int paintStyleId =
picker.pickStyleId(pickPos, getPixelSize() * getPixelSize(), 0);
int tone = picker.pickTone(pickPos);
controller->notifyStylePassivePicked(inkStyleId, paintStyleId, tone);
}
void onActivate() override {}
int getCursorId() const override {
bool isBlackBG = ToonzCheck::instance()->getChecks() & ToonzCheck::eBlackBg;
if (m_colorType.getValue() == LINES)
return (isBlackBG) ? ToolCursor::PickerCursorWhiteLine
: ToolCursor::PickerCursorLine;
else if (m_colorType.getValue() == AREAS)
return (isBlackBG) ? ToolCursor::PickerCursorWhiteArea
: ToolCursor::PickerCursorArea;
else // line&areas
return (isBlackBG) ? ToolCursor::PickerCursorWhite
: ToolCursor::PickerCursor;
/*--- Styleを選択している場合は選択を解除する ---*/
TSelection *selection =
TTool::getApplication()->getCurrentSelection()->getSelection();
if (selection) {
TStyleSelection *styleSelection =
dynamic_cast<TStyleSelection *>(selection);
if (styleSelection) styleSelection->selectNone();
}
} stylePickerTool;
getApplication()->setCurrentLevelStyleIndex(styleId);
}
void StylePickerTool::mouseMove(const TPointD &pos, const TMouseEvent &e) {
if (!m_passivePick.getValue()) return;
/*--- PassiveにStyleを拾う機能 ---*/
PaletteController *controller =
TTool::getApplication()->getPaletteController();
TImageP image = getImage(false);
TToonzImageP ti = image;
TVectorImageP vi = image;
TXshSimpleLevel *level =
getApplication()->getCurrentLevel()->getSimpleLevel();
if ((!ti && !vi) || !level || !m_viewer->getGeometry().contains(pos)) {
controller->notifyStylePassivePicked(-1, -1, -1);
return;
}
int subsampling = level->getImageSubsampling(getCurrentFid());
StylePicker picker(image);
TPointD pickPos(TScale(1.0 / subsampling) * pos + TPointD(-0.5, -0.5));
int inkStyleId =
picker.pickStyleId(pickPos, getPixelSize() * getPixelSize(), 1);
int paintStyleId =
picker.pickStyleId(pickPos, getPixelSize() * getPixelSize(), 0);
int tone = picker.pickTone(pickPos);
controller->notifyStylePassivePicked(inkStyleId, paintStyleId, tone);
}
int StylePickerTool::getCursorId() const {
bool isBlackBG = ToonzCheck::instance()->getChecks() & ToonzCheck::eBlackBg;
/* in case the "organize palette" option is active */
if (m_organizePalette.getValue())
return (isBlackBG) ? ToolCursor::PickerCursorWhiteOrganize
: ToolCursor::PickerCursorOrganize;
if (m_colorType.getValue() == LINES)
return (isBlackBG) ? ToolCursor::PickerCursorWhiteLine
: ToolCursor::PickerCursorLine;
else if (m_colorType.getValue() == AREAS)
return (isBlackBG) ? ToolCursor::PickerCursorWhiteArea
: ToolCursor::PickerCursorArea;
else // line&areas
return (isBlackBG) ? ToolCursor::PickerCursorWhite
: ToolCursor::PickerCursor;
}
bool StylePickerTool::onPropertyChanged(std::string propertyName) {
if (propertyName == m_organizePalette.getName()) {
if (m_organizePalette.getValue()) {
if (!startOrganizePalette()) {
m_organizePalette.setValue(false);
getApplication()->getCurrentTool()->notifyToolChanged();
return false;
}
} else {
std::cout << "End Organize Palette" << std::endl;
m_paletteToBeOrganized = NULL;
}
}
return true;
}
bool StylePickerTool::startOrganizePalette() {
/* Check if the organizing operation is available */
TXshLevel *level = getApplication()->getCurrentLevel()->getLevel();
if (!level) {
DVGui::error(tr("No current level."));
return false;
}
if (level->getType() != PLI_XSHLEVEL && level->getType() != TZP_XSHLEVEL &&
level->getType() != PLT_XSHLEVEL) {
DVGui::error(tr("Current level has no available palette."));
return false;
}
/* palette should have more than one page to organize */
TPalette *pal = NULL;
if (level->getType() == PLT_XSHLEVEL)
pal = level->getPaletteLevel()->getPalette();
else
pal = level->getSimpleLevel()->getPalette();
if (!pal || pal->getPageCount() < 2) {
DVGui::error(
tr("Palette must have more than one palette to be organized."));
return false;
}
m_paletteToBeOrganized = pal;
std::cout << "Start Organize Palette" << std::endl;
return true;
}
/*
If the working palette is changed, then deactivate the "organize palette"
toggle.
*/
void StylePickerTool::onImageChanged() {
std::cout << "StylePickerTool::onImageChanged" << std::endl;
if (!m_organizePalette.getValue() || !m_paletteToBeOrganized) return;
TXshLevel *level = getApplication()->getCurrentLevel()->getLevel();
if (!level) {
m_organizePalette.setValue(false);
getApplication()->getCurrentTool()->notifyToolChanged();
return;
}
TPalette *pal = NULL;
if (level->getType() == PLT_XSHLEVEL)
pal = level->getPaletteLevel()->getPalette();
else if (level->getSimpleLevel()) {
pal = level->getSimpleLevel()->getPalette();
}
if (!pal || pal != m_paletteToBeOrganized) {
m_organizePalette.setValue(false);
getApplication()->getCurrentTool()->notifyToolChanged();
return;
}
}
StylePickerTool stylePickerTool;

View file

@ -0,0 +1,54 @@
#pragma once
#ifndef STYLEPICKERTOOL_H
#define STYLEPICKERTOOL_H
#include "tools/tool.h"
#include "tproperty.h"
#include <QObject>
class StylePickerTool final : public TTool, public QObject {
int m_oldStyleId, m_currentStyleId;
TEnumProperty m_colorType;
TPropertyGroup m_prop;
TBoolProperty m_passivePick;
TBoolProperty m_organizePalette;
TPalette *m_paletteToBeOrganized;
bool startOrganizePalette();
public:
TPropertyGroup *getProperties(int targetType) override { return &m_prop; }
StylePickerTool();
ToolType getToolType() const override { return TTool::LevelReadTool; }
void draw() override {}
void leftButtonDown(const TPointD &pos, const TMouseEvent &e) override;
void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override;
void pick(const TPointD &pos, const TMouseEvent &e);
void mouseMove(const TPointD &pos, const TMouseEvent &e) override;
int getCursorId() const override;
bool onPropertyChanged(std::string propertyName);
bool isOrganizePaletteActive() { return m_organizePalette.getValue(); }
/*
This function is called when either frame/column/level/scene is switched or
either scene/level/object is changed (see tapp.cpp).
If the working palette is changed, then deactivate the "organize palette"
toggle.
*/
void onImageChanged() override;
};
#endif

View file

@ -50,6 +50,8 @@
<file>Resources/picker_style_white_line.png</file>
<file>Resources/picker_style_white_area.png</file>
<file>Resources/picker_style_white.png</file>
<file>Resources/picker_style_organize.png</file>
<file>Resources/picker_style_white_organize.png</file>
<file>Resources/picker_rgb.png</file>
<file>Resources/picker_rgb_white.png</file>
<file>Resources/fill_f.png</file>

View file

@ -2182,6 +2182,17 @@ StylePickerToolOptionsBox::StylePickerToolOptionsBox(
m_layout->addWidget(m_currentStyleLabel, 0);
m_layout->addStretch(1);
// retrieve the "organize palette" checkbox from the layout and insert
// into rightmost of the tool option bar
ToolOptionCheckbox *organizePaletteCB =
dynamic_cast<ToolOptionCheckbox *>(m_controls.value("Organize Palette"));
m_layout->removeWidget(organizePaletteCB);
m_layout->addWidget(new ToolOptionsBarSeparator(this), 0);
m_layout->addWidget(organizePaletteCB);
organizePaletteCB->setToolTip(
tr("With this option being activated, the picked style will be\nmoved to "
"the end of the first page of the palette."));
if (m_realTimePickMode) {
connect(m_realTimePickMode, SIGNAL(toggled(bool)), m_currentStyleLabel,
SLOT(setVisible(bool)));
@ -2340,6 +2351,7 @@ un po' di codice... */
m_panels[tool] = panel;
layout()->addWidget(panel);
emit newPanelCreated();
} else {
// il panel c'e' gia'.
panel = it->second;

View file

@ -100,6 +100,7 @@ set(MOC_HEADERS
selectionutils.h
shifttracetool.h
shortcutpopup.h
startuppopup.h
subcameramanager.h
subscenecommand.h
svncleanupdialog.h
@ -140,6 +141,8 @@ set(MOC_HEADERS
historypane.h
cleanupsettingspane.h
penciltestpopup.h
locatorpopup.h
styleshortcutswitchablepanel.h
# Tracker file
dummyprocessor.h
metnum.h
@ -232,6 +235,7 @@ set(SOURCES
scriptconsolepanel.cpp
shifttracetool.cpp
shortcutpopup.cpp
startuppopup.cpp
subcameramanager.cpp
timestretchpopup.cpp
trackerpopup.cpp
@ -298,6 +302,8 @@ set(SOURCES
historypane.cpp
cleanupsettingspane.cpp
penciltestpopup.cpp
locatorpopup.cpp
styleshortcutswitchablepanel.cpp
# Tracker file
dummyprocessor.cpp
metnum.cpp
@ -378,7 +384,7 @@ if(WIN32)
target_link_libraries(OpenToonz_${VERSION}
Qt5::WinMain Qt5::Core Qt5::Gui Qt5::Network Qt5::OpenGL Qt5::Svg Qt5::Xml
Qt5::Script Qt5::Widgets Qt5::PrintSupport Qt5::Multimedia
${GL_LIB} ${GLUT_LIB}
${GL_LIB} ${GLUT_LIB} strmiids
tnzcore tnzbase toonzlib colorfx tnzext image sound toonzqt tnztools tnzstdfx tfarm
)
elseif(APPLE)
@ -430,10 +436,10 @@ if(APPLE)
get_target_property(loc OpenToonz_${VERSION} MACOSX_BUNDLE_NAME)
message(" ==> App Bundle: " ${loc})
message(" ==> Mach-o: " ${bin})
foreach (lib ${EXTRA_LIBS})
foreach(lib ${EXTRA_LIBS})
message(" copy:" ${lib} "==>" ${CMAKE_CURRENT_BINARY_DIR}/OpenToonz_${VERSION}.app/Contents/MacOS/)
add_custom_command(TARGET OpenToonz_${VERSION} POST_BUILD COMMAND cp ${lib} ${CMAKE_CURRENT_BINARY_DIR}/OpenToonz_${VERSION}.app/Contents/MacOS/)
endforeach ()
endforeach()
add_custom_command(TARGET OpenToonz_${VERSION}
POST_BUILD COMMAND

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View file

@ -1292,6 +1292,7 @@ TXshSimpleLevel *CloneLevelUndo::cloneLevel(
assert(palette);
dstSl->setPalette(palette->clone());
dstSl->getPalette()->setDirtyFlag(true);
}
// The level clone shell was created. Now, clone the associated frames found
@ -1306,6 +1307,8 @@ TXshSimpleLevel *CloneLevelUndo::cloneLevel(
dstSl->setFrame(*ft, img->cloneImage());
}
dstSl->setDirtyFlag(true);
return dstSl;
}

View file

@ -26,6 +26,7 @@
#include <QLabel>
#include <QPushButton>
#include <QHBoxLayout>
#include <QGroupBox>
#include "cleanupsettingspane.h"
@ -80,6 +81,10 @@ void CleanupSaveInField::browseDirectory() {
CleanupSettingsPane::CleanupSettingsPane(QWidget *parent)
: QFrame(parent), m_attached(false) {
// Autocenter
m_autocenterBox = new QGroupBox(tr("Autocenter"), this);
m_pegHolesOm = new QComboBox(this);
m_fieldGuideOm = new QComboBox(this);
// Rotate&Flip
QFrame *rotFlipFrame = new QFrame(this);
m_rotateOm = new QComboBox(this);
@ -103,6 +108,19 @@ CleanupSettingsPane::CleanupSettingsPane(QWidget *parent)
QPushButton *loadBtn = new QPushButton(tr("Load"));
QPushButton *resetBtn = new QPushButton(tr("Reset"));
// Autocenter
m_autocenterBox->setCheckable(true);
QStringList pegbarHoles;
pegbarHoles << "Bottom"
<< "Top"
<< "Left"
<< "Right";
m_pegHolesOm->addItems(pegbarHoles);
std::vector<std::string> fdgNames;
CleanupParameters::getFdgNames(fdgNames);
for (int i = 0; i < (int)fdgNames.size(); i++)
m_fieldGuideOm->addItem(QString(fdgNames[i].c_str()));
// Rotate&Flip
rotFlipFrame->setObjectName("CleanupSettingsFrame");
QStringList rotate;
@ -137,6 +155,23 @@ CleanupSettingsPane::CleanupSettingsPane(QWidget *parent)
mainLay->setSpacing(2);
mainLay->setMargin(5);
{
// Autocenter
QGridLayout *autocenterLay = new QGridLayout();
autocenterLay->setMargin(5);
autocenterLay->setSpacing(3);
{
autocenterLay->addWidget(new QLabel(tr("Pegbar Holes")), 0, 0,
Qt::AlignRight | Qt::AlignVCenter);
autocenterLay->addWidget(m_pegHolesOm, 0, 1);
autocenterLay->addWidget(new QLabel(tr("Field Guide")), 1, 0,
Qt::AlignRight | Qt::AlignVCenter);
autocenterLay->addWidget(m_fieldGuideOm, 1, 1);
}
autocenterLay->setColumnStretch(0, 0);
autocenterLay->setColumnStretch(1, 1);
m_autocenterBox->setLayout(autocenterLay);
mainLay->addWidget(m_autocenterBox, 0);
// Rotate&Flip
QGridLayout *rotFlipLay = new QGridLayout();
rotFlipLay->setMargin(5);
@ -226,7 +261,14 @@ CleanupSettingsPane::CleanupSettingsPane(QWidget *parent)
//-----signal-slot connections
bool ret = true;
ret = ret && connect(m_rotateOm, SIGNAL(activated(int)),
ret = ret && connect(m_autocenterBox, SIGNAL(toggled(bool)),
SLOT(onGenericSettingsChange()));
ret = ret && connect(m_pegHolesOm, SIGNAL(activated(int)),
SLOT(onGenericSettingsChange()));
ret = ret && connect(m_fieldGuideOm, SIGNAL(activated(int)),
SLOT(onGenericSettingsChange()));
ret = ret && connect(m_rotateOm, SIGNAL(activated(int)),
SLOT(onGenericSettingsChange()));
ret = ret && connect(m_flipX, SIGNAL(stateChanged(int)),
SLOT(onGenericSettingsChange()));
@ -336,6 +378,15 @@ void CleanupSettingsPane::updateGui(bool needsPostProcess) {
void CleanupSettingsPane::updateGui(CleanupParameters *params,
CleanupParameters *oldParams) {
m_autocenterBox->setChecked(params->m_autocenterType ==
CleanupTypes::AUTOCENTER_FDG);
m_pegHolesOm->setCurrentIndex(params->m_pegSide - 1);
QString fieldName = QString::fromStdString(params->getFdgName());
int index = (fieldName.isEmpty()) ? 0 : m_fieldGuideOm->findText(fieldName);
assert(index != -1);
m_fieldGuideOm->setCurrentIndex(index);
m_rotateOm->setCurrentIndex(params->m_rotate / 90);
m_flipX->setChecked(params->m_flipx);
m_flipY->setChecked(params->m_flipy);
@ -462,6 +513,13 @@ void CleanupSettingsPane::onGenericSettingsChange() {
CleanupSettingsModel *model = CleanupSettingsModel::instance();
CleanupParameters *params = model->getCurrentParameters();
params->m_autocenterType = m_autocenterBox->isChecked()
? CleanupTypes::AUTOCENTER_FDG
: CleanupTypes::AUTOCENTER_NONE;
params->m_pegSide =
(CleanupTypes::PEGS_SIDE)(m_pegHolesOm->currentIndex() + 1);
params->setFdgByName(m_fieldGuideOm->currentText().toStdString());
params->m_rotate = m_rotateOm->currentIndex() * 90;
params->m_flipx = m_flipX->isChecked();
params->m_flipy = m_flipY->isChecked();

View file

@ -18,6 +18,7 @@ class QComboBox;
class QLabel;
class QCheckBox;
class CleanupPaletteViewer;
class QGroupBox;
namespace DVGui {
@ -47,6 +48,9 @@ public:
CleanupCameraSettingsWidget *m_cameraWidget;
private:
//----Autocenter
QGroupBox *m_autocenterBox;
QComboBox *m_pegHolesOm, *m_fieldGuideOm;
//----Rotate & Flip
QComboBox *m_rotateOm;
QCheckBox *m_flipX;

View file

@ -14,6 +14,7 @@
#include "tools/toolcommandids.h"
#include "tools/tool.h"
#include "tools/toolhandle.h"
#include "../tnztools/stylepickertool.h"
// TnzQt includes
#include "toonzqt/menubarcommand.h"
@ -84,7 +85,7 @@ ColorModelViewer::ColorModelViewer(QWidget *parent)
FlipConsole::eCompare | FlipConsole::eCustomize |
FlipConsole::eSave | FlipConsole::eFilledRaster |
FlipConsole::eDefineLoadBox | FlipConsole::eUseLoadBox |
FlipConsole::eDefineSubCamera)),
FlipConsole::eDefineSubCamera | FlipConsole::eLocator)),
eDontKeepFilesOpened, true)
, m_mode(0)
, m_currentRefImgPath(TFilePath()) {
@ -222,11 +223,28 @@ void ColorModelViewer::contextMenuEvent(QContextMenuEvent *event) {
connect(loadCurrentFrame, SIGNAL(triggered()), SLOT(loadCurrentFrame()));
menu.addAction(loadCurrentFrame);
if (!m_imageViewer->getImage()) {
menu.exec(event->globalPos());
return;
}
QAction *removeColorModel =
new QAction(QString(tr("Remove Color Model")), this);
connect(removeColorModel, SIGNAL(triggered()), SLOT(removeColorModel()));
menu.addAction(removeColorModel);
/* If there is at least one style with "picked pos" parameter, then enable
* repick command */
TRasterImageP ri = m_imageViewer->getImage();
if (ri && currentPalette->hasPickedPosStyle()) {
menu.addSeparator();
QAction *repickFromColorModelAct = new QAction(
QString(tr("Update Colors by Using Picked Positions")), this);
connect(repickFromColorModelAct, SIGNAL(triggered()),
SLOT(repickFromColorModel()));
menu.addAction(repickFromColorModelAct);
}
menu.addSeparator();
QString shortcut = QString::fromStdString(
@ -306,6 +324,19 @@ void ColorModelViewer::pick(const QPoint &p) {
if (styleSelection) styleSelection->selectNone();
}
/*
if the Style Picker tool is current and "organize palette" is activated,
then move the picked style to the first page of the palette.
*/
TTool *tool = TApp::instance()->getCurrentTool()->getTool();
if (tool->getName() == "T_StylePicker") {
StylePickerTool *spTool = dynamic_cast<StylePickerTool *>(tool);
if (spTool && spTool->isOrganizePaletteActive()) {
TPoint point = picker.getRasterPoint(pos);
PaletteCmd::organizePaletteStyle(ph, styleIndex, point);
}
}
ph->setStyleIndex(styleIndex);
}
@ -356,8 +387,16 @@ void ColorModelViewer::showEvent(QShowEvent *e) {
//-----------------------------------------------------------------------------
/*- ツールのTypeに合わせてPickのタイプも変え、カーソルも切り替える -*/
void ColorModelViewer::changePickType() {
TPropertyGroup *propGroup =
TApp::instance()->getCurrentTool()->getTool()->getProperties(0);
TTool *tool = TApp::instance()->getCurrentTool()->getTool();
if (tool->getName() == T_StylePicker) {
StylePickerTool *stylePickerTool = dynamic_cast<StylePickerTool *>(tool);
if (stylePickerTool->isOrganizePaletteActive()) {
setToolCursor(m_imageViewer, ToolCursor::PickerCursorOrganize);
return;
}
}
TPropertyGroup *propGroup = tool->getProperties(0);
/*- Propertyの無いツールの場合 -*/
if (!propGroup) {
m_mode = 2;
@ -573,6 +612,17 @@ void ColorModelViewer::onRefImageNotFound() {
"level."));
}
//-----------------------------------------------------------------------------
void ColorModelViewer::repickFromColorModel() {
TImageP img = m_imageViewer->getImage();
if (!img) return;
TPaletteHandle *ph =
TApp::instance()->getPaletteController()->getCurrentLevelPalette();
PaletteCmd::pickColorByUsingPickedPosition(ph, img);
}
//=============================================================================
OpenFloatingPanel openColorModelCommand(MI_OpenColorModel, "ColorModel",

View file

@ -48,6 +48,7 @@ protected:
* UseCurrentFrameのLevelに移動してきたときにCurrentFrameを格納しなおす
* -*/
void reloadCurrentFrame();
protected slots:
void showCurrentImage();
@ -62,6 +63,8 @@ protected slots:
* -*/
void changePickType();
void repickFromColorModel();
signals:
void refImageNotFound();
};

View file

@ -86,7 +86,7 @@ ComboViewerPanel::ComboViewerPanel(QWidget *parent, Qt::WindowFlags flags)
#else
ComboViewerPanel::ComboViewerPanel(QWidget *parent, Qt::WFlags flags)
#endif
: TPanel(parent) {
: StyleShortcutSwitchablePanel(parent) {
TApp *app = TApp::instance();
QFrame *hbox = new QFrame(this);
@ -103,6 +103,7 @@ ComboViewerPanel::ComboViewerPanel(QWidget *parent, Qt::WFlags flags)
ImageUtils::FullScreenWidget *fsWidget =
new ImageUtils::FullScreenWidget(this);
fsWidget->setWidget(m_sceneViewer = new SceneViewer(fsWidget));
m_sceneViewer->setIsStyleShortcutSwitchable();
#if defined(Q_OS_WIN) && (QT_VERSION >= 0x050500) && (QT_VERSION < 0x050600)
// Workaround for QTBUG-48288
@ -189,6 +190,9 @@ ComboViewerPanel::ComboViewerPanel(QWidget *parent, Qt::WFlags flags)
SLOT(update()));
ret = ret && connect(app->getCurrentScene(), SIGNAL(sceneSwitched()), this,
SLOT(onSceneSwitched()));
ret = ret && connect(m_toolOptions, SIGNAL(newPanelCreated()), this,
SLOT(updateTabFocus()));
assert(ret);
// note: initializeTitleBar() refers to m_sceneViewer
@ -336,7 +340,8 @@ ComboViewerPanel::~ComboViewerPanel() {
//-----------------------------------------------------------------------------
void ComboViewerPanel::showEvent(QShowEvent *) {
void ComboViewerPanel::showEvent(QShowEvent *event) {
StyleShortcutSwitchablePanel::showEvent(event);
TApp *app = TApp::instance();
TFrameHandle *frameHandle = app->getCurrentFrame();
TSceneHandle *sceneHandle = app->getCurrentScene();
@ -388,9 +393,6 @@ void ComboViewerPanel::showEvent(QShowEvent *) {
ret = ret && connect(app->getCurrentTool(), SIGNAL(toolSwitched()),
m_sceneViewer, SLOT(onToolSwitched()));
ret = ret && connect(sceneHandle, SIGNAL(preferenceChanged()), m_flipConsole,
SLOT(onPreferenceChanged()));
m_flipConsole->onPreferenceChanged();
assert(ret);
@ -403,7 +405,8 @@ void ComboViewerPanel::showEvent(QShowEvent *) {
//-----------------------------------------------------------------------------
void ComboViewerPanel::hideEvent(QHideEvent *) {
void ComboViewerPanel::hideEvent(QHideEvent *event) {
StyleShortcutSwitchablePanel::hideEvent(event);
TApp *app = TApp::instance();
disconnect(app->getCurrentScene());
disconnect(app->getCurrentLevel());
@ -781,3 +784,12 @@ bool ComboViewerPanel::isFrameAlreadyCached(int frame) {
}
//-----------------------------------------------------------------------------
void ComboViewerPanel::onPreferenceChanged(const QString &prefName) {
// if no name specified (on showEvent), then process all updates
if (prefName == "BlankCount" || prefName == "BlankColor" ||
prefName.isEmpty())
m_flipConsole->onPreferenceChanged();
StyleShortcutSwitchablePanel::onPreferenceChanged(prefName);
}

View file

@ -3,7 +3,7 @@
#ifndef COMBOVIEWER_PANE_INCLUDED
#define COMBOVIEWER_PANE_INCLUDED
#include "pane.h"
#include "styleshortcutswitchablepanel.h"
#include "sceneviewer.h"
#include "toonzqt/intfield.h"
#include "toonzqt/keyframenavigator.h"
@ -37,7 +37,8 @@ enum CV_Parts {
};
//-----------------------------------------------------------------------------
class ComboViewerPanel final : public TPanel, public FlipConsoleOwner {
class ComboViewerPanel final : public StyleShortcutSwitchablePanel,
public FlipConsoleOwner {
Q_OBJECT
SceneViewer *m_sceneViewer;
@ -118,6 +119,8 @@ protected slots:
void onSceneSwitched();
void enableFullPreview(bool enabled);
void enableSubCameraPreview(bool enabled);
void onPreferenceChanged(const QString &prefName) override;
};
#endif

View file

@ -55,6 +55,8 @@ TEnv::IntVar ConvertPopupRemoveDot("ConvertPopupRemoveDot", 1);
TEnv::IntVar ConvertPopupSaveToNopaint("ConvertPopupSaveToNopaint", 1);
TEnv::IntVar ConvertPopupAppendDefaultPalette(
"ConvertPopupAppendDefaultPalette", 0);
TEnv::IntVar ConvertPopupRemoveUnusedStyles("ConvertPopupRemoveUnusedStyles",
0);
//=============================================================================
// convertPopup
@ -200,7 +202,8 @@ void ConvertPopup::Converter::convertLevel(
// no AA source (retas)
TPaletteP palette = popup->readUserProvidedPalette();
ImageUtils::convertNaa2Tlv(sourceFileFullPath, dstFileFullPath, from, to,
m_parent->m_notifier, palette.getPointer());
m_parent->m_notifier, palette.getPointer(),
m_parent->m_removeUnusedStyles->isChecked());
} else {
convertLevelWithConvert2Tlv(sourceFileFullPath);
}
@ -441,6 +444,7 @@ ConvertPopup::ConvertPopup(bool specifyInput)
m_removeDotBeforeFrameNumber->setChecked(ConvertPopupRemoveDot != 0);
m_saveBackupToNopaint->setChecked(ConvertPopupSaveToNopaint != 0);
m_appendDefaultPalette->setChecked(ConvertPopupAppendDefaultPalette != 0);
m_removeUnusedStyles->setChecked(ConvertPopupRemoveUnusedStyles != 0);
//--- signal-slot connections
qRegisterMetaType<TFilePath>("TFilePath");
@ -470,6 +474,9 @@ ConvertPopup::ConvertPopup(bool specifyInput)
ret = ret && connect(m_convertFileFld, SIGNAL(pathChanged()), this,
SLOT(onFileInChanged()));
// update unable/enable of checkboxes
onTlvModeSelected(m_tlvMode->currentText());
assert(ret);
}
@ -522,7 +529,7 @@ QFrame *ConvertPopup::createTlvSettings() {
m_tlvMode = new QComboBox();
m_unpaintedFolderLabel = new QLabel(tr("Unpainted File Folder:"));
m_unpaintedFolder =
new DVGui::FileField(0, QString(tr("Same as Painted")), true);
new DVGui::FileField(0, QString(tr("Same as Painted")), true, true);
m_suffixLabel = new QLabel(tr(" Unpainted File Suffix:"));
m_unpaintedSuffix = new DVGui::LineEdit("_np");
m_applyAutoclose = new QCheckBox(tr("Apply Autoclose"));
@ -531,8 +538,12 @@ QFrame *ConvertPopup::createTlvSettings() {
m_appendDefaultPalette = new QCheckBox(tr("Append Default Palette"));
m_antialias = new QComboBox();
m_antialiasIntensity = new DVGui::IntLineEdit(0, 50, 0, 100);
m_palettePath = new DVGui::FileField(0, QString(CreateNewPalette), true);
m_tolerance = new DVGui::IntLineEdit(0, 0, 0, 255);
m_palettePath =
new DVGui::FileField(0, QString(CreateNewPalette), true, true);
m_tolerance = new DVGui::IntLineEdit(0, 0, 0, 255);
m_removeUnusedStyles =
new QCheckBox(tr("Remove Unused Styles from Input Palette"));
m_unpaintedFolder->setFileMode(QFileDialog::DirectoryOnly);
m_unpaintedSuffix->setMaximumWidth(40);
@ -585,8 +596,9 @@ QFrame *ConvertPopup::createTlvSettings() {
Qt::AlignRight | Qt::AlignVCenter);
gridLay->addWidget(m_tolerance, 4, 3);
gridLay->addWidget(m_appendDefaultPalette, 5, 1, 1, 3);
gridLay->addWidget(m_saveBackupToNopaint, 6, 1, 1, 3);
gridLay->addWidget(m_removeUnusedStyles, 5, 1, 1, 3);
gridLay->addWidget(m_appendDefaultPalette, 6, 1, 1, 3);
gridLay->addWidget(m_saveBackupToNopaint, 7, 1, 1, 3);
}
gridLay->setColumnStretch(0, 0);
gridLay->setColumnStretch(1, 1);
@ -597,6 +609,9 @@ QFrame *ConvertPopup::createTlvSettings() {
bool ret = true;
ret = ret && connect(m_antialias, SIGNAL(currentIndexChanged(int)), this,
SLOT(onAntialiasSelected(int)));
ret = ret && connect(m_palettePath, SIGNAL(pathChanged()), this,
SLOT(onPalettePathChanged()));
assert(ret);
frame->setVisible(false);
@ -652,8 +667,13 @@ void ConvertPopup::onTlvModeSelected(const QString &tlvMode) {
m_suffixLabel->setEnabled(usesTwoImages);
m_unpaintedSuffix->setEnabled(usesTwoImages);
m_antialias->setEnabled(TlvMode_PaintedFromNonAA != tlvMode);
m_palettePath->setEnabled(TlvMode_PaintedFromNonAA != tlvMode);
// m_palettePath->setEnabled(TlvMode_PaintedFromNonAA != tlvMode);
m_tolerance->setEnabled(TlvMode_PaintedFromNonAA != tlvMode);
m_appendDefaultPalette->setEnabled(TlvMode_PaintedFromNonAA != tlvMode);
m_removeUnusedStyles->setEnabled(TlvMode_PaintedFromNonAA == tlvMode &&
m_palettePath->getPath() !=
CreateNewPalette);
m_saveBackupToNopaint->setEnabled(TlvMode_Unpainted == tlvMode);
}
@ -1057,6 +1077,7 @@ void ConvertPopup::apply() {
ConvertPopupSaveToNopaint = m_saveBackupToNopaint->isChecked() ? 1 : 0;
ConvertPopupAppendDefaultPalette =
m_appendDefaultPalette->isChecked() ? 1 : 0;
ConvertPopupRemoveUnusedStyles = m_removeUnusedStyles->isChecked() ? 1 : 0;
// parameters are ok: close the dialog first
close();
@ -1174,6 +1195,14 @@ void ConvertPopup::onFormatChanged(const QString &ext) {
//-------------------------------------------------------------------
void ConvertPopup::onPalettePathChanged() {
m_removeUnusedStyles->setEnabled(
m_tlvMode->currentText() == TlvMode_PaintedFromNonAA &&
m_palettePath->getPath() != CreateNewPalette);
}
//-------------------------------------------------------------------
bool ConvertPopup::isSaveTlvBackupToNopaintActive() {
return m_fileFormat->currentText() ==
TlvExtension /*-- tlvが選択されている --*/

View file

@ -87,6 +87,7 @@ public slots:
void onLevelConverted(const TFilePath &fullPath);
void onFormatChanged(const QString &);
void onPalettePathChanged();
protected:
Convert2Tlv *makeTlvConverter(const TFilePath &sourceFilePath);
@ -104,7 +105,7 @@ private:
DVGui::ColorField *m_bgColorField;
QFrame *m_tlvFrame;
QCheckBox *m_applyAutoclose, *m_removeDotBeforeFrameNumber,
*m_saveBackupToNopaint, *m_appendDefaultPalette;
*m_saveBackupToNopaint, *m_appendDefaultPalette, *m_removeUnusedStyles;
DVGui::CheckBox *m_skip;
QComboBox *m_antialias, *m_tlvMode, *m_fileFormat;
QLabel *m_bgColorLabel, *m_suffixLabel, *m_unpaintedFolderLabel,

View file

@ -148,7 +148,8 @@ QMutex levelFileMutex;
inline bool isMultipleFrameType(std::string type) {
return (type == "tlv" || type == "tzl" || type == "pli" || type == "mov" ||
type == "avi" || type == "3gp");
type == "avi" || type == "3gp" || type == "gif" || type == "mp4" ||
type == "webm");
}
//=============================================================================

View file

@ -485,17 +485,15 @@ bool LoadScenePopup::execute() {
void LoadScenePopup::initFolder() { setInitialFolderByCurrentRoom(); }
void LoadScenePopup::setInitialFolderByCurrentRoom() {
QString roomName = TApp::instance()->getCurrentRoomName();
QString roomName = TApp::instance()->getCurrentRoomName();
TProjectP project = TProjectManager::instance()->getCurrentProject();
TFilePath scenePath;
if (roomName == "Cleanup" || roomName == "InknPaint")
scenePath = TProjectManager::instance()->getCurrentProject()->getFolder(
TProject::Drawings);
scenePath = project->getFolder(TProject::Drawings, true);
else if (roomName == "PltEdit")
scenePath = TProjectManager::instance()->getCurrentProject()->getFolder(
TProject::Palettes);
scenePath = project->getFolder(TProject::Palettes, true);
else
scenePath = TProjectManager::instance()->getCurrentProject()->getFolder(
TProject::Scenes);
scenePath = project->getFolder(TProject::Scenes, true);
setFolder(scenePath);
}

View file

@ -179,7 +179,8 @@ public:
FlipBook(QWidget *parent = 0, QString viewerTitle = QString(),
UINT flipConsoleButtonMask = FlipConsole::cFullConsole &
(~(FlipConsole::eFilledRaster |
FlipConsole::eDefineSubCamera)),
FlipConsole::eDefineSubCamera |
FlipConsole::eLocator)),
UCHAR flags = 0, bool isColorModel = false);
~FlipBook();
void setLevel(const TFilePath &path, TPalette *palette = 0, int from = -1,

View file

@ -1176,17 +1176,21 @@ bool IoCmd::saveSceneIfNeeded(QString msg) {
QString question;
question = QObject::tr(
"%1: the current scene has been modified.\n"
"Do you want to save your changes?")
"What would you like to do?")
.arg(msg);
int ret = DVGui::MsgBox(question, QObject::tr("Save"),
QObject::tr("Discard"), QObject::tr("Cancel"), 0);
if (ret == 0 || ret == 3) {
int ret = DVGui::MsgBox(
question, QObject::tr("Save All"), QObject::tr("Save Scene Only"),
QObject::tr("Discard Changes"), QObject::tr("Cancel"), 0);
if (ret == 0 || ret == 4) {
// cancel (or closed message box window)
return false;
} else if (ret == 1) {
// save all
if (!IoCmd::saveAll()) return false;
} else if (ret == 2) {
// save
if (!IoCmd::saveScene()) return false;
} else if (ret == 2) {
} else if (ret == 3) {
}
isLevelOrSceneIsDirty = true;
@ -1203,21 +1207,25 @@ bool IoCmd::saveSceneIfNeeded(QString msg) {
if (!dirtyResources.empty()) {
QString question;
question =
msg + ":" + QObject::tr(" Following file(s) are modified.\n\n");
question = msg + ":" +
QObject::tr(" The following file(s) have been modified.\n\n");
for (int i = 0; i < dirtyResources.size(); i++) {
question += " " + dirtyResources[i] + "\n";
}
question +=
QObject::tr("\nAre you sure to ") + msg + QObject::tr(" anyway ?");
question += QObject::tr("\nWhat would you like to do? ");
int ret =
DVGui::MsgBox(question, QObject::tr("OK"), QObject::tr("Cancel"), 0);
if (ret == 0 || ret == 2) {
DVGui::MsgBox(question, QObject::tr("Save Changes"),
msg + QObject::tr(" Anyway"), QObject::tr("Cancel"), 0);
if (ret == 0 || ret == 3) {
// cancel (or closed message box window)
return false;
} else if (ret == 1) {
// ok
// save non scene files
IoCmd::saveNonSceneFiles();
return false;
} else if (ret == 2) {
// quit
}
isLevelOrSceneIsDirty = true;
@ -1604,7 +1612,7 @@ bool IoCmd::saveLevel(TXshSimpleLevel *sl) {
}
//===========================================================================
// IoCmd::saveSound(soundPath, soundColumn, overwrite)
// IoCmd::saveAll()
//---------------------------------------------------------------------------
bool IoCmd::saveAll() {
@ -1626,6 +1634,26 @@ bool IoCmd::saveAll() {
return result;
}
//===========================================================================
// IoCmd::saveNonSceneFiles()
//---------------------------------------------------------------------------
void IoCmd::saveNonSceneFiles() {
// try to save non scene files
TApp *app = TApp::instance();
ToonzScene *scene = app->getCurrentScene()->getScene();
bool untitled = scene->isUntitled();
SceneResources resources(scene, 0);
resources.save(scene->getScenePath());
if (untitled) scene->setUntitled();
resources.updatePaths();
// for update title bar
app->getCurrentLevel()->notifyLevelTitleChange();
app->getCurrentPalette()->notifyPaletteTitleChanged();
}
//===========================================================================
// IoCmd::saveSound(soundPath, soundColumn, overwrite)
//---------------------------------------------------------------------------
@ -2738,3 +2766,12 @@ public:
SaveAllCommandHandler() : MenuItemHandler(MI_SaveAll) {}
void execute() override { IoCmd::saveAll(); }
} saveAllCommandHandler;
//=============================================================================
// Save all levels
//-----------------------------------------------------------------------------
class SaveAllLevelsCommandHandler : public MenuItemHandler {
public:
SaveAllLevelsCommandHandler() : MenuItemHandler(MI_SaveAllLevels) {}
void execute() { IoCmd::saveNonSceneFiles(); }
} saveAllLevelsCommandHandler;

View file

@ -197,6 +197,8 @@ bool saveLevel(TXshSimpleLevel *sl);
bool saveAll();
void saveNonSceneFiles();
bool saveSound(const TFilePath &fp, TXshSoundLevel *sc, bool overwrite);
bool saveSound(TXshSoundLevel *sc);

View file

@ -0,0 +1,117 @@
#include "locatorpopup.h"
// TnzLib includes
#include "toonz/txshlevelhandle.h"
#include "toonz/tframehandle.h"
#include "toonz/preferences.h"
#include "toonz/stage2.h"
// Tnz6 includes
#include "tapp.h"
#include "sceneviewer.h"
#include <QVBoxLayout>
LocatorPopup::LocatorPopup(QWidget *parent)
: QDialog(parent), m_initialZoom(true) {
m_viewer = new SceneViewer(NULL);
m_viewer->setParent(parent);
m_viewer->setIsLocator();
//---- layout
QVBoxLayout *mainLayout = new QVBoxLayout();
mainLayout->setMargin(0);
mainLayout->addWidget(m_viewer, 1);
setLayout(mainLayout);
bool ret = true;
// When zoom changed, change window title.
ret = connect(m_viewer, SIGNAL(onZoomChanged()), SLOT(changeWindowTitle()));
ret = ret &&
connect(m_viewer, SIGNAL(previewToggled()), SLOT(changeWindowTitle()));
assert(ret);
resize(400, 400);
}
//-----------------------------------------------------------------------------
void LocatorPopup::onChangeViewAff(const TPointD &pos) {
TAffine curAff = m_viewer->getSceneMatrix();
TAffine newAff(curAff.a11, 0, -pos.x * curAff.a11, 0, curAff.a22,
-pos.y * curAff.a22);
m_viewer->setViewMatrix(newAff, 0);
m_viewer->setViewMatrix(newAff, 1);
m_viewer->update();
}
//-----------------------------------------------------------------------------
void LocatorPopup::showEvent(QShowEvent *) {
// zoom the locator for the first time
if (m_initialZoom) {
for (int z = 0; z < 4; z++) m_viewer->zoomQt(true, false);
m_initialZoom = false;
}
TApp *app = TApp::instance();
TFrameHandle *frameHandle = app->getCurrentFrame();
TXshLevelHandle *levelHandle = app->getCurrentLevel();
bool ret = true;
ret = ret && connect(frameHandle, SIGNAL(frameSwitched()), this,
SLOT(changeWindowTitle()));
ret = ret && connect(levelHandle, SIGNAL(xshLevelSwitched(TXshLevel *)), this,
SLOT(changeWindowTitle()));
assert(ret);
changeWindowTitle();
}
//-----------------------------------------------------------------------------
void LocatorPopup::hideEvent(QHideEvent *) {
TApp *app = TApp::instance();
disconnect(app->getCurrentLevel());
disconnect(app->getCurrentFrame());
}
//-----------------------------------------------------------------------------
void LocatorPopup::changeWindowTitle() {
TApp *app = TApp::instance();
// put the titlebar texts in this string
QString name = tr("Locator");
bool showZoomFactor = false;
// if the frame type is "scene editing"
if (app->getCurrentFrame()->isEditingScene()) {
if (m_viewer->isPreviewEnabled()) showZoomFactor = true;
// If the current level exists and some option is set in the preference,
// set the zoom value to the current level's dpi
else if (Preferences::instance()
->isActualPixelViewOnSceneEditingModeEnabled() &&
app->getCurrentLevel()->getSimpleLevel() &&
!CleanupPreviewCheck::instance()
->isEnabled() // cleanup preview must be OFF
&&
!CameraTestCheck::instance()
->isEnabled()) // camera test mode must be OFF neither
showZoomFactor = true;
}
// if the frame type is "level editing"
else {
TXshLevel *level = app->getCurrentLevel()->getLevel();
if (level) showZoomFactor = true;
}
if (showZoomFactor) {
name = name + " Zoom : " +
QString::number((int)(100.0 * sqrt(m_viewer->getViewMatrix().det()) *
m_viewer->getDpiFactor())) +
"%";
}
setWindowTitle(name);
}

View file

@ -0,0 +1,34 @@
#pragma once
#ifndef LOCATORPOPUP_H
#define LOCATORPOPUP_H
#include "tgeometry.h"
#include <QDialog>
class SceneViewer;
//=============================================================================
// LoactorPopup
//-----------------------------------------------------------------------------
class LocatorPopup : public QDialog {
Q_OBJECT
SceneViewer* m_viewer;
bool m_initialZoom;
public:
LocatorPopup(QWidget* parent = 0);
SceneViewer* viewer() { return m_viewer; }
void onChangeViewAff(const TPointD& curPos);
protected:
void showEvent(QShowEvent*);
void hideEvent(QHideEvent*);
protected slots:
void changeWindowTitle();
};
#endif

View file

@ -124,7 +124,7 @@ MagpieFileImportPopup::MagpieFileImportPopup()
FlipConsole::eRed | FlipConsole::eGreen | FlipConsole::eBlue |
FlipConsole::eMatte | FlipConsole::eDefineSubCamera |
FlipConsole::eDefineLoadBox | FlipConsole::eUseLoadBox |
FlipConsole::eFilledRaster));
FlipConsole::eFilledRaster | FlipConsole::eLocator));
m_flipbook = new FlipBook(this, tr("Import Magpie File"), buttonMask);
m_flipbook->setFixedHeight(250);
frameLayout->addWidget(m_flipbook);

Some files were not shown because too many files have changed in this diff Show more