diff --git a/ci-scripts/osx/travis-build.sh b/ci-scripts/osx/travis-build.sh index 7fb8b47..d5277b9 100644 --- a/ci-scripts/osx/travis-build.sh +++ b/ci-scripts/osx/travis-build.sh @@ -3,8 +3,10 @@ pushd thirdparty/tiff-4.0.3 ./configure && make popd cd toonz && mkdir build && cd build +QTVERSION=`ls /usr/local/Cellar/qt` +echo "QT Version detected: $QTVERSION" cmake ../sources \ - -DQT_PATH=/usr/local/Cellar/qt/5.12.0/lib/ \ + -DQT_PATH=/usr/local/Cellar/qt/$QTVERSION/lib/ \ -DTIFF_INCLUDE_DIR=../../thirdparty/tiff-4.0.3/libtiff/ \ -DSUPERLU_INCLUDE_DIR=../../thirdparty/superlu/SuperLU_4.1/include/ make -j 2 diff --git a/doc/how_to_build_linux.md b/doc/how_to_build_linux.md index 3875b22..1cb3ae7 100644 --- a/doc/how_to_build_linux.md +++ b/doc/how_to_build_linux.md @@ -18,7 +18,7 @@ Building OpenToonz from source requires the following dependencies: ### 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 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 libjson-c-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 libjson-c-dev qtwayland5 ``` For newest versions of OS you may install libmypaint from repository and don't need to build it from source: @@ -171,7 +171,8 @@ If you need to debug the application, you should be able to use `cmake -DCMAKE_B You can now run the application: ``` -$ LD_LIBRARY_PATH=./lib/opentoonz:$LD_LIBRARY_PATH ./bin/OpenToonz +$ LD_LIBRARY_PATH=./lib/opentoonz:$LD_LIBRARY_PATH +$ ./bin/OpenToonz ``` ### Performing a System Installation diff --git a/stuff/config/current.txt b/stuff/config/current.txt index 19e32cf..a6cd128 100644 --- a/stuff/config/current.txt +++ b/stuff/config/current.txt @@ -240,6 +240,7 @@ "STD_linearGradientFx.wave_phase" "Phase" "STD_linearGradientFx.color1" "Color 1" "STD_linearGradientFx.color2" "Color 2" + "STD_linearGradientFx.curveType" "Type" "STD_linearWaveFx" "Linear Wave" "STD_linearWaveFx.period" "Period" @@ -267,6 +268,7 @@ "STD_multiLinearGradientFx.wave_frequency" "Frequency" "STD_multiLinearGradientFx.wave_phase" "Phase" "STD_multiLinearGradientFx.colors" "Colors" + "STD_multiLinearGradientFx.curveType" "Type" "STD_localBlurFx" "Local Blur" "STD_localBlurFx.value" "Intensity" @@ -324,6 +326,7 @@ "STD_radialGradientFx.innerperiod" "Inner Size" "STD_radialGradientFx.color1" "Color 1" "STD_radialGradientFx.color2" "Color 2" + "STD_radialGradientFx.curveType" "Type" "STD_randomWaveFx" "Random Wave" @@ -358,6 +361,7 @@ "STD_multiRadialGradientFx.count" "Quantity" "STD_multiRadialGradientFx.cycle" "Cycle" "STD_multiRadialGradientFx.colors" "Colors" + "STD_multiRadialGradientFx.curveType" "Type" "STD_raylitFx" "Raylit" "STD_raylitFx.p" "Center X" diff --git "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/colorfx.qm" "b/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/colorfx.qm" deleted file mode 100644 index 471f2a8..0000000 Binary files "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/colorfx.qm" and /dev/null differ diff --git "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/image.qm" "b/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/image.qm" deleted file mode 100644 index 1a1ad46..0000000 Binary files "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/image.qm" and /dev/null differ diff --git "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/tnzcore.qm" "b/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/tnzcore.qm" deleted file mode 100644 index dfc27f2..0000000 Binary files "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/tnzcore.qm" and /dev/null differ diff --git "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/tnztools.qm" "b/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/tnztools.qm" deleted file mode 100644 index 7247ea0..0000000 Binary files "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/tnztools.qm" and /dev/null differ diff --git "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/toonz.qm" "b/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/toonz.qm" deleted file mode 100644 index 7b7d180..0000000 Binary files "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/toonz.qm" and /dev/null differ diff --git "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/toonzlib.qm" "b/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/toonzlib.qm" deleted file mode 100644 index 1086b4b..0000000 Binary files "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/toonzlib.qm" and /dev/null differ diff --git "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/toonzqt.qm" "b/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/toonzqt.qm" deleted file mode 100644 index fe0135b..0000000 Binary files "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/toonzqt.qm" and /dev/null differ diff --git "a/stuff/config/loc/\304\214e\305\241tina/colorfx.qm" "b/stuff/config/loc/\304\214e\305\241tina/colorfx.qm" new file mode 100644 index 0000000..61f3988 Binary files /dev/null and "b/stuff/config/loc/\304\214e\305\241tina/colorfx.qm" differ diff --git "a/stuff/config/loc/\304\214e\305\241tina/image.qm" "b/stuff/config/loc/\304\214e\305\241tina/image.qm" new file mode 100644 index 0000000..7c40f21 Binary files /dev/null and "b/stuff/config/loc/\304\214e\305\241tina/image.qm" differ diff --git "a/stuff/config/loc/\304\214e\305\241tina/tnzcore.qm" "b/stuff/config/loc/\304\214e\305\241tina/tnzcore.qm" new file mode 100644 index 0000000..0eb4e7b Binary files /dev/null and "b/stuff/config/loc/\304\214e\305\241tina/tnzcore.qm" differ diff --git "a/stuff/config/loc/\304\214e\305\241tina/tnztools.qm" "b/stuff/config/loc/\304\214e\305\241tina/tnztools.qm" new file mode 100644 index 0000000..2162a73 Binary files /dev/null and "b/stuff/config/loc/\304\214e\305\241tina/tnztools.qm" differ diff --git "a/stuff/config/loc/\304\214e\305\241tina/toonz.qm" "b/stuff/config/loc/\304\214e\305\241tina/toonz.qm" new file mode 100644 index 0000000..c6bc32c Binary files /dev/null and "b/stuff/config/loc/\304\214e\305\241tina/toonz.qm" differ diff --git "a/stuff/config/loc/\304\214e\305\241tina/toonzlib.qm" "b/stuff/config/loc/\304\214e\305\241tina/toonzlib.qm" new file mode 100644 index 0000000..f466003 Binary files /dev/null and "b/stuff/config/loc/\304\214e\305\241tina/toonzlib.qm" differ diff --git "a/stuff/config/loc/\304\214e\305\241tina/toonzqt.qm" "b/stuff/config/loc/\304\214e\305\241tina/toonzqt.qm" new file mode 100644 index 0000000..9a3899e Binary files /dev/null and "b/stuff/config/loc/\304\214e\305\241tina/toonzqt.qm" differ diff --git "a/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/colorfx.qm" "b/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/colorfx.qm" new file mode 100644 index 0000000..471f2a8 Binary files /dev/null and "b/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/colorfx.qm" differ diff --git "a/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/image.qm" "b/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/image.qm" new file mode 100644 index 0000000..1a1ad46 Binary files /dev/null and "b/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/image.qm" differ diff --git "a/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/tnzcore.qm" "b/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/tnzcore.qm" new file mode 100644 index 0000000..dfc27f2 Binary files /dev/null and "b/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/tnzcore.qm" differ diff --git "a/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/tnztools.qm" "b/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/tnztools.qm" new file mode 100644 index 0000000..7247ea0 Binary files /dev/null and "b/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/tnztools.qm" differ diff --git "a/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/toonz.qm" "b/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/toonz.qm" new file mode 100644 index 0000000..7b7d180 Binary files /dev/null and "b/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/toonz.qm" differ diff --git "a/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/toonzlib.qm" "b/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/toonzlib.qm" new file mode 100644 index 0000000..1086b4b Binary files /dev/null and "b/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/toonzlib.qm" differ diff --git "a/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/toonzqt.qm" "b/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/toonzqt.qm" new file mode 100644 index 0000000..fe0135b Binary files /dev/null and "b/stuff/config/loc/\320\240\321\203\321\201\321\201\320\272\320\270\320\271/toonzqt.qm" differ diff --git "a/stuff/config/loc/\346\227\245\346\234\254\350\252\236/tnztools.qm" "b/stuff/config/loc/\346\227\245\346\234\254\350\252\236/tnztools.qm" index 69617a9..183c7aa 100644 Binary files "a/stuff/config/loc/\346\227\245\346\234\254\350\252\236/tnztools.qm" and "b/stuff/config/loc/\346\227\245\346\234\254\350\252\236/tnztools.qm" differ diff --git "a/stuff/config/loc/\346\227\245\346\234\254\350\252\236/toonz.qm" "b/stuff/config/loc/\346\227\245\346\234\254\350\252\236/toonz.qm" index 5786124..87f2123 100644 Binary files "a/stuff/config/loc/\346\227\245\346\234\254\350\252\236/toonz.qm" and "b/stuff/config/loc/\346\227\245\346\234\254\350\252\236/toonz.qm" differ diff --git "a/stuff/config/loc/\346\227\245\346\234\254\350\252\236/toonzqt.qm" "b/stuff/config/loc/\346\227\245\346\234\254\350\252\236/toonzqt.qm" index a28868f..ef5146b 100644 Binary files "a/stuff/config/loc/\346\227\245\346\234\254\350\252\236/toonzqt.qm" and "b/stuff/config/loc/\346\227\245\346\234\254\350\252\236/toonzqt.qm" differ diff --git a/stuff/config/qss/Blue/Blue.qss b/stuff/config/qss/Blue/Blue.qss index 916b68d..77fc2b0 100644 --- a/stuff/config/qss/Blue/Blue.qss +++ b/stuff/config/qss/Blue/Blue.qss @@ -1 +1 @@ -.button-show,#LoadLevelShowButton,#CleanupSettingsShowButton,#OutputSettingsShowButton,#FxSettingsPreviewShowButton{image:url('../Default/imgs/white/plus.svg');image-position:center center;margin:0;padding:1;min-width:10;min-height:10}.button-show:checked,#LoadLevelShowButton:checked,#CleanupSettingsShowButton:checked,#OutputSettingsShowButton:checked,#FxSettingsPreviewShowButton:checked{background-color:#2b2c2d;border-color:#262728;image:url('../Default/imgs/white/minus.svg')}.button-show:checked:pressed,#LoadLevelShowButton:checked:pressed,#CleanupSettingsShowButton:checked:pressed,#OutputSettingsShowButton:checked:pressed,#FxSettingsPreviewShowButton:checked:pressed{background-color:#2b2c2d;border-color:#262728}.button-show:checked:hover,#LoadLevelShowButton:checked:hover,#CleanupSettingsShowButton:checked:hover,#OutputSettingsShowButton:checked:hover,#FxSettingsPreviewShowButton:checked:hover{background-color:#303133}.button-tool,QToolButton,#CameraSettingsRadioButton::indicator,#ForceSquaredPixelButton,#SchematicBottomFrame QToolBar QToolButton,#EditToolLockButton::indicator,#flipCustomize{background-color:rgba(255,255,255,0);border:1 solid rgba(255,255,255,0);border-radius:2;color:#e4e5e9;margin:1;padding:0}.button-tool:hover,QToolButton:hover,#CameraSettingsRadioButton::indicator:hover,#ForceSquaredPixelButton:hover,#colorSliderAddButton:hover,#colorSliderSubButton:hover,#SchematicBottomFrame QToolBar QToolButton:hover,#EditToolLockButton::indicator:hover,#flipCustomize:hover{background-color:#6e7174;border-color:#6e7174;color:#e4e5e9}.button-tool:pressed,QToolButton:pressed,#CameraSettingsRadioButton::indicator:pressed,#ForceSquaredPixelButton:pressed,#colorSliderAddButton:pressed,#colorSliderSubButton:pressed,#SchematicBottomFrame QToolBar QToolButton:pressed,#EditToolLockButton::indicator:pressed,#flipCustomize:pressed{background-color:#2b2c2d;border-color:#262728;color:#e4e5e9}.button-tool:checked,QToolButton:checked,#CameraSettingsRadioButton::indicator:checked,#ForceSquaredPixelButton:checked,#SchematicBottomFrame QToolBar QToolButton:checked,#EditToolLockButton::indicator:checked,#flipCustomize:checked{background-color:#5385a6;border-color:#5385a6;color:#fff}.button-tool:checked:hover,QToolButton:checked:hover,#CameraSettingsRadioButton::indicator:checked:hover,#ForceSquaredPixelButton:checked:hover,#SchematicBottomFrame QToolBar QToolButton:checked:hover,#EditToolLockButton::indicator:checked:hover,#flipCustomize:checked:hover{background-color:#6c98b6;border-color:#6c98b6}.button-tool:disabled,QToolButton:disabled,#CameraSettingsRadioButton::indicator:disabled,#ForceSquaredPixelButton:disabled,#SchematicBottomFrame QToolBar QToolButton:disabled,#EditToolLockButton::indicator:disabled,#flipCustomize:disabled{color:#808080}.button-flat,PaletteViewer QToolBar QToolButton{background-color:none;border:0;border-radius:0;margin:0}.button-flat:hover,PaletteViewer QToolBar QToolButton:hover{background-color:#6e7174}.button-flat:pressed,PaletteViewer QToolBar QToolButton:pressed{background-color:#212223}.frame,.GroupBox,#LoadLevelFrame,#PsdSettingsGroupBox,#CleanupSettingsFrame,#OutputSettingsBox,#OutputSettingsCameraBox,#SolidLineFrame,#FunctionParametersPanel,QGroupBox{border:1 solid #212223;border-radius:2}.tab-container,#TabBarContainer{background-color:transparent;qproperty-BottomAboveLineColor:#323435;qproperty-BottomBelowLineColor:#212223}.tab-flat,#StyleEditorTabBar::tab,#PaletteTabBar::tab,#FxSettingsTabBar::tab{background-color:#323435;border-right:1 solid #212223;border-bottom:1 solid #212223;color:#94969a;padding:3 4 3 4}.tab-flat:hover,#StyleEditorTabBar::tab:hover,#PaletteTabBar::tab:hover,#FxSettingsTabBar::tab:hover{background-color:#414345;color:#94969a}.tab-flat:selected,#StyleEditorTabBar::tab:selected,#PaletteTabBar::tab:selected,#FxSettingsTabBar::tab:selected{background-color:#414345;color:#fff;border-bottom-color:#414345}.tab-flat:only-one,#StyleEditorTabBar::tab:only-one,#PaletteTabBar::tab:only-one,#FxSettingsTabBar::tab:only-one{margin:0}.tab-round{background-color:#323435;border-top:1 solid #212223;border-right:1 solid #212223;border-left:1 solid #212223;border-bottom:1 solid #212223;color:#94969a;margin:3 -1 0 0;padding:2 7 1 7}.tab-round:hover{background-color:#414345;color:#94969a}.tab-round:selected{background-color:#414345;border-top-right-radius:2;border-top-left-radius:2;border-bottom-color:#414345;color:#fff;margin:1 -1 -1 0;padding:2 7 2 7}.tab-round:only-one{margin:1 0 0 0;padding:3 7 3 7}.tab-round:last{margin-right:0;border-top-right-radius:2}.tab-round:first{border-top-left-radius:2}QWidget{background-color:#414345;color:#d6d8dd}QWidget:disabled{color:#808080}QFrame{border:0;margin:0;padding:0}QToolTip,#helpToolTip{background-color:#fff;border:1 solid #000;color:#000;padding:1 1}#DockSeparator,QMainWindow::separator,QSplitter::handle{background-color:#141516;height:4;width:4}#TDockPlaceholder{background-color:#F77272}TPanel{background-color:#141516}#TopBar{background:#414345;border:0;border-bottom:1 solid #212223;height:21}#TopBar #EditToolLockButton{background:#414345;spacing:0}#TopBar #EditToolLockButton::indicator{background:none;border:none;height:18;margin:1 2 0 0;padding-left:0;padding-right:0}#TopBarTabContainer{background-color:#414345;margin-bottom:1}#StackedMenuBar{border:0;margin:0;padding:0}QMenuBar{background-color:#414345;border:0}QMenuBar::item{background-color:#414345;border-left:1 solid #414345;margin:0;padding:3 5}QMenuBar::item:selected{background-color:rgba(255,255,255,0.15);color:#d6d8dd}QMenuBar::item:pressed{background-color:#5385a6;color:#fff}#TopBarTab{margin:0;padding:0}#TopBarTab::tab{background-color:#323435;border-top:1 solid #212223;border-right:1 solid #212223;color:#94969a;margin:0 0 0 0;padding:2 8 3 8}#TopBarTab::tab:hover{background-color:#414345;color:#94969a}#TopBarTab::tab:selected{background-color:#414345;color:#fff}#TopBarTab::tab:first{border-left:1 solid #212223}#TopBarTab::tab:last{border-right:1 solid #212223}QMenu{background-color:#414345;border:1 solid #212223;padding:2 0}QMenu::item{padding:3 28}QMenu::item:selected{background-color:#5385a6;color:#fff}QMenu::item:checked{color:#d6d8dd}QMenu::item:checked:selected{background-color:#5385a6;color:#fff}QMenu::item:disabled{background:none;color:#808080}QMenu::item:disabled:selected{border-color:transparent}QMenu::separator{border-top:1 solid #212223;height:0;margin:2 0}QMenu::icon{border-radius:2;margin:0 0 0 3;padding:1}QMenu::icon:checked{background-color:#5385a6}QMenu::indicator{margin-left:7}TPanelTitleBar{background-color:#323435;border-color:#212223;border-style:solid;border-width:0 0 1 0;height:20;min-height:20;qproperty-TitleColor:#8c9093;qproperty-ActiveTitleColor:#43AEE5;qproperty-BorderPixmap:url('none');qproperty-ActiveBorderPixmap:url('../Default/imgs/white/none');qproperty-FloatBorderPixmap:url('none');qproperty-FloatActiveBorderPixmap:url('../Default/imgs/white/none')}QAbstractScrollArea::corner{background-color:#2d2f30}QScrollBar{background-color:#2d2f30;border:0}QScrollBar:horizontal{height:16;margin:0}QScrollBar:vertical{margin:0;width:16}QScrollBar::handle{border:1 solid #4b4d50;border-radius:4}QScrollBar::handle:horizontal:hover,QScrollBar::handle:vertical:hover{background-color:#5f6265;border-color:#5f6265}QScrollBar::handle:horizontal:pressed,QScrollBar::handle:vertical:pressed{background-color:#72767a;border-color:#72767a}QScrollBar::handle:horizontal{background-color:#4b4d50;margin:3 16;min-width:20}QScrollBar::handle:vertical{background-color:#4b4d50;margin:16 3;min-height:20}QScrollBar::add-line{subcontrol-origin:margin;border:0}QScrollBar::add-line:horizontal{subcontrol-position:right;background-color:#2d2f30;margin:0;width:16}QScrollBar::add-line:vertical{subcontrol-position:bottom;background-color:#2d2f30;margin:0;height:16}QScrollBar::sub-line{border:0;subcontrol-origin:margin}QScrollBar::sub-line:horizontal{subcontrol-position:left;background-color:#2d2f30;margin:0;width:16}QScrollBar::sub-line:vertical{subcontrol-position:top;background-color:#2d2f30;margin:0;height:16}QScrollBar::up-arrow:vertical{image:url('../Default/imgs/white/scroll-up.svg');image-position:center center}QScrollBar::up-arrow:vertical:pressed{margin:1 0 0 0}QScrollBar::down-arrow:vertical{image:url('../Default/imgs/white/scroll-down.svg');image-position:center center}QScrollBar::down-arrow:vertical:pressed{margin:1 0 0 0}QScrollBar::left-arrow:horizontal{image:url('../Default/imgs/white/scroll-left.svg');image-position:center center}QScrollBar::left-arrow:horizontal:pressed{margin:1 0 0 0}QScrollBar::right-arrow:horizontal{image:url('../Default/imgs/white/scroll-right.svg');image-position:center center}QScrollBar::right-arrow:horizontal:pressed{margin:1 0 0 0}QScrollBar::sub-page:horizontal,QScrollBar::add-page:horizontal,QScrollBar::sub-page:vertical,QScrollBar::add-page:vertical{background:none}QToolBar{padding:0}QToolBar::separator:horizontal{border-left:1 solid #212223;margin:0 1;width:0}QToolBar::separator:vertical{border-top:1 solid #212223;height:0;margin:1 0}QToolBar QLabel{margin-top:1}QToolBar QToolBar{border:0}QToolButton::menu-indicator{image:none}QToolButton::menu-button{border-image:none}.DvScrollWidget QPushButton,DvScrollWidget QPushButton,#ScrollLeftButton QPushButton,#ScrollRightButton QPushButton,#ScrollUpButton QPushButton,#ScrollDownButton QPushButton{background-color:#616467;border:0 solid red;border-radius:0;padding:0;max-width:16}.DvScrollWidget QPushButton:hover,DvScrollWidget QPushButton:hover,#ScrollLeftButton QPushButton:hover,#ScrollRightButton QPushButton:hover,#ScrollUpButton QPushButton:hover,#ScrollDownButton QPushButton:hover{background-color:#6e7174}.DvScrollWidget QPushButton:pressed,DvScrollWidget QPushButton:pressed,#ScrollLeftButton QPushButton:pressed,#ScrollRightButton QPushButton:pressed,#ScrollUpButton QPushButton:pressed,#ScrollDownButton QPushButton:pressed{background-color:#2b2c2d}#ScrollLeftButton,#ScrollRightButton,#ScrollUpButton,#ScrollDownButton{margin:0;min-width:16}#ScrollLeftButton{border-right:1 solid #212223;image:url('../Default/imgs/white/scroll-left.svg')}#ScrollRightButton{border-left:1 solid #212223;margin-left:3;image:url('../Default/imgs/white/scroll-right.svg')}#ScrollUpButton{image:url('../Default/imgs/white/scroll-up.svg')}#ScrollDownButton{image:url('../Default/imgs/white/scroll-down.svg')}#keyFrameNavigator{background:none;margin:0;padding:0}#keyFrameNavigator QToolButton{min-width:18}#keyFrameNavigator #PreviousKey{image:url('../Default/imgs/white/prevkey.svg')}#keyFrameNavigator #PreviousKey:hover{image:url('../Default/imgs/white/prevkey_over.svg')}#keyFrameNavigator #PreviousKey:disabled{image:url('../Default/imgs/white/prevkey_disabled.svg')}#keyFrameNavigator #NextKey{image:url('../Default/imgs/white/nextkey.svg')}#keyFrameNavigator #NextKey:hover{image:url('../Default/imgs/white/nextkey_over.svg')}#keyFrameNavigator #NextKey:disabled{image:url('../Default/imgs/white/nextkey_disabled.svg')}.treeview,QTreeWidget,QTreeView,#FunctionEditorTree{background-color:#2d2f30;alternate-background-color:#323435;border:0;margin:0;outline:0}.treeview::item:selected,QTreeWidget::item:selected,QTreeView::item:selected,#FunctionEditorTree::item:selected{background-color:#5385a6;color:#fff}.treeview::branch:adjoins-item,QTreeWidget::branch:adjoins-item,QTreeView::branch:adjoins-item,#FunctionEditorTree::branch:adjoins-item{border-image:url('')}.treeview::branch:has-siblings,QTreeWidget::branch:has-siblings,QTreeView::branch:has-siblings,#FunctionEditorTree::branch:has-siblings{border-image:url('')}.treeview::branch:has-siblings:adjoins-item,QTreeWidget::branch:has-siblings:adjoins-item,QTreeView::branch:has-siblings:adjoins-item,#FunctionEditorTree::branch:has-siblings:adjoins-item{border-image:url('')}.treeview::branch:has-children:closed,QTreeWidget::branch:has-children:closed,QTreeView::branch:has-children:closed,#FunctionEditorTree::branch:has-children:closed{background:url('../Default/imgs/white/treebranch-closed.svg') no-repeat;background-position:center center;border-image:none;image:none}.treeview::branch:has-children:open,QTreeWidget::branch:has-children:open,QTreeView::branch:has-children:open,#FunctionEditorTree::branch:has-children:open{background:url('../Default/imgs/white/treebranch-open.svg') no-repeat;background-position:center center;image:none}.treeview::branch:has-children:has-siblings:closed,QTreeWidget::branch:has-children:has-siblings:closed,QTreeView::branch:has-children:has-siblings:closed,#FunctionEditorTree::branch:has-children:has-siblings:closed{background:url('../Default/imgs/white/treebranch-closed.svg') no-repeat;background-position:center center;border-image:none;image:none}.treeview::branch:has-children:has-siblings:open,QTreeWidget::branch:has-children:has-siblings:open,QTreeView::branch:has-children:has-siblings:open,#FunctionEditorTree::branch:has-children:has-siblings:open{background:url('../Default/imgs/white/treebranch-open.svg') no-repeat;background-position:center center;border-image:none;image:none}QListView{outline:0;background:#2d2f30;alternate-background-color:#323435}#TabBarContainer{background-color:#323435}.Button,QPushButton,.ComboBox,.ComboBox:checked,QComboBox,QComboBox:checked{background-color:#616467;border:1 solid #414345;border-radius:2;color:#e4e5e9;margin:0;padding:3 15}.Button:hover,QPushButton:hover,.ComboBox:hover,#ViewerFpsSlider::sub-line:horizontal:hover,#ViewerFpsSlider::add-line:horizontal:hover,QComboBox:hover{background-color:#6e7174;border-color:#414345;color:#e4e5e9}.Button:pressed,QPushButton:pressed,#ViewerFpsSlider::sub-line:horizontal:pressed,#ViewerFpsSlider::add-line:horizontal:pressed{background-color:#2b2c2d;border-color:#262728;color:#e4e5e9}.Button:checked,QPushButton:checked{background-color:#2b2c2d;border-color:#262728;color:#e4e5e9}.Button:checked:hover,QPushButton:checked:hover{background-color:#303133}.Button:checked:hover:pressed,QPushButton:checked:hover:pressed{background:#2b2c2d}.Button:disabled,QPushButton:disabled,.ComboBox:disabled,#ViewerFpsSlider::sub-line:horizontal:disabled,#ViewerFpsSlider::add-line:horizontal:disabled,QComboBox:disabled{background-color:#4d5052;border-color:#414345;color:#808080}#PushButton_NoPadding{padding:3}.ComboBox,.ComboBox:checked,QComboBox,QComboBox:checked{padding:1 0 1 4;margin:1 0}.ComboBox::drop-down,QComboBox::drop-down{image:url('../Default/imgs/white/combo_downarrow.svg');image-position:center center;width:16}.ComboBox::drop-down:disabled,QComboBox::drop-down:disabled{image:url('../Default/imgs/white/combo_downarrow_disabled.svg')}.ComboBox QAbstractItemView,QComboBox QAbstractItemView{background-color:#414345;border:1 solid #212223;selection-background-color:#5385a6;selection-color:#fff}.LineEdit,QLineEdit,#TaskSheetItem,#tasksRemoveBox,#tasksAddBox{background-color:#28292b;border:1 solid #262728;border-radius:2;color:#d6d8dd;selection-background-color:#5385a6;selection-color:#fff;padding:0 0 0 1}.LineEdit:focus,QLineEdit:focus,#TaskSheetItem:focus,#tasksRemoveBox:focus,#tasksAddBox:focus{background-color:#28292b;border-color:#5385a6;color:#d6d8dd}.LineEdit:disabled,QLineEdit:disabled,#TaskSheetItem:disabled,#tasksRemoveBox:disabled,#tasksAddBox:disabled{background-color:#353638;border-color:#333537;color:#808080}.CheckBox,QCheckBox{color:#d6d8dd}.CheckBox:hover,QCheckBox:hover,.RadioButton:hover,QRadioButton:hover{color:#fff}.CheckBox:disabled,QCheckBox:disabled{color:#808080}.CheckBox::indicator,QMenu::indicator,QCheckBox::indicator,.GroupBox::indicator,QGroupBox::indicator{background-color:#28292b;border:1 solid #262728;border-radius:2;height:9;padding:1;width:9}.CheckBox::indicator:hover,QMenu::indicator:hover,.CheckBox::indicator:checked:hover,QCheckBox::indicator:hover,.GroupBox::indicator:hover,QMenu::indicator:checked:hover,QCheckBox::indicator:checked:hover,.GroupBox::indicator:checked:hover,QGroupBox::indicator:hover,QGroupBox::indicator:checked:hover{background-color:#28292b;border-color:#5385a6}.CheckBox::indicator:checked,QMenu::indicator:checked,QCheckBox::indicator:checked,.GroupBox::indicator:checked,QGroupBox::indicator:checked{background-color:#28292b;border-color:#262728;image:url('../Default/imgs/white/checkmark.svg')}.CheckBox::indicator:checked:disabled,QMenu::indicator:checked:disabled,QCheckBox::indicator:checked:disabled,.GroupBox::indicator:checked:disabled,QGroupBox::indicator:checked:disabled{background-color:#353638;border-color:#353638;image:url('../Default/imgs/white/checkmark_disabled.svg')}.CheckBox::indicator:disabled,QMenu::indicator:disabled,QCheckBox::indicator:disabled,.GroupBox::indicator:disabled,QGroupBox::indicator:disabled{background-color:#353638;border-color:#353638}.RadioButton::indicator:unchecked,QRadioButton::indicator:unchecked,#CameraSettingsRadioButton_Small::indicator:unchecked{image:url('../Default/imgs/white/radiobutton_unchecked.svg');image-position:center center}.RadioButton::indicator:checked,QRadioButton::indicator:checked,#CameraSettingsRadioButton_Small::indicator:checked{image:url('../Default/imgs/white/radiobutton_checked.svg');image-position:center center}.GroupBox,QGroupBox{margin:6 0 0 0;padding:5 0}.GroupBox::title,QGroupBox::title{subcontrol-origin:margin;left:15;margin:-3 0 0 0;padding:0 3}.GroupBox::title:hover,QGroupBox::title:hover{color:#fff}.GroupBox::title:disabled,QGroupBox::title:disabled{color:#808080}.GroupBox::indicator,QGroupBox::indicator{subcontrol-origin:margin;margin-top:2}.GroupBox:disabled,QGroupBox:disabled{color:#808080}.Slider::groove:horizontal,QSlider::groove:horizontal{background-color:transparent;background-image:url('../Default/imgs/white/slider-groove.svg');background-position:center center;background-repeat:repeat-x;margin:0;height:20;min-height:20}.Slider::groove:horizontal:disabled,QSlider::groove:horizontal:disabled{background-image:url('../Default/imgs/white/slider-groove_disabled.svg')}.Slider::handle:horizontal,QSlider::handle:horizontal{width:10;margin:-2 -1;image:url('../Default/imgs/white/slider-handle.svg')}.Slider::handle:horizontal:disabled,QSlider::handle:horizontal:disabled{image:url('../Default/imgs/white/slider-handle_disabled.svg')}#IntPairField,#DoublePairField{qproperty-LightLineColor:#262728;qproperty-LightLineEdgeColor:#262728;qproperty-DarkLineColor:#262728;qproperty-MiddleLineColor:#262728;qproperty-HandleLeftPixmap:url("../Default/imgs/white/slider-handle.svg");qproperty-HandleRightPixmap:url("../Default/imgs/white/slider-handle.svg");qproperty-HandleLeftGrayPixmap:url("../Default/imgs/white/slider-handle_disabled.svg");qproperty-HandleRightGrayPixmap:url("../Default/imgs/white/slider-handle_disabled.svg")}#DirTreeView{background-color:#2d2f30;alternate-background-color:#2d2f30;border:1 solid #212223;border-right:0}DvItemViewerPanel{qproperty-TextColor:#d6d8dd;qproperty-AlternateBackground:#3a3b3d;qproperty-SelectedTextColor:#fff;qproperty-FolderTextColor:#9fdaff;qproperty-SelectedItemBackground:#5385a6}#FileBrowser DvItemViewerPanel,#SceneCast DvItemViewerPanel{background-color:#414345}#FileBrowser #castFrame,#SceneCast #castFrame{border-top:1 solid #212223;border-right:1 solid #212223;border-bottom:1 solid #212223;margin:0}#FileBrowser QToolButton,#SceneCast QToolButton{padding:1}DvDirTreeView{qproperty-TextColor:#d6d8dd;qproperty-SelectedTextColor:#fff;qproperty-SelectedItemBackground:#5385a6;qproperty-FolderTextColor:#9fdaff;qproperty-SelectedFolderTextColor:#fff;alternate-background-color:#323435;background-color:#2d2f30;border:1 solid #212223}#FileDoesNotExistLabel{color:#f00}#SceneCast QToolBar{border-top:1 solid #212223}#SceneCast QToolButton{margin:3 1 2 1;padding:1}#CastBrowser{border:0;margin:0}#FilmStrip QComboBox{border-radius:0;border-width:0}#FilmStrip QComboBox QAbstractItemView{background-color:#414345}#CleanupSettings #CleanupSettingsFrame{margin-top:2;margin-bottom:4}#CleanupSettings QGroupBox{margin-bottom:3}ParamsPage{qproperty-TextColor:#d6d8dd}#CameraSettingsButton{padding:2}#CameraSettingsRadioButton:hover{background:none}#CameraSettingsRadioButton::indicator{border:1 solid rgba(255,255,255,0);height:18;padding:0;width:18}#CameraSettingsRadioButton::indicator:unchecked{image:url('../Default/imgs/white/lock_off.svg')}#CameraSettingsRadioButton::indicator:checked{background-color:#C34040;border-color:#C34040;image:url('../Default/imgs/white/lock_on.svg')}#CameraSettingsRadioButton::indicator:checked:hover{background-color:#d57a7a;border-color:#d57a7a}#CameraSettingsDPI{color:#9fdaff}#CameraSettingsRadioButton_Small{padding:0}#CameraSettingsRadioButton_Small::indicator{background-color:transparent;border:0;height:21;margin:0;width:11}#ForceSquaredPixelButton{height:16;border:1 solid rgba(255,255,255,0);image:url('../Default/imgs/white/fsp_unchecked.svg');padding:2;width:16;margin:0}#ForceSquaredPixelButton:checked{image:url('../Default/imgs/white/fsp_checked.svg')}#OutputSettingsLabel{color:#9fdaff}PencilTestPopup{min-height:730px;min-width:512px}#MatchLineButton{background-color:#66696c}#MatchLineButton:checked{background-color:#8c9093;border:2 solid #5385a6;border-radius:2}#LargeSizedText{font-size:17}#StartupLabel{padding:3}#StartupLabel:hover{background:#5a5d5f}QStatusBar{background-color:#c0c0c0}QStatusBar::item{border:0}QStatusBar QLabel{background-color:#c0c0c0}QStatusBar #StatusBarLabel{background-color:#fff;padding:1 3}#TitleTxtLabel{color:#9fdaff}#StyleEditor QPushButton{margin:2 1;padding:0}#StyleEditor #TabBarContainer{margin-left:-4}#StyleEditor #bottomWidget{border-top:1 solid #212223;padding:3 2 8 3}#StyleEditor #bottomWidget QPushButton{padding:3 5}#StyleEditorTabBar::tab::first{border-left:1 solid #212223}#HexagonalColorWheel{qproperty-BGColor:#414345}#colorSlider::groove:horizontal{height:1;border-image:none}#colorSlider::handle:horizontal{width:8;margin:-8 -4}#colorSliderAddButton,#colorSliderSubButton{background:none;border-color:transparent;image-position:center center;min-height:16;padding:0;min-width:18}#colorSliderAddButton{image:url('../Default/imgs/white/scroll-right.svg')}#colorSliderSubButton{image:url('../Default/imgs/white/scroll-left.svg')}#PlainColorPageParts{border-bottom:1 solid #212223}#PlainColorPageParts QLineEdit{max-width:35}PaletteViewer DvScrollWidget QPushButton{border-top:0;margin-bottom:1;max-width:15;min-width:15}PaletteViewer DvScrollWidget #ScrollLeftButton{border-radius:0;margin-bottom:1;max-width:16;min-width:16}PaletteViewer DvScrollWidget #ScrollRightButton{border-radius:0;margin-left:1;margin-bottom:1;max-width:16;min-width:16}PaletteViewer QToolBar{background:none;border-bottom:1 solid #212223;padding:0;margin:0}PaletteViewer QToolBar::separator:horizontal{margin:0}PaletteViewer QToolBar QToolButton{margin:0 0 1 0;padding:1 0 2 0}#PageViewer{qproperty-TextColor:#d6d8dd}#PaletteLockButton{border-radius:0;margin:0 0 1 1}#PaletteLockButton:checked{background-color:#C34040;border-color:#C34040}#PaletteLockButton:checked:hover{background-color:#d57a7a;border-color:#d57a7a}#WordButton{padding-right:0;padding-left:0}QDialog{background-color:#414345}QDialog #dialogButtonFrame{background-color:#37393a;border-top:1 solid #212223}QDialog #dialogButtonFrame QPushButton{border-color:#37393a;outline:0}QDialog #dialogButtonFrame QPushButton:focus{background-color:#5385a6;border-color:#37393a;color:#fff}QDialog #dialogButtonFrame QPushButton:focus:hover{background-color:#6c98b6}QDialog #dialogButtonFrame QPushButton:focus:pressed{background-color:#2b2c2d;border-color:#262728;color:#e4e5e9}#SceneSettings QLabel{color:#9fdaff}#PreferencesPopup QListWidget{background-color:#2d2f30;alternate-background-color:#2d2f30;border:1 solid #212223;font-size:13}#PreferencesPopup QListWidget::item{border:0;padding:3}#PreferencesPopup QListWidget::item:hover{color:#d6d8dd;background-color:rgba(255,255,255,0.15)}#PreferencesPopup QListWidget::item:selected{background-color:#5385a6;color:#fff}#ShortcutTree{border:1 solid #212223}#ShortcutTree::item{padding:1 0}#ShortcutTree QScrollBar:vertical{width:16;margin-right:-1}ProjectPopup QLabel{color:#9fdaff}#GearButton{qproperty-icon:url('../Default/imgs/white/gear.svg')}#SubfolderButton{qproperty-icon:url('../Default/imgs/white/subfolder.svg')}SchematicViewer{qproperty-TextColor:#d6d8dd;qproperty-VerticalLineColor:#222;qproperty-LevelColumnColor:#4C6E4C;qproperty-VectorColumnColor:#7B7B4C;qproperty-ChildColumnColor:#6A526B;qproperty-FullcolorColumnColor:#657A96;qproperty-FxColumnColor:#56553C;qproperty-PaletteColumnColor:#3A655F;qproperty-MeshColumnColor:#684D86;qproperty-ReferenceColumnColor:#616161;qproperty-TableColor:#62628c;qproperty-ActiveCameraColor:#2d7dca;qproperty-OtherCameraColor:#6c797b;qproperty-GroupColor:#3b6e9c;qproperty-PegColor:#9f6e3c;qproperty-SplineColor:#6a9d1c;qproperty-ActiveOutputColor:#2d7dca;qproperty-OtherOutputColor:#6c797b;qproperty-XsheetColor:#62628c;qproperty-NormalFxColor:#6a7e96;qproperty-MacroFxColor:#815c79;qproperty-ImageAdjustFxColor:#656287;qproperty-LayerBlendingFxColor:#4f757d;qproperty-MatteFxColor:#ae7171;qproperty-SchematicPreviewButtonBgOnColor:#c8c864;qproperty-SchematicPreviewButtonOnImage:url('../Default/imgs/white/x_prev_eye_on.svg');qproperty-SchematicPreviewButtonBgOffColor:#616161;qproperty-SchematicPreviewButtonOffImage:url('../Default/imgs/white/x_prev_eye_off.svg');qproperty-SchematicCamstandButtonBgOnColor:#eb906b;qproperty-SchematicCamstandButtonOnImage:url('../Default/imgs/white/x_table_view_on.svg');qproperty-SchematicCamstandButtonTranspImage:url('../Default/imgs/white/x_table_view_transp.svg');qproperty-SchematicCamstandButtonBgOffColor:#616161;qproperty-SchematicCamstandButtonOffImage:url('../Default/imgs/white/x_table_view_off.svg')}#SchematicBottomFrame{background-color:#414345;border:0;margin:0;padding:0}#SchematicBottomFrame QToolBar::separator:horizontal{margin:0}#SchematicBottomFrame QToolBar QToolButton{padding:0;margin:2}#SchematicSceneViewer{background-color:#353638;border-bottom:1 solid #212223}#FxSettingsTabBar::tab{border-top:1 solid #212223}#FxSettingsTabBar::tab::first,#FxSettingsTabBar::tab::only-one{border-left:1 solid #212223}FxSettings QToolBar{border-top:1 solid #212223;border-right:1 solid #212223;border-left:1 solid #212223;min-height:23;padding:3 0}FxSettings QToolBar QToolBar{border:0}#FxSettingsLabel{color:#a0e680}#FxSettingsHelpButton{background-color:#80a0dc;color:#000;padding-top:0;padding-bottom:0}#FxSettingsHelpButton:hover{background-color:#a8bee7}#ScriptConsole{font-family:'Courier New',monospace;border:0;color:#000000;padding:3}#ScriptConsole QFrame{background-color:#dcdcdc}#ScriptConsole TPanelTitleBar{background-color:#323435}#TaskSheetItemLabel{color:#d6d8dd}#Tasks QToolBar{border-bottom:1 solid #212223;margin:0;padding:0}#Tasks QToolBar QToolButton{margin:2 2 3 2}#ToolBar QToolBar{padding-left:2}#ToolOptions TPanelTitleBar{border-right:1 solid #212223;border-bottom:0}#CommandBar TPanelTitleBar{border-right:1 solid #212223;border-bottom:0}IconViewField{qproperty-ThicknessPixmap:url("../Default/imgs/white/selectiontool_thickness.svg")}#EditToolLockButton{spacing:0}#EditToolLockButton:hover{background:none}#EditToolLockButton::indicator{border:1 solid rgba(255,255,255,0);height:18;padding:0;width:18}#EditToolLockButton::indicator:unchecked{image:url('../Default/imgs/white/lock_off.svg')}#EditToolLockButton::indicator:checked{background-color:#C34040;border-color:#C34040;image:url('../Default/imgs/white/lock_on.svg')}#EditToolLockButton::indicator:checked:hover{background-color:#d57a7a;border-color:#d57a7a}PopupButton::menu-indicator{border-left:0;height:17;image:url('../Default/imgs/white/combo_downarrow.svg');width:10}PopupButton::menu-indicator:hover{image:url('../Default/imgs/white/combo_downarrow.svg')}PopupButton::menu-indicator:disabled{image:url('../Default/imgs/white/combo_downarrow_disabled.svg')}#Cap,#Join{padding:0 4 0 -8;max-width:32;min-width:32}#Cap QMenu,#Join QMenu{max-width:28;min-width:28}#Cap QMenu::item,#Join QMenu::item{max-width:28;min-width:28;padding:0}QToolBar#MediumPaddingToolBar QToolButton{padding-left:3;padding-right:3}QToolBar#WidePaddingToolBar QToolButton{padding-left:6;padding-right:6}#CommandBar{margin:0;padding:0;border:0}#CommandBar::separator:horizontal{margin-right:3;margin-left:3}#expandButton:checked{background-color:transparent;border-color:transparent;color:#d6d8dd}#expandButton:checked:hover{background-color:#6e7174;border-color:#6e7174}#expandButton:checked:pressed{background-color:#2b2c2d;border-color:#262728}#ComboViewerPanel Toolbar{border-bottom:1 solid #212223}#ComboViewerPanel Toolbar::separator:horizontal{margin:0 0 0 2}#ComboViewerPanel Toolbar QToolButton{margin:2 0 3 2}#ComboViewerToolOptions{border-bottom:1 solid #212223}#ComboViewer #ToolBarContainer,#ViewerPanel #ToolBarContainer,FlipBook #ToolBarContainer{background-color:transparent;border-top:2 solid #212223;border-bottom:1 solid #212223;padding-right:-1}#flipCustomize{margin-left:3}#flipCustomize::menu-button{background-color:transparent;width:35}#flipCustomize::menu-arrow{image:none}QToolBar#FlipConsolePlayToolBar::separator:horizontal{margin:0 3}QToolBar#FlipConsolePlayToolBar QToolButton{margin-top:2;margin-bottom:2;height:16;padding-left:1;padding-right:1}#ViewerFpsSlider{background-color:transparent;background-image:url('../Default/imgs/white/slider-groove.svg');background-position:center center;background-repeat:repeat-x;border:0;height:19;margin:0 3 0 37;max-width:300;min-width:0}#ViewerFpsSlider::sub-line:horizontal{subcontrol-origin:absolute;background-color:#616467;border:1 solid #414345;border-top-left-radius:2;border-bottom-left-radius:2;height:16;left:-33;width:14}#ViewerFpsSlider::add-line:horizontal{subcontrol-position:left;background-color:#616467;border:1 solid #414345;border-top-right-radius:2;border-bottom-right-radius:2;left:18;height:16;image-position:center center;width:13}#ViewerFpsSlider::handle::horizontal{background-color:#999c9f;border:1 solid #999c9f;border-radius:2;margin:2 0 3 0;min-width:9;width:9;max-width:9}FlipSlider{qproperty-PBHeight:15;qproperty-PBOverlay:url('../Default/imgs/white/flipslider.svg');qproperty-PBColorMarginLeft:1;qproperty-PBColorMarginTop:2;qproperty-PBColorMarginRight:1;qproperty-PBColorMarginBottom:2;qproperty-PBMarker:url('../Default/imgs/white/flipmarker.svg');qproperty-PBMarkerMarginLeft:3;qproperty-PBMarkerMarginRight:3;qproperty-notStartedColor:rgba(205,101,101,0.78);qproperty-startedColor:#1abc3f;qproperty-baseColor:#28292b;qproperty-finishedColor:#28292b}Ruler{qproperty-ParentBGColor:#414345;qproperty-ScaleColor:#d6d8dd}#RulerToolOptionValues{color:#000}#xsheetArea,#ScrollArea{background-color:#2d2f30;border:0}#xsheetScrollArea{border:0}#cornerWidget QToolButton{padding:0}#xsheetColumnAreaMenu_Preview{background-color:#E6E678}#xsheetColumnAreaMenu_Lock{background-color:#F5F5F5}#xsheetColumnAreaMenu_Camstand{background-color:#FFA480}#xsheetColumnAreaMenu_Preview,#xsheetColumnAreaMenu_Lock,#xsheetColumnAreaMenu_Camstand{color:#000}#noteTextEdit{color:#000}XsheetViewer{qproperty-TextColor:#d6d8dd;qproperty-BGColor:#353638;qproperty-LightLineColor:#262728;qproperty-MarkerLineColor:#1E96C4;qproperty-VerticalLineColor:#222;qproperty-VerticalLineHeadColor:#777b7f;qproperty-PreviewFrameTextColor:#9fdaff;qproperty-CurrentRowBgColor:#506082;qproperty-OnionSkinAreaBgColor:#303133;qproperty-EmptyColumnHeadColor:#5a5d60;qproperty-SelectedColumnTextColor:#E66464;qproperty-EmptyCellColor:#393b3d;qproperty-NotEmptyColumnColor:#414345;qproperty-SelectedEmptyCellColor:#64676a;qproperty-LevelColumnColor:#4C6E4C;qproperty-LevelColumnBorderColor:#8FB38F;qproperty-SelectedLevelColumnColor:#678667;qproperty-VectorColumnColor:#7B7B4C;qproperty-VectorColumnBorderColor:#BBBB9A;qproperty-SelectedVectorColumnColor:#949466;qproperty-ChildColumnColor:#6A526B;qproperty-ChildColumnBorderColor:#B1A3B3;qproperty-SelectedChildColumnColor:#816e82;qproperty-FullcolorColumnColor:#657A96;qproperty-FullcolorColumnBorderColor:#9EB8BB;qproperty-SelectedFullcolorColumnColor:#8895a6;qproperty-FxColumnColor:#56553C;qproperty-FxColumnBorderColor:#95958A;qproperty-SelectedFxColumnColor:#6f6e56;qproperty-ReferenceColumnColor:#616161;qproperty-ReferenceColumnBorderColor:#A2A2A2;qproperty-SelectedReferenceColumnColor:#7a7a7a;qproperty-PaletteColumnColor:#3A655F;qproperty-PaletteColumnBorderColor:#86ACA7;qproperty-SelectedPaletteColumnColor:#52807a;qproperty-MeshColumnColor:#684D86;qproperty-MeshColumnBorderColor:#BA92EF;qproperty-SelectedMeshColumnColor:#82689e;qproperty-SoundTextColumnColor:#c8c8c8;qproperty-SoundTextColumnBorderColor:#8c8c8c;qproperty-SelectedSoundTextColumnColor:#e2e2e2;qproperty-SoundColumnColor:#657456;qproperty-SoundColumnBorderColor:#A0AF7D;qproperty-SelectedSoundColumnColor:#7e8b72;qproperty-SoundColumnHlColor:#34FE5E;qproperty-SoundColumnTrackColor:#B6C29D;qproperty-ColumnHeadPastelizer:#000;qproperty-SelectedColumnHead:#506082;qproperty-LightLightBGColor:#393b3d;qproperty-LightBGColor:#eaebec;qproperty-DarkBGColor:#dbdcdd;qproperty-DarkLineColor:#8e9194;qproperty-XsheetColumnNameBgColor:rgba(0,0,0,0);qproperty-XsheetDragBarHighlightColor:rgba(255,255,255,0.5);qproperty-XsheetPreviewButtonBgOnColor:#c8c864;qproperty-XsheetPreviewButtonOnImage:url('../Default/imgs/white/x_prev_eye_on.svg');qproperty-XsheetPreviewButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetPreviewButtonOffImage:url('../Default/imgs/white/x_prev_eye_off.svg');qproperty-XsheetCamstandButtonBgOnColor:#eb906b;qproperty-XsheetCamstandButtonOnImage:url('../Default/imgs/white/x_table_view_on.svg');qproperty-XsheetCamstandButtonTranspImage:url('../Default/imgs/white/x_table_view_transp.svg');qproperty-XsheetCamstandButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetCamstandButtonOffImage:url('../Default/imgs/white/x_table_view_off.svg');qproperty-XsheetLockButtonBgOnColor:rgba(255,255,255,0.3);qproperty-XsheetLockButtonOnImage:url('../Default/imgs/white/x_lock_on.svg');qproperty-XsheetLockButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetLockButtonOffImage:url('../Default/imgs/white/x_lock_off.svg');qproperty-XsheetConfigButtonBgColor:rgba(255,255,255,0);qproperty-XsheetConfigButtonImage:url('../Default/imgs/white/x_config.svg');qproperty-TimelinePreviewButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelinePreviewButtonOnImage:url('../Default/imgs/white/timeline_toggle_on.svg');qproperty-TimelinePreviewButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelinePreviewButtonOffImage:url('../Default/imgs/white/timeline_toggle_off.svg');qproperty-TimelineCamstandButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelineCamstandButtonOnImage:url('../Default/imgs/white/timeline_toggle_on.svg');qproperty-TimelineCamstandButtonTranspImage:url('../Default/imgs/white/timeline_toggle_transp.svg');qproperty-TimelineCamstandButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelineCamstandButtonOffImage:url('../Default/imgs/white/timeline_toggle_off.svg');qproperty-TimelineLockButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelineLockButtonOnImage:url('../Default/imgs/white/timeline_toggle_on.svg');qproperty-TimelineLockButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelineLockButtonOffImage:url('../Default/imgs/white/timeline_toggle_off.svg');qproperty-TimelineConfigButtonBgColor:rgba(255,255,255,0);qproperty-TimelineConfigButtonImage:url('../Default/imgs/white/timeline_config.svg');qproperty-LayerHeaderPreviewImage:url('../Default/imgs/white/layer_header_prev_eye.svg');qproperty-LayerHeaderPreviewOverImage:url('../Default/imgs/white/layer_header_prev_eye_over.svg');qproperty-LayerHeaderCamstandImage:url('../Default/imgs/white/layer_header_table_view.svg');qproperty-LayerHeaderCamstandOverImage:url('../Default/imgs/white/layer_header_table_view_over.svg');qproperty-LayerHeaderLockImage:url('../Default/imgs/white/lock_on.svg');qproperty-LayerHeaderLockOverImage:url('../Default/imgs/white/lock_on_over.svg')}#XSheetToolbar{margin:0;padding:0;border:0}#XSheetToolbar QToolButton{padding:0;margin:4 1;min-height:19;height:19}#XSheetToolbar::separator:horizontal{margin:0 4}#FunctionEditor QToolBar{border-bottom:1 solid #212223}#FunctionEditor QToolBar QToolBar{border:0}#FunctionEditor QToolBar QLabel{margin-left:5}#FunctionEditor QToolBar QToolButton{height:18}#FunctionEditorTree{border-top:1 solid #212223}FunctionTreeView{qproperty-TextColor:#d6d8dd;qproperty-CurrentTextColor:#E66464}FunctionPanel{qproperty-BGColor:#343638;qproperty-ValueLineColor:#28292b;qproperty-FrameLineColor:#28292b;qproperty-OtherCurvesColor:#7f8386;qproperty-RulerBackground:#2d2e30;qproperty-TextColor:#d6d8dd;qproperty-SubColor:#000;qproperty-SelectedColor:#FFA500}SpreadsheetViewer{qproperty-LightLightBGColor:#393b3d;qproperty-CurrentRowBgColor:#506082;qproperty-LightLineColor:#262728;qproperty-MarkerLineColor:#1E96C4;qproperty-BGColor:#414345;qproperty-VerticalLineColor:#222;qproperty-KeyFrameColor:#995d1d;qproperty-KeyFrameBorderColor:#c9b04b;qproperty-SelectedKeyFrameColor:#be772b;qproperty-InBetweenColor:#666250;qproperty-InBetweenBorderColor:#cdcec8;qproperty-SelectedInBetweenColor:#7d7a6c;qproperty-SelectedEmptyColor:#64676a;qproperty-SelectedSceneRangeEmptyColor:#6d7073;qproperty-TextColor:#d6d8dd;qproperty-ColumnHeaderBorderColor:#777b7f;qproperty-SelectedColumnTextColor:#E66464}#ExpressionField{background-color:#e0e1e2;border:1 solid #2d2e2f;margin:0}#FunctionSegmentViewerLinkButton{background-image:url('../Default/imgs/white/segment_unlinked.svg');background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:hover{background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:checked{background-image:url('../Default/imgs/white/segment_linked.svg');background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:disabled{background-image:url('../Default/imgs/white/segment_disabled.svg');background-repeat:no-repeat} \ No newline at end of file +.button-show,#LoadLevelShowButton,#CleanupSettingsShowButton,#OutputSettingsShowButton,#FxSettingsPreviewShowButton{image:url('../Default/imgs/white/plus.svg');image-position:center center;margin:0;padding:1;min-width:10;min-height:10}.button-show:checked,#LoadLevelShowButton:checked,#CleanupSettingsShowButton:checked,#OutputSettingsShowButton:checked,#FxSettingsPreviewShowButton:checked{background-color:#2b2c2d;border-color:#262728;image:url('../Default/imgs/white/minus.svg')}.button-show:checked:pressed,#LoadLevelShowButton:checked:pressed,#CleanupSettingsShowButton:checked:pressed,#OutputSettingsShowButton:checked:pressed,#FxSettingsPreviewShowButton:checked:pressed{background-color:#2b2c2d;border-color:#262728}.button-show:checked:hover,#LoadLevelShowButton:checked:hover,#CleanupSettingsShowButton:checked:hover,#OutputSettingsShowButton:checked:hover,#FxSettingsPreviewShowButton:checked:hover{background-color:#303133}.button-tool,QToolButton,#CameraSettingsRadioButton::indicator,#ForceSquaredPixelButton,#SchematicBottomFrame QToolBar QToolButton,#EditToolLockButton::indicator,#flipCustomize{background-color:rgba(255,255,255,0);border:1 solid rgba(255,255,255,0);border-radius:2;color:#e4e5e9;margin:1;padding:0}.button-tool:hover,QToolButton:hover,#CameraSettingsRadioButton::indicator:hover,#ForceSquaredPixelButton:hover,#colorSliderAddButton:hover,#colorSliderSubButton:hover,#SchematicBottomFrame QToolBar QToolButton:hover,#EditToolLockButton::indicator:hover,#flipCustomize:hover{background-color:#6e7174;border-color:#6e7174;color:#e4e5e9}.button-tool:pressed,QToolButton:pressed,#CameraSettingsRadioButton::indicator:pressed,#ForceSquaredPixelButton:pressed,#colorSliderAddButton:pressed,#colorSliderSubButton:pressed,#SchematicBottomFrame QToolBar QToolButton:pressed,#EditToolLockButton::indicator:pressed,#flipCustomize:pressed{background-color:#2b2c2d;border-color:#262728;color:#e4e5e9}.button-tool:checked,QToolButton:checked,#CameraSettingsRadioButton::indicator:checked,#ForceSquaredPixelButton:checked,#SchematicBottomFrame QToolBar QToolButton:checked,#EditToolLockButton::indicator:checked,#flipCustomize:checked{background-color:#5385a6;border-color:#5385a6;color:#fff}.button-tool:checked:hover,QToolButton:checked:hover,#CameraSettingsRadioButton::indicator:checked:hover,#ForceSquaredPixelButton:checked:hover,#SchematicBottomFrame QToolBar QToolButton:checked:hover,#EditToolLockButton::indicator:checked:hover,#flipCustomize:checked:hover{background-color:#6c98b6;border-color:#6c98b6}.button-tool:disabled,QToolButton:disabled,#CameraSettingsRadioButton::indicator:disabled,#ForceSquaredPixelButton:disabled,#SchematicBottomFrame QToolBar QToolButton:disabled,#EditToolLockButton::indicator:disabled,#flipCustomize:disabled{color:#808080}.button-flat,PaletteViewer QToolBar QToolButton{background-color:none;border:0;border-radius:0;margin:0}.button-flat:hover,PaletteViewer QToolBar QToolButton:hover{background-color:#6e7174}.button-flat:pressed,PaletteViewer QToolBar QToolButton:pressed{background-color:#212223}.frame,.GroupBox,#LoadLevelFrame,#PsdSettingsGroupBox,#CleanupSettingsFrame,#OutputSettingsBox,#OutputSettingsCameraBox,#SolidLineFrame,#FunctionParametersPanel,QGroupBox{border:1 solid #212223;border-radius:2}.tab-container,#TabBarContainer{background-color:transparent;qproperty-BottomAboveLineColor:#323435;qproperty-BottomBelowLineColor:#212223}.tab-flat,#StyleEditorTabBar::tab,#PaletteTabBar::tab,#FxSettingsTabBar::tab{background-color:#323435;border-right:1 solid #212223;border-bottom:1 solid #212223;color:#94969a;padding:3 4 3 4}.tab-flat:hover,#StyleEditorTabBar::tab:hover,#PaletteTabBar::tab:hover,#FxSettingsTabBar::tab:hover{background-color:#414345;color:#94969a}.tab-flat:selected,#StyleEditorTabBar::tab:selected,#PaletteTabBar::tab:selected,#FxSettingsTabBar::tab:selected{background-color:#414345;color:#fff;border-bottom-color:#414345}.tab-flat:only-one,#StyleEditorTabBar::tab:only-one,#PaletteTabBar::tab:only-one,#FxSettingsTabBar::tab:only-one{margin:0}.tab-round{background-color:#323435;border-top:1 solid #212223;border-right:1 solid #212223;border-left:1 solid #212223;border-bottom:1 solid #212223;color:#94969a;margin:3 -1 0 0;padding:2 7 1 7}.tab-round:hover{background-color:#414345;color:#94969a}.tab-round:selected{background-color:#414345;border-top-right-radius:2;border-top-left-radius:2;border-bottom-color:#414345;color:#fff;margin:1 -1 -1 0;padding:2 7 2 7}.tab-round:only-one{margin:1 0 0 0;padding:3 7 3 7}.tab-round:last{margin-right:0;border-top-right-radius:2}.tab-round:first{border-top-left-radius:2}QWidget{background-color:#414345;color:#d6d8dd}QWidget:disabled{color:#808080}QFrame{border:0;margin:0;padding:0}QToolTip,#helpToolTip{background-color:#fff;border:1 solid #000;color:#000;padding:1 1}#DockSeparator,QMainWindow::separator,QSplitter::handle{background-color:#141516;height:4;width:4}#TDockPlaceholder{background-color:#F77272}TPanel{background-color:#141516}#TopBar{background:#414345;border:0;border-bottom:1 solid #212223;height:21}#TopBar #EditToolLockButton{background:#414345;spacing:0}#TopBar #EditToolLockButton::indicator{background:none;border:none;height:18;margin:1 2 0 0;padding-left:0;padding-right:0}#TopBarTabContainer{background-color:#414345;margin-bottom:1}#StackedMenuBar{border:0;margin:0;padding:0}QMenuBar{background-color:#414345;border:0}QMenuBar::item{background-color:#414345;border-left:1 solid #414345;margin:0;padding:3 5}QMenuBar::item:selected{background-color:rgba(255,255,255,0.15);color:#d6d8dd}QMenuBar::item:pressed{background-color:#5385a6;color:#fff}#TopBarTab{margin:0;padding:0}#TopBarTab::tab{background-color:#323435;border-top:1 solid #212223;border-right:1 solid #212223;color:#94969a;margin:0 0 0 0;padding:2 8 3 8}#TopBarTab::tab:hover{background-color:#414345;color:#94969a}#TopBarTab::tab:selected{background-color:#414345;color:#fff}#TopBarTab::tab:first{border-left:1 solid #212223}#TopBarTab::tab:last{border-right:1 solid #212223}QMenu{background-color:#414345;border:1 solid #212223;padding:2 0}QMenu::item{padding:3 28}QMenu::item:selected{background-color:#5385a6;color:#fff}QMenu::item:checked{color:#d6d8dd}QMenu::item:checked:selected{background-color:#5385a6;color:#fff}QMenu::item:disabled{background:none;color:#808080}QMenu::item:disabled:selected{border-color:transparent}QMenu::separator{border-top:1 solid #212223;height:0;margin:2 0}QMenu::icon{border-radius:2;margin:0 0 0 3;padding:1}QMenu::icon:checked{background-color:#5385a6}QMenu::indicator{margin-left:7}TPanelTitleBar{background-color:#323435;border-color:#212223;border-style:solid;border-width:0 0 1 0;height:20;min-height:20;qproperty-TitleColor:#8c9093;qproperty-ActiveTitleColor:#43AEE5;qproperty-BorderPixmap:url('none');qproperty-ActiveBorderPixmap:url('../Default/imgs/white/none');qproperty-FloatBorderPixmap:url('none');qproperty-FloatActiveBorderPixmap:url('../Default/imgs/white/none')}QAbstractScrollArea::corner{background-color:#2d2f30}QScrollBar{background-color:#2d2f30;border:0}QScrollBar:horizontal{height:16;margin:0}QScrollBar:vertical{margin:0;width:16}QScrollBar::handle{border:1 solid #4b4d50;border-radius:4}QScrollBar::handle:horizontal:hover,QScrollBar::handle:vertical:hover{background-color:#5f6265;border-color:#5f6265}QScrollBar::handle:horizontal:pressed,QScrollBar::handle:vertical:pressed{background-color:#72767a;border-color:#72767a}QScrollBar::handle:horizontal{background-color:#4b4d50;margin:3 16;min-width:20}QScrollBar::handle:vertical{background-color:#4b4d50;margin:16 3;min-height:20}QScrollBar::add-line{subcontrol-origin:margin;border:0}QScrollBar::add-line:horizontal{subcontrol-position:right;background-color:#2d2f30;margin:0;width:16}QScrollBar::add-line:vertical{subcontrol-position:bottom;background-color:#2d2f30;margin:0;height:16}QScrollBar::sub-line{border:0;subcontrol-origin:margin}QScrollBar::sub-line:horizontal{subcontrol-position:left;background-color:#2d2f30;margin:0;width:16}QScrollBar::sub-line:vertical{subcontrol-position:top;background-color:#2d2f30;margin:0;height:16}QScrollBar::up-arrow:vertical{image:url('../Default/imgs/white/scroll-up.svg');image-position:center center}QScrollBar::up-arrow:vertical:pressed{margin:1 0 0 0}QScrollBar::down-arrow:vertical{image:url('../Default/imgs/white/scroll-down.svg');image-position:center center}QScrollBar::down-arrow:vertical:pressed{margin:1 0 0 0}QScrollBar::left-arrow:horizontal{image:url('../Default/imgs/white/scroll-left.svg');image-position:center center}QScrollBar::left-arrow:horizontal:pressed{margin:1 0 0 0}QScrollBar::right-arrow:horizontal{image:url('../Default/imgs/white/scroll-right.svg');image-position:center center}QScrollBar::right-arrow:horizontal:pressed{margin:1 0 0 0}QScrollBar::sub-page:horizontal,QScrollBar::add-page:horizontal,QScrollBar::sub-page:vertical,QScrollBar::add-page:vertical{background:none}QToolBar{padding:0}QToolBar::separator:horizontal{border-left:1 solid #212223;margin:0 1;width:0}QToolBar::separator:vertical{border-top:1 solid #212223;height:0;margin:1 0}QToolBar QLabel{margin-top:1}QToolBar QToolBar{border:0}QToolButton::menu-indicator{image:none}QToolButton::menu-button{border-image:none}.DvScrollWidget QPushButton,DvScrollWidget QPushButton,#ScrollLeftButton QPushButton,#ScrollRightButton QPushButton,#ScrollUpButton QPushButton,#ScrollDownButton QPushButton{background-color:#616467;border:0 solid red;border-radius:0;padding:0;max-width:16}.DvScrollWidget QPushButton:hover,DvScrollWidget QPushButton:hover,#ScrollLeftButton QPushButton:hover,#ScrollRightButton QPushButton:hover,#ScrollUpButton QPushButton:hover,#ScrollDownButton QPushButton:hover{background-color:#6e7174}.DvScrollWidget QPushButton:pressed,DvScrollWidget QPushButton:pressed,#ScrollLeftButton QPushButton:pressed,#ScrollRightButton QPushButton:pressed,#ScrollUpButton QPushButton:pressed,#ScrollDownButton QPushButton:pressed{background-color:#2b2c2d}#ScrollLeftButton,#ScrollRightButton,#ScrollUpButton,#ScrollDownButton{margin:0;min-width:16}#ScrollLeftButton{border-right:1 solid #212223;image:url('../Default/imgs/white/scroll-left.svg')}#ScrollRightButton{border-left:1 solid #212223;margin-left:3;image:url('../Default/imgs/white/scroll-right.svg')}#ScrollUpButton{image:url('../Default/imgs/white/scroll-up.svg')}#ScrollDownButton{image:url('../Default/imgs/white/scroll-down.svg')}#keyFrameNavigator{background:none;margin:0;padding:0}#keyFrameNavigator QToolButton{min-width:18}#keyFrameNavigator #PreviousKey{image:url('../Default/imgs/white/prevkey.svg')}#keyFrameNavigator #PreviousKey:hover{image:url('../Default/imgs/white/prevkey_over.svg')}#keyFrameNavigator #PreviousKey:disabled{image:url('../Default/imgs/white/prevkey_disabled.svg')}#keyFrameNavigator #NextKey{image:url('../Default/imgs/white/nextkey.svg')}#keyFrameNavigator #NextKey:hover{image:url('../Default/imgs/white/nextkey_over.svg')}#keyFrameNavigator #NextKey:disabled{image:url('../Default/imgs/white/nextkey_disabled.svg')}.treeview,QTreeWidget,QTreeView,#FunctionEditorTree{background-color:#2d2f30;alternate-background-color:#323435;border:0;margin:0;outline:0}.treeview::item:selected,QTreeWidget::item:selected,QTreeView::item:selected,#FunctionEditorTree::item:selected{background-color:#5385a6;color:#fff}.treeview::branch:adjoins-item,QTreeWidget::branch:adjoins-item,QTreeView::branch:adjoins-item,#FunctionEditorTree::branch:adjoins-item{border-image:url('')}.treeview::branch:has-siblings,QTreeWidget::branch:has-siblings,QTreeView::branch:has-siblings,#FunctionEditorTree::branch:has-siblings{border-image:url('')}.treeview::branch:has-siblings:adjoins-item,QTreeWidget::branch:has-siblings:adjoins-item,QTreeView::branch:has-siblings:adjoins-item,#FunctionEditorTree::branch:has-siblings:adjoins-item{border-image:url('')}.treeview::branch:has-children:closed,QTreeWidget::branch:has-children:closed,QTreeView::branch:has-children:closed,#FunctionEditorTree::branch:has-children:closed{background:url('../Default/imgs/white/treebranch-closed.svg') no-repeat;background-position:center center;border-image:none;image:none}.treeview::branch:has-children:open,QTreeWidget::branch:has-children:open,QTreeView::branch:has-children:open,#FunctionEditorTree::branch:has-children:open{background:url('../Default/imgs/white/treebranch-open.svg') no-repeat;background-position:center center;image:none}.treeview::branch:has-children:has-siblings:closed,QTreeWidget::branch:has-children:has-siblings:closed,QTreeView::branch:has-children:has-siblings:closed,#FunctionEditorTree::branch:has-children:has-siblings:closed{background:url('../Default/imgs/white/treebranch-closed.svg') no-repeat;background-position:center center;border-image:none;image:none}.treeview::branch:has-children:has-siblings:open,QTreeWidget::branch:has-children:has-siblings:open,QTreeView::branch:has-children:has-siblings:open,#FunctionEditorTree::branch:has-children:has-siblings:open{background:url('../Default/imgs/white/treebranch-open.svg') no-repeat;background-position:center center;border-image:none;image:none}QListView{outline:0;background:#2d2f30;alternate-background-color:#323435}#TabBarContainer{background-color:#323435}.Button,QPushButton,.ComboBox,.ComboBox:checked,QComboBox,QComboBox:checked{background-color:#616467;border:1 solid #414345;border-radius:2;color:#e4e5e9;margin:0;padding:3 15}.Button:hover,QPushButton:hover,.ComboBox:hover,#ViewerFpsSlider::sub-line:horizontal:hover,#ViewerFpsSlider::add-line:horizontal:hover,QComboBox:hover{background-color:#6e7174;border-color:#414345;color:#e4e5e9}.Button:pressed,QPushButton:pressed,#ViewerFpsSlider::sub-line:horizontal:pressed,#ViewerFpsSlider::add-line:horizontal:pressed{background-color:#2b2c2d;border-color:#262728;color:#e4e5e9}.Button:checked,QPushButton:checked{background-color:#2b2c2d;border-color:#262728;color:#e4e5e9}.Button:checked:hover,QPushButton:checked:hover{background-color:#303133}.Button:checked:hover:pressed,QPushButton:checked:hover:pressed{background:#2b2c2d}.Button:disabled,QPushButton:disabled,.ComboBox:disabled,#ViewerFpsSlider::sub-line:horizontal:disabled,#ViewerFpsSlider::add-line:horizontal:disabled,QComboBox:disabled{background-color:#4d5052;border-color:#414345;color:#808080}#PushButton_NoPadding{padding:3}.ComboBox,.ComboBox:checked,QComboBox,QComboBox:checked{padding:1 0 1 4;margin:1 0}.ComboBox::drop-down,QComboBox::drop-down{image:url('../Default/imgs/white/combo_downarrow.svg');image-position:center center;width:16}.ComboBox::drop-down:disabled,QComboBox::drop-down:disabled{image:url('../Default/imgs/white/combo_downarrow_disabled.svg')}.ComboBox QAbstractItemView,QComboBox QAbstractItemView{background-color:#414345;border:1 solid #212223;selection-background-color:#5385a6;selection-color:#fff}.LineEdit,QPlainTextEdit,QLineEdit,#TaskSheetItem,#tasksRemoveBox,#tasksAddBox{background-color:#28292b;border:1 solid #262728;border-radius:2;color:#d6d8dd;selection-background-color:#5385a6;selection-color:#fff;padding:0 0 0 1}.LineEdit:focus,QPlainTextEdit:focus,QLineEdit:focus,#TaskSheetItem:focus,#tasksRemoveBox:focus,#tasksAddBox:focus{background-color:#28292b;border-color:#5385a6;color:#d6d8dd}.LineEdit:disabled,QPlainTextEdit:disabled,QLineEdit:disabled,#TaskSheetItem:disabled,#tasksRemoveBox:disabled,#tasksAddBox:disabled{background-color:#353638;border-color:#333537;color:#808080}.CheckBox,QCheckBox{color:#d6d8dd}.CheckBox:hover,QCheckBox:hover,.RadioButton:hover,QRadioButton:hover{color:#fff}.CheckBox:disabled,QCheckBox:disabled{color:#808080}.CheckBox::indicator,QMenu::indicator,QCheckBox::indicator,.GroupBox::indicator,QGroupBox::indicator{background-color:#28292b;border:1 solid #262728;border-radius:2;height:9;padding:1;width:9}.CheckBox::indicator:hover,QMenu::indicator:hover,.CheckBox::indicator:checked:hover,QCheckBox::indicator:hover,.GroupBox::indicator:hover,QMenu::indicator:checked:hover,QCheckBox::indicator:checked:hover,.GroupBox::indicator:checked:hover,QGroupBox::indicator:hover,QGroupBox::indicator:checked:hover{background-color:#28292b;border-color:#5385a6}.CheckBox::indicator:checked,QMenu::indicator:checked,QCheckBox::indicator:checked,.GroupBox::indicator:checked,QGroupBox::indicator:checked{background-color:#28292b;border-color:#262728;image:url('../Default/imgs/white/checkmark.svg')}.CheckBox::indicator:checked:disabled,QMenu::indicator:checked:disabled,QCheckBox::indicator:checked:disabled,.GroupBox::indicator:checked:disabled,QGroupBox::indicator:checked:disabled{background-color:#353638;border-color:#353638;image:url('../Default/imgs/white/checkmark_disabled.svg')}.CheckBox::indicator:disabled,QMenu::indicator:disabled,QCheckBox::indicator:disabled,.GroupBox::indicator:disabled,QGroupBox::indicator:disabled{background-color:#353638;border-color:#353638}.RadioButton::indicator:unchecked,QRadioButton::indicator:unchecked,#CameraSettingsRadioButton_Small::indicator:unchecked{image:url('../Default/imgs/white/radiobutton_unchecked.svg');image-position:center center}.RadioButton::indicator:checked,QRadioButton::indicator:checked,#CameraSettingsRadioButton_Small::indicator:checked{image:url('../Default/imgs/white/radiobutton_checked.svg');image-position:center center}.GroupBox,QGroupBox{margin:6 0 0 0;padding:5 0}.GroupBox::title,QGroupBox::title{subcontrol-origin:margin;left:15;margin:-3 0 0 0;padding:0 3}.GroupBox::title:hover,QGroupBox::title:hover{color:#fff}.GroupBox::title:disabled,QGroupBox::title:disabled{color:#808080}.GroupBox::indicator,QGroupBox::indicator{subcontrol-origin:margin;margin-top:2}.GroupBox:disabled,QGroupBox:disabled{color:#808080}.Slider::groove:horizontal,QSlider::groove:horizontal{background-color:transparent;background-image:url('../Default/imgs/white/slider-groove.svg');background-position:center center;background-repeat:repeat-x;margin:0;height:20;min-height:20}.Slider::groove:horizontal:disabled,QSlider::groove:horizontal:disabled{background-image:url('../Default/imgs/white/slider-groove_disabled.svg')}.Slider::handle:horizontal,QSlider::handle:horizontal{width:10;margin:-2 -1;image:url('../Default/imgs/white/slider-handle.svg')}.Slider::handle:horizontal:disabled,QSlider::handle:horizontal:disabled{image:url('../Default/imgs/white/slider-handle_disabled.svg')}#IntPairField,#DoublePairField{qproperty-LightLineColor:#262728;qproperty-LightLineEdgeColor:#262728;qproperty-DarkLineColor:#262728;qproperty-MiddleLineColor:#262728;qproperty-HandleLeftPixmap:url("../Default/imgs/white/slider-handle.svg");qproperty-HandleRightPixmap:url("../Default/imgs/white/slider-handle.svg");qproperty-HandleLeftGrayPixmap:url("../Default/imgs/white/slider-handle_disabled.svg");qproperty-HandleRightGrayPixmap:url("../Default/imgs/white/slider-handle_disabled.svg")}#DirTreeView{background-color:#2d2f30;alternate-background-color:#2d2f30;border:1 solid #212223;border-right:0}DvItemViewerPanel{qproperty-TextColor:#d6d8dd;qproperty-AlternateBackground:#3a3b3d;qproperty-SelectedTextColor:#fff;qproperty-FolderTextColor:#9fdaff;qproperty-SelectedItemBackground:#5385a6}#FileBrowser DvItemViewerPanel,#SceneCast DvItemViewerPanel{background-color:#414345}#FileBrowser #castFrame,#SceneCast #castFrame{border-top:1 solid #212223;border-right:1 solid #212223;border-bottom:1 solid #212223;margin:0}#FileBrowser QToolButton,#SceneCast QToolButton{padding:1}DvDirTreeView{qproperty-TextColor:#d6d8dd;qproperty-SelectedTextColor:#fff;qproperty-SelectedItemBackground:#5385a6;qproperty-FolderTextColor:#9fdaff;qproperty-SelectedFolderTextColor:#fff;alternate-background-color:#323435;background-color:#2d2f30;border:1 solid #212223}#FileDoesNotExistLabel{color:#f00}#SceneCast QToolBar{border-top:1 solid #212223}#SceneCast QToolButton{margin:3 1 2 1;padding:1}#CastBrowser{border:0;margin:0}#FilmStrip QComboBox{border-radius:0;border-width:0}#FilmStrip QComboBox QAbstractItemView{background-color:#414345}#CleanupSettings #CleanupSettingsFrame{margin-top:2;margin-bottom:4}#CleanupSettings QGroupBox{margin-bottom:3}ParamsPage{qproperty-TextColor:#d6d8dd}#CameraSettingsButton{padding:2}#CameraSettingsRadioButton:hover{background:none}#CameraSettingsRadioButton::indicator{border:1 solid rgba(255,255,255,0);height:18;padding:0;width:18}#CameraSettingsRadioButton::indicator:unchecked{image:url('../Default/imgs/white/lock_off.svg')}#CameraSettingsRadioButton::indicator:checked{background-color:#C34040;border-color:#C34040;image:url('../Default/imgs/white/lock_on.svg')}#CameraSettingsRadioButton::indicator:checked:hover{background-color:#d57a7a;border-color:#d57a7a}#CameraSettingsDPI{color:#9fdaff}#CameraSettingsRadioButton_Small{padding:0}#CameraSettingsRadioButton_Small::indicator{background-color:transparent;border:0;height:21;margin:0;width:11}#ForceSquaredPixelButton{height:16;border:1 solid rgba(255,255,255,0);image:url('../Default/imgs/white/fsp_unchecked.svg');padding:2;width:16;margin:0}#ForceSquaredPixelButton:checked{image:url('../Default/imgs/white/fsp_checked.svg')}#OutputSettingsLabel{color:#9fdaff}PencilTestPopup{min-height:730px;min-width:512px}#MatchLineButton{background-color:#66696c}#MatchLineButton:checked{background-color:#8c9093;border:2 solid #5385a6;border-radius:2}#LargeSizedText{font-size:17px}#StartupLabel{padding:3}#StartupLabel:hover{background:#5a5d5f}QStatusBar{background-color:#c0c0c0}QStatusBar::item{border:0}QStatusBar QLabel{background-color:#c0c0c0}QStatusBar #StatusBarLabel{background-color:#fff;padding:1 3}#TitleTxtLabel{color:#9fdaff}#StyleEditor QPushButton{margin:2 1;padding:0}#StyleEditor #TabBarContainer{margin-left:-4}#StyleEditor #bottomWidget{border-top:1 solid #212223;padding:3 2 8 3}#StyleEditor #bottomWidget QPushButton{padding:3 5}#StyleEditorTabBar::tab::first{border-left:1 solid #212223}#HexagonalColorWheel{qproperty-BGColor:#414345}#colorSlider::groove:horizontal{height:1;border-image:none}#colorSlider::handle:horizontal{width:8;margin:-8 -4}#colorSliderAddButton,#colorSliderSubButton{background:none;border-color:transparent;image-position:center center;min-height:16;padding:0;min-width:18}#colorSliderAddButton{image:url('../Default/imgs/white/scroll-right.svg')}#colorSliderSubButton{image:url('../Default/imgs/white/scroll-left.svg')}#PlainColorPageParts{border-bottom:1 solid #212223}#PlainColorPageParts QLineEdit{max-width:35}PaletteViewer DvScrollWidget QPushButton{border-top:0;margin-bottom:1;max-width:15;min-width:15}PaletteViewer DvScrollWidget #ScrollLeftButton{border-radius:0;margin-bottom:1;max-width:16;min-width:16}PaletteViewer DvScrollWidget #ScrollRightButton{border-radius:0;margin-left:1;margin-bottom:1;max-width:16;min-width:16}PaletteViewer QToolBar{background:none;border-bottom:1 solid #212223;padding:0;margin:0}PaletteViewer QToolBar::separator:horizontal{margin:0}PaletteViewer QToolBar QToolButton{margin:0 0 1 0;padding:1 0 2 0}#PageViewer{qproperty-TextColor:#d6d8dd}#PaletteLockButton{border-radius:0;margin:0 0 1 1}#PaletteLockButton:checked{background-color:#C34040;border-color:#C34040}#PaletteLockButton:checked:hover{background-color:#d57a7a;border-color:#d57a7a}#WordButton{padding-right:0;padding-left:0}QDialog{background-color:#414345}QDialog #dialogButtonFrame{background-color:#37393a;border-top:1 solid #212223}QDialog #dialogButtonFrame QPushButton{border-color:#37393a;outline:0}QDialog #dialogButtonFrame QPushButton:focus{background-color:#5385a6;border-color:#37393a;color:#fff}QDialog #dialogButtonFrame QPushButton:focus:hover{background-color:#6c98b6}QDialog #dialogButtonFrame QPushButton:focus:pressed{background-color:#2b2c2d;border-color:#262728;color:#e4e5e9}#SceneSettings QLabel{color:#9fdaff}#PreferencesPopup QListWidget{background-color:#2d2f30;alternate-background-color:#2d2f30;border:1 solid #212223;font-size:13px}#PreferencesPopup QListWidget::item{border:0;padding:3}#PreferencesPopup QListWidget::item:hover{color:#d6d8dd;background-color:rgba(255,255,255,0.15)}#PreferencesPopup QListWidget::item:selected{background-color:#5385a6;color:#fff}#ShortcutTree{border:1 solid #212223}#ShortcutTree::item{padding:1 0}#ShortcutTree QScrollBar:vertical{width:16;margin-right:-1}ProjectPopup QLabel{color:#9fdaff}#GearButton{qproperty-icon:url('../Default/imgs/white/gear.svg')}#SubfolderButton{qproperty-icon:url('../Default/imgs/white/subfolder.svg');padding-left:6px;padding-right:6px}#SubcameraButton{qproperty-icon:url('../Default/imgs/white/subcamera.svg');padding-left:6px;padding-right:6px}SchematicViewer{qproperty-TextColor:#d6d8dd;qproperty-VerticalLineColor:#222;qproperty-LevelColumnColor:#4C6E4C;qproperty-VectorColumnColor:#7B7B4C;qproperty-ChildColumnColor:#6A526B;qproperty-FullcolorColumnColor:#657A96;qproperty-FxColumnColor:#56553C;qproperty-PaletteColumnColor:#3A655F;qproperty-MeshColumnColor:#684D86;qproperty-ReferenceColumnColor:#616161;qproperty-TableColor:#62628c;qproperty-ActiveCameraColor:#2d7dca;qproperty-OtherCameraColor:#6c797b;qproperty-GroupColor:#3b6e9c;qproperty-PegColor:#9f6e3c;qproperty-SplineColor:#6a9d1c;qproperty-ActiveOutputColor:#2d7dca;qproperty-OtherOutputColor:#6c797b;qproperty-XsheetColor:#62628c;qproperty-NormalFxColor:#6a7e96;qproperty-MacroFxColor:#815c79;qproperty-ImageAdjustFxColor:#656287;qproperty-LayerBlendingFxColor:#4f757d;qproperty-MatteFxColor:#ae7171;qproperty-SchematicPreviewButtonBgOnColor:#c8c864;qproperty-SchematicPreviewButtonOnImage:url('../Default/imgs/white/x_prev_eye_on.svg');qproperty-SchematicPreviewButtonBgOffColor:#616161;qproperty-SchematicPreviewButtonOffImage:url('../Default/imgs/white/x_prev_eye_off.svg');qproperty-SchematicCamstandButtonBgOnColor:#eb906b;qproperty-SchematicCamstandButtonOnImage:url('../Default/imgs/white/x_table_view_on.svg');qproperty-SchematicCamstandButtonTranspImage:url('../Default/imgs/white/x_table_view_transp.svg');qproperty-SchematicCamstandButtonBgOffColor:#616161;qproperty-SchematicCamstandButtonOffImage:url('../Default/imgs/white/x_table_view_off.svg')}#SchematicBottomFrame{background-color:#414345;border:0;margin:0;padding:0}#SchematicBottomFrame QToolBar::separator:horizontal{margin:0}#SchematicBottomFrame QToolBar QToolButton{padding:0;margin:2}#SchematicSceneViewer{background-color:#353638;border-bottom:1 solid #212223}#FxSettingsTabBar::tab{border-top:1 solid #212223}#FxSettingsTabBar::tab::first,#FxSettingsTabBar::tab::only-one{border-left:1 solid #212223}FxSettings QToolBar{border-top:1 solid #212223;border-right:1 solid #212223;border-left:1 solid #212223;min-height:23;padding:3 0}FxSettings QToolBar QToolBar{border:0}#FxSettingsLabel{color:#a0e680}#FxSettingsHelpButton{background-color:#80a0dc;color:#000;padding-top:0;padding-bottom:0}#FxSettingsHelpButton:hover{background-color:#a8bee7}#ScriptConsole{font-family:'Courier New',monospace;border:0;color:#000000;padding:3}#ScriptConsole QFrame{background-color:#dcdcdc}#ScriptConsole TPanelTitleBar{background-color:#323435}#TaskSheetItemLabel{color:#d6d8dd}#Tasks QToolBar{border-bottom:1 solid #212223;margin:0;padding:0}#Tasks QToolBar QToolButton{margin:2 2 3 2}#ToolBar QToolBar{padding-left:2}#ToolOptions TPanelTitleBar{border-right:1 solid #212223;border-bottom:0}#CommandBar TPanelTitleBar{border-right:1 solid #212223;border-bottom:0}IconViewField{qproperty-ThicknessPixmap:url("../Default/imgs/white/selectiontool_thickness.svg")}#EditToolLockButton{spacing:0}#EditToolLockButton:hover{background:none}#EditToolLockButton::indicator{border:1 solid rgba(255,255,255,0);height:18;padding:0;width:18}#EditToolLockButton::indicator:unchecked{image:url('../Default/imgs/white/lock_off.svg')}#EditToolLockButton::indicator:checked{background-color:#C34040;border-color:#C34040;image:url('../Default/imgs/white/lock_on.svg')}#EditToolLockButton::indicator:checked:hover{background-color:#d57a7a;border-color:#d57a7a}PopupButton::menu-indicator{border-left:0;height:17;image:url('../Default/imgs/white/combo_downarrow.svg');width:10}PopupButton::menu-indicator:hover{image:url('../Default/imgs/white/combo_downarrow.svg')}PopupButton::menu-indicator:disabled{image:url('../Default/imgs/white/combo_downarrow_disabled.svg')}#Cap,#Join{padding:0 4 0 -8;max-width:32;min-width:32}#Cap QMenu,#Join QMenu{max-width:28;min-width:28}#Cap QMenu::item,#Join QMenu::item{max-width:28;min-width:28;padding:0}QToolBar#MediumPaddingToolBar QToolButton{padding-left:3;padding-right:3}QToolBar#WidePaddingToolBar QToolButton{padding-left:6;padding-right:6}#CommandBar{margin:0;padding:0;border:0}#CommandBar::separator:horizontal{margin-right:3;margin-left:3}#expandButton:checked{background-color:transparent;border-color:transparent;color:#d6d8dd}#expandButton:checked:hover{background-color:#6e7174;border-color:#6e7174}#expandButton:checked:pressed{background-color:#2b2c2d;border-color:#262728}#ComboViewerPanel Toolbar{border-bottom:1 solid #212223}#ComboViewerPanel Toolbar::separator:horizontal{margin:0 0 0 2}#ComboViewerPanel Toolbar QToolButton{margin:2 0 3 2}#ComboViewerToolOptions{border-bottom:1 solid #212223}#ComboViewer #ToolBarContainer,#ViewerPanel #ToolBarContainer,FlipBook #ToolBarContainer{background-color:transparent;border-top:2 solid #212223;border-bottom:1 solid #212223;padding-right:-1}#flipCustomize{margin-left:3}#flipCustomize::menu-button{background-color:transparent;width:35}#flipCustomize::menu-arrow{image:none}QToolBar#FlipConsolePlayToolBar::separator:horizontal{margin:0 3}QToolBar#FlipConsolePlayToolBar QToolButton{margin-top:2;margin-bottom:2;height:16;padding-left:1;padding-right:1}#ViewerFpsSlider{background-color:transparent;background-image:url('../Default/imgs/white/slider-groove.svg');background-position:center center;background-repeat:repeat-x;border:0;height:19;margin:0 3 0 37;max-width:300;min-width:0}#ViewerFpsSlider::sub-line:horizontal{subcontrol-origin:absolute;background-color:#616467;border:1 solid #414345;border-top-left-radius:2;border-bottom-left-radius:2;height:16;left:-33;width:14}#ViewerFpsSlider::add-line:horizontal{subcontrol-position:left;background-color:#616467;border:1 solid #414345;border-top-right-radius:2;border-bottom-right-radius:2;left:18;height:16;image-position:center center;width:13}#ViewerFpsSlider::handle::horizontal{background-color:#999c9f;border:1 solid #999c9f;border-radius:2;margin:2 0 3 0;min-width:9;width:9;max-width:9}FlipSlider{qproperty-PBHeight:15;qproperty-PBOverlay:url('../Default/imgs/white/flipslider.svg');qproperty-PBColorMarginLeft:1;qproperty-PBColorMarginTop:2;qproperty-PBColorMarginRight:1;qproperty-PBColorMarginBottom:2;qproperty-PBMarker:url('../Default/imgs/white/flipmarker.svg');qproperty-PBMarkerMarginLeft:3;qproperty-PBMarkerMarginRight:3;qproperty-notStartedColor:rgba(205,101,101,0.78);qproperty-startedColor:#1abc3f;qproperty-baseColor:#28292b;qproperty-finishedColor:#28292b}Ruler{qproperty-ParentBGColor:#414345;qproperty-ScaleColor:#d6d8dd}#RulerToolOptionValues{color:#000}#xsheetArea,#ScrollArea{background-color:#2d2f30;border:0}#xsheetScrollArea{border:0}#cornerWidget QToolButton{padding:0}#xsheetColumnAreaMenu_Preview{background-color:#E6E678}#xsheetColumnAreaMenu_Lock{background-color:#F5F5F5}#xsheetColumnAreaMenu_Camstand{background-color:#FFA480}#xsheetColumnAreaMenu_Preview,#xsheetColumnAreaMenu_Lock,#xsheetColumnAreaMenu_Camstand{color:#000}#noteTextEdit{color:#000}XsheetViewer{qproperty-TextColor:#d6d8dd;qproperty-BGColor:#353638;qproperty-LightLineColor:#262728;qproperty-MarkerLineColor:#1E96C4;qproperty-VerticalLineColor:#222;qproperty-VerticalLineHeadColor:#777b7f;qproperty-PreviewFrameTextColor:#9fdaff;qproperty-CurrentRowBgColor:#506082;qproperty-OnionSkinAreaBgColor:#303133;qproperty-EmptyColumnHeadColor:#5a5d60;qproperty-SelectedColumnTextColor:#E66464;qproperty-EmptyCellColor:#393b3d;qproperty-NotEmptyColumnColor:#414345;qproperty-SelectedEmptyCellColor:#64676a;qproperty-LevelColumnColor:#4C6E4C;qproperty-LevelColumnBorderColor:#8FB38F;qproperty-SelectedLevelColumnColor:#678667;qproperty-VectorColumnColor:#7B7B4C;qproperty-VectorColumnBorderColor:#BBBB9A;qproperty-SelectedVectorColumnColor:#949466;qproperty-ChildColumnColor:#6A526B;qproperty-ChildColumnBorderColor:#B1A3B3;qproperty-SelectedChildColumnColor:#816e82;qproperty-FullcolorColumnColor:#657A96;qproperty-FullcolorColumnBorderColor:#9EB8BB;qproperty-SelectedFullcolorColumnColor:#8895a6;qproperty-FxColumnColor:#56553C;qproperty-FxColumnBorderColor:#95958A;qproperty-SelectedFxColumnColor:#6f6e56;qproperty-ReferenceColumnColor:#616161;qproperty-ReferenceColumnBorderColor:#A2A2A2;qproperty-SelectedReferenceColumnColor:#7a7a7a;qproperty-PaletteColumnColor:#3A655F;qproperty-PaletteColumnBorderColor:#86ACA7;qproperty-SelectedPaletteColumnColor:#52807a;qproperty-MeshColumnColor:#684D86;qproperty-MeshColumnBorderColor:#BA92EF;qproperty-SelectedMeshColumnColor:#82689e;qproperty-SoundTextColumnColor:#c8c8c8;qproperty-SoundTextColumnBorderColor:#8c8c8c;qproperty-SelectedSoundTextColumnColor:#e2e2e2;qproperty-SoundColumnColor:#657456;qproperty-SoundColumnBorderColor:#A0AF7D;qproperty-SelectedSoundColumnColor:#7e8b72;qproperty-SoundColumnHlColor:#34FE5E;qproperty-SoundColumnTrackColor:#B6C29D;qproperty-ColumnHeadPastelizer:#000;qproperty-SelectedColumnHead:#506082;qproperty-LightLightBGColor:#393b3d;qproperty-LightBGColor:#eaebec;qproperty-DarkBGColor:#dbdcdd;qproperty-DarkLineColor:#8e9194;qproperty-XsheetColumnNameBgColor:rgba(0,0,0,0);qproperty-XsheetDragBarHighlightColor:rgba(255,255,255,0.5);qproperty-XsheetPreviewButtonBgOnColor:#c8c864;qproperty-XsheetPreviewButtonOnImage:url('../Default/imgs/white/x_prev_eye_on.svg');qproperty-XsheetPreviewButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetPreviewButtonOffImage:url('../Default/imgs/white/x_prev_eye_off.svg');qproperty-XsheetCamstandButtonBgOnColor:#eb906b;qproperty-XsheetCamstandButtonOnImage:url('../Default/imgs/white/x_table_view_on.svg');qproperty-XsheetCamstandButtonTranspImage:url('../Default/imgs/white/x_table_view_transp.svg');qproperty-XsheetCamstandButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetCamstandButtonOffImage:url('../Default/imgs/white/x_table_view_off.svg');qproperty-XsheetLockButtonBgOnColor:rgba(255,255,255,0.3);qproperty-XsheetLockButtonOnImage:url('../Default/imgs/white/x_lock_on.svg');qproperty-XsheetLockButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetLockButtonOffImage:url('../Default/imgs/white/x_lock_off.svg');qproperty-XsheetConfigButtonBgColor:rgba(255,255,255,0);qproperty-XsheetConfigButtonImage:url('../Default/imgs/white/x_config.svg');qproperty-TimelinePreviewButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelinePreviewButtonOnImage:url('../Default/imgs/white/timeline_toggle_on.svg');qproperty-TimelinePreviewButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelinePreviewButtonOffImage:url('../Default/imgs/white/timeline_toggle_off.svg');qproperty-TimelineCamstandButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelineCamstandButtonOnImage:url('../Default/imgs/white/timeline_toggle_on.svg');qproperty-TimelineCamstandButtonTranspImage:url('../Default/imgs/white/timeline_toggle_transp.svg');qproperty-TimelineCamstandButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelineCamstandButtonOffImage:url('../Default/imgs/white/timeline_toggle_off.svg');qproperty-TimelineLockButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelineLockButtonOnImage:url('../Default/imgs/white/timeline_toggle_on.svg');qproperty-TimelineLockButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelineLockButtonOffImage:url('../Default/imgs/white/timeline_toggle_off.svg');qproperty-TimelineConfigButtonBgColor:rgba(255,255,255,0);qproperty-TimelineConfigButtonImage:url('../Default/imgs/white/timeline_config.svg');qproperty-LayerHeaderPreviewImage:url('../Default/imgs/white/layer_header_prev_eye.svg');qproperty-LayerHeaderPreviewOverImage:url('../Default/imgs/white/layer_header_prev_eye_over.svg');qproperty-LayerHeaderCamstandImage:url('../Default/imgs/white/layer_header_table_view.svg');qproperty-LayerHeaderCamstandOverImage:url('../Default/imgs/white/layer_header_table_view_over.svg');qproperty-LayerHeaderLockImage:url('../Default/imgs/white/lock_on.svg');qproperty-LayerHeaderLockOverImage:url('../Default/imgs/white/lock_on_over.svg')}#XSheetToolbar{margin:0;padding:0;border:0}#XSheetToolbar QToolButton{padding:0;margin:4 1;min-height:19;height:19}#XSheetToolbar::separator:horizontal{margin:0 4}#FunctionEditor QToolBar{border-bottom:1 solid #212223}#FunctionEditor QToolBar QToolBar{border:0}#FunctionEditor QToolBar QLabel{margin-left:5}#FunctionEditor QToolBar QToolButton{height:18}#FunctionEditorTree{border-top:1 solid #212223}FunctionTreeView{qproperty-TextColor:#d6d8dd;qproperty-CurrentTextColor:#E66464}FunctionPanel{qproperty-BGColor:#343638;qproperty-ValueLineColor:#28292b;qproperty-FrameLineColor:#28292b;qproperty-OtherCurvesColor:#7f8386;qproperty-RulerBackground:#2d2e30;qproperty-TextColor:#d6d8dd;qproperty-SubColor:#000;qproperty-SelectedColor:#FFA500}SpreadsheetViewer{qproperty-LightLightBGColor:#393b3d;qproperty-CurrentRowBgColor:#506082;qproperty-LightLineColor:#262728;qproperty-MarkerLineColor:#1E96C4;qproperty-BGColor:#414345;qproperty-VerticalLineColor:#222;qproperty-KeyFrameColor:#995d1d;qproperty-KeyFrameBorderColor:#c9b04b;qproperty-SelectedKeyFrameColor:#be772b;qproperty-InBetweenColor:#666250;qproperty-InBetweenBorderColor:#cdcec8;qproperty-SelectedInBetweenColor:#7d7a6c;qproperty-SelectedEmptyColor:#64676a;qproperty-SelectedSceneRangeEmptyColor:#6d7073;qproperty-TextColor:#d6d8dd;qproperty-ColumnHeaderBorderColor:#777b7f;qproperty-SelectedColumnTextColor:#E66464}#ExpressionField{background-color:#e0e1e2;border:1 solid #2d2e2f;margin:0}#FunctionSegmentViewerLinkButton{background-image:url('../Default/imgs/white/segment_unlinked.svg');background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:hover{background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:checked{background-image:url('../Default/imgs/white/segment_linked.svg');background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:disabled{background-image:url('../Default/imgs/white/segment_disabled.svg');background-repeat:no-repeat} \ No newline at end of file diff --git a/stuff/config/qss/Dark/Dark.qss b/stuff/config/qss/Dark/Dark.qss index 646d28d..b42a3d6 100644 --- a/stuff/config/qss/Dark/Dark.qss +++ b/stuff/config/qss/Dark/Dark.qss @@ -1 +1 @@ -.button-show,#LoadLevelShowButton,#CleanupSettingsShowButton,#OutputSettingsShowButton,#FxSettingsPreviewShowButton{image:url('../Default/imgs/white/plus.svg');image-position:center center;margin:0;padding:1;min-width:10;min-height:10}.button-show:checked,#LoadLevelShowButton:checked,#CleanupSettingsShowButton:checked,#OutputSettingsShowButton:checked,#FxSettingsPreviewShowButton:checked{background-color:#191919;border-color:#141414;image:url('../Default/imgs/white/minus.svg')}.button-show:checked:pressed,#LoadLevelShowButton:checked:pressed,#CleanupSettingsShowButton:checked:pressed,#OutputSettingsShowButton:checked:pressed,#FxSettingsPreviewShowButton:checked:pressed{background-color:#191919;border-color:#141414}.button-show:checked:hover,#LoadLevelShowButton:checked:hover,#CleanupSettingsShowButton:checked:hover,#OutputSettingsShowButton:checked:hover,#FxSettingsPreviewShowButton:checked:hover{background-color:#1e1e1e}.button-tool,QToolButton,#CameraSettingsRadioButton::indicator,#ForceSquaredPixelButton,#SchematicBottomFrame QToolBar QToolButton,#EditToolLockButton::indicator,#flipCustomize{background-color:rgba(255,255,255,0);border:1 solid rgba(255,255,255,0);border-radius:2;color:#dbdbdb;margin:1;padding:0}.button-tool:hover,QToolButton:hover,#CameraSettingsRadioButton::indicator:hover,#ForceSquaredPixelButton:hover,#colorSliderAddButton:hover,#colorSliderSubButton:hover,#SchematicBottomFrame QToolBar QToolButton:hover,#EditToolLockButton::indicator:hover,#flipCustomize:hover{background-color:#5e5e5e;border-color:#5e5e5e;color:#dbdbdb}.button-tool:pressed,QToolButton:pressed,#CameraSettingsRadioButton::indicator:pressed,#ForceSquaredPixelButton:pressed,#colorSliderAddButton:pressed,#colorSliderSubButton:pressed,#SchematicBottomFrame QToolBar QToolButton:pressed,#EditToolLockButton::indicator:pressed,#flipCustomize:pressed{background-color:#191919;border-color:#141414;color:#dbdbdb}.button-tool:checked,QToolButton:checked,#CameraSettingsRadioButton::indicator:checked,#ForceSquaredPixelButton:checked,#SchematicBottomFrame QToolBar QToolButton:checked,#EditToolLockButton::indicator:checked,#flipCustomize:checked{background-color:#5385a6;border-color:#5385a6;color:#fff}.button-tool:checked:hover,QToolButton:checked:hover,#CameraSettingsRadioButton::indicator:checked:hover,#ForceSquaredPixelButton:checked:hover,#SchematicBottomFrame QToolBar QToolButton:checked:hover,#EditToolLockButton::indicator:checked:hover,#flipCustomize:checked:hover{background-color:#6c98b6;border-color:#6c98b6}.button-tool:disabled,QToolButton:disabled,#CameraSettingsRadioButton::indicator:disabled,#ForceSquaredPixelButton:disabled,#SchematicBottomFrame QToolBar QToolButton:disabled,#EditToolLockButton::indicator:disabled,#flipCustomize:disabled{color:#808080}.button-flat,PaletteViewer QToolBar QToolButton{background-color:none;border:0;border-radius:0;margin:0}.button-flat:hover,PaletteViewer QToolBar QToolButton:hover{background-color:#5e5e5e}.button-flat:pressed,PaletteViewer QToolBar QToolButton:pressed{background-color:#161616}.frame,.GroupBox,#LoadLevelFrame,#PsdSettingsGroupBox,#CleanupSettingsFrame,#OutputSettingsBox,#OutputSettingsCameraBox,#SolidLineFrame,#FunctionParametersPanel,QGroupBox{border:1 solid #161616;border-radius:2}.tab-container,#TabBarContainer{background-color:transparent;qproperty-BottomAboveLineColor:#262626;qproperty-BottomBelowLineColor:#161616}.tab-flat,#StyleEditorTabBar::tab,#PaletteTabBar::tab,#FxSettingsTabBar::tab{background-color:#262626;border-right:1 solid #161616;border-bottom:1 solid #161616;color:#8b8b8b;padding:3 4 3 4}.tab-flat:hover,#StyleEditorTabBar::tab:hover,#PaletteTabBar::tab:hover,#FxSettingsTabBar::tab:hover{background-color:#303030;color:#8b8b8b}.tab-flat:selected,#StyleEditorTabBar::tab:selected,#PaletteTabBar::tab:selected,#FxSettingsTabBar::tab:selected{background-color:#303030;color:#f4f4f4;border-bottom-color:#303030}.tab-flat:only-one,#StyleEditorTabBar::tab:only-one,#PaletteTabBar::tab:only-one,#FxSettingsTabBar::tab:only-one{margin:0}.tab-round{background-color:#262626;border-top:1 solid #161616;border-right:1 solid #161616;border-left:1 solid #161616;border-bottom:1 solid #161616;color:#8b8b8b;margin:3 -1 0 0;padding:2 7 1 7}.tab-round:hover{background-color:#303030;color:#8b8b8b}.tab-round:selected{background-color:#303030;border-top-right-radius:2;border-top-left-radius:2;border-bottom-color:#303030;color:#f4f4f4;margin:1 -1 -1 0;padding:2 7 2 7}.tab-round:only-one{margin:1 0 0 0;padding:3 7 3 7}.tab-round:last{margin-right:0;border-top-right-radius:2}.tab-round:first{border-top-left-radius:2}QWidget{background-color:#303030;color:#cecece}QWidget:disabled{color:#808080}QFrame{border:0;margin:0;padding:0}QToolTip,#helpToolTip{background-color:#fff;border:1 solid #000;color:#000;padding:1 1}#DockSeparator,QMainWindow::separator,QSplitter::handle{background-color:#0c0c0c;height:4;width:4}#TDockPlaceholder{background-color:#F77272}TPanel{background-color:#0c0c0c}#TopBar{background:#303030;border:0;border-bottom:1 solid #161616;height:21}#TopBar #EditToolLockButton{background:#303030;spacing:0}#TopBar #EditToolLockButton::indicator{background:none;border:none;height:18;margin:1 2 0 0;padding-left:0;padding-right:0}#TopBarTabContainer{background-color:#303030;margin-bottom:1}#StackedMenuBar{border:0;margin:0;padding:0}QMenuBar{background-color:#303030;border:0}QMenuBar::item{background-color:#303030;border-left:1 solid #303030;margin:0;padding:3 5}QMenuBar::item:selected{background-color:rgba(255,255,255,0.15);color:#cecece}QMenuBar::item:pressed{background-color:#5385a6;color:#fff}#TopBarTab{margin:0;padding:0}#TopBarTab::tab{background-color:#262626;border-top:1 solid #161616;border-right:1 solid #161616;color:#8b8b8b;margin:0 0 0 0;padding:2 8 3 8}#TopBarTab::tab:hover{background-color:#303030;color:#8b8b8b}#TopBarTab::tab:selected{background-color:#303030;color:#f4f4f4}#TopBarTab::tab:first{border-left:1 solid #161616}#TopBarTab::tab:last{border-right:1 solid #161616}QMenu{background-color:#303030;border:1 solid #161616;padding:2 0}QMenu::item{padding:3 28}QMenu::item:selected{background-color:#5385a6;color:#fff}QMenu::item:checked{color:#cecece}QMenu::item:checked:selected{background-color:#5385a6;color:#fff}QMenu::item:disabled{background:none;color:#808080}QMenu::item:disabled:selected{border-color:transparent}QMenu::separator{border-top:1 solid #161616;height:0;margin:2 0}QMenu::icon{border-radius:2;margin:0 0 0 3;padding:1}QMenu::icon:checked{background-color:#5385a6}QMenu::indicator{margin-left:7}TPanelTitleBar{background-color:#262626;border-color:#161616;border-style:solid;border-width:0 0 1 0;height:20;min-height:20;qproperty-TitleColor:#7d7d7d;qproperty-ActiveTitleColor:#fff;qproperty-BorderPixmap:url('none');qproperty-ActiveBorderPixmap:url('../Default/imgs/white/none');qproperty-FloatBorderPixmap:url('none');qproperty-FloatActiveBorderPixmap:url('../Default/imgs/white/none')}QAbstractScrollArea::corner{background-color:#262626}QScrollBar{background-color:#262626;border:0}QScrollBar:horizontal{height:16;margin:0}QScrollBar:vertical{margin:0;width:16}QScrollBar::handle{border:1 solid #3a3a3a;border-radius:4}QScrollBar::handle:horizontal:hover,QScrollBar::handle:vertical:hover{background-color:#4f4f4f;border-color:#4f4f4f}QScrollBar::handle:horizontal:pressed,QScrollBar::handle:vertical:pressed{background-color:#636363;border-color:#636363}QScrollBar::handle:horizontal{background-color:#3a3a3a;margin:3 16;min-width:20}QScrollBar::handle:vertical{background-color:#3a3a3a;margin:16 3;min-height:20}QScrollBar::add-line{subcontrol-origin:margin;border:0}QScrollBar::add-line:horizontal{subcontrol-position:right;background-color:#262626;margin:0;width:16}QScrollBar::add-line:vertical{subcontrol-position:bottom;background-color:#262626;margin:0;height:16}QScrollBar::sub-line{border:0;subcontrol-origin:margin}QScrollBar::sub-line:horizontal{subcontrol-position:left;background-color:#262626;margin:0;width:16}QScrollBar::sub-line:vertical{subcontrol-position:top;background-color:#262626;margin:0;height:16}QScrollBar::up-arrow:vertical{image:url('../Default/imgs/white/scroll-up.svg');image-position:center center}QScrollBar::up-arrow:vertical:pressed{margin:1 0 0 0}QScrollBar::down-arrow:vertical{image:url('../Default/imgs/white/scroll-down.svg');image-position:center center}QScrollBar::down-arrow:vertical:pressed{margin:1 0 0 0}QScrollBar::left-arrow:horizontal{image:url('../Default/imgs/white/scroll-left.svg');image-position:center center}QScrollBar::left-arrow:horizontal:pressed{margin:1 0 0 0}QScrollBar::right-arrow:horizontal{image:url('../Default/imgs/white/scroll-right.svg');image-position:center center}QScrollBar::right-arrow:horizontal:pressed{margin:1 0 0 0}QScrollBar::sub-page:horizontal,QScrollBar::add-page:horizontal,QScrollBar::sub-page:vertical,QScrollBar::add-page:vertical{background:none}QToolBar{padding:0}QToolBar::separator:horizontal{border-left:1 solid #161616;margin:0 1;width:0}QToolBar::separator:vertical{border-top:1 solid #161616;height:0;margin:1 0}QToolBar QLabel{margin-top:1}QToolBar QToolBar{border:0}QToolButton::menu-indicator{image:none}QToolButton::menu-button{border-image:none}.DvScrollWidget QPushButton,DvScrollWidget QPushButton,#ScrollLeftButton QPushButton,#ScrollRightButton QPushButton,#ScrollUpButton QPushButton,#ScrollDownButton QPushButton{background-color:#515151;border:0 solid red;border-radius:0;padding:0;max-width:16}.DvScrollWidget QPushButton:hover,DvScrollWidget QPushButton:hover,#ScrollLeftButton QPushButton:hover,#ScrollRightButton QPushButton:hover,#ScrollUpButton QPushButton:hover,#ScrollDownButton QPushButton:hover{background-color:#5e5e5e}.DvScrollWidget QPushButton:pressed,DvScrollWidget QPushButton:pressed,#ScrollLeftButton QPushButton:pressed,#ScrollRightButton QPushButton:pressed,#ScrollUpButton QPushButton:pressed,#ScrollDownButton QPushButton:pressed{background-color:#191919}#ScrollLeftButton,#ScrollRightButton,#ScrollUpButton,#ScrollDownButton{margin:0;min-width:16}#ScrollLeftButton{border-right:1 solid #161616;image:url('../Default/imgs/white/scroll-left.svg')}#ScrollRightButton{border-left:1 solid #161616;margin-left:3;image:url('../Default/imgs/white/scroll-right.svg')}#ScrollUpButton{image:url('../Default/imgs/white/scroll-up.svg')}#ScrollDownButton{image:url('../Default/imgs/white/scroll-down.svg')}#keyFrameNavigator{background:none;margin:0;padding:0}#keyFrameNavigator QToolButton{min-width:18}#keyFrameNavigator #PreviousKey{image:url('../Default/imgs/white/prevkey.svg')}#keyFrameNavigator #PreviousKey:hover{image:url('../Default/imgs/white/prevkey_over.svg')}#keyFrameNavigator #PreviousKey:disabled{image:url('../Default/imgs/white/prevkey_disabled.svg')}#keyFrameNavigator #NextKey{image:url('../Default/imgs/white/nextkey.svg')}#keyFrameNavigator #NextKey:hover{image:url('../Default/imgs/white/nextkey_over.svg')}#keyFrameNavigator #NextKey:disabled{image:url('../Default/imgs/white/nextkey_disabled.svg')}.treeview,QTreeWidget,QTreeView,#FunctionEditorTree{background-color:#262626;alternate-background-color:#2b2b2b;border:0;margin:0;outline:0}.treeview::item:selected,QTreeWidget::item:selected,QTreeView::item:selected,#FunctionEditorTree::item:selected{background-color:#5385a6;color:#fff}.treeview::branch:adjoins-item,QTreeWidget::branch:adjoins-item,QTreeView::branch:adjoins-item,#FunctionEditorTree::branch:adjoins-item{border-image:url('')}.treeview::branch:has-siblings,QTreeWidget::branch:has-siblings,QTreeView::branch:has-siblings,#FunctionEditorTree::branch:has-siblings{border-image:url('')}.treeview::branch:has-siblings:adjoins-item,QTreeWidget::branch:has-siblings:adjoins-item,QTreeView::branch:has-siblings:adjoins-item,#FunctionEditorTree::branch:has-siblings:adjoins-item{border-image:url('')}.treeview::branch:has-children:closed,QTreeWidget::branch:has-children:closed,QTreeView::branch:has-children:closed,#FunctionEditorTree::branch:has-children:closed{background:url('../Default/imgs/white/treebranch-closed.svg') no-repeat;background-position:center center;border-image:none;image:none}.treeview::branch:has-children:open,QTreeWidget::branch:has-children:open,QTreeView::branch:has-children:open,#FunctionEditorTree::branch:has-children:open{background:url('../Default/imgs/white/treebranch-open.svg') no-repeat;background-position:center center;image:none}.treeview::branch:has-children:has-siblings:closed,QTreeWidget::branch:has-children:has-siblings:closed,QTreeView::branch:has-children:has-siblings:closed,#FunctionEditorTree::branch:has-children:has-siblings:closed{background:url('../Default/imgs/white/treebranch-closed.svg') no-repeat;background-position:center center;border-image:none;image:none}.treeview::branch:has-children:has-siblings:open,QTreeWidget::branch:has-children:has-siblings:open,QTreeView::branch:has-children:has-siblings:open,#FunctionEditorTree::branch:has-children:has-siblings:open{background:url('../Default/imgs/white/treebranch-open.svg') no-repeat;background-position:center center;border-image:none;image:none}QListView{outline:0;background:#262626;alternate-background-color:#2b2b2b}#TabBarContainer{background-color:#262626}.Button,QPushButton,.ComboBox,.ComboBox:checked,QComboBox,QComboBox:checked{background-color:#515151;border:1 solid #303030;border-radius:2;color:#dbdbdb;margin:0;padding:3 15}.Button:hover,QPushButton:hover,.ComboBox:hover,#ViewerFpsSlider::sub-line:horizontal:hover,#ViewerFpsSlider::add-line:horizontal:hover,QComboBox:hover{background-color:#5e5e5e;border-color:#303030;color:#dbdbdb}.Button:pressed,QPushButton:pressed,#ViewerFpsSlider::sub-line:horizontal:pressed,#ViewerFpsSlider::add-line:horizontal:pressed{background-color:#191919;border-color:#141414;color:#dbdbdb}.Button:checked,QPushButton:checked{background-color:#191919;border-color:#141414;color:#dbdbdb}.Button:checked:hover,QPushButton:checked:hover{background-color:#1e1e1e}.Button:checked:hover:pressed,QPushButton:checked:hover:pressed{background:#191919}.Button:disabled,QPushButton:disabled,.ComboBox:disabled,#ViewerFpsSlider::sub-line:horizontal:disabled,#ViewerFpsSlider::add-line:horizontal:disabled,QComboBox:disabled{background-color:#3d3d3d;border-color:#303030;color:#808080}#PushButton_NoPadding{padding:3}.ComboBox,.ComboBox:checked,QComboBox,QComboBox:checked{padding:1 0 1 4;margin:1 0}.ComboBox::drop-down,QComboBox::drop-down{image:url('../Default/imgs/white/combo_downarrow.svg');image-position:center center;width:16}.ComboBox::drop-down:disabled,QComboBox::drop-down:disabled{image:url('../Default/imgs/white/combo_downarrow_disabled.svg')}.ComboBox QAbstractItemView,QComboBox QAbstractItemView{background-color:#303030;border:1 solid #161616;selection-background-color:#5385a6;selection-color:#fff}.LineEdit,QLineEdit,#TaskSheetItem,#tasksRemoveBox,#tasksAddBox{background-color:#1c1c1c;border:1 solid #3d3d3d;border-radius:2;color:#cecece;selection-background-color:#5385a6;selection-color:#fff;padding:0 0 0 1}.LineEdit:focus,QLineEdit:focus,#TaskSheetItem:focus,#tasksRemoveBox:focus,#tasksAddBox:focus{background-color:#1c1c1c;border-color:#5385a6;color:#cecece}.LineEdit:disabled,QLineEdit:disabled,#TaskSheetItem:disabled,#tasksRemoveBox:disabled,#tasksAddBox:disabled{background-color:#262626;border-color:#363636;color:#808080}.CheckBox,QCheckBox{color:#cecece}.CheckBox:hover,QCheckBox:hover,.RadioButton:hover,QRadioButton:hover{color:#fff}.CheckBox:disabled,QCheckBox:disabled{color:#808080}.CheckBox::indicator,QMenu::indicator,QCheckBox::indicator,.GroupBox::indicator,QGroupBox::indicator{background-color:#1c1c1c;border:1 solid #3d3d3d;border-radius:2;height:9;padding:1;width:9}.CheckBox::indicator:hover,QMenu::indicator:hover,.CheckBox::indicator:checked:hover,QCheckBox::indicator:hover,.GroupBox::indicator:hover,QMenu::indicator:checked:hover,QCheckBox::indicator:checked:hover,.GroupBox::indicator:checked:hover,QGroupBox::indicator:hover,QGroupBox::indicator:checked:hover{background-color:#1c1c1c;border-color:#5385a6}.CheckBox::indicator:checked,QMenu::indicator:checked,QCheckBox::indicator:checked,.GroupBox::indicator:checked,QGroupBox::indicator:checked{background-color:#1c1c1c;border-color:#3d3d3d;image:url('../Default/imgs/white/checkmark.svg')}.CheckBox::indicator:checked:disabled,QMenu::indicator:checked:disabled,QCheckBox::indicator:checked:disabled,.GroupBox::indicator:checked:disabled,QGroupBox::indicator:checked:disabled{background-color:#262626;border-color:#191919;image:url('../Default/imgs/white/checkmark_disabled.svg')}.CheckBox::indicator:disabled,QMenu::indicator:disabled,QCheckBox::indicator:disabled,.GroupBox::indicator:disabled,QGroupBox::indicator:disabled{background-color:#262626;border-color:#191919}.RadioButton::indicator:unchecked,QRadioButton::indicator:unchecked,#CameraSettingsRadioButton_Small::indicator:unchecked{image:url('../Default/imgs/white/radiobutton_unchecked.svg');image-position:center center}.RadioButton::indicator:checked,QRadioButton::indicator:checked,#CameraSettingsRadioButton_Small::indicator:checked{image:url('../Default/imgs/white/radiobutton_checked.svg');image-position:center center}.GroupBox,QGroupBox{margin:6 0 0 0;padding:5 0}.GroupBox::title,QGroupBox::title{subcontrol-origin:margin;left:15;margin:-3 0 0 0;padding:0 3}.GroupBox::title:hover,QGroupBox::title:hover{color:#fff}.GroupBox::title:disabled,QGroupBox::title:disabled{color:#808080}.GroupBox::indicator,QGroupBox::indicator{subcontrol-origin:margin;margin-top:2}.GroupBox:disabled,QGroupBox:disabled{color:#808080}.Slider::groove:horizontal,QSlider::groove:horizontal{background-color:transparent;background-image:url('../Default/imgs/white/slider-groove_dark.svg');background-position:center center;background-repeat:repeat-x;margin:0;height:20;min-height:20}.Slider::groove:horizontal:disabled,QSlider::groove:horizontal:disabled{background-image:url('../Default/imgs/white/slider-groove_disabled_dark.svg')}.Slider::handle:horizontal,QSlider::handle:horizontal{width:10;margin:-2 -1;image:url('../Default/imgs/white/slider-handle.svg')}.Slider::handle:horizontal:disabled,QSlider::handle:horizontal:disabled{image:url('../Default/imgs/white/slider-handle_disabled.svg')}#IntPairField,#DoublePairField{qproperty-LightLineColor:#191919;qproperty-LightLineEdgeColor:#191919;qproperty-DarkLineColor:#191919;qproperty-MiddleLineColor:#191919;qproperty-HandleLeftPixmap:url("../Default/imgs/white/slider-handle.svg");qproperty-HandleRightPixmap:url("../Default/imgs/white/slider-handle.svg");qproperty-HandleLeftGrayPixmap:url("../Default/imgs/white/slider-handle_disabled.svg");qproperty-HandleRightGrayPixmap:url("../Default/imgs/white/slider-handle_disabled.svg")}#DirTreeView{background-color:#262626;alternate-background-color:#262626;border:1 solid #161616;border-right:0}DvItemViewerPanel{qproperty-TextColor:#cecece;qproperty-AlternateBackground:#282828;qproperty-SelectedTextColor:#fff;qproperty-FolderTextColor:#9fdaff;qproperty-SelectedItemBackground:#5385a6}#FileBrowser DvItemViewerPanel,#SceneCast DvItemViewerPanel{background-color:#303030}#FileBrowser #castFrame,#SceneCast #castFrame{border-top:1 solid #161616;border-right:1 solid #161616;border-bottom:1 solid #161616;margin:0}#FileBrowser QToolButton,#SceneCast QToolButton{padding:1}DvDirTreeView{qproperty-TextColor:#cecece;qproperty-SelectedTextColor:#fff;qproperty-SelectedItemBackground:#5385a6;qproperty-FolderTextColor:#9fdaff;qproperty-SelectedFolderTextColor:#fff;alternate-background-color:#2b2b2b;background-color:#262626;border:1 solid #161616}#FileDoesNotExistLabel{color:#f00}#SceneCast QToolBar{border-top:1 solid #161616}#SceneCast QToolButton{margin:3 1 2 1;padding:1}#CastBrowser{border:0;margin:0}#FilmStrip QComboBox{border-radius:0;border-width:0}#FilmStrip QComboBox QAbstractItemView{background-color:#303030}#CleanupSettings #CleanupSettingsFrame{margin-top:2;margin-bottom:4}#CleanupSettings QGroupBox{margin-bottom:3}ParamsPage{qproperty-TextColor:#cecece}#CameraSettingsButton{padding:2}#CameraSettingsRadioButton:hover{background:none}#CameraSettingsRadioButton::indicator{border:1 solid rgba(255,255,255,0);height:18;padding:0;width:18}#CameraSettingsRadioButton::indicator:unchecked{image:url('../Default/imgs/white/lock_off.svg')}#CameraSettingsRadioButton::indicator:checked{background-color:#C34040;border-color:#C34040;image:url('../Default/imgs/white/lock_on.svg')}#CameraSettingsRadioButton::indicator:checked:hover{background-color:#d57a7a;border-color:#d57a7a}#CameraSettingsDPI{color:#9fdaff}#CameraSettingsRadioButton_Small{padding:0}#CameraSettingsRadioButton_Small::indicator{background-color:transparent;border:0;height:21;margin:0;width:11}#ForceSquaredPixelButton{height:16;border:1 solid rgba(255,255,255,0);image:url('../Default/imgs/white/fsp_unchecked.svg');padding:2;width:16;margin:0}#ForceSquaredPixelButton:checked{image:url('../Default/imgs/white/fsp_checked.svg')}#OutputSettingsLabel{color:#9fdaff}PencilTestPopup{min-height:730px;min-width:512px}#MatchLineButton{background-color:#565656}#MatchLineButton:checked{background-color:#7d7d7d;border:2 solid #5385a6;border-radius:2}#LargeSizedText{font-size:17}#StartupLabel{padding:3}#StartupLabel:hover{background:#4a4a4a}QStatusBar{background-color:#c0c0c0}QStatusBar::item{border:0}QStatusBar QLabel{background-color:#c0c0c0}QStatusBar #StatusBarLabel{background-color:#fff;padding:1 3}#TitleTxtLabel{color:#9fdaff}#StyleEditor QPushButton{margin:2 1;padding:0}#StyleEditor #TabBarContainer{margin-left:-4}#StyleEditor #bottomWidget{border-top:1 solid #161616;padding:3 2 8 3}#StyleEditor #bottomWidget QPushButton{padding:3 5}#StyleEditorTabBar::tab::first{border-left:1 solid #161616}#HexagonalColorWheel{qproperty-BGColor:#303030}#colorSlider::groove:horizontal{height:1;border-image:none}#colorSlider::handle:horizontal{width:8;margin:-8 -4}#colorSliderAddButton,#colorSliderSubButton{background:none;border-color:transparent;image-position:center center;min-height:16;padding:0;min-width:18}#colorSliderAddButton{image:url('../Default/imgs/white/scroll-right.svg')}#colorSliderSubButton{image:url('../Default/imgs/white/scroll-left.svg')}#PlainColorPageParts{border-bottom:1 solid #161616}#PlainColorPageParts QLineEdit{max-width:35}PaletteViewer DvScrollWidget QPushButton{border-top:0;margin-bottom:1;max-width:15;min-width:15}PaletteViewer DvScrollWidget #ScrollLeftButton{border-radius:0;margin-bottom:1;max-width:16;min-width:16}PaletteViewer DvScrollWidget #ScrollRightButton{border-radius:0;margin-left:1;margin-bottom:1;max-width:16;min-width:16}PaletteViewer QToolBar{background:none;border-bottom:1 solid #161616;padding:0;margin:0}PaletteViewer QToolBar::separator:horizontal{margin:0}PaletteViewer QToolBar QToolButton{margin:0 0 1 0;padding:1 0 2 0}#PageViewer{qproperty-TextColor:#cecece}#PaletteLockButton{border-radius:0;margin:0 0 1 1}#PaletteLockButton:checked{background-color:#C34040;border-color:#C34040}#PaletteLockButton:checked:hover{background-color:#d57a7a;border-color:#d57a7a}#WordButton{padding-right:0;padding-left:0}QDialog{background-color:#303030}QDialog #dialogButtonFrame{background-color:#282828;border-top:1 solid #161616}QDialog #dialogButtonFrame QPushButton{border-color:#282828;outline:0}QDialog #dialogButtonFrame QPushButton:focus{background-color:#5385a6;border-color:#282828;color:#f4f4f4}QDialog #dialogButtonFrame QPushButton:focus:hover{background-color:#6c98b6}QDialog #dialogButtonFrame QPushButton:focus:pressed{background-color:#191919;border-color:#141414;color:#dbdbdb}#SceneSettings QLabel{color:#9fdaff}#PreferencesPopup QListWidget{background-color:#262626;alternate-background-color:#262626;border:1 solid #161616;font-size:13}#PreferencesPopup QListWidget::item{border:0;padding:3}#PreferencesPopup QListWidget::item:hover{color:#cecece;background-color:rgba(255,255,255,0.15)}#PreferencesPopup QListWidget::item:selected{background-color:#5385a6;color:#fff}#ShortcutTree{border:1 solid #161616}#ShortcutTree::item{padding:1 0}#ShortcutTree QScrollBar:vertical{width:16;margin-right:-1}ProjectPopup QLabel{color:#9fdaff}#GearButton{qproperty-icon:url('../Default/imgs/white/gear.svg')}#SubfolderButton{qproperty-icon:url('../Default/imgs/white/subfolder.svg')}SchematicViewer{qproperty-TextColor:#cecece;qproperty-VerticalLineColor:#090909;qproperty-LevelColumnColor:#4C6E4C;qproperty-VectorColumnColor:#7B7B4C;qproperty-ChildColumnColor:#6A526B;qproperty-FullcolorColumnColor:#657A96;qproperty-FxColumnColor:#56553C;qproperty-PaletteColumnColor:#3A655F;qproperty-MeshColumnColor:#684D86;qproperty-ReferenceColumnColor:#616161;qproperty-TableColor:#62628c;qproperty-ActiveCameraColor:#2d7dca;qproperty-OtherCameraColor:#6c797b;qproperty-GroupColor:#3b6e9c;qproperty-PegColor:#9f6e3c;qproperty-SplineColor:#6a9d1c;qproperty-ActiveOutputColor:#2d7dca;qproperty-OtherOutputColor:#6c797b;qproperty-XsheetColor:#62628c;qproperty-NormalFxColor:#6a7e96;qproperty-MacroFxColor:#815c79;qproperty-ImageAdjustFxColor:#656287;qproperty-LayerBlendingFxColor:#4f757d;qproperty-MatteFxColor:#ae7171;qproperty-SchematicPreviewButtonBgOnColor:#c8c864;qproperty-SchematicPreviewButtonOnImage:url('../Default/imgs/white/x_prev_eye_on.svg');qproperty-SchematicPreviewButtonBgOffColor:#616161;qproperty-SchematicPreviewButtonOffImage:url('../Default/imgs/white/x_prev_eye_off.svg');qproperty-SchematicCamstandButtonBgOnColor:#eb906b;qproperty-SchematicCamstandButtonOnImage:url('../Default/imgs/white/x_table_view_on.svg');qproperty-SchematicCamstandButtonTranspImage:url('../Default/imgs/white/x_table_view_transp.svg');qproperty-SchematicCamstandButtonBgOffColor:#616161;qproperty-SchematicCamstandButtonOffImage:url('../Default/imgs/white/x_table_view_off.svg')}#SchematicBottomFrame{background-color:#303030;border:0;margin:0;padding:0}#SchematicBottomFrame QToolBar::separator:horizontal{margin:0}#SchematicBottomFrame QToolBar QToolButton{padding:0;margin:2}#SchematicSceneViewer{background-color:#232323;border-bottom:1 solid #161616}#FxSettingsTabBar::tab{border-top:1 solid #161616}#FxSettingsTabBar::tab::first,#FxSettingsTabBar::tab::only-one{border-left:1 solid #161616}FxSettings QToolBar{border-top:1 solid #161616;border-right:1 solid #161616;border-left:1 solid #161616;min-height:23;padding:3 0}FxSettings QToolBar QToolBar{border:0}#FxSettingsLabel{color:#a0e680}#FxSettingsHelpButton{background-color:#80a0dc;color:#000;padding-top:0;padding-bottom:0}#FxSettingsHelpButton:hover{background-color:#a8bee7}#ScriptConsole{font-family:'Courier New',monospace;border:0;color:#000000;padding:3}#ScriptConsole QFrame{background-color:#dcdcdc}#ScriptConsole TPanelTitleBar{background-color:#262626}#TaskSheetItemLabel{color:#cecece}#Tasks QToolBar{border-bottom:1 solid #161616;margin:0;padding:0}#Tasks QToolBar QToolButton{margin:2 2 3 2}#ToolBar QToolBar{padding-left:2}#ToolOptions TPanelTitleBar{border-right:1 solid #161616;border-bottom:0}#CommandBar TPanelTitleBar{border-right:1 solid #161616;border-bottom:0}IconViewField{qproperty-ThicknessPixmap:url("../Default/imgs/white/selectiontool_thickness.svg")}#EditToolLockButton{spacing:0}#EditToolLockButton:hover{background:none}#EditToolLockButton::indicator{border:1 solid rgba(255,255,255,0);height:18;padding:0;width:18}#EditToolLockButton::indicator:unchecked{image:url('../Default/imgs/white/lock_off.svg')}#EditToolLockButton::indicator:checked{background-color:#C34040;border-color:#C34040;image:url('../Default/imgs/white/lock_on.svg')}#EditToolLockButton::indicator:checked:hover{background-color:#d57a7a;border-color:#d57a7a}PopupButton::menu-indicator{border-left:0;height:17;image:url('../Default/imgs/white/combo_downarrow.svg');width:10}PopupButton::menu-indicator:hover{image:url('../Default/imgs/white/combo_downarrow.svg')}PopupButton::menu-indicator:disabled{image:url('../Default/imgs/white/combo_downarrow_disabled.svg')}#Cap,#Join{padding:0 4 0 -8;max-width:32;min-width:32}#Cap QMenu,#Join QMenu{max-width:28;min-width:28}#Cap QMenu::item,#Join QMenu::item{max-width:28;min-width:28;padding:0}QToolBar#MediumPaddingToolBar QToolButton{padding-left:3;padding-right:3}QToolBar#WidePaddingToolBar QToolButton{padding-left:6;padding-right:6}#CommandBar{margin:0;padding:0;border:0}#CommandBar::separator:horizontal{margin-right:3;margin-left:3}#expandButton:checked{background-color:transparent;border-color:transparent;color:#cecece}#expandButton:checked:hover{background-color:#5e5e5e;border-color:#5e5e5e}#expandButton:checked:pressed{background-color:#191919;border-color:#141414}#ComboViewerPanel Toolbar{border-bottom:1 solid #161616}#ComboViewerPanel Toolbar::separator:horizontal{margin:0 0 0 2}#ComboViewerPanel Toolbar QToolButton{margin:2 0 3 2}#ComboViewerToolOptions{border-bottom:1 solid #161616}#ComboViewer #ToolBarContainer,#ViewerPanel #ToolBarContainer,FlipBook #ToolBarContainer{background-color:transparent;border-top:2 solid #161616;border-bottom:1 solid #161616;padding-right:-1}#flipCustomize{margin-left:3}#flipCustomize::menu-button{background-color:transparent;width:35}#flipCustomize::menu-arrow{image:none}QToolBar#FlipConsolePlayToolBar::separator:horizontal{margin:0 3}QToolBar#FlipConsolePlayToolBar QToolButton{margin-top:2;margin-bottom:2;height:16;padding-left:1;padding-right:1}#ViewerFpsSlider{background-color:transparent;background-image:url('../Default/imgs/white/slider-groove_dark.svg');background-position:center center;background-repeat:repeat-x;border:0;height:19;margin:0 3 0 37;max-width:300;min-width:0}#ViewerFpsSlider::sub-line:horizontal{subcontrol-origin:absolute;background-color:#515151;border:1 solid #303030;border-top-left-radius:2;border-bottom-left-radius:2;height:16;left:-33;width:14}#ViewerFpsSlider::add-line:horizontal{subcontrol-position:left;background-color:#515151;border:1 solid #303030;border-top-right-radius:2;border-bottom-right-radius:2;left:18;height:16;image-position:center center;width:13}#ViewerFpsSlider::handle::horizontal{background-color:#898989;border:1 solid #898989;border-radius:2;margin:2 0 3 0;min-width:9;width:9;max-width:9}FlipSlider{qproperty-PBHeight:15;qproperty-PBOverlay:url('../Default/imgs/white/flipslider_dark.svg');qproperty-PBColorMarginLeft:1;qproperty-PBColorMarginTop:2;qproperty-PBColorMarginRight:1;qproperty-PBColorMarginBottom:2;qproperty-PBMarker:url('../Default/imgs/white/flipmarker_dark.svg');qproperty-PBMarkerMarginLeft:3;qproperty-PBMarkerMarginRight:3;qproperty-notStartedColor:rgba(205,101,101,0.78);qproperty-startedColor:#1abc3f;qproperty-baseColor:#1c1c1c;qproperty-finishedColor:#1c1c1c}Ruler{qproperty-ParentBGColor:#303030;qproperty-ScaleColor:#cecece}#RulerToolOptionValues{color:#000}#xsheetArea,#ScrollArea{background-color:#1c1c1c;border:0}#xsheetScrollArea{border:0}#cornerWidget QToolButton{padding:0}#xsheetColumnAreaMenu_Preview{background-color:#E6E678}#xsheetColumnAreaMenu_Lock{background-color:#F5F5F5}#xsheetColumnAreaMenu_Camstand{background-color:#FFA480}#xsheetColumnAreaMenu_Preview,#xsheetColumnAreaMenu_Lock,#xsheetColumnAreaMenu_Camstand{color:#000}#noteTextEdit{color:#000}XsheetViewer{qproperty-TextColor:#cecece;qproperty-BGColor:#282828;qproperty-LightLineColor:#1f1f1f;qproperty-MarkerLineColor:#1E96C4;qproperty-VerticalLineColor:#090909;qproperty-VerticalLineHeadColor:#686868;qproperty-PreviewFrameTextColor:#9fdaff;qproperty-CurrentRowBgColor:#506082;qproperty-OnionSkinAreaBgColor:#1e1e1e;qproperty-EmptyColumnHeadColor:#444;qproperty-SelectedColumnTextColor:#E66464;qproperty-EmptyCellColor:#303030;qproperty-NotEmptyColumnColor:#383838;qproperty-SelectedEmptyCellColor:#545454;qproperty-LevelColumnColor:#4C6E4C;qproperty-LevelColumnBorderColor:#8FB38F;qproperty-SelectedLevelColumnColor:#678667;qproperty-VectorColumnColor:#7B7B4C;qproperty-VectorColumnBorderColor:#BBBB9A;qproperty-SelectedVectorColumnColor:#949466;qproperty-ChildColumnColor:#6A526B;qproperty-ChildColumnBorderColor:#B1A3B3;qproperty-SelectedChildColumnColor:#816e82;qproperty-FullcolorColumnColor:#657A96;qproperty-FullcolorColumnBorderColor:#9EB8BB;qproperty-SelectedFullcolorColumnColor:#8895a6;qproperty-FxColumnColor:#56553C;qproperty-FxColumnBorderColor:#95958A;qproperty-SelectedFxColumnColor:#6f6e56;qproperty-ReferenceColumnColor:#616161;qproperty-ReferenceColumnBorderColor:#A2A2A2;qproperty-SelectedReferenceColumnColor:#7a7a7a;qproperty-PaletteColumnColor:#3A655F;qproperty-PaletteColumnBorderColor:#86ACA7;qproperty-SelectedPaletteColumnColor:#52807a;qproperty-MeshColumnColor:#684D86;qproperty-MeshColumnBorderColor:#BA92EF;qproperty-SelectedMeshColumnColor:#82689e;qproperty-SoundTextColumnColor:#c8c8c8;qproperty-SoundTextColumnBorderColor:#8c8c8c;qproperty-SelectedSoundTextColumnColor:#e2e2e2;qproperty-SoundColumnColor:#657456;qproperty-SoundColumnBorderColor:#A0AF7D;qproperty-SelectedSoundColumnColor:#7e8b72;qproperty-SoundColumnHlColor:#34FE5E;qproperty-SoundColumnTrackColor:#B6C29D;qproperty-ColumnHeadPastelizer:#000;qproperty-SelectedColumnHead:#506082;qproperty-LightLightBGColor:#303030;qproperty-LightBGColor:#d8d8d8;qproperty-DarkBGColor:#c9c9c9;qproperty-DarkLineColor:#7e7e7e;qproperty-XsheetColumnNameBgColor:rgba(0,0,0,0);qproperty-XsheetDragBarHighlightColor:rgba(255,255,255,0.5);qproperty-XsheetPreviewButtonBgOnColor:#c8c864;qproperty-XsheetPreviewButtonOnImage:url('../Default/imgs/white/x_prev_eye_on.svg');qproperty-XsheetPreviewButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetPreviewButtonOffImage:url('../Default/imgs/white/x_prev_eye_off.svg');qproperty-XsheetCamstandButtonBgOnColor:#eb906b;qproperty-XsheetCamstandButtonOnImage:url('../Default/imgs/white/x_table_view_on.svg');qproperty-XsheetCamstandButtonTranspImage:url('../Default/imgs/white/x_table_view_transp.svg');qproperty-XsheetCamstandButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetCamstandButtonOffImage:url('../Default/imgs/white/x_table_view_off.svg');qproperty-XsheetLockButtonBgOnColor:rgba(255,255,255,0.3);qproperty-XsheetLockButtonOnImage:url('../Default/imgs/white/x_lock_on.svg');qproperty-XsheetLockButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetLockButtonOffImage:url('../Default/imgs/white/x_lock_off.svg');qproperty-XsheetConfigButtonBgColor:rgba(255,255,255,0);qproperty-XsheetConfigButtonImage:url('../Default/imgs/white/x_config.svg');qproperty-TimelinePreviewButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelinePreviewButtonOnImage:url('../Default/imgs/white/timeline_toggle_on.svg');qproperty-TimelinePreviewButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelinePreviewButtonOffImage:url('../Default/imgs/white/timeline_toggle_off.svg');qproperty-TimelineCamstandButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelineCamstandButtonOnImage:url('../Default/imgs/white/timeline_toggle_on.svg');qproperty-TimelineCamstandButtonTranspImage:url('../Default/imgs/white/timeline_toggle_transp.svg');qproperty-TimelineCamstandButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelineCamstandButtonOffImage:url('../Default/imgs/white/timeline_toggle_off.svg');qproperty-TimelineLockButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelineLockButtonOnImage:url('../Default/imgs/white/timeline_toggle_on.svg');qproperty-TimelineLockButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelineLockButtonOffImage:url('../Default/imgs/white/timeline_toggle_off.svg');qproperty-TimelineConfigButtonBgColor:rgba(255,255,255,0);qproperty-TimelineConfigButtonImage:url('../Default/imgs/white/timeline_config.svg');qproperty-LayerHeaderPreviewImage:url('../Default/imgs/white/layer_header_prev_eye.svg');qproperty-LayerHeaderPreviewOverImage:url('../Default/imgs/white/layer_header_prev_eye_over.svg');qproperty-LayerHeaderCamstandImage:url('../Default/imgs/white/layer_header_table_view.svg');qproperty-LayerHeaderCamstandOverImage:url('../Default/imgs/white/layer_header_table_view_over.svg');qproperty-LayerHeaderLockImage:url('../Default/imgs/white/lock_on.svg');qproperty-LayerHeaderLockOverImage:url('../Default/imgs/white/lock_on_over.svg')}#XSheetToolbar{margin:0;padding:0;border:0}#XSheetToolbar QToolButton{padding:0;margin:4 1;min-height:19;height:19}#XSheetToolbar::separator:horizontal{margin:0 4}#FunctionEditor QToolBar{border-bottom:1 solid #161616}#FunctionEditor QToolBar QToolBar{border:0}#FunctionEditor QToolBar QLabel{margin-left:5}#FunctionEditor QToolBar QToolButton{height:18}#FunctionEditorTree{border-top:1 solid #161616}FunctionTreeView{qproperty-TextColor:#cecece;qproperty-CurrentTextColor:#E66464}FunctionPanel{qproperty-BGColor:#232323;qproperty-ValueLineColor:#161616;qproperty-FrameLineColor:#161616;qproperty-OtherCurvesColor:#707070;qproperty-RulerBackground:#1b1b1b;qproperty-TextColor:#cecece;qproperty-SubColor:#000;qproperty-SelectedColor:#FFA500}SpreadsheetViewer{qproperty-LightLightBGColor:#303030;qproperty-CurrentRowBgColor:#506082;qproperty-LightLineColor:#1f1f1f;qproperty-MarkerLineColor:#1E96C4;qproperty-BGColor:#383838;qproperty-VerticalLineColor:#090909;qproperty-KeyFrameColor:#995d1d;qproperty-KeyFrameBorderColor:#c9b04b;qproperty-SelectedKeyFrameColor:#be772b;qproperty-InBetweenColor:#666250;qproperty-InBetweenBorderColor:#cdcec8;qproperty-SelectedInBetweenColor:#7d7a6c;qproperty-SelectedEmptyColor:#545454;qproperty-SelectedSceneRangeEmptyColor:#5d5d5d;qproperty-TextColor:#cecece;qproperty-ColumnHeaderBorderColor:#686868;qproperty-SelectedColumnTextColor:#E66464}#ExpressionField{background-color:#cecece;border:1 solid #1b1b1b;margin:0}#FunctionSegmentViewerLinkButton{background-image:url('../Default/imgs/white/segment_unlinked.svg');background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:hover{background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:checked{background-image:url('../Default/imgs/white/segment_linked.svg');background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:disabled{background-image:url('../Default/imgs/white/segment_disabled.svg');background-repeat:no-repeat} \ No newline at end of file +.button-show,#LoadLevelShowButton,#CleanupSettingsShowButton,#OutputSettingsShowButton,#FxSettingsPreviewShowButton{image:url('../Default/imgs/white/plus.svg');image-position:center center;margin:0;padding:1;min-width:10;min-height:10}.button-show:checked,#LoadLevelShowButton:checked,#CleanupSettingsShowButton:checked,#OutputSettingsShowButton:checked,#FxSettingsPreviewShowButton:checked{background-color:#191919;border-color:#141414;image:url('../Default/imgs/white/minus.svg')}.button-show:checked:pressed,#LoadLevelShowButton:checked:pressed,#CleanupSettingsShowButton:checked:pressed,#OutputSettingsShowButton:checked:pressed,#FxSettingsPreviewShowButton:checked:pressed{background-color:#191919;border-color:#141414}.button-show:checked:hover,#LoadLevelShowButton:checked:hover,#CleanupSettingsShowButton:checked:hover,#OutputSettingsShowButton:checked:hover,#FxSettingsPreviewShowButton:checked:hover{background-color:#1e1e1e}.button-tool,QToolButton,#CameraSettingsRadioButton::indicator,#ForceSquaredPixelButton,#SchematicBottomFrame QToolBar QToolButton,#EditToolLockButton::indicator,#flipCustomize{background-color:rgba(255,255,255,0);border:1 solid rgba(255,255,255,0);border-radius:2;color:#dbdbdb;margin:1;padding:0}.button-tool:hover,QToolButton:hover,#CameraSettingsRadioButton::indicator:hover,#ForceSquaredPixelButton:hover,#colorSliderAddButton:hover,#colorSliderSubButton:hover,#SchematicBottomFrame QToolBar QToolButton:hover,#EditToolLockButton::indicator:hover,#flipCustomize:hover{background-color:#5e5e5e;border-color:#5e5e5e;color:#dbdbdb}.button-tool:pressed,QToolButton:pressed,#CameraSettingsRadioButton::indicator:pressed,#ForceSquaredPixelButton:pressed,#colorSliderAddButton:pressed,#colorSliderSubButton:pressed,#SchematicBottomFrame QToolBar QToolButton:pressed,#EditToolLockButton::indicator:pressed,#flipCustomize:pressed{background-color:#191919;border-color:#141414;color:#dbdbdb}.button-tool:checked,QToolButton:checked,#CameraSettingsRadioButton::indicator:checked,#ForceSquaredPixelButton:checked,#SchematicBottomFrame QToolBar QToolButton:checked,#EditToolLockButton::indicator:checked,#flipCustomize:checked{background-color:#5385a6;border-color:#5385a6;color:#fff}.button-tool:checked:hover,QToolButton:checked:hover,#CameraSettingsRadioButton::indicator:checked:hover,#ForceSquaredPixelButton:checked:hover,#SchematicBottomFrame QToolBar QToolButton:checked:hover,#EditToolLockButton::indicator:checked:hover,#flipCustomize:checked:hover{background-color:#6c98b6;border-color:#6c98b6}.button-tool:disabled,QToolButton:disabled,#CameraSettingsRadioButton::indicator:disabled,#ForceSquaredPixelButton:disabled,#SchematicBottomFrame QToolBar QToolButton:disabled,#EditToolLockButton::indicator:disabled,#flipCustomize:disabled{color:#808080}.button-flat,PaletteViewer QToolBar QToolButton{background-color:none;border:0;border-radius:0;margin:0}.button-flat:hover,PaletteViewer QToolBar QToolButton:hover{background-color:#5e5e5e}.button-flat:pressed,PaletteViewer QToolBar QToolButton:pressed{background-color:#161616}.frame,.GroupBox,#LoadLevelFrame,#PsdSettingsGroupBox,#CleanupSettingsFrame,#OutputSettingsBox,#OutputSettingsCameraBox,#SolidLineFrame,#FunctionParametersPanel,QGroupBox{border:1 solid #161616;border-radius:2}.tab-container,#TabBarContainer{background-color:transparent;qproperty-BottomAboveLineColor:#262626;qproperty-BottomBelowLineColor:#161616}.tab-flat,#StyleEditorTabBar::tab,#PaletteTabBar::tab,#FxSettingsTabBar::tab{background-color:#262626;border-right:1 solid #161616;border-bottom:1 solid #161616;color:#8b8b8b;padding:3 4 3 4}.tab-flat:hover,#StyleEditorTabBar::tab:hover,#PaletteTabBar::tab:hover,#FxSettingsTabBar::tab:hover{background-color:#303030;color:#8b8b8b}.tab-flat:selected,#StyleEditorTabBar::tab:selected,#PaletteTabBar::tab:selected,#FxSettingsTabBar::tab:selected{background-color:#303030;color:#f4f4f4;border-bottom-color:#303030}.tab-flat:only-one,#StyleEditorTabBar::tab:only-one,#PaletteTabBar::tab:only-one,#FxSettingsTabBar::tab:only-one{margin:0}.tab-round{background-color:#262626;border-top:1 solid #161616;border-right:1 solid #161616;border-left:1 solid #161616;border-bottom:1 solid #161616;color:#8b8b8b;margin:3 -1 0 0;padding:2 7 1 7}.tab-round:hover{background-color:#303030;color:#8b8b8b}.tab-round:selected{background-color:#303030;border-top-right-radius:2;border-top-left-radius:2;border-bottom-color:#303030;color:#f4f4f4;margin:1 -1 -1 0;padding:2 7 2 7}.tab-round:only-one{margin:1 0 0 0;padding:3 7 3 7}.tab-round:last{margin-right:0;border-top-right-radius:2}.tab-round:first{border-top-left-radius:2}QWidget{background-color:#303030;color:#cecece}QWidget:disabled{color:#808080}QFrame{border:0;margin:0;padding:0}QToolTip,#helpToolTip{background-color:#fff;border:1 solid #000;color:#000;padding:1 1}#DockSeparator,QMainWindow::separator,QSplitter::handle{background-color:#0c0c0c;height:4;width:4}#TDockPlaceholder{background-color:#F77272}TPanel{background-color:#0c0c0c}#TopBar{background:#303030;border:0;border-bottom:1 solid #161616;height:21}#TopBar #EditToolLockButton{background:#303030;spacing:0}#TopBar #EditToolLockButton::indicator{background:none;border:none;height:18;margin:1 2 0 0;padding-left:0;padding-right:0}#TopBarTabContainer{background-color:#303030;margin-bottom:1}#StackedMenuBar{border:0;margin:0;padding:0}QMenuBar{background-color:#303030;border:0}QMenuBar::item{background-color:#303030;border-left:1 solid #303030;margin:0;padding:3 5}QMenuBar::item:selected{background-color:rgba(255,255,255,0.15);color:#cecece}QMenuBar::item:pressed{background-color:#5385a6;color:#fff}#TopBarTab{margin:0;padding:0}#TopBarTab::tab{background-color:#262626;border-top:1 solid #161616;border-right:1 solid #161616;color:#8b8b8b;margin:0 0 0 0;padding:2 8 3 8}#TopBarTab::tab:hover{background-color:#303030;color:#8b8b8b}#TopBarTab::tab:selected{background-color:#303030;color:#f4f4f4}#TopBarTab::tab:first{border-left:1 solid #161616}#TopBarTab::tab:last{border-right:1 solid #161616}QMenu{background-color:#303030;border:1 solid #161616;padding:2 0}QMenu::item{padding:3 28}QMenu::item:selected{background-color:#5385a6;color:#fff}QMenu::item:checked{color:#cecece}QMenu::item:checked:selected{background-color:#5385a6;color:#fff}QMenu::item:disabled{background:none;color:#808080}QMenu::item:disabled:selected{border-color:transparent}QMenu::separator{border-top:1 solid #161616;height:0;margin:2 0}QMenu::icon{border-radius:2;margin:0 0 0 3;padding:1}QMenu::icon:checked{background-color:#5385a6}QMenu::indicator{margin-left:7}TPanelTitleBar{background-color:#262626;border-color:#161616;border-style:solid;border-width:0 0 1 0;height:20;min-height:20;qproperty-TitleColor:#7d7d7d;qproperty-ActiveTitleColor:#fff;qproperty-BorderPixmap:url('none');qproperty-ActiveBorderPixmap:url('../Default/imgs/white/none');qproperty-FloatBorderPixmap:url('none');qproperty-FloatActiveBorderPixmap:url('../Default/imgs/white/none')}QAbstractScrollArea::corner{background-color:#262626}QScrollBar{background-color:#262626;border:0}QScrollBar:horizontal{height:16;margin:0}QScrollBar:vertical{margin:0;width:16}QScrollBar::handle{border:1 solid #3a3a3a;border-radius:4}QScrollBar::handle:horizontal:hover,QScrollBar::handle:vertical:hover{background-color:#4f4f4f;border-color:#4f4f4f}QScrollBar::handle:horizontal:pressed,QScrollBar::handle:vertical:pressed{background-color:#636363;border-color:#636363}QScrollBar::handle:horizontal{background-color:#3a3a3a;margin:3 16;min-width:20}QScrollBar::handle:vertical{background-color:#3a3a3a;margin:16 3;min-height:20}QScrollBar::add-line{subcontrol-origin:margin;border:0}QScrollBar::add-line:horizontal{subcontrol-position:right;background-color:#262626;margin:0;width:16}QScrollBar::add-line:vertical{subcontrol-position:bottom;background-color:#262626;margin:0;height:16}QScrollBar::sub-line{border:0;subcontrol-origin:margin}QScrollBar::sub-line:horizontal{subcontrol-position:left;background-color:#262626;margin:0;width:16}QScrollBar::sub-line:vertical{subcontrol-position:top;background-color:#262626;margin:0;height:16}QScrollBar::up-arrow:vertical{image:url('../Default/imgs/white/scroll-up.svg');image-position:center center}QScrollBar::up-arrow:vertical:pressed{margin:1 0 0 0}QScrollBar::down-arrow:vertical{image:url('../Default/imgs/white/scroll-down.svg');image-position:center center}QScrollBar::down-arrow:vertical:pressed{margin:1 0 0 0}QScrollBar::left-arrow:horizontal{image:url('../Default/imgs/white/scroll-left.svg');image-position:center center}QScrollBar::left-arrow:horizontal:pressed{margin:1 0 0 0}QScrollBar::right-arrow:horizontal{image:url('../Default/imgs/white/scroll-right.svg');image-position:center center}QScrollBar::right-arrow:horizontal:pressed{margin:1 0 0 0}QScrollBar::sub-page:horizontal,QScrollBar::add-page:horizontal,QScrollBar::sub-page:vertical,QScrollBar::add-page:vertical{background:none}QToolBar{padding:0}QToolBar::separator:horizontal{border-left:1 solid #161616;margin:0 1;width:0}QToolBar::separator:vertical{border-top:1 solid #161616;height:0;margin:1 0}QToolBar QLabel{margin-top:1}QToolBar QToolBar{border:0}QToolButton::menu-indicator{image:none}QToolButton::menu-button{border-image:none}.DvScrollWidget QPushButton,DvScrollWidget QPushButton,#ScrollLeftButton QPushButton,#ScrollRightButton QPushButton,#ScrollUpButton QPushButton,#ScrollDownButton QPushButton{background-color:#515151;border:0 solid red;border-radius:0;padding:0;max-width:16}.DvScrollWidget QPushButton:hover,DvScrollWidget QPushButton:hover,#ScrollLeftButton QPushButton:hover,#ScrollRightButton QPushButton:hover,#ScrollUpButton QPushButton:hover,#ScrollDownButton QPushButton:hover{background-color:#5e5e5e}.DvScrollWidget QPushButton:pressed,DvScrollWidget QPushButton:pressed,#ScrollLeftButton QPushButton:pressed,#ScrollRightButton QPushButton:pressed,#ScrollUpButton QPushButton:pressed,#ScrollDownButton QPushButton:pressed{background-color:#191919}#ScrollLeftButton,#ScrollRightButton,#ScrollUpButton,#ScrollDownButton{margin:0;min-width:16}#ScrollLeftButton{border-right:1 solid #161616;image:url('../Default/imgs/white/scroll-left.svg')}#ScrollRightButton{border-left:1 solid #161616;margin-left:3;image:url('../Default/imgs/white/scroll-right.svg')}#ScrollUpButton{image:url('../Default/imgs/white/scroll-up.svg')}#ScrollDownButton{image:url('../Default/imgs/white/scroll-down.svg')}#keyFrameNavigator{background:none;margin:0;padding:0}#keyFrameNavigator QToolButton{min-width:18}#keyFrameNavigator #PreviousKey{image:url('../Default/imgs/white/prevkey.svg')}#keyFrameNavigator #PreviousKey:hover{image:url('../Default/imgs/white/prevkey_over.svg')}#keyFrameNavigator #PreviousKey:disabled{image:url('../Default/imgs/white/prevkey_disabled.svg')}#keyFrameNavigator #NextKey{image:url('../Default/imgs/white/nextkey.svg')}#keyFrameNavigator #NextKey:hover{image:url('../Default/imgs/white/nextkey_over.svg')}#keyFrameNavigator #NextKey:disabled{image:url('../Default/imgs/white/nextkey_disabled.svg')}.treeview,QTreeWidget,QTreeView,#FunctionEditorTree{background-color:#262626;alternate-background-color:#2b2b2b;border:0;margin:0;outline:0}.treeview::item:selected,QTreeWidget::item:selected,QTreeView::item:selected,#FunctionEditorTree::item:selected{background-color:#5385a6;color:#fff}.treeview::branch:adjoins-item,QTreeWidget::branch:adjoins-item,QTreeView::branch:adjoins-item,#FunctionEditorTree::branch:adjoins-item{border-image:url('')}.treeview::branch:has-siblings,QTreeWidget::branch:has-siblings,QTreeView::branch:has-siblings,#FunctionEditorTree::branch:has-siblings{border-image:url('')}.treeview::branch:has-siblings:adjoins-item,QTreeWidget::branch:has-siblings:adjoins-item,QTreeView::branch:has-siblings:adjoins-item,#FunctionEditorTree::branch:has-siblings:adjoins-item{border-image:url('')}.treeview::branch:has-children:closed,QTreeWidget::branch:has-children:closed,QTreeView::branch:has-children:closed,#FunctionEditorTree::branch:has-children:closed{background:url('../Default/imgs/white/treebranch-closed.svg') no-repeat;background-position:center center;border-image:none;image:none}.treeview::branch:has-children:open,QTreeWidget::branch:has-children:open,QTreeView::branch:has-children:open,#FunctionEditorTree::branch:has-children:open{background:url('../Default/imgs/white/treebranch-open.svg') no-repeat;background-position:center center;image:none}.treeview::branch:has-children:has-siblings:closed,QTreeWidget::branch:has-children:has-siblings:closed,QTreeView::branch:has-children:has-siblings:closed,#FunctionEditorTree::branch:has-children:has-siblings:closed{background:url('../Default/imgs/white/treebranch-closed.svg') no-repeat;background-position:center center;border-image:none;image:none}.treeview::branch:has-children:has-siblings:open,QTreeWidget::branch:has-children:has-siblings:open,QTreeView::branch:has-children:has-siblings:open,#FunctionEditorTree::branch:has-children:has-siblings:open{background:url('../Default/imgs/white/treebranch-open.svg') no-repeat;background-position:center center;border-image:none;image:none}QListView{outline:0;background:#262626;alternate-background-color:#2b2b2b}#TabBarContainer{background-color:#262626}.Button,QPushButton,.ComboBox,.ComboBox:checked,QComboBox,QComboBox:checked{background-color:#515151;border:1 solid #303030;border-radius:2;color:#dbdbdb;margin:0;padding:3 15}.Button:hover,QPushButton:hover,.ComboBox:hover,#ViewerFpsSlider::sub-line:horizontal:hover,#ViewerFpsSlider::add-line:horizontal:hover,QComboBox:hover{background-color:#5e5e5e;border-color:#303030;color:#dbdbdb}.Button:pressed,QPushButton:pressed,#ViewerFpsSlider::sub-line:horizontal:pressed,#ViewerFpsSlider::add-line:horizontal:pressed{background-color:#191919;border-color:#141414;color:#dbdbdb}.Button:checked,QPushButton:checked{background-color:#191919;border-color:#141414;color:#dbdbdb}.Button:checked:hover,QPushButton:checked:hover{background-color:#1e1e1e}.Button:checked:hover:pressed,QPushButton:checked:hover:pressed{background:#191919}.Button:disabled,QPushButton:disabled,.ComboBox:disabled,#ViewerFpsSlider::sub-line:horizontal:disabled,#ViewerFpsSlider::add-line:horizontal:disabled,QComboBox:disabled{background-color:#3d3d3d;border-color:#303030;color:#808080}#PushButton_NoPadding{padding:3}.ComboBox,.ComboBox:checked,QComboBox,QComboBox:checked{padding:1 0 1 4;margin:1 0}.ComboBox::drop-down,QComboBox::drop-down{image:url('../Default/imgs/white/combo_downarrow.svg');image-position:center center;width:16}.ComboBox::drop-down:disabled,QComboBox::drop-down:disabled{image:url('../Default/imgs/white/combo_downarrow_disabled.svg')}.ComboBox QAbstractItemView,QComboBox QAbstractItemView{background-color:#303030;border:1 solid #161616;selection-background-color:#5385a6;selection-color:#fff}.LineEdit,QPlainTextEdit,QLineEdit,#TaskSheetItem,#tasksRemoveBox,#tasksAddBox{background-color:#1c1c1c;border:1 solid #3d3d3d;border-radius:2;color:#cecece;selection-background-color:#5385a6;selection-color:#fff;padding:0 0 0 1}.LineEdit:focus,QPlainTextEdit:focus,QLineEdit:focus,#TaskSheetItem:focus,#tasksRemoveBox:focus,#tasksAddBox:focus{background-color:#1c1c1c;border-color:#5385a6;color:#cecece}.LineEdit:disabled,QPlainTextEdit:disabled,QLineEdit:disabled,#TaskSheetItem:disabled,#tasksRemoveBox:disabled,#tasksAddBox:disabled{background-color:#262626;border-color:#363636;color:#808080}.CheckBox,QCheckBox{color:#cecece}.CheckBox:hover,QCheckBox:hover,.RadioButton:hover,QRadioButton:hover{color:#fff}.CheckBox:disabled,QCheckBox:disabled{color:#808080}.CheckBox::indicator,QMenu::indicator,QCheckBox::indicator,.GroupBox::indicator,QGroupBox::indicator{background-color:#1c1c1c;border:1 solid #3d3d3d;border-radius:2;height:9;padding:1;width:9}.CheckBox::indicator:hover,QMenu::indicator:hover,.CheckBox::indicator:checked:hover,QCheckBox::indicator:hover,.GroupBox::indicator:hover,QMenu::indicator:checked:hover,QCheckBox::indicator:checked:hover,.GroupBox::indicator:checked:hover,QGroupBox::indicator:hover,QGroupBox::indicator:checked:hover{background-color:#1c1c1c;border-color:#5385a6}.CheckBox::indicator:checked,QMenu::indicator:checked,QCheckBox::indicator:checked,.GroupBox::indicator:checked,QGroupBox::indicator:checked{background-color:#1c1c1c;border-color:#3d3d3d;image:url('../Default/imgs/white/checkmark.svg')}.CheckBox::indicator:checked:disabled,QMenu::indicator:checked:disabled,QCheckBox::indicator:checked:disabled,.GroupBox::indicator:checked:disabled,QGroupBox::indicator:checked:disabled{background-color:#262626;border-color:#191919;image:url('../Default/imgs/white/checkmark_disabled.svg')}.CheckBox::indicator:disabled,QMenu::indicator:disabled,QCheckBox::indicator:disabled,.GroupBox::indicator:disabled,QGroupBox::indicator:disabled{background-color:#262626;border-color:#191919}.RadioButton::indicator:unchecked,QRadioButton::indicator:unchecked,#CameraSettingsRadioButton_Small::indicator:unchecked{image:url('../Default/imgs/white/radiobutton_unchecked.svg');image-position:center center}.RadioButton::indicator:checked,QRadioButton::indicator:checked,#CameraSettingsRadioButton_Small::indicator:checked{image:url('../Default/imgs/white/radiobutton_checked.svg');image-position:center center}.GroupBox,QGroupBox{margin:6 0 0 0;padding:5 0}.GroupBox::title,QGroupBox::title{subcontrol-origin:margin;left:15;margin:-3 0 0 0;padding:0 3}.GroupBox::title:hover,QGroupBox::title:hover{color:#fff}.GroupBox::title:disabled,QGroupBox::title:disabled{color:#808080}.GroupBox::indicator,QGroupBox::indicator{subcontrol-origin:margin;margin-top:2}.GroupBox:disabled,QGroupBox:disabled{color:#808080}.Slider::groove:horizontal,QSlider::groove:horizontal{background-color:transparent;background-image:url('../Default/imgs/white/slider-groove_dark.svg');background-position:center center;background-repeat:repeat-x;margin:0;height:20;min-height:20}.Slider::groove:horizontal:disabled,QSlider::groove:horizontal:disabled{background-image:url('../Default/imgs/white/slider-groove_disabled_dark.svg')}.Slider::handle:horizontal,QSlider::handle:horizontal{width:10;margin:-2 -1;image:url('../Default/imgs/white/slider-handle.svg')}.Slider::handle:horizontal:disabled,QSlider::handle:horizontal:disabled{image:url('../Default/imgs/white/slider-handle_disabled.svg')}#IntPairField,#DoublePairField{qproperty-LightLineColor:#191919;qproperty-LightLineEdgeColor:#191919;qproperty-DarkLineColor:#191919;qproperty-MiddleLineColor:#191919;qproperty-HandleLeftPixmap:url("../Default/imgs/white/slider-handle.svg");qproperty-HandleRightPixmap:url("../Default/imgs/white/slider-handle.svg");qproperty-HandleLeftGrayPixmap:url("../Default/imgs/white/slider-handle_disabled.svg");qproperty-HandleRightGrayPixmap:url("../Default/imgs/white/slider-handle_disabled.svg")}#DirTreeView{background-color:#262626;alternate-background-color:#262626;border:1 solid #161616;border-right:0}DvItemViewerPanel{qproperty-TextColor:#cecece;qproperty-AlternateBackground:#282828;qproperty-SelectedTextColor:#fff;qproperty-FolderTextColor:#9fdaff;qproperty-SelectedItemBackground:#5385a6}#FileBrowser DvItemViewerPanel,#SceneCast DvItemViewerPanel{background-color:#303030}#FileBrowser #castFrame,#SceneCast #castFrame{border-top:1 solid #161616;border-right:1 solid #161616;border-bottom:1 solid #161616;margin:0}#FileBrowser QToolButton,#SceneCast QToolButton{padding:1}DvDirTreeView{qproperty-TextColor:#cecece;qproperty-SelectedTextColor:#fff;qproperty-SelectedItemBackground:#5385a6;qproperty-FolderTextColor:#9fdaff;qproperty-SelectedFolderTextColor:#fff;alternate-background-color:#2b2b2b;background-color:#262626;border:1 solid #161616}#FileDoesNotExistLabel{color:#f00}#SceneCast QToolBar{border-top:1 solid #161616}#SceneCast QToolButton{margin:3 1 2 1;padding:1}#CastBrowser{border:0;margin:0}#FilmStrip QComboBox{border-radius:0;border-width:0}#FilmStrip QComboBox QAbstractItemView{background-color:#303030}#CleanupSettings #CleanupSettingsFrame{margin-top:2;margin-bottom:4}#CleanupSettings QGroupBox{margin-bottom:3}ParamsPage{qproperty-TextColor:#cecece}#CameraSettingsButton{padding:2}#CameraSettingsRadioButton:hover{background:none}#CameraSettingsRadioButton::indicator{border:1 solid rgba(255,255,255,0);height:18;padding:0;width:18}#CameraSettingsRadioButton::indicator:unchecked{image:url('../Default/imgs/white/lock_off.svg')}#CameraSettingsRadioButton::indicator:checked{background-color:#C34040;border-color:#C34040;image:url('../Default/imgs/white/lock_on.svg')}#CameraSettingsRadioButton::indicator:checked:hover{background-color:#d57a7a;border-color:#d57a7a}#CameraSettingsDPI{color:#9fdaff}#CameraSettingsRadioButton_Small{padding:0}#CameraSettingsRadioButton_Small::indicator{background-color:transparent;border:0;height:21;margin:0;width:11}#ForceSquaredPixelButton{height:16;border:1 solid rgba(255,255,255,0);image:url('../Default/imgs/white/fsp_unchecked.svg');padding:2;width:16;margin:0}#ForceSquaredPixelButton:checked{image:url('../Default/imgs/white/fsp_checked.svg')}#OutputSettingsLabel{color:#9fdaff}PencilTestPopup{min-height:730px;min-width:512px}#MatchLineButton{background-color:#565656}#MatchLineButton:checked{background-color:#7d7d7d;border:2 solid #5385a6;border-radius:2}#LargeSizedText{font-size:17px}#StartupLabel{padding:3}#StartupLabel:hover{background:#4a4a4a}QStatusBar{background-color:#c0c0c0}QStatusBar::item{border:0}QStatusBar QLabel{background-color:#c0c0c0}QStatusBar #StatusBarLabel{background-color:#fff;padding:1 3}#TitleTxtLabel{color:#9fdaff}#StyleEditor QPushButton{margin:2 1;padding:0}#StyleEditor #TabBarContainer{margin-left:-4}#StyleEditor #bottomWidget{border-top:1 solid #161616;padding:3 2 8 3}#StyleEditor #bottomWidget QPushButton{padding:3 5}#StyleEditorTabBar::tab::first{border-left:1 solid #161616}#HexagonalColorWheel{qproperty-BGColor:#303030}#colorSlider::groove:horizontal{height:1;border-image:none}#colorSlider::handle:horizontal{width:8;margin:-8 -4}#colorSliderAddButton,#colorSliderSubButton{background:none;border-color:transparent;image-position:center center;min-height:16;padding:0;min-width:18}#colorSliderAddButton{image:url('../Default/imgs/white/scroll-right.svg')}#colorSliderSubButton{image:url('../Default/imgs/white/scroll-left.svg')}#PlainColorPageParts{border-bottom:1 solid #161616}#PlainColorPageParts QLineEdit{max-width:35}PaletteViewer DvScrollWidget QPushButton{border-top:0;margin-bottom:1;max-width:15;min-width:15}PaletteViewer DvScrollWidget #ScrollLeftButton{border-radius:0;margin-bottom:1;max-width:16;min-width:16}PaletteViewer DvScrollWidget #ScrollRightButton{border-radius:0;margin-left:1;margin-bottom:1;max-width:16;min-width:16}PaletteViewer QToolBar{background:none;border-bottom:1 solid #161616;padding:0;margin:0}PaletteViewer QToolBar::separator:horizontal{margin:0}PaletteViewer QToolBar QToolButton{margin:0 0 1 0;padding:1 0 2 0}#PageViewer{qproperty-TextColor:#cecece}#PaletteLockButton{border-radius:0;margin:0 0 1 1}#PaletteLockButton:checked{background-color:#C34040;border-color:#C34040}#PaletteLockButton:checked:hover{background-color:#d57a7a;border-color:#d57a7a}#WordButton{padding-right:0;padding-left:0}QDialog{background-color:#303030}QDialog #dialogButtonFrame{background-color:#282828;border-top:1 solid #161616}QDialog #dialogButtonFrame QPushButton{border-color:#282828;outline:0}QDialog #dialogButtonFrame QPushButton:focus{background-color:#5385a6;border-color:#282828;color:#f4f4f4}QDialog #dialogButtonFrame QPushButton:focus:hover{background-color:#6c98b6}QDialog #dialogButtonFrame QPushButton:focus:pressed{background-color:#191919;border-color:#141414;color:#dbdbdb}#SceneSettings QLabel{color:#9fdaff}#PreferencesPopup QListWidget{background-color:#262626;alternate-background-color:#262626;border:1 solid #161616;font-size:13px}#PreferencesPopup QListWidget::item{border:0;padding:3}#PreferencesPopup QListWidget::item:hover{color:#cecece;background-color:rgba(255,255,255,0.15)}#PreferencesPopup QListWidget::item:selected{background-color:#5385a6;color:#fff}#ShortcutTree{border:1 solid #161616}#ShortcutTree::item{padding:1 0}#ShortcutTree QScrollBar:vertical{width:16;margin-right:-1}ProjectPopup QLabel{color:#9fdaff}#GearButton{qproperty-icon:url('../Default/imgs/white/gear.svg')}#SubfolderButton{qproperty-icon:url('../Default/imgs/white/subfolder.svg');padding-left:6px;padding-right:6px}#SubcameraButton{qproperty-icon:url('../Default/imgs/white/subcamera.svg');padding-left:6px;padding-right:6px}SchematicViewer{qproperty-TextColor:#cecece;qproperty-VerticalLineColor:#090909;qproperty-LevelColumnColor:#4C6E4C;qproperty-VectorColumnColor:#7B7B4C;qproperty-ChildColumnColor:#6A526B;qproperty-FullcolorColumnColor:#657A96;qproperty-FxColumnColor:#56553C;qproperty-PaletteColumnColor:#3A655F;qproperty-MeshColumnColor:#684D86;qproperty-ReferenceColumnColor:#616161;qproperty-TableColor:#62628c;qproperty-ActiveCameraColor:#2d7dca;qproperty-OtherCameraColor:#6c797b;qproperty-GroupColor:#3b6e9c;qproperty-PegColor:#9f6e3c;qproperty-SplineColor:#6a9d1c;qproperty-ActiveOutputColor:#2d7dca;qproperty-OtherOutputColor:#6c797b;qproperty-XsheetColor:#62628c;qproperty-NormalFxColor:#6a7e96;qproperty-MacroFxColor:#815c79;qproperty-ImageAdjustFxColor:#656287;qproperty-LayerBlendingFxColor:#4f757d;qproperty-MatteFxColor:#ae7171;qproperty-SchematicPreviewButtonBgOnColor:#c8c864;qproperty-SchematicPreviewButtonOnImage:url('../Default/imgs/white/x_prev_eye_on.svg');qproperty-SchematicPreviewButtonBgOffColor:#616161;qproperty-SchematicPreviewButtonOffImage:url('../Default/imgs/white/x_prev_eye_off.svg');qproperty-SchematicCamstandButtonBgOnColor:#eb906b;qproperty-SchematicCamstandButtonOnImage:url('../Default/imgs/white/x_table_view_on.svg');qproperty-SchematicCamstandButtonTranspImage:url('../Default/imgs/white/x_table_view_transp.svg');qproperty-SchematicCamstandButtonBgOffColor:#616161;qproperty-SchematicCamstandButtonOffImage:url('../Default/imgs/white/x_table_view_off.svg')}#SchematicBottomFrame{background-color:#303030;border:0;margin:0;padding:0}#SchematicBottomFrame QToolBar::separator:horizontal{margin:0}#SchematicBottomFrame QToolBar QToolButton{padding:0;margin:2}#SchematicSceneViewer{background-color:#232323;border-bottom:1 solid #161616}#FxSettingsTabBar::tab{border-top:1 solid #161616}#FxSettingsTabBar::tab::first,#FxSettingsTabBar::tab::only-one{border-left:1 solid #161616}FxSettings QToolBar{border-top:1 solid #161616;border-right:1 solid #161616;border-left:1 solid #161616;min-height:23;padding:3 0}FxSettings QToolBar QToolBar{border:0}#FxSettingsLabel{color:#a0e680}#FxSettingsHelpButton{background-color:#80a0dc;color:#000;padding-top:0;padding-bottom:0}#FxSettingsHelpButton:hover{background-color:#a8bee7}#ScriptConsole{font-family:'Courier New',monospace;border:0;color:#000000;padding:3}#ScriptConsole QFrame{background-color:#dcdcdc}#ScriptConsole TPanelTitleBar{background-color:#262626}#TaskSheetItemLabel{color:#cecece}#Tasks QToolBar{border-bottom:1 solid #161616;margin:0;padding:0}#Tasks QToolBar QToolButton{margin:2 2 3 2}#ToolBar QToolBar{padding-left:2}#ToolOptions TPanelTitleBar{border-right:1 solid #161616;border-bottom:0}#CommandBar TPanelTitleBar{border-right:1 solid #161616;border-bottom:0}IconViewField{qproperty-ThicknessPixmap:url("../Default/imgs/white/selectiontool_thickness.svg")}#EditToolLockButton{spacing:0}#EditToolLockButton:hover{background:none}#EditToolLockButton::indicator{border:1 solid rgba(255,255,255,0);height:18;padding:0;width:18}#EditToolLockButton::indicator:unchecked{image:url('../Default/imgs/white/lock_off.svg')}#EditToolLockButton::indicator:checked{background-color:#C34040;border-color:#C34040;image:url('../Default/imgs/white/lock_on.svg')}#EditToolLockButton::indicator:checked:hover{background-color:#d57a7a;border-color:#d57a7a}PopupButton::menu-indicator{border-left:0;height:17;image:url('../Default/imgs/white/combo_downarrow.svg');width:10}PopupButton::menu-indicator:hover{image:url('../Default/imgs/white/combo_downarrow.svg')}PopupButton::menu-indicator:disabled{image:url('../Default/imgs/white/combo_downarrow_disabled.svg')}#Cap,#Join{padding:0 4 0 -8;max-width:32;min-width:32}#Cap QMenu,#Join QMenu{max-width:28;min-width:28}#Cap QMenu::item,#Join QMenu::item{max-width:28;min-width:28;padding:0}QToolBar#MediumPaddingToolBar QToolButton{padding-left:3;padding-right:3}QToolBar#WidePaddingToolBar QToolButton{padding-left:6;padding-right:6}#CommandBar{margin:0;padding:0;border:0}#CommandBar::separator:horizontal{margin-right:3;margin-left:3}#expandButton:checked{background-color:transparent;border-color:transparent;color:#cecece}#expandButton:checked:hover{background-color:#5e5e5e;border-color:#5e5e5e}#expandButton:checked:pressed{background-color:#191919;border-color:#141414}#ComboViewerPanel Toolbar{border-bottom:1 solid #161616}#ComboViewerPanel Toolbar::separator:horizontal{margin:0 0 0 2}#ComboViewerPanel Toolbar QToolButton{margin:2 0 3 2}#ComboViewerToolOptions{border-bottom:1 solid #161616}#ComboViewer #ToolBarContainer,#ViewerPanel #ToolBarContainer,FlipBook #ToolBarContainer{background-color:transparent;border-top:2 solid #161616;border-bottom:1 solid #161616;padding-right:-1}#flipCustomize{margin-left:3}#flipCustomize::menu-button{background-color:transparent;width:35}#flipCustomize::menu-arrow{image:none}QToolBar#FlipConsolePlayToolBar::separator:horizontal{margin:0 3}QToolBar#FlipConsolePlayToolBar QToolButton{margin-top:2;margin-bottom:2;height:16;padding-left:1;padding-right:1}#ViewerFpsSlider{background-color:transparent;background-image:url('../Default/imgs/white/slider-groove_dark.svg');background-position:center center;background-repeat:repeat-x;border:0;height:19;margin:0 3 0 37;max-width:300;min-width:0}#ViewerFpsSlider::sub-line:horizontal{subcontrol-origin:absolute;background-color:#515151;border:1 solid #303030;border-top-left-radius:2;border-bottom-left-radius:2;height:16;left:-33;width:14}#ViewerFpsSlider::add-line:horizontal{subcontrol-position:left;background-color:#515151;border:1 solid #303030;border-top-right-radius:2;border-bottom-right-radius:2;left:18;height:16;image-position:center center;width:13}#ViewerFpsSlider::handle::horizontal{background-color:#898989;border:1 solid #898989;border-radius:2;margin:2 0 3 0;min-width:9;width:9;max-width:9}FlipSlider{qproperty-PBHeight:15;qproperty-PBOverlay:url('../Default/imgs/white/flipslider_dark.svg');qproperty-PBColorMarginLeft:1;qproperty-PBColorMarginTop:2;qproperty-PBColorMarginRight:1;qproperty-PBColorMarginBottom:2;qproperty-PBMarker:url('../Default/imgs/white/flipmarker_dark.svg');qproperty-PBMarkerMarginLeft:3;qproperty-PBMarkerMarginRight:3;qproperty-notStartedColor:rgba(205,101,101,0.78);qproperty-startedColor:#1abc3f;qproperty-baseColor:#1c1c1c;qproperty-finishedColor:#1c1c1c}Ruler{qproperty-ParentBGColor:#303030;qproperty-ScaleColor:#cecece}#RulerToolOptionValues{color:#000}#xsheetArea,#ScrollArea{background-color:#1c1c1c;border:0}#xsheetScrollArea{border:0}#cornerWidget QToolButton{padding:0}#xsheetColumnAreaMenu_Preview{background-color:#E6E678}#xsheetColumnAreaMenu_Lock{background-color:#F5F5F5}#xsheetColumnAreaMenu_Camstand{background-color:#FFA480}#xsheetColumnAreaMenu_Preview,#xsheetColumnAreaMenu_Lock,#xsheetColumnAreaMenu_Camstand{color:#000}#noteTextEdit{color:#000}XsheetViewer{qproperty-TextColor:#cecece;qproperty-BGColor:#282828;qproperty-LightLineColor:#1f1f1f;qproperty-MarkerLineColor:#1E96C4;qproperty-VerticalLineColor:#090909;qproperty-VerticalLineHeadColor:#686868;qproperty-PreviewFrameTextColor:#9fdaff;qproperty-CurrentRowBgColor:#506082;qproperty-OnionSkinAreaBgColor:#1e1e1e;qproperty-EmptyColumnHeadColor:#444;qproperty-SelectedColumnTextColor:#E66464;qproperty-EmptyCellColor:#303030;qproperty-NotEmptyColumnColor:#383838;qproperty-SelectedEmptyCellColor:#545454;qproperty-LevelColumnColor:#4C6E4C;qproperty-LevelColumnBorderColor:#8FB38F;qproperty-SelectedLevelColumnColor:#678667;qproperty-VectorColumnColor:#7B7B4C;qproperty-VectorColumnBorderColor:#BBBB9A;qproperty-SelectedVectorColumnColor:#949466;qproperty-ChildColumnColor:#6A526B;qproperty-ChildColumnBorderColor:#B1A3B3;qproperty-SelectedChildColumnColor:#816e82;qproperty-FullcolorColumnColor:#657A96;qproperty-FullcolorColumnBorderColor:#9EB8BB;qproperty-SelectedFullcolorColumnColor:#8895a6;qproperty-FxColumnColor:#56553C;qproperty-FxColumnBorderColor:#95958A;qproperty-SelectedFxColumnColor:#6f6e56;qproperty-ReferenceColumnColor:#616161;qproperty-ReferenceColumnBorderColor:#A2A2A2;qproperty-SelectedReferenceColumnColor:#7a7a7a;qproperty-PaletteColumnColor:#3A655F;qproperty-PaletteColumnBorderColor:#86ACA7;qproperty-SelectedPaletteColumnColor:#52807a;qproperty-MeshColumnColor:#684D86;qproperty-MeshColumnBorderColor:#BA92EF;qproperty-SelectedMeshColumnColor:#82689e;qproperty-SoundTextColumnColor:#c8c8c8;qproperty-SoundTextColumnBorderColor:#8c8c8c;qproperty-SelectedSoundTextColumnColor:#e2e2e2;qproperty-SoundColumnColor:#657456;qproperty-SoundColumnBorderColor:#A0AF7D;qproperty-SelectedSoundColumnColor:#7e8b72;qproperty-SoundColumnHlColor:#34FE5E;qproperty-SoundColumnTrackColor:#B6C29D;qproperty-ColumnHeadPastelizer:#000;qproperty-SelectedColumnHead:#506082;qproperty-LightLightBGColor:#303030;qproperty-LightBGColor:#d8d8d8;qproperty-DarkBGColor:#c9c9c9;qproperty-DarkLineColor:#7e7e7e;qproperty-XsheetColumnNameBgColor:rgba(0,0,0,0);qproperty-XsheetDragBarHighlightColor:rgba(255,255,255,0.5);qproperty-XsheetPreviewButtonBgOnColor:#c8c864;qproperty-XsheetPreviewButtonOnImage:url('../Default/imgs/white/x_prev_eye_on.svg');qproperty-XsheetPreviewButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetPreviewButtonOffImage:url('../Default/imgs/white/x_prev_eye_off.svg');qproperty-XsheetCamstandButtonBgOnColor:#eb906b;qproperty-XsheetCamstandButtonOnImage:url('../Default/imgs/white/x_table_view_on.svg');qproperty-XsheetCamstandButtonTranspImage:url('../Default/imgs/white/x_table_view_transp.svg');qproperty-XsheetCamstandButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetCamstandButtonOffImage:url('../Default/imgs/white/x_table_view_off.svg');qproperty-XsheetLockButtonBgOnColor:rgba(255,255,255,0.3);qproperty-XsheetLockButtonOnImage:url('../Default/imgs/white/x_lock_on.svg');qproperty-XsheetLockButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetLockButtonOffImage:url('../Default/imgs/white/x_lock_off.svg');qproperty-XsheetConfigButtonBgColor:rgba(255,255,255,0);qproperty-XsheetConfigButtonImage:url('../Default/imgs/white/x_config.svg');qproperty-TimelinePreviewButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelinePreviewButtonOnImage:url('../Default/imgs/white/timeline_toggle_on.svg');qproperty-TimelinePreviewButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelinePreviewButtonOffImage:url('../Default/imgs/white/timeline_toggle_off.svg');qproperty-TimelineCamstandButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelineCamstandButtonOnImage:url('../Default/imgs/white/timeline_toggle_on.svg');qproperty-TimelineCamstandButtonTranspImage:url('../Default/imgs/white/timeline_toggle_transp.svg');qproperty-TimelineCamstandButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelineCamstandButtonOffImage:url('../Default/imgs/white/timeline_toggle_off.svg');qproperty-TimelineLockButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelineLockButtonOnImage:url('../Default/imgs/white/timeline_toggle_on.svg');qproperty-TimelineLockButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelineLockButtonOffImage:url('../Default/imgs/white/timeline_toggle_off.svg');qproperty-TimelineConfigButtonBgColor:rgba(255,255,255,0);qproperty-TimelineConfigButtonImage:url('../Default/imgs/white/timeline_config.svg');qproperty-LayerHeaderPreviewImage:url('../Default/imgs/white/layer_header_prev_eye.svg');qproperty-LayerHeaderPreviewOverImage:url('../Default/imgs/white/layer_header_prev_eye_over.svg');qproperty-LayerHeaderCamstandImage:url('../Default/imgs/white/layer_header_table_view.svg');qproperty-LayerHeaderCamstandOverImage:url('../Default/imgs/white/layer_header_table_view_over.svg');qproperty-LayerHeaderLockImage:url('../Default/imgs/white/lock_on.svg');qproperty-LayerHeaderLockOverImage:url('../Default/imgs/white/lock_on_over.svg')}#XSheetToolbar{margin:0;padding:0;border:0}#XSheetToolbar QToolButton{padding:0;margin:4 1;min-height:19;height:19}#XSheetToolbar::separator:horizontal{margin:0 4}#FunctionEditor QToolBar{border-bottom:1 solid #161616}#FunctionEditor QToolBar QToolBar{border:0}#FunctionEditor QToolBar QLabel{margin-left:5}#FunctionEditor QToolBar QToolButton{height:18}#FunctionEditorTree{border-top:1 solid #161616}FunctionTreeView{qproperty-TextColor:#cecece;qproperty-CurrentTextColor:#E66464}FunctionPanel{qproperty-BGColor:#232323;qproperty-ValueLineColor:#161616;qproperty-FrameLineColor:#161616;qproperty-OtherCurvesColor:#707070;qproperty-RulerBackground:#1b1b1b;qproperty-TextColor:#cecece;qproperty-SubColor:#000;qproperty-SelectedColor:#FFA500}SpreadsheetViewer{qproperty-LightLightBGColor:#303030;qproperty-CurrentRowBgColor:#506082;qproperty-LightLineColor:#1f1f1f;qproperty-MarkerLineColor:#1E96C4;qproperty-BGColor:#383838;qproperty-VerticalLineColor:#090909;qproperty-KeyFrameColor:#995d1d;qproperty-KeyFrameBorderColor:#c9b04b;qproperty-SelectedKeyFrameColor:#be772b;qproperty-InBetweenColor:#666250;qproperty-InBetweenBorderColor:#cdcec8;qproperty-SelectedInBetweenColor:#7d7a6c;qproperty-SelectedEmptyColor:#545454;qproperty-SelectedSceneRangeEmptyColor:#5d5d5d;qproperty-TextColor:#cecece;qproperty-ColumnHeaderBorderColor:#686868;qproperty-SelectedColumnTextColor:#E66464}#ExpressionField{background-color:#cecece;border:1 solid #1b1b1b;margin:0}#FunctionSegmentViewerLinkButton{background-image:url('../Default/imgs/white/segment_unlinked.svg');background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:hover{background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:checked{background-image:url('../Default/imgs/white/segment_linked.svg');background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:disabled{background-image:url('../Default/imgs/white/segment_disabled.svg');background-repeat:no-repeat} \ No newline at end of file diff --git a/stuff/config/qss/Default/Default.qss b/stuff/config/qss/Default/Default.qss index cd9883e..52c1ba8 100644 --- a/stuff/config/qss/Default/Default.qss +++ b/stuff/config/qss/Default/Default.qss @@ -1 +1 @@ -.button-show,#LoadLevelShowButton,#CleanupSettingsShowButton,#OutputSettingsShowButton,#FxSettingsPreviewShowButton{image:url('imgs/white/plus.svg');image-position:center center;margin:0;padding:1;min-width:10;min-height:10}.button-show:checked,#LoadLevelShowButton:checked,#CleanupSettingsShowButton:checked,#OutputSettingsShowButton:checked,#FxSettingsPreviewShowButton:checked{background-color:#313131;border-color:#2c2c2c;image:url('imgs/white/minus.svg')}.button-show:checked:pressed,#LoadLevelShowButton:checked:pressed,#CleanupSettingsShowButton:checked:pressed,#OutputSettingsShowButton:checked:pressed,#FxSettingsPreviewShowButton:checked:pressed{background-color:#313131;border-color:#2c2c2c}.button-show:checked:hover,#LoadLevelShowButton:checked:hover,#CleanupSettingsShowButton:checked:hover,#OutputSettingsShowButton:checked:hover,#FxSettingsPreviewShowButton:checked:hover{background-color:#363636}.button-tool,QToolButton,#CameraSettingsRadioButton::indicator,#ForceSquaredPixelButton,#SchematicBottomFrame QToolBar QToolButton,#EditToolLockButton::indicator,#flipCustomize{background-color:rgba(255,255,255,0);border:1 solid rgba(255,255,255,0);border-radius:2;color:#f3f3f3;margin:1;padding:0}.button-tool:hover,QToolButton:hover,#CameraSettingsRadioButton::indicator:hover,#ForceSquaredPixelButton:hover,#colorSliderAddButton:hover,#colorSliderSubButton:hover,#SchematicBottomFrame QToolBar QToolButton:hover,#EditToolLockButton::indicator:hover,#flipCustomize:hover{background-color:#767676;border-color:#767676;color:#f3f3f3}.button-tool:pressed,QToolButton:pressed,#CameraSettingsRadioButton::indicator:pressed,#ForceSquaredPixelButton:pressed,#colorSliderAddButton:pressed,#colorSliderSubButton:pressed,#SchematicBottomFrame QToolBar QToolButton:pressed,#EditToolLockButton::indicator:pressed,#flipCustomize:pressed{background-color:#313131;border-color:#2c2c2c;color:#f3f3f3}.button-tool:checked,QToolButton:checked,#CameraSettingsRadioButton::indicator:checked,#ForceSquaredPixelButton:checked,#SchematicBottomFrame QToolBar QToolButton:checked,#EditToolLockButton::indicator:checked,#flipCustomize:checked{background-color:#5385a6;border-color:#5385a6;color:#fff}.button-tool:checked:hover,QToolButton:checked:hover,#CameraSettingsRadioButton::indicator:checked:hover,#ForceSquaredPixelButton:checked:hover,#SchematicBottomFrame QToolBar QToolButton:checked:hover,#EditToolLockButton::indicator:checked:hover,#flipCustomize:checked:hover{background-color:#6c98b6;border-color:#6c98b6}.button-tool:disabled,QToolButton:disabled,#CameraSettingsRadioButton::indicator:disabled,#ForceSquaredPixelButton:disabled,#SchematicBottomFrame QToolBar QToolButton:disabled,#EditToolLockButton::indicator:disabled,#flipCustomize:disabled{color:#808080}.button-flat,PaletteViewer QToolBar QToolButton{background-color:none;border:0;border-radius:0;margin:0}.button-flat:hover,PaletteViewer QToolBar QToolButton:hover{background-color:#767676}.button-flat:pressed,PaletteViewer QToolBar QToolButton:pressed{background-color:#272727}.frame,.GroupBox,#LoadLevelFrame,#PsdSettingsGroupBox,#CleanupSettingsFrame,#OutputSettingsBox,#OutputSettingsCameraBox,#SolidLineFrame,#FunctionParametersPanel,QGroupBox{border:1 solid #272727;border-radius:2}.tab-container,#TabBarContainer{background-color:transparent;qproperty-BottomAboveLineColor:#393939;qproperty-BottomBelowLineColor:#272727}.tab-flat,#StyleEditorTabBar::tab,#PaletteTabBar::tab,#FxSettingsTabBar::tab{background-color:#393939;border-right:1 solid #272727;border-bottom:1 solid #272727;color:#a1a1a1;padding:3 4 3 4}.tab-flat:hover,#StyleEditorTabBar::tab:hover,#PaletteTabBar::tab:hover,#FxSettingsTabBar::tab:hover{background-color:#484848;color:#a1a1a1}.tab-flat:selected,#StyleEditorTabBar::tab:selected,#PaletteTabBar::tab:selected,#FxSettingsTabBar::tab:selected{background-color:#484848;color:#fff;border-bottom-color:#484848}.tab-flat:only-one,#StyleEditorTabBar::tab:only-one,#PaletteTabBar::tab:only-one,#FxSettingsTabBar::tab:only-one{margin:0}.tab-round{background-color:#393939;border-top:1 solid #272727;border-right:1 solid #272727;border-left:1 solid #272727;border-bottom:1 solid #272727;color:#a1a1a1;margin:3 -1 0 0;padding:2 7 1 7}.tab-round:hover{background-color:#484848;color:#a1a1a1}.tab-round:selected{background-color:#484848;border-top-right-radius:2;border-top-left-radius:2;border-bottom-color:#484848;color:#fff;margin:1 -1 -1 0;padding:2 7 2 7}.tab-round:only-one{margin:1 0 0 0;padding:3 7 3 7}.tab-round:last{margin-right:0;border-top-right-radius:2}.tab-round:first{border-top-left-radius:2}QWidget{background-color:#484848;color:#e6e6e6}QWidget:disabled{color:#808080}QFrame{border:0;margin:0;padding:0}QToolTip,#helpToolTip{background-color:#fff;border:1 solid #000;color:#000;padding:1 1}#DockSeparator,QMainWindow::separator,QSplitter::handle{background-color:#1a1a1a;height:4;width:4}#TDockPlaceholder{background-color:#F77272}TPanel{background-color:#1a1a1a}#TopBar{background:#484848;border:0;border-bottom:1 solid #272727;height:21}#TopBar #EditToolLockButton{background:#484848;spacing:0}#TopBar #EditToolLockButton::indicator{background:none;border:none;height:18;margin:1 2 0 0;padding-left:0;padding-right:0}#TopBarTabContainer{background-color:#484848;margin-bottom:1}#StackedMenuBar{border:0;margin:0;padding:0}QMenuBar{background-color:#484848;border:0}QMenuBar::item{background-color:#484848;border-left:1 solid #484848;margin:0;padding:3 5}QMenuBar::item:selected{background-color:rgba(255,255,255,0.15);color:#e6e6e6}QMenuBar::item:pressed{background-color:#5385a6;color:#fff}#TopBarTab{margin:0;padding:0}#TopBarTab::tab{background-color:#393939;border-top:1 solid #272727;border-right:1 solid #272727;color:#a1a1a1;margin:0 0 0 0;padding:2 8 3 8}#TopBarTab::tab:hover{background-color:#484848;color:#a1a1a1}#TopBarTab::tab:selected{background-color:#484848;color:#fff}#TopBarTab::tab:first{border-left:1 solid #272727}#TopBarTab::tab:last{border-right:1 solid #272727}QMenu{background-color:#484848;border:1 solid #272727;padding:2 0}QMenu::item{padding:3 28}QMenu::item:selected{background-color:#5385a6;color:#fff}QMenu::item:checked{color:#e6e6e6}QMenu::item:checked:selected{background-color:#5385a6;color:#fff}QMenu::item:disabled{background:none;color:#808080}QMenu::item:disabled:selected{border-color:transparent}QMenu::separator{border-top:1 solid #272727;height:0;margin:2 0}QMenu::icon{border-radius:2;margin:0 0 0 3;padding:1}QMenu::icon:checked{background-color:#5385a6}QMenu::indicator{margin-left:7}TPanelTitleBar{background-color:#393939;border-color:#272727;border-style:solid;border-width:0 0 1 0;height:20;min-height:20;qproperty-TitleColor:#949494;qproperty-ActiveTitleColor:#fff;qproperty-BorderPixmap:url('none');qproperty-ActiveBorderPixmap:url('imgs/white/none');qproperty-FloatBorderPixmap:url('none');qproperty-FloatActiveBorderPixmap:url('imgs/white/none')}QAbstractScrollArea::corner{background-color:#343434}QScrollBar{background-color:#343434;border:0}QScrollBar:horizontal{height:16;margin:0}QScrollBar:vertical{margin:0;width:16}QScrollBar::handle{border:1 solid #525252;border-radius:4}QScrollBar::handle:horizontal:hover,QScrollBar::handle:vertical:hover{background-color:#676767;border-color:#676767}QScrollBar::handle:horizontal:pressed,QScrollBar::handle:vertical:pressed{background-color:#7b7b7b;border-color:#7b7b7b}QScrollBar::handle:horizontal{background-color:#525252;margin:3 16;min-width:20}QScrollBar::handle:vertical{background-color:#525252;margin:16 3;min-height:20}QScrollBar::add-line{subcontrol-origin:margin;border:0}QScrollBar::add-line:horizontal{subcontrol-position:right;background-color:#343434;margin:0;width:16}QScrollBar::add-line:vertical{subcontrol-position:bottom;background-color:#343434;margin:0;height:16}QScrollBar::sub-line{border:0;subcontrol-origin:margin}QScrollBar::sub-line:horizontal{subcontrol-position:left;background-color:#343434;margin:0;width:16}QScrollBar::sub-line:vertical{subcontrol-position:top;background-color:#343434;margin:0;height:16}QScrollBar::up-arrow:vertical{image:url('imgs/white/scroll-up.svg');image-position:center center}QScrollBar::up-arrow:vertical:pressed{margin:1 0 0 0}QScrollBar::down-arrow:vertical{image:url('imgs/white/scroll-down.svg');image-position:center center}QScrollBar::down-arrow:vertical:pressed{margin:1 0 0 0}QScrollBar::left-arrow:horizontal{image:url('imgs/white/scroll-left.svg');image-position:center center}QScrollBar::left-arrow:horizontal:pressed{margin:1 0 0 0}QScrollBar::right-arrow:horizontal{image:url('imgs/white/scroll-right.svg');image-position:center center}QScrollBar::right-arrow:horizontal:pressed{margin:1 0 0 0}QScrollBar::sub-page:horizontal,QScrollBar::add-page:horizontal,QScrollBar::sub-page:vertical,QScrollBar::add-page:vertical{background:none}QToolBar{padding:0}QToolBar::separator:horizontal{border-left:1 solid #272727;margin:0 1;width:0}QToolBar::separator:vertical{border-top:1 solid #272727;height:0;margin:1 0}QToolBar QLabel{margin-top:1}QToolBar QToolBar{border:0}QToolButton::menu-indicator{image:none}QToolButton::menu-button{border-image:none}.DvScrollWidget QPushButton,DvScrollWidget QPushButton,#ScrollLeftButton QPushButton,#ScrollRightButton QPushButton,#ScrollUpButton QPushButton,#ScrollDownButton QPushButton{background-color:#696969;border:0 solid red;border-radius:0;padding:0;max-width:16}.DvScrollWidget QPushButton:hover,DvScrollWidget QPushButton:hover,#ScrollLeftButton QPushButton:hover,#ScrollRightButton QPushButton:hover,#ScrollUpButton QPushButton:hover,#ScrollDownButton QPushButton:hover{background-color:#767676}.DvScrollWidget QPushButton:pressed,DvScrollWidget QPushButton:pressed,#ScrollLeftButton QPushButton:pressed,#ScrollRightButton QPushButton:pressed,#ScrollUpButton QPushButton:pressed,#ScrollDownButton QPushButton:pressed{background-color:#313131}#ScrollLeftButton,#ScrollRightButton,#ScrollUpButton,#ScrollDownButton{margin:0;min-width:16}#ScrollLeftButton{border-right:1 solid #272727;image:url('imgs/white/scroll-left.svg')}#ScrollRightButton{border-left:1 solid #272727;margin-left:3;image:url('imgs/white/scroll-right.svg')}#ScrollUpButton{image:url('imgs/white/scroll-up.svg')}#ScrollDownButton{image:url('imgs/white/scroll-down.svg')}#keyFrameNavigator{background:none;margin:0;padding:0}#keyFrameNavigator QToolButton{min-width:18}#keyFrameNavigator #PreviousKey{image:url('imgs/white/prevkey.svg')}#keyFrameNavigator #PreviousKey:hover{image:url('imgs/white/prevkey_over.svg')}#keyFrameNavigator #PreviousKey:disabled{image:url('imgs/white/prevkey_disabled.svg')}#keyFrameNavigator #NextKey{image:url('imgs/white/nextkey.svg')}#keyFrameNavigator #NextKey:hover{image:url('imgs/white/nextkey_over.svg')}#keyFrameNavigator #NextKey:disabled{image:url('imgs/white/nextkey_disabled.svg')}.treeview,QTreeWidget,QTreeView,#FunctionEditorTree{background-color:#343434;alternate-background-color:#393939;border:0;margin:0;outline:0}.treeview::item:selected,QTreeWidget::item:selected,QTreeView::item:selected,#FunctionEditorTree::item:selected{background-color:#5385a6;color:#fff}.treeview::branch:adjoins-item,QTreeWidget::branch:adjoins-item,QTreeView::branch:adjoins-item,#FunctionEditorTree::branch:adjoins-item{border-image:url('')}.treeview::branch:has-siblings,QTreeWidget::branch:has-siblings,QTreeView::branch:has-siblings,#FunctionEditorTree::branch:has-siblings{border-image:url('')}.treeview::branch:has-siblings:adjoins-item,QTreeWidget::branch:has-siblings:adjoins-item,QTreeView::branch:has-siblings:adjoins-item,#FunctionEditorTree::branch:has-siblings:adjoins-item{border-image:url('')}.treeview::branch:has-children:closed,QTreeWidget::branch:has-children:closed,QTreeView::branch:has-children:closed,#FunctionEditorTree::branch:has-children:closed{background:url('imgs/white/treebranch-closed.svg') no-repeat;background-position:center center;border-image:none;image:none}.treeview::branch:has-children:open,QTreeWidget::branch:has-children:open,QTreeView::branch:has-children:open,#FunctionEditorTree::branch:has-children:open{background:url('imgs/white/treebranch-open.svg') no-repeat;background-position:center center;image:none}.treeview::branch:has-children:has-siblings:closed,QTreeWidget::branch:has-children:has-siblings:closed,QTreeView::branch:has-children:has-siblings:closed,#FunctionEditorTree::branch:has-children:has-siblings:closed{background:url('imgs/white/treebranch-closed.svg') no-repeat;background-position:center center;border-image:none;image:none}.treeview::branch:has-children:has-siblings:open,QTreeWidget::branch:has-children:has-siblings:open,QTreeView::branch:has-children:has-siblings:open,#FunctionEditorTree::branch:has-children:has-siblings:open{background:url('imgs/white/treebranch-open.svg') no-repeat;background-position:center center;border-image:none;image:none}QListView{outline:0;background:#343434;alternate-background-color:#393939}#TabBarContainer{background-color:#393939}.Button,QPushButton,.ComboBox,.ComboBox:checked,QComboBox,QComboBox:checked{background-color:#696969;border:1 solid #484848;border-radius:2;color:#f3f3f3;margin:0;padding:3 15}.Button:hover,QPushButton:hover,.ComboBox:hover,#ViewerFpsSlider::sub-line:horizontal:hover,#ViewerFpsSlider::add-line:horizontal:hover,QComboBox:hover{background-color:#767676;border-color:#484848;color:#f3f3f3}.Button:pressed,QPushButton:pressed,#ViewerFpsSlider::sub-line:horizontal:pressed,#ViewerFpsSlider::add-line:horizontal:pressed{background-color:#313131;border-color:#2c2c2c;color:#f3f3f3}.Button:checked,QPushButton:checked{background-color:#313131;border-color:#2c2c2c;color:#f3f3f3}.Button:checked:hover,QPushButton:checked:hover{background-color:#363636}.Button:checked:hover:pressed,QPushButton:checked:hover:pressed{background:#313131}.Button:disabled,QPushButton:disabled,.ComboBox:disabled,#ViewerFpsSlider::sub-line:horizontal:disabled,#ViewerFpsSlider::add-line:horizontal:disabled,QComboBox:disabled{background-color:#555;border-color:#484848;color:#808080}#PushButton_NoPadding{padding:3}.ComboBox,.ComboBox:checked,QComboBox,QComboBox:checked{padding:1 0 1 4;margin:1 0}.ComboBox::drop-down,QComboBox::drop-down{image:url('imgs/white/combo_downarrow.svg');image-position:center center;width:16}.ComboBox::drop-down:disabled,QComboBox::drop-down:disabled{image:url('imgs/white/combo_downarrow_disabled.svg')}.ComboBox QAbstractItemView,QComboBox QAbstractItemView{background-color:#484848;border:1 solid #272727;selection-background-color:#5385a6;selection-color:#fff}.LineEdit,QLineEdit,#TaskSheetItem,#tasksRemoveBox,#tasksAddBox{background-color:#2f2f2f;border:1 solid #2c2c2c;border-radius:2;color:#e6e6e6;selection-background-color:#5385a6;selection-color:#fff;padding:0 0 0 1}.LineEdit:focus,QLineEdit:focus,#TaskSheetItem:focus,#tasksRemoveBox:focus,#tasksAddBox:focus{background-color:#2f2f2f;border-color:#5385a6;color:#e6e6e6}.LineEdit:disabled,QLineEdit:disabled,#TaskSheetItem:disabled,#tasksRemoveBox:disabled,#tasksAddBox:disabled{background-color:#3b3b3b;border-color:#3a3a3a;color:#808080}.CheckBox,QCheckBox{color:#e6e6e6}.CheckBox:hover,QCheckBox:hover,.RadioButton:hover,QRadioButton:hover{color:#fff}.CheckBox:disabled,QCheckBox:disabled{color:#808080}.CheckBox::indicator,QMenu::indicator,QCheckBox::indicator,.GroupBox::indicator,QGroupBox::indicator{background-color:#2f2f2f;border:1 solid #2c2c2c;border-radius:2;height:9;padding:1;width:9}.CheckBox::indicator:hover,QMenu::indicator:hover,.CheckBox::indicator:checked:hover,QCheckBox::indicator:hover,.GroupBox::indicator:hover,QMenu::indicator:checked:hover,QCheckBox::indicator:checked:hover,.GroupBox::indicator:checked:hover,QGroupBox::indicator:hover,QGroupBox::indicator:checked:hover{background-color:#2f2f2f;border-color:#5385a6}.CheckBox::indicator:checked,QMenu::indicator:checked,QCheckBox::indicator:checked,.GroupBox::indicator:checked,QGroupBox::indicator:checked{background-color:#2f2f2f;border-color:#2c2c2c;image:url('imgs/white/checkmark.svg')}.CheckBox::indicator:checked:disabled,QMenu::indicator:checked:disabled,QCheckBox::indicator:checked:disabled,.GroupBox::indicator:checked:disabled,QGroupBox::indicator:checked:disabled{background-color:#3b3b3b;border-color:#3b3b3b;image:url('imgs/white/checkmark_disabled.svg')}.CheckBox::indicator:disabled,QMenu::indicator:disabled,QCheckBox::indicator:disabled,.GroupBox::indicator:disabled,QGroupBox::indicator:disabled{background-color:#3b3b3b;border-color:#3b3b3b}.RadioButton::indicator:unchecked,QRadioButton::indicator:unchecked,#CameraSettingsRadioButton_Small::indicator:unchecked{image:url('imgs/white/radiobutton_unchecked.svg');image-position:center center}.RadioButton::indicator:checked,QRadioButton::indicator:checked,#CameraSettingsRadioButton_Small::indicator:checked{image:url('imgs/white/radiobutton_checked.svg');image-position:center center}.GroupBox,QGroupBox{margin:6 0 0 0;padding:5 0}.GroupBox::title,QGroupBox::title{subcontrol-origin:margin;left:15;margin:-3 0 0 0;padding:0 3}.GroupBox::title:hover,QGroupBox::title:hover{color:#fff}.GroupBox::title:disabled,QGroupBox::title:disabled{color:#808080}.GroupBox::indicator,QGroupBox::indicator{subcontrol-origin:margin;margin-top:2}.GroupBox:disabled,QGroupBox:disabled{color:#808080}.Slider::groove:horizontal,QSlider::groove:horizontal{background-color:transparent;background-image:url('imgs/white/slider-groove.svg');background-position:center center;background-repeat:repeat-x;margin:0;height:20;min-height:20}.Slider::groove:horizontal:disabled,QSlider::groove:horizontal:disabled{background-image:url('imgs/white/slider-groove_disabled.svg')}.Slider::handle:horizontal,QSlider::handle:horizontal{width:10;margin:-2 -1;image:url('imgs/white/slider-handle.svg')}.Slider::handle:horizontal:disabled,QSlider::handle:horizontal:disabled{image:url('imgs/white/slider-handle_disabled.svg')}#IntPairField,#DoublePairField{qproperty-LightLineColor:#2c2c2c;qproperty-LightLineEdgeColor:#2c2c2c;qproperty-DarkLineColor:#2c2c2c;qproperty-MiddleLineColor:#2c2c2c;qproperty-HandleLeftPixmap:url("imgs/white/slider-handle.svg");qproperty-HandleRightPixmap:url("imgs/white/slider-handle.svg");qproperty-HandleLeftGrayPixmap:url("imgs/white/slider-handle_disabled.svg");qproperty-HandleRightGrayPixmap:url("imgs/white/slider-handle_disabled.svg")}#DirTreeView{background-color:#343434;alternate-background-color:#343434;border:1 solid #272727;border-right:0}DvItemViewerPanel{qproperty-TextColor:#e6e6e6;qproperty-AlternateBackground:#404040;qproperty-SelectedTextColor:#fff;qproperty-FolderTextColor:#9fdaff;qproperty-SelectedItemBackground:#5385a6}#FileBrowser DvItemViewerPanel,#SceneCast DvItemViewerPanel{background-color:#484848}#FileBrowser #castFrame,#SceneCast #castFrame{border-top:1 solid #272727;border-right:1 solid #272727;border-bottom:1 solid #272727;margin:0}#FileBrowser QToolButton,#SceneCast QToolButton{padding:1}DvDirTreeView{qproperty-TextColor:#e6e6e6;qproperty-SelectedTextColor:#fff;qproperty-SelectedItemBackground:#5385a6;qproperty-FolderTextColor:#9fdaff;qproperty-SelectedFolderTextColor:#fff;alternate-background-color:#393939;background-color:#343434;border:1 solid #272727}#FileDoesNotExistLabel{color:#f00}#SceneCast QToolBar{border-top:1 solid #272727}#SceneCast QToolButton{margin:3 1 2 1;padding:1}#CastBrowser{border:0;margin:0}#FilmStrip QComboBox{border-radius:0;border-width:0}#FilmStrip QComboBox QAbstractItemView{background-color:#484848}#CleanupSettings #CleanupSettingsFrame{margin-top:2;margin-bottom:4}#CleanupSettings QGroupBox{margin-bottom:3}ParamsPage{qproperty-TextColor:#e6e6e6}#CameraSettingsButton{padding:2}#CameraSettingsRadioButton:hover{background:none}#CameraSettingsRadioButton::indicator{border:1 solid rgba(255,255,255,0);height:18;padding:0;width:18}#CameraSettingsRadioButton::indicator:unchecked{image:url('imgs/white/lock_off.svg')}#CameraSettingsRadioButton::indicator:checked{background-color:#C34040;border-color:#C34040;image:url('imgs/white/lock_on.svg')}#CameraSettingsRadioButton::indicator:checked:hover{background-color:#d57a7a;border-color:#d57a7a}#CameraSettingsDPI{color:#9fdaff}#CameraSettingsRadioButton_Small{padding:0}#CameraSettingsRadioButton_Small::indicator{background-color:transparent;border:0;height:21;margin:0;width:11}#ForceSquaredPixelButton{height:16;border:1 solid rgba(255,255,255,0);image:url('imgs/white/fsp_unchecked.svg');padding:2;width:16;margin:0}#ForceSquaredPixelButton:checked{image:url('imgs/white/fsp_checked.svg')}#OutputSettingsLabel{color:#9fdaff}PencilTestPopup{min-height:730px;min-width:512px}#MatchLineButton{background-color:#6e6e6e}#MatchLineButton:checked{background-color:#949494;border:2 solid #5385a6;border-radius:2}#LargeSizedText{font-size:17}#StartupLabel{padding:3}#StartupLabel:hover{background:#626262}QStatusBar{background-color:#c0c0c0}QStatusBar::item{border:0}QStatusBar QLabel{background-color:#c0c0c0}QStatusBar #StatusBarLabel{background-color:#fff;padding:1 3}#TitleTxtLabel{color:#9fdaff}#StyleEditor QPushButton{margin:2 1;padding:0}#StyleEditor #TabBarContainer{margin-left:-4}#StyleEditor #bottomWidget{border-top:1 solid #272727;padding:3 2 8 3}#StyleEditor #bottomWidget QPushButton{padding:3 5}#StyleEditorTabBar::tab::first{border-left:1 solid #272727}#HexagonalColorWheel{qproperty-BGColor:#484848}#colorSlider::groove:horizontal{height:1;border-image:none}#colorSlider::handle:horizontal{width:8;margin:-8 -4}#colorSliderAddButton,#colorSliderSubButton{background:none;border-color:transparent;image-position:center center;min-height:16;padding:0;min-width:18}#colorSliderAddButton{image:url('imgs/white/scroll-right.svg')}#colorSliderSubButton{image:url('imgs/white/scroll-left.svg')}#PlainColorPageParts{border-bottom:1 solid #272727}#PlainColorPageParts QLineEdit{max-width:35}PaletteViewer DvScrollWidget QPushButton{border-top:0;margin-bottom:1;max-width:15;min-width:15}PaletteViewer DvScrollWidget #ScrollLeftButton{border-radius:0;margin-bottom:1;max-width:16;min-width:16}PaletteViewer DvScrollWidget #ScrollRightButton{border-radius:0;margin-left:1;margin-bottom:1;max-width:16;min-width:16}PaletteViewer QToolBar{background:none;border-bottom:1 solid #272727;padding:0;margin:0}PaletteViewer QToolBar::separator:horizontal{margin:0}PaletteViewer QToolBar QToolButton{margin:0 0 1 0;padding:1 0 2 0}#PageViewer{qproperty-TextColor:#e6e6e6}#PaletteLockButton{border-radius:0;margin:0 0 1 1}#PaletteLockButton:checked{background-color:#C34040;border-color:#C34040}#PaletteLockButton:checked:hover{background-color:#d57a7a;border-color:#d57a7a}#WordButton{padding-right:0;padding-left:0}QDialog{background-color:#484848}QDialog #dialogButtonFrame{background-color:#3e3e3e;border-top:1 solid #272727}QDialog #dialogButtonFrame QPushButton{border-color:#3e3e3e;outline:0}QDialog #dialogButtonFrame QPushButton:focus{background-color:#5385a6;border-color:#3e3e3e;color:#fff}QDialog #dialogButtonFrame QPushButton:focus:hover{background-color:#6c98b6}QDialog #dialogButtonFrame QPushButton:focus:pressed{background-color:#313131;border-color:#2c2c2c;color:#f3f3f3}#SceneSettings QLabel{color:#9fdaff}#PreferencesPopup QListWidget{background-color:#343434;alternate-background-color:#343434;border:1 solid #272727;font-size:13}#PreferencesPopup QListWidget::item{border:0;padding:3}#PreferencesPopup QListWidget::item:hover{color:#e6e6e6;background-color:rgba(255,255,255,0.15)}#PreferencesPopup QListWidget::item:selected{background-color:#5385a6;color:#fff}#ShortcutTree{border:1 solid #272727}#ShortcutTree::item{padding:1 0}#ShortcutTree QScrollBar:vertical{width:16;margin-right:-1}ProjectPopup QLabel{color:#9fdaff}#GearButton{qproperty-icon:url('imgs/white/gear.svg')}#SubfolderButton{qproperty-icon:url('imgs/white/subfolder.svg')}SchematicViewer{qproperty-TextColor:#e6e6e6;qproperty-VerticalLineColor:#222;qproperty-LevelColumnColor:#4C6E4C;qproperty-VectorColumnColor:#7B7B4C;qproperty-ChildColumnColor:#6A526B;qproperty-FullcolorColumnColor:#657A96;qproperty-FxColumnColor:#56553C;qproperty-PaletteColumnColor:#3A655F;qproperty-MeshColumnColor:#684D86;qproperty-ReferenceColumnColor:#616161;qproperty-TableColor:#62628c;qproperty-ActiveCameraColor:#2d7dca;qproperty-OtherCameraColor:#6c797b;qproperty-GroupColor:#3b6e9c;qproperty-PegColor:#9f6e3c;qproperty-SplineColor:#6a9d1c;qproperty-ActiveOutputColor:#2d7dca;qproperty-OtherOutputColor:#6c797b;qproperty-XsheetColor:#62628c;qproperty-NormalFxColor:#6a7e96;qproperty-MacroFxColor:#815c79;qproperty-ImageAdjustFxColor:#656287;qproperty-LayerBlendingFxColor:#4f757d;qproperty-MatteFxColor:#ae7171;qproperty-SchematicPreviewButtonBgOnColor:#c8c864;qproperty-SchematicPreviewButtonOnImage:url('imgs/white/x_prev_eye_on.svg');qproperty-SchematicPreviewButtonBgOffColor:#616161;qproperty-SchematicPreviewButtonOffImage:url('imgs/white/x_prev_eye_off.svg');qproperty-SchematicCamstandButtonBgOnColor:#eb906b;qproperty-SchematicCamstandButtonOnImage:url('imgs/white/x_table_view_on.svg');qproperty-SchematicCamstandButtonTranspImage:url('imgs/white/x_table_view_transp.svg');qproperty-SchematicCamstandButtonBgOffColor:#616161;qproperty-SchematicCamstandButtonOffImage:url('imgs/white/x_table_view_off.svg')}#SchematicBottomFrame{background-color:#484848;border:0;margin:0;padding:0}#SchematicBottomFrame QToolBar::separator:horizontal{margin:0}#SchematicBottomFrame QToolBar QToolButton{padding:0;margin:2}#SchematicSceneViewer{background-color:#3b3b3b;border-bottom:1 solid #272727}#FxSettingsTabBar::tab{border-top:1 solid #272727}#FxSettingsTabBar::tab::first,#FxSettingsTabBar::tab::only-one{border-left:1 solid #272727}FxSettings QToolBar{border-top:1 solid #272727;border-right:1 solid #272727;border-left:1 solid #272727;min-height:23;padding:3 0}FxSettings QToolBar QToolBar{border:0}#FxSettingsLabel{color:#a0e680}#FxSettingsHelpButton{background-color:#80a0dc;color:#000;padding-top:0;padding-bottom:0}#FxSettingsHelpButton:hover{background-color:#a8bee7}#ScriptConsole{font-family:'Courier New',monospace;border:0;color:#000000;padding:3}#ScriptConsole QFrame{background-color:#dcdcdc}#ScriptConsole TPanelTitleBar{background-color:#393939}#TaskSheetItemLabel{color:#e6e6e6}#Tasks QToolBar{border-bottom:1 solid #272727;margin:0;padding:0}#Tasks QToolBar QToolButton{margin:2 2 3 2}#ToolBar QToolBar{padding-left:2}#ToolOptions TPanelTitleBar{border-right:1 solid #272727;border-bottom:0}#CommandBar TPanelTitleBar{border-right:1 solid #272727;border-bottom:0}IconViewField{qproperty-ThicknessPixmap:url("imgs/white/selectiontool_thickness.svg")}#EditToolLockButton{spacing:0}#EditToolLockButton:hover{background:none}#EditToolLockButton::indicator{border:1 solid rgba(255,255,255,0);height:18;padding:0;width:18}#EditToolLockButton::indicator:unchecked{image:url('imgs/white/lock_off.svg')}#EditToolLockButton::indicator:checked{background-color:#C34040;border-color:#C34040;image:url('imgs/white/lock_on.svg')}#EditToolLockButton::indicator:checked:hover{background-color:#d57a7a;border-color:#d57a7a}PopupButton::menu-indicator{border-left:0;height:17;image:url('imgs/white/combo_downarrow.svg');width:10}PopupButton::menu-indicator:hover{image:url('imgs/white/combo_downarrow.svg')}PopupButton::menu-indicator:disabled{image:url('imgs/white/combo_downarrow_disabled.svg')}#Cap,#Join{padding:0 4 0 -8;max-width:32;min-width:32}#Cap QMenu,#Join QMenu{max-width:28;min-width:28}#Cap QMenu::item,#Join QMenu::item{max-width:28;min-width:28;padding:0}QToolBar#MediumPaddingToolBar QToolButton{padding-left:3;padding-right:3}QToolBar#WidePaddingToolBar QToolButton{padding-left:6;padding-right:6}#CommandBar{margin:0;padding:0;border:0}#CommandBar::separator:horizontal{margin-right:3;margin-left:3}#expandButton:checked{background-color:transparent;border-color:transparent;color:#e6e6e6}#expandButton:checked:hover{background-color:#767676;border-color:#767676}#expandButton:checked:pressed{background-color:#313131;border-color:#2c2c2c}#ComboViewerPanel Toolbar{border-bottom:1 solid #272727}#ComboViewerPanel Toolbar::separator:horizontal{margin:0 0 0 2}#ComboViewerPanel Toolbar QToolButton{margin:2 0 3 2}#ComboViewerToolOptions{border-bottom:1 solid #272727}#ComboViewer #ToolBarContainer,#ViewerPanel #ToolBarContainer,FlipBook #ToolBarContainer{background-color:transparent;border-top:2 solid #272727;border-bottom:1 solid #272727;padding-right:-1}#flipCustomize{margin-left:3}#flipCustomize::menu-button{background-color:transparent;width:35}#flipCustomize::menu-arrow{image:none}QToolBar#FlipConsolePlayToolBar::separator:horizontal{margin:0 3}QToolBar#FlipConsolePlayToolBar QToolButton{margin-top:2;margin-bottom:2;height:16;padding-left:1;padding-right:1}#ViewerFpsSlider{background-color:transparent;background-image:url('imgs/white/slider-groove.svg');background-position:center center;background-repeat:repeat-x;border:0;height:19;margin:0 3 0 37;max-width:300;min-width:0}#ViewerFpsSlider::sub-line:horizontal{subcontrol-origin:absolute;background-color:#696969;border:1 solid #484848;border-top-left-radius:2;border-bottom-left-radius:2;height:16;left:-33;width:14}#ViewerFpsSlider::add-line:horizontal{subcontrol-position:left;background-color:#696969;border:1 solid #484848;border-top-right-radius:2;border-bottom-right-radius:2;left:18;height:16;image-position:center center;width:13}#ViewerFpsSlider::handle::horizontal{background-color:#a1a1a1;border:1 solid #a1a1a1;border-radius:2;margin:2 0 3 0;min-width:9;width:9;max-width:9}FlipSlider{qproperty-PBHeight:15;qproperty-PBOverlay:url('imgs/white/flipslider.svg');qproperty-PBColorMarginLeft:1;qproperty-PBColorMarginTop:2;qproperty-PBColorMarginRight:1;qproperty-PBColorMarginBottom:2;qproperty-PBMarker:url('imgs/white/flipmarker.svg');qproperty-PBMarkerMarginLeft:3;qproperty-PBMarkerMarginRight:3;qproperty-notStartedColor:rgba(205,101,101,0.78);qproperty-startedColor:#1abc3f;qproperty-baseColor:#2f2f2f;qproperty-finishedColor:#2f2f2f}Ruler{qproperty-ParentBGColor:#484848;qproperty-ScaleColor:#e6e6e6}#RulerToolOptionValues{color:#000}#xsheetArea,#ScrollArea{background-color:#343434;border:0}#xsheetScrollArea{border:0}#cornerWidget QToolButton{padding:0}#xsheetColumnAreaMenu_Preview{background-color:#E6E678}#xsheetColumnAreaMenu_Lock{background-color:#F5F5F5}#xsheetColumnAreaMenu_Camstand{background-color:#FFA480}#xsheetColumnAreaMenu_Preview,#xsheetColumnAreaMenu_Lock,#xsheetColumnAreaMenu_Camstand{color:#000}#noteTextEdit{color:#000}XsheetViewer{qproperty-TextColor:#e6e6e6;qproperty-BGColor:#3b3b3b;qproperty-LightLineColor:#2c2c2c;qproperty-MarkerLineColor:#1E96C4;qproperty-VerticalLineColor:#222;qproperty-VerticalLineHeadColor:#808080;qproperty-PreviewFrameTextColor:#9fdaff;qproperty-CurrentRowBgColor:#506082;qproperty-OnionSkinAreaBgColor:#363636;qproperty-EmptyColumnHeadColor:#626262;qproperty-SelectedColumnTextColor:#E66464;qproperty-EmptyCellColor:#404040;qproperty-NotEmptyColumnColor:#484848;qproperty-SelectedEmptyCellColor:#6c6c6c;qproperty-LevelColumnColor:#4C6E4C;qproperty-LevelColumnBorderColor:#8FB38F;qproperty-SelectedLevelColumnColor:#678667;qproperty-VectorColumnColor:#7B7B4C;qproperty-VectorColumnBorderColor:#BBBB9A;qproperty-SelectedVectorColumnColor:#949466;qproperty-ChildColumnColor:#6A526B;qproperty-ChildColumnBorderColor:#B1A3B3;qproperty-SelectedChildColumnColor:#816e82;qproperty-FullcolorColumnColor:#657A96;qproperty-FullcolorColumnBorderColor:#9EB8BB;qproperty-SelectedFullcolorColumnColor:#8895a6;qproperty-FxColumnColor:#56553C;qproperty-FxColumnBorderColor:#95958A;qproperty-SelectedFxColumnColor:#6f6e56;qproperty-ReferenceColumnColor:#616161;qproperty-ReferenceColumnBorderColor:#A2A2A2;qproperty-SelectedReferenceColumnColor:#7a7a7a;qproperty-PaletteColumnColor:#3A655F;qproperty-PaletteColumnBorderColor:#86ACA7;qproperty-SelectedPaletteColumnColor:#52807a;qproperty-MeshColumnColor:#684D86;qproperty-MeshColumnBorderColor:#BA92EF;qproperty-SelectedMeshColumnColor:#82689e;qproperty-SoundTextColumnColor:#c8c8c8;qproperty-SoundTextColumnBorderColor:#8c8c8c;qproperty-SelectedSoundTextColumnColor:#e2e2e2;qproperty-SoundColumnColor:#657456;qproperty-SoundColumnBorderColor:#A0AF7D;qproperty-SelectedSoundColumnColor:#7e8b72;qproperty-SoundColumnHlColor:#34FE5E;qproperty-SoundColumnTrackColor:#B6C29D;qproperty-ColumnHeadPastelizer:#000;qproperty-SelectedColumnHead:#506082;qproperty-LightLightBGColor:#404040;qproperty-LightBGColor:#f0f0f0;qproperty-DarkBGColor:#e1e1e1;qproperty-DarkLineColor:#969696;qproperty-XsheetColumnNameBgColor:rgba(0,0,0,0);qproperty-XsheetDragBarHighlightColor:rgba(255,255,255,0.5);qproperty-XsheetPreviewButtonBgOnColor:#c8c864;qproperty-XsheetPreviewButtonOnImage:url('imgs/white/x_prev_eye_on.svg');qproperty-XsheetPreviewButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetPreviewButtonOffImage:url('imgs/white/x_prev_eye_off.svg');qproperty-XsheetCamstandButtonBgOnColor:#eb906b;qproperty-XsheetCamstandButtonOnImage:url('imgs/white/x_table_view_on.svg');qproperty-XsheetCamstandButtonTranspImage:url('imgs/white/x_table_view_transp.svg');qproperty-XsheetCamstandButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetCamstandButtonOffImage:url('imgs/white/x_table_view_off.svg');qproperty-XsheetLockButtonBgOnColor:rgba(255,255,255,0.3);qproperty-XsheetLockButtonOnImage:url('imgs/white/x_lock_on.svg');qproperty-XsheetLockButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetLockButtonOffImage:url('imgs/white/x_lock_off.svg');qproperty-XsheetConfigButtonBgColor:rgba(255,255,255,0);qproperty-XsheetConfigButtonImage:url('imgs/white/x_config.svg');qproperty-TimelinePreviewButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelinePreviewButtonOnImage:url('imgs/white/timeline_toggle_on.svg');qproperty-TimelinePreviewButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelinePreviewButtonOffImage:url('imgs/white/timeline_toggle_off.svg');qproperty-TimelineCamstandButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelineCamstandButtonOnImage:url('imgs/white/timeline_toggle_on.svg');qproperty-TimelineCamstandButtonTranspImage:url('imgs/white/timeline_toggle_transp.svg');qproperty-TimelineCamstandButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelineCamstandButtonOffImage:url('imgs/white/timeline_toggle_off.svg');qproperty-TimelineLockButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelineLockButtonOnImage:url('imgs/white/timeline_toggle_on.svg');qproperty-TimelineLockButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelineLockButtonOffImage:url('imgs/white/timeline_toggle_off.svg');qproperty-TimelineConfigButtonBgColor:rgba(255,255,255,0);qproperty-TimelineConfigButtonImage:url('imgs/white/timeline_config.svg');qproperty-LayerHeaderPreviewImage:url('imgs/white/layer_header_prev_eye.svg');qproperty-LayerHeaderPreviewOverImage:url('imgs/white/layer_header_prev_eye_over.svg');qproperty-LayerHeaderCamstandImage:url('imgs/white/layer_header_table_view.svg');qproperty-LayerHeaderCamstandOverImage:url('imgs/white/layer_header_table_view_over.svg');qproperty-LayerHeaderLockImage:url('imgs/white/lock_on.svg');qproperty-LayerHeaderLockOverImage:url('imgs/white/lock_on_over.svg')}#XSheetToolbar{margin:0;padding:0;border:0}#XSheetToolbar QToolButton{padding:0;margin:4 1;min-height:19;height:19}#XSheetToolbar::separator:horizontal{margin:0 4}#FunctionEditor QToolBar{border-bottom:1 solid #272727}#FunctionEditor QToolBar QToolBar{border:0}#FunctionEditor QToolBar QLabel{margin-left:5}#FunctionEditor QToolBar QToolButton{height:18}#FunctionEditorTree{border-top:1 solid #272727}FunctionTreeView{qproperty-TextColor:#e6e6e6;qproperty-CurrentTextColor:#E66464}FunctionPanel{qproperty-BGColor:#3b3b3b;qproperty-ValueLineColor:#2f2f2f;qproperty-FrameLineColor:#2f2f2f;qproperty-OtherCurvesColor:#888;qproperty-RulerBackground:#333;qproperty-TextColor:#e6e6e6;qproperty-SubColor:#000;qproperty-SelectedColor:#FFA500}SpreadsheetViewer{qproperty-LightLightBGColor:#404040;qproperty-CurrentRowBgColor:#506082;qproperty-LightLineColor:#2c2c2c;qproperty-MarkerLineColor:#1E96C4;qproperty-BGColor:#484848;qproperty-VerticalLineColor:#222;qproperty-KeyFrameColor:#995d1d;qproperty-KeyFrameBorderColor:#c9b04b;qproperty-SelectedKeyFrameColor:#be772b;qproperty-InBetweenColor:#666250;qproperty-InBetweenBorderColor:#cdcec8;qproperty-SelectedInBetweenColor:#7d7a6c;qproperty-SelectedEmptyColor:#6c6c6c;qproperty-SelectedSceneRangeEmptyColor:#757575;qproperty-TextColor:#e6e6e6;qproperty-ColumnHeaderBorderColor:#808080;qproperty-SelectedColumnTextColor:#E66464}#ExpressionField{background-color:#e6e6e6;border:1 solid #333;margin:0}#FunctionSegmentViewerLinkButton{background-image:url('imgs/white/segment_unlinked.svg');background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:hover{background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:checked{background-image:url('imgs/white/segment_linked.svg');background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:disabled{background-image:url('imgs/white/segment_disabled.svg');background-repeat:no-repeat} \ No newline at end of file +.button-show,#LoadLevelShowButton,#CleanupSettingsShowButton,#OutputSettingsShowButton,#FxSettingsPreviewShowButton{image:url('imgs/white/plus.svg');image-position:center center;margin:0;padding:1;min-width:10;min-height:10}.button-show:checked,#LoadLevelShowButton:checked,#CleanupSettingsShowButton:checked,#OutputSettingsShowButton:checked,#FxSettingsPreviewShowButton:checked{background-color:#313131;border-color:#2c2c2c;image:url('imgs/white/minus.svg')}.button-show:checked:pressed,#LoadLevelShowButton:checked:pressed,#CleanupSettingsShowButton:checked:pressed,#OutputSettingsShowButton:checked:pressed,#FxSettingsPreviewShowButton:checked:pressed{background-color:#313131;border-color:#2c2c2c}.button-show:checked:hover,#LoadLevelShowButton:checked:hover,#CleanupSettingsShowButton:checked:hover,#OutputSettingsShowButton:checked:hover,#FxSettingsPreviewShowButton:checked:hover{background-color:#363636}.button-tool,QToolButton,#CameraSettingsRadioButton::indicator,#ForceSquaredPixelButton,#SchematicBottomFrame QToolBar QToolButton,#EditToolLockButton::indicator,#flipCustomize{background-color:rgba(255,255,255,0);border:1 solid rgba(255,255,255,0);border-radius:2;color:#f3f3f3;margin:1;padding:0}.button-tool:hover,QToolButton:hover,#CameraSettingsRadioButton::indicator:hover,#ForceSquaredPixelButton:hover,#colorSliderAddButton:hover,#colorSliderSubButton:hover,#SchematicBottomFrame QToolBar QToolButton:hover,#EditToolLockButton::indicator:hover,#flipCustomize:hover{background-color:#767676;border-color:#767676;color:#f3f3f3}.button-tool:pressed,QToolButton:pressed,#CameraSettingsRadioButton::indicator:pressed,#ForceSquaredPixelButton:pressed,#colorSliderAddButton:pressed,#colorSliderSubButton:pressed,#SchematicBottomFrame QToolBar QToolButton:pressed,#EditToolLockButton::indicator:pressed,#flipCustomize:pressed{background-color:#313131;border-color:#2c2c2c;color:#f3f3f3}.button-tool:checked,QToolButton:checked,#CameraSettingsRadioButton::indicator:checked,#ForceSquaredPixelButton:checked,#SchematicBottomFrame QToolBar QToolButton:checked,#EditToolLockButton::indicator:checked,#flipCustomize:checked{background-color:#5385a6;border-color:#5385a6;color:#fff}.button-tool:checked:hover,QToolButton:checked:hover,#CameraSettingsRadioButton::indicator:checked:hover,#ForceSquaredPixelButton:checked:hover,#SchematicBottomFrame QToolBar QToolButton:checked:hover,#EditToolLockButton::indicator:checked:hover,#flipCustomize:checked:hover{background-color:#6c98b6;border-color:#6c98b6}.button-tool:disabled,QToolButton:disabled,#CameraSettingsRadioButton::indicator:disabled,#ForceSquaredPixelButton:disabled,#SchematicBottomFrame QToolBar QToolButton:disabled,#EditToolLockButton::indicator:disabled,#flipCustomize:disabled{color:#808080}.button-flat,PaletteViewer QToolBar QToolButton{background-color:none;border:0;border-radius:0;margin:0}.button-flat:hover,PaletteViewer QToolBar QToolButton:hover{background-color:#767676}.button-flat:pressed,PaletteViewer QToolBar QToolButton:pressed{background-color:#272727}.frame,.GroupBox,#LoadLevelFrame,#PsdSettingsGroupBox,#CleanupSettingsFrame,#OutputSettingsBox,#OutputSettingsCameraBox,#SolidLineFrame,#FunctionParametersPanel,QGroupBox{border:1 solid #272727;border-radius:2}.tab-container,#TabBarContainer{background-color:transparent;qproperty-BottomAboveLineColor:#393939;qproperty-BottomBelowLineColor:#272727}.tab-flat,#StyleEditorTabBar::tab,#PaletteTabBar::tab,#FxSettingsTabBar::tab{background-color:#393939;border-right:1 solid #272727;border-bottom:1 solid #272727;color:#a1a1a1;padding:3 4 3 4}.tab-flat:hover,#StyleEditorTabBar::tab:hover,#PaletteTabBar::tab:hover,#FxSettingsTabBar::tab:hover{background-color:#484848;color:#a1a1a1}.tab-flat:selected,#StyleEditorTabBar::tab:selected,#PaletteTabBar::tab:selected,#FxSettingsTabBar::tab:selected{background-color:#484848;color:#fff;border-bottom-color:#484848}.tab-flat:only-one,#StyleEditorTabBar::tab:only-one,#PaletteTabBar::tab:only-one,#FxSettingsTabBar::tab:only-one{margin:0}.tab-round{background-color:#393939;border-top:1 solid #272727;border-right:1 solid #272727;border-left:1 solid #272727;border-bottom:1 solid #272727;color:#a1a1a1;margin:3 -1 0 0;padding:2 7 1 7}.tab-round:hover{background-color:#484848;color:#a1a1a1}.tab-round:selected{background-color:#484848;border-top-right-radius:2;border-top-left-radius:2;border-bottom-color:#484848;color:#fff;margin:1 -1 -1 0;padding:2 7 2 7}.tab-round:only-one{margin:1 0 0 0;padding:3 7 3 7}.tab-round:last{margin-right:0;border-top-right-radius:2}.tab-round:first{border-top-left-radius:2}QWidget{background-color:#484848;color:#e6e6e6}QWidget:disabled{color:#808080}QFrame{border:0;margin:0;padding:0}QToolTip,#helpToolTip{background-color:#fff;border:1 solid #000;color:#000;padding:1 1}#DockSeparator,QMainWindow::separator,QSplitter::handle{background-color:#1a1a1a;height:4;width:4}#TDockPlaceholder{background-color:#F77272}TPanel{background-color:#1a1a1a}#TopBar{background:#484848;border:0;border-bottom:1 solid #272727;height:21}#TopBar #EditToolLockButton{background:#484848;spacing:0}#TopBar #EditToolLockButton::indicator{background:none;border:none;height:18;margin:1 2 0 0;padding-left:0;padding-right:0}#TopBarTabContainer{background-color:#484848;margin-bottom:1}#StackedMenuBar{border:0;margin:0;padding:0}QMenuBar{background-color:#484848;border:0}QMenuBar::item{background-color:#484848;border-left:1 solid #484848;margin:0;padding:3 5}QMenuBar::item:selected{background-color:rgba(255,255,255,0.15);color:#e6e6e6}QMenuBar::item:pressed{background-color:#5385a6;color:#fff}#TopBarTab{margin:0;padding:0}#TopBarTab::tab{background-color:#393939;border-top:1 solid #272727;border-right:1 solid #272727;color:#a1a1a1;margin:0 0 0 0;padding:2 8 3 8}#TopBarTab::tab:hover{background-color:#484848;color:#a1a1a1}#TopBarTab::tab:selected{background-color:#484848;color:#fff}#TopBarTab::tab:first{border-left:1 solid #272727}#TopBarTab::tab:last{border-right:1 solid #272727}QMenu{background-color:#484848;border:1 solid #272727;padding:2 0}QMenu::item{padding:3 28}QMenu::item:selected{background-color:#5385a6;color:#fff}QMenu::item:checked{color:#e6e6e6}QMenu::item:checked:selected{background-color:#5385a6;color:#fff}QMenu::item:disabled{background:none;color:#808080}QMenu::item:disabled:selected{border-color:transparent}QMenu::separator{border-top:1 solid #272727;height:0;margin:2 0}QMenu::icon{border-radius:2;margin:0 0 0 3;padding:1}QMenu::icon:checked{background-color:#5385a6}QMenu::indicator{margin-left:7}TPanelTitleBar{background-color:#393939;border-color:#272727;border-style:solid;border-width:0 0 1 0;height:20;min-height:20;qproperty-TitleColor:#949494;qproperty-ActiveTitleColor:#fff;qproperty-BorderPixmap:url('none');qproperty-ActiveBorderPixmap:url('imgs/white/none');qproperty-FloatBorderPixmap:url('none');qproperty-FloatActiveBorderPixmap:url('imgs/white/none')}QAbstractScrollArea::corner{background-color:#343434}QScrollBar{background-color:#343434;border:0}QScrollBar:horizontal{height:16;margin:0}QScrollBar:vertical{margin:0;width:16}QScrollBar::handle{border:1 solid #525252;border-radius:4}QScrollBar::handle:horizontal:hover,QScrollBar::handle:vertical:hover{background-color:#676767;border-color:#676767}QScrollBar::handle:horizontal:pressed,QScrollBar::handle:vertical:pressed{background-color:#7b7b7b;border-color:#7b7b7b}QScrollBar::handle:horizontal{background-color:#525252;margin:3 16;min-width:20}QScrollBar::handle:vertical{background-color:#525252;margin:16 3;min-height:20}QScrollBar::add-line{subcontrol-origin:margin;border:0}QScrollBar::add-line:horizontal{subcontrol-position:right;background-color:#343434;margin:0;width:16}QScrollBar::add-line:vertical{subcontrol-position:bottom;background-color:#343434;margin:0;height:16}QScrollBar::sub-line{border:0;subcontrol-origin:margin}QScrollBar::sub-line:horizontal{subcontrol-position:left;background-color:#343434;margin:0;width:16}QScrollBar::sub-line:vertical{subcontrol-position:top;background-color:#343434;margin:0;height:16}QScrollBar::up-arrow:vertical{image:url('imgs/white/scroll-up.svg');image-position:center center}QScrollBar::up-arrow:vertical:pressed{margin:1 0 0 0}QScrollBar::down-arrow:vertical{image:url('imgs/white/scroll-down.svg');image-position:center center}QScrollBar::down-arrow:vertical:pressed{margin:1 0 0 0}QScrollBar::left-arrow:horizontal{image:url('imgs/white/scroll-left.svg');image-position:center center}QScrollBar::left-arrow:horizontal:pressed{margin:1 0 0 0}QScrollBar::right-arrow:horizontal{image:url('imgs/white/scroll-right.svg');image-position:center center}QScrollBar::right-arrow:horizontal:pressed{margin:1 0 0 0}QScrollBar::sub-page:horizontal,QScrollBar::add-page:horizontal,QScrollBar::sub-page:vertical,QScrollBar::add-page:vertical{background:none}QToolBar{padding:0}QToolBar::separator:horizontal{border-left:1 solid #272727;margin:0 1;width:0}QToolBar::separator:vertical{border-top:1 solid #272727;height:0;margin:1 0}QToolBar QLabel{margin-top:1}QToolBar QToolBar{border:0}QToolButton::menu-indicator{image:none}QToolButton::menu-button{border-image:none}.DvScrollWidget QPushButton,DvScrollWidget QPushButton,#ScrollLeftButton QPushButton,#ScrollRightButton QPushButton,#ScrollUpButton QPushButton,#ScrollDownButton QPushButton{background-color:#696969;border:0 solid red;border-radius:0;padding:0;max-width:16}.DvScrollWidget QPushButton:hover,DvScrollWidget QPushButton:hover,#ScrollLeftButton QPushButton:hover,#ScrollRightButton QPushButton:hover,#ScrollUpButton QPushButton:hover,#ScrollDownButton QPushButton:hover{background-color:#767676}.DvScrollWidget QPushButton:pressed,DvScrollWidget QPushButton:pressed,#ScrollLeftButton QPushButton:pressed,#ScrollRightButton QPushButton:pressed,#ScrollUpButton QPushButton:pressed,#ScrollDownButton QPushButton:pressed{background-color:#313131}#ScrollLeftButton,#ScrollRightButton,#ScrollUpButton,#ScrollDownButton{margin:0;min-width:16}#ScrollLeftButton{border-right:1 solid #272727;image:url('imgs/white/scroll-left.svg')}#ScrollRightButton{border-left:1 solid #272727;margin-left:3;image:url('imgs/white/scroll-right.svg')}#ScrollUpButton{image:url('imgs/white/scroll-up.svg')}#ScrollDownButton{image:url('imgs/white/scroll-down.svg')}#keyFrameNavigator{background:none;margin:0;padding:0}#keyFrameNavigator QToolButton{min-width:18}#keyFrameNavigator #PreviousKey{image:url('imgs/white/prevkey.svg')}#keyFrameNavigator #PreviousKey:hover{image:url('imgs/white/prevkey_over.svg')}#keyFrameNavigator #PreviousKey:disabled{image:url('imgs/white/prevkey_disabled.svg')}#keyFrameNavigator #NextKey{image:url('imgs/white/nextkey.svg')}#keyFrameNavigator #NextKey:hover{image:url('imgs/white/nextkey_over.svg')}#keyFrameNavigator #NextKey:disabled{image:url('imgs/white/nextkey_disabled.svg')}.treeview,QTreeWidget,QTreeView,#FunctionEditorTree{background-color:#343434;alternate-background-color:#393939;border:0;margin:0;outline:0}.treeview::item:selected,QTreeWidget::item:selected,QTreeView::item:selected,#FunctionEditorTree::item:selected{background-color:#5385a6;color:#fff}.treeview::branch:adjoins-item,QTreeWidget::branch:adjoins-item,QTreeView::branch:adjoins-item,#FunctionEditorTree::branch:adjoins-item{border-image:url('')}.treeview::branch:has-siblings,QTreeWidget::branch:has-siblings,QTreeView::branch:has-siblings,#FunctionEditorTree::branch:has-siblings{border-image:url('')}.treeview::branch:has-siblings:adjoins-item,QTreeWidget::branch:has-siblings:adjoins-item,QTreeView::branch:has-siblings:adjoins-item,#FunctionEditorTree::branch:has-siblings:adjoins-item{border-image:url('')}.treeview::branch:has-children:closed,QTreeWidget::branch:has-children:closed,QTreeView::branch:has-children:closed,#FunctionEditorTree::branch:has-children:closed{background:url('imgs/white/treebranch-closed.svg') no-repeat;background-position:center center;border-image:none;image:none}.treeview::branch:has-children:open,QTreeWidget::branch:has-children:open,QTreeView::branch:has-children:open,#FunctionEditorTree::branch:has-children:open{background:url('imgs/white/treebranch-open.svg') no-repeat;background-position:center center;image:none}.treeview::branch:has-children:has-siblings:closed,QTreeWidget::branch:has-children:has-siblings:closed,QTreeView::branch:has-children:has-siblings:closed,#FunctionEditorTree::branch:has-children:has-siblings:closed{background:url('imgs/white/treebranch-closed.svg') no-repeat;background-position:center center;border-image:none;image:none}.treeview::branch:has-children:has-siblings:open,QTreeWidget::branch:has-children:has-siblings:open,QTreeView::branch:has-children:has-siblings:open,#FunctionEditorTree::branch:has-children:has-siblings:open{background:url('imgs/white/treebranch-open.svg') no-repeat;background-position:center center;border-image:none;image:none}QListView{outline:0;background:#343434;alternate-background-color:#393939}#TabBarContainer{background-color:#393939}.Button,QPushButton,.ComboBox,.ComboBox:checked,QComboBox,QComboBox:checked{background-color:#696969;border:1 solid #484848;border-radius:2;color:#f3f3f3;margin:0;padding:3 15}.Button:hover,QPushButton:hover,.ComboBox:hover,#ViewerFpsSlider::sub-line:horizontal:hover,#ViewerFpsSlider::add-line:horizontal:hover,QComboBox:hover{background-color:#767676;border-color:#484848;color:#f3f3f3}.Button:pressed,QPushButton:pressed,#ViewerFpsSlider::sub-line:horizontal:pressed,#ViewerFpsSlider::add-line:horizontal:pressed{background-color:#313131;border-color:#2c2c2c;color:#f3f3f3}.Button:checked,QPushButton:checked{background-color:#313131;border-color:#2c2c2c;color:#f3f3f3}.Button:checked:hover,QPushButton:checked:hover{background-color:#363636}.Button:checked:hover:pressed,QPushButton:checked:hover:pressed{background:#313131}.Button:disabled,QPushButton:disabled,.ComboBox:disabled,#ViewerFpsSlider::sub-line:horizontal:disabled,#ViewerFpsSlider::add-line:horizontal:disabled,QComboBox:disabled{background-color:#555;border-color:#484848;color:#808080}#PushButton_NoPadding{padding:3}.ComboBox,.ComboBox:checked,QComboBox,QComboBox:checked{padding:1 0 1 4;margin:1 0}.ComboBox::drop-down,QComboBox::drop-down{image:url('imgs/white/combo_downarrow.svg');image-position:center center;width:16}.ComboBox::drop-down:disabled,QComboBox::drop-down:disabled{image:url('imgs/white/combo_downarrow_disabled.svg')}.ComboBox QAbstractItemView,QComboBox QAbstractItemView{background-color:#484848;border:1 solid #272727;selection-background-color:#5385a6;selection-color:#fff}.LineEdit,QPlainTextEdit,QLineEdit,#TaskSheetItem,#tasksRemoveBox,#tasksAddBox{background-color:#2f2f2f;border:1 solid #2c2c2c;border-radius:2;color:#e6e6e6;selection-background-color:#5385a6;selection-color:#fff;padding:0 0 0 1}.LineEdit:focus,QPlainTextEdit:focus,QLineEdit:focus,#TaskSheetItem:focus,#tasksRemoveBox:focus,#tasksAddBox:focus{background-color:#2f2f2f;border-color:#5385a6;color:#e6e6e6}.LineEdit:disabled,QPlainTextEdit:disabled,QLineEdit:disabled,#TaskSheetItem:disabled,#tasksRemoveBox:disabled,#tasksAddBox:disabled{background-color:#3b3b3b;border-color:#3a3a3a;color:#808080}.CheckBox,QCheckBox{color:#e6e6e6}.CheckBox:hover,QCheckBox:hover,.RadioButton:hover,QRadioButton:hover{color:#fff}.CheckBox:disabled,QCheckBox:disabled{color:#808080}.CheckBox::indicator,QMenu::indicator,QCheckBox::indicator,.GroupBox::indicator,QGroupBox::indicator{background-color:#2f2f2f;border:1 solid #2c2c2c;border-radius:2;height:9;padding:1;width:9}.CheckBox::indicator:hover,QMenu::indicator:hover,.CheckBox::indicator:checked:hover,QCheckBox::indicator:hover,.GroupBox::indicator:hover,QMenu::indicator:checked:hover,QCheckBox::indicator:checked:hover,.GroupBox::indicator:checked:hover,QGroupBox::indicator:hover,QGroupBox::indicator:checked:hover{background-color:#2f2f2f;border-color:#5385a6}.CheckBox::indicator:checked,QMenu::indicator:checked,QCheckBox::indicator:checked,.GroupBox::indicator:checked,QGroupBox::indicator:checked{background-color:#2f2f2f;border-color:#2c2c2c;image:url('imgs/white/checkmark.svg')}.CheckBox::indicator:checked:disabled,QMenu::indicator:checked:disabled,QCheckBox::indicator:checked:disabled,.GroupBox::indicator:checked:disabled,QGroupBox::indicator:checked:disabled{background-color:#3b3b3b;border-color:#3b3b3b;image:url('imgs/white/checkmark_disabled.svg')}.CheckBox::indicator:disabled,QMenu::indicator:disabled,QCheckBox::indicator:disabled,.GroupBox::indicator:disabled,QGroupBox::indicator:disabled{background-color:#3b3b3b;border-color:#3b3b3b}.RadioButton::indicator:unchecked,QRadioButton::indicator:unchecked,#CameraSettingsRadioButton_Small::indicator:unchecked{image:url('imgs/white/radiobutton_unchecked.svg');image-position:center center}.RadioButton::indicator:checked,QRadioButton::indicator:checked,#CameraSettingsRadioButton_Small::indicator:checked{image:url('imgs/white/radiobutton_checked.svg');image-position:center center}.GroupBox,QGroupBox{margin:6 0 0 0;padding:5 0}.GroupBox::title,QGroupBox::title{subcontrol-origin:margin;left:15;margin:-3 0 0 0;padding:0 3}.GroupBox::title:hover,QGroupBox::title:hover{color:#fff}.GroupBox::title:disabled,QGroupBox::title:disabled{color:#808080}.GroupBox::indicator,QGroupBox::indicator{subcontrol-origin:margin;margin-top:2}.GroupBox:disabled,QGroupBox:disabled{color:#808080}.Slider::groove:horizontal,QSlider::groove:horizontal{background-color:transparent;background-image:url('imgs/white/slider-groove.svg');background-position:center center;background-repeat:repeat-x;margin:0;height:20;min-height:20}.Slider::groove:horizontal:disabled,QSlider::groove:horizontal:disabled{background-image:url('imgs/white/slider-groove_disabled.svg')}.Slider::handle:horizontal,QSlider::handle:horizontal{width:10;margin:-2 -1;image:url('imgs/white/slider-handle.svg')}.Slider::handle:horizontal:disabled,QSlider::handle:horizontal:disabled{image:url('imgs/white/slider-handle_disabled.svg')}#IntPairField,#DoublePairField{qproperty-LightLineColor:#2c2c2c;qproperty-LightLineEdgeColor:#2c2c2c;qproperty-DarkLineColor:#2c2c2c;qproperty-MiddleLineColor:#2c2c2c;qproperty-HandleLeftPixmap:url("imgs/white/slider-handle.svg");qproperty-HandleRightPixmap:url("imgs/white/slider-handle.svg");qproperty-HandleLeftGrayPixmap:url("imgs/white/slider-handle_disabled.svg");qproperty-HandleRightGrayPixmap:url("imgs/white/slider-handle_disabled.svg")}#DirTreeView{background-color:#343434;alternate-background-color:#343434;border:1 solid #272727;border-right:0}DvItemViewerPanel{qproperty-TextColor:#e6e6e6;qproperty-AlternateBackground:#404040;qproperty-SelectedTextColor:#fff;qproperty-FolderTextColor:#9fdaff;qproperty-SelectedItemBackground:#5385a6}#FileBrowser DvItemViewerPanel,#SceneCast DvItemViewerPanel{background-color:#484848}#FileBrowser #castFrame,#SceneCast #castFrame{border-top:1 solid #272727;border-right:1 solid #272727;border-bottom:1 solid #272727;margin:0}#FileBrowser QToolButton,#SceneCast QToolButton{padding:1}DvDirTreeView{qproperty-TextColor:#e6e6e6;qproperty-SelectedTextColor:#fff;qproperty-SelectedItemBackground:#5385a6;qproperty-FolderTextColor:#9fdaff;qproperty-SelectedFolderTextColor:#fff;alternate-background-color:#393939;background-color:#343434;border:1 solid #272727}#FileDoesNotExistLabel{color:#f00}#SceneCast QToolBar{border-top:1 solid #272727}#SceneCast QToolButton{margin:3 1 2 1;padding:1}#CastBrowser{border:0;margin:0}#FilmStrip QComboBox{border-radius:0;border-width:0}#FilmStrip QComboBox QAbstractItemView{background-color:#484848}#CleanupSettings #CleanupSettingsFrame{margin-top:2;margin-bottom:4}#CleanupSettings QGroupBox{margin-bottom:3}ParamsPage{qproperty-TextColor:#e6e6e6}#CameraSettingsButton{padding:2}#CameraSettingsRadioButton:hover{background:none}#CameraSettingsRadioButton::indicator{border:1 solid rgba(255,255,255,0);height:18;padding:0;width:18}#CameraSettingsRadioButton::indicator:unchecked{image:url('imgs/white/lock_off.svg')}#CameraSettingsRadioButton::indicator:checked{background-color:#C34040;border-color:#C34040;image:url('imgs/white/lock_on.svg')}#CameraSettingsRadioButton::indicator:checked:hover{background-color:#d57a7a;border-color:#d57a7a}#CameraSettingsDPI{color:#9fdaff}#CameraSettingsRadioButton_Small{padding:0}#CameraSettingsRadioButton_Small::indicator{background-color:transparent;border:0;height:21;margin:0;width:11}#ForceSquaredPixelButton{height:16;border:1 solid rgba(255,255,255,0);image:url('imgs/white/fsp_unchecked.svg');padding:2;width:16;margin:0}#ForceSquaredPixelButton:checked{image:url('imgs/white/fsp_checked.svg')}#OutputSettingsLabel{color:#9fdaff}PencilTestPopup{min-height:730px;min-width:512px}#MatchLineButton{background-color:#6e6e6e}#MatchLineButton:checked{background-color:#949494;border:2 solid #5385a6;border-radius:2}#LargeSizedText{font-size:17px}#StartupLabel{padding:3}#StartupLabel:hover{background:#626262}QStatusBar{background-color:#c0c0c0}QStatusBar::item{border:0}QStatusBar QLabel{background-color:#c0c0c0}QStatusBar #StatusBarLabel{background-color:#fff;padding:1 3}#TitleTxtLabel{color:#9fdaff}#StyleEditor QPushButton{margin:2 1;padding:0}#StyleEditor #TabBarContainer{margin-left:-4}#StyleEditor #bottomWidget{border-top:1 solid #272727;padding:3 2 8 3}#StyleEditor #bottomWidget QPushButton{padding:3 5}#StyleEditorTabBar::tab::first{border-left:1 solid #272727}#HexagonalColorWheel{qproperty-BGColor:#484848}#colorSlider::groove:horizontal{height:1;border-image:none}#colorSlider::handle:horizontal{width:8;margin:-8 -4}#colorSliderAddButton,#colorSliderSubButton{background:none;border-color:transparent;image-position:center center;min-height:16;padding:0;min-width:18}#colorSliderAddButton{image:url('imgs/white/scroll-right.svg')}#colorSliderSubButton{image:url('imgs/white/scroll-left.svg')}#PlainColorPageParts{border-bottom:1 solid #272727}#PlainColorPageParts QLineEdit{max-width:35}PaletteViewer DvScrollWidget QPushButton{border-top:0;margin-bottom:1;max-width:15;min-width:15}PaletteViewer DvScrollWidget #ScrollLeftButton{border-radius:0;margin-bottom:1;max-width:16;min-width:16}PaletteViewer DvScrollWidget #ScrollRightButton{border-radius:0;margin-left:1;margin-bottom:1;max-width:16;min-width:16}PaletteViewer QToolBar{background:none;border-bottom:1 solid #272727;padding:0;margin:0}PaletteViewer QToolBar::separator:horizontal{margin:0}PaletteViewer QToolBar QToolButton{margin:0 0 1 0;padding:1 0 2 0}#PageViewer{qproperty-TextColor:#e6e6e6}#PaletteLockButton{border-radius:0;margin:0 0 1 1}#PaletteLockButton:checked{background-color:#C34040;border-color:#C34040}#PaletteLockButton:checked:hover{background-color:#d57a7a;border-color:#d57a7a}#WordButton{padding-right:0;padding-left:0}QDialog{background-color:#484848}QDialog #dialogButtonFrame{background-color:#3e3e3e;border-top:1 solid #272727}QDialog #dialogButtonFrame QPushButton{border-color:#3e3e3e;outline:0}QDialog #dialogButtonFrame QPushButton:focus{background-color:#5385a6;border-color:#3e3e3e;color:#fff}QDialog #dialogButtonFrame QPushButton:focus:hover{background-color:#6c98b6}QDialog #dialogButtonFrame QPushButton:focus:pressed{background-color:#313131;border-color:#2c2c2c;color:#f3f3f3}#SceneSettings QLabel{color:#9fdaff}#PreferencesPopup QListWidget{background-color:#343434;alternate-background-color:#343434;border:1 solid #272727;font-size:13px}#PreferencesPopup QListWidget::item{border:0;padding:3}#PreferencesPopup QListWidget::item:hover{color:#e6e6e6;background-color:rgba(255,255,255,0.15)}#PreferencesPopup QListWidget::item:selected{background-color:#5385a6;color:#fff}#ShortcutTree{border:1 solid #272727}#ShortcutTree::item{padding:1 0}#ShortcutTree QScrollBar:vertical{width:16;margin-right:-1}ProjectPopup QLabel{color:#9fdaff}#GearButton{qproperty-icon:url('imgs/white/gear.svg')}#SubfolderButton{qproperty-icon:url('imgs/white/subfolder.svg');padding-left:6px;padding-right:6px}#SubcameraButton{qproperty-icon:url('imgs/white/subcamera.svg');padding-left:6px;padding-right:6px}SchematicViewer{qproperty-TextColor:#e6e6e6;qproperty-VerticalLineColor:#222;qproperty-LevelColumnColor:#4C6E4C;qproperty-VectorColumnColor:#7B7B4C;qproperty-ChildColumnColor:#6A526B;qproperty-FullcolorColumnColor:#657A96;qproperty-FxColumnColor:#56553C;qproperty-PaletteColumnColor:#3A655F;qproperty-MeshColumnColor:#684D86;qproperty-ReferenceColumnColor:#616161;qproperty-TableColor:#62628c;qproperty-ActiveCameraColor:#2d7dca;qproperty-OtherCameraColor:#6c797b;qproperty-GroupColor:#3b6e9c;qproperty-PegColor:#9f6e3c;qproperty-SplineColor:#6a9d1c;qproperty-ActiveOutputColor:#2d7dca;qproperty-OtherOutputColor:#6c797b;qproperty-XsheetColor:#62628c;qproperty-NormalFxColor:#6a7e96;qproperty-MacroFxColor:#815c79;qproperty-ImageAdjustFxColor:#656287;qproperty-LayerBlendingFxColor:#4f757d;qproperty-MatteFxColor:#ae7171;qproperty-SchematicPreviewButtonBgOnColor:#c8c864;qproperty-SchematicPreviewButtonOnImage:url('imgs/white/x_prev_eye_on.svg');qproperty-SchematicPreviewButtonBgOffColor:#616161;qproperty-SchematicPreviewButtonOffImage:url('imgs/white/x_prev_eye_off.svg');qproperty-SchematicCamstandButtonBgOnColor:#eb906b;qproperty-SchematicCamstandButtonOnImage:url('imgs/white/x_table_view_on.svg');qproperty-SchematicCamstandButtonTranspImage:url('imgs/white/x_table_view_transp.svg');qproperty-SchematicCamstandButtonBgOffColor:#616161;qproperty-SchematicCamstandButtonOffImage:url('imgs/white/x_table_view_off.svg')}#SchematicBottomFrame{background-color:#484848;border:0;margin:0;padding:0}#SchematicBottomFrame QToolBar::separator:horizontal{margin:0}#SchematicBottomFrame QToolBar QToolButton{padding:0;margin:2}#SchematicSceneViewer{background-color:#3b3b3b;border-bottom:1 solid #272727}#FxSettingsTabBar::tab{border-top:1 solid #272727}#FxSettingsTabBar::tab::first,#FxSettingsTabBar::tab::only-one{border-left:1 solid #272727}FxSettings QToolBar{border-top:1 solid #272727;border-right:1 solid #272727;border-left:1 solid #272727;min-height:23;padding:3 0}FxSettings QToolBar QToolBar{border:0}#FxSettingsLabel{color:#a0e680}#FxSettingsHelpButton{background-color:#80a0dc;color:#000;padding-top:0;padding-bottom:0}#FxSettingsHelpButton:hover{background-color:#a8bee7}#ScriptConsole{font-family:'Courier New',monospace;border:0;color:#000000;padding:3}#ScriptConsole QFrame{background-color:#dcdcdc}#ScriptConsole TPanelTitleBar{background-color:#393939}#TaskSheetItemLabel{color:#e6e6e6}#Tasks QToolBar{border-bottom:1 solid #272727;margin:0;padding:0}#Tasks QToolBar QToolButton{margin:2 2 3 2}#ToolBar QToolBar{padding-left:2}#ToolOptions TPanelTitleBar{border-right:1 solid #272727;border-bottom:0}#CommandBar TPanelTitleBar{border-right:1 solid #272727;border-bottom:0}IconViewField{qproperty-ThicknessPixmap:url("imgs/white/selectiontool_thickness.svg")}#EditToolLockButton{spacing:0}#EditToolLockButton:hover{background:none}#EditToolLockButton::indicator{border:1 solid rgba(255,255,255,0);height:18;padding:0;width:18}#EditToolLockButton::indicator:unchecked{image:url('imgs/white/lock_off.svg')}#EditToolLockButton::indicator:checked{background-color:#C34040;border-color:#C34040;image:url('imgs/white/lock_on.svg')}#EditToolLockButton::indicator:checked:hover{background-color:#d57a7a;border-color:#d57a7a}PopupButton::menu-indicator{border-left:0;height:17;image:url('imgs/white/combo_downarrow.svg');width:10}PopupButton::menu-indicator:hover{image:url('imgs/white/combo_downarrow.svg')}PopupButton::menu-indicator:disabled{image:url('imgs/white/combo_downarrow_disabled.svg')}#Cap,#Join{padding:0 4 0 -8;max-width:32;min-width:32}#Cap QMenu,#Join QMenu{max-width:28;min-width:28}#Cap QMenu::item,#Join QMenu::item{max-width:28;min-width:28;padding:0}QToolBar#MediumPaddingToolBar QToolButton{padding-left:3;padding-right:3}QToolBar#WidePaddingToolBar QToolButton{padding-left:6;padding-right:6}#CommandBar{margin:0;padding:0;border:0}#CommandBar::separator:horizontal{margin-right:3;margin-left:3}#expandButton:checked{background-color:transparent;border-color:transparent;color:#e6e6e6}#expandButton:checked:hover{background-color:#767676;border-color:#767676}#expandButton:checked:pressed{background-color:#313131;border-color:#2c2c2c}#ComboViewerPanel Toolbar{border-bottom:1 solid #272727}#ComboViewerPanel Toolbar::separator:horizontal{margin:0 0 0 2}#ComboViewerPanel Toolbar QToolButton{margin:2 0 3 2}#ComboViewerToolOptions{border-bottom:1 solid #272727}#ComboViewer #ToolBarContainer,#ViewerPanel #ToolBarContainer,FlipBook #ToolBarContainer{background-color:transparent;border-top:2 solid #272727;border-bottom:1 solid #272727;padding-right:-1}#flipCustomize{margin-left:3}#flipCustomize::menu-button{background-color:transparent;width:35}#flipCustomize::menu-arrow{image:none}QToolBar#FlipConsolePlayToolBar::separator:horizontal{margin:0 3}QToolBar#FlipConsolePlayToolBar QToolButton{margin-top:2;margin-bottom:2;height:16;padding-left:1;padding-right:1}#ViewerFpsSlider{background-color:transparent;background-image:url('imgs/white/slider-groove.svg');background-position:center center;background-repeat:repeat-x;border:0;height:19;margin:0 3 0 37;max-width:300;min-width:0}#ViewerFpsSlider::sub-line:horizontal{subcontrol-origin:absolute;background-color:#696969;border:1 solid #484848;border-top-left-radius:2;border-bottom-left-radius:2;height:16;left:-33;width:14}#ViewerFpsSlider::add-line:horizontal{subcontrol-position:left;background-color:#696969;border:1 solid #484848;border-top-right-radius:2;border-bottom-right-radius:2;left:18;height:16;image-position:center center;width:13}#ViewerFpsSlider::handle::horizontal{background-color:#a1a1a1;border:1 solid #a1a1a1;border-radius:2;margin:2 0 3 0;min-width:9;width:9;max-width:9}FlipSlider{qproperty-PBHeight:15;qproperty-PBOverlay:url('imgs/white/flipslider.svg');qproperty-PBColorMarginLeft:1;qproperty-PBColorMarginTop:2;qproperty-PBColorMarginRight:1;qproperty-PBColorMarginBottom:2;qproperty-PBMarker:url('imgs/white/flipmarker.svg');qproperty-PBMarkerMarginLeft:3;qproperty-PBMarkerMarginRight:3;qproperty-notStartedColor:rgba(205,101,101,0.78);qproperty-startedColor:#1abc3f;qproperty-baseColor:#2f2f2f;qproperty-finishedColor:#2f2f2f}Ruler{qproperty-ParentBGColor:#484848;qproperty-ScaleColor:#e6e6e6}#RulerToolOptionValues{color:#000}#xsheetArea,#ScrollArea{background-color:#343434;border:0}#xsheetScrollArea{border:0}#cornerWidget QToolButton{padding:0}#xsheetColumnAreaMenu_Preview{background-color:#E6E678}#xsheetColumnAreaMenu_Lock{background-color:#F5F5F5}#xsheetColumnAreaMenu_Camstand{background-color:#FFA480}#xsheetColumnAreaMenu_Preview,#xsheetColumnAreaMenu_Lock,#xsheetColumnAreaMenu_Camstand{color:#000}#noteTextEdit{color:#000}XsheetViewer{qproperty-TextColor:#e6e6e6;qproperty-BGColor:#3b3b3b;qproperty-LightLineColor:#2c2c2c;qproperty-MarkerLineColor:#1E96C4;qproperty-VerticalLineColor:#222;qproperty-VerticalLineHeadColor:#808080;qproperty-PreviewFrameTextColor:#9fdaff;qproperty-CurrentRowBgColor:#506082;qproperty-OnionSkinAreaBgColor:#363636;qproperty-EmptyColumnHeadColor:#626262;qproperty-SelectedColumnTextColor:#E66464;qproperty-EmptyCellColor:#404040;qproperty-NotEmptyColumnColor:#484848;qproperty-SelectedEmptyCellColor:#6c6c6c;qproperty-LevelColumnColor:#4C6E4C;qproperty-LevelColumnBorderColor:#8FB38F;qproperty-SelectedLevelColumnColor:#678667;qproperty-VectorColumnColor:#7B7B4C;qproperty-VectorColumnBorderColor:#BBBB9A;qproperty-SelectedVectorColumnColor:#949466;qproperty-ChildColumnColor:#6A526B;qproperty-ChildColumnBorderColor:#B1A3B3;qproperty-SelectedChildColumnColor:#816e82;qproperty-FullcolorColumnColor:#657A96;qproperty-FullcolorColumnBorderColor:#9EB8BB;qproperty-SelectedFullcolorColumnColor:#8895a6;qproperty-FxColumnColor:#56553C;qproperty-FxColumnBorderColor:#95958A;qproperty-SelectedFxColumnColor:#6f6e56;qproperty-ReferenceColumnColor:#616161;qproperty-ReferenceColumnBorderColor:#A2A2A2;qproperty-SelectedReferenceColumnColor:#7a7a7a;qproperty-PaletteColumnColor:#3A655F;qproperty-PaletteColumnBorderColor:#86ACA7;qproperty-SelectedPaletteColumnColor:#52807a;qproperty-MeshColumnColor:#684D86;qproperty-MeshColumnBorderColor:#BA92EF;qproperty-SelectedMeshColumnColor:#82689e;qproperty-SoundTextColumnColor:#c8c8c8;qproperty-SoundTextColumnBorderColor:#8c8c8c;qproperty-SelectedSoundTextColumnColor:#e2e2e2;qproperty-SoundColumnColor:#657456;qproperty-SoundColumnBorderColor:#A0AF7D;qproperty-SelectedSoundColumnColor:#7e8b72;qproperty-SoundColumnHlColor:#34FE5E;qproperty-SoundColumnTrackColor:#B6C29D;qproperty-ColumnHeadPastelizer:#000;qproperty-SelectedColumnHead:#506082;qproperty-LightLightBGColor:#404040;qproperty-LightBGColor:#f0f0f0;qproperty-DarkBGColor:#e1e1e1;qproperty-DarkLineColor:#969696;qproperty-XsheetColumnNameBgColor:rgba(0,0,0,0);qproperty-XsheetDragBarHighlightColor:rgba(255,255,255,0.5);qproperty-XsheetPreviewButtonBgOnColor:#c8c864;qproperty-XsheetPreviewButtonOnImage:url('imgs/white/x_prev_eye_on.svg');qproperty-XsheetPreviewButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetPreviewButtonOffImage:url('imgs/white/x_prev_eye_off.svg');qproperty-XsheetCamstandButtonBgOnColor:#eb906b;qproperty-XsheetCamstandButtonOnImage:url('imgs/white/x_table_view_on.svg');qproperty-XsheetCamstandButtonTranspImage:url('imgs/white/x_table_view_transp.svg');qproperty-XsheetCamstandButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetCamstandButtonOffImage:url('imgs/white/x_table_view_off.svg');qproperty-XsheetLockButtonBgOnColor:rgba(255,255,255,0.3);qproperty-XsheetLockButtonOnImage:url('imgs/white/x_lock_on.svg');qproperty-XsheetLockButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetLockButtonOffImage:url('imgs/white/x_lock_off.svg');qproperty-XsheetConfigButtonBgColor:rgba(255,255,255,0);qproperty-XsheetConfigButtonImage:url('imgs/white/x_config.svg');qproperty-TimelinePreviewButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelinePreviewButtonOnImage:url('imgs/white/timeline_toggle_on.svg');qproperty-TimelinePreviewButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelinePreviewButtonOffImage:url('imgs/white/timeline_toggle_off.svg');qproperty-TimelineCamstandButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelineCamstandButtonOnImage:url('imgs/white/timeline_toggle_on.svg');qproperty-TimelineCamstandButtonTranspImage:url('imgs/white/timeline_toggle_transp.svg');qproperty-TimelineCamstandButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelineCamstandButtonOffImage:url('imgs/white/timeline_toggle_off.svg');qproperty-TimelineLockButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelineLockButtonOnImage:url('imgs/white/timeline_toggle_on.svg');qproperty-TimelineLockButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelineLockButtonOffImage:url('imgs/white/timeline_toggle_off.svg');qproperty-TimelineConfigButtonBgColor:rgba(255,255,255,0);qproperty-TimelineConfigButtonImage:url('imgs/white/timeline_config.svg');qproperty-LayerHeaderPreviewImage:url('imgs/white/layer_header_prev_eye.svg');qproperty-LayerHeaderPreviewOverImage:url('imgs/white/layer_header_prev_eye_over.svg');qproperty-LayerHeaderCamstandImage:url('imgs/white/layer_header_table_view.svg');qproperty-LayerHeaderCamstandOverImage:url('imgs/white/layer_header_table_view_over.svg');qproperty-LayerHeaderLockImage:url('imgs/white/lock_on.svg');qproperty-LayerHeaderLockOverImage:url('imgs/white/lock_on_over.svg')}#XSheetToolbar{margin:0;padding:0;border:0}#XSheetToolbar QToolButton{padding:0;margin:4 1;min-height:19;height:19}#XSheetToolbar::separator:horizontal{margin:0 4}#FunctionEditor QToolBar{border-bottom:1 solid #272727}#FunctionEditor QToolBar QToolBar{border:0}#FunctionEditor QToolBar QLabel{margin-left:5}#FunctionEditor QToolBar QToolButton{height:18}#FunctionEditorTree{border-top:1 solid #272727}FunctionTreeView{qproperty-TextColor:#e6e6e6;qproperty-CurrentTextColor:#E66464}FunctionPanel{qproperty-BGColor:#3b3b3b;qproperty-ValueLineColor:#2f2f2f;qproperty-FrameLineColor:#2f2f2f;qproperty-OtherCurvesColor:#888;qproperty-RulerBackground:#333;qproperty-TextColor:#e6e6e6;qproperty-SubColor:#000;qproperty-SelectedColor:#FFA500}SpreadsheetViewer{qproperty-LightLightBGColor:#404040;qproperty-CurrentRowBgColor:#506082;qproperty-LightLineColor:#2c2c2c;qproperty-MarkerLineColor:#1E96C4;qproperty-BGColor:#484848;qproperty-VerticalLineColor:#222;qproperty-KeyFrameColor:#995d1d;qproperty-KeyFrameBorderColor:#c9b04b;qproperty-SelectedKeyFrameColor:#be772b;qproperty-InBetweenColor:#666250;qproperty-InBetweenBorderColor:#cdcec8;qproperty-SelectedInBetweenColor:#7d7a6c;qproperty-SelectedEmptyColor:#6c6c6c;qproperty-SelectedSceneRangeEmptyColor:#757575;qproperty-TextColor:#e6e6e6;qproperty-ColumnHeaderBorderColor:#808080;qproperty-SelectedColumnTextColor:#E66464}#ExpressionField{background-color:#e6e6e6;border:1 solid #333;margin:0}#FunctionSegmentViewerLinkButton{background-image:url('imgs/white/segment_unlinked.svg');background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:hover{background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:checked{background-image:url('imgs/white/segment_linked.svg');background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:disabled{background-image:url('imgs/white/segment_disabled.svg');background-repeat:no-repeat} \ No newline at end of file diff --git a/stuff/config/qss/Default/imgs/black/subcamera.svg b/stuff/config/qss/Default/imgs/black/subcamera.svg new file mode 100644 index 0000000..181ebb6 --- /dev/null +++ b/stuff/config/qss/Default/imgs/black/subcamera.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/stuff/config/qss/Default/imgs/white/subcamera.svg b/stuff/config/qss/Default/imgs/white/subcamera.svg new file mode 100644 index 0000000..181ebb6 --- /dev/null +++ b/stuff/config/qss/Default/imgs/white/subcamera.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/stuff/config/qss/Default/less/layouts/controls.less b/stuff/config/qss/Default/less/layouts/controls.less index 661d510..acd2944 100644 --- a/stuff/config/qss/Default/less/layouts/controls.less +++ b/stuff/config/qss/Default/less/layouts/controls.less @@ -110,7 +110,8 @@ QComboBox { } } -QLineEdit { +QPlainTextEdit +,QLineEdit { &:extend(.LineEdit all); } diff --git a/stuff/config/qss/Default/less/layouts/misc.less b/stuff/config/qss/Default/less/layouts/misc.less index a349c51..d1fb1b9 100644 --- a/stuff/config/qss/Default/less/layouts/misc.less +++ b/stuff/config/qss/Default/less/layouts/misc.less @@ -22,7 +22,7 @@ PencilTestPopup { } #LargeSizedText { - font-size: 17; + font-size: 17px; } /* ----------------------------------------------------------------------------- diff --git a/stuff/config/qss/Default/less/layouts/popups.less b/stuff/config/qss/Default/less/layouts/popups.less index eff3b81..0d95219 100644 --- a/stuff/config/qss/Default/less/layouts/popups.less +++ b/stuff/config/qss/Default/less/layouts/popups.less @@ -46,7 +46,7 @@ QDialog { background-color: @prefs-tree-bg-color; alternate-background-color: @prefs-tree-bg-color; border: 1 solid @accent; - font-size: 13; + font-size: 13px; &::item { border: 0; // remove indent on hover padding: 3; @@ -101,4 +101,12 @@ PencilTestPopup { #SubfolderButton { qproperty-icon: url('@{img-url}/subfolder.svg'); + padding-left: 6px; + padding-right: 6px; +} + +#SubcameraButton { + qproperty-icon: url('@{img-url}/subcamera.svg'); + padding-left: 6px; + padding-right: 6px; } diff --git a/stuff/config/qss/Light/Light.qss b/stuff/config/qss/Light/Light.qss index 3686cf5..2db62bb 100644 --- a/stuff/config/qss/Light/Light.qss +++ b/stuff/config/qss/Light/Light.qss @@ -1 +1 @@ -.button-show,#LoadLevelShowButton,#CleanupSettingsShowButton,#OutputSettingsShowButton,#FxSettingsPreviewShowButton{image:url('../Default/imgs/black/plus.svg');image-position:center center;margin:0;padding:1;min-width:10;min-height:10}.button-show:checked,#LoadLevelShowButton:checked,#CleanupSettingsShowButton:checked,#OutputSettingsShowButton:checked,#FxSettingsPreviewShowButton:checked{background-color:#5a5a5a;border-color:#454545;image:url('../Default/imgs/black/minus.svg')}.button-show:checked:pressed,#LoadLevelShowButton:checked:pressed,#CleanupSettingsShowButton:checked:pressed,#OutputSettingsShowButton:checked:pressed,#FxSettingsPreviewShowButton:checked:pressed{background-color:#e1e1e1;border-color:#525252}.button-show:checked:hover,#LoadLevelShowButton:checked:hover,#CleanupSettingsShowButton:checked:hover,#OutputSettingsShowButton:checked:hover,#FxSettingsPreviewShowButton:checked:hover{background-color:#5f5f5f}.button-tool,QToolButton,#CameraSettingsRadioButton::indicator,#ForceSquaredPixelButton,#SchematicBottomFrame QToolBar QToolButton,#EditToolLockButton::indicator,#flipCustomize{background-color:rgba(255,255,255,0);border:1 solid rgba(255,255,255,0);border-radius:2;color:#000;margin:1;padding:0}.button-tool:hover,QToolButton:hover,#CameraSettingsRadioButton::indicator:hover,#ForceSquaredPixelButton:hover,#colorSliderAddButton:hover,#colorSliderSubButton:hover,#SchematicBottomFrame QToolBar QToolButton:hover,#EditToolLockButton::indicator:hover,#flipCustomize:hover{background-color:#bbb;border-color:#525252;color:#000}.button-tool:pressed,QToolButton:pressed,#CameraSettingsRadioButton::indicator:pressed,#ForceSquaredPixelButton:pressed,#colorSliderAddButton:pressed,#colorSliderSubButton:pressed,#SchematicBottomFrame QToolBar QToolButton:pressed,#EditToolLockButton::indicator:pressed,#flipCustomize:pressed{background-color:#e1e1e1;border-color:#525252;color:#000}.button-tool:checked,QToolButton:checked,#CameraSettingsRadioButton::indicator:checked,#ForceSquaredPixelButton:checked,#SchematicBottomFrame QToolBar QToolButton:checked,#EditToolLockButton::indicator:checked,#flipCustomize:checked{background-color:#5a5a5a;border-color:#454545;color:#c0c0c0}.button-tool:checked:hover,QToolButton:checked:hover,#CameraSettingsRadioButton::indicator:checked:hover,#ForceSquaredPixelButton:checked:hover,#SchematicBottomFrame QToolBar QToolButton:checked:hover,#EditToolLockButton::indicator:checked:hover,#flipCustomize:checked:hover{background-color:#6e6e6e;border-color:#454545}.button-tool:disabled,QToolButton:disabled,#CameraSettingsRadioButton::indicator:disabled,#ForceSquaredPixelButton:disabled,#SchematicBottomFrame QToolBar QToolButton:disabled,#EditToolLockButton::indicator:disabled,#flipCustomize:disabled{color:rgba(0,0,0,0.466)}.button-flat,PaletteViewer QToolBar QToolButton{background-color:none;border:0;border-radius:0;margin:0}.button-flat:hover,PaletteViewer QToolBar QToolButton:hover{background-color:#bbb}.button-flat:pressed,PaletteViewer QToolBar QToolButton:pressed{background-color:#404040}.frame,.GroupBox,#LoadLevelFrame,#PsdSettingsGroupBox,#CleanupSettingsFrame,#OutputSettingsBox,#OutputSettingsCameraBox,#SolidLineFrame,#FunctionParametersPanel,QGroupBox{border:1 solid #404040;border-radius:2}.tab-container,#TabBarContainer{background-color:transparent;qproperty-BottomAboveLineColor:#6c6c6c;qproperty-BottomBelowLineColor:#404040}.tab-flat,#StyleEditorTabBar::tab,#PaletteTabBar::tab,#FxSettingsTabBar::tab{background-color:#5a5a5a;border-right:1 solid #404040;border-bottom:1 solid #404040;color:#c0c0c0;padding:3 4 3 4}.tab-flat:hover,#StyleEditorTabBar::tab:hover,#PaletteTabBar::tab:hover,#FxSettingsTabBar::tab:hover{background-color:#6e6e6e;color:#fff}.tab-flat:selected,#StyleEditorTabBar::tab:selected,#PaletteTabBar::tab:selected,#FxSettingsTabBar::tab:selected{background-color:#808080;color:#000;border-bottom-color:#808080}.tab-flat:only-one,#StyleEditorTabBar::tab:only-one,#PaletteTabBar::tab:only-one,#FxSettingsTabBar::tab:only-one{margin:0}.tab-round{background-color:#5a5a5a;border-top:1 solid #404040;border-right:1 solid #404040;border-left:1 solid #404040;border-bottom:1 solid #404040;color:#c0c0c0;margin:3 -1 0 0;padding:2 7 1 7}.tab-round:hover{background-color:#6e6e6e;color:#fff}.tab-round:selected{background-color:#808080;border-top-right-radius:2;border-top-left-radius:2;border-bottom-color:#808080;color:#000;margin:1 -1 -1 0;padding:2 7 2 7}.tab-round:only-one{margin:1 0 0 0;padding:3 7 3 7}.tab-round:last{margin-right:0;border-top-right-radius:2}.tab-round:first{border-top-left-radius:2}QWidget{background-color:#808080;color:#000}QWidget:disabled{color:rgba(0,0,0,0.466)}QFrame{border:0;margin:0;padding:0}QToolTip,#helpToolTip{background-color:#fff;border:1 solid #000;color:#000;padding:1 1}#DockSeparator,QMainWindow::separator,QSplitter::handle{background-color:#272727;height:4;width:4}#TDockPlaceholder{background-color:#F77272}TPanel{background-color:#272727}#TopBar{background:#808080;border:0;border-bottom:1 solid #404040;height:21}#TopBar #EditToolLockButton{background:#808080;spacing:0}#TopBar #EditToolLockButton::indicator{background:none;border:none;height:18;margin:1 2 0 0;padding-left:0;padding-right:0}#TopBarTabContainer{background-color:#808080;margin-bottom:1}#StackedMenuBar{border:0;margin:0;padding:0}QMenuBar{background-color:#808080;border:0}QMenuBar::item{background-color:#808080;border-left:1 solid #808080;margin:0;padding:3 5}QMenuBar::item:selected{background-color:#9f9f9f;color:#000}QMenuBar::item:pressed{background-color:#225baf;color:#FFFFFF}#TopBarTab{margin:0;padding:0}#TopBarTab::tab{background-color:#5a5a5a;border-top:1 solid #404040;border-right:1 solid #404040;color:#afafaf;margin:0 0 0 0;padding:2 8 3 8}#TopBarTab::tab:hover{background-color:#6e6e6e;color:#fff}#TopBarTab::tab:selected{background-color:#9a9a9a;color:#000}#TopBarTab::tab:first{border-left:1 solid #404040}#TopBarTab::tab:last{border-right:1 solid #404040}QMenu{background-color:#949494;border:1 solid #404040;padding:2 0}QMenu::item{padding:3 28}QMenu::item:selected{background-color:#225baf;color:#FFFFFF}QMenu::item:checked{color:#000}QMenu::item:checked:selected{background-color:#225baf;color:#FFFFFF}QMenu::item:disabled{background:none;color:rgba(0,0,0,0.466)}QMenu::item:disabled:selected{border-color:transparent}QMenu::separator{border-top:1 solid #6e6e6e;height:0;margin:2 0}QMenu::icon{border-radius:2;margin:0 0 0 3;padding:1}QMenu::icon:checked{background-color:#225baf}QMenu::indicator{margin-left:7}TPanelTitleBar{background-color:#5a5a5a;border-color:#404040;border-style:solid;border-width:0 0 1 0;height:20;min-height:20;qproperty-TitleColor:#c0c0c0;qproperty-ActiveTitleColor:#fff;qproperty-BorderPixmap:url('none');qproperty-ActiveBorderPixmap:url('../Default/imgs/black/none');qproperty-FloatBorderPixmap:url('none');qproperty-FloatActiveBorderPixmap:url('../Default/imgs/black/none')}QAbstractScrollArea::corner{background-color:#6e6e6e}QScrollBar{background-color:#6e6e6e;border:0}QScrollBar:horizontal{height:16;margin:0}QScrollBar:vertical{margin:0;width:16}QScrollBar::handle{border:1 solid #555;border-radius:2}QScrollBar::handle:horizontal:hover,QScrollBar::handle:vertical:hover{background-color:#b3b3b3;border-color:#404040}QScrollBar::handle:horizontal:pressed,QScrollBar::handle:vertical:pressed{background-color:#c7c7c7;border-color:#404040}QScrollBar::handle:horizontal{background-color:#9f9f9f;margin:2 16;min-width:20}QScrollBar::handle:vertical{background-color:#9f9f9f;margin:16 2;min-height:20}QScrollBar::add-line{subcontrol-origin:margin;border:0}QScrollBar::add-line:horizontal{subcontrol-position:right;background-color:#6e6e6e;margin:0;width:16}QScrollBar::add-line:vertical{subcontrol-position:bottom;background-color:#6e6e6e;margin:0;height:16}QScrollBar::sub-line{border:0;subcontrol-origin:margin}QScrollBar::sub-line:horizontal{subcontrol-position:left;background-color:#6e6e6e;margin:0;width:16}QScrollBar::sub-line:vertical{subcontrol-position:top;background-color:#6e6e6e;margin:0;height:16}QScrollBar::up-arrow:vertical{image:url('../Default/imgs/black/scroll-up.svg');image-position:center center}QScrollBar::up-arrow:vertical:pressed{margin:1 0 0 0}QScrollBar::down-arrow:vertical{image:url('../Default/imgs/black/scroll-down.svg');image-position:center center}QScrollBar::down-arrow:vertical:pressed{margin:1 0 0 0}QScrollBar::left-arrow:horizontal{image:url('../Default/imgs/black/scroll-left.svg');image-position:center center}QScrollBar::left-arrow:horizontal:pressed{margin:1 0 0 0}QScrollBar::right-arrow:horizontal{image:url('../Default/imgs/black/scroll-right.svg');image-position:center center}QScrollBar::right-arrow:horizontal:pressed{margin:1 0 0 0}QScrollBar::sub-page:horizontal,QScrollBar::add-page:horizontal,QScrollBar::sub-page:vertical,QScrollBar::add-page:vertical{background:none}QToolBar{padding:0}QToolBar::separator:horizontal{border-left:1 solid #404040;margin:0 1;width:0}QToolBar::separator:vertical{border-top:1 solid #404040;height:0;margin:1 0}QToolBar QLabel{margin-top:1}QToolBar QToolBar{border:0}QToolButton::menu-indicator{image:none}QToolButton::menu-button{border-image:none}.DvScrollWidget QPushButton,DvScrollWidget QPushButton,#ScrollLeftButton QPushButton,#ScrollRightButton QPushButton,#ScrollUpButton QPushButton,#ScrollDownButton QPushButton{background-color:#a6a6a6;border:0 solid red;border-radius:0;padding:0;max-width:16}.DvScrollWidget QPushButton:hover,DvScrollWidget QPushButton:hover,#ScrollLeftButton QPushButton:hover,#ScrollRightButton QPushButton:hover,#ScrollUpButton QPushButton:hover,#ScrollDownButton QPushButton:hover{background-color:#bbb}.DvScrollWidget QPushButton:pressed,DvScrollWidget QPushButton:pressed,#ScrollLeftButton QPushButton:pressed,#ScrollRightButton QPushButton:pressed,#ScrollUpButton QPushButton:pressed,#ScrollDownButton QPushButton:pressed{background-color:#e1e1e1}#ScrollLeftButton,#ScrollRightButton,#ScrollUpButton,#ScrollDownButton{margin:0;min-width:16}#ScrollLeftButton{border-right:1 solid #404040;image:url('../Default/imgs/black/scroll-left.svg')}#ScrollRightButton{border-left:1 solid #404040;margin-left:3;image:url('../Default/imgs/black/scroll-right.svg')}#ScrollUpButton{image:url('../Default/imgs/black/scroll-up.svg')}#ScrollDownButton{image:url('../Default/imgs/black/scroll-down.svg')}#keyFrameNavigator{background:none;margin:0;padding:0}#keyFrameNavigator QToolButton{min-width:18}#keyFrameNavigator #PreviousKey{image:url('../Default/imgs/black/prevkey.svg')}#keyFrameNavigator #PreviousKey:hover{image:url('../Default/imgs/black/prevkey_over.svg')}#keyFrameNavigator #PreviousKey:disabled{image:url('../Default/imgs/black/prevkey_disabled.svg')}#keyFrameNavigator #NextKey{image:url('../Default/imgs/black/nextkey.svg')}#keyFrameNavigator #NextKey:hover{image:url('../Default/imgs/black/nextkey_over.svg')}#keyFrameNavigator #NextKey:disabled{image:url('../Default/imgs/black/nextkey_disabled.svg')}.treeview,QTreeWidget,QTreeView,#FunctionEditorTree{background-color:#949494;alternate-background-color:#8a8a8a;border:0;margin:0;outline:0}.treeview::item:selected,QTreeWidget::item:selected,QTreeView::item:selected,#FunctionEditorTree::item:selected{background-color:#225baf;color:#FFFFFF}.treeview::branch:adjoins-item,QTreeWidget::branch:adjoins-item,QTreeView::branch:adjoins-item,#FunctionEditorTree::branch:adjoins-item{border-image:url('')}.treeview::branch:has-siblings,QTreeWidget::branch:has-siblings,QTreeView::branch:has-siblings,#FunctionEditorTree::branch:has-siblings{border-image:url('')}.treeview::branch:has-siblings:adjoins-item,QTreeWidget::branch:has-siblings:adjoins-item,QTreeView::branch:has-siblings:adjoins-item,#FunctionEditorTree::branch:has-siblings:adjoins-item{border-image:url('')}.treeview::branch:has-children:closed,QTreeWidget::branch:has-children:closed,QTreeView::branch:has-children:closed,#FunctionEditorTree::branch:has-children:closed{background:url('../Default/imgs/black/treebranch-closed.svg') no-repeat;background-position:center center;border-image:none;image:none}.treeview::branch:has-children:open,QTreeWidget::branch:has-children:open,QTreeView::branch:has-children:open,#FunctionEditorTree::branch:has-children:open{background:url('../Default/imgs/black/treebranch-open.svg') no-repeat;background-position:center center;image:none}.treeview::branch:has-children:has-siblings:closed,QTreeWidget::branch:has-children:has-siblings:closed,QTreeView::branch:has-children:has-siblings:closed,#FunctionEditorTree::branch:has-children:has-siblings:closed{background:url('../Default/imgs/black/treebranch-closed.svg') no-repeat;background-position:center center;border-image:none;image:none}.treeview::branch:has-children:has-siblings:open,QTreeWidget::branch:has-children:has-siblings:open,QTreeView::branch:has-children:has-siblings:open,#FunctionEditorTree::branch:has-children:has-siblings:open{background:url('../Default/imgs/black/treebranch-open.svg') no-repeat;background-position:center center;border-image:none;image:none}QListView{outline:0;background:#949494;alternate-background-color:#8a8a8a}#TabBarContainer{background-color:#6c6c6c}.Button,QPushButton,.ComboBox,.ComboBox:checked,QComboBox,QComboBox:checked{background-color:#a6a6a6;border:1 solid #525252;border-radius:2;color:#000;margin:0;padding:3 15}.Button:hover,QPushButton:hover,.ComboBox:hover,#ViewerFpsSlider::sub-line:horizontal:hover,#ViewerFpsSlider::add-line:horizontal:hover,QComboBox:hover{background-color:#bbb;border-color:#525252;color:#000}.Button:pressed,QPushButton:pressed,#ViewerFpsSlider::sub-line:horizontal:pressed,#ViewerFpsSlider::add-line:horizontal:pressed{background-color:#e1e1e1;border-color:#525252;color:#000}.Button:checked,QPushButton:checked{background-color:#5a5a5a;border-color:#454545;color:#c0c0c0}.Button:checked:hover,QPushButton:checked:hover{background-color:#5f5f5f}.Button:checked:hover:pressed,QPushButton:checked:hover:pressed{background:#5a5a5a}.Button:disabled,QPushButton:disabled,.ComboBox:disabled,#ViewerFpsSlider::sub-line:horizontal:disabled,#ViewerFpsSlider::add-line:horizontal:disabled,QComboBox:disabled{background-color:#8d8d8d;border-color:#737373;color:rgba(0,0,0,0.466)}#PushButton_NoPadding{padding:3}.ComboBox,.ComboBox:checked,QComboBox,QComboBox:checked{padding:1 0 1 4;margin:1 0}.ComboBox::drop-down,QComboBox::drop-down{image:url('../Default/imgs/black/combo_downarrow.svg');image-position:center center;width:16}.ComboBox::drop-down:disabled,QComboBox::drop-down:disabled{image:url('../Default/imgs/black/combo_downarrow_disabled.svg')}.ComboBox QAbstractItemView,QComboBox QAbstractItemView{background-color:#949494;border:1 solid #404040;selection-background-color:#225baf;selection-color:#FFFFFF}.LineEdit,QLineEdit,#TaskSheetItem,#tasksRemoveBox,#tasksAddBox{background-color:#e6e6e6;border:1 solid #525252;border-radius:2;color:#000;selection-background-color:#225baf;selection-color:#FFFFFF;padding:0 0 0 1}.LineEdit:focus,QLineEdit:focus,#TaskSheetItem:focus,#tasksRemoveBox:focus,#tasksAddBox:focus{background-color:#e6e6e6;border-color:#525252;color:#000}.LineEdit:disabled,QLineEdit:disabled,#TaskSheetItem:disabled,#tasksRemoveBox:disabled,#tasksAddBox:disabled{background-color:#9a9a9a;border-color:#696969;color:rgba(0,0,0,0.466)}.CheckBox,QCheckBox{color:#000}.CheckBox:hover,QCheckBox:hover,.RadioButton:hover,QRadioButton:hover{color:#fff}.CheckBox:disabled,QCheckBox:disabled{color:rgba(0,0,0,0.466)}.CheckBox::indicator,QMenu::indicator,QCheckBox::indicator,.GroupBox::indicator,QGroupBox::indicator{background-color:#cdcdcd;border:1 solid #525252;border-radius:2;height:9;padding:1;width:9}.CheckBox::indicator:hover,QMenu::indicator:hover,.CheckBox::indicator:checked:hover,QCheckBox::indicator:hover,.GroupBox::indicator:hover,QMenu::indicator:checked:hover,QCheckBox::indicator:checked:hover,.GroupBox::indicator:checked:hover,QGroupBox::indicator:hover,QGroupBox::indicator:checked:hover{background-color:#e6e6e6;border-color:#525252}.CheckBox::indicator:checked,QMenu::indicator:checked,QCheckBox::indicator:checked,.GroupBox::indicator:checked,QGroupBox::indicator:checked{background-color:#cdcdcd;border-color:#525252;image:url('../Default/imgs/black/checkmark.svg')}.CheckBox::indicator:checked:disabled,QMenu::indicator:checked:disabled,QCheckBox::indicator:checked:disabled,.GroupBox::indicator:checked:disabled,QGroupBox::indicator:checked:disabled{background-color:#8d8d8d;border-color:#737373;image:url('../Default/imgs/black/checkmark_disabled.svg')}.CheckBox::indicator:disabled,QMenu::indicator:disabled,QCheckBox::indicator:disabled,.GroupBox::indicator:disabled,QGroupBox::indicator:disabled{background-color:#8d8d8d;border-color:#737373}.RadioButton::indicator:unchecked,QRadioButton::indicator:unchecked,#CameraSettingsRadioButton_Small::indicator:unchecked{image:url('../Default/imgs/black/radiobutton_unchecked.svg');image-position:center center}.RadioButton::indicator:checked,QRadioButton::indicator:checked,#CameraSettingsRadioButton_Small::indicator:checked{image:url('../Default/imgs/black/radiobutton_checked.svg');image-position:center center}.GroupBox,QGroupBox{margin:6 0 0 0;padding:5 0}.GroupBox::title,QGroupBox::title{subcontrol-origin:margin;left:15;margin:-3 0 0 0;padding:0 3}.GroupBox::title:hover,QGroupBox::title:hover{color:#fff}.GroupBox::title:disabled,QGroupBox::title:disabled{color:rgba(0,0,0,0.466)}.GroupBox::indicator,QGroupBox::indicator{subcontrol-origin:margin;margin-top:2}.GroupBox:disabled,QGroupBox:disabled{color:rgba(0,0,0,0.466)}.Slider::groove:horizontal,QSlider::groove:horizontal{background-color:transparent;background-image:url('../Default/imgs/black/slider-groove.svg');background-position:center center;background-repeat:repeat-x;margin:0;height:20;min-height:20}.Slider::groove:horizontal:disabled,QSlider::groove:horizontal:disabled{background-image:url('../Default/imgs/black/slider-groove_disabled.svg')}.Slider::handle:horizontal,QSlider::handle:horizontal{width:10;margin:-2 0;image:url('../Default/imgs/black/slider-handle.svg')}.Slider::handle:horizontal:disabled,QSlider::handle:horizontal:disabled{image:url('../Default/imgs/black/slider-handle_disabled.svg')}#IntPairField,#DoublePairField{qproperty-LightLineColor:#484848;qproperty-LightLineEdgeColor:#484848;qproperty-DarkLineColor:#484848;qproperty-MiddleLineColor:#484848;qproperty-HandleLeftPixmap:url("../Default/imgs/black/slider-handle.svg");qproperty-HandleRightPixmap:url("../Default/imgs/black/slider-handle.svg");qproperty-HandleLeftGrayPixmap:url("../Default/imgs/black/slider-handle_disabled.svg");qproperty-HandleRightGrayPixmap:url("../Default/imgs/black/slider-handle_disabled.svg")}#DirTreeView{background-color:#949494;alternate-background-color:#949494;border:1 solid #404040;border-right:0}DvItemViewerPanel{qproperty-TextColor:#000;qproperty-AlternateBackground:#8a8a8a;qproperty-SelectedTextColor:#FFFFFF;qproperty-FolderTextColor:#071b9b;qproperty-SelectedItemBackground:#225baf}#FileBrowser DvItemViewerPanel,#SceneCast DvItemViewerPanel{background-color:#949494}#FileBrowser #castFrame,#SceneCast #castFrame{border-top:1 solid #404040;border-right:1 solid #404040;border-bottom:1 solid #404040;margin:0}#FileBrowser QToolButton,#SceneCast QToolButton{padding:1}DvDirTreeView{qproperty-TextColor:#000;qproperty-SelectedTextColor:#FFFFFF;qproperty-SelectedItemBackground:#225baf;qproperty-FolderTextColor:#071b9b;qproperty-SelectedFolderTextColor:#FFFFFF;alternate-background-color:#8a8a8a;background-color:#949494;border:1 solid #404040}#FileDoesNotExistLabel{color:#f00}#SceneCast QToolBar{border-top:1 solid #404040}#SceneCast QToolButton{margin:3 1 2 1;padding:1}#CastBrowser{border:0;margin:0}#FilmStrip QComboBox{border-radius:0;border-width:0}#FilmStrip QComboBox QAbstractItemView{background-color:#949494}#CleanupSettings #CleanupSettingsFrame{margin-top:2;margin-bottom:4}#CleanupSettings QGroupBox{margin-bottom:3}ParamsPage{qproperty-TextColor:#000}#CameraSettingsButton{padding:2}#CameraSettingsRadioButton:hover{background:none}#CameraSettingsRadioButton::indicator{border:1 solid rgba(255,255,255,0);height:18;padding:0;width:18}#CameraSettingsRadioButton::indicator:unchecked{image:url('../Default/imgs/black/lock_off.svg')}#CameraSettingsRadioButton::indicator:checked{background-color:#C34040;border-color:#772626;image:url('../Default/imgs/black/lock_on.svg')}#CameraSettingsRadioButton::indicator:checked:hover{background-color:#d57a7a;border-color:#772626}#CameraSettingsDPI{color:#000}#CameraSettingsRadioButton_Small{padding:0}#CameraSettingsRadioButton_Small::indicator{background-color:transparent;border:0;height:21;margin:0;width:11}#ForceSquaredPixelButton{height:16;border:1 solid rgba(255,255,255,0);image:url('../Default/imgs/black/fsp_unchecked.svg');padding:2;width:16;margin:0}#ForceSquaredPixelButton:checked{image:url('../Default/imgs/black/fsp_checked.svg')}#OutputSettingsLabel{color:#000}PencilTestPopup{min-height:730px;min-width:512px}#MatchLineButton{background-color:#a6a6a6}#MatchLineButton:checked{background-color:#cdcdcd;border:2 solid #225baf;border-radius:2}#LargeSizedText{font-size:17}#StartupLabel{padding:3}#StartupLabel:hover{background:#9a9a9a}QStatusBar{background-color:#c0c0c0}QStatusBar::item{border:0}QStatusBar QLabel{background-color:#c0c0c0}QStatusBar #StatusBarLabel{background-color:#fff;padding:1 3}#TitleTxtLabel{color:#000}#StyleEditor QPushButton{margin:2 1;padding:0}#StyleEditor #TabBarContainer{margin-left:-4}#StyleEditor #bottomWidget{border-top:1 solid #404040;padding:3 2 8 3}#StyleEditor #bottomWidget QPushButton{padding:3 5}#StyleEditorTabBar::tab::first{border-left:1 solid #404040}#HexagonalColorWheel{qproperty-BGColor:#808080}#colorSlider::groove:horizontal{height:1;border-image:none}#colorSlider::handle:horizontal{width:8;margin:-8 -4}#colorSliderAddButton,#colorSliderSubButton{background:none;border-color:transparent;image-position:center center;min-height:16;padding:0;min-width:18}#colorSliderAddButton{image:url('../Default/imgs/black/scroll-right.svg')}#colorSliderSubButton{image:url('../Default/imgs/black/scroll-left.svg')}#PlainColorPageParts{border-bottom:1 solid #404040}#PlainColorPageParts QLineEdit{max-width:35}PaletteViewer DvScrollWidget QPushButton{border-top:0;margin-bottom:1;max-width:15;min-width:15}PaletteViewer DvScrollWidget #ScrollLeftButton{border-radius:0;margin-bottom:1;max-width:16;min-width:16}PaletteViewer DvScrollWidget #ScrollRightButton{border-radius:0;margin-left:1;margin-bottom:1;max-width:16;min-width:16}PaletteViewer QToolBar{background:none;border-bottom:1 solid #404040;padding:0;margin:0}PaletteViewer QToolBar::separator:horizontal{margin:0}PaletteViewer QToolBar QToolButton{margin:0 0 1 0;padding:1 0 2 0}#PageViewer{qproperty-TextColor:#000}#PaletteLockButton{border-radius:0;margin:0 0 1 1}#PaletteLockButton:checked{background-color:#C34040;border-color:#772626}#PaletteLockButton:checked:hover{background-color:#d57a7a;border-color:#772626}#WordButton{padding-right:0;padding-left:0}QDialog{background-color:#808080}QDialog #dialogButtonFrame{background-color:#767676;border-top:1 solid #404040}QDialog #dialogButtonFrame QPushButton{border-color:#525252;outline:0}QDialog #dialogButtonFrame QPushButton:focus{background-color:#B5C0D0;border-color:#485971;color:#000}QDialog #dialogButtonFrame QPushButton:focus:hover{background-color:#ced5e0}QDialog #dialogButtonFrame QPushButton:focus:pressed{background-color:#e1e1e1;border-color:#525252;color:#000}#SceneSettings QLabel{color:#000}#PreferencesPopup QListWidget{background-color:#949494;alternate-background-color:#949494;border:1 solid #404040;font-size:13}#PreferencesPopup QListWidget::item{border:0;padding:3}#PreferencesPopup QListWidget::item:hover{background-color:#9f9f9f;color:#000;background-color:#a9a9a9}#PreferencesPopup QListWidget::item:selected{background-color:#225baf;color:#FFFFFF}#ShortcutTree{border:1 solid #404040}#ShortcutTree::item{padding:1 0}#ShortcutTree QScrollBar:vertical{width:16;margin-right:-1}ProjectPopup QLabel{color:#000}#GearButton{qproperty-icon:url('../Default/imgs/black/gear.svg')}#SubfolderButton{qproperty-icon:url('../Default/imgs/black/subfolder.svg')}SchematicViewer{qproperty-TextColor:#000;qproperty-VerticalLineColor:#646464;qproperty-LevelColumnColor:#76b776;qproperty-VectorColumnColor:#c0c07a;qproperty-ChildColumnColor:#d69adb;qproperty-FullcolorColumnColor:#8bbdc1;qproperty-FxColumnColor:#82815d;qproperty-PaletteColumnColor:#2aab9a;qproperty-MeshColumnColor:#ac78d4;qproperty-ReferenceColumnColor:#ababab;qproperty-TableColor:#a4a4bf;qproperty-ActiveCameraColor:#6ba5de;qproperty-OtherCameraColor:#8f9c9e;qproperty-GroupColor:#6698c6;qproperty-PegColor:#be8a56;qproperty-SplineColor:#7bb821;qproperty-ActiveOutputColor:#6ba5de;qproperty-OtherOutputColor:#8f9c9e;qproperty-XsheetColor:#a4a4bf;qproperty-NormalFxColor:#8d9caf;qproperty-MacroFxColor:#ae8ca5;qproperty-ImageAdjustFxColor:#9c9ab4;qproperty-LayerBlendingFxColor:#709ba5;qproperty-MatteFxColor:#ba8585;qproperty-SchematicPreviewButtonBgOnColor:#c8c864;qproperty-SchematicPreviewButtonOnImage:url('../Default/imgs/black/x_prev_eye_on.svg');qproperty-SchematicPreviewButtonBgOffColor:#ababab;qproperty-SchematicPreviewButtonOffImage:url('../Default/imgs/black/x_prev_eye_off.svg');qproperty-SchematicCamstandButtonBgOnColor:#eb906b;qproperty-SchematicCamstandButtonOnImage:url('../Default/imgs/black/x_table_view_on.svg');qproperty-SchematicCamstandButtonTranspImage:url('../Default/imgs/black/x_table_view_transp.svg');qproperty-SchematicCamstandButtonBgOffColor:#ababab;qproperty-SchematicCamstandButtonOffImage:url('../Default/imgs/black/x_table_view_off.svg')}#SchematicBottomFrame{background-color:#808080;border:0;margin:0;padding:0}#SchematicBottomFrame QToolBar::separator:horizontal{margin:0}#SchematicBottomFrame QToolBar QToolButton{padding:0;margin:2}#SchematicSceneViewer{background-color:#737373;border-bottom:1 solid #404040}#FxSettingsTabBar::tab{border-top:1 solid #404040}#FxSettingsTabBar::tab::first,#FxSettingsTabBar::tab::only-one{border-left:1 solid #404040}FxSettings QToolBar{border-top:1 solid #404040;border-right:1 solid #404040;border-left:1 solid #404040;min-height:23;padding:3 0}FxSettings QToolBar QToolBar{border:0}#FxSettingsLabel{color:#000}#FxSettingsHelpButton{background-color:#80a0dc;color:#000;padding-top:0;padding-bottom:0}#FxSettingsHelpButton:hover{background-color:#a8bee7}#ScriptConsole{font-family:'Courier New',monospace;border:0;color:#000000;padding:3}#ScriptConsole QFrame{background-color:#dcdcdc}#ScriptConsole TPanelTitleBar{background-color:#5a5a5a}#TaskSheetItemLabel{color:#000}#Tasks QToolBar{border-bottom:1 solid #404040;margin:0;padding:0}#Tasks QToolBar QToolButton{margin:2 2 3 2}#ToolBar QToolBar{padding-left:2}#ToolOptions TPanelTitleBar{border-right:1 solid #404040;border-bottom:0}#CommandBar TPanelTitleBar{border-right:1 solid #404040;border-bottom:0}IconViewField{qproperty-ThicknessPixmap:url("../Default/imgs/black/selectiontool_thickness.svg")}#EditToolLockButton{spacing:0}#EditToolLockButton:hover{background:none}#EditToolLockButton::indicator{border:1 solid rgba(255,255,255,0);height:18;padding:0;width:18}#EditToolLockButton::indicator:unchecked{image:url('../Default/imgs/black/lock_off.svg')}#EditToolLockButton::indicator:checked{background-color:#C34040;border-color:#772626;image:url('../Default/imgs/black/lock_on.svg')}#EditToolLockButton::indicator:checked:hover{background-color:#d57a7a;border-color:#772626}PopupButton::menu-indicator{border-left:0;height:17;image:url('../Default/imgs/black/combo_downarrow.svg');width:10}PopupButton::menu-indicator:hover{image:url('../Default/imgs/black/combo_downarrow.svg')}PopupButton::menu-indicator:disabled{image:url('../Default/imgs/black/combo_downarrow_disabled.svg')}#Cap,#Join{padding:0 4 0 -8;max-width:32;min-width:32}#Cap QMenu,#Join QMenu{max-width:28;min-width:28}#Cap QMenu::item,#Join QMenu::item{max-width:28;min-width:28;padding:0}QToolBar#MediumPaddingToolBar QToolButton{padding-left:3;padding-right:3}QToolBar#WidePaddingToolBar QToolButton{padding-left:6;padding-right:6}#CommandBar{margin:0;padding:0;border:0}#CommandBar::separator:horizontal{margin-right:3;margin-left:3}#expandButton:checked{background-color:transparent;border-color:transparent;color:#000}#expandButton:checked:hover{background-color:#bbb;border-color:#525252}#expandButton:checked:pressed{background-color:#e1e1e1;border-color:#525252}#ComboViewerPanel Toolbar{border-bottom:1 solid #404040}#ComboViewerPanel Toolbar::separator:horizontal{margin:0 0 0 2}#ComboViewerPanel Toolbar QToolButton{margin:2 0 3 2}#ComboViewerToolOptions{border-bottom:1 solid #404040}#ComboViewer #ToolBarContainer,#ViewerPanel #ToolBarContainer,FlipBook #ToolBarContainer{background-color:transparent;border-top:2 solid #404040;border-bottom:1 solid #404040;padding-right:-1}#flipCustomize{margin-left:3}#flipCustomize::menu-button{background-color:transparent;width:35}#flipCustomize::menu-arrow{image:none}QToolBar#FlipConsolePlayToolBar::separator:horizontal{margin:0 3}QToolBar#FlipConsolePlayToolBar QToolButton{margin-top:2;margin-bottom:2;height:16;padding-left:1;padding-right:1}#ViewerFpsSlider{background-color:transparent;background-image:url('../Default/imgs/black/slider-groove.svg');background-position:center center;background-repeat:repeat-x;border:0;height:19;margin:0 3 0 37;max-width:300;min-width:0}#ViewerFpsSlider::sub-line:horizontal{subcontrol-origin:absolute;background-color:#a6a6a6;border:1 solid #525252;border-top-left-radius:2;border-bottom-left-radius:2;height:16;left:-33;width:14}#ViewerFpsSlider::add-line:horizontal{subcontrol-position:left;background-color:#a6a6a6;border:1 solid #525252;border-top-right-radius:2;border-bottom-right-radius:2;left:18;height:16;image-position:center center;width:13}#ViewerFpsSlider::handle::horizontal{background-color:#a6a6a6;border:1 solid #404040;border-radius:2;margin:2 0 3 0;min-width:9;width:9;max-width:9}FlipSlider{qproperty-PBHeight:15;qproperty-PBOverlay:url('../Default/imgs/black/flipslider.svg');qproperty-PBColorMarginLeft:1;qproperty-PBColorMarginTop:2;qproperty-PBColorMarginRight:1;qproperty-PBColorMarginBottom:2;qproperty-PBMarker:url('../Default/imgs/black/flipmarker.svg');qproperty-PBMarkerMarginLeft:3;qproperty-PBMarkerMarginRight:3;qproperty-notStartedColor:#8b2525;qproperty-startedColor:#00a808;qproperty-baseColor:#676767;qproperty-finishedColor:#676767}Ruler{qproperty-ParentBGColor:#c0c0c0;qproperty-ScaleColor:#000}#RulerToolOptionValues{color:#000}#xsheetArea,#ScrollArea{background-color:#6c6c6c;border:0}#xsheetScrollArea{border:0}#cornerWidget QToolButton{padding:0}#xsheetColumnAreaMenu_Preview{background-color:#E6E678}#xsheetColumnAreaMenu_Lock{background-color:#F5F5F5}#xsheetColumnAreaMenu_Camstand{background-color:#FFA480}#xsheetColumnAreaMenu_Preview,#xsheetColumnAreaMenu_Lock,#xsheetColumnAreaMenu_Camstand{color:#000}#noteTextEdit{color:#000}XsheetViewer{qproperty-TextColor:#000;qproperty-BGColor:#929292;qproperty-LightLineColor:#616161;qproperty-MarkerLineColor:#000;qproperty-VerticalLineColor:#646464;qproperty-VerticalLineHeadColor:#393939;qproperty-PreviewFrameTextColor:#000eb6;qproperty-CurrentRowBgColor:#B5C0D0;qproperty-OnionSkinAreaBgColor:#858585;qproperty-EmptyColumnHeadColor:#808080;qproperty-SelectedColumnTextColor:#9e0000;qproperty-EmptyCellColor:#7c7c7c;qproperty-NotEmptyColumnColor:#8a8a8a;qproperty-SelectedEmptyCellColor:#b3b3b3;qproperty-LevelColumnColor:#76b776;qproperty-LevelColumnBorderColor:#496549;qproperty-SelectedLevelColumnColor:#9bc59b;qproperty-VectorColumnColor:#c0c07a;qproperty-VectorColumnBorderColor:#71714a;qproperty-SelectedVectorColumnColor:#cdcda0;qproperty-ChildColumnColor:#d69adb;qproperty-ChildColumnBorderColor:#9c53a3;qproperty-SelectedChildColumnColor:#e3c2e6;qproperty-FullcolorColumnColor:#8bbdc1;qproperty-FullcolorColumnBorderColor:#577476;qproperty-SelectedFullcolorColumnColor:#afcdd0;qproperty-FxColumnColor:#82815d;qproperty-FxColumnBorderColor:#404039;qproperty-SelectedFxColumnColor:#97967b;qproperty-ReferenceColumnColor:#ababab;qproperty-ReferenceColumnBorderColor:#6b6b6b;qproperty-SelectedReferenceColumnColor:#c4c4c4;qproperty-PaletteColumnColor:#2aab9a;qproperty-PaletteColumnBorderColor:#173e39;qproperty-SelectedPaletteColumnColor:#40c8b6;qproperty-MeshColumnColor:#ac78d4;qproperty-MeshColumnBorderColor:#6b418c;qproperty-SelectedMeshColumnColor:#c3a2dd;qproperty-SoundTextColumnColor:#c8c8c8;qproperty-SoundTextColumnBorderColor:#8c8c8c;qproperty-SelectedSoundTextColumnColor:#e2e2e2;qproperty-SoundColumnColor:#acba82;qproperty-SoundColumnBorderColor:#656b51;qproperty-SelectedSoundColumnColor:#c0c9a6;qproperty-SoundColumnHlColor:#f5ffe6;qproperty-SoundColumnTrackColor:#5a642d;qproperty-ColumnHeadPastelizer:#fff;qproperty-SelectedColumnHead:#bed2f0;qproperty-LightLightBGColor:#808080;qproperty-LightBGColor:#f0f0f0;qproperty-DarkBGColor:#e1e1e1;qproperty-DarkLineColor:#969696;qproperty-XsheetColumnNameBgColor:rgba(0,0,0,0);qproperty-XsheetDragBarHighlightColor:rgba(255,255,255,0.5);qproperty-XsheetPreviewButtonBgOnColor:#c8c864;qproperty-XsheetPreviewButtonOnImage:url('../Default/imgs/black/x_prev_eye_on.svg');qproperty-XsheetPreviewButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetPreviewButtonOffImage:url('../Default/imgs/black/x_prev_eye_off.svg');qproperty-XsheetCamstandButtonBgOnColor:#eb906b;qproperty-XsheetCamstandButtonOnImage:url('../Default/imgs/black/x_table_view_on.svg');qproperty-XsheetCamstandButtonTranspImage:url('../Default/imgs/black/x_table_view_transp.svg');qproperty-XsheetCamstandButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetCamstandButtonOffImage:url('../Default/imgs/black/x_table_view_off.svg');qproperty-XsheetLockButtonBgOnColor:rgba(255,255,255,0.3);qproperty-XsheetLockButtonOnImage:url('../Default/imgs/black/x_lock_on.svg');qproperty-XsheetLockButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetLockButtonOffImage:url('../Default/imgs/black/x_lock_off.svg');qproperty-XsheetConfigButtonBgColor:rgba(255,255,255,0);qproperty-XsheetConfigButtonImage:url('../Default/imgs/black/x_config.svg');qproperty-TimelinePreviewButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelinePreviewButtonOnImage:url('../Default/imgs/black/timeline_toggle_on.svg');qproperty-TimelinePreviewButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelinePreviewButtonOffImage:url('../Default/imgs/black/timeline_toggle_off.svg');qproperty-TimelineCamstandButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelineCamstandButtonOnImage:url('../Default/imgs/black/timeline_toggle_on.svg');qproperty-TimelineCamstandButtonTranspImage:url('../Default/imgs/black/timeline_toggle_transp.svg');qproperty-TimelineCamstandButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelineCamstandButtonOffImage:url('../Default/imgs/black/timeline_toggle_off.svg');qproperty-TimelineLockButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelineLockButtonOnImage:url('../Default/imgs/black/timeline_toggle_on.svg');qproperty-TimelineLockButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelineLockButtonOffImage:url('../Default/imgs/black/timeline_toggle_off.svg');qproperty-TimelineConfigButtonBgColor:rgba(255,255,255,0);qproperty-TimelineConfigButtonImage:url('../Default/imgs/black/timeline_config.svg');qproperty-LayerHeaderPreviewImage:url('../Default/imgs/black/layer_header_prev_eye.svg');qproperty-LayerHeaderPreviewOverImage:url('../Default/imgs/black/layer_header_prev_eye_over.svg');qproperty-LayerHeaderCamstandImage:url('../Default/imgs/black/layer_header_table_view.svg');qproperty-LayerHeaderCamstandOverImage:url('../Default/imgs/black/layer_header_table_view_over.svg');qproperty-LayerHeaderLockImage:url('../Default/imgs/black/lock_on.svg');qproperty-LayerHeaderLockOverImage:url('../Default/imgs/black/lock_on_over.svg')}#XSheetToolbar{margin:0;padding:0;border:0}#XSheetToolbar QToolButton{padding:0;margin:4 1;min-height:19;height:19}#XSheetToolbar::separator:horizontal{margin:0 4}#FunctionEditor QToolBar{border-bottom:1 solid #404040}#FunctionEditor QToolBar QToolBar{border:0}#FunctionEditor QToolBar QLabel{margin-left:5}#FunctionEditor QToolBar QToolButton{height:18}#FunctionEditorTree{border-top:1 solid #404040}FunctionTreeView{qproperty-TextColor:#000;qproperty-CurrentTextColor:#a70000}FunctionPanel{qproperty-BGColor:#5a5a5a;qproperty-ValueLineColor:#4d4d4d;qproperty-FrameLineColor:#4d4d4d;qproperty-OtherCurvesColor:#c5c5c5;qproperty-RulerBackground:#676767;qproperty-TextColor:#000;qproperty-SubColor:#fff;qproperty-SelectedColor:#fcae06}SpreadsheetViewer{qproperty-LightLightBGColor:#808080;qproperty-CurrentRowBgColor:#B5C0D0;qproperty-LightLineColor:#616161;qproperty-MarkerLineColor:#000;qproperty-BGColor:#8a8a8a;qproperty-VerticalLineColor:#646464;qproperty-KeyFrameColor:#db8b36;qproperty-KeyFrameBorderColor:#7b4a16;qproperty-SelectedKeyFrameColor:#dea466;qproperty-InBetweenColor:#c2c2b0;qproperty-InBetweenBorderColor:#636356;qproperty-SelectedInBetweenColor:#d6d6cf;qproperty-SelectedEmptyColor:#b3b3b3;qproperty-SelectedSceneRangeEmptyColor:#d2d2d2;qproperty-TextColor:#000;qproperty-ColumnHeaderBorderColor:#393939;qproperty-SelectedColumnTextColor:#9e0000}#ExpressionField{background-color:#fff;border:1 solid #6b6b6b;margin:0}#FunctionSegmentViewerLinkButton{background-image:url('../Default/imgs/black/segment_unlinked.svg');background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:hover{background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:checked{background-image:url('../Default/imgs/black/segment_linked.svg');background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:disabled{background-image:url('../Default/imgs/black/segment_disabled.svg');background-repeat:no-repeat} \ No newline at end of file +.button-show,#LoadLevelShowButton,#CleanupSettingsShowButton,#OutputSettingsShowButton,#FxSettingsPreviewShowButton{image:url('../Default/imgs/black/plus.svg');image-position:center center;margin:0;padding:1;min-width:10;min-height:10}.button-show:checked,#LoadLevelShowButton:checked,#CleanupSettingsShowButton:checked,#OutputSettingsShowButton:checked,#FxSettingsPreviewShowButton:checked{background-color:#5a5a5a;border-color:#454545;image:url('../Default/imgs/black/minus.svg')}.button-show:checked:pressed,#LoadLevelShowButton:checked:pressed,#CleanupSettingsShowButton:checked:pressed,#OutputSettingsShowButton:checked:pressed,#FxSettingsPreviewShowButton:checked:pressed{background-color:#e1e1e1;border-color:#525252}.button-show:checked:hover,#LoadLevelShowButton:checked:hover,#CleanupSettingsShowButton:checked:hover,#OutputSettingsShowButton:checked:hover,#FxSettingsPreviewShowButton:checked:hover{background-color:#5f5f5f}.button-tool,QToolButton,#CameraSettingsRadioButton::indicator,#ForceSquaredPixelButton,#SchematicBottomFrame QToolBar QToolButton,#EditToolLockButton::indicator,#flipCustomize{background-color:rgba(255,255,255,0);border:1 solid rgba(255,255,255,0);border-radius:2;color:#000;margin:1;padding:0}.button-tool:hover,QToolButton:hover,#CameraSettingsRadioButton::indicator:hover,#ForceSquaredPixelButton:hover,#colorSliderAddButton:hover,#colorSliderSubButton:hover,#SchematicBottomFrame QToolBar QToolButton:hover,#EditToolLockButton::indicator:hover,#flipCustomize:hover{background-color:#bbb;border-color:#525252;color:#000}.button-tool:pressed,QToolButton:pressed,#CameraSettingsRadioButton::indicator:pressed,#ForceSquaredPixelButton:pressed,#colorSliderAddButton:pressed,#colorSliderSubButton:pressed,#SchematicBottomFrame QToolBar QToolButton:pressed,#EditToolLockButton::indicator:pressed,#flipCustomize:pressed{background-color:#e1e1e1;border-color:#525252;color:#000}.button-tool:checked,QToolButton:checked,#CameraSettingsRadioButton::indicator:checked,#ForceSquaredPixelButton:checked,#SchematicBottomFrame QToolBar QToolButton:checked,#EditToolLockButton::indicator:checked,#flipCustomize:checked{background-color:#5a5a5a;border-color:#454545;color:#c0c0c0}.button-tool:checked:hover,QToolButton:checked:hover,#CameraSettingsRadioButton::indicator:checked:hover,#ForceSquaredPixelButton:checked:hover,#SchematicBottomFrame QToolBar QToolButton:checked:hover,#EditToolLockButton::indicator:checked:hover,#flipCustomize:checked:hover{background-color:#6e6e6e;border-color:#454545}.button-tool:disabled,QToolButton:disabled,#CameraSettingsRadioButton::indicator:disabled,#ForceSquaredPixelButton:disabled,#SchematicBottomFrame QToolBar QToolButton:disabled,#EditToolLockButton::indicator:disabled,#flipCustomize:disabled{color:rgba(0,0,0,0.466)}.button-flat,PaletteViewer QToolBar QToolButton{background-color:none;border:0;border-radius:0;margin:0}.button-flat:hover,PaletteViewer QToolBar QToolButton:hover{background-color:#bbb}.button-flat:pressed,PaletteViewer QToolBar QToolButton:pressed{background-color:#404040}.frame,.GroupBox,#LoadLevelFrame,#PsdSettingsGroupBox,#CleanupSettingsFrame,#OutputSettingsBox,#OutputSettingsCameraBox,#SolidLineFrame,#FunctionParametersPanel,QGroupBox{border:1 solid #404040;border-radius:2}.tab-container,#TabBarContainer{background-color:transparent;qproperty-BottomAboveLineColor:#6c6c6c;qproperty-BottomBelowLineColor:#404040}.tab-flat,#StyleEditorTabBar::tab,#PaletteTabBar::tab,#FxSettingsTabBar::tab{background-color:#5a5a5a;border-right:1 solid #404040;border-bottom:1 solid #404040;color:#c0c0c0;padding:3 4 3 4}.tab-flat:hover,#StyleEditorTabBar::tab:hover,#PaletteTabBar::tab:hover,#FxSettingsTabBar::tab:hover{background-color:#6e6e6e;color:#fff}.tab-flat:selected,#StyleEditorTabBar::tab:selected,#PaletteTabBar::tab:selected,#FxSettingsTabBar::tab:selected{background-color:#808080;color:#000;border-bottom-color:#808080}.tab-flat:only-one,#StyleEditorTabBar::tab:only-one,#PaletteTabBar::tab:only-one,#FxSettingsTabBar::tab:only-one{margin:0}.tab-round{background-color:#5a5a5a;border-top:1 solid #404040;border-right:1 solid #404040;border-left:1 solid #404040;border-bottom:1 solid #404040;color:#c0c0c0;margin:3 -1 0 0;padding:2 7 1 7}.tab-round:hover{background-color:#6e6e6e;color:#fff}.tab-round:selected{background-color:#808080;border-top-right-radius:2;border-top-left-radius:2;border-bottom-color:#808080;color:#000;margin:1 -1 -1 0;padding:2 7 2 7}.tab-round:only-one{margin:1 0 0 0;padding:3 7 3 7}.tab-round:last{margin-right:0;border-top-right-radius:2}.tab-round:first{border-top-left-radius:2}QWidget{background-color:#808080;color:#000}QWidget:disabled{color:rgba(0,0,0,0.466)}QFrame{border:0;margin:0;padding:0}QToolTip,#helpToolTip{background-color:#fff;border:1 solid #000;color:#000;padding:1 1}#DockSeparator,QMainWindow::separator,QSplitter::handle{background-color:#272727;height:4;width:4}#TDockPlaceholder{background-color:#F77272}TPanel{background-color:#272727}#TopBar{background:#808080;border:0;border-bottom:1 solid #404040;height:21}#TopBar #EditToolLockButton{background:#808080;spacing:0}#TopBar #EditToolLockButton::indicator{background:none;border:none;height:18;margin:1 2 0 0;padding-left:0;padding-right:0}#TopBarTabContainer{background-color:#808080;margin-bottom:1}#StackedMenuBar{border:0;margin:0;padding:0}QMenuBar{background-color:#808080;border:0}QMenuBar::item{background-color:#808080;border-left:1 solid #808080;margin:0;padding:3 5}QMenuBar::item:selected{background-color:#9f9f9f;color:#000}QMenuBar::item:pressed{background-color:#225baf;color:#FFFFFF}#TopBarTab{margin:0;padding:0}#TopBarTab::tab{background-color:#5a5a5a;border-top:1 solid #404040;border-right:1 solid #404040;color:#afafaf;margin:0 0 0 0;padding:2 8 3 8}#TopBarTab::tab:hover{background-color:#6e6e6e;color:#fff}#TopBarTab::tab:selected{background-color:#9a9a9a;color:#000}#TopBarTab::tab:first{border-left:1 solid #404040}#TopBarTab::tab:last{border-right:1 solid #404040}QMenu{background-color:#949494;border:1 solid #404040;padding:2 0}QMenu::item{padding:3 28}QMenu::item:selected{background-color:#225baf;color:#FFFFFF}QMenu::item:checked{color:#000}QMenu::item:checked:selected{background-color:#225baf;color:#FFFFFF}QMenu::item:disabled{background:none;color:rgba(0,0,0,0.466)}QMenu::item:disabled:selected{border-color:transparent}QMenu::separator{border-top:1 solid #6e6e6e;height:0;margin:2 0}QMenu::icon{border-radius:2;margin:0 0 0 3;padding:1}QMenu::icon:checked{background-color:#225baf}QMenu::indicator{margin-left:7}TPanelTitleBar{background-color:#5a5a5a;border-color:#404040;border-style:solid;border-width:0 0 1 0;height:20;min-height:20;qproperty-TitleColor:#c0c0c0;qproperty-ActiveTitleColor:#fff;qproperty-BorderPixmap:url('none');qproperty-ActiveBorderPixmap:url('../Default/imgs/black/none');qproperty-FloatBorderPixmap:url('none');qproperty-FloatActiveBorderPixmap:url('../Default/imgs/black/none')}QAbstractScrollArea::corner{background-color:#6e6e6e}QScrollBar{background-color:#6e6e6e;border:0}QScrollBar:horizontal{height:16;margin:0}QScrollBar:vertical{margin:0;width:16}QScrollBar::handle{border:1 solid #555;border-radius:2}QScrollBar::handle:horizontal:hover,QScrollBar::handle:vertical:hover{background-color:#b3b3b3;border-color:#404040}QScrollBar::handle:horizontal:pressed,QScrollBar::handle:vertical:pressed{background-color:#c7c7c7;border-color:#404040}QScrollBar::handle:horizontal{background-color:#9f9f9f;margin:2 16;min-width:20}QScrollBar::handle:vertical{background-color:#9f9f9f;margin:16 2;min-height:20}QScrollBar::add-line{subcontrol-origin:margin;border:0}QScrollBar::add-line:horizontal{subcontrol-position:right;background-color:#6e6e6e;margin:0;width:16}QScrollBar::add-line:vertical{subcontrol-position:bottom;background-color:#6e6e6e;margin:0;height:16}QScrollBar::sub-line{border:0;subcontrol-origin:margin}QScrollBar::sub-line:horizontal{subcontrol-position:left;background-color:#6e6e6e;margin:0;width:16}QScrollBar::sub-line:vertical{subcontrol-position:top;background-color:#6e6e6e;margin:0;height:16}QScrollBar::up-arrow:vertical{image:url('../Default/imgs/black/scroll-up.svg');image-position:center center}QScrollBar::up-arrow:vertical:pressed{margin:1 0 0 0}QScrollBar::down-arrow:vertical{image:url('../Default/imgs/black/scroll-down.svg');image-position:center center}QScrollBar::down-arrow:vertical:pressed{margin:1 0 0 0}QScrollBar::left-arrow:horizontal{image:url('../Default/imgs/black/scroll-left.svg');image-position:center center}QScrollBar::left-arrow:horizontal:pressed{margin:1 0 0 0}QScrollBar::right-arrow:horizontal{image:url('../Default/imgs/black/scroll-right.svg');image-position:center center}QScrollBar::right-arrow:horizontal:pressed{margin:1 0 0 0}QScrollBar::sub-page:horizontal,QScrollBar::add-page:horizontal,QScrollBar::sub-page:vertical,QScrollBar::add-page:vertical{background:none}QToolBar{padding:0}QToolBar::separator:horizontal{border-left:1 solid #404040;margin:0 1;width:0}QToolBar::separator:vertical{border-top:1 solid #404040;height:0;margin:1 0}QToolBar QLabel{margin-top:1}QToolBar QToolBar{border:0}QToolButton::menu-indicator{image:none}QToolButton::menu-button{border-image:none}.DvScrollWidget QPushButton,DvScrollWidget QPushButton,#ScrollLeftButton QPushButton,#ScrollRightButton QPushButton,#ScrollUpButton QPushButton,#ScrollDownButton QPushButton{background-color:#a6a6a6;border:0 solid red;border-radius:0;padding:0;max-width:16}.DvScrollWidget QPushButton:hover,DvScrollWidget QPushButton:hover,#ScrollLeftButton QPushButton:hover,#ScrollRightButton QPushButton:hover,#ScrollUpButton QPushButton:hover,#ScrollDownButton QPushButton:hover{background-color:#bbb}.DvScrollWidget QPushButton:pressed,DvScrollWidget QPushButton:pressed,#ScrollLeftButton QPushButton:pressed,#ScrollRightButton QPushButton:pressed,#ScrollUpButton QPushButton:pressed,#ScrollDownButton QPushButton:pressed{background-color:#e1e1e1}#ScrollLeftButton,#ScrollRightButton,#ScrollUpButton,#ScrollDownButton{margin:0;min-width:16}#ScrollLeftButton{border-right:1 solid #404040;image:url('../Default/imgs/black/scroll-left.svg')}#ScrollRightButton{border-left:1 solid #404040;margin-left:3;image:url('../Default/imgs/black/scroll-right.svg')}#ScrollUpButton{image:url('../Default/imgs/black/scroll-up.svg')}#ScrollDownButton{image:url('../Default/imgs/black/scroll-down.svg')}#keyFrameNavigator{background:none;margin:0;padding:0}#keyFrameNavigator QToolButton{min-width:18}#keyFrameNavigator #PreviousKey{image:url('../Default/imgs/black/prevkey.svg')}#keyFrameNavigator #PreviousKey:hover{image:url('../Default/imgs/black/prevkey_over.svg')}#keyFrameNavigator #PreviousKey:disabled{image:url('../Default/imgs/black/prevkey_disabled.svg')}#keyFrameNavigator #NextKey{image:url('../Default/imgs/black/nextkey.svg')}#keyFrameNavigator #NextKey:hover{image:url('../Default/imgs/black/nextkey_over.svg')}#keyFrameNavigator #NextKey:disabled{image:url('../Default/imgs/black/nextkey_disabled.svg')}.treeview,QTreeWidget,QTreeView,#FunctionEditorTree{background-color:#949494;alternate-background-color:#8a8a8a;border:0;margin:0;outline:0}.treeview::item:selected,QTreeWidget::item:selected,QTreeView::item:selected,#FunctionEditorTree::item:selected{background-color:#225baf;color:#FFFFFF}.treeview::branch:adjoins-item,QTreeWidget::branch:adjoins-item,QTreeView::branch:adjoins-item,#FunctionEditorTree::branch:adjoins-item{border-image:url('')}.treeview::branch:has-siblings,QTreeWidget::branch:has-siblings,QTreeView::branch:has-siblings,#FunctionEditorTree::branch:has-siblings{border-image:url('')}.treeview::branch:has-siblings:adjoins-item,QTreeWidget::branch:has-siblings:adjoins-item,QTreeView::branch:has-siblings:adjoins-item,#FunctionEditorTree::branch:has-siblings:adjoins-item{border-image:url('')}.treeview::branch:has-children:closed,QTreeWidget::branch:has-children:closed,QTreeView::branch:has-children:closed,#FunctionEditorTree::branch:has-children:closed{background:url('../Default/imgs/black/treebranch-closed.svg') no-repeat;background-position:center center;border-image:none;image:none}.treeview::branch:has-children:open,QTreeWidget::branch:has-children:open,QTreeView::branch:has-children:open,#FunctionEditorTree::branch:has-children:open{background:url('../Default/imgs/black/treebranch-open.svg') no-repeat;background-position:center center;image:none}.treeview::branch:has-children:has-siblings:closed,QTreeWidget::branch:has-children:has-siblings:closed,QTreeView::branch:has-children:has-siblings:closed,#FunctionEditorTree::branch:has-children:has-siblings:closed{background:url('../Default/imgs/black/treebranch-closed.svg') no-repeat;background-position:center center;border-image:none;image:none}.treeview::branch:has-children:has-siblings:open,QTreeWidget::branch:has-children:has-siblings:open,QTreeView::branch:has-children:has-siblings:open,#FunctionEditorTree::branch:has-children:has-siblings:open{background:url('../Default/imgs/black/treebranch-open.svg') no-repeat;background-position:center center;border-image:none;image:none}QListView{outline:0;background:#949494;alternate-background-color:#8a8a8a}#TabBarContainer{background-color:#6c6c6c}.Button,QPushButton,.ComboBox,.ComboBox:checked,QComboBox,QComboBox:checked{background-color:#a6a6a6;border:1 solid #525252;border-radius:2;color:#000;margin:0;padding:3 15}.Button:hover,QPushButton:hover,.ComboBox:hover,#ViewerFpsSlider::sub-line:horizontal:hover,#ViewerFpsSlider::add-line:horizontal:hover,QComboBox:hover{background-color:#bbb;border-color:#525252;color:#000}.Button:pressed,QPushButton:pressed,#ViewerFpsSlider::sub-line:horizontal:pressed,#ViewerFpsSlider::add-line:horizontal:pressed{background-color:#e1e1e1;border-color:#525252;color:#000}.Button:checked,QPushButton:checked{background-color:#5a5a5a;border-color:#454545;color:#c0c0c0}.Button:checked:hover,QPushButton:checked:hover{background-color:#5f5f5f}.Button:checked:hover:pressed,QPushButton:checked:hover:pressed{background:#5a5a5a}.Button:disabled,QPushButton:disabled,.ComboBox:disabled,#ViewerFpsSlider::sub-line:horizontal:disabled,#ViewerFpsSlider::add-line:horizontal:disabled,QComboBox:disabled{background-color:#8d8d8d;border-color:#737373;color:rgba(0,0,0,0.466)}#PushButton_NoPadding{padding:3}.ComboBox,.ComboBox:checked,QComboBox,QComboBox:checked{padding:1 0 1 4;margin:1 0}.ComboBox::drop-down,QComboBox::drop-down{image:url('../Default/imgs/black/combo_downarrow.svg');image-position:center center;width:16}.ComboBox::drop-down:disabled,QComboBox::drop-down:disabled{image:url('../Default/imgs/black/combo_downarrow_disabled.svg')}.ComboBox QAbstractItemView,QComboBox QAbstractItemView{background-color:#949494;border:1 solid #404040;selection-background-color:#225baf;selection-color:#FFFFFF}.LineEdit,QPlainTextEdit,QLineEdit,#TaskSheetItem,#tasksRemoveBox,#tasksAddBox{background-color:#e6e6e6;border:1 solid #525252;border-radius:2;color:#000;selection-background-color:#225baf;selection-color:#FFFFFF;padding:0 0 0 1}.LineEdit:focus,QPlainTextEdit:focus,QLineEdit:focus,#TaskSheetItem:focus,#tasksRemoveBox:focus,#tasksAddBox:focus{background-color:#e6e6e6;border-color:#525252;color:#000}.LineEdit:disabled,QPlainTextEdit:disabled,QLineEdit:disabled,#TaskSheetItem:disabled,#tasksRemoveBox:disabled,#tasksAddBox:disabled{background-color:#9a9a9a;border-color:#696969;color:rgba(0,0,0,0.466)}.CheckBox,QCheckBox{color:#000}.CheckBox:hover,QCheckBox:hover,.RadioButton:hover,QRadioButton:hover{color:#fff}.CheckBox:disabled,QCheckBox:disabled{color:rgba(0,0,0,0.466)}.CheckBox::indicator,QMenu::indicator,QCheckBox::indicator,.GroupBox::indicator,QGroupBox::indicator{background-color:#cdcdcd;border:1 solid #525252;border-radius:2;height:9;padding:1;width:9}.CheckBox::indicator:hover,QMenu::indicator:hover,.CheckBox::indicator:checked:hover,QCheckBox::indicator:hover,.GroupBox::indicator:hover,QMenu::indicator:checked:hover,QCheckBox::indicator:checked:hover,.GroupBox::indicator:checked:hover,QGroupBox::indicator:hover,QGroupBox::indicator:checked:hover{background-color:#e6e6e6;border-color:#525252}.CheckBox::indicator:checked,QMenu::indicator:checked,QCheckBox::indicator:checked,.GroupBox::indicator:checked,QGroupBox::indicator:checked{background-color:#cdcdcd;border-color:#525252;image:url('../Default/imgs/black/checkmark.svg')}.CheckBox::indicator:checked:disabled,QMenu::indicator:checked:disabled,QCheckBox::indicator:checked:disabled,.GroupBox::indicator:checked:disabled,QGroupBox::indicator:checked:disabled{background-color:#8d8d8d;border-color:#737373;image:url('../Default/imgs/black/checkmark_disabled.svg')}.CheckBox::indicator:disabled,QMenu::indicator:disabled,QCheckBox::indicator:disabled,.GroupBox::indicator:disabled,QGroupBox::indicator:disabled{background-color:#8d8d8d;border-color:#737373}.RadioButton::indicator:unchecked,QRadioButton::indicator:unchecked,#CameraSettingsRadioButton_Small::indicator:unchecked{image:url('../Default/imgs/black/radiobutton_unchecked.svg');image-position:center center}.RadioButton::indicator:checked,QRadioButton::indicator:checked,#CameraSettingsRadioButton_Small::indicator:checked{image:url('../Default/imgs/black/radiobutton_checked.svg');image-position:center center}.GroupBox,QGroupBox{margin:6 0 0 0;padding:5 0}.GroupBox::title,QGroupBox::title{subcontrol-origin:margin;left:15;margin:-3 0 0 0;padding:0 3}.GroupBox::title:hover,QGroupBox::title:hover{color:#fff}.GroupBox::title:disabled,QGroupBox::title:disabled{color:rgba(0,0,0,0.466)}.GroupBox::indicator,QGroupBox::indicator{subcontrol-origin:margin;margin-top:2}.GroupBox:disabled,QGroupBox:disabled{color:rgba(0,0,0,0.466)}.Slider::groove:horizontal,QSlider::groove:horizontal{background-color:transparent;background-image:url('../Default/imgs/black/slider-groove.svg');background-position:center center;background-repeat:repeat-x;margin:0;height:20;min-height:20}.Slider::groove:horizontal:disabled,QSlider::groove:horizontal:disabled{background-image:url('../Default/imgs/black/slider-groove_disabled.svg')}.Slider::handle:horizontal,QSlider::handle:horizontal{width:10;margin:-2 0;image:url('../Default/imgs/black/slider-handle.svg')}.Slider::handle:horizontal:disabled,QSlider::handle:horizontal:disabled{image:url('../Default/imgs/black/slider-handle_disabled.svg')}#IntPairField,#DoublePairField{qproperty-LightLineColor:#484848;qproperty-LightLineEdgeColor:#484848;qproperty-DarkLineColor:#484848;qproperty-MiddleLineColor:#484848;qproperty-HandleLeftPixmap:url("../Default/imgs/black/slider-handle.svg");qproperty-HandleRightPixmap:url("../Default/imgs/black/slider-handle.svg");qproperty-HandleLeftGrayPixmap:url("../Default/imgs/black/slider-handle_disabled.svg");qproperty-HandleRightGrayPixmap:url("../Default/imgs/black/slider-handle_disabled.svg")}#DirTreeView{background-color:#949494;alternate-background-color:#949494;border:1 solid #404040;border-right:0}DvItemViewerPanel{qproperty-TextColor:#000;qproperty-AlternateBackground:#8a8a8a;qproperty-SelectedTextColor:#FFFFFF;qproperty-FolderTextColor:#071b9b;qproperty-SelectedItemBackground:#225baf}#FileBrowser DvItemViewerPanel,#SceneCast DvItemViewerPanel{background-color:#949494}#FileBrowser #castFrame,#SceneCast #castFrame{border-top:1 solid #404040;border-right:1 solid #404040;border-bottom:1 solid #404040;margin:0}#FileBrowser QToolButton,#SceneCast QToolButton{padding:1}DvDirTreeView{qproperty-TextColor:#000;qproperty-SelectedTextColor:#FFFFFF;qproperty-SelectedItemBackground:#225baf;qproperty-FolderTextColor:#071b9b;qproperty-SelectedFolderTextColor:#FFFFFF;alternate-background-color:#8a8a8a;background-color:#949494;border:1 solid #404040}#FileDoesNotExistLabel{color:#f00}#SceneCast QToolBar{border-top:1 solid #404040}#SceneCast QToolButton{margin:3 1 2 1;padding:1}#CastBrowser{border:0;margin:0}#FilmStrip QComboBox{border-radius:0;border-width:0}#FilmStrip QComboBox QAbstractItemView{background-color:#949494}#CleanupSettings #CleanupSettingsFrame{margin-top:2;margin-bottom:4}#CleanupSettings QGroupBox{margin-bottom:3}ParamsPage{qproperty-TextColor:#000}#CameraSettingsButton{padding:2}#CameraSettingsRadioButton:hover{background:none}#CameraSettingsRadioButton::indicator{border:1 solid rgba(255,255,255,0);height:18;padding:0;width:18}#CameraSettingsRadioButton::indicator:unchecked{image:url('../Default/imgs/black/lock_off.svg')}#CameraSettingsRadioButton::indicator:checked{background-color:#C34040;border-color:#772626;image:url('../Default/imgs/black/lock_on.svg')}#CameraSettingsRadioButton::indicator:checked:hover{background-color:#d57a7a;border-color:#772626}#CameraSettingsDPI{color:#000}#CameraSettingsRadioButton_Small{padding:0}#CameraSettingsRadioButton_Small::indicator{background-color:transparent;border:0;height:21;margin:0;width:11}#ForceSquaredPixelButton{height:16;border:1 solid rgba(255,255,255,0);image:url('../Default/imgs/black/fsp_unchecked.svg');padding:2;width:16;margin:0}#ForceSquaredPixelButton:checked{image:url('../Default/imgs/black/fsp_checked.svg')}#OutputSettingsLabel{color:#000}PencilTestPopup{min-height:730px;min-width:512px}#MatchLineButton{background-color:#a6a6a6}#MatchLineButton:checked{background-color:#cdcdcd;border:2 solid #225baf;border-radius:2}#LargeSizedText{font-size:17px}#StartupLabel{padding:3}#StartupLabel:hover{background:#9a9a9a}QStatusBar{background-color:#c0c0c0}QStatusBar::item{border:0}QStatusBar QLabel{background-color:#c0c0c0}QStatusBar #StatusBarLabel{background-color:#fff;padding:1 3}#TitleTxtLabel{color:#000}#StyleEditor QPushButton{margin:2 1;padding:0}#StyleEditor #TabBarContainer{margin-left:-4}#StyleEditor #bottomWidget{border-top:1 solid #404040;padding:3 2 8 3}#StyleEditor #bottomWidget QPushButton{padding:3 5}#StyleEditorTabBar::tab::first{border-left:1 solid #404040}#HexagonalColorWheel{qproperty-BGColor:#808080}#colorSlider::groove:horizontal{height:1;border-image:none}#colorSlider::handle:horizontal{width:8;margin:-8 -4}#colorSliderAddButton,#colorSliderSubButton{background:none;border-color:transparent;image-position:center center;min-height:16;padding:0;min-width:18}#colorSliderAddButton{image:url('../Default/imgs/black/scroll-right.svg')}#colorSliderSubButton{image:url('../Default/imgs/black/scroll-left.svg')}#PlainColorPageParts{border-bottom:1 solid #404040}#PlainColorPageParts QLineEdit{max-width:35}PaletteViewer DvScrollWidget QPushButton{border-top:0;margin-bottom:1;max-width:15;min-width:15}PaletteViewer DvScrollWidget #ScrollLeftButton{border-radius:0;margin-bottom:1;max-width:16;min-width:16}PaletteViewer DvScrollWidget #ScrollRightButton{border-radius:0;margin-left:1;margin-bottom:1;max-width:16;min-width:16}PaletteViewer QToolBar{background:none;border-bottom:1 solid #404040;padding:0;margin:0}PaletteViewer QToolBar::separator:horizontal{margin:0}PaletteViewer QToolBar QToolButton{margin:0 0 1 0;padding:1 0 2 0}#PageViewer{qproperty-TextColor:#000}#PaletteLockButton{border-radius:0;margin:0 0 1 1}#PaletteLockButton:checked{background-color:#C34040;border-color:#772626}#PaletteLockButton:checked:hover{background-color:#d57a7a;border-color:#772626}#WordButton{padding-right:0;padding-left:0}QDialog{background-color:#808080}QDialog #dialogButtonFrame{background-color:#767676;border-top:1 solid #404040}QDialog #dialogButtonFrame QPushButton{border-color:#525252;outline:0}QDialog #dialogButtonFrame QPushButton:focus{background-color:#B5C0D0;border-color:#485971;color:#000}QDialog #dialogButtonFrame QPushButton:focus:hover{background-color:#ced5e0}QDialog #dialogButtonFrame QPushButton:focus:pressed{background-color:#e1e1e1;border-color:#525252;color:#000}#SceneSettings QLabel{color:#000}#PreferencesPopup QListWidget{background-color:#949494;alternate-background-color:#949494;border:1 solid #404040;font-size:13px}#PreferencesPopup QListWidget::item{border:0;padding:3}#PreferencesPopup QListWidget::item:hover{background-color:#9f9f9f;color:#000;background-color:#a9a9a9}#PreferencesPopup QListWidget::item:selected{background-color:#225baf;color:#FFFFFF}#ShortcutTree{border:1 solid #404040}#ShortcutTree::item{padding:1 0}#ShortcutTree QScrollBar:vertical{width:16;margin-right:-1}ProjectPopup QLabel{color:#000}#GearButton{qproperty-icon:url('../Default/imgs/black/gear.svg')}#SubfolderButton{qproperty-icon:url('../Default/imgs/black/subfolder.svg');padding-left:6px;padding-right:6px}#SubcameraButton{qproperty-icon:url('../Default/imgs/black/subcamera.svg');padding-left:6px;padding-right:6px}SchematicViewer{qproperty-TextColor:#000;qproperty-VerticalLineColor:#646464;qproperty-LevelColumnColor:#76b776;qproperty-VectorColumnColor:#c0c07a;qproperty-ChildColumnColor:#d69adb;qproperty-FullcolorColumnColor:#8bbdc1;qproperty-FxColumnColor:#82815d;qproperty-PaletteColumnColor:#2aab9a;qproperty-MeshColumnColor:#ac78d4;qproperty-ReferenceColumnColor:#ababab;qproperty-TableColor:#a4a4bf;qproperty-ActiveCameraColor:#6ba5de;qproperty-OtherCameraColor:#8f9c9e;qproperty-GroupColor:#6698c6;qproperty-PegColor:#be8a56;qproperty-SplineColor:#7bb821;qproperty-ActiveOutputColor:#6ba5de;qproperty-OtherOutputColor:#8f9c9e;qproperty-XsheetColor:#a4a4bf;qproperty-NormalFxColor:#8d9caf;qproperty-MacroFxColor:#ae8ca5;qproperty-ImageAdjustFxColor:#9c9ab4;qproperty-LayerBlendingFxColor:#709ba5;qproperty-MatteFxColor:#ba8585;qproperty-SchematicPreviewButtonBgOnColor:#c8c864;qproperty-SchematicPreviewButtonOnImage:url('../Default/imgs/black/x_prev_eye_on.svg');qproperty-SchematicPreviewButtonBgOffColor:#ababab;qproperty-SchematicPreviewButtonOffImage:url('../Default/imgs/black/x_prev_eye_off.svg');qproperty-SchematicCamstandButtonBgOnColor:#eb906b;qproperty-SchematicCamstandButtonOnImage:url('../Default/imgs/black/x_table_view_on.svg');qproperty-SchematicCamstandButtonTranspImage:url('../Default/imgs/black/x_table_view_transp.svg');qproperty-SchematicCamstandButtonBgOffColor:#ababab;qproperty-SchematicCamstandButtonOffImage:url('../Default/imgs/black/x_table_view_off.svg')}#SchematicBottomFrame{background-color:#808080;border:0;margin:0;padding:0}#SchematicBottomFrame QToolBar::separator:horizontal{margin:0}#SchematicBottomFrame QToolBar QToolButton{padding:0;margin:2}#SchematicSceneViewer{background-color:#737373;border-bottom:1 solid #404040}#FxSettingsTabBar::tab{border-top:1 solid #404040}#FxSettingsTabBar::tab::first,#FxSettingsTabBar::tab::only-one{border-left:1 solid #404040}FxSettings QToolBar{border-top:1 solid #404040;border-right:1 solid #404040;border-left:1 solid #404040;min-height:23;padding:3 0}FxSettings QToolBar QToolBar{border:0}#FxSettingsLabel{color:#000}#FxSettingsHelpButton{background-color:#80a0dc;color:#000;padding-top:0;padding-bottom:0}#FxSettingsHelpButton:hover{background-color:#a8bee7}#ScriptConsole{font-family:'Courier New',monospace;border:0;color:#000000;padding:3}#ScriptConsole QFrame{background-color:#dcdcdc}#ScriptConsole TPanelTitleBar{background-color:#5a5a5a}#TaskSheetItemLabel{color:#000}#Tasks QToolBar{border-bottom:1 solid #404040;margin:0;padding:0}#Tasks QToolBar QToolButton{margin:2 2 3 2}#ToolBar QToolBar{padding-left:2}#ToolOptions TPanelTitleBar{border-right:1 solid #404040;border-bottom:0}#CommandBar TPanelTitleBar{border-right:1 solid #404040;border-bottom:0}IconViewField{qproperty-ThicknessPixmap:url("../Default/imgs/black/selectiontool_thickness.svg")}#EditToolLockButton{spacing:0}#EditToolLockButton:hover{background:none}#EditToolLockButton::indicator{border:1 solid rgba(255,255,255,0);height:18;padding:0;width:18}#EditToolLockButton::indicator:unchecked{image:url('../Default/imgs/black/lock_off.svg')}#EditToolLockButton::indicator:checked{background-color:#C34040;border-color:#772626;image:url('../Default/imgs/black/lock_on.svg')}#EditToolLockButton::indicator:checked:hover{background-color:#d57a7a;border-color:#772626}PopupButton::menu-indicator{border-left:0;height:17;image:url('../Default/imgs/black/combo_downarrow.svg');width:10}PopupButton::menu-indicator:hover{image:url('../Default/imgs/black/combo_downarrow.svg')}PopupButton::menu-indicator:disabled{image:url('../Default/imgs/black/combo_downarrow_disabled.svg')}#Cap,#Join{padding:0 4 0 -8;max-width:32;min-width:32}#Cap QMenu,#Join QMenu{max-width:28;min-width:28}#Cap QMenu::item,#Join QMenu::item{max-width:28;min-width:28;padding:0}QToolBar#MediumPaddingToolBar QToolButton{padding-left:3;padding-right:3}QToolBar#WidePaddingToolBar QToolButton{padding-left:6;padding-right:6}#CommandBar{margin:0;padding:0;border:0}#CommandBar::separator:horizontal{margin-right:3;margin-left:3}#expandButton:checked{background-color:transparent;border-color:transparent;color:#000}#expandButton:checked:hover{background-color:#bbb;border-color:#525252}#expandButton:checked:pressed{background-color:#e1e1e1;border-color:#525252}#ComboViewerPanel Toolbar{border-bottom:1 solid #404040}#ComboViewerPanel Toolbar::separator:horizontal{margin:0 0 0 2}#ComboViewerPanel Toolbar QToolButton{margin:2 0 3 2}#ComboViewerToolOptions{border-bottom:1 solid #404040}#ComboViewer #ToolBarContainer,#ViewerPanel #ToolBarContainer,FlipBook #ToolBarContainer{background-color:transparent;border-top:2 solid #404040;border-bottom:1 solid #404040;padding-right:-1}#flipCustomize{margin-left:3}#flipCustomize::menu-button{background-color:transparent;width:35}#flipCustomize::menu-arrow{image:none}QToolBar#FlipConsolePlayToolBar::separator:horizontal{margin:0 3}QToolBar#FlipConsolePlayToolBar QToolButton{margin-top:2;margin-bottom:2;height:16;padding-left:1;padding-right:1}#ViewerFpsSlider{background-color:transparent;background-image:url('../Default/imgs/black/slider-groove.svg');background-position:center center;background-repeat:repeat-x;border:0;height:19;margin:0 3 0 37;max-width:300;min-width:0}#ViewerFpsSlider::sub-line:horizontal{subcontrol-origin:absolute;background-color:#a6a6a6;border:1 solid #525252;border-top-left-radius:2;border-bottom-left-radius:2;height:16;left:-33;width:14}#ViewerFpsSlider::add-line:horizontal{subcontrol-position:left;background-color:#a6a6a6;border:1 solid #525252;border-top-right-radius:2;border-bottom-right-radius:2;left:18;height:16;image-position:center center;width:13}#ViewerFpsSlider::handle::horizontal{background-color:#a6a6a6;border:1 solid #404040;border-radius:2;margin:2 0 3 0;min-width:9;width:9;max-width:9}FlipSlider{qproperty-PBHeight:15;qproperty-PBOverlay:url('../Default/imgs/black/flipslider.svg');qproperty-PBColorMarginLeft:1;qproperty-PBColorMarginTop:2;qproperty-PBColorMarginRight:1;qproperty-PBColorMarginBottom:2;qproperty-PBMarker:url('../Default/imgs/black/flipmarker.svg');qproperty-PBMarkerMarginLeft:3;qproperty-PBMarkerMarginRight:3;qproperty-notStartedColor:#8b2525;qproperty-startedColor:#00a808;qproperty-baseColor:#676767;qproperty-finishedColor:#676767}Ruler{qproperty-ParentBGColor:#c0c0c0;qproperty-ScaleColor:#000}#RulerToolOptionValues{color:#000}#xsheetArea,#ScrollArea{background-color:#6c6c6c;border:0}#xsheetScrollArea{border:0}#cornerWidget QToolButton{padding:0}#xsheetColumnAreaMenu_Preview{background-color:#E6E678}#xsheetColumnAreaMenu_Lock{background-color:#F5F5F5}#xsheetColumnAreaMenu_Camstand{background-color:#FFA480}#xsheetColumnAreaMenu_Preview,#xsheetColumnAreaMenu_Lock,#xsheetColumnAreaMenu_Camstand{color:#000}#noteTextEdit{color:#000}XsheetViewer{qproperty-TextColor:#000;qproperty-BGColor:#929292;qproperty-LightLineColor:#616161;qproperty-MarkerLineColor:#000;qproperty-VerticalLineColor:#646464;qproperty-VerticalLineHeadColor:#393939;qproperty-PreviewFrameTextColor:#000eb6;qproperty-CurrentRowBgColor:#B5C0D0;qproperty-OnionSkinAreaBgColor:#858585;qproperty-EmptyColumnHeadColor:#808080;qproperty-SelectedColumnTextColor:#9e0000;qproperty-EmptyCellColor:#7c7c7c;qproperty-NotEmptyColumnColor:#8a8a8a;qproperty-SelectedEmptyCellColor:#b3b3b3;qproperty-LevelColumnColor:#76b776;qproperty-LevelColumnBorderColor:#496549;qproperty-SelectedLevelColumnColor:#9bc59b;qproperty-VectorColumnColor:#c0c07a;qproperty-VectorColumnBorderColor:#71714a;qproperty-SelectedVectorColumnColor:#cdcda0;qproperty-ChildColumnColor:#d69adb;qproperty-ChildColumnBorderColor:#9c53a3;qproperty-SelectedChildColumnColor:#e3c2e6;qproperty-FullcolorColumnColor:#8bbdc1;qproperty-FullcolorColumnBorderColor:#577476;qproperty-SelectedFullcolorColumnColor:#afcdd0;qproperty-FxColumnColor:#82815d;qproperty-FxColumnBorderColor:#404039;qproperty-SelectedFxColumnColor:#97967b;qproperty-ReferenceColumnColor:#ababab;qproperty-ReferenceColumnBorderColor:#6b6b6b;qproperty-SelectedReferenceColumnColor:#c4c4c4;qproperty-PaletteColumnColor:#2aab9a;qproperty-PaletteColumnBorderColor:#173e39;qproperty-SelectedPaletteColumnColor:#40c8b6;qproperty-MeshColumnColor:#ac78d4;qproperty-MeshColumnBorderColor:#6b418c;qproperty-SelectedMeshColumnColor:#c3a2dd;qproperty-SoundTextColumnColor:#c8c8c8;qproperty-SoundTextColumnBorderColor:#8c8c8c;qproperty-SelectedSoundTextColumnColor:#e2e2e2;qproperty-SoundColumnColor:#acba82;qproperty-SoundColumnBorderColor:#656b51;qproperty-SelectedSoundColumnColor:#c0c9a6;qproperty-SoundColumnHlColor:#f5ffe6;qproperty-SoundColumnTrackColor:#5a642d;qproperty-ColumnHeadPastelizer:#fff;qproperty-SelectedColumnHead:#bed2f0;qproperty-LightLightBGColor:#808080;qproperty-LightBGColor:#f0f0f0;qproperty-DarkBGColor:#e1e1e1;qproperty-DarkLineColor:#969696;qproperty-XsheetColumnNameBgColor:rgba(0,0,0,0);qproperty-XsheetDragBarHighlightColor:rgba(255,255,255,0.5);qproperty-XsheetPreviewButtonBgOnColor:#c8c864;qproperty-XsheetPreviewButtonOnImage:url('../Default/imgs/black/x_prev_eye_on.svg');qproperty-XsheetPreviewButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetPreviewButtonOffImage:url('../Default/imgs/black/x_prev_eye_off.svg');qproperty-XsheetCamstandButtonBgOnColor:#eb906b;qproperty-XsheetCamstandButtonOnImage:url('../Default/imgs/black/x_table_view_on.svg');qproperty-XsheetCamstandButtonTranspImage:url('../Default/imgs/black/x_table_view_transp.svg');qproperty-XsheetCamstandButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetCamstandButtonOffImage:url('../Default/imgs/black/x_table_view_off.svg');qproperty-XsheetLockButtonBgOnColor:rgba(255,255,255,0.3);qproperty-XsheetLockButtonOnImage:url('../Default/imgs/black/x_lock_on.svg');qproperty-XsheetLockButtonBgOffColor:rgba(255,255,255,0);qproperty-XsheetLockButtonOffImage:url('../Default/imgs/black/x_lock_off.svg');qproperty-XsheetConfigButtonBgColor:rgba(255,255,255,0);qproperty-XsheetConfigButtonImage:url('../Default/imgs/black/x_config.svg');qproperty-TimelinePreviewButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelinePreviewButtonOnImage:url('../Default/imgs/black/timeline_toggle_on.svg');qproperty-TimelinePreviewButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelinePreviewButtonOffImage:url('../Default/imgs/black/timeline_toggle_off.svg');qproperty-TimelineCamstandButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelineCamstandButtonOnImage:url('../Default/imgs/black/timeline_toggle_on.svg');qproperty-TimelineCamstandButtonTranspImage:url('../Default/imgs/black/timeline_toggle_transp.svg');qproperty-TimelineCamstandButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelineCamstandButtonOffImage:url('../Default/imgs/black/timeline_toggle_off.svg');qproperty-TimelineLockButtonBgOnColor:rgba(255,255,255,0);qproperty-TimelineLockButtonOnImage:url('../Default/imgs/black/timeline_toggle_on.svg');qproperty-TimelineLockButtonBgOffColor:rgba(255,255,255,0);qproperty-TimelineLockButtonOffImage:url('../Default/imgs/black/timeline_toggle_off.svg');qproperty-TimelineConfigButtonBgColor:rgba(255,255,255,0);qproperty-TimelineConfigButtonImage:url('../Default/imgs/black/timeline_config.svg');qproperty-LayerHeaderPreviewImage:url('../Default/imgs/black/layer_header_prev_eye.svg');qproperty-LayerHeaderPreviewOverImage:url('../Default/imgs/black/layer_header_prev_eye_over.svg');qproperty-LayerHeaderCamstandImage:url('../Default/imgs/black/layer_header_table_view.svg');qproperty-LayerHeaderCamstandOverImage:url('../Default/imgs/black/layer_header_table_view_over.svg');qproperty-LayerHeaderLockImage:url('../Default/imgs/black/lock_on.svg');qproperty-LayerHeaderLockOverImage:url('../Default/imgs/black/lock_on_over.svg')}#XSheetToolbar{margin:0;padding:0;border:0}#XSheetToolbar QToolButton{padding:0;margin:4 1;min-height:19;height:19}#XSheetToolbar::separator:horizontal{margin:0 4}#FunctionEditor QToolBar{border-bottom:1 solid #404040}#FunctionEditor QToolBar QToolBar{border:0}#FunctionEditor QToolBar QLabel{margin-left:5}#FunctionEditor QToolBar QToolButton{height:18}#FunctionEditorTree{border-top:1 solid #404040}FunctionTreeView{qproperty-TextColor:#000;qproperty-CurrentTextColor:#a70000}FunctionPanel{qproperty-BGColor:#5a5a5a;qproperty-ValueLineColor:#4d4d4d;qproperty-FrameLineColor:#4d4d4d;qproperty-OtherCurvesColor:#c5c5c5;qproperty-RulerBackground:#676767;qproperty-TextColor:#000;qproperty-SubColor:#fff;qproperty-SelectedColor:#fcae06}SpreadsheetViewer{qproperty-LightLightBGColor:#808080;qproperty-CurrentRowBgColor:#B5C0D0;qproperty-LightLineColor:#616161;qproperty-MarkerLineColor:#000;qproperty-BGColor:#8a8a8a;qproperty-VerticalLineColor:#646464;qproperty-KeyFrameColor:#db8b36;qproperty-KeyFrameBorderColor:#7b4a16;qproperty-SelectedKeyFrameColor:#dea466;qproperty-InBetweenColor:#c2c2b0;qproperty-InBetweenBorderColor:#636356;qproperty-SelectedInBetweenColor:#d6d6cf;qproperty-SelectedEmptyColor:#b3b3b3;qproperty-SelectedSceneRangeEmptyColor:#d2d2d2;qproperty-TextColor:#000;qproperty-ColumnHeaderBorderColor:#393939;qproperty-SelectedColumnTextColor:#9e0000}#ExpressionField{background-color:#fff;border:1 solid #6b6b6b;margin:0}#FunctionSegmentViewerLinkButton{background-image:url('../Default/imgs/black/segment_unlinked.svg');background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:hover{background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:checked{background-image:url('../Default/imgs/black/segment_linked.svg');background-repeat:no-repeat}#FunctionSegmentViewerLinkButton:disabled{background-image:url('../Default/imgs/black/segment_disabled.svg');background-repeat:no-repeat} \ No newline at end of file diff --git a/stuff/doc/AddIno.pdf b/stuff/doc/AddIno.pdf index 5ad8a6e..3c4436c 100644 Binary files a/stuff/doc/AddIno.pdf and b/stuff/doc/AddIno.pdf differ diff --git a/stuff/doc/BlurIno.pdf b/stuff/doc/BlurIno.pdf index a6f6219..c62f141 100644 Binary files a/stuff/doc/BlurIno.pdf and b/stuff/doc/BlurIno.pdf differ diff --git a/stuff/doc/BokehIwa.html b/stuff/doc/BokehIwa.html deleted file mode 100644 index bf5226d..0000000 --- a/stuff/doc/BokehIwa.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - Bokeh Fx Iwa - - -

Bokeh Fx Iwa

- -

● 概要

-レンズのボケを再現するエフェクトです。各レイヤのRGB値を露光値に変換して、絞り形状でボカし、合成します。
-フィルタ処理にフーリエ変換を用いて高速化を図っています。 - -

● 入力ポート

- - -

● パラメータ

-共通パラメータ - -レイヤー毎のパラメータ - - -

● 注意点

- - -

● ライセンス情報

- - -
-This is the BSD-style license for the KissFFT.
-
-Copyright (c) 2003-2010 Mark Borgerding
-
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -
-
- - - \ No newline at end of file diff --git a/stuff/doc/BokehRefIwa.html b/stuff/doc/BokehRefIwa.html deleted file mode 100644 index 25f05bf..0000000 --- a/stuff/doc/BokehRefIwa.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - Bokeh Fx Iwa - - -

Bokeh Ref Fx Iwa

- -

● 概要

-レンズのボケを再現するエフェクトです。入力画像をデプス参照画像の階調を元に数枚のレイヤーに分割し、 -分割された各レイヤーのRGB値を露光値に変換して、絞り形状でボカし、合成します。離散フーリエ変換を使って、高速化を図っています。 -ボカし処理を行う前に、各レイヤーの、前景で隠れている部分をメディアンフィルタで延ばす処理を行っています。 - -

● 入力ポート

- - -

● パラメータ

- - -

● 注意点

- - -

● ライセンス情報

- - -
-This is the BSD-style license for the KissFFT.
-
-Copyright (c) 2003-2010 Mark Borgerding
-
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -
-
- - - \ No newline at end of file diff --git a/stuff/doc/ChannelSelectorIno.pdf b/stuff/doc/ChannelSelectorIno.pdf index 2ee6493..5579469 100644 Binary files a/stuff/doc/ChannelSelectorIno.pdf and b/stuff/doc/ChannelSelectorIno.pdf differ diff --git a/stuff/doc/ColorBurnIno.pdf b/stuff/doc/ColorBurnIno.pdf index 0bb138a..7da39c1 100644 Binary files a/stuff/doc/ColorBurnIno.pdf and b/stuff/doc/ColorBurnIno.pdf differ diff --git a/stuff/doc/ColorDodgeIno.pdf b/stuff/doc/ColorDodgeIno.pdf index 347e809..6cc284b 100644 Binary files a/stuff/doc/ColorDodgeIno.pdf and b/stuff/doc/ColorDodgeIno.pdf differ diff --git a/stuff/doc/CrossDissolveIno.pdf b/stuff/doc/CrossDissolveIno.pdf index c9c5923..356252c 100644 Binary files a/stuff/doc/CrossDissolveIno.pdf and b/stuff/doc/CrossDissolveIno.pdf differ diff --git a/stuff/doc/DarkenIno.pdf b/stuff/doc/DarkenIno.pdf index f5a4159..ecb5e79 100644 Binary files a/stuff/doc/DarkenIno.pdf and b/stuff/doc/DarkenIno.pdf differ diff --git a/stuff/doc/DarkerColorIno.pdf b/stuff/doc/DarkerColorIno.pdf index e8868b3..4e63534 100644 Binary files a/stuff/doc/DarkerColorIno.pdf and b/stuff/doc/DarkerColorIno.pdf differ diff --git a/stuff/doc/DensityIno.pdf b/stuff/doc/DensityIno.pdf index 20da106..91f955b 100644 Binary files a/stuff/doc/DensityIno.pdf and b/stuff/doc/DensityIno.pdf differ diff --git a/stuff/doc/DivideIno.pdf b/stuff/doc/DivideIno.pdf index 6b00470..0292d40 100644 Binary files a/stuff/doc/DivideIno.pdf and b/stuff/doc/DivideIno.pdf differ diff --git a/stuff/doc/FogIno.pdf b/stuff/doc/FogIno.pdf index 748f5cc..d03bd2a 100644 Binary files a/stuff/doc/FogIno.pdf and b/stuff/doc/FogIno.pdf differ diff --git a/stuff/doc/HLSAddIno.pdf b/stuff/doc/HLSAddIno.pdf index 47ce60a..c8cf24b 100644 Binary files a/stuff/doc/HLSAddIno.pdf and b/stuff/doc/HLSAddIno.pdf differ diff --git a/stuff/doc/HLSAdjustIno.pdf b/stuff/doc/HLSAdjustIno.pdf index 9ca423b..9287cd3 100644 Binary files a/stuff/doc/HLSAdjustIno.pdf and b/stuff/doc/HLSAdjustIno.pdf differ diff --git a/stuff/doc/HLSNoiseIno.pdf b/stuff/doc/HLSNoiseIno.pdf index 5924856..bbc4825 100644 Binary files a/stuff/doc/HLSNoiseIno.pdf and b/stuff/doc/HLSNoiseIno.pdf differ diff --git a/stuff/doc/HSVAddIno.pdf b/stuff/doc/HSVAddIno.pdf index 0d64768..f79dfcc 100644 Binary files a/stuff/doc/HSVAddIno.pdf and b/stuff/doc/HSVAddIno.pdf differ diff --git a/stuff/doc/HSVAdjustIno.pdf b/stuff/doc/HSVAdjustIno.pdf index c174488..1fc98b4 100644 Binary files a/stuff/doc/HSVAdjustIno.pdf and b/stuff/doc/HSVAdjustIno.pdf differ diff --git a/stuff/doc/HSVNoiseIno.pdf b/stuff/doc/HSVNoiseIno.pdf index 51e1a0b..d61ffbf 100644 Binary files a/stuff/doc/HSVNoiseIno.pdf and b/stuff/doc/HSVNoiseIno.pdf differ diff --git a/stuff/doc/HardLightIno.pdf b/stuff/doc/HardLightIno.pdf index 1cfcff1..1c0ae45 100644 Binary files a/stuff/doc/HardLightIno.pdf and b/stuff/doc/HardLightIno.pdf differ diff --git a/stuff/doc/HardMixIno.pdf b/stuff/doc/HardMixIno.pdf index 4cdde98..07bd8f0 100644 Binary files a/stuff/doc/HardMixIno.pdf and b/stuff/doc/HardMixIno.pdf differ diff --git a/stuff/doc/LevelAutoIno.pdf b/stuff/doc/LevelAutoIno.pdf index 6d5be50..39bfd1e 100644 Binary files a/stuff/doc/LevelAutoIno.pdf and b/stuff/doc/LevelAutoIno.pdf differ diff --git a/stuff/doc/LevelMasterIno.pdf b/stuff/doc/LevelMasterIno.pdf index a6d2679..82f27e4 100644 Binary files a/stuff/doc/LevelMasterIno.pdf and b/stuff/doc/LevelMasterIno.pdf differ diff --git a/stuff/doc/LevelRGBAIno.pdf b/stuff/doc/LevelRGBAIno.pdf index a84c3b9..b7bb06c 100644 Binary files a/stuff/doc/LevelRGBAIno.pdf and b/stuff/doc/LevelRGBAIno.pdf differ diff --git a/stuff/doc/LightenIno.pdf b/stuff/doc/LightenIno.pdf index 112cac7..5b5af9a 100644 Binary files a/stuff/doc/LightenIno.pdf and b/stuff/doc/LightenIno.pdf differ diff --git a/stuff/doc/LighterColorIno.pdf b/stuff/doc/LighterColorIno.pdf index bcfce35..752742c 100644 Binary files a/stuff/doc/LighterColorIno.pdf and b/stuff/doc/LighterColorIno.pdf differ diff --git a/stuff/doc/LinearBurnIno.pdf b/stuff/doc/LinearBurnIno.pdf index 32958d3..191272e 100644 Binary files a/stuff/doc/LinearBurnIno.pdf and b/stuff/doc/LinearBurnIno.pdf differ diff --git a/stuff/doc/LinearDodgeIno.pdf b/stuff/doc/LinearDodgeIno.pdf index f6b603b..9c0f75f 100644 Binary files a/stuff/doc/LinearDodgeIno.pdf and b/stuff/doc/LinearDodgeIno.pdf differ diff --git a/stuff/doc/LinearLightIno.pdf b/stuff/doc/LinearLightIno.pdf index cad01fb..6fa06f3 100644 Binary files a/stuff/doc/LinearLightIno.pdf and b/stuff/doc/LinearLightIno.pdf differ diff --git a/stuff/doc/MaxMinIno.pdf b/stuff/doc/MaxMinIno.pdf index 1e696ac..c89835d 100644 Binary files a/stuff/doc/MaxMinIno.pdf and b/stuff/doc/MaxMinIno.pdf differ diff --git a/stuff/doc/MedianIno.pdf b/stuff/doc/MedianIno.pdf index 85b32fe..e90f0ee 100644 Binary files a/stuff/doc/MedianIno.pdf and b/stuff/doc/MedianIno.pdf differ diff --git a/stuff/doc/MotionBlurIno.pdf b/stuff/doc/MotionBlurIno.pdf index bd6c836..f2ce706 100644 Binary files a/stuff/doc/MotionBlurIno.pdf and b/stuff/doc/MotionBlurIno.pdf differ diff --git a/stuff/doc/MotionBlurIwa.html b/stuff/doc/MotionBlurIwa.html index ca2d4d9..bdb599a 100644 --- a/stuff/doc/MotionBlurIwa.html +++ b/stuff/doc/MotionBlurIwa.html @@ -1,4 +1,4 @@ - + MotionBlurFx Iwa @@ -6,37 +6,37 @@

MotionBlurFx Iwa

-

● 概要

-モーションブラーを生成するためのエフェクトです。
-「現在のフレームの前後の、シャッターを開放している時間」を指定すると、
-その間のオブジェクトの軌跡に合わせてブラーをかけます。
-iwa_BokehFxと同様、RGB値を露光値に変換してからブラーをかけますので、
-ハイライトの部分はぼかしても明るさを損なうことがありません。 +

● Overview

+This effect is used in order to produce a motion blur.
+If you specify a "before & after for the current frame, for the time you have the shutter open",
+It is blurred in accordance with the trajectory of the intervening object.
+iwa_BokehFx will convert the blur from the RGB value to the exposure value,
+parts of the highlight will not impair the even blurred brightness. -

● 入力ポート

+

● Input Port

-

● パラメータ

+

● Parameters

diff --git a/stuff/doc/MotionWindIno.pdf b/stuff/doc/MotionWindIno.pdf index 91e0f27..e91310d 100644 Binary files a/stuff/doc/MotionWindIno.pdf and b/stuff/doc/MotionWindIno.pdf differ diff --git a/stuff/doc/MultiplyIno.pdf b/stuff/doc/MultiplyIno.pdf index c4a982d..28edb8f 100644 Binary files a/stuff/doc/MultiplyIno.pdf and b/stuff/doc/MultiplyIno.pdf differ diff --git a/stuff/doc/NegateIno.pdf b/stuff/doc/NegateIno.pdf index 6d76bbd..1a616de 100644 Binary files a/stuff/doc/NegateIno.pdf and b/stuff/doc/NegateIno.pdf differ diff --git a/stuff/doc/OverIno.pdf b/stuff/doc/OverIno.pdf index 5e34291..9b3a4de 100644 Binary files a/stuff/doc/OverIno.pdf and b/stuff/doc/OverIno.pdf differ diff --git a/stuff/doc/OverlayIno.pdf b/stuff/doc/OverlayIno.pdf index dfb1932..64be404 100644 Binary files a/stuff/doc/OverlayIno.pdf and b/stuff/doc/OverlayIno.pdf differ diff --git a/stuff/doc/PNCloudsIno.pdf b/stuff/doc/PNCloudsIno.pdf index 20b5ad0..ce16af3 100644 Binary files a/stuff/doc/PNCloudsIno.pdf and b/stuff/doc/PNCloudsIno.pdf differ diff --git a/stuff/doc/PNPerspectiveIwa.html b/stuff/doc/PNPerspectiveIwa.html index 7296f67..c750093 100644 --- a/stuff/doc/PNPerspectiveIwa.html +++ b/stuff/doc/PNPerspectiveIwa.html @@ -1,4 +1,4 @@ - + PN PerspectiveFx Iwa @@ -6,35 +6,43 @@

PN PerspectiveFx Iwa

-

● 概要

-水平面上に奥行きのあるPerlinノイズパターンを生成するためのエフェクトです。
-通常のノイズパターンだけではなく、inoWarpHVFxのオフセット参照画像として出力するモードや、
-ノイズパターンを水面の波の高さとしたとき、カメラから見た水面のフレネル反射強度を出力するモードを -選択することができます。 +

● Overview

+This effect is for generating a Perlin noise pattern with depth on a horizontal plane.
+Not only is there the usual noise pattern, there is also a mode in which the output is used as an offset reference image for inoWarpHVFx,
+when the noise pattern is used for the height of a water surface with waves, you can select a mode to output the Fresnel reflection intensity
+of the water surface as seen from the camera. -

● パラメータ

+

● Parameters

diff --git a/stuff/doc/PerspectiveDistortIwa.html b/stuff/doc/PerspectiveDistortIwa.html index f380d1b..631c5f6 100644 --- a/stuff/doc/PerspectiveDistortIwa.html +++ b/stuff/doc/PerspectiveDistortIwa.html @@ -1,4 +1,4 @@ - + Perspective Distort Fx Iwa @@ -6,26 +6,26 @@

Perspective Distort Fx Iwa

-

● 概要

-Follow時の地面の動き(手前が速く、奥が遅く動く=運動視差)を生成するためのエフェクトです。
-絵を左右に引き伸ばして台形に変形しますので、上下には歪みません。
-つまり、奥行きによる垂直方向の収縮はあらかじめ入力画像に盛り込まれている必要があります。
-また、並行移動する背景にこのエフェクトを適用する場合、背景の移動はSubXsheetの中にたたむ必要があります。

+

● Overview

+This effect is for generating the movement of the ground at the time of Follow (Front Moves Fast, Back Moves Slow = Motion Parallax).
+Since the deformed trapezoid is stretching the picture to the left & right, there is no vertical distortion.
+In other words, the contraction in the vertical direction by the depth must be incorporated in the pre-input image.
+Also, if you want to apply this effect to the background to parallel move, the movement of the background must be folded into the SubXsheet.

-

● 入力ポート

+

● Input Port

-

● パラメータ

+

● Parameters

diff --git a/stuff/doc/PinLightIno.pdf b/stuff/doc/PinLightIno.pdf index f1b7a4f..66dc7ac 100644 Binary files a/stuff/doc/PinLightIno.pdf and b/stuff/doc/PinLightIno.pdf differ diff --git a/stuff/doc/RadialBlurIno.pdf b/stuff/doc/RadialBlurIno.pdf index e6b9fa7..859771e 100644 Binary files a/stuff/doc/RadialBlurIno.pdf and b/stuff/doc/RadialBlurIno.pdf differ diff --git a/stuff/doc/ScreenIno.pdf b/stuff/doc/ScreenIno.pdf index b68ed69..ae828c0 100644 Binary files a/stuff/doc/ScreenIno.pdf and b/stuff/doc/ScreenIno.pdf differ diff --git a/stuff/doc/SoftLightIno.pdf b/stuff/doc/SoftLightIno.pdf index 5e73bd3..16f70c6 100644 Binary files a/stuff/doc/SoftLightIno.pdf and b/stuff/doc/SoftLightIno.pdf differ diff --git a/stuff/doc/SpectrumIwa.html b/stuff/doc/SpectrumIwa.html index 14310e7..fc88d0e 100644 --- a/stuff/doc/SpectrumIwa.html +++ b/stuff/doc/SpectrumIwa.html @@ -1,4 +1,4 @@ - + SpectrumFx Iwa @@ -6,42 +6,42 @@

SpectrumFx Iwa

-

● 概要

-入力画像の輝度に応じて、薄膜干渉による虹色パターンを出力するエフェクトです。
-本当はグレアの虹色は薄膜干渉ではないのですが、グレアの素材としてもそれらしい結果を得ることができます。 +

● Overview

+Depending on the brightness of the input image, it has the effect of outputing a rainbow color pattern like a thin film interference.
+Real iridescent glare is not a thin film interference, but you can get likely results for the glare of the material. -

● 入力ポート

+

● Input port

-

● パラメータ

+

● Parameters

diff --git a/stuff/doc/SpinBlurIno.pdf b/stuff/doc/SpinBlurIno.pdf index 05e6fc3..7502e8d 100644 Binary files a/stuff/doc/SpinBlurIno.pdf and b/stuff/doc/SpinBlurIno.pdf differ diff --git a/stuff/doc/SubtractIno.pdf b/stuff/doc/SubtractIno.pdf index 588b7b6..6a9b291 100644 Binary files a/stuff/doc/SubtractIno.pdf and b/stuff/doc/SubtractIno.pdf differ diff --git a/stuff/doc/TileIwa.html b/stuff/doc/TileIwa.html index c69814e..cda84bc 100644 --- a/stuff/doc/TileIwa.html +++ b/stuff/doc/TileIwa.html @@ -1,4 +1,4 @@ - + TileFx Iwa @@ -6,38 +6,38 @@

TileFx Iwa

-

● 概要

-入力画像をタイル状に並べるエフェクトです。
-Toonz既存の「TileFx」の機能を以下の点で強化したものです。 +

● Overview

+This has the effect of arranging the input image into tiles.
+In Toonz an existing function called "TileFx" was reinforced with the following points. -

● 入力ポート

+

● Input port

-

● パラメータ

+

● Parameters

diff --git a/stuff/doc/VividLightIno.pdf b/stuff/doc/VividLightIno.pdf index a64795d..b3d8ced 100644 Binary files a/stuff/doc/VividLightIno.pdf and b/stuff/doc/VividLightIno.pdf differ diff --git a/stuff/doc/WarpHVIno.pdf b/stuff/doc/WarpHVIno.pdf index 509ecab..5bb6573 100644 Binary files a/stuff/doc/WarpHVIno.pdf and b/stuff/doc/WarpHVIno.pdf differ diff --git a/stuff/doc/img/fx_iwa_bokeh.png b/stuff/doc/img/fx_iwa_bokeh.png deleted file mode 100644 index e4a97cf..0000000 Binary files a/stuff/doc/img/fx_iwa_bokeh.png and /dev/null differ diff --git a/stuff/doc/img/fx_iwa_bokeh_ref.png b/stuff/doc/img/fx_iwa_bokeh_ref.png deleted file mode 100644 index 67ee076..0000000 Binary files a/stuff/doc/img/fx_iwa_bokeh_ref.png and /dev/null differ diff --git a/stuff/doc/img/fx_iwa_motionblur.png b/stuff/doc/img/fx_iwa_motionblur.png index d6ab169..d40e53b 100644 Binary files a/stuff/doc/img/fx_iwa_motionblur.png and b/stuff/doc/img/fx_iwa_motionblur.png differ diff --git a/stuff/doc/img/fx_iwa_perspective_distort.png b/stuff/doc/img/fx_iwa_perspective_distort.png index db1ed2a..2cbfb79 100644 Binary files a/stuff/doc/img/fx_iwa_perspective_distort.png and b/stuff/doc/img/fx_iwa_perspective_distort.png differ diff --git a/stuff/doc/img/fx_iwa_pn_perspective.png b/stuff/doc/img/fx_iwa_pn_perspective.png index bb71ffd..cafa019 100644 Binary files a/stuff/doc/img/fx_iwa_pn_perspective.png and b/stuff/doc/img/fx_iwa_pn_perspective.png differ diff --git a/stuff/doc/img/fx_iwa_spectrum.png b/stuff/doc/img/fx_iwa_spectrum.png index 6b7af40..9f196b3 100644 Binary files a/stuff/doc/img/fx_iwa_spectrum.png and b/stuff/doc/img/fx_iwa_spectrum.png differ diff --git a/stuff/doc/img/fx_iwa_tile.png b/stuff/doc/img/fx_iwa_tile.png index d0cb05c..e35933e 100644 Binary files a/stuff/doc/img/fx_iwa_tile.png and b/stuff/doc/img/fx_iwa_tile.png differ diff --git a/stuff/doc/img/motionblur.png b/stuff/doc/img/motionblur.png index 60102f5..ee5787e 100644 Binary files a/stuff/doc/img/motionblur.png and b/stuff/doc/img/motionblur.png differ diff --git a/stuff/doc/img/perspective_distort.png b/stuff/doc/img/perspective_distort.png index a1190f7..73ab09d 100644 Binary files a/stuff/doc/img/perspective_distort.png and b/stuff/doc/img/perspective_distort.png differ diff --git a/stuff/doc/particlesFx.html b/stuff/doc/particlesFx.html index 28ddffd..eca56da 100644 --- a/stuff/doc/particlesFx.html +++ b/stuff/doc/particlesFx.html @@ -346,7 +346,7 @@ rt 3296;width:77pt'> ParticlesFx�̃p�����[�^�ꗗ + width:683pt'>ParticlesFx List of Parameters (Generator Image) ���͉摜�̕s�����x��Threshold�ȏ�̃G���A�ɁA�ϓ��Ƀp�[�e�B�N���𐶐�����B�Y���t���[���ɓ��͉摜�̃Z���������A���͑S�ʕs�����x��Threshold�����̏ꍇ�͓��͉摜�������̂Ɠ������ʂɂȂ�B + width:356pt'>Opacity of the input image is more than the area Threshold, equally to generate the particles. There is no cell of the input image in the appropriate frame, or entire opacity if there is less than Threshold in the same result, as there is no input image. �� @@ -377,7 +377,7 @@ rt �@ Threshold ��L�����ɗp�����邵�����l�i0-255�j + width:356pt'>Threshold to be used in the above product (0-255) �@ @@ -387,9 +387,9 @@ rt Multiple Generators in Control Image ���������ň͂܂ꂽ�s���������i�ȉ��u�������v�j����������ꍇ�ɉe������B
- ON�̂Ƃ��F ��������p�[�e�B�N���̗ʂ��e���������Ƃɋϓ��ɂȂ�B���Ȃ킿�A�����������قǃp�[�e�B�N���̔������x���Z���Ȃ�B
- OFF�̂Ƃ��F��������p�[�e�B�N���̖��x�͑S�Ă̕s���������ɂ‚��ċϓ��ɂȂ�B���Ȃ킿�A�����������قǃp�[�e�B�N���̗ʂ͌���B + width:356pt'>Surrounded by a transparent part & opaque part (hereinafter referred to as the "source") it will affect the case when there is more than one.
+ When ON: Amount of generated particles is equalized for each source. The generation density of the particles becomes darker with narrower sources.
+ When OFF: Density of generated particles is uniform for all of the opaque portion. There is a reduced amount of particles with smaller sources. �\ @@ -399,8 +399,7 @@ rt Use Control Image Gradation ���͉摜�̕s�����x�ɔ�Ⴕ�ăp�[�e�B�N���̔������x��ς���B���̃I�v�V�����͏��Multiple Generators in - Control Image�Ɠ����ɂ͎g�p�ł��Ȃ��B + width:356pt'>The proportion of the opacity of the input image changes the generation density of the particles. This option of the can not be used at the same time as the above Multiple Generators in Control Image. �\ @@ -409,7 +408,7 @@ rt �@ Center X ���͉摜�̖����ꍇ�́A�p�[�e�B�N�������G���A�̒��S�ʒu��X���W�B + width:356pt'>In the absence of an input image, X coordinate of the center position of the particle generation area. �\ @@ -418,7 +417,7 @@ rt �@ Center Y ���͉摜�̖����ꍇ�́A�p�[�e�B�N�������G���A�̒��S�ʒu��Y���W�B + width:356pt'>In the absence of an input image, Y coordinate of the center position of the particle generation area. �\ @@ -427,7 +426,7 @@ rt �@ Width ���͉摜�̖����ꍇ�́A�p�[�e�B�N�������G���A�i�l�p�`�j�̕��B + width:356pt'>In the absence of the input image, the width of the particle generation area (Square). �\ @@ -436,7 +435,7 @@ rt �@ Height ���͉摜�̖����ꍇ�́A�p�[�e�B�N�������G���A�i�l�p�`�j�̍����B + width:356pt'>In the absence of an input image, the height of the particle generation area (Square). �\ @@ -447,7 +446,7 @@ rt Starting Frame �p�[�e�B�N�����������n�߂�t���[�������B�V�[���̃t���[������B���̒l������B + width:356pt'>Frame time the particles begin to occur. Frame reference of the scene. Negative values are also taken. �\ @@ -456,7 +455,7 @@ rt �@ Birth Rate ���̃t���[���Ŕ�������p�[�e�B�N���� + width:356pt'>The number of particles that will occur in the frame �\ @@ -466,7 +465,7 @@ rt Animation Step Particle�̃A�j���[�V������Step�l�����ɂ���B������Step�l��2�ȏ�ɂ���ƁAParticle��Animation�Ŏw�肵���G�̕ω���Step�͐ݒ肵���l�̓��ɂȂ�B + width:356pt'>Particle animation Step value. * When this Step value is two or more, Step of the change in the picture that you specified in the Particle �� Animation is the square of the set value. �\ @@ -475,7 +474,7 @@ rt �@ Random Seed ����Fx�̂ŗp�����郉���_���p�����[�^�̃V�[�h�l + width:356pt'>Seed value of the random parameters used in this Fx �\ @@ -486,13 +485,11 @@ rt Animation Hold Frame: - Source�J�����iLevel�ł͂Ȃ��j�̊e�Z�����烉���_���Ɍ��肷��J�n�t���[���̂܂܌Œ�B
- Random Frame: �t���[���������_���ŕω�����B��LAnimationStep�l�̓��̎����B
- Column: Source�J�����ɓ����Ă���Z���̏��ɕω�����B�ŏ��̃t���[������X�^�[�g�B
- Column - Random Start: Source�J�����ɓ����Ă���Z���̏��ɕω�����B�����_���ȃt���[������X�^�[�g�B
- Column Swing - Random Start: - Source�J�����ɓ����Ă���Z���̏��ɕω����A�Ō�܂ł�������t�Đ�����B�����_���ȃt���[������X�^�[�g�B + width:356pt'>Hold Frame: Fixed remains from each cell in the Source column (not the Level) start frame to be determined randomly.
+ Random Frame: Frame changes at random. Uses the period of the square from the above-mentioned AnimationStep value.
+ Column: Changes the order of the cells that are contained in the Source column. Start from the beginning of the frame.
+ Column - Random Start: Changes the order of the cells that are contained in the Source column. Start from a random frame.
+ Column Swing - Random Start: Changes the order of the cells that are contained in the Source column, reverses playback when saying to the end. Start from a random frame. �\ @@ -515,7 +512,7 @@ rt width:62pt'>Speed Speed �p�[�e�B�N���̏����x + width:356pt'>Initial velocity of the particle �� @@ -525,7 +522,7 @@ rt Linked to Scale �p�[�e�B�N���̃X�s�[�h�̑召���T�C�Y�̑召�ƃ����N������B���s��������悤�Ɍ�����悤�ɁA�傫���قǑ����Ȃ�B���܂茵���ɔ��֌W�ɂ͂Ȃ��悤���B + width:356pt'>The size of the particles speed to be linked to the scale. It will looks like there is depth, the faster the greater. It seems to be a not too strictly proportional relationship. �\ @@ -534,7 +531,7 @@ rt �@ Speed Angle �p�[�e�B�N���̏����̌����B�O���������A90���E���� + width:356pt'>The orientation of the particles initial velocity. 0 downward direction, 90 the right direction �� @@ -544,7 +541,7 @@ rt Use Gradient Angle ON�̂Ƃ��ASpeed Angle��ControlImage�̌��z�x�N�g���ɏ��������킹��B + width:356pt'>When ON, adjusts the initial velocity to the gradient vector of the ControlImage Speed Angle. �@ @@ -554,7 +551,8 @@ rt width:62pt'>Size,Mass& Orientation Size �T�C�Y�̍ő�^�ŏ��͈̔͂��w�肷��BControlImage���L��ꍇ�́A���̋P�x�������Ƃ���قǑ傫���Ȃ�BControlImage�������ꍇ�̓����_���B + width:356pt'>To specify the maximum/minimum range of size. If there is a ControlImage, makes larger the place where the brightness is high. Only when ControlImage is not random. + �� @@ -564,8 +562,7 @@ rt Perspective Distribution ON�̂Ƃ��A���ASize��ControlImage�����݂���ꍇ�A���q�̖��x���T�C�Y�ɔ���Ⴓ���Ĕz�u����B�C�ʂ̔g�̂悤�ɁA���s���̂��闱�q�̔z�u�ɗp����B���̃I�v�V������ON�̂Ƃ��AUse - Control Image Gradation�I�v�V�����͖��������B + width:356pt'>When turned ON, & if the Size ControlImage is present, it is arranged to be inversely proportional to the density of the particles in size. As a sea waves level, it is used for the placement of depth particles. When this option is ON, Use Control Image Gradation option is ignored. �@ @@ -575,8 +572,8 @@ rt Use Control Image for the Whole Lifetime ON�̂Ƃ��A�e�t���[�����ɂ��̃p�[�e�B�N���̈ʒu��ControlImage�̋P�x�ɍ��킹�ăT�C�Y��ω�������B
- OFF�̂Ƃ��A�p�[�e�B�N���������̂�ControlImage������B�ȍ~�͏�����܂œ����T�C�Y�B + width:356pt'>When ON, changes the size to fit the brightness of ControlImage position of the particles for each frame.
+ When OFF, the ControlImage view is only at the time of the generation of particles. Same size until it later disappears. �\ @@ -585,7 +582,7 @@ rt �@ Mass �e�p�[�e�B�N���̎��ʂ̍ő�^�ŏ��͈̔͂��w�肷��B ���ʂ͉���Gravity�ŗ^������X�s�[�h�Ɋւ��W���ɂȂ�B + width:356pt'>To specify the maximum/minimum range of the mass for each particle. Mass is the coefficient related to the speed given by the Gravity below. �\ @@ -594,7 +591,7 @@ rt �@ Orientation �p�[�e�B�N���̏����̌����̊p�x�̍ő�^�ŏ��͈̔͂��w�肷��B�O�ʼn�]�Ȃ��A90�ʼnE��90�x��]�BTo specify the maximum/minimum range of the initial orientation angle of the particles. No rotation at 0, right is a 90-degree rotation at 90.  �� @@ -605,7 +602,7 @@ rt width:62pt'>Trail Trail �O�Ղ�\��������BTrail�Ŏw�肵���t���[���������ăt�F�[�h�A�E�g����B + width:356pt'>To display the trajectory. Multiplied by the number of frames specified by the Trail to fade out. �\ @@ -614,7 +611,7 @@ rt �@ Step �O�Ղ�Step�l�����ɕ\������B���Ȃ킿�A�O�Ղ̉摜�́iTrail�j/(Frame)���\������邱�ƂɂȂ�B + width:356pt'>To view the trajectory of the Step value every frame. That is, the image of the trajectory will be displayed Like (Trail)/(Frame). �\ @@ -623,7 +620,7 @@ rt Lifetime Lifetime �p�[�e�B�N���̎���(�t���[����)�̍ő�^�ŏ��͈̔͂��w�肷��B�����̓p�[�e�B�N��������n�߂Ă��犮�S�ɏ�����܂ł̃t���[�����B + width:356pt'>To specify the maximum/minimum range of the particles life (the number of frames). Frame length up to the life will make particles disappear completely from the time that they began to appear. �� @@ -633,7 +630,7 @@ rt Use Column Duration for Lifetime ON�̂Ƃ��A�p�[�e�B�N���̎�����SourceColumn�̒����ɂȂ�B + width:356pt'>When ON, the lifetime of the particles is the length of the SourceColumn. �\ @@ -644,7 +641,7 @@ rt Top Layer �p�[�e�B�N���̏d�ˏ��̗D�揇�ʂ��w�肷��B + width:356pt'>To specify the stacking order of the priority of the particles. �\ @@ -667,7 +664,7 @@ rt width:62pt'>Gravity Gravity �p�[�e�B�N���ɗ^����d�́i�������x�j�̒l���w�肷��B���̒l�ŋt�����ɂȂ�BControlImage����͂����ꍇ�͉���GravityAngle�̒l�͗p����ꂸ�A���͉摜�̋P�x�̌��z�iGradient�j���d�͂ƂȂ�B���邢���Ɉ����񂹂���B + width:356pt'>To specify the Gravity value (= Acceleration) to be applied to the particles. Made into the opposite direction using a negative value. if you enter a ControlImage the value of GravityAngle below will not be used, the slope of the input image brightness (Gradient) becomes the force of gravity. They are attracted to the bright pixels. �� @@ -677,7 +674,7 @@ rt Gravity Angle �d�͂̕������w�肷��B�O�ʼn������B90�ō������ɗ����Ă����B + width:356pt'>To specify the direction of Gravity. Downwards at 0. It goes down to the left at 90. �\ @@ -688,7 +685,7 @@ rt Friction �p�[�e�B�N���̉^�����~�߂�悤�Ȗ��C�̗͂̒l���w�肷��B���͉摜�̋P�x���ő�l�̕����ōő�̖��C�͂ƂȂ�B���͉摜��������Ζ��������B + width:356pt'>To specify the value of the friction of the force, such as to stop the movement of the particles. The brightness of the input image is the maximum frictional force at the portion of the maximum value. The input image is ignored if not used. �� @@ -699,8 +696,8 @@ rt Wind Intensity �p�[�e�B�N������l�ɓ��������̑������w�肷��B�����x�ł͂Ȃ��A���x�ɑ������B�v�͏����x�iBirth - Param��Speed�j�Ɠ����Ӗ��Ǝv����B + width:356pt'>Move the particles uniformly to specify the speed of the wind. Rather than the acceleration, it is added together to speed. The point seems to be the same meaning as the initial rate (Birth + Param��Speed) �\ @@ -709,7 +706,7 @@ rt �@ Wind Angle ���̌������w�肷��B0�Ő^��A90�ʼnE�����B + width:356pt'>To specify the direction of the wind. Upwards direction at 0, the right direction at 90. �\ @@ -719,7 +716,7 @@ rt width:62pt'>Scattering Horizontal �p�[�e�B�N���̃����_���ȓ����̃p�����[�^���w�肷��B�p�[�e�B�N���Ƀ����_���ɓ�����^���鐅�������̃X�s�[�h�l�͈̔͂��w�肷��B + width:356pt'>To specify the parameters of the random motion of particles. To specify the range of the horizontal direction of the speed value that gives movement to random particle. �� @@ -728,7 +725,7 @@ rt �@ Vertical �p�[�e�B�N���Ƀ����_���ɓ�����^���鐂�������̃X�s�[�h�l�͈̔͂��w�肷��B + width:356pt'>To specify a range for the vertical direction of the speed values that gives movement to random particles. �� @@ -737,9 +734,8 @@ rt �@ Swing Mode Random�F - �e�t���[������Horizontal/Vertical�l��ς���B�������A����Swing�l�Ŏw�肳�ꂽ�t���[�����̊Ԃ́AHorizontal/Vertical�l�̐����̕����͕ς��Ȃ��B
- Smooth�F ����Swing�l�Ŏw�肳�ꂽ�t���[�����̊ԁAHorizontal/Vertical�l�͕s�ρB + width:356pt'>Random: Changes the Horizontal/Vertical values for each frame. However, while the number of frames that have been specified in the Swing value below, the sign of Horizontal/Vertical value does not change.
+ Smooth: Smooth between the number of frames that have been specified in the underneath Swing value, Horizontal/Vertical value is unchanged. �\ @@ -748,7 +744,7 @@ rt �@ Swing SwingMode��Smooth�̂Ƃ��AHorizontal/Vertical�l���Đݒ肷��t���[���Ԋu�̍ŏ�/�ő�l���w�肷��B + width:356pt'>When SwingMode is Smooth, specifies the minimum/maximum value of the frame interval to re-set the Horizontal/Vertical value. �\ @@ -772,7 +768,7 @@ rt Rotation Speed �e�p�[�e�B�N���̉�]�X�s�[�h���w�肷��B1�t���[��������̉�]�p�i�P��degree�j + width:356pt'>To specify the rotation speed of each particle. Rotation angle per frame (in degrees) �\ @@ -781,7 +777,7 @@ rt �@ Extra Speed �e�p�[�e�B�N���Ƀ����_���Œlj������p�x�͈̔͂��w�肷��B + width:356pt'>Specify the angular range to be added at random for the respective particles. �\ @@ -790,8 +786,8 @@ rt �@ Swing Mode Random: �e�t���[������ExtraSpeed���v�Z���Ȃ����B
- Smooth: ����RotationSwing�Ŏw�肳�ꂽ�t���[�����̊ԁA����ExtraSpeed�l�ʼn�]����B + width:356pt'>Random: Re-calculate the ExtraSpeed for each frame.
+ Smooth: Smooth during the number of frames specified by the RotationSwing below, rotate at the same ExtraSpeed value. �\ @@ -801,7 +797,7 @@ rt Rotation Swing SwingMode��Smooth�̂Ƃ��AExtraSpeed�l���Đݒ肷��t���[���Ԋu�̍ŏ�/�ő�l���w�肷��B + width:356pt'>When SwingMode is Smooth, specifies the minimum/maximum value of the frame interval to re-set the ExtraSpeed value. �\ @@ -811,8 +807,7 @@ rt Follow Particles Movement ON�̂Ƃ��A�p�[�e�B�N���̉�]�p��i�s�����ɉ��킹��B�E���������ɐi�ގ��A��]�p�͂O�B - ���̉�]�͏�L��Rotation�Əd�˂����ł���B + width:356pt'>When turned ON, it goes along the rotation angle of the particles in the traveling direction. When going to the right horizontal direction, the rotation angle is 0. This rotation can use the above Rotation & be overlaid. �\ @@ -822,10 +817,9 @@ rt width:62pt'>Opacity Opacity �p�[�e�B�N���̕s�����x�̍ŏ�/�ő�l�B�ŏ��l����ő�l�܂Ńt�F�[�h�C�����āA�ŏ��l�܂Ńt�F�[�h�A�E�g����悤�ɂȂ�B
- - ControlImage����͂���ƁA���͉摜�̋P�x�l�ɉ����Ă��̃t���[�����_�ł̃p�[�e�B�N���̕s�����x�����܂�B�^�����̂Ƃ��ɍŏ��l�̕s�����x�ɂȂ�B�s�����x�͖��t���[���X�V�����B
- ControlImage�ɂ��Opacity�́A���̃t�F�[�h�C��/�A�E�g�Əd�˂������邱�Ƃ��ł���B + width:356pt'>Min/Max value of the opacity of the particles. Fades in from a minimum value to a maximum value, & fades out to the minimum value.
+ When you enter the ControlImage, opacity of particles in the frame time is determined in accordance with the luminance value of the input image. Black becomes the opacity of the minimum value at this time. The opacity is updated every frame.
+ Opacity by ControlImage may fade in/out & be superimposed to the image below it. �� @@ -835,7 +829,7 @@ rt Fade-in Frames �t�F�[�h�C���ɂ�����t���[���� + width:356pt'>Number of frames according to the Fade-in �\ @@ -845,7 +839,7 @@ rt fade-out Frames �t�F�[�h�A�E�g�ɂ�����t���[���� + width:356pt'>Number of frames according to the Fade-out �\ @@ -855,7 +849,7 @@ rt Trail Opacity BirthParam��Trail��Trail���w�肵���Ƃ��A���̋O�Ղ̃p�[�e�B�N���̕s�����x�̍ŏ�/�ő�l�����߂�B + width:356pt'>When you specify a Trail in BirthParam��Trail, determines the minimum/maximum value of the opacity of the particles of the trajectory. �\ @@ -866,7 +860,7 @@ rt Size Intensity �e�t���[�����Ƀ����_���ŕω�����T�C�Y�̑����l�i���j�̍ŏ�/�ő�l���w�肷��B + width:356pt'>To specify the minimum/maximum value of the increase or decrease of the size (%) that changes at random for each frame. �� @@ -889,9 +883,9 @@ rt width:62pt'>Birth Color Birth Color �p�[�e�B�N���������̐F�����肷��B
- ���ꂼ��̃p�[�e�B�N�������������Ƃ��ɁA�X�y�N�g���Ŏw�肳�ꂽ�F�͈̔͂��烉���_���ɑI�΂��B
- ControlImage���w�肵���ꍇ�ɂ́A���͉摜�́iPremultiply���ꂽ�jRGB�l���p�[�e�B�N���̐F�Ɏg�p����� + width:356pt'>To determine the color at the time of particle generation.
+ When each particle is produced, it is selected at random from the range of the specified color in the spectrum.
+ If you specify a ControlImage, the input image (which is Premultiply) RGB values are used for the color of the particles �� @@ -901,7 +895,7 @@ rt Birth Spread �@ + width:356pt'>Birth Spread of the particles. �\ @@ -911,7 +905,7 @@ rt Birth Intensity Birth Color�̉e���x�i���j + width:356pt'>Birth Color Intensity (%) �\ @@ -921,7 +915,7 @@ rt Pick Control Image's Color for Every Frame ���t���[���A���݂̃p�[�e�B�N���̈ʒu�ɂ���ControlImage�̃s�N�Z�����Q�Ƃ��A�p�[�e�B�N���̐F��ς��� + width:356pt'>Every frame, referring to the ControlImage pixels in the current position of the particles, changes the color of the particles �\ @@ -932,9 +926,9 @@ rt Fade-in Color �p�[�e�B�N�����t�F�[�h�C�����Ă����F�����肷��B
- �X�y�N�g���Ŏw�肳�ꂽ�F�͈̔͂��烉���_���ɑI�΂��B
- ControlImage���w�肵���ꍇ�ɂ́A���͉摜�́iPremultiply���ꂽ�jRGB�l���p�[�e�B�N���̐F�Ɏg�p����� + width:356pt'>Determines the Particles color to continue to Fade-in.
+ Selected randomly from the range of the specified color in the spectrum.
+ If you specify a ControlImage, the input image (which is Premultiply) RGB values are used for the color of the particles �� @@ -944,7 +938,7 @@ rt Fade-in Spread �@ + width:356pt'>Fade-in Spread of the particles. �\ @@ -953,7 +947,7 @@ rt �@ Frame Range �p�[�e�B�N���̔������琔����Fade-in Color�Ɏ���܂ł̃t���[���� + width:356pt'>The number of frames up to Fade-in Color, counting from the particle generation �\ @@ -963,7 +957,7 @@ rt Fade-in Intensity Fade-in Color�̉e���x�i���j + width:356pt'>Fade-in Color degree of influence (%) �\ @@ -974,9 +968,9 @@ rt Fade-out Color �p�[�e�B�N�����t�F�[�h�A�E�g���Ă����F�����肷��B
- �X�y�N�g���Ŏw�肳�ꂽ�F�͈̔͂��烉���_���ɑI�΂��B
- ControlImage���w�肵���ꍇ�ɂ́A���͉摜�́iPremultiply���ꂽ�jRGB�l���p�[�e�B�N���̐F�Ɏg�p����� + width:356pt'>Determines the Particles color to continue to Fade-out.
+ Selected randomly from the range of the specified color in the spectrum.
+ If you specify a ControlImage, the input image (which is Premultiply) RGB values are used for the color of the particles �� @@ -986,7 +980,7 @@ rt Fade-out Spread �@ + width:356pt'>Fade-out Spread of the particles. �\ @@ -995,7 +989,7 @@ rt �@ Frame Range �p�[�e�B�N���̏��ł���t�ɐ�����Fade-out Color�֕ω����n�߂�t���[���� + width:356pt'>From the disappearance of particle counting in reverse the number of frames that begins to change the Fade-out Color �\ @@ -1005,7 +999,7 @@ rt Fade-out Intensity Fade-out Color�̉e���x�i���j + width:356pt'>Fade-out Color degree of influence (%) �\ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/AddIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/AddIno.pdf" new file mode 100644 index 0000000..5ad8a6e Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/AddIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/BlurIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/BlurIno.pdf" new file mode 100644 index 0000000..a6f6219 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/BlurIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/BokehIwa.html" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/BokehIwa.html" new file mode 100644 index 0000000..bf5226d --- /dev/null +++ "b/stuff/doc/\346\227\245\346\234\254\350\252\236/BokehIwa.html" @@ -0,0 +1,63 @@ + + + + Bokeh Fx Iwa + + +

Bokeh Fx Iwa

+ +

● 概要

+レンズのボケを再現するエフェクトです。各レイヤのRGB値を露光値に変換して、絞り形状でボカし、合成します。
+フィルタ処理にフーリエ変換を用いて高速化を図っています。 + +

● 入力ポート

+ + +

● パラメータ

+共通パラメータ + +レイヤー毎のパラメータ + + +

● 注意点

+ + +

● ライセンス情報

+ + +
+This is the BSD-style license for the KissFFT.
+
+Copyright (c) 2003-2010 Mark Borgerding
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +
+
+ + + \ No newline at end of file diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/BokehRefIwa.html" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/BokehRefIwa.html" new file mode 100644 index 0000000..25f05bf --- /dev/null +++ "b/stuff/doc/\346\227\245\346\234\254\350\252\236/BokehRefIwa.html" @@ -0,0 +1,59 @@ + + + + Bokeh Fx Iwa + + +

Bokeh Ref Fx Iwa

+ +

● 概要

+レンズのボケを再現するエフェクトです。入力画像をデプス参照画像の階調を元に数枚のレイヤーに分割し、 +分割された各レイヤーのRGB値を露光値に変換して、絞り形状でボカし、合成します。離散フーリエ変換を使って、高速化を図っています。 +ボカし処理を行う前に、各レイヤーの、前景で隠れている部分をメディアンフィルタで延ばす処理を行っています。 + +

● 入力ポート

+ + +

● パラメータ

+ + +

● 注意点

+ + +

● ライセンス情報

+ + +
+This is the BSD-style license for the KissFFT.
+
+Copyright (c) 2003-2010 Mark Borgerding
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +
+
+ + + \ No newline at end of file diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/ChannelSelectorIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/ChannelSelectorIno.pdf" new file mode 100644 index 0000000..2ee6493 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/ChannelSelectorIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/ColorBurnIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/ColorBurnIno.pdf" new file mode 100644 index 0000000..0bb138a Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/ColorBurnIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/ColorDodgeIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/ColorDodgeIno.pdf" new file mode 100644 index 0000000..347e809 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/ColorDodgeIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/CrossDissolveIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/CrossDissolveIno.pdf" new file mode 100644 index 0000000..c9c5923 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/CrossDissolveIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/DarkenIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/DarkenIno.pdf" new file mode 100644 index 0000000..f5a4159 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/DarkenIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/DarkerColorIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/DarkerColorIno.pdf" new file mode 100644 index 0000000..e8868b3 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/DarkerColorIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/DensityIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/DensityIno.pdf" new file mode 100644 index 0000000..20da106 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/DensityIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/DivideIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/DivideIno.pdf" new file mode 100644 index 0000000..6b00470 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/DivideIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/FogIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/FogIno.pdf" new file mode 100644 index 0000000..748f5cc Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/FogIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/HLSAddIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/HLSAddIno.pdf" new file mode 100644 index 0000000..47ce60a Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/HLSAddIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/HLSAdjustIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/HLSAdjustIno.pdf" new file mode 100644 index 0000000..9ca423b Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/HLSAdjustIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/HLSNoiseIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/HLSNoiseIno.pdf" new file mode 100644 index 0000000..5924856 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/HLSNoiseIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/HSVAddIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/HSVAddIno.pdf" new file mode 100644 index 0000000..0d64768 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/HSVAddIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/HSVAdjustIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/HSVAdjustIno.pdf" new file mode 100644 index 0000000..c174488 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/HSVAdjustIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/HSVNoiseIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/HSVNoiseIno.pdf" new file mode 100644 index 0000000..51e1a0b Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/HSVNoiseIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/HardLightIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/HardLightIno.pdf" new file mode 100644 index 0000000..1cfcff1 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/HardLightIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/HardMixIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/HardMixIno.pdf" new file mode 100644 index 0000000..4cdde98 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/HardMixIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/LevelAutoIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/LevelAutoIno.pdf" new file mode 100644 index 0000000..6d5be50 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/LevelAutoIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/LevelMasterIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/LevelMasterIno.pdf" new file mode 100644 index 0000000..a6d2679 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/LevelMasterIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/LevelRGBAIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/LevelRGBAIno.pdf" new file mode 100644 index 0000000..a84c3b9 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/LevelRGBAIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/LightenIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/LightenIno.pdf" new file mode 100644 index 0000000..112cac7 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/LightenIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/LighterColorIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/LighterColorIno.pdf" new file mode 100644 index 0000000..bcfce35 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/LighterColorIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/LinearBurnIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/LinearBurnIno.pdf" new file mode 100644 index 0000000..32958d3 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/LinearBurnIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/LinearDodgeIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/LinearDodgeIno.pdf" new file mode 100644 index 0000000..f6b603b Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/LinearDodgeIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/LinearLightIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/LinearLightIno.pdf" new file mode 100644 index 0000000..cad01fb Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/LinearLightIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/MaxMinIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/MaxMinIno.pdf" new file mode 100644 index 0000000..1e696ac Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/MaxMinIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/MedianIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/MedianIno.pdf" new file mode 100644 index 0000000..85b32fe Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/MedianIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/MotionBlurIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/MotionBlurIno.pdf" new file mode 100644 index 0000000..bd6c836 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/MotionBlurIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/MotionBlurIwa.html" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/MotionBlurIwa.html" new file mode 100644 index 0000000..ca2d4d9 --- /dev/null +++ "b/stuff/doc/\346\227\245\346\234\254\350\252\236/MotionBlurIwa.html" @@ -0,0 +1,43 @@ + + + + MotionBlurFx Iwa + + +

MotionBlurFx Iwa

+ +

● 概要

+モーションブラーを生成するためのエフェクトです。
+「現在のフレームの前後の、シャッターを開放している時間」を指定すると、
+その間のオブジェクトの軌跡に合わせてブラーをかけます。
+iwa_BokehFxと同様、RGB値を露光値に変換してからブラーをかけますので、
+ハイライトの部分はぼかしても明るさを損なうことがありません。 + +

● 入力ポート

+ +

● パラメータ

+ + + + + \ No newline at end of file diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/MotionWindIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/MotionWindIno.pdf" new file mode 100644 index 0000000..91e0f27 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/MotionWindIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/MultiplyIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/MultiplyIno.pdf" new file mode 100644 index 0000000..c4a982d Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/MultiplyIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/NegateIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/NegateIno.pdf" new file mode 100644 index 0000000..6d76bbd Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/NegateIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/OverIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/OverIno.pdf" new file mode 100644 index 0000000..5e34291 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/OverIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/OverlayIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/OverlayIno.pdf" new file mode 100644 index 0000000..dfb1932 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/OverlayIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/PNCloudsIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/PNCloudsIno.pdf" new file mode 100644 index 0000000..20b5ad0 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/PNCloudsIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/PNPerspectiveIwa.html" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/PNPerspectiveIwa.html" new file mode 100644 index 0000000..7296f67 --- /dev/null +++ "b/stuff/doc/\346\227\245\346\234\254\350\252\236/PNPerspectiveIwa.html" @@ -0,0 +1,41 @@ + + + + PN PerspectiveFx Iwa + + +

PN PerspectiveFx Iwa

+ +

● 概要

+水平面上に奥行きのあるPerlinノイズパターンを生成するためのエフェクトです。
+通常のノイズパターンだけではなく、inoWarpHVFxのオフセット参照画像として出力するモードや、
+ノイズパターンを水面の波の高さとしたとき、カメラから見た水面のフレネル反射強度を出力するモードを +選択することができます。 + +

● パラメータ

+ + + + \ No newline at end of file diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/PerspectiveDistortIwa.html" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/PerspectiveDistortIwa.html" new file mode 100644 index 0000000..f380d1b --- /dev/null +++ "b/stuff/doc/\346\227\245\346\234\254\350\252\236/PerspectiveDistortIwa.html" @@ -0,0 +1,32 @@ + + + + Perspective Distort Fx Iwa + + +

Perspective Distort Fx Iwa

+ +

● 概要

+Follow時の地面の動き(手前が速く、奥が遅く動く=運動視差)を生成するためのエフェクトです。
+絵を左右に引き伸ばして台形に変形しますので、上下には歪みません。
+つまり、奥行きによる垂直方向の収縮はあらかじめ入力画像に盛り込まれている必要があります。
+また、並行移動する背景にこのエフェクトを適用する場合、背景の移動はSubXsheetの中にたたむ必要があります。

+ + +

● 入力ポート

+ + +

● パラメータ

+ + + + \ No newline at end of file diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/PinLightIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/PinLightIno.pdf" new file mode 100644 index 0000000..f1b7a4f Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/PinLightIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/RadialBlurIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/RadialBlurIno.pdf" new file mode 100644 index 0000000..e6b9fa7 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/RadialBlurIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/ScreenIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/ScreenIno.pdf" new file mode 100644 index 0000000..b68ed69 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/ScreenIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/SoftLightIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/SoftLightIno.pdf" new file mode 100644 index 0000000..5e73bd3 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/SoftLightIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/SpectrumIwa.html" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/SpectrumIwa.html" new file mode 100644 index 0000000..14310e7 --- /dev/null +++ "b/stuff/doc/\346\227\245\346\234\254\350\252\236/SpectrumIwa.html" @@ -0,0 +1,48 @@ + + + + SpectrumFx Iwa + + +

SpectrumFx Iwa

+ +

● 概要

+入力画像の輝度に応じて、薄膜干渉による虹色パターンを出力するエフェクトです。
+本当はグレアの虹色は薄膜干渉ではないのですが、グレアの素材としてもそれらしい結果を得ることができます。 + +

● 入力ポート

+ + +

● パラメータ

+ + + + \ No newline at end of file diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/SpinBlurIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/SpinBlurIno.pdf" new file mode 100644 index 0000000..05e6fc3 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/SpinBlurIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/SubtractIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/SubtractIno.pdf" new file mode 100644 index 0000000..588b7b6 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/SubtractIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/TileIwa.html" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/TileIwa.html" new file mode 100644 index 0000000..c69814e --- /dev/null +++ "b/stuff/doc/\346\227\245\346\234\254\350\252\236/TileIwa.html" @@ -0,0 +1,45 @@ + + + + TileFx Iwa + + +

TileFx Iwa

+ +

● 概要

+入力画像をタイル状に並べるエフェクトです。
+Toonz既存の「TileFx」の機能を以下の点で強化したものです。 + + +

● 入力ポート

+ + +

● パラメータ

+ + + + + \ No newline at end of file diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/VividLightIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/VividLightIno.pdf" new file mode 100644 index 0000000..a64795d Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/VividLightIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/WarpHVIno.pdf" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/WarpHVIno.pdf" new file mode 100644 index 0000000..509ecab Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/WarpHVIno.pdf" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_bokeh.png" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_bokeh.png" new file mode 100644 index 0000000..e4a97cf Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_bokeh.png" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_bokeh_ref.png" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_bokeh_ref.png" new file mode 100644 index 0000000..67ee076 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_bokeh_ref.png" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_motionblur.png" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_motionblur.png" new file mode 100644 index 0000000..d6ab169 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_motionblur.png" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_perspective_distort.png" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_perspective_distort.png" new file mode 100644 index 0000000..db1ed2a Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_perspective_distort.png" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_pn_perspective.png" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_pn_perspective.png" new file mode 100644 index 0000000..bb71ffd Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_pn_perspective.png" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_spectrum.png" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_spectrum.png" new file mode 100644 index 0000000..6b7af40 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_spectrum.png" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_tile.png" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_tile.png" new file mode 100644 index 0000000..d0cb05c Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/img/fx_iwa_tile.png" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/img/motionblur.png" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/img/motionblur.png" new file mode 100644 index 0000000..60102f5 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/img/motionblur.png" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/img/perspective_distort.png" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/img/perspective_distort.png" new file mode 100644 index 0000000..a1190f7 Binary files /dev/null and "b/stuff/doc/\346\227\245\346\234\254\350\252\236/img/perspective_distort.png" differ diff --git "a/stuff/doc/\346\227\245\346\234\254\350\252\236/particlesFx.html" "b/stuff/doc/\346\227\245\346\234\254\350\252\236/particlesFx.html" new file mode 100644 index 0000000..28ddffd --- /dev/null +++ "b/stuff/doc/\346\227\245\346\234\254\350\252\236/particlesFx.html" @@ -0,0 +1,1031 @@ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParticlesFx�̃p�����[�^�ꗗ
PageCategoryParam NameDescriptionControl Image
SourceSource(Generator + Image)���͉摜�̕s�����x��Threshold�ȏ�̃G���A�ɁA�ϓ��Ƀp�[�e�B�N���𐶐�����B�Y���t���[���ɓ��͉摜�̃Z���������A���͑S�ʕs�����x��Threshold�����̏ꍇ�͓��͉摜�������̂Ɠ������ʂɂȂ�B��
�@�@Threshold��L�����ɗp�����邵�����l�i0-255�j�@
�@�@Multiple + Generators in Control Image���������ň͂܂ꂽ�s���������i�ȉ��u�������v�j����������ꍇ�ɉe������B
+ ON�̂Ƃ��F ��������p�[�e�B�N���̗ʂ��e���������Ƃɋϓ��ɂȂ�B���Ȃ킿�A�����������قǃp�[�e�B�N���̔������x���Z���Ȃ�B
+ OFF�̂Ƃ��F��������p�[�e�B�N���̖��x�͑S�Ă̕s���������ɂ‚��ċϓ��ɂȂ�B���Ȃ킿�A�����������قǃp�[�e�B�N���̗ʂ͌���B
�\
�@�@Use Control + Image Gradation���͉摜�̕s�����x�ɔ�Ⴕ�ăp�[�e�B�N���̔������x��ς���B���̃I�v�V�����͏��Multiple Generators in + Control Image�Ɠ����ɂ͎g�p�ł��Ȃ��B�\
�@�@Center X���͉摜�̖����ꍇ�́A�p�[�e�B�N�������G���A�̒��S�ʒu��X���W�B�\
�@�@Center Y���͉摜�̖����ꍇ�́A�p�[�e�B�N�������G���A�̒��S�ʒu��Y���W�B�\
�@�@Width���͉摜�̖����ꍇ�́A�p�[�e�B�N�������G���A�i�l�p�`�j�̕��B�\
�@�@Height���͉摜�̖����ꍇ�́A�p�[�e�B�N�������G���A�i�l�p�`�j�̍����B�\
�@Particle GenerationStarting + Frame�p�[�e�B�N�����������n�߂�t���[�������B�V�[���̃t���[������B���̒l������B�\
�@�@Birth Rate���̃t���[���Ŕ�������p�[�e�B�N�����\
�@�@Animation + StepParticle�̃A�j���[�V������Step�l�����ɂ���B������Step�l��2�ȏ�ɂ���ƁAParticle��Animation�Ŏw�肵���G�̕ω���Step�͐ݒ肵���l�̓��ɂȂ�B�\
�@�@Random Seed����Fx�̂ŗp�����郉���_���p�����[�^�̃V�[�h�l�\
�@ParticleAnimationHold Frame: + Source�J�����iLevel�ł͂Ȃ��j�̊e�Z�����烉���_���Ɍ��肷��J�n�t���[���̂܂܌Œ�B
+ Random Frame: �t���[���������_���ŕω�����B��LAnimationStep�l�̓��̎����B
+ Column: Source�J�����ɓ����Ă���Z���̏��ɕω�����B�ŏ��̃t���[������X�^�[�g�B
+ Column - Random Start: Source�J�����ɓ����Ă���Z���̏��ɕω�����B�����_���ȃt���[������X�^�[�g�B
+ Column Swing - Random Start: + Source�J�����ɓ����Ă���Z���̏��ɕω����A�Ō�܂ł�������t�Đ�����B�����_���ȃt���[������X�^�[�g�B
�\
PageCategoryParam NameDescriptionControl Image
Birth ParamsSpeedSpeed�p�[�e�B�N���̏����x��
�@�@Linked to + Scale�p�[�e�B�N���̃X�s�[�h�̑召���T�C�Y�̑召�ƃ����N������B���s��������悤�Ɍ�����悤�ɁA�傫���قǑ����Ȃ�B���܂茵���ɔ��֌W�ɂ͂Ȃ��悤���B�\
�@�@Speed Angle�p�[�e�B�N���̏����̌����B�O���������A90���E������
�@�@Use + Gradient AngleON�̂Ƃ��ASpeed Angle��ControlImage�̌��z�x�N�g���ɏ��������킹��B�@
�@Size,Mass& OrientationSize�T�C�Y�̍ő�^�ŏ��͈̔͂��w�肷��BControlImage���L��ꍇ�́A���̋P�x�������Ƃ���قǑ傫���Ȃ�BControlImage�������ꍇ�̓����_���B��
�@�@Perspective + DistributionON�̂Ƃ��A���ASize��ControlImage�����݂���ꍇ�A���q�̖��x���T�C�Y�ɔ���Ⴓ���Ĕz�u����B�C�ʂ̔g�̂悤�ɁA���s���̂��闱�q�̔z�u�ɗp����B���̃I�v�V������ON�̂Ƃ��AUse + Control Image Gradation�I�v�V�����͖��������B�@
�@�@Use Control + Image for the Whole LifetimeON�̂Ƃ��A�e�t���[�����ɂ��̃p�[�e�B�N���̈ʒu��ControlImage�̋P�x�ɍ��킹�ăT�C�Y��ω�������B
+ OFF�̂Ƃ��A�p�[�e�B�N���������̂�ControlImage������B�ȍ~�͏�����܂œ����T�C�Y�B
�\
�@�@Mass�e�p�[�e�B�N���̎��ʂ̍ő�^�ŏ��͈̔͂��w�肷��B ���ʂ͉���Gravity�ŗ^������X�s�[�h�Ɋւ��W���ɂȂ�B�\
�@�@Orientation�p�[�e�B�N���̏����̌����̊p�x�̍ő�^�ŏ��͈̔͂��w�肷��B�O�ʼn�]�Ȃ��A90�ʼnE��90�x��]�B ��
�@TrailTrail�O�Ղ�\��������BTrail�Ŏw�肵���t���[���������ăt�F�[�h�A�E�g����B�\
�@�@Step�O�Ղ�Step�l�����ɕ\������B���Ȃ킿�A�O�Ղ̉摜�́iTrail�j/(Frame)���\������邱�ƂɂȂ�B�\
�@LifetimeLifetime�p�[�e�B�N���̎���(�t���[����)�̍ő�^�ŏ��͈̔͂��w�肷��B�����̓p�[�e�B�N��������n�߂Ă��犮�S�ɏ�����܂ł̃t���[�����B��
�@�@Use Column + Duration for LifetimeON�̂Ƃ��A�p�[�e�B�N���̎�����SourceColumn�̒����ɂȂ�B�\
�@Top LayerTop Layer�p�[�e�B�N���̏d�ˏ��̗D�揇�ʂ��w�肷��B�\
PageCategoryParam NameDescriptionControl Image
EnvironmentGravityGravity�p�[�e�B�N���ɗ^����d�́i�������x�j�̒l���w�肷��B���̒l�ŋt�����ɂȂ�BControlImage����͂����ꍇ�͉���GravityAngle�̒l�͗p����ꂸ�A���͉摜�̋P�x�̌��z�iGradient�j���d�͂ƂȂ�B���邢���Ɉ����񂹂���B��
�@�@Gravity + Angle�d�͂̕������w�肷��B�O�ʼn������B90�ō������ɗ����Ă����B�\
�@FrictionFriction�p�[�e�B�N���̉^�����~�߂�悤�Ȗ��C�̗͂̒l���w�肷��B���͉摜�̋P�x���ő�l�̕����ōő�̖��C�͂ƂȂ�B���͉摜��������Ζ��������B��
�@WindWind + Intensity�p�[�e�B�N������l�ɓ��������̑������w�肷��B�����x�ł͂Ȃ��A���x�ɑ������B�v�͏����x�iBirth + Param��Speed�j�Ɠ����Ӗ��Ǝv����B�\
�@�@Wind Angle���̌������w�肷��B0�Ő^��A90�ʼnE�����B�\
�@ScatteringHorizontal�p�[�e�B�N���̃����_���ȓ����̃p�����[�^���w�肷��B�p�[�e�B�N���Ƀ����_���ɓ�����^���鐅�������̃X�s�[�h�l�͈̔͂��w�肷��B��
�@�@Vertical�p�[�e�B�N���Ƀ����_���ɓ�����^���鐂�������̃X�s�[�h�l�͈̔͂��w�肷��B��
�@�@Swing ModeRandom�F + �e�t���[������Horizontal/Vertical�l��ς���B�������A����Swing�l�Ŏw�肳�ꂽ�t���[�����̊Ԃ́AHorizontal/Vertical�l�̐����̕����͕ς��Ȃ��B
+ Smooth�F ����Swing�l�Ŏw�肳�ꂽ�t���[�����̊ԁAHorizontal/Vertical�l�͕s�ρB
�\
�@�@SwingSwingMode��Smooth�̂Ƃ��AHorizontal/Vertical�l���Đݒ肷��t���[���Ԋu�̍ŏ�/�ő�l���w�肷��B�\
PageCategoryParam NameDescriptionControl Image
AnimationRotationRotation + Speed�e�p�[�e�B�N���̉�]�X�s�[�h���w�肷��B1�t���[��������̉�]�p�i�P��degree�j�\
�@�@Extra Speed�e�p�[�e�B�N���Ƀ����_���Œlj������p�x�͈̔͂��w�肷��B�\
�@�@Swing ModeRandom: �e�t���[������ExtraSpeed���v�Z���Ȃ����B
+ Smooth: ����RotationSwing�Ŏw�肳�ꂽ�t���[�����̊ԁA����ExtraSpeed�l�ʼn�]����B
�\
�@�@Rotation + SwingSwingMode��Smooth�̂Ƃ��AExtraSpeed�l���Đݒ肷��t���[���Ԋu�̍ŏ�/�ő�l���w�肷��B�\
�@�@Follow + Particles MovementON�̂Ƃ��A�p�[�e�B�N���̉�]�p��i�s�����ɉ��킹��B�E���������ɐi�ގ��A��]�p�͂O�B + ���̉�]�͏�L��Rotation�Əd�˂����ł���B�\
�@OpacityOpacity�p�[�e�B�N���̕s�����x�̍ŏ�/�ő�l�B�ŏ��l����ő�l�܂Ńt�F�[�h�C�����āA�ŏ��l�܂Ńt�F�[�h�A�E�g����悤�ɂȂ�B
+ + ControlImage����͂���ƁA���͉摜�̋P�x�l�ɉ����Ă��̃t���[�����_�ł̃p�[�e�B�N���̕s�����x�����܂�B�^�����̂Ƃ��ɍŏ��l�̕s�����x�ɂȂ�B�s�����x�͖��t���[���X�V�����B
+ ControlImage�ɂ��Opacity�́A���̃t�F�[�h�C��/�A�E�g�Əd�˂������邱�Ƃ��ł���B
��
�@�@Fade-in + Frames�t�F�[�h�C���ɂ�����t���[�����\
�@�@fade-out + Frames�t�F�[�h�A�E�g�ɂ�����t���[�����\
�@�@Trail + OpacityBirthParam��Trail��Trail���w�肵���Ƃ��A���̋O�Ղ̃p�[�e�B�N���̕s�����x�̍ŏ�/�ő�l�����߂�B�\
�@Size IncreaseSize Intensity�e�t���[�����Ƀ����_���ŕω�����T�C�Y�̑����l�i���j�̍ŏ�/�ő�l���w�肷��B��
PageCategoryParam NameDescriptionControl Image
ColorsBirth ColorBirth Color�p�[�e�B�N���������̐F�����肷��B
+ ���ꂼ��̃p�[�e�B�N�������������Ƃ��ɁA�X�y�N�g���Ŏw�肳�ꂽ�F�͈̔͂��烉���_���ɑI�΂��B
+ ControlImage���w�肵���ꍇ�ɂ́A���͉摜�́iPremultiply���ꂽ�jRGB�l���p�[�e�B�N���̐F�Ɏg�p�����
��
�@�@Birth + Spread�@�\
�@�@Birth + IntensityBirth Color�̉e���x�i���j�\
�@�@Pick Control Image's Color for Every Frame���t���[���A���݂̃p�[�e�B�N���̈ʒu�ɂ���ControlImage�̃s�N�Z�����Q�Ƃ��A�p�[�e�B�N���̐F��ς����\
�@Fade-in + ColorFade-in + Color�p�[�e�B�N�����t�F�[�h�C�����Ă����F�����肷��B
+ �X�y�N�g���Ŏw�肳�ꂽ�F�͈̔͂��烉���_���ɑI�΂��B
+ ControlImage���w�肵���ꍇ�ɂ́A���͉摜�́iPremultiply���ꂽ�jRGB�l���p�[�e�B�N���̐F�Ɏg�p�����
��
�@�@Fade-in + Spread�@�\
�@�@Frame Range�p�[�e�B�N���̔������琔����Fade-in Color�Ɏ���܂ł̃t���[�����\
�@�@Fade-in + IntensityFade-in Color�̉e���x�i���j�\
�@Fade-out + ColorFade-out + Color�p�[�e�B�N�����t�F�[�h�A�E�g���Ă����F�����肷��B
+ �X�y�N�g���Ŏw�肳�ꂽ�F�͈̔͂��烉���_���ɑI�΂��B
+ ControlImage���w�肵���ꍇ�ɂ́A���͉摜�́iPremultiply���ꂽ�jRGB�l���p�[�e�B�N���̐F�Ɏg�p�����
��
�@�@Fade-out + Spread�@�\
�@�@Frame Range�p�[�e�B�N���̏��ł���t�ɐ�����Fade-out Color�֕ω����n�߂�t���[�����\
�@�@Fade-out + IntensityFade-out Color�̉e���x�i���j�\
+ +
+ + + + + + + + diff --git a/stuff/profiles/layouts/fxs/STD_linearGradientFx.xml b/stuff/profiles/layouts/fxs/STD_linearGradientFx.xml index 7eeebcb..de531e5 100644 --- a/stuff/profiles/layouts/fxs/STD_linearGradientFx.xml +++ b/stuff/profiles/layouts/fxs/STD_linearGradientFx.xml @@ -4,6 +4,7 @@ color1 color2 color1 color2 + curveType wave_amplitude wave_frequency diff --git a/stuff/profiles/layouts/fxs/STD_multiLinearGradientFx.xml b/stuff/profiles/layouts/fxs/STD_multiLinearGradientFx.xml index 988baef..8084dfc 100644 --- a/stuff/profiles/layouts/fxs/STD_multiLinearGradientFx.xml +++ b/stuff/profiles/layouts/fxs/STD_multiLinearGradientFx.xml @@ -4,6 +4,7 @@ count cycle colors + curveType wave_amplitude wave_frequency diff --git a/stuff/profiles/layouts/fxs/STD_multiRadialGradientFx.xml b/stuff/profiles/layouts/fxs/STD_multiRadialGradientFx.xml index 738463a..8966e16 100644 --- a/stuff/profiles/layouts/fxs/STD_multiRadialGradientFx.xml +++ b/stuff/profiles/layouts/fxs/STD_multiRadialGradientFx.xml @@ -4,6 +4,7 @@ count cycle colors + curveType diff --git a/stuff/profiles/layouts/fxs/STD_radialGradientFx.xml b/stuff/profiles/layouts/fxs/STD_radialGradientFx.xml index 9a9a0d5..a5eb1d2 100644 --- a/stuff/profiles/layouts/fxs/STD_radialGradientFx.xml +++ b/stuff/profiles/layouts/fxs/STD_radialGradientFx.xml @@ -5,6 +5,7 @@ period color2 color1 color2 + curveType diff --git a/stuff/profiles/layouts/fxs/STD_rgbmCutFx.xml b/stuff/profiles/layouts/fxs/STD_rgbmCutFx.xml index da3f2ca..ef8a9c4 100644 --- a/stuff/profiles/layouts/fxs/STD_rgbmCutFx.xml +++ b/stuff/profiles/layouts/fxs/STD_rgbmCutFx.xml @@ -1,5 +1,5 @@ - + r_range g_range b_range diff --git a/stuff/profiles/layouts/rooms/Default/menubar_template.xml b/stuff/profiles/layouts/rooms/Default/menubar_template.xml index 06dafa4..1898a36 100644 --- a/stuff/profiles/layouts/rooms/Default/menubar_template.xml +++ b/stuff/profiles/layouts/rooms/Default/menubar_template.xml @@ -1,254 +1,318 @@ - - MI_NewScene - MI_LoadScene - MI_SaveAll - MI_SaveScene - MI_SaveSceneAs - MI_OpenRecentScene - MI_RevertScene - - MI_LoadFolder - MI_LoadSubSceneFile - - MI_NewLevel - MI_LoadLevel - MI_SaveAllLevels - MI_SaveLevel - MI_SaveLevelAs - MI_ExportLevel - MI_OpenRecentLevel - - MI_ConvertFileWithInput - - MI_LoadColorModel - - MI_ImportMagpieFile - - MI_NewProject - MI_ProjectSettings - MI_SaveDefaultSettings - - MI_PreviewSettings - MI_Preview - - MI_OutputSettings - MI_Render - MI_FastRender - MI_SoundTrack - - MI_PrintXsheet - MI_Print - - MI_Preferences - MI_ShortcutPopup - - MI_RunScript - MI_OpenScriptConsole - - MI_Quit - MI_ReloadStyle - - - MI_Undo - MI_Redo - - MI_Cut - MI_Copy - MI_Paste - MI_PasteInto - - MI_Clear - MI_Insert - - MI_SelectAll - MI_InvertSelection - - MI_RemoveEndpoints - - MI_Group - MI_Ungroup - MI_EnterGroup - MI_ExitGroup - - MI_BringToFront - MI_BringForward - MI_SendBack - MI_SendBackward - - MI_TouchGestureControl - - - MI_DefineScanner - MI_ScanSettings - MI_Scan - MI_SetScanCropbox - MI_ResetScanCropbox - - MI_CleanupSettings - MI_CleanupPreview - MI_CameraTest - MI_Cleanup - - MI_PencilTest - - - MI_AddFrames - MI_Renumber - MI_ReplaceLevel - MI_RevertToCleanedUp - MI_RevertToLastSaved - MI_ConvertToVectors - MI_ConvertToToonzRaster - MI_ConvertVectorToVector - MI_Tracking - - MI_ExposeResource - MI_EditLevel - - MI_LevelSettings - MI_FileInfo - - MI_AdjustLevels - MI_AdjustThickness - MI_Antialias - MI_Binarize - MI_BrightnessAndContrast - MI_CanvasSize - MI_LinesFade - - MI_RemoveUnused - - - MI_SceneSettings - MI_CameraSettings - - MI_OpenChild - MI_CloseChild - MI_SaveSubxsheetAs - MI_Collapse - MI_Resequence - MI_CloneChild - MI_ExplodeChild - MI_ToggleEditInPlace - - MI_ApplyMatchLines - MI_MergeCmapped - - MI_MergeColumns - MI_DeleteMatchLines - MI_DeleteInk - - MI_InsertFx - MI_NewOutputFx - MI_NewNoteLevel - - MI_InsertSceneFrame - MI_RemoveSceneFrame - MI_InsertGlobalKeyframe - MI_RemoveGlobalKeyframe - - MI_NextFrame - MI_PrevFrame - MI_FirstFrame - MI_LastFrame - MI_NextDrawing - MI_PrevDrawing - MI_NextStep - MI_PrevStep - - MI_LipSyncPopup - - - MI_Reverse - MI_Swing - MI_Random - MI_Increment - MI_Dup - - MI_ResetStep - MI_IncreaseStep - MI_DecreaseStep - MI_Step2 - MI_Step3 - MI_Step4 - MI_Each2 - MI_Each3 - MI_Each4 - MI_Rollup - MI_Rolldown - MI_TimeStretch - MI_AutoInputCellNumber - - MI_DrawingSubForward - MI_DrawingSubBackward - MI_DrawingSubGroupForward - MI_DrawingSubGroupBackward - - MI_Autorenumber - MI_Duplicate - MI_MergeFrames - MI_CloneLevel - - - MI_ViewCamera - MI_ViewTable - MI_FieldGuide - MI_SafeArea - MI_ViewBBox - MI_ViewColorcard - MI_ViewGuide - MI_ViewRuler - - MI_TCheck - MI_ICheck - MI_Ink1Check - MI_PCheck - MI_IOnly - MI_BCheck - MI_GCheck - MI_ACheck - - MI_ShiftTrace - MI_EditShift - MI_NoShift - MI_ResetShift - - MI_RasterizePli - - MI_Link - - - MI_DockingCheck - - MI_OpenBatchServers - MI_OpenCleanupSettings - MI_OpenColorModel - MI_OpenFileBrowser - MI_OpenFileViewer - MI_OpenFunctionEditor - MI_OpenFilmStrip - MI_OpenPalette - MI_OpenFileBrowser2 - MI_OpenSchematic - MI_OpenStudioPalette - MI_OpenStyleControl - MI_OpenTasks - MI_OpenTMessage - MI_OpenToolbar - MI_OpenCommandToolbar - MI_OpenToolOptionBar - MI_OpenLevelView - MI_OpenComboViewer - MI_OpenXshView - MI_OpenTimelineView - MI_OpenHistoryPanel - MI_AudioRecording - - MI_ResetRoomLayout - - - MI_StartupPopup - MI_About - - \ No newline at end of file + + MI_NewScene + MI_LoadScene + MI_SaveAll + MI_SaveScene + MI_SaveSceneAs + MI_OpenRecentScene + MI_RevertScene + + MI_LoadFolder + MI_LoadSubSceneFile + + MI_ConvertFileWithInput + + MI_LoadColorModel + + + MI_NewProject + MI_ProjectSettings + + MI_SaveDefaultSettings + + + + MI_ImportMagpieFile + + + MI_SoundTrack + + + MI_PrintXsheet + MI_Print + + + MI_RunScript + MI_OpenScriptConsole + + + MI_Preferences + MI_ShortcutPopup + + MI_Quit + + + MI_Undo + MI_Redo + + MI_Cut + MI_Copy + MI_Paste + MI_PasteAbove + MI_PasteInto + MI_Insert + MI_InsertAbove + MI_Clear + + MI_SelectAll + MI_InvertSelection + + + MI_Group + MI_Ungroup + MI_EnterGroup + MI_ExitGroup + + + + MI_BringToFront + MI_BringForward + MI_SendBack + MI_SendBackward + + + + MI_DefineScanner + MI_ScanSettings + MI_Scan + MI_SetScanCropbox + MI_ResetScanCropbox + + MI_CleanupSettings + MI_CleanupPreview + MI_OpacityCheck + MI_CameraTest + MI_Cleanup + + MI_PencilTest + MI_Autocenter + + + + MI_NewLevel + + MI_NewToonzRasterLevel + MI_NewVectorLevel + MI_NewRasterLevel + MI_NewNoteLevel + + MI_LoadLevel + MI_SaveLevel + MI_SaveLevelAs + MI_SaveAllLevels + MI_OpenRecentLevel + MI_ExportLevel + + MI_AddFrames + MI_Renumber + MI_ReplaceLevel + MI_RevertToCleanedUp + MI_RevertToLastSaved + MI_Tracking + + + MI_BrightnessAndContrast + MI_AdjustLevels + MI_AdjustThickness + MI_Antialias + MI_Binarize + MI_LinesFade + + + MI_RemoveEndpoints + MI_ConvertVectorToVector + + + MI_ConvertToVectors + MI_ConvertToToonzRaster + + + MI_ExposeResource + MI_EditLevel + + MI_CanvasSize + MI_LevelSettings + MI_FileInfo + MI_ReplaceParentDirectory + + MI_RemoveUnused + + + MI_SceneSettings + MI_CameraSettings + + MI_OpenChild + MI_CloseChild + MI_SaveSubxsheetAs + MI_Collapse + MI_Resequence + MI_CloneChild + MI_ExplodeChild + MI_ToggleEditInPlace + + MI_ApplyMatchLines + MI_MergeCmapped + + MI_MergeColumns + MI_DeleteMatchLines + MI_DeleteInk + + MI_InsertFx + MI_NewOutputFx + + MI_InsertSceneFrame + MI_RemoveSceneFrame + MI_InsertGlobalKeyframe + MI_RemoveGlobalKeyframe + + MI_LipSyncPopup + + MI_RemoveEmptyColumns + + + MI_Reverse + MI_Swing + MI_Random + MI_Increment + MI_Dup + + + MI_Reframe1 + MI_Reframe2 + MI_Reframe3 + MI_Reframe4 + MI_ReframeWithEmptyInbetweens + + + MI_IncreaseStep + MI_DecreaseStep + MI_ResetStep + MI_Step2 + MI_Step3 + MI_Step4 + + + MI_Each2 + MI_Each3 + MI_Each4 + + MI_Rollup + MI_Rolldown + MI_TimeStretch + MI_AutoInputCellNumber + + + MI_DrawingSubBackward + MI_DrawingSubForward + MI_DrawingSubGroupBackward + MI_DrawingSubGroupForward + + + MI_Autorenumber + MI_Duplicate + MI_MergeFrames + MI_CloneLevel + + MI_FillEmptyCell + + + MI_Play + MI_Pause + MI_Loop + + MI_FirstFrame + MI_LastFrame + MI_PrevFrame + MI_NextFrame + MI_PrevStep + MI_NextStep + + MI_PrevDrawing + MI_NextDrawing + + MI_Link + + + MI_PreviewSettings + MI_Preview + MI_SavePreviewedFrames + + MI_OutputSettings + MI_Render + + MI_FastRender + + + MI_ViewTable + MI_ViewCamera + MI_ViewColorcard + MI_ViewBBox + + MI_SafeArea + MI_FieldGuide + MI_ViewRuler + MI_ViewGuide + + MI_TCheck + MI_ICheck + MI_Ink1Check + MI_PCheck + MI_IOnly + MI_BCheck + MI_GCheck + MI_ACheck + + MI_ShiftTrace + MI_EditShift + MI_NoShift + MI_ResetShift + + MI_RasterizePli + + + + MI_DockingCheck + + MI_ResetRoomLayout + + + MI_OpenCommandToolbar + MI_OpenToolbar + MI_OpenToolOptionBar + + MI_OpenStyleControl + MI_OpenPalette + MI_OpenStudioPalette + MI_OpenColorModel + + MI_OpenComboViewer + MI_OpenLevelView + MI_OpenFileViewer + + MI_OpenXshView + MI_OpenTimelineView + MI_OpenFunctionEditor + MI_OpenSchematic + MI_OpenFilmStrip + + MI_OpenFileBrowser + MI_OpenFileBrowser2 + + MI_OpenCleanupSettings + MI_OpenTasks + MI_OpenBatchServers + MI_OpenTMessage + MI_OpenHistoryPanel + MI_AudioRecording + MI_StartupPopup + + MI_MaximizePanel + MI_FullScreenWindow + + + MI_OpenOnlineManual + + MI_About + + diff --git a/toonz/sources/CMakeLists.txt b/toonz/sources/CMakeLists.txt index 662afbd..d9b0c34 100644 --- a/toonz/sources/CMakeLists.txt +++ b/toonz/sources/CMakeLists.txt @@ -203,7 +203,7 @@ elseif(BUILD_ENV_UNIXLIKE) find_package(Qt5Widgets) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -lstdc++ -std=c++11") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lstdc++ -std=c++11") endif() add_definitions( @@ -541,7 +541,7 @@ if(BUILD_ENV_MSVC AND MSVC_VERSION EQUAL 1800) endif() # generate Qt translations and messages -set(LANGUAGES japanese italian french spanish chinese german russian korean) +set(LANGUAGES japanese italian french spanish chinese german russian korean czech) function(add_translation module) set(translation) @@ -602,8 +602,6 @@ if(BUILD_ENV_APPLE) set_target_properties(OpenToonz PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/../cmake/BundleInfo.plist.in) endif() -if(BUILD_ENV_UNIXLIKE) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/xdg-data/io.github.OpenToonz.appdata.xml DESTINATION ${CMAKE_INSTALL_PREFIX}/share/metainfo) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/xdg-data/io.github.OpenToonz.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/xdg-data/io.github.OpenToonz.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/256x256/apps) +if(BUILD_ENV_UNIXLIKE AND NOT BUILD_TARGET_WIN) + add_subdirectory(xdg-data) endif() diff --git a/toonz/sources/common/expressions/ttokenizer.cpp b/toonz/sources/common/expressions/ttokenizer.cpp index 1c39fe1..d6b2372 100644 --- a/toonz/sources/common/expressions/ttokenizer.cpp +++ b/toonz/sources/common/expressions/ttokenizer.cpp @@ -101,8 +101,7 @@ void Tokenizer::setBuffer(std::string buffer) { const std::string ss[] = {"==", "!=", ">=", "<=", "||", "&&"}; - const int m = tArrayCount(ss); - if (std::find(ss, ss + m, token) != ss + m) + if (std::find(std::begin(ss), std::end(ss), token) != std::end(ss)) i += 2; else token = std::string(1, s[i++]); @@ -167,4 +166,4 @@ Token Tokenizer::getTokenFromPos(int pos) const { //=================================================================== -} // TSyntax +} // namespace TSyntax diff --git a/toonz/sources/common/tapptools/tenv.cpp b/toonz/sources/common/tapptools/tenv.cpp index 05528cb..8b69f16 100644 --- a/toonz/sources/common/tapptools/tenv.cpp +++ b/toonz/sources/common/tapptools/tenv.cpp @@ -41,6 +41,7 @@ const std::map systemPathMap{ class EnvGlobals { // singleton ToonzVersion m_version; + std::string m_applicationFileName; // May differ from application name std::string m_applicationVersion; std::string m_applicationFullName; std::string m_moduleName; @@ -76,7 +77,7 @@ public: QString settingsPath; #ifdef MACOSX - settingsPath = QString::fromStdString(getApplicationName()) + + settingsPath = QString::fromStdString(getApplicationFileName()) + QString(".app") + QString("/Contents/Resources/SystemVar.ini"); #else /* Generic Unix */ @@ -181,6 +182,11 @@ public: updateEnvFile(); } + void setApplicationFileName(std::string appFileName) { + m_applicationFileName = appFileName; + setWorkingDirectory(); + } + std::string getApplicationFileName() { return m_applicationFileName; } std::string getApplicationName() { return m_version.getAppName(); } std::string getApplicationVersion() { return m_applicationVersion; } std::string getApplicationVersionWithoutRevision() { @@ -223,6 +229,24 @@ public: TFilePath(m_workingDirectory + "\\portablestuff\\"); TFileStatus portableStatus(portableCheck); m_isPortable = portableStatus.doesExist(); + +#ifdef MACOSX + // macOS 10.12 (Sierra) translocates applications before running them + // depending on how it was installed. This separates the app from the + // portablestuff folder and we don't know where it is so we stop treating it + // as a portable. Placing portablestuff inside OpenToonz.app will keep + // everything together when it translocates. + if (!m_isPortable) { + portableCheck = + TFilePath(m_workingDirectory + "\\" + getApplicationFileName() + + ".app\\portablestuff\\"); + portableStatus = TFileStatus(portableCheck); + m_isPortable = portableStatus.doesExist(); + if (m_isPortable) + m_workingDirectory = + portableCheck.getParentDir().getQString().toStdString(); + } +#endif } std::string getWorkingDirectory() { return m_workingDirectory; } @@ -476,6 +500,22 @@ void Variable::assignValue(std::string value) { //=================================================================== +void TEnv::setApplicationFileName(std::string appFileName) { + TFilePath fp(appFileName); +#ifdef MACOSX + if (fp.getWideName().find(L".app")) + for (int i = 0; i < 3; i++) fp = fp.getParentDir(); +#elif LINUX + if (fp.getWideName().find(L".appimage")) + for (int i = 0; i < 2; i++) fp = fp.getParentDir(); +#endif + EnvGlobals::instance()->setApplicationFileName(fp.getName()); +} + +std::string TEnv::getApplicationFileName() { + return EnvGlobals::instance()->getApplicationFileName(); +} + std::string TEnv::getApplicationName() { return EnvGlobals::instance()->getApplicationName(); } diff --git a/toonz/sources/common/tfx/tmacrofx.cpp b/toonz/sources/common/tfx/tmacrofx.cpp index c643533..4d4c2f7 100644 --- a/toonz/sources/common/tfx/tmacrofx.cpp +++ b/toonz/sources/common/tfx/tmacrofx.cpp @@ -220,9 +220,9 @@ TFx *TMacroFx::clone(bool recursive) const { assert(fx); clones[i] = fx->clone(false); assert(table.count(fx) == 0); - table[fx] = i; + table[fx] = i; if (fx == m_root.getPointer()) rootIndex = i; - TFx *linkedFx = fx->getLinkedFx(); + TFx *linkedFx = fx->getLinkedFx(); if (linkedFx && table.find(linkedFx) != table.end()) clones[i]->linkParams(clones[table[linkedFx]].getPointer()); } @@ -476,9 +476,14 @@ void TMacroFx::loadData(TIStream &is) { std::string tagName; while (is.openChild(tagName)) { if (tagName == "root") { + // set the flag here in order to prevent the leaf macro fx in the tree + // to try to link this fx before finish loading + m_isLoading = true; TPersist *p = 0; is >> p; m_root = dynamic_cast(p); + // release the flag + m_isLoading = false; } else if (tagName == "nodes") { while (!is.eos()) { TPersist *p = 0; @@ -492,6 +497,14 @@ void TMacroFx::loadData(TIStream &is) { m_fxs.push_back(fx); } } + // collecting params just after loading nodes since they may need on + // loading "super" tag in case it is linked with another macro fx + collectParams(this); + // link parameters if there is a waiting fx for linking with this + if (m_waitingLinkFx) { + m_waitingLinkFx->linkParams(this); + m_waitingLinkFx = nullptr; + } } else if (tagName == "ports") { int i = 0; while (is.matchTag(tagName)) { @@ -533,7 +546,6 @@ void TMacroFx::loadData(TIStream &is) { throw TException("unexpected tag " + tagName); is.closeChild(); } - collectParams(this); } //-------------------------------------------------- @@ -565,5 +577,20 @@ void TMacroFx::saveData(TOStream &os) { } //-------------------------------------------------- + +void TMacroFx::linkParams(TFx *src) { + // in case the src fx is not yet loaded + // (i.e. we are in loading the src fx tree), + // wait linking the parameters until loading src is completed + TMacroFx *srcMacroFx = dynamic_cast(src); + if (srcMacroFx && srcMacroFx->isLoading()) { + srcMacroFx->setWaitingLinkFx(this); + return; + } + + TFx::linkParams(src); +} + +//-------------------------------------------------- FX_IDENTIFIER(TMacroFx, "macroFx") // FX_IDENTIFIER_IS_HIDDEN(TMacroFx, "macroFx") diff --git a/toonz/sources/common/tfx/tpassivecachemanager.cpp b/toonz/sources/common/tfx/tpassivecachemanager.cpp index 26f427b..c2db711 100644 --- a/toonz/sources/common/tfx/tpassivecachemanager.cpp +++ b/toonz/sources/common/tfx/tpassivecachemanager.cpp @@ -312,21 +312,6 @@ public: return result; } - Iterator find(const RowKey &r, const ColKey &c) { - Iterator result(this); - result.m_rowIt = m_table.find(r); - if (result.m_rowIt == m_table.end()) return; - result.m_it = result.m_rowIt->second.find(c); - if (result.m_it == result.m_rowIt->second.end()) - result.m_rowIt = m_table.end(); - return result; - } - - Iterator erase(const RowKey &r, const ColKey &c) { - Iterator it(find(r, c)); - return erase(it); - } - Iterator erase(const Iterator &it) { Iterator result(it); Row &row = it.m_rowIt->second; diff --git a/toonz/sources/common/tfx/trenderer.cpp b/toonz/sources/common/tfx/trenderer.cpp index 60ea393..93c4ca4 100644 --- a/toonz/sources/common/tfx/trenderer.cpp +++ b/toonz/sources/common/tfx/trenderer.cpp @@ -26,9 +26,6 @@ #include #include -// tcg includes -#include "tcg/tcg_deleter_types.h" - // Debug //#define DIAGNOSTICS //#include "diagnostics.h" @@ -1384,7 +1381,7 @@ void TRendererImp::startRendering( std::vector &m_tasksVector; ~TasksCleaner() { std::for_each(m_tasksVector.begin(), m_tasksVector.end(), - tcg::deleter()); + std::default_delete()); } } tasksCleaner = {tasksVector}; diff --git a/toonz/sources/common/tiio/tiio_jpg_exif.cpp b/toonz/sources/common/tiio/tiio_jpg_exif.cpp index c7613dd..36774b8 100644 --- a/toonz/sources/common/tiio/tiio_jpg_exif.cpp +++ b/toonz/sources/common/tiio/tiio_jpg_exif.cpp @@ -135,7 +135,7 @@ const int TAG_IMAGE_UNIQUE_ID = 0xA420; typedef struct { unsigned short Tag; - char *Desc; + const char *Desc; } TagTable_t; const TagTable_t TagTable[] = { @@ -253,7 +253,7 @@ const int TAG_TABLE_SIZE = (sizeof(TagTable) / sizeof(TagTable_t)); const int TRUE = 1; const int FALSE = 0; -} +} // namespace //-------------------------------------------------------------------------- // Convert a 16 bit unsigned value from file's native byte order @@ -633,7 +633,7 @@ void JpgExifReader::ProcessExifDir(unsigned char *DirStart, break; case FMT_UNDEFINED: - // Undefined is typically an ascii string. + // Undefined is typically an ascii string. case FMT_STRING: // String arrays printed without function call (different from int @@ -683,7 +683,7 @@ void JpgExifReader::ProcessExifDir(unsigned char *DirStart, case TAG_DATETIME_ORIGINAL: // If we get a DATETIME_ORIGINAL, we use that one. strncpy(ImageInfo.DateTime, (char *)ValuePtr, 19); - // Fallthru... + // Fallthru... case TAG_DATETIME_DIGITIZED: case TAG_DATETIME: @@ -737,7 +737,7 @@ void JpgExifReader::ProcessExifDir(unsigned char *DirStart, // Copy the comment { - int msiz = ExifLength - (ValuePtr - OffsetBase); + int msiz = ExifLength - (ValuePtr - OffsetBase); if (msiz > ByteCount) msiz = ByteCount; if (msiz > MAX_COMMENT_SIZE - 1) msiz = MAX_COMMENT_SIZE - 1; if (msiz > 5 && memcmp(ValuePtr, "ASCII", 5) == 0) { diff --git a/toonz/sources/common/timage_io/timage_io.cpp b/toonz/sources/common/timage_io/timage_io.cpp index bb2ded5..837fc56 100644 --- a/toonz/sources/common/timage_io/timage_io.cpp +++ b/toonz/sources/common/timage_io/timage_io.cpp @@ -634,14 +634,14 @@ void TImageWriter::save(const TImageP &img) { // add background colors for non alpha-enabled image types if ((ras32 || ras64) && !writer->writeAlphaSupported() && TImageWriter::getBackgroundColor() != TPixel::Black) { - if (ras32) + if (bpp == 32 || bpp == 24) TRop::addBackground(ras, TImageWriter::getBackgroundColor()); - else { // ras64 + else if (bpp == 64 || bpp == 48) { TRaster64P bgRas(ras->getSize()); bgRas->fill(toPixel64(TImageWriter::getBackgroundColor())); TRop::over(bgRas, ras); ras = bgRas; - } + } // for other bpp values, do nothing for now } ras->lock(); diff --git a/toonz/sources/common/tmeshimage/tmeshimage.cpp b/toonz/sources/common/tmeshimage/tmeshimage.cpp index e82e830..129f393 100644 --- a/toonz/sources/common/tmeshimage/tmeshimage.cpp +++ b/toonz/sources/common/tmeshimage/tmeshimage.cpp @@ -5,7 +5,6 @@ // tcg includes #include "tcg/tcg_misc.h" -#include "tcg/tcg_iterator_ops.h" #define INCLUDE_HPP #include "tmeshimage.h" @@ -24,10 +23,6 @@ typedef tcg::TriMesh> TriMesh_base; DEFINE_CLASS_CODE(TTextureMesh, 120) PERSIST_IDENTIFIER(TTextureMesh, "mesh") -static TTextureMeshP cloneMesh_(const TTextureMeshP &other) { - return TTextureMeshP(new TTextureMesh(*other)); -} - static void static_check() { /* input iterator */ static_assert( @@ -56,35 +51,6 @@ static void static_check() { TTextureMeshP>::iterator>::reference>::value == true, "akan"); - - /* converted iterator */ - std::vector vec; - auto it = vec.end(); - auto c = tcg::make_cast_it(it, cloneMesh_); - - static_assert( - std::is_same::iterator_category, - std::random_access_iterator_tag>::value == true, - "random"); - - static_assert( - std::is_base_of< - std::input_iterator_tag, - std::iterator_traits::iterator_category>::value == true, - "input"); - - static_assert( - std::is_base_of< - std::forward_iterator_tag, - std::iterator_traits::iterator_category>::value == true, - "forward"); - - // TTextureMeshP p(std::iterator_traits< decltype(c) >::reference); - static_assert( - std::is_constructible< - TTextureMeshP, std::iterator_traits::reference>::value == - true, - "akan"); } //----------------------------------------------------------------------- @@ -310,11 +276,11 @@ public: Imp() : m_dpiX(), m_dpiY() {} - Imp(const Imp &other) - : m_meshes(tcg::make_cast_it(other.m_meshes.begin(), cloneMesh), - tcg::make_cast_it(other.m_meshes.end(), cloneMesh)) - , m_dpiX(other.m_dpiX) - , m_dpiY(other.m_dpiY) {} + Imp(const Imp &other) : m_dpiX(other.m_dpiX), m_dpiY(other.m_dpiY) { + for (auto const &e : other.m_meshes) { + m_meshes.push_back(cloneMesh(e)); + } + } private: static TTextureMeshP cloneMesh(const TTextureMeshP &other) { diff --git a/toonz/sources/common/tparam/tspectrumparam.cpp b/toonz/sources/common/tparam/tspectrumparam.cpp index b3f0a82..f0d502d 100644 --- a/toonz/sources/common/tparam/tspectrumparam.cpp +++ b/toonz/sources/common/tparam/tspectrumparam.cpp @@ -126,11 +126,11 @@ void TSpectrumParam::removeObserver(TParamObserver *obs) { //--------------------------------------------------------- -TSpectrumParam::TSpectrumParam(int keyCount, TSpectrum::ColorKey keys[]) +TSpectrumParam::TSpectrumParam(std::vector const &keys) : m_imp(new TSpectrumParamImp(this)) { - for (int i = 0; i < keyCount; i++) { - double v = keys[i].first; - TPixel32 pix = keys[i].second; + for (auto const &key : keys) { + double v = key.first; + TPixel32 pix = key.second; TDoubleParamP dp(v); TPixelParamP pp(pix); pp->enableMatte(m_imp->m_isMatteEnabled); diff --git a/toonz/sources/common/trop/tdespeckle.cpp b/toonz/sources/common/trop/tdespeckle.cpp index 26c3704..6bfe400 100644 --- a/toonz/sources/common/trop/tdespeckle.cpp +++ b/toonz/sources/common/trop/tdespeckle.cpp @@ -14,9 +14,6 @@ #include "borders_extractor.h" #define INCLUDE_HPP -// tcg includes -#include "tcg/deleter_types.h" - // STL includes #include @@ -273,7 +270,7 @@ public: //--------------------------------------------------------------------------------------------- DespecklingReader::~DespecklingReader() { - std::for_each(m_borders.begin(), m_borders.end(), tcg::deleter()); + std::for_each(m_borders.begin(), m_borders.end(), std::default_delete()); } //--------------------------------------------------------------------------------------------- diff --git a/toonz/sources/common/trop/tresample.cpp b/toonz/sources/common/trop/tresample.cpp index b1fc6f3..1f3cee2 100644 --- a/toonz/sources/common/trop/tresample.cpp +++ b/toonz/sources/common/trop/tresample.cpp @@ -1349,7 +1349,7 @@ void resample_main_rgbm(TRasterPT rout, const TRasterPT &rin, namespace { -DV_ALIGNED(16) class TPixelFloat { +class alignas(16) TPixelFloat { public: TPixelFloat() : b(0), g(0), r(0), m(0) {} diff --git a/toonz/sources/common/trop/tropcm.cpp b/toonz/sources/common/trop/tropcm.cpp index 706adba..73e2b4a 100644 --- a/toonz/sources/common/trop/tropcm.cpp +++ b/toonz/sources/common/trop/tropcm.cpp @@ -34,7 +34,7 @@ extern "C" { namespace { -DV_ALIGNED(16) class TPixelFloat { +class alignas(16) TPixelFloat { public: TPixelFloat() : b(0), g(0), r(0), m(0) {} diff --git a/toonz/sources/common/tsound/tsound_nt.cpp b/toonz/sources/common/tsound/tsound_nt.cpp index 2ff35fa..89554bb 100644 --- a/toonz/sources/common/tsound/tsound_nt.cpp +++ b/toonz/sources/common/tsound/tsound_nt.cpp @@ -1915,7 +1915,7 @@ std::string getMixerLineName(DWORD lineID) { assert(false); return ""; #else - return std::string(mxl.szName); + return QString::fromWCharArray(mxl.szName).toStdString(); #endif } diff --git a/toonz/sources/common/tstream/tpersistset.cpp b/toonz/sources/common/tstream/tpersistset.cpp index dde3aea..34a14a0 100644 --- a/toonz/sources/common/tstream/tpersistset.cpp +++ b/toonz/sources/common/tstream/tpersistset.cpp @@ -4,7 +4,6 @@ #include "tstream.h" // tcg includes -#include "tcg/tcg_deleter_types.h" #include "tcg/tcg_function_types.h" // STD includes @@ -21,7 +20,7 @@ PERSIST_IDENTIFIER(TPersistSet, "persistSet") //------------------------------------------------------------------ TPersistSet::~TPersistSet() { - std::for_each(m_objects.begin(), m_objects.end(), tcg::deleter()); + std::for_each(m_objects.begin(), m_objects.end(), std::default_delete()); } //------------------------------------------------------------------ @@ -38,7 +37,7 @@ void TPersistSet::insert(std::unique_ptr object) { std::remove_if(m_objects.begin(), m_objects.end(), tcg::bind1st(&locals::sameType, object.get())); - std::for_each(pt, m_objects.end(), tcg::deleter()); + std::for_each(pt, m_objects.end(), std::default_delete()); m_objects.erase(pt, m_objects.end()); // Push back the supplied object diff --git a/toonz/sources/common/tsystem/tfilepath.cpp b/toonz/sources/common/tsystem/tfilepath.cpp index 9c84c77..c7efeaf 100644 --- a/toonz/sources/common/tsystem/tfilepath.cpp +++ b/toonz/sources/common/tsystem/tfilepath.cpp @@ -687,12 +687,12 @@ TFrameId TFilePath::getFrame() const { } char letter = '\0'; if (iswalpha(str[k])) letter = str[k++] + ('a' - L'a'); - - if (number == 0 || k < i) // || letter!='\0') - throw TMalformedFrameException( - *this, - str + L": " + QObject::tr("Malformed frame name").toStdWString()); - + /* + if (number == 0 || k < i) // || letter!='\0') + throw TMalformedFrameException( + *this, + str + L": " + QObject::tr("Malformed frame name").toStdWString()); + */ int padding = 0; if (str[j + 1] == '0') padding = digits; diff --git a/toonz/sources/common/tsystem/tsystem.cpp b/toonz/sources/common/tsystem/tsystem.cpp index a8b7724..d6874b8 100644 --- a/toonz/sources/common/tsystem/tsystem.cpp +++ b/toonz/sources/common/tsystem/tsystem.cpp @@ -32,7 +32,6 @@ using namespace std; #include #endif - namespace { inline QString toQString(const TFilePath &path) { @@ -437,29 +436,63 @@ public: }; //------------------------------------------------------------ -/*! return the file list which is readable and executable +/*! return the folder path list which is readable and executable */ void TSystem::readDirectory_Dir_ReadExe(TFilePathSet &dst, const TFilePath &path) { - if (!TFileStatus(path).isDirectory()) - throw TSystemException(path, " is not a directory"); + QStringList dirItems; + readDirectory_DirItems(dirItems, path); - std::set fileSet; - - QStringList fil = - QDir(toQString(path)) - .entryList(QDir::Dirs | QDir::NoDotAndDotDot | QDir::Readable); + for (const QString &item : dirItems) { + TFilePath son = path + TFilePath(item.toStdWString()); + dst.push_back(son); + } +} - int i; - for (i = 0; i < fil.size(); i++) { - QString fi = fil.at(i); +//------------------------------------------------------------ +// return the folder item list which is readable and executable +// (returns only names, not full path) +void TSystem::readDirectory_DirItems(QStringList &dst, const TFilePath &path) { + if (!TFileStatus(path).isDirectory()) + throw TSystemException(path, " is not a directory"); - TFilePath son = path + TFilePath(fi.toStdWString()); + QDir dir(toQString(path)); - fileSet.insert(son); +#ifdef _WIN32 + // equivalent to sorting with QDir::LocaleAware + struct strCompare { + bool operator()(const QString &s1, const QString &s2) { + return QString::localeAwareCompare(s1, s2) < 0; + } + }; + + std::set entries; + + WIN32_FIND_DATA find_dir_data; + QString dir_search_path = dir.absolutePath() + "\\*"; + auto addEntry = [&]() { + // QDir::NoDotAndDotDot condition + if (wcscmp(find_dir_data.cFileName, L".") != 0 && + wcscmp(find_dir_data.cFileName, L"..") != 0) { + // QDir::AllDirs condition + if (find_dir_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY && + (find_dir_data.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) == 0) { + entries.insert(QString::fromWCharArray(find_dir_data.cFileName)); + } + } + }; + HANDLE hFind = + FindFirstFile((const wchar_t *)dir_search_path.utf16(), &find_dir_data); + if (hFind != INVALID_HANDLE_VALUE) { + addEntry(); + while (FindNextFile(hFind, &find_dir_data)) addEntry(); } + for (const QString &name : entries) dst.push_back(QString(name)); - dst.insert(dst.end(), fileSet.begin(), fileSet.end()); +#else + dst = dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot | QDir::Readable, + QDir::Name | QDir::LocaleAware); +#endif } //------------------------------------------------------------ @@ -473,10 +506,31 @@ void TSystem::readDirectory(TFilePathSet &groupFpSet, TFilePathSet &allFpSet, std::set fileSet_group; std::set fileSet_all; - QStringList fil = - QDir(toQString(path)) - .entryList(QDir::Files | QDir::NoDotAndDotDot | QDir::Readable); - + QStringList fil; +#ifdef _WIN32 + WIN32_FIND_DATA find_dir_data; + QString dir_search_path = QDir(toQString(path)).absolutePath() + "\\*"; + auto addEntry = [&]() { + // QDir::NoDotAndDotDot condition + if (wcscmp(find_dir_data.cFileName, L".") != 0 && + wcscmp(find_dir_data.cFileName, L"..") != 0) { + // QDir::Files condition + if ((find_dir_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0 && + (find_dir_data.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) == 0) { + fil.append(QString::fromWCharArray(find_dir_data.cFileName)); + } + } + }; + HANDLE hFind = + FindFirstFile((const wchar_t *)dir_search_path.utf16(), &find_dir_data); + if (hFind != INVALID_HANDLE_VALUE) { + addEntry(); + while (FindNextFile(hFind, &find_dir_data)) addEntry(); + } +#else + fil = QDir(toQString(path)) + .entryList(QDir::Files | QDir::NoDotAndDotDot | QDir::Readable); +#endif if (fil.size() == 0) return; for (int i = 0; i < fil.size(); i++) { @@ -506,8 +560,70 @@ void TSystem::readDirectory(TFilePathSet &dst, const QDir &dir, if (!(dir.exists() && QFileInfo(dir.path()).isDir())) throw TSystemException(TFilePath(dir.path().toStdWString()), " is not a directory"); + QStringList entries; +#ifdef _WIN32 + WIN32_FIND_DATA find_dir_data; + QString dir_search_path = dir.absolutePath() + "\\*"; + QDir::Filters filter = dir.filter(); + + // store name filters + bool hasNameFilter = false; + QList nameFilters; + for (const QString &nameFilter : dir.nameFilters()) { + if (nameFilter == "*") { + hasNameFilter = false; + break; + } + QRegExp regExp(nameFilter); + regExp.setPatternSyntax(QRegExp::Wildcard); + nameFilters.append(regExp); + hasNameFilter = true; + } + + auto addEntry = [&]() { + // QDir::NoDotAndDotDot condition + if (wcscmp(find_dir_data.cFileName, L".") != 0 && + wcscmp(find_dir_data.cFileName, L"..") != 0) { + // QDir::Files condition + if ((filter & QDir::Files) == 0 && + (find_dir_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) + return; + // QDir::Dirs condition + if ((filter & QDir::Dirs) == 0 && + (find_dir_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + return; + // QDir::Hidden condition + if ((filter & QDir::Hidden) == 0 && + (find_dir_data.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)) + return; + + QString fileName = QString::fromWCharArray(find_dir_data.cFileName); + + // name filter + if (hasNameFilter) { + bool matched = false; + for (const QRegExp ®Exp : nameFilters) { + if (regExp.exactMatch(fileName)) { + matched = true; + break; + } + } + if (!matched) return; + } + + entries.append(fileName); + } + }; + HANDLE hFind = + FindFirstFile((const wchar_t *)dir_search_path.utf16(), &find_dir_data); + if (hFind != INVALID_HANDLE_VALUE) { + addEntry(); + while (FindNextFile(hFind, &find_dir_data)) addEntry(); + } +#else + entries = (dir.entryList(dir.filter() | QDir::NoDotAndDotDot)); +#endif - QStringList entries(dir.entryList(dir.filter() | QDir::NoDotAndDotDot)); TFilePath dirPath(dir.path().toStdWString()); std::set fpSet; diff --git a/toonz/sources/common/tvectorimage/tcomputeregions.cpp b/toonz/sources/common/tvectorimage/tcomputeregions.cpp index f9ed60a..158370d 100644 --- a/toonz/sources/common/tvectorimage/tcomputeregions.cpp +++ b/toonz/sources/common/tvectorimage/tcomputeregions.cpp @@ -457,8 +457,9 @@ static void cleanNextIntersection(const VIList &interList, //----------------------------------------------------------------------------- void TVectorImage::Imp::eraseEdgeFromStroke(IntersectedStroke *is) { - if (is->m_edge.m_index >= - 0) // elimino il puntatore all'edge nella lista della VIStroke + if (is->m_edge.m_index >= 0 && + is->m_edge.m_index < m_strokes.size()) // elimino il puntatore all'edge + // nella lista della VIStroke { VIStroke *s; s = m_strokes[is->m_edge.m_index]; @@ -602,7 +603,10 @@ void TVectorImage::Imp::doEraseIntersection(int index, p1 = p1->next(); } - if (deleteIt) delete deleteIt; + if (deleteIt) { + m_intersectionData->m_autocloseMap.erase(index); + delete deleteIt; + } } //----------------------------------------------------------------------------- @@ -771,8 +775,7 @@ for (UINT ii=0; ii= size) // pezza per immagine corrotte...evito crash { - intList.clear(); - return; + break; } branchesBefore[v[i].m_currInter] = i; @@ -787,7 +790,7 @@ for (UINT ii=0; iim_edge.m_styleId = b.m_style; // assert(b.m_style<100); currBranch->m_edge.m_index = b.m_strokeIndex; - if (b.m_strokeIndex >= 0) + if (b.m_strokeIndex >= 0 && b.m_strokeIndex < m_strokes.size()) currBranch->m_edge.m_s = m_strokes[b.m_strokeIndex]->m_s; else currBranch->m_edge.m_s = 0; @@ -840,7 +843,7 @@ assert(v[b.m_nextBranch].m_nextBranch==i); while (v[j].m_strokeIndex < 0 && ((j > 0 && v[j].m_currInter == v[j - 1].m_currInter) || j == 0)) j--; - if (v[j].m_strokeIndex >= 0) + if (v[j].m_strokeIndex >= 0 && v[j].m_strokeIndex < m_strokes.size()) currInt->m_intersection = m_strokes[v[j].m_strokeIndex]->m_s->getPoint(v[j].m_w); } @@ -873,7 +876,7 @@ assert(v[b.m_nextBranch].m_nextBranch==i); if (!p2->m_edge.m_s && p2->m_edge.m_index < 0) { VIStroke *vs = m_intersectionData->m_autocloseMap[p2->m_edge.m_index]; if (vs) { - p2->m_edge.m_s = + p2->m_edge.m_s = m_intersectionData->m_autocloseMap[p2->m_edge.m_index]->m_s; // TEdge& e = it2->m_edge; @@ -3309,7 +3312,7 @@ struct TDeleteMapFunctor { }; IntersectionData::~IntersectionData() { - std::for_each(m_autocloseMap.begin(), m_autocloseMap.end(), + std::for_each(m_autocloseMap.begin(), m_autocloseMap.end(), TDeleteMapFunctor()); } //----------------------------------------------------------------------------- diff --git a/toonz/sources/common/tvrender/tglregions.cpp b/toonz/sources/common/tvrender/tglregions.cpp index 8ae9139..86a4073 100644 --- a/toonz/sources/common/tvrender/tglregions.cpp +++ b/toonz/sources/common/tvrender/tglregions.cpp @@ -135,7 +135,7 @@ void drawControlPoints(const TVectorRenderData &rd, TStroke *stroke, //----------------------------------------------------------------------------- -void drawArrows(TStroke *stroke, bool onlyFirstPoint) { +static void drawArrows(TStroke *stroke, bool onlyFirstPoint) { double length = stroke->getLength(0.0, 1.0); int points = length / 20; if (points < 2) points += 1; @@ -179,7 +179,8 @@ void drawArrows(TStroke *stroke, bool onlyFirstPoint) { //----------------------------------------------------------------------------- // Used for Guided Drawing -void drawFirstControlPoint(const TVectorRenderData &rd, TStroke *stroke) { +static void drawFirstControlPoint(const TVectorRenderData &rd, + TStroke *stroke) { TPointD p = stroke->getPoint(0.0); double length = stroke->getLength(0.0, 1.0); int msecs = QTime::currentTime().msec(); @@ -276,8 +277,8 @@ void tglDraw(const TVectorRenderData &rd, TRegion *r, bool pushAttribs) { } else { visible = false; for (j = 0; j < colorCount && !visible; j++) { - TPixel32 color = style->getColorParamValue(j); - if (rd.m_cf) color = (*(rd.m_cf))(color); + TPixel32 color = style->getColorParamValue(j); + if (rd.m_cf) color = (*(rd.m_cf))(color); if (color.m != 0) visible = true; } } @@ -434,7 +435,7 @@ bool isOThick(const TStroke *s) { if (s->getControlPoint(i).thick != 0) return false; return true; } -} +} // namespace void tglDraw(const TVectorRenderData &rd, const TStroke *s, bool pushAttribs) { assert(s); @@ -554,8 +555,8 @@ static void tglDoDraw(const TVectorRenderData &rd, TRegion *r) { else { visible = false; for (int j = 0; j < colorCount && !visible; j++) { - TPixel32 color = style->getColorParamValue(j); - if (rd.m_cf) color = (*(rd.m_cf))(color); + TPixel32 color = style->getColorParamValue(j); + if (rd.m_cf) color = (*(rd.m_cf))(color); if (color.m != 0) visible = true; } } @@ -584,8 +585,8 @@ static bool tglDoDraw(const TVectorRenderData &rd, const TStroke *s) { else { visible = false; for (int j = 0; j < style->getColorParamCount() && !visible; j++) { - TPixel32 color = style->getColorParamValue(j); - if (rd.m_cf) color = (*(rd.m_cf))(color); + TPixel32 color = style->getColorParamValue(j); + if (rd.m_cf) color = (*(rd.m_cf))(color); if (color.m != 0) visible = true; } } @@ -676,7 +677,7 @@ rdRegions.m_alphaChannel = rdRegions.m_antiAliasing = false;*/ } } } -} +} // namespace //------------------------------------------------------------------------------------ diff --git a/toonz/sources/common/tvrender/tpalette.cpp b/toonz/sources/common/tvrender/tpalette.cpp index fd5735a..e9fc009 100644 --- a/toonz/sources/common/tvrender/tpalette.cpp +++ b/toonz/sources/common/tvrender/tpalette.cpp @@ -193,7 +193,8 @@ TPalette::TPalette() , m_mutex(QMutex::Recursive) , m_isLocked(false) , m_askOverwriteFlag(false) - , m_shortcutScopeIndex(0) { + , m_shortcutScopeIndex(0) + , m_currentStyleId(1) { QString tempName(QObject::tr("colors")); std::wstring pageName = tempName.toStdWString(); Page *page = addPage(pageName); diff --git a/toonz/sources/common/twain/ttwain_stateX.c b/toonz/sources/common/twain/ttwain_stateX.c index 8295d7a..75c820d 100644 --- a/toonz/sources/common/twain/ttwain_stateX.c +++ b/toonz/sources/common/twain/ttwain_stateX.c @@ -4,6 +4,8 @@ extern "C" { #endif +#include "ttwain_statePD.h" + int TTWAIN_LoadSourceManagerPD(void) { return 0; } int TTWAIN_UnloadSourceManagerPD(void) { return 1; } diff --git a/toonz/sources/image/avi/tiio_avi.cpp b/toonz/sources/image/avi/tiio_avi.cpp index 121079f..c5b3140 100644 --- a/toonz/sources/image/avi/tiio_avi.cpp +++ b/toonz/sources/image/avi/tiio_avi.cpp @@ -344,7 +344,7 @@ void TLevelWriterAvi::save(const TImageP &img, int frameIndex) { CoInitializeEx(0, COINIT_MULTITHREADED); if (m_firstframe < 0) m_firstframe = frameIndex; - int index = frameIndex - m_firstframe; + int index = frameIndex - m_firstframe; TRasterImageP image(img); int lx = image->getRaster()->getLx(); int ly = image->getRaster()->getLy(); @@ -503,11 +503,11 @@ void TLevelWriterAvi::save(const TImageP &img, int frameIndex) { int TLevelWriterAvi::compressFrame(BITMAPINFOHEADER *outHeader, void **bufferOut, int frameIndex, DWORD flagsIn, DWORD &flagsOut) { - *bufferOut = _aligned_malloc(m_maxDataSize, 128); - *outHeader = m_outputFmt->bmiHeader; - DWORD chunkId = 0; + *bufferOut = _aligned_malloc(m_maxDataSize, 128); + *outHeader = m_outputFmt->bmiHeader; + DWORD chunkId = 0; if (flagsIn) flagsOut = AVIIF_KEYFRAME; - int res = ICCompress(m_hic, flagsIn, outHeader, *bufferOut, + int res = ICCompress(m_hic, flagsIn, outHeader, *bufferOut, &m_bitmapinfo->bmiHeader, m_buffer, &chunkId, &flagsOut, frameIndex, frameIndex ? 0 : 0xFFFFFF, 0, NULL, NULL); return res; @@ -1108,7 +1108,7 @@ LRESULT safe_ICCompressQuery(hic_t const &hic, BITMAPINFO *lpbiInput, return ICCompressQuery(hic.get(), lpbiInput, lpbiOutput); #endif } -} +} // namespace Tiio::AviWriterProperties::AviWriterProperties() : m_codec("Codec") { if (m_defaultCodec.getRange().empty()) { @@ -1150,6 +1150,9 @@ Tiio::AviWriterProperties::AviWriterProperties() : m_codec("Codec") { ((strstr(name, "IR32") != 0) && (bpp == 24))) { continue; } + // Give up to load codecs once the blackmagic codec is found - + // as it seems to cause crash for unknown reasons (issue #138) + if (strstr(descr, "Blackmagic") != 0) break; std::string compressorName; compressorName = std::string(name) + " '" + std::to_string(bpp) + "' " + diff --git a/toonz/sources/include/tcg/algorithm.h b/toonz/sources/include/tcg/algorithm.h deleted file mode 100644 index 2e59dde..0000000 --- a/toonz/sources/include/tcg/algorithm.h +++ /dev/null @@ -1,180 +0,0 @@ -#pragma once - -#ifndef TCG_ALGORITHM_H -#define TCG_ALGORITHM_H - -// tcg includes -#include "traits.h" - -// STD includes -#include - -/*! - \file algorithm.h - - \brief This file contains useful algorithms complementary to those - in the standard \p \ and in \p boost::algorithm. -*/ - -namespace tcg { - -//*************************************************************************** -// Binary find algorithms -//*************************************************************************** - -/*! - \brief Performs a binary search for the a value in a sorted, - random access iterators range, and returns its position. - - \return The \a first range position whose value is \a equivalent to - the specified one. -*/ -template -RanIt binary_find(RanIt begin, //!< Start of the sorted range. - RanIt end, //!< End of the sorted range. - const T &value) //!< Value to look up. -{ - RanIt it = std::lower_bound(begin, end, value); - return (it != end && !(value < *it)) ? it : end; -} - -//--------------------------------------------------------------------- - -/*! - \brief Performs a binary search for the a value in a sorted, - random access iterators range, and returns its position. - - \return The \a first range position whose value is \a equivalent to - the specified one. -*/ -template -RanIt binary_find(RanIt begin, //!< Start of the sorted range. - RanIt end, //!< End of the sorted range. - const T &value, //!< Value to look up. - Compare comp) //!< Comparator functor sorting the range. -{ - RanIt it = std::lower_bound(begin, end, value, comp); - return (it != end && !comp(value, *it)) ? it : end; -} - -//*************************************************************************** -// Min/Max iterator range algorithms -//*************************************************************************** - -/*! - \brief Calculates the minimal transformed element from the - input iterators range. - - \return The position of the minimal transform. - - \details This function is similar to std::min_element(), but - operating a unary transforming function on dereferenced - objects. - - Furthermore, the minimal transformed value is cached - during computation. -*/ -template -ForIt min_transform( - ForIt begin, //!< Start of the input iterators range. - ForIt end, //!< End of the input iterators range. - Func func, //!< The transforming function. - Comp comp) //!< The comparator object for transformed values. -{ - typedef typename tcg::function_traits::ret_type ret_type; - typedef typename tcg::remove_cref::type value_type; - - if (begin == end) return end; - - ForIt minPos = begin; - value_type minimum = func(*begin); - - for (; begin != end; ++begin) { - const value_type &candidate = func(*begin); - - if (comp(candidate, minimum)) minPos = begin, minimum = candidate; - } - - return minPos; -} - -//--------------------------------------------------------------------- - -/*! - \brief Calculates the minimal transformed element from the - input iterators range. - - \return The position of the minimal transform. - - \remark This variation uses \p operator< as comparator for the - transformed values. -*/ -template -ForIt min_transform(ForIt begin, //!< Start of the input iterators range. - ForIt end, //!< End of the input iterators range. - Func func) //!< The transforming function. -{ - typedef typename tcg::function_traits::ret_type ret_type; - typedef typename tcg::remove_cref::type value_type; - - return min_transform(begin, end, func, std::less()); -} - -//--------------------------------------------------------------------- - -/*! - \brief Calculates the maximal transformed element from the - input iterators range. - - \return The position of the maximal transform. - - \sa See min_transform() for a detailed explanation. -*/ -template -ForIt max_transform( - ForIt begin, //!< Start of the input iterators range. - ForIt end, //!< End of the input iterators range. - Func func, //!< The transforming function. - Comp comp) //!< The comparator object for transformed values. -{ - typedef typename tcg::function_traits::ret_type ret_type; - typedef typename tcg::remove_cref::type value_type; - - if (begin == end) return end; - - ForIt maxPos = begin; - value_type maximum = func(*begin); - - for (; begin != end; ++begin) { - const value_type &candidate = func(*begin); - - if (comp(maximum, candidate)) maxPos = begin, maximum = candidate; - } - - return maxPos; -} - -//--------------------------------------------------------------------- - -/*! - \brief Calculates the maximal transformed element from the - input iterators range. - - \return The position of the maximal transform. - - \sa See min_transform() for a detailed explanation. -*/ -template -ForIt max_transform(ForIt begin, //!< Start of the input iterators range. - ForIt end, //!< End of the input iterators range. - Func func) //!< The transforming function. -{ - typedef typename tcg::function_traits::ret_type ret_type; - typedef typename tcg::remove_cref::type value_type; - - return max_transform(begin, end, func, std::less()); -} - -} // namespace tcg - -#endif // TCG_ALGORITHM_H diff --git a/toonz/sources/include/tcg/auto.h b/toonz/sources/include/tcg/auto.h deleted file mode 100644 index ae4252a..0000000 --- a/toonz/sources/include/tcg/auto.h +++ /dev/null @@ -1,199 +0,0 @@ -#pragma once - -#ifndef TCG_AUTO_H -#define TCG_AUTO_H - -#include "base.h" -#include "traits.h" - -/* \file auto.h - - \brief This file contains template classes able to perform special - operations upon - instance destruction. - - \details These classes can be useful to enforce block-scoped operations at a - block's - entry point, considering that a block end can be far away, or the - function - could return abruptly at several different points. -*/ - -namespace tcg { - -//******************************************************************************* -// tcg::auto_type definition -//******************************************************************************* - -struct _auto_type { - mutable bool m_destruct; - -public: - _auto_type(bool destruct) : m_destruct(destruct) {} - _auto_type(const _auto_type &other) : m_destruct(other.m_destruct) { - other.m_destruct = false; - } - _auto_type &operator=(const _auto_type &other) { - m_destruct = other.m_destruct, other.m_destruct = false; - return *this; - } -}; - -typedef const _auto_type &auto_type; - -//******************************************************************************* -// tcg::auto_func definition -//******************************************************************************* - -template -struct auto_zerary : public _auto_type { - Op m_op; - -public: - auto_zerary(bool destruct = true) : _auto_type(destruct) {} - ~auto_zerary() { - if (this->m_destruct) m_op(); - } -}; - -//-------------------------------------------------------------------- - -template ::arg1_type> -struct auto_unary : public _auto_type { - T m_arg1; - Op m_op; - -public: - auto_unary(bool destruct = true) : _auto_type(destruct) {} - auto_unary(Op op, T arg, bool destruct = true) - : _auto_type(destruct), m_arg1(arg), m_op(op) {} - ~auto_unary() { - if (this->m_destruct) m_op(m_arg1); - } -}; - -//-------------------------------------------------------------------- - -template ::arg1_type, - typename T2 = typename function_traits::arg2_type> -struct auto_binary : public _auto_type { - T1 m_arg1; - T2 m_arg2; - Op m_op; - -public: - auto_binary(bool destruct = true) : _auto_type(destruct) {} - auto_binary(Op op, T1 arg1, T2 arg2, bool destruct = true) - : _auto_type(destruct), m_arg1(arg1), m_arg2(arg2), m_op(op) {} - ~auto_binary() { - if (this->m_destruct) m_op(m_arg1, m_arg2); - } -}; - -//******************************************************************************* -// Helper functions -//******************************************************************************* - -template -auto_zerary make_auto(Op op, bool destruct = true) { - return auto_zerary(op, destruct); -} - -template -auto_unary make_auto(Op op, T &arg1, bool destruct = true) { - return auto_unary(op, arg1, destruct); -} - -template -auto_unary make_auto(Op op, const T &arg1, bool destruct = true) { - return auto_unary(op, arg1, destruct); -} - -template -auto_binary make_auto(Op op, T1 &arg1, T2 &arg2, bool destruct = true) { - return auto_binary(op, arg1, arg2, destruct); -} - -template -auto_binary make_auto(Op op, const T1 &arg1, T2 &arg2, - bool destruct = true) { - return auto_binary(op, arg1, arg2, destruct); -} - -template -auto_binary make_auto(Op op, T1 &arg1, const T2 &arg2, - bool destruct = true) { - return auto_binary(op, arg1, arg2, destruct); -} - -template -auto_binary make_auto(Op op, const T1 &arg1, const T2 &arg2, - bool destruct = true) { - return auto_binary(op, arg1, arg2, destruct); -} - -//******************************************************************************* -// tcg::auto_reset definition -//******************************************************************************* - -template -class auto_reset { - typedef T var_type; - -public: - var_type &m_var; - -public: - auto_reset(var_type &var) : m_var(var) {} - ~auto_reset() { m_var = val; } - -private: - auto_reset(const auto_reset &); - auto_reset &operator=(const auto_reset &); -}; - -//******************************************************************************* -// tcg::auto_backup definition -//******************************************************************************* - -template -struct auto_backup { - typedef T var_type; - -public: - var_type m_backup; - var_type *m_original; - -public: - auto_backup() : m_original() {} - auto_backup(var_type &original) : m_original(&original), m_backup(original) {} - auto_backup(var_type *original) : m_original(original) { - if (m_original) m_backup = *m_original; - } - ~auto_backup() { - if (m_original) *m_original = m_backup; - } - - void reset(T &original) { - m_original = &original; - m_backup = original; - } - void reset(T *original) { - m_original = original; - if (m_original) m_backup = *original; - } - - T *release() { - T *original = m_original; - m_original = 0; - return original; - } - -private: - auto_backup(const auto_backup &); - auto_backup &operator=(const auto_backup &); -}; - -} // namespace tcg - -#endif // TCG_AUTO_H diff --git a/toonz/sources/include/tcg/boost/zipped_range.h b/toonz/sources/include/tcg/boost/zipped_range.h deleted file mode 100644 index 1810f9d..0000000 --- a/toonz/sources/include/tcg/boost/zipped_range.h +++ /dev/null @@ -1,45 +0,0 @@ -#pragma once - -#ifndef ZIPPED_RANGE_H -#define ZIPPED_RANGE_H - -// boost includes -#include -#include - -/*! - \file zipped_range.h - - \brief Contains a range creator for boost::zip_iterator objects. - \remark Zipped ranges are currently constrained to a 2-tuple. -*/ - -namespace tcg { - -template -struct _zip_rng_traits { - typedef boost::zip_iterator< - boost::tuple::type, - typename boost::range_iterator::type>> - iterator; - typedef std::pair range; -}; - -//********************************************************************************** -// Permuted Range creator -//********************************************************************************** - -template -typename _zip_rng_traits::range zipped_range(Rng1 &rng1, - Rng2 &rng2) { - typedef typename _zip_rng_traits::range range; - typedef typename _zip_rng_traits::iterator iterator; - - return range( - iterator(boost::make_tuple(boost::begin(rng1), boost::begin(rng2))), - iterator(boost::make_tuple(boost::end(rng1), boost::end(rng2)))); -} - -} // namespace tcg - -#endif // ZIPPED_RANGE_H diff --git a/toonz/sources/include/tcg/deleter_types.h b/toonz/sources/include/tcg/deleter_types.h deleted file mode 100644 index 3a4a979..0000000 --- a/toonz/sources/include/tcg/deleter_types.h +++ /dev/null @@ -1,89 +0,0 @@ -#pragma once - -#ifndef TCG_DELETER_TYPES_H -#define TCG_DELETER_TYPES_H - -// tcg includes -#include "traits.h" - -/* - \file deleter_types.h - - \brief This file contains implementations of some useful deleter functors - and deleter concepts. -*/ - -namespace tcg { - -//********************************************************************************* -// Deleter objects -//********************************************************************************* - -template -struct deleter { - void operator()(T *ptr) const { delete ptr; } -}; - -template -struct deleter { - void operator()(T *ptr) const { delete[] ptr; } -}; - -template -struct dtor { - void operator()(T *ptr) const { ptr->~T(); } -}; - -template -struct dtor { - int m_count; - - dtor(int count) : m_count(count) {} - - void operator()(T *ptr) const { - for (int t = 0; t != m_count; ++t) ptr[t].~T(); - } -}; - -struct freer { - void operator()(void *ptr) const { free(ptr); } -}; - -/*! - The Deleter concept can be used to destroy instances of incomplete types. - - Deleter objects are useful in all cases where a type-erasure concept needs - to support specialization on incomplete types. -*/ - -template -class deleter_concept { -public: - typedef typename tcg::traits::pointer_type pointer_type; - -public: - virtual ~deleter_concept() {} - - virtual deleter_concept *clone() const = 0; - virtual void operator()(pointer_type ptr) = 0; -}; - -//-------------------------------------------------------------------------------- - -template -class deleter_model : public deleter_concept { -public: - deleter_concept *clone() const { return new deleter_model(*this); } - void operator()(T *ptr) { delete ptr; } -}; - -template -class deleter_model : public deleter_concept { -public: - deleter_concept *clone() const { return new deleter_model(*this); } - void operator()(T *ptr) { delete[] ptr; } -}; - -} // namespace tcg - -#endif // TCG_DELETER_TYPES_H diff --git a/toonz/sources/include/tcg/functional.h b/toonz/sources/include/tcg/functional.h deleted file mode 100644 index 19fa867..0000000 --- a/toonz/sources/include/tcg/functional.h +++ /dev/null @@ -1,61 +0,0 @@ -#pragma once - -#ifndef TCG_FUNCTIONAL_H -#define TCG_FUNCTIONAL_H - -#include "traits.h" - -// std includes -#include - -//********************************************************************************** -// Logical functor combinators -//********************************************************************************** - -namespace tcg { - -template -class unary_and - : public std::unary_function::arg_type, - bool> { - Fn1 m_fn1; - Fn2 m_fn2; - -public: - unary_and(const Fn1 &fn1, const Fn2 &fn2) : m_fn1(fn1), m_fn2(fn2) {} - - bool operator()(const typename function_traits::arg_type &t) const { - return m_fn1(t) && m_fn2(t); - } -}; - -template -unary_and and1(const Fn1 &fn1, const Fn2 &fn2) { - return unary_and(fn1, fn2); -} - -//---------------------------------------------------------------------------------- - -template -class unary_or - : public std::unary_function::arg_type, - bool> { - Fn1 m_fn1; - Fn2 m_fn2; - -public: - unary_or(const Fn1 &fn1, const Fn2 &fn2) : m_fn1(fn1), m_fn2(fn2) {} - - bool operator()(const typename function_traits::arg_type &t) const { - return m_fn1(t) || m_fn2(t); - } -}; - -template -unary_or or1(const Fn1 &fn1, const Fn2 &fn2) { - return unary_or(fn1, fn2); -} - -} // namespace tcg - -#endif // TCG_FUNCTIONAL_H diff --git a/toonz/sources/include/tcg/hpp/image_iterator.hpp b/toonz/sources/include/tcg/hpp/image_iterator.hpp deleted file mode 100644 index cc0e154..0000000 --- a/toonz/sources/include/tcg/hpp/image_iterator.hpp +++ /dev/null @@ -1,249 +0,0 @@ -#pragma once - -#ifndef TCG_IMAGE_ITERATOR_HPP -#define TCG_IMAGE_ITERATOR_HPP - -// tcg includes -#include "../image_iterator.h" -#include "../pixel_ops.h" - -namespace tcg { - -//*************************************************************************** -// image_edge_iterator implementation -//*************************************************************************** - -template -template -image_edge_iterator::image_edge_iterator(const Img &img, int x, - int y, int dirX, - int dirY) - : m_lx_1(image_traits::width(img) - 1) - , m_ly_1(image_traits::height(img) - 1) - , m_wrap(image_traits::wrap(img)) - , m_pos(x, y) - , m_dir(dirX, dirY) - , m_outsideColor(image_traits::outsideColor(img)) - , m_elbowColor(m_outsideColor) - , m_pix(image_traits::pixel(img, x, y)) - , m_turn(UNKNOWN) { - pixels(m_leftPix, m_rightPix); - colors(m_leftColor, m_rightColor); -} - -//--------------------------------------------------------------------------------------------- - -template -inline void image_edge_iterator::pixels(iter pixLeft, - iter pixRight) { - if (m_dir.y) - if (m_dir.y > 0) - pixLeft = m_pix - 1, pixRight = m_pix; - else - pixLeft = m_pix - m_wrap, pixRight = pixLeft - 1; - else if (m_dir.x > 0) - pixLeft = m_pix, pixRight = m_pix - m_wrap; - else - pixRight = m_pix - 1, pixLeft = pixRight - m_wrap; -} - -//--------------------------------------------------------------------------------------------- - -template -inline void image_edge_iterator::colors( - value_type &leftColor, value_type &rightColor) { - if (m_dir.y) - if (m_dir.y > 0) { - if (m_pos.y > m_ly_1) - leftColor = rightColor = m_outsideColor; - else { - leftColor = (m_pos.x > 0) ? *m_leftPix : m_outsideColor; - rightColor = (m_pos.x <= m_lx_1) ? *m_rightPix : m_outsideColor; - } - } else { - if (m_pos.y < 1) - leftColor = rightColor = m_outsideColor; - else { - leftColor = (m_pos.x <= m_lx_1) ? *m_leftPix : m_outsideColor; - rightColor = (m_pos.x > 0) ? *m_rightPix : m_outsideColor; - } - } - else if (m_dir.x > 0) { - if (m_pos.x > m_lx_1) - leftColor = rightColor = m_outsideColor; - else { - leftColor = (m_pos.y <= m_ly_1) ? *m_leftPix : m_outsideColor; - rightColor = (m_pos.y > 0) ? *m_rightPix : m_outsideColor; - } - } else { - if (m_pos.x < 1) - leftColor = rightColor = m_outsideColor; - else { - leftColor = (m_pos.y > 0) ? *m_leftPix : m_outsideColor; - rightColor = (m_pos.y <= m_ly_1) ? *m_rightPix : m_outsideColor; - } - } -} - -//--------------------------------------------------------------------------------------------- - -template -inline void image_edge_iterator::turn( - const value_type &newLeftColor, const value_type &newRightColor, - policy) { - if (newLeftColor == m_rightColor) { - if (newRightColor == m_leftColor) - turnAmbiguous(newLeftColor, newRightColor); - else - turnLeft(); - } else { - if (newRightColor != m_rightColor) - turnRight(); - else - m_turn = STRAIGHT; - } - - m_elbowColor = newLeftColor; - - pixels(m_leftPix, m_rightPix); -} - -//--------------------------------------------------------------------------------------------- - -template -inline void image_edge_iterator::turn( - const value_type &newLeftColor, const value_type &newRightColor, - policy) { - if (newRightColor == m_leftColor) { - if (newLeftColor == m_rightColor) - turnAmbiguous(newLeftColor, newRightColor); - else - turnRight(); - } else { - if (newLeftColor != m_leftColor) - turnLeft(); - else - m_turn = STRAIGHT; - } - - m_elbowColor = newRightColor; - - pixels(m_leftPix, m_rightPix); -} - -//--------------------------------------------------------------------------------------------- - -template -inline void image_edge_iterator::turnAmbiguous( - const value_type &newLeftColor, const value_type &newRightColor) { - UCHAR count1 = 0, count2 = 0; - - value_type val; - - // Check the 4x4 neighbourhood and connect the minority color - if (m_pos.x > 2) { - val = *(m_pix - 2); - if (val == m_leftColor) - ++count1; - else if (val == m_rightColor) - ++count2; - - val = *(m_pix - 2 - m_wrap); - if (val == m_leftColor) - ++count1; - else if (val == m_rightColor) - ++count2; - } - - if (m_pos.x < m_lx_1) { - val = *(m_pix + 1); - if (val == m_leftColor) - ++count1; - else if (val == m_rightColor) - ++count2; - - val = *(m_pix + 1 - m_wrap); - if (val == m_leftColor) - ++count1; - else if (val == m_rightColor) - ++count2; - } - - if (m_pos.y > 2) { - int wrap2 = m_wrap << 1; - - val = *(m_pix - wrap2); - if (val == m_leftColor) - ++count1; - else if (val == m_rightColor) - ++count2; - - val = *(m_pix - wrap2 - 1); - if (val == m_leftColor) - ++count1; - else if (val == m_rightColor) - ++count2; - } - - if (m_pos.y < m_ly_1) { - val = *(m_pix + m_wrap); - if (val == m_leftColor) - ++count1; - else if (val == m_rightColor) - ++count2; - - val = *(m_pix + m_wrap - 1); - if (val == m_leftColor) - ++count1; - else if (val == m_rightColor) - ++count2; - } - - // Minority connection - join the one with less count - if (count1 <= count2) - turnRight(); // Join m_leftColor == newRightColor - else if (count1 > count2) - turnLeft(); // Join m_rightColor == newLeftColor - - m_turn |= AMBIGUOUS; -} - -//--------------------------------------------------------------------------------------------- - -template -void image_edge_iterator::advance(policy) { - value_type newLeftColor = m_leftColor, newRightColor = m_rightColor; - - int pixAdd = m_dir.y * m_wrap + m_dir.x; - - m_pos.x += m_dir.x, m_pos.y += m_dir.y; - m_pix += pixAdd, m_leftPix += pixAdd, m_rightPix += pixAdd; - m_leftColor = newLeftColor; - - colors(newLeftColor, newRightColor); - - turn(newLeftColor, newRightColor); - colors(m_leftColor, m_rightColor); -} - -//--------------------------------------------------------------------------------------------- - -template -void image_edge_iterator::advance(policy) { - value_type newLeftColor = m_leftColor, newRightColor = m_rightColor; - - int pixAdd = m_dir.y * m_wrap + m_dir.x; - - m_pos.x += m_dir.x, m_pos.y += m_dir.y; - m_pix += pixAdd, m_leftPix += pixAdd, m_rightPix += pixAdd; - m_rightColor = newRightColor; - - colors(newLeftColor, newRightColor); - - turn(newLeftColor, newRightColor); - colors(m_leftColor, m_rightColor); -} - -} // namespace tcg - -#endif // TCG_IMAGE_ITERATOR_HPP diff --git a/toonz/sources/include/tcg/image_iterator.h b/toonz/sources/include/tcg/image_iterator.h deleted file mode 100644 index ba5494e..0000000 --- a/toonz/sources/include/tcg/image_iterator.h +++ /dev/null @@ -1,255 +0,0 @@ - - -#ifndef TCG_IMAGE_ITERATOR_H -#define TCG_IMAGE_ITERATOR_H - -// tcg includes -#include "tcg_ptr.h" -#include "tcg_image_ops.h" -#include "tcg_point.h" - -// STD includes -#include - -namespace tcg { - -//********************************************************************************************************* -// Image Iterator class -//********************************************************************************************************* - -/*! - The image_iterator class models an iterator accessing pixels of an image along - its rows. -*/ - -template -class image_iterator : public iterator_traits::inheritable_iterator_type { - typedef typename iterator_traits::inheritable_iterator_type iter; - -public: - typedef typename iter::iterator_category iterator_category; - typedef typename iter::value_type value_type; - typedef typename iter::difference_type difference_type; - typedef typename iter::pointer pointer; - typedef typename iter::reference reference; - -public: - image_iterator() {} - - template - image_iterator(const Img &img, int x, int y) - : iter(image_traits::pixel(img, x, y)) - , m_base(image_traits::pixel(img, 0, 0)) - , m_lx(image_traits::width(img)) - , m_ly(image_traits::height(img)) - , m_wrap(image_traits::wrap(img)) - , m_skew(m_wrap - lx) {} - - int x() const { return (iter::operator-(m_base)) % m_wrap; } - int y() const { return (iter::operator-(m_base)) / m_wrap; } - - image_iterator &operator++() { - iter::operator++(); - if (x() >= m_lx) iter::operator+=(m_skew); - return *this; - } - image_iterator operator++(int) { - image_iterator it(*this); - operator++(); - return it; - } - - image_iterator &operator--() { - iter::operator--(); - if (x() < 0) iter::operator-=(m_skew); - return *this; - } - image_iterator operator--(int) { - image_iterator it(*this); - operator--(); - return it; - } - - image_iterator &operator+=(difference_type d) { - int yCount = (x() + d) / m_lx; - iter::operator+=((d - yCount * m_lx) + yCount * m_wrap); - return *this; - } - image_iterator operator+(difference_type d) const { - image_iterator it(*this); - it += d; - return it; - } - - image_iterator operator-(difference_type d) const { return operator+(-d); } - image_iterator &operator-=(difference_type d) { return operator+=(-d); } - - difference_type operator-(const image_iterator &other) const { - return (x() - other.x()) + m_lx * (y() - other.y()); - } - - reference operator[](difference_type d) const { - const image_iterator &it = operator+(d); - return *it; - } - -protected: - iter m_base; - int m_lx, m_ly, m_wrap, m_skew; -}; - -//********************************************************************************************************* -// image_edge_iterator class -//********************************************************************************************************* - -enum _iei_adherence_policy { LEFT_ADHERENCE, RIGHT_ADHERENCE }; - -/*! - The image_edge_iterator class models a forward iterator following the contour - of - an image area of uniform color. -*/ - -template -class image_edge_iterator { - typedef typename iterator_traits::inheritable_iterator_type iter; - -public: - typedef std::forward_iterator_tag iterator_category; - typedef typename iter::value_type value_type; - typedef typename iter::difference_type difference_type; - typedef typename iter::pointer pointer; - typedef typename iter::reference reference; - -public: - enum { adherence = _adherence }; - - enum Direction { - STRAIGHT = 0x0, - LEFT = 0x1, - RIGHT = 0x2, - AMBIGUOUS = 0x4, - UNKNOWN = 0x8, - AMBIGUOUS_LEFT = LEFT | AMBIGUOUS, - AMBIGUOUS_RIGHT = RIGHT | AMBIGUOUS - }; - -public: - image_edge_iterator() {} - - template - image_edge_iterator(const Img &img, int x, int y, int dirX, int dirY); - - const Point &pos() const { return m_pos; } - const Point &dir() const { return m_dir; } - - const value_type &leftColor() const { return m_leftColor; } - const value_type &rightColor() const { return m_rightColor; } - - const value_type &color() const { return color(policy<_adherence>()); } - const value_type &oppositeColor() const { - return oppositeColor(policy<_adherence>()); - } - const value_type &elbowColor() const { return m_elbowColor; } - - iter leftPixel() const { return m_leftPix; } - iter rightPixel() const { return m_rightPix; } - - iter pixel() const { return pixel(policy<_adherence>()); } - iter oppositePixel() const { return oppositePixel(policy<_adherence>()); } - - Direction turn() const { return Direction(m_turn); } - -public: - // Iterator functions - - bool operator==(const image_edge_iterator &it) const { - return (m_pos == it.m_pos) && (m_dir == it.m_dir); - } - bool operator!=(const image_edge_iterator &it) const { - return !operator==(it); - } - - image_edge_iterator &operator++() { - advance(policy<_adherence>()); - return *this; - } - image_edge_iterator operator++(int) { - image_edge_iterator temp(*this); - operator++(); - return temp; - } - -private: - void pixels(iter pixLeft, iter pixRight); - void colors(value_type &leftColor, value_type &rightColor); - - void turnLeft() { - int temp = m_dir.x; - m_dir.x = -m_dir.y; - m_dir.y = temp; - m_turn = LEFT; - } - void turnRight() { - int temp = m_dir.x; - m_dir.x = m_dir.y; - m_dir.y = -temp; - m_turn = RIGHT; - } - - void turn(const value_type &newLeftColor, const value_type &newRightColor) { - turn(newLeftColor, newRightColor, policy<_adherence>()); - } - void turnAmbiguous(const value_type &newLeftColor, - const value_type &newRightColor); - -private: - template <_iei_adherence_policy> - struct policy {}; - - const value_type &color(policy) const { return m_leftColor; } - const value_type &color(policy) const { - return m_rightColor; - } - - const value_type &oppositeColor(policy) const { - return m_rightColor; - } - const value_type &oppositeColor(policy) const { - return m_leftColor; - } - - iter pixel(policy) const { return m_leftPix; } - iter pixel(policy) const { return m_rightPix; } - - iter oppositePixel(policy) const { return m_rightPix; } - iter oppositePixel(policy) const { return m_leftPix; } - - void turn(const value_type &newLeftColor, const value_type &newRightColor, - policy); - void turn(const value_type &newLeftColor, const value_type &newRightColor, - policy); - - void advance(policy); - void advance(policy); - -private: - int m_lx_1, m_ly_1, m_wrap; - - Point m_pos, m_dir; - - value_type m_leftColor, m_rightColor, m_outsideColor, m_elbowColor; - iter m_pix, m_leftPix, m_rightPix; - - int m_turn; -}; - -} // namespace tcg - -#endif // TCG_IMAGE_ITERATOR_H - -//===================================================================================== - -#ifdef INCLUDE_HPP -#include "hpp/image_iterator.hpp" -#endif // INCLUDE_HPP diff --git a/toonz/sources/include/tcg/iterator_ops.h b/toonz/sources/include/tcg/iterator_ops.h index d93edf8..df1bcce 100644 --- a/toonz/sources/include/tcg/iterator_ops.h +++ b/toonz/sources/include/tcg/iterator_ops.h @@ -26,159 +26,6 @@ struct iterator_traits : public std::iterator_traits { typedef ptr inheritable_iterator_type; }; -//**************************************************************************** -// Derived Iterator definition -//**************************************************************************** - -template ::iterator_category> -struct derived_iterator - : public tcg::iterator_traits::inheritable_iterator_type { - typedef typename tcg::iterator_traits::inheritable_iterator_type - base_iterator; - -public: - derived_iterator() : base_iterator() {} - derived_iterator(const base_iterator &it) : base_iterator(it) {} - - Der &operator++() { - base_iterator::operator++(); - return static_cast(*this); - } - Der operator++(int) { - return Der(base_iterator::operator++(0), static_cast(*this)); - } -}; - -template -struct derived_iterator - : public derived_iterator { - typedef typename tcg::iterator_traits::inheritable_iterator_type - base_iterator; - -public: - derived_iterator() : _iter() {} - derived_iterator(const base_iterator &it) : _iter(it) {} - - Der &operator--() { - base_iterator::operator--(); - return static_cast(*this); - } - Der operator--(int) { - return Der(base_iterator::operator--(0), static_cast(*this)); - } - -private: - typedef derived_iterator _iter; -}; - -template -struct derived_iterator - : public derived_iterator { - typedef typename tcg::iterator_traits::inheritable_iterator_type - base_iterator; - typedef typename base_iterator::difference_type difference_type; - -public: - derived_iterator() : _iter() {} - derived_iterator(const base_iterator &it) : _iter(it) {} - - Der operator+(difference_type d) const { - return Der(static_cast(*this) + d, - static_cast(*this)); - } - Der &operator+=(difference_type d) { - static_cast(*this) += d; - return static_cast(*this); - } - - Der operator-(difference_type d) const { - return Der(static_cast(*this) - d, - static_cast(*this)); - } - Der &operator-=(difference_type d) { - static_cast(*this) -= d; - return static_cast(*this); - } - - difference_type operator-(const Der &other) const { - return static_cast(*this) - - static_cast(other); - } - -private: - typedef derived_iterator _iter; -}; - -//**************************************************************************** -// Cast Iterator definition -//**************************************************************************** - -/*! - A cast iterator is a utility iterator wrapper that can be used to access - an iterator's data through a supplied functor intermediary, proving to be - especially useful when converting data from a container to another with - minimal effort. -*/ - -template ::ret_type>::referenced_type, - typename Ref = typename choose_if_match< - typename function_traits::ret_type &, - typename traits::reference_type>::type, - typename Ptr = typename choose_if_match< - Ref, void, typename traits::pointer_type>::type> -class cast_iterator - : public derived_iterator> { - typedef derived_iterator iterator; - typedef typename iterator::base_iterator base_iterator; - typedef Func function; - typedef typename function_traits::ret_type ret_type; - -public: - typedef Ref reference; - typedef Ptr pointer; - typedef Val value_type; - -public: - cast_iterator() : iterator(), m_func() {} - cast_iterator(const Func &func) : iterator(), m_func(func) {} - - cast_iterator(const base_iterator &it) : iterator(it), m_func() {} - cast_iterator(const base_iterator &it, const Func &func) - : iterator(it), m_func(func) {} - - cast_iterator(const base_iterator &it, const cast_iterator &other) - : iterator(it), m_func(other.m_func) {} - - ret_type operator*() { return m_func(iterator::operator*()); } - pointer operator->() { return ptr(0); } - -private: - Func m_func; - -private: - template - pointer ptr(T, - typename tcg::enable_if::value, - T>::type = 0) const { - return &operator*(); - } - - void ptr(char) const {} -}; - -//========================================================================== - -// Utility maker function - -template -inline cast_iterator make_cast_it(const It &it, Func func) { - return cast_iterator(it, func); -} - //*********************************************************************** // Step Iterator class //*********************************************************************** diff --git a/toonz/sources/include/tcg/rect.h b/toonz/sources/include/tcg/rect.h deleted file mode 100644 index 1b1bdb7..0000000 --- a/toonz/sources/include/tcg/rect.h +++ /dev/null @@ -1,276 +0,0 @@ -#pragma once - -#ifndef TCG_RECT_H -#define TCG_RECT_H - -#include "point.h" -#include "size.h" - -// STD includes -#include - -namespace tcg { - -//********************************************************************************** -// Bidimensional Rect class -//********************************************************************************** - -template -struct RectT { - T x0, y0, x1, y1; - -public: - RectT() : x0((std::numeric_limits::max)()), y0(x0), x1(-x0), y1(x1) {} - RectT(T x0_, T y0_, T x1_, T y1_) : x0(x0_), y0(y0_), x1(x1_), y1(y1_) {} - RectT(const PointT &p0, const PointT &p1) - : x0(p0.x), y0(p0.y), x1(p1.x), y1(p1.y) {} - RectT(const PointT &p0, const SizeT &size) - : x0(p0.x), y0(p0.y), x1(p0.x + size.w), y1(p0.y + size.h) {} - - bool empty() const { return (x1 <= x0) || (y1 <= y0); } - - PointT p0() const { return PointT(x0, y0); } - PointT p1() const { return PointT(x1, y1); } - PointT center() const { return PointT((x0 + x1) / 2, (y0 + y1) / 2); } - - T width() const { return x1 - x0; } - T height() const { return y1 - y0; } - SizeT size() const { return SizeT(width(), height()); } - - bool operator==(const RectT &other) const { - return x0 == other.x0 && y0 == other.y0 && x1 == other.x1 && y1 == other.y1; - } - bool operator!=(const RectT &other) const { return !operator==(other); } - - RectT &operator+=(const PointT &p) { - x0 += p.x, y0 += p.y, x1 += p.x, y1 += p.y; - return *this; - } - RectT &operator-=(const PointT &p) { - x0 -= p.x, y0 -= p.y, x1 -= p.x, y1 -= p.y; - return *this; - } - - friend RectT operator+(const RectT &r, const tcg::PointT &p) { - return RectT(r.x0 + p.x, r.y0 + p.y, r.x1 + p.x, r.y1 + p.y); - } - friend RectT operator-(const RectT &r, const tcg::PointT &p) { - return RectT(r.x0 - p.x, r.y0 - p.y, r.x1 - p.x, r.y1 - p.y); - } - friend RectT operator+(const tcg::PointT &p, const RectT &r) { - return RectT(p.x + r.x0, p.y + r.y0, p.x + r.x1, p.y + r.y1); - } - friend RectT operator-(const tcg::PointT &p, const RectT &r) { - return RectT(p.x - r.x0, p.y - r.y0, p.x - r.x1, p.y - r.y1); - } - - template - RectT &operator*=(K k) { - x0 *= k, y0 *= k, x1 *= k, y1 *= k; - return *this; - } - - template - friend RectT operator*(const RectT &r, K k) { - return RectT(r.x0 * k, r.y0 * k, r.x1 * k, r.y1 * k); - } - template - friend RectT operator*(K k, const RectT &r) { - return RectT(k * r.x0, k * r.y0, k * r.x1, k * r.y1); - } - - RectT &operator|=(const RectT &other) { - if (x0 > other.x0) x0 = other.x0; - if (y0 > other.y0) y0 = other.y0; - if (x1 < other.x1) x1 = other.x1; - if (y1 < other.y1) y1 = other.y1; - return *this; - } - - RectT &operator&=(const RectT &other) { - if (x0 < other.x0) x0 = other.x0; - if (y0 < other.y0) y0 = other.y0; - if (x1 > other.x1) x1 = other.x1; - if (y1 > other.y1) y1 = other.y1; - return *this; - } - - RectT &operator|=(const PointT &p) { - return operator|=(RectT(p.x, p.y, p.x, p.y)); - } - RectT &operator&=(const PointT &p) { - return operator&=(RectT(p.x, p.y, p.x, p.y)); - } - - friend RectT operator|(const RectT &a, const RectT &b) { - return RectT(a) |= b; - } - friend RectT operator&(const RectT &a, const RectT &b) { - return RectT(a) &= b; - } - - friend RectT operator|(const RectT &r, const PointT &p) { - return RectT(r) |= p; - } - friend RectT operator&(const RectT &r, const PointT &p) { - return RectT(r) &= p; - } - friend RectT operator|(const PointT &p, const RectT &r) { - return RectT(r) |= p; - } - friend RectT operator&(const PointT &p, const RectT &r) { - return RectT(r) &= p; - } -}; - -//------------------------------------------------------------------------ - -typedef RectT RectD; -typedef RectT RectI; -typedef RectI Rect; - -//********************************************************************************** -// Tridimensional Rect class -//********************************************************************************** - -template -struct Rect3T { - T x0, y0, z0, x1, y1, z1; - -public: - Rect3T() - : x0((std::numeric_limits::max)()) - , y0(x0) - , z0(x0) - , x1(-x0) - , y1(x1) - , z1(x1) {} - Rect3T(T x0_, T y0_, T z0_, T x1_, T y1_, T z1_) - : x0(x0_), y0(y0_), z0(z0_), x1(x1_), y1(y1_), z1(z1_) {} - Rect3T(const Point3T &p0, const Point3T &p1) - : x0(p0.x), y0(p0.y), z0(p0.z) x1(p1.x), y1(p1.y), z1(p1.z) {} - Rect3T(const Point3T &p0, const Size3T &size) - : x0(p0.x) - , y0(p0.y) - , z0(p0.z) - , x1(p0.x + size.w) - , y1(p0.y + size.h) - , z1(p0.z + size.d) {} - - bool empty() const { return (x1 <= x0) || (y1 <= y0) || (z1 <= z0); } - - Point3T p0() const { return Point3T(x0, y0, z0); } - Point3T p1() const { return Point3T(x1, y1, z1); } - Point3T center() const { - return Point3T((x0 + x1) / 2, (y0 + y1) / 2, (z0 + z1) / 2); - } - - T width() const { return x1 - x0; } - T height() const { return y1 - y0; } - T depth() const { return z1 - z0; } - Size3T size() const { return Size3T(width(), height(), depth()); } - - bool operator==(const Rect3T &other) const { - return x0 == other.x0 && y0 == other.y0 && z0 == other.z0 && - x1 == other.x1 && y1 == other.y1 && z1 == other.z1; - } - bool operator!=(const Rect3T &other) const { return !operator==(other); } - - Rect3T &operator+=(const Point3T &p) { - x0 += p.x, y0 += p.y, z0 += p.z, x1 += p.x, y1 += p.y, z1 += p.z; - return *this; - } - Rect3T &operator-=(const Point3T &p) { - x0 -= p.x, y0 -= p.y, z0 -= p.z, x1 -= p.x, y1 -= p.y, z1 -= p.z; - return *this; - } - - friend Rect3T operator+(const Rect3T &r, const tcg::Point3T &p) { - return Rect3T(r.x0 + p.x, r.y0 + p.y, r.z0 + p.z, r.x1 + p.x, r.y1 + p.y, - r.z1 + p.z); - } - friend Rect3T operator-(const Rect3T &r, const tcg::Point3T &p) { - return Rect3T(r.x0 - p.x, r.y0 - p.y, r.z0 - p.z, r.x1 - p.x, r.y1 - p.y, - r.z1 - p.z); - } - friend Rect3T operator+(const tcg::Point3T &p, const Rect3T &r) { - return Rect3T(p.x + r.x0, p.x + r.y0, p.x + r.z0, p.x + r.x1 + p.x, r.y1, - p.x + r.z1); - } - friend Rect3T operator-(const tcg::Point3T &p, const Rect3T &r) { - return Rect3T(p.x - r.x0, p.y - r.y0, p.z - r.z0, p.x - r.x1, p.y - r.y1, - p.z - r.z1); - } - - template - Rect3T &operator*=(K k) { - x0 *= k, y0 *= k, z0 *= k, x1 *= k, y1 *= k, z1 *= k; - return *this; - } - - template - friend Rect3T operator*(const Rect3T &r, K k) { - return RectT(r.x0 * k, r.y0 * k, r.z0 * k, r.x1 * k, r.y1 * k, r.z1 * k); - } - template - friend Rect3T operator*(K k, const Rect3T &r) { - return RectT(k * r.x0, k * r.y0, k * r.z0, k * r.x1, k * r.y1, k * r.z1); - } - - Rect3T &operator|=(const Rect3T &other) { - if (x0 > other.x0) x0 = other.x0; - if (y0 > other.y0) y0 = other.y0; - if (z0 > other.z0) z0 = other.z0; - if (x1 < other.x1) x1 = other.x1; - if (y1 < other.y1) y1 = other.y1; - if (z1 < other.z1) z1 = other.z1; - return *this; - } - - Rect3T &operator&=(const Rect3T &other) { - if (x0 < other.x0) x0 = other.x0; - if (y0 < other.y0) y0 = other.y0; - if (z0 < other.z0) z0 = other.z0; - if (x1 > other.x1) x1 = other.x1; - if (y1 > other.y1) y1 = other.y1; - if (z1 > other.z1) z1 = other.z1; - return *this; - } - - Rect3T &operator|=(const Point3T &p) { - return operator|=(RectT(p.x, p.y, p.z, p.x, p.y, p.z)); - } - Rect3T &operator&=(const Point3T &p) { - return operator&=(RectT(p.x, p.y, p.z, p.x, p.y, p.z)); - } - - friend Rect3T operator|(const Rect3T &a, const Rect3T &b) { - return Rect3T(a) |= b; - } - friend Rect3T operator&(const Rect3T &a, const Rect3T &b) { - return Rect3T(a) &= b; - } - - friend Rect3T operator|(const Rect3T &r, const Point3T &p) { - return Rect3T(r) |= p; - } - friend Rect3T operator&(const Rect3T &r, const Point3T &p) { - return Rect3T(r) &= p; - } - friend Rect3T operator|(const Point3T &p, const Rect3T &r) { - return Rect3T(r) |= p; - } - friend Rect3T operator&(const Point3T &p, const Rect3T &r) { - return Rect3T(r) &= p; - } -}; - -//------------------------------------------------------------------------ - -typedef Rect3T Rect3D; -typedef Rect3T Rect3I; -typedef RectI Rect; - -} // namespace tcg - -#endif // TCG_RECT_H diff --git a/toonz/sources/include/tcg/size.h b/toonz/sources/include/tcg/size.h deleted file mode 100644 index c43d9d7..0000000 --- a/toonz/sources/include/tcg/size.h +++ /dev/null @@ -1,218 +0,0 @@ -#pragma once - -#ifndef TCG_SIZE_H -#define TCG_SIZE_H - -namespace tcg { - -//********************************************************************************** -// Bidimensional size class -//********************************************************************************** - -template -struct SizeT { - typedef T value_type; - -public: - T w, h; - -public: - SizeT() : w(), h() {} - SizeT(T w_, T h_) : w(w_), h(h_) {} - - bool empty() const { return (w <= 0) || (h <= 0); } - - SizeT &operator+=(const SizeT &other) { - w += other.w, h += other.h; - return *this; - } - SizeT &operator-=(const SizeT &other) { - w -= other.w, h -= other.h; - return *this; - } - - friend SizeT operator+(const SizeT &a, const SizeT &b) { - return SizeT(a.w + b.w, a.h + b.h); - } - - friend SizeT operator-(const SizeT &a, const SizeT &b) { - return SizeT(a.w - b.w, a.h - b.h); - } - - template - SizeT &operator*=(K k) { - w *= k, h *= k; - return *this; - } - - template - SizeT &operator/=(K k) { - w /= k, h /= k; - return *this; - } - - template - friend SizeT operator*(K k, const SizeT &a) { - return SizeT(k * a.w, k * a.h); - } - - template - friend SizeT operator*(const SizeT &a, K k) { - return SizeT(a.w * k, a.h * k); - } - - template - friend SizeT operator/(const SizeT &a, K k) { - return SizeT(a.w / k, a.h / k); - } - - SizeT &operator&=(const SizeT &other) { - if (other.w < w) w = other.w; - if (other.h < h) h = other.h; - - return *this; - } - - SizeT &operator|=(const SizeT &other) { - if (other.w > w) w = other.w; - if (other.h > h) h = other.h; - - return *this; - } - - friend SizeT operator&(const SizeT &a, const SizeT &b) { - SizeT tmp(a); - return tmp &= b; - } - friend SizeT operator|(const SizeT &a, const SizeT &b) { - SizeT tmp(a); - return tmp |= b; - } -}; - -//------------------------------------------------------------------------ - -typedef SizeT SizeI; -typedef SizeI Size; -typedef SizeT SizeD; - -//********************************************************************************** -// Tridimensional size class -//********************************************************************************** - -template -struct Size3T { - typedef T value_type; - -public: - T w, h, d; - -public: - Size3T() : w(), h(), d() {} - Size3T(T w_, T h_, T d_) : w(w_), h(h_), d(d_) {} - - bool empty() const { return (w <= 0) || (h <= 0) || (d <= 0); } - - Size3T &operator+=(const Size3T &other) { - w += other.w, h += other.h, d += other.d; - return *this; - } - Size3T &operator-=(const Size3T &other) { - w -= other.w, h -= other.h, d -= other.d; - return *this; - } - - friend Size3T operator+(const Size3T &a, const Size3T &b) { - return SizeT(a.w + b.w, a.h + b.h, a.d + b.d); - } - - friend Size3T operator-(const Size3T &a, const Size3T &b) { - return SizeT(a.w - b.w, a.h - b.h, a.d + b.d); - } - - template - Size3T &operator*=(K k) { - w *= k, h *= k, d *= k; - return *this; - } - - template - Size3T &operator/=(K k) { - w /= k, h /= k, d /= k; - return *this; - } - - template - friend Size3T operator*(K k, const Size3T &a) { - return Size3T(k * a.w, k * a.h, k * a.d); - } - - template - friend Size3T operator*(const Size3T &a, K k) { - return Size3T(a.w * k, a.h * k, a.d * k); - } - - template - friend Size3T operator/(const Size3T &a, K k) { - return Size3T(a.w / k, a.h / k, a.d / k); - } - - Size3T &operator&=(const Size3T &other) { - if (other.w < w) w = other.w; - if (other.h < h) h = other.h; - if (other.d < d) d = other.d; - - return *this; - } - - Size3T &operator|=(const Size3T &other) { - if (other.w > w) w = other.w; - if (other.h > h) h = other.h; - if (other.d > d) d = other.d; - - return *this; - } - - friend Size3T operator&(const Size3T &a, const Size3T &b) { - Size3T tmp(a); - return tmp &= b; - } - friend Size3T operator|(const Size3T &a, const Size3T &b) { - Size3T tmp(a); - return tmp |= b; - } -}; - -//------------------------------------------------------------------------ - -typedef Size3T Size3I; -typedef Size3I Size3; -typedef Size3T Size3D; - -//********************************************************************************** -// N-dimensional size class -//********************************************************************************** - -template -struct SizeN { - static const int size = N; - typedef T value_type; - -public: - T span[N]; - -public: - SizeN() {} - SizeN(const T &t) { std::fill(span, span + N, t); } - - template - SizeN(It begin, It end) { - std::copy(begin, end, span); - } - - // To be completed... -}; - -} // namespace tcg - -#endif // TCG_SIZE_H diff --git a/toonz/sources/include/tcg/tcg_algorithm.h b/toonz/sources/include/tcg/tcg_algorithm.h deleted file mode 100644 index 7a4ccf6..0000000 --- a/toonz/sources/include/tcg/tcg_algorithm.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#include "algorithm.h" diff --git a/toonz/sources/include/tcg/tcg_auto.h b/toonz/sources/include/tcg/tcg_auto.h deleted file mode 100644 index a2bec77..0000000 --- a/toonz/sources/include/tcg/tcg_auto.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#include "auto.h" diff --git a/toonz/sources/include/tcg/tcg_deleter_types.h b/toonz/sources/include/tcg/tcg_deleter_types.h deleted file mode 100644 index e3bcfa2..0000000 --- a/toonz/sources/include/tcg/tcg_deleter_types.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#include "deleter_types.h" diff --git a/toonz/sources/include/tcg/tcg_image_iterator.h b/toonz/sources/include/tcg/tcg_image_iterator.h deleted file mode 100644 index 3b93c06..0000000 --- a/toonz/sources/include/tcg/tcg_image_iterator.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#include "image_iterator.h" diff --git a/toonz/sources/include/tcommon.h b/toonz/sources/include/tcommon.h index a5dec3d..9ab7690 100644 --- a/toonz/sources/include/tcommon.h +++ b/toonz/sources/include/tcommon.h @@ -149,12 +149,6 @@ const unsigned int c_maxuint = (unsigned int)(~0U); #define DV_IMPORT_VAR #endif -#ifdef _MSC_VER -#define DV_ALIGNED(val) __declspec(align(val)) -#else -#define DV_ALIGNED(val) __attribute__((aligned(val))) -#endif - inline short swapShort(short val) { return ((val >> 8) & 0x00ff) | (val << 8); } inline TINT32 swapTINT32(TINT32 val) { TINT32 appo, aux, aux1; @@ -174,8 +168,6 @@ inline std::ostream &operator<<(std::ostream &out, const std::string &s) { return out << s.c_str(); } -#define tArrayCount(ARRAY) (sizeof(ARRAY) / sizeof(ARRAY[0])) - const std::string styleNameEasyInputWordsFileName = "stylename_easyinput.ini"; #endif //__T_COMMON_INCLUDED diff --git a/toonz/sources/include/tenv.h b/toonz/sources/include/tenv.h index dc793e1..a9130b5 100644 --- a/toonz/sources/include/tenv.h +++ b/toonz/sources/include/tenv.h @@ -93,6 +93,12 @@ public: DVAPI std::string getApplicationName(); DVAPI std::string getApplicationVersion(); +// This are for the case where the file name of application changes and doesn't +// match actual application name and we want to keep both. We will need that for +// some stuff +DVAPI void setApplicationFileName(std::string appFileName); +DVAPI std::string getApplicationFileName(); + DVAPI bool getIsPortable(); // es.: TEnv::setModuleFullName("Toonz 5.0.1 Harlequin"); diff --git a/toonz/sources/include/tfx.h b/toonz/sources/include/tfx.h index 734613f..8149fd1 100644 --- a/toonz/sources/include/tfx.h +++ b/toonz/sources/include/tfx.h @@ -373,7 +373,7 @@ public: TFx *clone(TFx *fx, bool recursive) const; void unlinkParams(); - void linkParams(TFx *src); + virtual void linkParams(TFx *src); TFx *getLinkedFx() const; @@ -543,7 +543,7 @@ inline std::string TFx::getFxType() const { return getDeclaration()->getId(); } //------------------------------------------------------------------- #define FX_DECLARATION(T) \ - \ + \ public: \ const TPersistDeclaration *getDeclaration() const override; diff --git a/toonz/sources/include/tfxattributes.h b/toonz/sources/include/tfxattributes.h index 224a944..92245cb 100644 --- a/toonz/sources/include/tfxattributes.h +++ b/toonz/sources/include/tfxattributes.h @@ -5,6 +5,7 @@ #include "tgeometry.h" #include +#include #undef DVAPI #undef DVVAR diff --git a/toonz/sources/include/tmacrofx.h b/toonz/sources/include/tmacrofx.h index 334459b..951b265 100644 --- a/toonz/sources/include/tmacrofx.h +++ b/toonz/sources/include/tmacrofx.h @@ -30,6 +30,9 @@ class DVAPI TMacroFx final : public TRasterFx { bool isaLeaf(TFx *fx) const; + bool m_isLoading = false; + TMacroFx *m_waitingLinkFx = nullptr; + public: static bool analyze(const std::vector &fxs, TFxP &root, std::vector &roots, std::vector &leafs); @@ -78,6 +81,10 @@ public: void compatibilityTranslatePort(int majorVersion, int minorVersion, std::string &portName) override; + void linkParams(TFx *src) override; + bool isLoading() { return m_isLoading; } + void setWaitingLinkFx(TMacroFx *linkFx) { m_waitingLinkFx = linkFx; } + private: // non implementati TMacroFx(const TMacroFx &); diff --git a/toonz/sources/include/tools/strokeselection.h b/toonz/sources/include/tools/strokeselection.h index 02d371f..0757b3a 100644 --- a/toonz/sources/include/tools/strokeselection.h +++ b/toonz/sources/include/tools/strokeselection.h @@ -79,6 +79,8 @@ public: void enableCommands() override; + void selectAll(); + private: TVectorImageP m_vi; //!< Selected vector image. IndexesContainer m_indexes; //!< Selected stroke indexes in m_vi. diff --git a/toonz/sources/include/tools/stylepicker.h b/toonz/sources/include/tools/stylepicker.h index 54f7c64..b5381bb 100644 --- a/toonz/sources/include/tools/stylepicker.h +++ b/toonz/sources/include/tools/stylepicker.h @@ -60,11 +60,12 @@ public: int pickStyleId(const TPointD &point, double radius2 = 1, int mode = 2) const; /*--- Toonz Raster LevelのToneを拾う。 ---*/ - int pickTone(const TPointD &pos); + int pickTone(const TPointD &pos) const; // per pli come sopra, ma ritorna il maincolor // per tzp e fullcolor ritorna il colore effettivo del pixel TPixel32 pickColor(const TPointD &point, double radius2 = 1) const; + TPixel32 pickAverageColor(const TRectD &rect) const; // ritorna il colore medio presente nell'area della finestra corrente openGL TPixel32 pickColor(const TRectD &area) const; diff --git a/toonz/sources/include/tools/tooloptions.h b/toonz/sources/include/tools/tooloptions.h index c5b503d..d1ee09a 100644 --- a/toonz/sources/include/tools/tooloptions.h +++ b/toonz/sources/include/tools/tooloptions.h @@ -476,6 +476,21 @@ protected slots: //============================================================================= // +// FullColorFillToolOptionsBox +// +//============================================================================= + +class FullColorFillToolOptionsBox final : public ToolOptionsBox { + Q_OBJECT + +public: + FullColorFillToolOptionsBox(QWidget *parent, TTool *tool, + TPaletteHandle *pltHandle, + ToolHandle *toolHandle); +}; + +//============================================================================= +// // FillToolOptionsBox // //============================================================================= @@ -700,6 +715,48 @@ protected slots: void updateColors(); }; +//============================================================================= +// +// ZoomToolOptionsBox +// +//============================================================================= + +class ZoomToolOptionsBox final : public ToolOptionsBox { + Q_OBJECT + +public: + ZoomToolOptionsBox(QWidget *parent, TTool *tool, TPaletteHandle *pltHandle, + ToolHandle *toolHandle); +}; + +//============================================================================= +// +// RotateToolOptionsBox +// +//============================================================================= + +class RotateToolOptionsBox final : public ToolOptionsBox { + Q_OBJECT + +public: + RotateToolOptionsBox(QWidget *parent, TTool *tool, TPaletteHandle *pltHandle, + ToolHandle *toolHandle); +}; + +//============================================================================= +// +// HandToolOptionsBox +// +//============================================================================= + +class HandToolOptionsBox final : public ToolOptionsBox { + Q_OBJECT + +public: + HandToolOptionsBox(QWidget *parent, TTool *tool, TPaletteHandle *pltHandle, + ToolHandle *toolHandle); +}; + //----------------------------------------------------------------------------- class DVAPI ToolOptions final : public QFrame { diff --git a/toonz/sources/include/toonz/doubleparamcmd.h b/toonz/sources/include/toonz/doubleparamcmd.h index acbea51..99f15a8 100644 --- a/toonz/sources/include/toonz/doubleparamcmd.h +++ b/toonz/sources/include/toonz/doubleparamcmd.h @@ -18,6 +18,7 @@ #endif class KeyframesUndo; +class TSceneHandle; class DVAPI KeyframeSetter { TDoubleParamP m_param; @@ -101,7 +102,8 @@ public: } static void removeKeyframeAt(TDoubleParam *curve, double frame); - static void enableCycle(TDoubleParam *curve, bool enabled); + static void enableCycle(TDoubleParam *curve, bool enabled, + TSceneHandle *sceneHandle = nullptr); }; #endif diff --git a/toonz/sources/include/toonz/fill.h b/toonz/sources/include/toonz/fill.h index 5a4eece..2d62faf 100644 --- a/toonz/sources/include/toonz/fill.h +++ b/toonz/sources/include/toonz/fill.h @@ -81,6 +81,9 @@ void DVAPI rectFillInk(const TRasterCM32P &ras, const TRect &r, int color); void DVAPI fillautoInks(TRasterCM32P &r, TRect &rect, const TRasterCM32P &rbefore, TPalette *plt); +void DVAPI fullColorFill(const TRaster32P &ras, const FillParameters ¶ms, + TTileSaverFullColor *saver = 0); + //============================================================================= //! The class AreaFiller allows to fill a raster area, delimited by rect or //! spline. diff --git a/toonz/sources/include/toonz/preferences.h b/toonz/sources/include/toonz/preferences.h index 612030c..850ba1f 100644 --- a/toonz/sources/include/toonz/preferences.h +++ b/toonz/sources/include/toonz/preferences.h @@ -121,8 +121,11 @@ public: return m_autosaveOtherFilesEnabled; } - void enableLevelsBackup(bool enabled); - bool isLevelsBackupEnabled() const { return m_levelsBackupEnabled; } + void enableBackup(bool enabled); + bool isBackupEnabled() const { return m_backupEnabled; } + + void setBackupKeepCount(int count); + int getBackupKeepCount() { return m_backupKeepCount; } void enableSceneNumbering(bool enabled); bool isSceneNumberingEnabled() const { return m_sceneNumberingEnabled; } @@ -638,9 +641,8 @@ private: m_expandFunctionHeader, m_showColumnNumbers, m_animatedGuidedDrawing; bool m_rasterOptimizedMemory, m_saveUnpaintedInCleanup, m_askForOverrideRender, m_automaticSVNFolderRefreshEnabled, m_SVNEnabled, - m_levelsBackupEnabled, m_minimizeSaveboxAfterEditing, - m_sceneNumberingEnabled, m_animationSheetEnabled, m_inksOnly, - m_startupPopupEnabled; + m_backupEnabled, m_minimizeSaveboxAfterEditing, m_sceneNumberingEnabled, + m_animationSheetEnabled, m_inksOnly, m_startupPopupEnabled; bool m_fillOnlySavebox, m_show0ThickLines, m_regionAntialias; bool m_onionSkinDuringPlayback, m_ignoreImageDpi, m_syncLevelRenumberWithXsheet; @@ -727,6 +729,8 @@ private: bool m_enableWinInk = false; bool m_useOnionColorsForShiftAndTraceGhosts = false; + int m_backupKeepCount; + int m_levelBasedToolsDisplay; private: diff --git a/toonz/sources/include/toonz/tapplication.h b/toonz/sources/include/toonz/tapplication.h index 3386376..0948e3c 100644 --- a/toonz/sources/include/toonz/tapplication.h +++ b/toonz/sources/include/toonz/tapplication.h @@ -49,7 +49,8 @@ public: // Current Palette (PaletteController) methods virtual TColorStyle *getCurrentLevelStyle() const = 0; virtual int getCurrentLevelStyleIndex() const = 0; - virtual void setCurrentLevelStyleIndex(int index) = 0; + virtual void setCurrentLevelStyleIndex(int index, + bool forceUpdate = false) = 0; }; #endif // TAPPLICATION_H diff --git a/toonz/sources/include/toonz/tpalettehandle.h b/toonz/sources/include/toonz/tpalettehandle.h index c2bdd1d..5539e36 100644 --- a/toonz/sources/include/toonz/tpalettehandle.h +++ b/toonz/sources/include/toonz/tpalettehandle.h @@ -44,9 +44,9 @@ public: TColorStyle *getStyle() const; - void setPalette(TPalette *palette, int styleIndex = 1); + void setPalette(TPalette *palette, int styleIndex = -1); - void setStyleIndex(int index); + void setStyleIndex(int index, bool forceEmit = false); void setStyleParamIndex(int index); diff --git a/toonz/sources/include/toonz/ttileset.h b/toonz/sources/include/toonz/ttileset.h index e5dfac9..c2cefcd 100644 --- a/toonz/sources/include/toonz/ttileset.h +++ b/toonz/sources/include/toonz/ttileset.h @@ -146,6 +146,7 @@ public: void add(const TRasterP &ras, TRect rect) override; const Tile *getTile(int index) const; + Tile *editTile(int index) const; TTileSetFullColor *clone() const override; }; diff --git a/toonz/sources/include/toonz/txshsimplelevel.h b/toonz/sources/include/toonz/txshsimplelevel.h index 2ffba7e..d502ddb 100644 --- a/toonz/sources/include/toonz/txshsimplelevel.h +++ b/toonz/sources/include/toonz/txshsimplelevel.h @@ -302,6 +302,8 @@ The oldFp is used when the current scene path change... //! must have the same size). void renumber(const std::vector &fids); + bool isFrameReadOnly(TFrameId fid); + public: // Auxiliary files management: hooks, tpl, etc. // May throw; copy and rename perform touchparentdir diff --git a/toonz/sources/include/toonzqt/combohistogram.h b/toonz/sources/include/toonzqt/combohistogram.h index e9c60ab..505ffab 100644 --- a/toonz/sources/include/toonzqt/combohistogram.h +++ b/toonz/sources/include/toonzqt/combohistogram.h @@ -43,6 +43,7 @@ class QLabel; //----------------------------------------------------------------------------- class DVAPI ComboHistoRGBLabel final : public QWidget { + Q_OBJECT QColor m_color; public: diff --git a/toonz/sources/include/toonzqt/dvdialog.h b/toonz/sources/include/toonzqt/dvdialog.h index 8f1f49c..f745ca6 100644 --- a/toonz/sources/include/toonzqt/dvdialog.h +++ b/toonz/sources/include/toonzqt/dvdialog.h @@ -170,7 +170,6 @@ protected: class DVAPI Dialog : public QDialog { Q_OBJECT - static QSettings *m_settings; // If the dialog has button then is modal too. bool m_hasButton; QString m_name; @@ -183,7 +182,6 @@ protected: QHBoxLayout *m_buttonLayout; QList m_labelList; void resizeEvent(QResizeEvent *e) override; - void moveEvent(QMoveEvent *e) override; public: QVBoxLayout *m_topLayout; diff --git a/toonz/sources/include/toonzqt/functionsegmentviewer.h b/toonz/sources/include/toonzqt/functionsegmentviewer.h index 59afd79..c05ddcb 100644 --- a/toonz/sources/include/toonzqt/functionsegmentviewer.h +++ b/toonz/sources/include/toonzqt/functionsegmentviewer.h @@ -3,6 +3,7 @@ #ifndef FUNCTION_SEGMENT_VIEWER_H #define FUNCTION_SEGMENT_VIEWER_H +#include #include #include @@ -31,7 +32,7 @@ namespace DVGui { class MeasuredDoubleLineEdit; class ExpressionField; class FileField; -} +} // namespace DVGui //----------------------------------------------------------------------------- @@ -51,8 +52,8 @@ class FunctionSegmentViewer final : public QFrame, public TParamObserver { DVGui::LineEdit *m_stepFld; QStackedWidget *m_parametersPanel; - FunctionSegmentPage *m_pages[9]; - int m_typeId[9]; + std::array m_pages; + std::array m_typeId; FunctionSheet *m_sheet; TXsheetHandle *m_xshHandle; diff --git a/toonz/sources/include/toonzqt/functionselection.h b/toonz/sources/include/toonzqt/functionselection.h index 711898f..cef835d 100644 --- a/toonz/sources/include/toonzqt/functionselection.h +++ b/toonz/sources/include/toonzqt/functionselection.h @@ -109,6 +109,28 @@ public: void doDelete(); void insertCells(); + // if inclusive == true, consider all segments overlapping the selection + void setStep(int, bool inclusive = true); + void setStep1() { setStep(1); } + void setStep2() { setStep(2); } + void setStep3() { setStep(3); } + void setStep4() { setStep(4); } + + // return step if all the selected segments has the same value. + // return -1 if the selection does not overlap any segments + // return 0 if the step value is uneven in the selection + // if inclusive == true, consider all segments overlapping the selection + int getCommonStep(bool inclusive = true); + + void setSegmentType(TDoubleKeyframe::Type type, bool inclusive = true); + + // return TDoubleKeyframe::Type value if the selected segments has the same + // interpolation type. return -1 if the selection does not overlap any + // segments return 0 (TDoubleKeyframe::None) if the interpolation is not + // identical in the selection if inclusive == true, consider all segments + // overlapping the selection + int getCommonSegmentType(bool inclusive = true); + signals: void selectionChanged(); }; diff --git a/toonz/sources/include/toonzqt/functionsheet.h b/toonz/sources/include/toonzqt/functionsheet.h index 5eabfc5..acb2333 100644 --- a/toonz/sources/include/toonzqt/functionsheet.h +++ b/toonz/sources/include/toonzqt/functionsheet.h @@ -48,6 +48,8 @@ class FunctionSheetColumnHeadViewer final : public Spreadsheet::ColumnPanel { QPoint m_dragStartPosition; FunctionTreeModel::Channel *m_draggingChannel; + int m_clickedColumn = -1; + public: FunctionSheetColumnHeadViewer(FunctionSheet *parent); @@ -96,6 +98,7 @@ private slots: class FunctionSheet final : public SpreadsheetViewer { Q_OBJECT + bool m_showIbtwnValue = true; public: FunctionSheet(QWidget *parent = 0, bool isFloating = false); @@ -124,6 +127,17 @@ public: int getColumnIndexByCurve(TDoubleParam *param) const; bool anyWidgetHasFocus(); + // Obtains a pointer to the stage object containing the + // parameter of specified column. Returns nullptr for + // fx parameter columns. + TStageObject *getStageObject(int column); + + bool isIbtwnValueVisible() { return m_showIbtwnValue; } + void setIbtwnValueVisible(bool visible) { + m_showIbtwnValue = visible; + update(); + } + protected: void showEvent(QShowEvent *e) override; void hideEvent(QHideEvent *e) override; diff --git a/toonz/sources/include/toonzqt/functiontreeviewer.h b/toonz/sources/include/toonzqt/functiontreeviewer.h index 3996792..4fe2377 100644 --- a/toonz/sources/include/toonzqt/functiontreeviewer.h +++ b/toonz/sources/include/toonzqt/functiontreeviewer.h @@ -336,6 +336,31 @@ public: void refresh() override; }; +//============================================================================= + +class StageObjectChannelGroup final : public FunctionTreeModel::ChannelGroup { +public: + TStageObject *m_stageObject; //!< (not owned) Referenced stage object + FunctionTreeModel::ChannelGroup + *m_plasticGroup; //!< (not owned) Eventual plastic channels group + +public: + StageObjectChannelGroup(TStageObject *pegbar); + ~StageObjectChannelGroup(); + + QString getShortName() const override; + QString getLongName() const override; + + QString getIdName() const override; + + void *getInternalPointer() const override { + return static_cast(m_stageObject); + } + + TStageObject *getStageObject() const { return m_stageObject; } + QVariant data(int role) const override; +}; + //***************************************************************************************** // FunctionTreeView declaration //***************************************************************************************** diff --git a/toonz/sources/include/toonzqt/functionviewer.h b/toonz/sources/include/toonzqt/functionviewer.h index 413ab58..632cb1e 100644 --- a/toonz/sources/include/toonzqt/functionviewer.h +++ b/toonz/sources/include/toonzqt/functionviewer.h @@ -120,6 +120,8 @@ public: void clearFocusColumnsAndGraph(); bool columnsOrGraphHasFocus(); void setSceneHandle(TSceneHandle *sceneHandle); + TSceneHandle *getSceneHandle() const { return m_sceneHandle; } + // SaveLoadQSettings virtual void save(QSettings &settings) const override; virtual void load(QSettings &settings) override; diff --git a/toonz/sources/include/toonzqt/fxschematicnode.h b/toonz/sources/include/toonzqt/fxschematicnode.h index f0d7a7a..11c0a9d 100644 --- a/toonz/sources/include/toonzqt/fxschematicnode.h +++ b/toonz/sources/include/toonzqt/fxschematicnode.h @@ -70,7 +70,8 @@ protected: // FxPalettePainter //***************************************************** -class FxPalettePainter final : public QGraphicsItem, public QObject { +class FxPalettePainter final : public QObject, public QGraphicsItem { + Q_OBJECT FxSchematicPaletteNode *m_parent; double m_width, m_height; QString m_name; @@ -189,6 +190,7 @@ protected: //***************************************************** class FxSchematicPort final : public SchematicPort { + Q_OBJECT TFx *m_ownerFx; FxSchematicPort *m_currentTargetPort; QList m_hiddenLinks; @@ -353,6 +355,8 @@ signals: //***************************************************** class FxSchematicOutputNode final : public FxSchematicNode { + Q_OBJECT + FxOutputPainter *m_outputPainter; public: @@ -365,6 +369,7 @@ public: protected: void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *me) override; + void mousePressEvent(QGraphicsSceneMouseEvent *me) override; }; //***************************************************** @@ -372,6 +377,8 @@ protected: //***************************************************** class FxSchematicXSheetNode final : public FxSchematicNode { + Q_OBJECT + FxXSheetPainter *m_xsheetPainter; public: @@ -384,6 +391,7 @@ public: protected: void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *me) override; + void mousePressEvent(QGraphicsSceneMouseEvent *me) override; }; //***************************************************** @@ -408,6 +416,7 @@ public: protected: void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *me) override; + void mousePressEvent(QGraphicsSceneMouseEvent *me) override; protected slots: @@ -441,6 +450,7 @@ public: protected: void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *me) override; + void mousePressEvent(QGraphicsSceneMouseEvent *me) override; protected slots: @@ -479,6 +489,7 @@ public: protected: void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *me) override; + void mousePressEvent(QGraphicsSceneMouseEvent *me) override; private: void renameObject(const TStageObjectId &id, std::string name); @@ -517,6 +528,7 @@ public: protected: void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *me) override; + void mousePressEvent(QGraphicsSceneMouseEvent *me) override; protected slots: @@ -575,6 +587,7 @@ public: protected: void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *me) override; + void mousePressEvent(QGraphicsSceneMouseEvent *me) override; QPointF computePos() const; protected slots: diff --git a/toonz/sources/include/toonzqt/fxsettings.h b/toonz/sources/include/toonzqt/fxsettings.h index 64386c0..5fa0619 100644 --- a/toonz/sources/include/toonzqt/fxsettings.h +++ b/toonz/sources/include/toonzqt/fxsettings.h @@ -190,6 +190,7 @@ class DVAPI ParamViewer final : public QFrame { Q_OBJECT TFxP m_fx; + TFxP m_actualFx; QStackedWidget *m_tablePageSet; QMap m_tableFxIndex; @@ -253,6 +254,7 @@ class DVAPI FxSettings final : public QSplitter { bool m_isCameraModeView; int m_container_height; + int m_container_width; public: FxSettings(QWidget *parent, const TPixel32 &checkCol1, diff --git a/toonz/sources/include/toonzqt/imageutils.h b/toonz/sources/include/toonzqt/imageutils.h index 863e088..ce355d9 100644 --- a/toonz/sources/include/toonzqt/imageutils.h +++ b/toonz/sources/include/toonzqt/imageutils.h @@ -101,7 +101,7 @@ void DVAPI convert( false /*-- ConvertPopup での指定に合わせて、[レベル名].[フレーム番号].[拡張子]のうち、 [レベル名]と[フレーム番号]の間のドットを消す。 --*/ - ); //!< Converts a saved level to fullcolor, and saves the result. +); //!< Converts a saved level to fullcolor, and saves the result. void DVAPI convertNaa2Tlv( const TFilePath &source, //!< Level path to convert from. @@ -124,7 +124,7 @@ void DVAPI convertOldLevel2Tlv( const TFrameId &to, //!< Last source frame to convert. FrameTaskNotifier *frameNotifier //!< Observer class for frame success notifications. - ); +); double DVAPI getQuantizedZoomFactor(double zf, bool forward); @@ -140,8 +140,9 @@ void DVAPI assignFillingInformation(TVectorImage &vi, const std::vector ®s); void DVAPI getStrokeStyleInformationInArea( - const TVectorImageP &vi, std::vector> - &strokesInfo, // pair:strokeIndex, styleIndex + const TVectorImageP &vi, + std::vector> + &strokesInfo, // pair:strokeIndex, styleIndex const TRectD &area); //********************************************************************************************* @@ -221,7 +222,7 @@ public: protected: virtual bool zoom( bool zoomin, - bool resetZoom) = 0; //!< Handler for zoom commands. Required. + bool resetView) = 0; //!< Handler for zoom commands. Required. virtual bool fit() { return false; } //!< Handler for 'fit to image' commands. @@ -234,6 +235,15 @@ protected: virtual bool setFlipY() { return false; } //!< Handler for 'flip viewer horizontally' commands. + virtual bool resetZoom() { + return false; + } //!< Handler for 'reset zoom' commands. + virtual bool resetRotation() { + return false; + } //!< Handler for 'reset rotation' commands. + virtual bool resetPosition() { + return false; + } //!< Handler for 'reset position' commands. virtual bool toggleFullScreen( bool quit = false) //! Handler for 'toggle fullscreen' commands. { diff --git a/toonz/sources/include/toonzqt/lutcalibrator.h b/toonz/sources/include/toonzqt/lutcalibrator.h index 986fcdf..951a57d 100644 --- a/toonz/sources/include/toonzqt/lutcalibrator.h +++ b/toonz/sources/include/toonzqt/lutcalibrator.h @@ -29,7 +29,8 @@ class QOpenGLContext; class QColor; class DVAPI LutCalibrator : public QOpenGLFunctions { - bool m_isValid = false; + bool m_isValid = false; + bool m_isInitialized = false; struct LutTextureShader { QOpenGLShader* vert = nullptr; @@ -58,6 +59,7 @@ public: void initialize(); bool isValid() { return m_isValid; } + bool isInitialized() { return m_isInitialized; } ~LutCalibrator() {} diff --git a/toonz/sources/include/toonzqt/menubarcommand.h b/toonz/sources/include/toonzqt/menubarcommand.h index eb30a07..a89fd7a 100644 --- a/toonz/sources/include/toonzqt/menubarcommand.h +++ b/toonz/sources/include/toonzqt/menubarcommand.h @@ -60,7 +60,8 @@ enum CommandType { ToolModifierCommandType, ZoomCommandType, MiscCommandType, - MenuCommandType + MenuCommandType, + VisualizationButtonCommandType }; //----------------------------------------------------------------------------- diff --git a/toonz/sources/include/toonzqt/paletteviewer.h b/toonz/sources/include/toonzqt/paletteviewer.h index a42a069..10c6abf 100644 --- a/toonz/sources/include/toonzqt/paletteviewer.h +++ b/toonz/sources/include/toonzqt/paletteviewer.h @@ -162,6 +162,8 @@ protected slots: void onNameDisplayMode(QAction *); void setIsLocked(bool lock); + + void onSwitchToPage(int pageIndex); }; #endif // PALETTEVIEWER_H diff --git a/toonz/sources/include/toonzqt/paletteviewergui.h b/toonz/sources/include/toonzqt/paletteviewergui.h index 5e03c6d..505054c 100644 --- a/toonz/sources/include/toonzqt/paletteviewergui.h +++ b/toonz/sources/include/toonzqt/paletteviewergui.h @@ -211,6 +211,7 @@ private: signals: void changeWindowTitleSignal(); + void switchToPage(int); }; //**************************************************************************** diff --git a/toonz/sources/include/toonzqt/planeviewer.h b/toonz/sources/include/toonzqt/planeviewer.h index f8c27a2..d1c8744 100644 --- a/toonz/sources/include/toonzqt/planeviewer.h +++ b/toonz/sources/include/toonzqt/planeviewer.h @@ -13,6 +13,7 @@ // Qt includes #include +#include #undef DVAPI #undef DVVAR @@ -30,6 +31,8 @@ class TRasterImageP; class TToonzImageP; class TVectorImageP; +class QTouchEvent; +class QGestureEvent; //---------------------------------------------------------------------------- @@ -61,6 +64,18 @@ obsolete class until the shader fx being overhauled. 2016/6/22 Shun */ class DVAPI PlaneViewer : public GLWidgetForHighDpi { + Q_OBJECT + bool m_touchActive = false; + bool m_gestureActive = false; + QTouchDevice::DeviceType m_touchDevice = QTouchDevice::TouchScreen; + bool m_zooming = false; + bool m_panning = false; + double m_scaleFactor; // used for zoom gesture + + bool m_stylusUsed = false; + + bool m_firstDraw; + public: PlaneViewer(QWidget *parent); @@ -99,8 +114,6 @@ public: TAffine &viewAff() { return m_aff; } const TAffine &viewAff() const { return m_aff; } - void resetView(); - void zoomIn(); void zoomOut(); @@ -123,6 +136,11 @@ public: TRaster32P rasterBuffer(); void flushRasterBuffer(); +public slots: + + void resetView(); + void fitView(); + protected: int m_xpos, m_ypos; //!< Mouse position on mouse operations. TAffine m_aff; //!< Affine transform from world to widget coords. @@ -135,13 +153,25 @@ protected: double m_zoomRange[2]; //!< Viewport zoom range (default: [-1024, 1024]). + TRect m_imageBounds; + + double m_dpiX, m_dpiY; + protected: + virtual void contextMenuEvent(QContextMenuEvent *event) override; virtual void mouseMoveEvent(QMouseEvent *event) override; virtual void mousePressEvent(QMouseEvent *event) override; + virtual void mouseReleaseEvent(QMouseEvent *event) override; virtual void wheelEvent(QWheelEvent *event) override; virtual void keyPressEvent(QKeyEvent *event) override; virtual void hideEvent(QHideEvent *event) override; + virtual void mouseDoubleClickEvent(QMouseEvent *event) override; + virtual void tabletEvent(QTabletEvent *e) override; + void touchEvent(QTouchEvent *e, int type); + void gestureEvent(QGestureEvent *e); + virtual bool event(QEvent *e) override; + void initializeGL() override final; void resizeGL(int width, int height) override final; @@ -150,6 +180,7 @@ private: bool m_firstResize; int m_width; int m_height; + QPointF m_firstPanPoint; }; #endif // PLANE_VIEWER_H diff --git a/toonz/sources/include/toonzqt/schematicnode.h b/toonz/sources/include/toonzqt/schematicnode.h index 67a4c77..c426125 100644 --- a/toonz/sources/include/toonzqt/schematicnode.h +++ b/toonz/sources/include/toonzqt/schematicnode.h @@ -144,13 +144,13 @@ signals: class SchematicToggle_SplineOptions final : public SchematicToggle { Q_OBJECT public: - SchematicToggle_SplineOptions(SchematicNode *parent, const QPixmap &pixmap, + SchematicToggle_SplineOptions(SchematicNode *parent, const QIcon &imageIcon, int flags) - : SchematicToggle(parent, QIcon(pixmap), QColor(0, 0, 0, 0), flags) {} - SchematicToggle_SplineOptions(SchematicNode *parent, const QPixmap &pixmap1, - const QPixmap &pixmap2, int flags) - : SchematicToggle(parent, QIcon(pixmap1), QIcon(pixmap2), - QColor(0, 0, 0, 0), flags) {} + : SchematicToggle(parent, imageIcon, QColor(0, 0, 0, 0), flags) {} + SchematicToggle_SplineOptions(SchematicNode *parent, const QIcon &imageIcon, + const QIcon &imageIcon2, int flags) + : SchematicToggle(parent, imageIcon, imageIcon2, QColor(0, 0, 0, 0), + flags) {} void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) override; diff --git a/toonz/sources/include/toonzqt/schematicviewer.h b/toonz/sources/include/toonzqt/schematicviewer.h index 071af6a..52c6a16 100644 --- a/toonz/sources/include/toonzqt/schematicviewer.h +++ b/toonz/sources/include/toonzqt/schematicviewer.h @@ -106,7 +106,7 @@ public: SchematicSceneViewer(QWidget *parent); ~SchematicSceneViewer(); - void zoomQt(bool zoomin, bool resetZoom); + void zoomQt(bool zoomin, bool resetView); QPointF getOldScenePos() { return m_oldScenePos; } @@ -120,10 +120,13 @@ protected: protected slots: - void fitScene(); void centerOnCurrent(); void reorderScene(); + +public slots: + void normalizeScene(); + void fitScene(); private: Qt::MouseButton m_buttonState; diff --git a/toonz/sources/include/toonzqt/studiopaletteviewer.h b/toonz/sources/include/toonzqt/studiopaletteviewer.h index c8fdf64..7b572ef 100644 --- a/toonz/sources/include/toonzqt/studiopaletteviewer.h +++ b/toonz/sources/include/toonzqt/studiopaletteviewer.h @@ -5,6 +5,7 @@ #include "toonz/studiopalette.h" #include "toonz/tproject.h" +#include "toonzqt/dvdialog.h" #include #include @@ -27,6 +28,10 @@ class PalettesScanPopup; class TXsheetHandle; class TXshLevelHandle; class PaletteViewer; +namespace DVGui { +class IntField; +} + //============================================================================= //! The StudioPaletteTreeViewer class provides an object to view and manage //! palettes files. @@ -223,4 +228,16 @@ public: void setViewMode(int mode); }; +//----------------------------------------------------------------------------- + +class AdjustPaletteDialog final : public DVGui::Dialog { + Q_OBJECT +private: + DVGui::IntField *m_tolerance; + +public: + int getTolerance(); + AdjustPaletteDialog(); +}; + #endif // STUDIOPALETTEVIEWER_H diff --git a/toonz/sources/include/toonzqt/styleeditor.h b/toonz/sources/include/toonzqt/styleeditor.h index 484bdad..1f53f58 100644 --- a/toonz/sources/include/toonzqt/styleeditor.h +++ b/toonz/sources/include/toonzqt/styleeditor.h @@ -152,6 +152,8 @@ class DVAPI HexagonalColorWheel final : public GLWidgetForHighDpi { QOpenGLFramebufferObject *m_fbo = NULL; LutCalibrator *m_lutCalibrator = NULL; + bool m_firstInitialized = true; + private: void drawCurrentColorMark(); void clickLeftWheel(const QPoint &pos); diff --git a/toonz/sources/include/toonzqt/swatchviewer.h b/toonz/sources/include/toonzqt/swatchviewer.h index d772d36..f6115bc 100644 --- a/toonz/sources/include/toonzqt/swatchviewer.h +++ b/toonz/sources/include/toonzqt/swatchviewer.h @@ -16,6 +16,8 @@ #include "tthread.h" #include "trop.h" +#include + using namespace TThread; #undef DVAPI @@ -28,6 +30,13 @@ using namespace TThread; #define DVVAR DV_IMPORT_VAR #endif +//----------------------------------------------------------------------------- + +// Forward declarations + +class QTouchEvent; +class QGestureEvent; + //============================================================================= class DVAPI BgPainter { @@ -113,6 +122,7 @@ class DVAPI SwatchViewer final : public QWidget { TPointD m_pointPosDelta; bool m_enabled; + bool m_firstEnabled; int m_frame; TThread::Executor m_executor; TThread::Mutex m_mutex; @@ -129,6 +139,15 @@ class DVAPI SwatchViewer final : public QWidget { bool m_computing; + bool m_touchActive = false; + bool m_gestureActive = false; + QTouchDevice::DeviceType m_touchDevice = QTouchDevice::TouchScreen; + bool m_zooming = false; + bool m_panning = false; + double m_scaleFactor; // used for zoom gesture + + bool m_stylusUsed = false; + friend class ContentRender; public: @@ -179,6 +198,8 @@ public slots: void setEnable(bool enabled); void updateSize(const QSize &size); void setBgPainter(TPixel32 color1, TPixel32 color2 = TPixel32()); + void resetView(); + void fitView(); protected: void computeContent(); @@ -186,6 +207,7 @@ protected: TPointD win2world(const TPoint &p) const; void zoom(const TPoint &pos, double factor); void zoom(bool forward, bool reset); + void pan(const TPoint &delta); void updateRaster(); @@ -194,6 +216,7 @@ protected: void setAff(const TAffine &aff); + void contextMenuEvent(QContextMenuEvent *event) override; void paintEvent(QPaintEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; @@ -203,6 +226,15 @@ protected: void resizeEvent(QResizeEvent *event) override; void hideEvent(QHideEvent *event) override; + void mouseDoubleClickEvent(QMouseEvent *event) override; + void tabletEvent(QTabletEvent *e) override; + void touchEvent(QTouchEvent *e, int type); + void gestureEvent(QGestureEvent *e); + bool event(QEvent *e) override; + +private: + QPointF m_firstPanPoint; + signals: void pointPositionChanged(int index, const TPointD &p); }; diff --git a/toonz/sources/include/toonzqt/viewcommandids.h b/toonz/sources/include/toonzqt/viewcommandids.h index 36eee9c..c8a8b3a 100644 --- a/toonz/sources/include/toonzqt/viewcommandids.h +++ b/toonz/sources/include/toonzqt/viewcommandids.h @@ -3,6 +3,7 @@ #ifndef VIEWCOMMANDIDS_H #define VIEWCOMMANDIDS_H +#define V_ViewReset "T_ViewReset" #define V_ZoomIn "T_Zoomin" // Can't change prefix due to retrocompatibility #define V_ZoomOut "T_Zoomout" #define V_ZoomReset "T_ZoomReset" @@ -11,5 +12,17 @@ #define V_ActualPixelSize "T_ActualPixelSize" #define V_FlipX "T_FlipX" #define V_FlipY "T_FlipY" +#define V_RotateReset "T_RotateReset" +#define V_PositionReset "T_PositionReset" + +// folloing command ids are for command bar +#define VB_ViewReset "VB_ViewReset" +#define VB_ZoomFit "VB_ZoomFit" +#define VB_ZoomReset "VB_ZoomReset" +#define VB_RotateReset "VB_RotateReset" +#define VB_PositionReset "VB_PositionReset" +#define VB_ActualPixelSize "VB_ActualPixelSize" +#define VB_FlipX "VB_FlipX" +#define VB_FlipY "VB_FlipY" #endif // VIEWCOMMANDIDS_H diff --git a/toonz/sources/include/tpalette.h b/toonz/sources/include/tpalette.h index 63c41e7..0e77668 100644 --- a/toonz/sources/include/tpalette.h +++ b/toonz/sources/include/tpalette.h @@ -132,13 +132,13 @@ public: //! \return The insertion index in the page, or \p -1 on failure int addStyle(int styleId); //!< Adds the specified style Id to the page (at //! the \a back - //! of the page). - /*! -\warning The supplied style must have been allocated with \a new. -\warning Style ownership is surrendered to the palette. -\return The insertion index in the page, or \p -1 on failure. - In case of failure, the supplied style is \a deleted. -*/ + //! of the page). + /*! + \warning The supplied style must have been allocated with \a new. + \warning Style ownership is surrendered to the palette. + \return The insertion index in the page, or \p -1 on failure. + In case of failure, the supplied style is \a deleted. + */ int addStyle(TColorStyle *style); //!< Adds the specified style to the //! palette, and assigns it //! to this page. @@ -214,6 +214,8 @@ private: int m_shortcutScopeIndex; + int m_currentStyleId; + public: TPalette(); ~TPalette(); @@ -425,6 +427,9 @@ between RGBA color components. void nextShortcutScope(bool invert); + void setCurrentStyleId(int id) { m_currentStyleId = id; } + int getCurrentStyleId() const { return m_currentStyleId; } + public: // Deprecated functions diff --git a/toonz/sources/include/tpixel.h b/toonz/sources/include/tpixel.h index 5dd25b0..5b633f2 100644 --- a/toonz/sources/include/tpixel.h +++ b/toonz/sources/include/tpixel.h @@ -40,7 +40,7 @@ class TPixelGR16; A set of predefined colors are included as well. Note that channel ordering is platform depending. */ -class DVAPI DV_ALIGNED(4) TPixelRGBM32 { +class DVAPI alignas(4) TPixelRGBM32 { TPixelRGBM32(TUINT32 mask) { *(TUINT32 *)this = mask; }; public: @@ -154,9 +154,9 @@ dithering // Since SSE2 mostly require 16 byte aligned, changing 8 byte align to 4 byte // align will not cause problems. #if defined(_MSC_VER) && !defined(x64) -class DVAPI DV_ALIGNED(4) TPixelRGBM64 { +class DVAPI alignas(4) TPixelRGBM64 { #else -class DVAPI DV_ALIGNED(8) TPixelRGBM64 { +class DVAPI alignas(8) TPixelRGBM64 { #endif public: static const int maxChannelValue; diff --git a/toonz/sources/include/tspectrumparam.h b/toonz/sources/include/tspectrumparam.h index 3cac6df..8eed363 100644 --- a/toonz/sources/include/tspectrumparam.h +++ b/toonz/sources/include/tspectrumparam.h @@ -42,7 +42,7 @@ class DVAPI TSpectrumParam final : public TParam { public: TSpectrumParam(); - TSpectrumParam(int keyCount, TSpectrum::ColorKey keys[]); + TSpectrumParam(std::vector const &keys); TSpectrumParam(const TSpectrumParam &); ~TSpectrumParam(); @@ -102,9 +102,9 @@ class DVAPI TSpectrumParamP final : public TDerivedSmartPointerT { public: TSpectrumParamP() {} - TSpectrumParamP(int keyCount, TSpectrum::ColorKey keys[]) + TSpectrumParamP(std::vector const &keys) : TDerivedSmartPointerT( - new TSpectrumParam(keyCount, keys)) {} + new TSpectrumParam(keys)) {} TSpectrumParamP(TSpectrumParam *p) : TDerivedSmartPointerT(p) {} TSpectrumParamP(const TParamP &p) diff --git a/toonz/sources/include/tsystem.h b/toonz/sources/include/tsystem.h index 1c2e8ca..ddd01ae 100644 --- a/toonz/sources/include/tsystem.h +++ b/toonz/sources/include/tsystem.h @@ -115,9 +115,12 @@ DVAPI void readDirectoryTree(TFilePathSet &fpset, const TFilePathSet &pathSet, DVAPI void readDirectory(TFilePathSet &groupFpSet, TFilePathSet &allFpSet, const TFilePath &path); -// return the file list which is readable and executable +// return the folder path list which is readable and executable DVAPI void readDirectory_Dir_ReadExe(TFilePathSet &dst, const TFilePath &path); +// return the folder item list which is readable and executable (only names) +DVAPI void readDirectory_DirItems(QStringList &dst, const TFilePath &path); + // creano un set nuovo DVAPI TFilePathSet readDirectory(const TFilePath &path, bool groupFrames = true, bool onlyFiles = false, diff --git a/toonz/sources/stdfx/cloudsfx.cpp b/toonz/sources/stdfx/cloudsfx.cpp index 3196622..0fe2b00 100644 --- a/toonz/sources/stdfx/cloudsfx.cpp +++ b/toonz/sources/stdfx/cloudsfx.cpp @@ -28,10 +28,10 @@ public: bindParam(this, "min", m_min); bindParam(this, "max", m_max); bindParam(this, "evolution", m_evol); - TSpectrum::ColorKey colors[] = { + std::vector colors = { TSpectrum::ColorKey(0, TPixel32::White), TSpectrum::ColorKey(1, TPixel32::Transparent)}; - m_colors = TSpectrumParamP(tArrayCount(colors), colors); + m_colors = TSpectrumParamP(colors); bindParam(this, "colors", m_colors); m_size->setValueRange(0, 200); m_min->setValueRange(0, 1.0); @@ -57,15 +57,15 @@ public: //================================================================== void CloudsFx::doCompute(TTile &tile, double frame, const TRenderSettings &ri) { - double scale = sqrt(fabs(ri.m_affine.det())); - int type = m_type->getValue(); - double min = m_min->getValue(frame); - double max = m_max->getValue(frame); - double evolution = m_evol->getValue(frame); - double size = m_size->getValue(frame) / ri.m_shrinkX; - size = fabs(size); + double scale = sqrt(fabs(ri.m_affine.det())); + int type = m_type->getValue(); + double min = m_min->getValue(frame); + double max = m_max->getValue(frame); + double evolution = m_evol->getValue(frame); + double size = m_size->getValue(frame) / ri.m_shrinkX; + size = fabs(size); if (size < 0.01) size = 0.01; - TPointD pos = tile.m_pos; + TPointD pos = tile.m_pos; doClouds(tile.getRaster(), m_colors, pos, evolution, size, min, max, type, scale, frame); diff --git a/toonz/sources/stdfx/diamondgradientfx.cpp b/toonz/sources/stdfx/diamondgradientfx.cpp index 03d544c..72f4f71 100644 --- a/toonz/sources/stdfx/diamondgradientfx.cpp +++ b/toonz/sources/stdfx/diamondgradientfx.cpp @@ -13,13 +13,14 @@ class DiamondGradientFx final : public TStandardZeraryFx { public: DiamondGradientFx() : m_size(100.0) { - TSpectrum::ColorKey colors[] = {TSpectrum::ColorKey(0, TPixel32::White), - TSpectrum::ColorKey(0.2, TPixel32::Yellow), - TSpectrum::ColorKey(0.4, TPixel32::Blue), - TSpectrum::ColorKey(0.6, TPixel32::Green), - TSpectrum::ColorKey(0.8, TPixel32::Magenta), - TSpectrum::ColorKey(1, TPixel32::Red)}; - m_colors = TSpectrumParamP(tArrayCount(colors), colors); + std::vector colors = { + TSpectrum::ColorKey(0, TPixel32::White), + TSpectrum::ColorKey(0.2, TPixel32::Yellow), + TSpectrum::ColorKey(0.4, TPixel32::Blue), + TSpectrum::ColorKey(0.6, TPixel32::Green), + TSpectrum::ColorKey(0.8, TPixel32::Magenta), + TSpectrum::ColorKey(1, TPixel32::Red)}; + m_colors = TSpectrumParamP(colors); m_size->setMeasureName("fxLength"); bindParam(this, "colors", m_colors); bindParam(this, "size", m_size); diff --git a/toonz/sources/stdfx/gradients.cpp b/toonz/sources/stdfx/gradients.cpp index 6fea2e4..89d516a 100644 --- a/toonz/sources/stdfx/gradients.cpp +++ b/toonz/sources/stdfx/gradients.cpp @@ -13,7 +13,8 @@ namespace { template void doComputeRadialT(TRasterPT ras, TPointD posTrasf, const TSpectrumT &spectrum, double period, - double count, double cycle, const TAffine &aff) { + double count, double cycle, const TAffine &aff, + double inner = 0.0, GradientCurveType type = Linear) { int j; double maxRadius = period * count; double freq = 1.0 / period; @@ -29,8 +30,30 @@ void doComputeRadialT(TRasterPT ras, TPointD posTrasf, t = (radius + cycle) * freq; t -= floor(t); } - // double polinomfactor=(-2*t+3)*(t*t); - *pix++ = spectrum.getPremultipliedValue(t); + + if (t <= inner) + t = 0; + else + t = (t - inner) / (1.0 - inner); + + double factor; + switch (type) { + case Linear: + factor = t; + break; + case EaseIn: + factor = t * t; + break; + case EaseOut: + factor = 1.0 - (1.0 - t) * (1.0 - t); + break; + case EaseInOut: + default: + factor = (-2 * t + 3) * (t * t); + break; + } + *pix++ = spectrum.getPremultipliedValue(factor); + posAux.x += aff.a11; posAux.y += aff.a21; } @@ -39,19 +62,20 @@ void doComputeRadialT(TRasterPT ras, TPointD posTrasf, } ras->unlock(); } -} +} // namespace //------------------------------------------------------------------ void multiRadial(const TRasterP &ras, TPointD posTrasf, const TSpectrumParamP colors, double period, double count, - double cycle, const TAffine &aff, double frame) { + double cycle, const TAffine &aff, double frame, double inner, + GradientCurveType type) { if ((TRaster32P)ras) doComputeRadialT(ras, posTrasf, colors->getValue(frame), period, - count, cycle, aff); + count, cycle, aff, inner, type); else if ((TRaster64P)ras) doComputeRadialT(ras, posTrasf, colors->getValue64(frame), period, - count, cycle, aff); + count, cycle, aff, inner, type); else throw TException("MultiRadialGradientFx: unsupported Pixel Type"); } @@ -63,7 +87,8 @@ template void doComputeLinearT(TRasterPT ras, TPointD posTrasf, const TSpectrumT &spectrum, double period, double count, double w_amplitude, double w_freq, - double w_phase, double cycle, const TAffine &aff) { + double w_phase, double cycle, const TAffine &aff, + GradientCurveType type = EaseInOut) { double shift = 0; double maxRadius = period * count / 2.; double freq = 1.0 / period; @@ -78,16 +103,32 @@ void doComputeLinearT(TRasterPT ras, TPointD posTrasf, T *endPix = pix + ras->getLx(); while (pix < endPix) { if (w_amplitude) shift = w_amplitude * sin(w_freq * posAux.y + w_phase); - double radius = posAux.x + shift; - double t = 1; + double radius = posAux.x + shift; + double t = 1; if (fabs(radius) < maxRadius) { t = (radius + maxRadius + cycle) * freq; t -= floor(t); } else if (radius < 0) - t = 0; - double polinomfactor = (-2 * t + 3) * (t * t); + t = 0; + + double factor; + switch (type) { + case Linear: + factor = t; + break; + case EaseIn: + factor = t * t; + break; + case EaseOut: + factor = 1.0 - (1.0 - t) * (1.0 - t); + break; + case EaseInOut: + default: + factor = (-2 * t + 3) * (t * t); + break; + } // pos.x += 1.0; - *pix++ = spectrum.getPremultipliedValue(polinomfactor); + *pix++ = spectrum.getPremultipliedValue(factor); posAux.x += aff.a11; posAux.y += aff.a21; } @@ -96,19 +137,19 @@ void doComputeLinearT(TRasterPT ras, TPointD posTrasf, } ras->unlock(); } -} +} // namespace //------------------------------------------------------------------ void multiLinear(const TRasterP &ras, TPointD posTrasf, const TSpectrumParamP colors, double period, double count, double amplitude, double freq, double phase, double cycle, - const TAffine &aff, double frame) { + const TAffine &aff, double frame, GradientCurveType type) { if ((TRaster32P)ras) doComputeLinearT(ras, posTrasf, colors->getValue(frame), period, - count, amplitude, freq, phase, cycle, aff); + count, amplitude, freq, phase, cycle, aff, type); else if ((TRaster64P)ras) doComputeLinearT(ras, posTrasf, colors->getValue64(frame), period, - count, amplitude, freq, phase, cycle, aff); + count, amplitude, freq, phase, cycle, aff, type); else throw TException("MultiLinearGradientFx: unsupported Pixel Type"); } diff --git a/toonz/sources/stdfx/gradients.h b/toonz/sources/stdfx/gradients.h index 411512d..2650374 100644 --- a/toonz/sources/stdfx/gradients.h +++ b/toonz/sources/stdfx/gradients.h @@ -15,17 +15,21 @@ struct MultiRAdialParams { double m_gridStep; }; +enum GradientCurveType { EaseInOut = 0, Linear, EaseIn, EaseOut }; + /*---------------------------------------------------------------------------*/ //! Deals with raster tiles and invokes multiradial functions void multiRadial(const TRasterP &ras, TPointD posTrasf, const TSpectrumParamP colors, double period, double count, - double cycle, const TAffine &aff, double frame); + double cycle, const TAffine &aff, double frame, + double inner = 0.0, GradientCurveType type = Linear); void multiLinear(const TRasterP &ras, TPointD posTrasf, const TSpectrumParamP colors, double period, double count, double amplitude, double freq, double phase, double cycle, - const TAffine &aff, double frame); + const TAffine &aff, double frame, + GradientCurveType type = EaseInOut); #endif diff --git a/toonz/sources/stdfx/igs_line_blur.cpp b/toonz/sources/stdfx/igs_line_blur.cpp index ac9fc9d..68bac49 100644 --- a/toonz/sources/stdfx/igs_line_blur.cpp +++ b/toonz/sources/stdfx/igs_line_blur.cpp @@ -25,14 +25,16 @@ typedef int int32_t; extern "C" { #endif +/* extern void pri_funct_cv_start(int32_t i32_ys); extern void pri_funct_cv_run(int32_t i32_y); extern void pri_funct_cv_end(void); extern void pri_funct_set_cp_title(const char *cp_title); -extern void pri_funct_msg_ttvr(const char *fmt, ...); -extern void pri_funct_msg_vr(const char *fmt, ...); -extern void pri_funct_err_bttvr(const char *fmt, ...); +extern void pri_funct_msg_ttvr(const char* fmt, ...); +extern void pri_funct_msg_vr(const char* fmt, ...); +extern void pri_funct_err_bttvr(const char* fmt, ...); +*/ #ifdef __cplusplus } @@ -1046,7 +1048,7 @@ double calculator_geometry::get_d_radian(double d_xv, double d_yv) { } /* 第2象限 (第1象限に置き換えて... 0 <= angle < 90) */ else if ((d_xv <= 0.0) && (0.0 < d_yv)) { - d_radian = atan(-d_xv / d_yv) + M_PI_2; + d_radian = atan(-d_xv / d_yv) + M_PI / 2.0; } /* 第3象限 (第1象限に置き換えて... 0 <= angle < 90) */ else if ((d_xv < 0.0) && (d_yv <= 0.0)) { @@ -1054,7 +1056,7 @@ double calculator_geometry::get_d_radian(double d_xv, double d_yv) { } /* 第4象限 (第1象限に置き換えて... 0 <= angle < 90) */ else if ((0.0 <= d_xv) && (d_yv < 0.0)) { - d_radian = atan(d_xv / -d_yv) + M_PI + M_PI_2; + d_radian = atan(d_xv / -d_yv) + M_PI + M_PI / 2.0; } return d_radian; } @@ -1712,11 +1714,10 @@ int pixel_line_node::expand_line(pixel_point_root *clp_pixel_point_root) { /* 始点が端点ならば先へ伸ばす */ i32_body_point_count = this->_i32_point_count; if (NULL == clp_one->get_clp_link_near(1)) { /* 2点目がないなら端点 */ - if (OK != - this->_expand_line_from_one(clp_pixel_point_root, i32_body_point_count, - this->get_clp_link_one(), - this->get_clp_link_another(), - d_radian_one)) { + if (OK != this->_expand_line_from_one( + clp_pixel_point_root, i32_body_point_count, + this->get_clp_link_one(), this->get_clp_link_another(), + d_radian_one)) { pri_funct_err_bttvr( "Error : this->_expand_line_from_one(-) returns NULL."); return NG; @@ -1725,11 +1726,10 @@ int pixel_line_node::expand_line(pixel_point_root *clp_pixel_point_root) { /* 終点が端点ならば先へ伸ばす */ if (NULL == clp_another->get_clp_link_near(1)) { /* 2点目がないなら端点 */ - if (OK != - this->_expand_line_from_another( - clp_pixel_point_root, i32_body_point_count, - this->get_clp_link_one(), this->get_clp_link_another(), - d_radian_another)) { + if (OK != this->_expand_line_from_another( + clp_pixel_point_root, i32_body_point_count, + this->get_clp_link_one(), this->get_clp_link_another(), + d_radian_another)) { pri_funct_err_bttvr( "Error : this->_expand_line_from_another(-) returns NULL."); return NG; @@ -4176,7 +4176,7 @@ void pixel_select_curve_blur_root::exec(double d_xp, double d_yp, if ((M_PI / 2.0 < d_radius) && (d_radius < M_PI * 3.0 / 2.0)) { clp_start_point = clp_line->get_next_point_by_count(clp_near_point, i32_blur_count / 2); - i_reverse_sw = true; + i_reverse_sw = true; } } @@ -5484,7 +5484,7 @@ void igs_line_blur_brush_curve_point_put_image_template_( const int width // no_margin , const int channels, T *image_top // no_margin - ) { +) { for (int zz = 0; zz < channels; ++zz) { image_top[yp * channels * width + xp * channels + zz] = static_cast(dp_pixel[zz]); @@ -5502,7 +5502,7 @@ void igs_line_blur_brush_curve_point_put_image_( const int width // no_margin , const int channels, const int bits, void *out // no_margin - ) { +) { if ((xp < 0) && (width <= xp) && (yp < 0) && (height <= yp)) { throw std::domain_error( "Error : igs::line_blur::_brush_curve_point_put_image(-)"); @@ -5624,8 +5624,7 @@ int igs_line_blur_brush_curve_blur_subpixel_( } int igs_line_blur_brush_curve_blur_all_( - bool mv_sw, bool pv_sw, bool cv_sw, - brush_curve_blur &cl_brush_curve_blur, + bool mv_sw, bool pv_sw, bool cv_sw, brush_curve_blur &cl_brush_curve_blur, pixel_select_curve_blur_root &cl_pixel_select_curve_blur_root, pixel_line_root &cl_pixel_line_root @@ -5637,7 +5636,7 @@ int igs_line_blur_brush_curve_blur_all_( const int width // no_margin , const int channels, const int bits, void *out // no_margin - ) { +) { /* 処理ごとのメッセージ */ if (mv_sw) { std::cout << "igs::line_blur::_brush_curve_blur_all()" << std::endl; @@ -5797,7 +5796,7 @@ void igs_line_blur_brush_smudge_put_image_( const int width // no_margin , const int channels, const int bits, void *out // no_margin - ) { +) { /* 画像上に置いたブラシの範囲 */ double x1, y1, x2, y2; cl_brush_smudge_circle.get_dp_area(d_xp, d_yp, &x1, &y1, &x2, &y2); @@ -5953,7 +5952,7 @@ void igs_line_blur_brush_smudge_all_( const int width // no_margin , const int channels, const int bits, void *out // no_margin - ) { +) { /* 処理ごとのメッセージ */ if (mv_sw) { std::cout << "igs::line_expand::_brush_smudge_all()" << std::endl; @@ -6082,7 +6081,7 @@ void igs_line_blur_image_get_(const bool mv_sw, const bool cv_sw, pri_funct_cv_end(); } } -} +} // namespace #include #include @@ -6099,7 +6098,8 @@ void igs::line_blur::convert( , const int width // no_margin , - const int channels, const int bits + const int channels, + const int bits /* Action */ , @@ -6138,7 +6138,7 @@ void igs::line_blur::convert( const bool debug_save_sw /* false=OFF */ , const int brush_action /* 0 =Curve Blur ,1=Smudge Brush */ - ) { +) { /* --- 動作クラスコンストラクション --- */ thinnest_ui16_image cl_thinnest_ui16_image; pixel_point_root cl_pixel_point_root; @@ -6253,11 +6253,10 @@ void igs::line_blur::convert( /****** ベクトルリスト処理 start ******/ /* 細線化した画像をリストにする */ - if (OK != - cl_pixel_point_root.alloc_mem_and_list_node( - cl_thinnest_ui16_image.get_i32_xs(), - cl_thinnest_ui16_image.get_i32_ys(), - cl_thinnest_ui16_image.get_ui16p_src_channel())) { + if (OK != cl_pixel_point_root.alloc_mem_and_list_node( + cl_thinnest_ui16_image.get_i32_xs(), + cl_thinnest_ui16_image.get_i32_ys(), + cl_thinnest_ui16_image.get_ui16p_src_channel())) { throw std::domain_error( "Error : cl_pixel_point_root.alloc_mem_and_list_node() returns NG"); } @@ -6281,9 +6280,8 @@ void igs::line_blur::convert( throw std::domain_error( "Error : cl_pixel_line_root.save_another_point(-) returns NG"); } - if (OK != - cl_pixel_line_root.save_not_include(&(cl_pixel_point_root), - "tmp11_not_include.txt")) { + if (OK != cl_pixel_line_root.save_not_include(&(cl_pixel_point_root), + "tmp11_not_include.txt")) { throw std::domain_error( "Error : cl_pixel_line_root.save_not_include(-) returns NG"); } @@ -6335,15 +6333,13 @@ void igs::line_blur::convert( throw std::domain_error( "Error : cl_pixel_line_root.save_expand_lines(-) returns NG"); } - if (OK != - cl_pixel_line_root.save_one_expand_point( - "tmp16_one_expand_point.txt")) { + if (OK != cl_pixel_line_root.save_one_expand_point( + "tmp16_one_expand_point.txt")) { throw std::domain_error( "Error : cl_pixel_line_root.save_one_expand_point(-) returns NG"); } - if (OK != - cl_pixel_line_root.save_another_expand_point( - "tmp17_another_expand_point.txt")) { + if (OK != cl_pixel_line_root.save_another_expand_point( + "tmp17_another_expand_point.txt")) { throw std::domain_error( "Error : cl_pixel_line_root.save_another_expand_point(-) returns NG"); } diff --git a/toonz/sources/stdfx/igs_line_blur.h b/toonz/sources/stdfx/igs_line_blur.h index f857754..a04e98c 100644 --- a/toonz/sources/stdfx/igs_line_blur.h +++ b/toonz/sources/stdfx/igs_line_blur.h @@ -1,5 +1,3 @@ -#pragma once - #ifndef igs_line_blur_h #define igs_line_blur_h @@ -20,7 +18,8 @@ IGS_LINE_BLUR_EXPORT void convert( , const int width // no_margin , - const int channels, const int bits + const int channels, + const int bits /* Action Geometry */ , @@ -59,8 +58,8 @@ IGS_LINE_BLUR_EXPORT void convert( const bool debug_save_sw /* false=OFF */ , const int brush_action /* 0 =Curve Blur ,1=Smudge Brush */ - ); -} +); } +} // namespace igs #endif /* !igs_line_blur_h */ diff --git a/toonz/sources/stdfx/ino_line_blur.cpp b/toonz/sources/stdfx/ino_line_blur.cpp index 6df5675..f005ae4 100644 --- a/toonz/sources/stdfx/ino_line_blur.cpp +++ b/toonz/sources/stdfx/ino_line_blur.cpp @@ -20,7 +20,8 @@ IGS_LINE_BLUR_EXPORT void convert( , const int width // no_margin , - const int channels, const int bits + const int channels, + const int bits /* Action Geometry */ , @@ -59,9 +60,9 @@ IGS_LINE_BLUR_EXPORT void convert( const bool debug_save_sw /* false=OFF */ , const int brush_action /* 0 =Curve Blur ,1=Smudge Brush */ - ); -} +); } +} // namespace igs #endif /* !igs_line_blur_h */ @@ -93,14 +94,14 @@ extern "C" { #endif /* -extern void pri_funct_cv_start( int32_t i32_ys ); -extern void pri_funct_cv_run( int32_t i32_y ); -extern void pri_funct_cv_end( void ); - -extern void pri_funct_set_cp_title(const char *cp_title ); -extern void pri_funct_msg_ttvr( const char* fmt, ...); -extern void pri_funct_msg_vr( const char* fmt, ...); -extern void pri_funct_err_bttvr( const char* fmt, ...); +extern void pri_funct_cv_start(int32_t i32_ys); +extern void pri_funct_cv_run(int32_t i32_y); +extern void pri_funct_cv_end(void); + +extern void pri_funct_set_cp_title(const char *cp_title); +extern void pri_funct_msg_ttvr(const char* fmt, ...); +extern void pri_funct_msg_vr(const char* fmt, ...); +extern void pri_funct_err_bttvr(const char* fmt, ...); */ #ifdef __cplusplus @@ -253,6 +254,7 @@ void pri_funct_err_bttvr(const char *fmt, ...) { #ifndef _list_node_h_ #define _list_node_h_ + #include class list_node { @@ -761,9 +763,9 @@ public: void mem_free(void); private: - int _i_mv_sw, /* Method Verbose */ - _i_pv_sw, /* Parameter Verbose */ - _i_cv_sw; /* Counter Verbose */ + bool _i_mv_sw; /* Method Verbose */ + bool _i_pv_sw; /* Parameter Verbose */ + bool _i_cv_sw; /* Counter Verbose */ int32_t _i32_size_by_pixel, _i32_subpixel_divide; double _d_ratio; @@ -1780,11 +1782,10 @@ int pixel_line_node::expand_line(pixel_point_root *clp_pixel_point_root) { /* 始点が端点ならば先へ伸ばす */ i32_body_point_count = this->_i32_point_count; if (NULL == clp_one->get_clp_link_near(1)) { /* 2点目がないなら端点 */ - if (OK != - this->_expand_line_from_one(clp_pixel_point_root, i32_body_point_count, - this->get_clp_link_one(), - this->get_clp_link_another(), - d_radian_one)) { + if (OK != this->_expand_line_from_one( + clp_pixel_point_root, i32_body_point_count, + this->get_clp_link_one(), this->get_clp_link_another(), + d_radian_one)) { pri_funct_err_bttvr( "Error : this->_expand_line_from_one(-) returns NULL."); return NG; @@ -1793,11 +1794,10 @@ int pixel_line_node::expand_line(pixel_point_root *clp_pixel_point_root) { /* 終点が端点ならば先へ伸ばす */ if (NULL == clp_another->get_clp_link_near(1)) { /* 2点目がないなら端点 */ - if (OK != - this->_expand_line_from_another( - clp_pixel_point_root, i32_body_point_count, - this->get_clp_link_one(), this->get_clp_link_another(), - d_radian_another)) { + if (OK != this->_expand_line_from_another( + clp_pixel_point_root, i32_body_point_count, + this->get_clp_link_one(), this->get_clp_link_another(), + d_radian_another)) { pri_funct_err_bttvr( "Error : this->_expand_line_from_another(-) returns NULL."); return NG; @@ -4244,7 +4244,7 @@ void pixel_select_curve_blur_root::exec(double d_xp, double d_yp, if ((M_PI / 2.0 < d_radius) && (d_radius < M_PI * 3.0 / 2.0)) { clp_start_point = clp_line->get_next_point_by_count(clp_near_point, i32_blur_count / 2); - i_reverse_sw = true; + i_reverse_sw = true; } } @@ -5208,15 +5208,15 @@ int thinnest_ui16_image::exec05_thin(void) { /* メモリ開放 */ void thinnest_ui16_image::mem_free(void) { #if 0 - if (NULL != this->_ui16p_channel[0]) { - if (this->_i_mv_sw) { - pri_funct_msg_ttvr( "thinnest_ui16_image::mem_free()" ); - } - - free( this->_ui16p_channel[0]);/* ここで落ちる2014-5-16 */ - this->_ui16p_channel[0] = NULL; - this->_ui16p_channel[1] = NULL; - } + if (NULL != this->_ui16p_channel[0]) { + if (this->_i_mv_sw) { + pri_funct_msg_ttvr( "thinnest_ui16_image::mem_free()" ); + } + + free( this->_ui16p_channel[0]);/* ここで落ちる2014-5-16 */ + this->_ui16p_channel[0] = NULL; + this->_ui16p_channel[1] = NULL; + } #endif if (NULL != this->memory_free_this_) { if (this->_i_mv_sw) { @@ -5552,7 +5552,7 @@ void igs_line_blur_brush_curve_point_put_image_template_( const int width // no_margin , const int channels, T *image_top // no_margin - ) { +) { for (int zz = 0; zz < channels; ++zz) { image_top[yp * channels * width + xp * channels + zz] = static_cast(dp_pixel[zz]); @@ -5570,7 +5570,7 @@ void igs_line_blur_brush_curve_point_put_image_( const int width // no_margin , const int channels, const int bits, void *out // no_margin - ) { +) { if ((xp < 0) && (width <= xp) && (yp < 0) && (height <= yp)) { throw std::domain_error( "Error : igs::line_blur::_brush_curve_point_put_image(-)"); @@ -5692,8 +5692,7 @@ int igs_line_blur_brush_curve_blur_subpixel_( } int igs_line_blur_brush_curve_blur_all_( - bool mv_sw, bool pv_sw, bool cv_sw, - brush_curve_blur &cl_brush_curve_blur, + bool mv_sw, bool pv_sw, bool cv_sw, brush_curve_blur &cl_brush_curve_blur, pixel_select_curve_blur_root &cl_pixel_select_curve_blur_root, pixel_line_root &cl_pixel_line_root @@ -5705,7 +5704,7 @@ int igs_line_blur_brush_curve_blur_all_( const int width // no_margin , const int channels, const int bits, void *out // no_margin - ) { +) { /* 処理ごとのメッセージ */ if (mv_sw) { std::cout << "igs::line_blur::_brush_curve_blur_all()" << std::endl; @@ -5865,7 +5864,7 @@ void igs_line_blur_brush_smudge_put_image_( const int width // no_margin , const int channels, const int bits, void *out // no_margin - ) { +) { /* 画像上に置いたブラシの範囲 */ double x1, y1, x2, y2; cl_brush_smudge_circle.get_dp_area(d_xp, d_yp, &x1, &y1, &x2, &y2); @@ -6021,7 +6020,7 @@ void igs_line_blur_brush_smudge_all_( const int width // no_margin , const int channels, const int bits, void *out // no_margin - ) { +) { /* 処理ごとのメッセージ */ if (mv_sw) { std::cout << "igs::line_expand::_brush_smudge_all()" << std::endl; @@ -6150,11 +6149,10 @@ void igs_line_blur_image_get_(const bool mv_sw, const bool cv_sw, pri_funct_cv_end(); } } -} +} // namespace #include #include - #include "igs_line_blur.h" // "thinnest_ui16_image.h" "pixel_point_root.h" "pixel_line_root.h" "brush_curve_blur.h" "brush_smudge_circle.h" "pixel_select_same_way.h" "pixel_select_curve_blur.h" "igs_line_blur.h" void igs::line_blur::convert( @@ -6168,7 +6166,8 @@ void igs::line_blur::convert( , const int width // no_margin , - const int channels, const int bits + const int channels, + const int bits /* Action */ , @@ -6207,7 +6206,7 @@ void igs::line_blur::convert( const bool debug_save_sw /* false=OFF */ , const int brush_action /* 0 =Curve Blur ,1=Smudge Brush */ - ) { +) { /* --- 動作クラスコンストラクション --- */ thinnest_ui16_image cl_thinnest_ui16_image; pixel_point_root cl_pixel_point_root; @@ -6322,11 +6321,10 @@ void igs::line_blur::convert( /****** ベクトルリスト処理 start ******/ /* 細線化した画像をリストにする */ - if (OK != - cl_pixel_point_root.alloc_mem_and_list_node( - cl_thinnest_ui16_image.get_i32_xs(), - cl_thinnest_ui16_image.get_i32_ys(), - cl_thinnest_ui16_image.get_ui16p_src_channel())) { + if (OK != cl_pixel_point_root.alloc_mem_and_list_node( + cl_thinnest_ui16_image.get_i32_xs(), + cl_thinnest_ui16_image.get_i32_ys(), + cl_thinnest_ui16_image.get_ui16p_src_channel())) { throw std::domain_error( "Error : cl_pixel_point_root.alloc_mem_and_list_node() returns NG"); } @@ -6350,9 +6348,8 @@ void igs::line_blur::convert( throw std::domain_error( "Error : cl_pixel_line_root.save_another_point(-) returns NG"); } - if (OK != - cl_pixel_line_root.save_not_include(&(cl_pixel_point_root), - "tmp11_not_include.txt")) { + if (OK != cl_pixel_line_root.save_not_include(&(cl_pixel_point_root), + "tmp11_not_include.txt")) { throw std::domain_error( "Error : cl_pixel_line_root.save_not_include(-) returns NG"); } @@ -6404,15 +6401,13 @@ void igs::line_blur::convert( throw std::domain_error( "Error : cl_pixel_line_root.save_expand_lines(-) returns NG"); } - if (OK != - cl_pixel_line_root.save_one_expand_point( - "tmp16_one_expand_point.txt")) { + if (OK != cl_pixel_line_root.save_one_expand_point( + "tmp16_one_expand_point.txt")) { throw std::domain_error( "Error : cl_pixel_line_root.save_one_expand_point(-) returns NG"); } - if (OK != - cl_pixel_line_root.save_another_expand_point( - "tmp17_another_expand_point.txt")) { + if (OK != cl_pixel_line_root.save_another_expand_point( + "tmp17_another_expand_point.txt")) { throw std::domain_error( "Error : cl_pixel_line_root.save_another_expand_point(-) returns NG"); } @@ -6459,70 +6454,57 @@ void igs::line_blur::convert( cl_thinnest_ui16_image.mem_free(); } -//===================== - +/*------------------------------------------------------------------*/ #include /* std::ostringstream */ #include "tfxparam.h" #include "stdfx.h" #include "tfxattributes.h" - #include "ino_common.h" #include "igs_line_blur.h" -//------------------------------------------------------------ + class ino_line_blur final : public TStandardRasterFx { FX_PLUGIN_DECLARATION(ino_line_blur) - TRasterFxPort m_input; + TRasterFxPort m_input; TIntEnumParamP m_b_action_mode; - TDoubleParamP m_b_blur_count; TDoubleParamP m_b_blur_power; TIntEnumParamP m_b_blur_subpixel; TDoubleParamP m_b_blur_near_ref; TDoubleParamP m_b_blur_near_len; - TDoubleParamP m_v_smooth_retry; TDoubleParamP m_v_near_ref; TDoubleParamP m_v_near_len; - TDoubleParamP m_b_smudge_thick; TDoubleParamP m_b_smudge_remain; public: ino_line_blur() : m_b_action_mode(new TIntEnumParam(0, "Blur")) - , m_b_blur_count(51) , m_b_blur_power(1.0) , m_b_blur_subpixel(new TIntEnumParam()) , m_b_blur_near_ref(5) , m_b_blur_near_len(160) - , m_v_smooth_retry(100) , m_v_near_ref(4) , m_v_near_len(160) - , m_b_smudge_thick(7) , m_b_smudge_remain(0.85) { addInputPort("Source", this->m_input); - bindParam(this, "action_mode", this->m_b_action_mode); - bindParam(this, "blur_count", this->m_b_blur_count); bindParam(this, "blur_power", this->m_b_blur_power); bindParam(this, "blur_subpixel", this->m_b_blur_subpixel); bindParam(this, "blur_near_ref", this->m_b_blur_near_ref); bindParam(this, "blur_near_len", this->m_b_blur_near_len); - bindParam(this, "vector_smooth_retry", this->m_v_smooth_retry); bindParam(this, "vector_near_ref", this->m_v_near_ref); bindParam(this, "vector_near_len", this->m_v_near_len); - bindParam(this, "smudge_thick", this->m_b_smudge_thick); bindParam(this, "smudge_remain", this->m_b_smudge_remain); this->m_b_action_mode->addItem(1, "Smudge"); - this->m_b_blur_count->setValueRange(1, 100); this->m_b_blur_power->setValueRange(0.1, 10.0); this->m_b_blur_subpixel->addItem(1, "1"); @@ -6532,27 +6514,41 @@ public: this->m_b_blur_subpixel->setValue(2); this->m_b_blur_near_ref->setValueRange(1, 100); this->m_b_blur_near_len->setValueRange(1, 1000); - this->m_v_smooth_retry->setValueRange(1, 1000); this->m_v_near_ref->setValueRange(1, 100); this->m_v_near_len->setValueRange(1, 1000); - - // this->m_b_smudge_thick->setMeasureName("fxLength"); this->m_b_smudge_thick->setValueRange(1, 100); this->m_b_smudge_remain->setValueRange(0.0, 1.0); } - //------------------------------------------------------------ + double get_render_real_radius(const double frame, const TAffine affine) { + double rad = this->m_b_blur_count->getValue(frame); + /*--- 単位について考察必要 ---*/ + // rad *= ino::pixel_per_mm(); + /*--- Geometryを反映させる ---*/ + // TAffine aff(affine); + return rad; + } + void get_render_enlarge(const double frame, const TAffine affine, + TRectD &bBox) { + const int margin = + static_cast(ceil(this->get_render_real_radius(frame, affine))); + if (0 < margin) { + bBox = bBox.enlarge(static_cast(margin)); + } + } bool doGetBBox(double frame, TRectD &bBox, const TRenderSettings &info) { if (false == this->m_input.isConnected()) { bBox = TRectD(); return false; } const bool ret = this->m_input->doGetBBox(frame, bBox, info); + this->get_render_enlarge(frame, info.m_affine, bBox); return ret; } int getMemoryRequirement(const TRectD &rect, double frame, const TRenderSettings &info) { TRectD bBox(rect); + this->get_render_enlarge(frame, info.m_affine, bBox); return TRasterFx::memorySize(bBox, info.m_bpp); } void transform(double frame, int port, const TRectD &rectOnOutput, @@ -6560,6 +6556,7 @@ public: TRenderSettings &infoOnInput) { rectOnInput = rectOnOutput; infoOnInput = infoOnOutput; + this->get_render_enlarge(frame, infoOnOutput.m_affine, rectOnInput); } bool canHandle(const TRenderSettings &info, double frame) { // return true;/* geometry処理済の画像に加工することになる */ @@ -6567,36 +6564,23 @@ public: } void doCompute(TTile &tile, double frame, const TRenderSettings &rend_sets); }; + FX_PLUGIN_IDENTIFIER(ino_line_blur, "inoLineBlurFx"); -//------------------------------------------------------------ + namespace { -void fx_(const TRasterP in_ras // with margin +void fx_(const TRasterP in_ras // no margin , TRasterP out_ras // no margin - - , - const int action_mode - - , - const int blur_count, const double blur_power, const int blur_subpixel, - const int blur_near_ref, const int blur_near_len - - , - const int vector_smooth_retry, const int vector_near_ref, - const int vector_near_len - , + const int action_mode, const int blur_count, const double blur_power, + const int blur_subpixel, const int blur_near_ref, + const int blur_near_len, const int vector_smooth_retry, + const int vector_near_ref, const int vector_near_len, const int smudge_thick, const double smudge_remain) { - TRasterGR8P out_buffer(out_ras->getLy(), - out_ras->getLx() * ino::channels() * - ((TRaster64P)in_ras ? sizeof(unsigned short) - : sizeof(unsigned char))); - out_buffer->lock(); igs::line_blur::convert( in_ras->getRawData() // const void *in_no_margin (BGRA) , - out_buffer->getRawData() // void *out_no_margin (BGRA) - + out_ras->getRawData() // void *out_no_margin (BGRA) , in_ras->getLy() // const int height_no_margin , @@ -6605,18 +6589,10 @@ void fx_(const TRasterP in_ras // with margin ino::channels() // const int channels , ino::bits(in_ras) // const int bits - - , - blur_count, blur_power, blur_subpixel, blur_near_ref, blur_near_len - - , - smudge_thick, smudge_remain - - , - vector_smooth_retry, vector_near_ref, vector_near_len - , - false /* bool mv_sw false=OFF */ + blur_count, blur_power, blur_subpixel, blur_near_ref, blur_near_len, + smudge_thick, smudge_remain, vector_smooth_retry, vector_near_ref, + vector_near_len, false /* bool mv_sw false=OFF */ , false /* bool pv_sw false=OFF */ , @@ -6627,130 +6603,72 @@ void fx_(const TRasterP in_ras // with margin false /* bool debug_save_sw false=OFF */ , action_mode); - ino::arr_to_ras(out_buffer->getRawData(), ino::channels(), out_ras, 0); - out_buffer->unlock(); } -} -//------------------------------------------------------------ -void ino_line_blur::doCompute(TTile &tile, double frame, - const TRenderSettings &rend_sets) { - /*------ 接続していなければ処理しない ----------------------*/ +} // namespace + +void ino_line_blur::doCompute( + TTile &tile /* 注意:doGetBBox(-)が返す範囲の画像 */ + , + double frame, const TRenderSettings &rend_sets) { + /*--- 接続していなければ処理しない -------------------------*/ if (!this->m_input.isConnected()) { tile.getRaster()->clear(); /* 塗りつぶしクリア */ return; } - /*------ サポートしていないPixelタイプはエラーを投げる -----*/ + /*--- サポートしていないPixelタイプはエラーを投げる --------*/ if (!((TRaster32P)tile.getRaster()) && !((TRaster64P)tile.getRaster())) { throw TRopException("unsupported input pixel type"); } - - /*------ パラメータを得る ------*/ - const int action_mode = this->m_b_action_mode->getValue(); - - const int blur_count = this->m_b_blur_count->getValue(frame); - const double blur_power = this->m_b_blur_power->getValue(frame); - const int blur_subpixel = this->m_b_blur_subpixel->getValue(); - const int blur_near_ref = this->m_b_blur_near_ref->getValue(frame); - const int blur_near_len = this->m_b_blur_near_len->getValue(frame); - + /*--- パラメータを得る -------------------------------------*/ + const int action_mode = this->m_b_action_mode->getValue(); + const int blur_count = this->m_b_blur_count->getValue(frame); + const double blur_power = this->m_b_blur_power->getValue(frame); + const int blur_subpixel = this->m_b_blur_subpixel->getValue(); + const int blur_near_ref = this->m_b_blur_near_ref->getValue(frame); + const int blur_near_len = this->m_b_blur_near_len->getValue(frame); const int vector_smooth_retry = this->m_v_smooth_retry->getValue(frame); const int vector_near_ref = this->m_v_near_ref->getValue(frame); const int vector_near_len = this->m_v_near_len->getValue(frame); - - const int smudge_thick = this->m_b_smudge_thick->getValue(frame); - const double smudge_remain = this->m_b_smudge_remain->getValue(frame); - - /*------ 表示の範囲を得る ----------------------------------*/ + const int smudge_thick = this->m_b_smudge_thick->getValue(frame); + const double smudge_remain = this->m_b_smudge_remain->getValue(frame); + /*--- 表示の範囲を得る -------------------------------------*/ TRectD bBox = TRectD(tile.m_pos /* Render画像上(Pixel単位)の位置 */ , TDimensionD(/* Render画像上(Pixel単位)のサイズ */ tile.getRaster()->getLx(), tile.getRaster()->getLy())); - - /* ------ marginなし画像生成 ------------------------------ */ - TTile enlarge_tile; + /*--- doGetBBox(-)が返す範囲の画像を生成 -------------------*/ + TTile in_tile; this->m_input->allocateAndCompute( - enlarge_tile, bBox.getP00(), + in_tile, bBox.getP00(), TDimensionI(/* Pixel単位に四捨五入 */ static_cast(bBox.getLx() + 0.5), static_cast(bBox.getLy() + 0.5)), tile.getRaster(), frame, rend_sets); - - /* ------ 保存すべき画像メモリを塗りつぶしクリア ---------- */ - tile.getRaster()->clear(); /* 塗りつぶしクリア */ - - /* ------ (app_begin)log記憶 ------------------------------ */ - const bool log_sw = ino::log_enable_sw(); - - if (log_sw) { - std::ostringstream os; - os << "params" - - << " action_mode " << action_mode - - << " blur_count " << blur_count << " blur_power " << blur_power - << " blur_subpixel " << blur_subpixel << " blur_near_ref " - << blur_near_ref << " blur_near_len " << blur_near_len - - << " vector_smooth_retry " << vector_smooth_retry - << " vector_near_ref " << vector_near_ref << " vector_near_len " - << vector_near_len - - << " smudge_thick " << smudge_thick << " smudge_remain " - << smudge_remain - - << " tile" - << " pos " << tile.m_pos << " w " << tile.getRaster()->getLx() << " h " - << tile.getRaster()->getLy() << " in_tile" - << " w " << enlarge_tile.getRaster()->getLx() << " h " - << enlarge_tile.getRaster()->getLy() << " pixbits " - << ino::pixel_bits(tile.getRaster()) << " frame " << frame - << " m_affine " << rend_sets.m_affine; - } - /* ------ fx処理 ------------------------------------------ */ + /*--- 保存すべき画像メモリを塗りつぶしクリア ---------------*/ + tile.getRaster()->clear(); + /*--- 画像処理 ---------------------------------------------*/ try { tile.getRaster()->lock(); - fx_(enlarge_tile.getRaster() // in with margin + fx_(in_tile.getRaster() // in no margin , - tile.getRaster() // out with no margin - - , - action_mode - - , - blur_count, blur_power, blur_subpixel, blur_near_ref, blur_near_len - - , - vector_smooth_retry, vector_near_ref, vector_near_len - + tile.getRaster() // out no margin , + action_mode, blur_count, blur_power, blur_subpixel, blur_near_ref, + blur_near_len, vector_smooth_retry, vector_near_ref, vector_near_len, smudge_thick, smudge_remain); tile.getRaster()->unlock(); } - /* ------ error処理 --------------------------------------- */ + /*--- error処理 --------------------------------------------*/ catch (std::bad_alloc &e) { tile.getRaster()->unlock(); - if (log_sw) { - std::string str("std::bad_alloc <"); - str += e.what(); - str += '>'; - } throw; } catch (std::exception &e) { tile.getRaster()->unlock(); - if (log_sw) { - std::string str("exception <"); - str += e.what(); - str += '>'; - } throw; } catch (...) { tile.getRaster()->unlock(); - if (log_sw) { - std::string str("other exception"); - } throw; } } - #endif diff --git a/toonz/sources/stdfx/iwa_bokehreffx.cpp b/toonz/sources/stdfx/iwa_bokehreffx.cpp index b11ab27..e57c2c0 100644 --- a/toonz/sources/stdfx/iwa_bokehreffx.cpp +++ b/toonz/sources/stdfx/iwa_bokehreffx.cpp @@ -43,7 +43,7 @@ void releaseAllRastersAndPlans(QList& rasterList, releaseAllRasters(rasterList); for (int p = 0; p < planList.size(); p++) kiss_fft_free(planList.at(p)); } -}; +}; // namespace //------------------------------------ BokehRefThread::BokehRefThread(int channel, kiss_fft_cpx* fftcpx_channel_before, @@ -608,7 +608,9 @@ void Iwa_BokehRefFx::retrieveLayer(const float4* source_buff, TRasterGR8P generation_buff_ras = allocateRasterAndLock( &generation_buff, TDimensionI(lx, ly)); - for (int gen = 0; gen < margin; gen++) { + // extend (margin * 2) pixels in order to enough cover when two adjacent + // layers are both blurred in the maximum radius + for (int gen = 0; gen < margin * 2; gen++) { // apply single median filter doSingleMedian(source_buff, segment_layer_buff, indexMap_mainSub, index, lx, ly, generation_buff, gen + 1); diff --git a/toonz/sources/stdfx/iwa_particlesfx.cpp b/toonz/sources/stdfx/iwa_particlesfx.cpp index 0db33d9..c217ed0 100644 --- a/toonz/sources/stdfx/iwa_particlesfx.cpp +++ b/toonz/sources/stdfx/iwa_particlesfx.cpp @@ -250,18 +250,20 @@ Iwa_TiledParticlesFx::Iwa_TiledParticlesFx() animation_val->addItem(ANIM_SR_CYCLE, "Column Swing - Random Start"); bindParam(this, "step", step_val); step_val->setValueRange(1, (std::numeric_limits::max)()); - TSpectrum::ColorKey colors[] = {TSpectrum::ColorKey(0, TPixel32::Red), - TSpectrum::ColorKey(1, TPixel32::Red)}; - gencol_val = TSpectrumParamP(tArrayCount(colors), colors); + std::vector colors = { + TSpectrum::ColorKey(0, TPixel32::Red), + TSpectrum::ColorKey(1, TPixel32::Red)}; + gencol_val = TSpectrumParamP(colors); bindParam(this, "birth_color", gencol_val); bindParam(this, "birth_color_ctrl", gencol_ctrl_val); bindParam(this, "birth_color_spread", gencol_spread_val); gencol_spread_val->setValueRange(0.0, (std::numeric_limits::max)()); bindParam(this, "birth_color_fade", genfadecol_val); genfadecol_val->setValueRange(0.0, 100.0); - TSpectrum::ColorKey colors1[] = {TSpectrum::ColorKey(0, TPixel32::Green), - TSpectrum::ColorKey(1, TPixel32::Green)}; - fincol_val = TSpectrumParamP(tArrayCount(colors1), colors1); + std::vector colors1 = { + TSpectrum::ColorKey(0, TPixel32::Green), + TSpectrum::ColorKey(1, TPixel32::Green)}; + fincol_val = TSpectrumParamP(colors1); bindParam(this, "fadein_color", fincol_val); bindParam(this, "fadein_color_ctrl", fincol_ctrl_val); bindParam(this, "fadein_color_spread", fincol_spread_val); @@ -270,9 +272,10 @@ Iwa_TiledParticlesFx::Iwa_TiledParticlesFx() finrangecol_val->setValueRange(0.0, (std::numeric_limits::max)()); bindParam(this, "fadein_color_fade", finfadecol_val); finfadecol_val->setValueRange(0.0, 100.0); - TSpectrum::ColorKey colors2[] = {TSpectrum::ColorKey(0, TPixel32::Blue), - TSpectrum::ColorKey(1, TPixel32::Blue)}; - foutcol_val = TSpectrumParamP(tArrayCount(colors2), colors2); + std::vector colors2 = { + TSpectrum::ColorKey(0, TPixel32::Blue), + TSpectrum::ColorKey(1, TPixel32::Blue)}; + foutcol_val = TSpectrumParamP(colors2); bindParam(this, "fadeout_color", foutcol_val); bindParam(this, "fadeout_color_ctrl", foutcol_ctrl_val); bindParam(this, "fadeout_color_spread", foutcol_spread_val); diff --git a/toonz/sources/stdfx/linearwavefx.cpp b/toonz/sources/stdfx/linearwavefx.cpp index 0fbba0c..2d801c1 100644 --- a/toonz/sources/stdfx/linearwavefx.cpp +++ b/toonz/sources/stdfx/linearwavefx.cpp @@ -195,11 +195,11 @@ public: TRasterP rasIn = tileIn.getRaster(); // Compute the warper tile - TSpectrum::ColorKey colors[] = {TSpectrum::ColorKey(0, TPixel32::White), - TSpectrum::ColorKey(0.5, TPixel32::Black), - TSpectrum::ColorKey(1, TPixel32::White)}; - - TSpectrumParamP wavecolors = TSpectrumParamP(tArrayCount(colors), colors); + std::vector colors = { + TSpectrum::ColorKey(0, TPixel32::White), + TSpectrum::ColorKey(0.5, TPixel32::Black), + TSpectrum::ColorKey(1, TPixel32::White)}; + TSpectrumParamP wavecolors = TSpectrumParamP(colors); // Build the multiradial warperInfo.m_affine = warperInfo.m_affine * TRotation(angle); diff --git a/toonz/sources/stdfx/multitonefx.cpp b/toonz/sources/stdfx/multitonefx.cpp index 89202f4..185ee14 100644 --- a/toonz/sources/stdfx/multitonefx.cpp +++ b/toonz/sources/stdfx/multitonefx.cpp @@ -12,10 +12,11 @@ class MultiToneFx final : public TStandardRasterFx { public: MultiToneFx() { - TSpectrum::ColorKey colors[] = {TSpectrum::ColorKey(0, TPixel32::White), - TSpectrum::ColorKey(0.5, TPixel32::Yellow), - TSpectrum::ColorKey(1, TPixel32::Red)}; - m_colors = TSpectrumParamP(tArrayCount(colors), colors); + std::vector colors = { + TSpectrum::ColorKey(0, TPixel32::White), + TSpectrum::ColorKey(0.5, TPixel32::Yellow), + TSpectrum::ColorKey(1, TPixel32::Red)}; + m_colors = TSpectrumParamP(colors); bool ret = m_colors->isKeyframe(0); bindParam(this, "colors", m_colors); diff --git a/toonz/sources/stdfx/particlesfx.cpp b/toonz/sources/stdfx/particlesfx.cpp index 31e8743..bcd8a88 100644 --- a/toonz/sources/stdfx/particlesfx.cpp +++ b/toonz/sources/stdfx/particlesfx.cpp @@ -228,18 +228,20 @@ ParticlesFx::ParticlesFx() animation_val->addItem(ANIM_SR_CYCLE, "Column Swing - Random Start"); bindParam(this, "step", step_val); step_val->setValueRange(1, (std::numeric_limits::max)()); - TSpectrum::ColorKey colors[] = {TSpectrum::ColorKey(0, TPixel32::Red), - TSpectrum::ColorKey(1, TPixel32::Red)}; - gencol_val = TSpectrumParamP(tArrayCount(colors), colors); + std::vector colors = { + TSpectrum::ColorKey(0, TPixel32::Red), + TSpectrum::ColorKey(1, TPixel32::Red)}; + gencol_val = TSpectrumParamP(colors); bindParam(this, "birth_color", gencol_val); bindParam(this, "birth_color_ctrl", gencol_ctrl_val); bindParam(this, "birth_color_spread", gencol_spread_val); gencol_spread_val->setValueRange(0.0, (std::numeric_limits::max)()); bindParam(this, "birth_color_fade", genfadecol_val); genfadecol_val->setValueRange(0.0, 100.0); - TSpectrum::ColorKey colors1[] = {TSpectrum::ColorKey(0, TPixel32::Green), - TSpectrum::ColorKey(1, TPixel32::Green)}; - fincol_val = TSpectrumParamP(tArrayCount(colors1), colors1); + std::vector colors1 = { + TSpectrum::ColorKey(0, TPixel32::Green), + TSpectrum::ColorKey(1, TPixel32::Green)}; + fincol_val = TSpectrumParamP(colors1); bindParam(this, "fadein_color", fincol_val); bindParam(this, "fadein_color_ctrl", fincol_ctrl_val); bindParam(this, "fadein_color_spread", fincol_spread_val); @@ -248,9 +250,10 @@ ParticlesFx::ParticlesFx() finrangecol_val->setValueRange(0.0, (std::numeric_limits::max)()); bindParam(this, "fadein_color_fade", finfadecol_val); finfadecol_val->setValueRange(0.0, 100.0); - TSpectrum::ColorKey colors2[] = {TSpectrum::ColorKey(0, TPixel32::Blue), - TSpectrum::ColorKey(1, TPixel32::Blue)}; - foutcol_val = TSpectrumParamP(tArrayCount(colors2), colors2); + std::vector colors2 = { + TSpectrum::ColorKey(0, TPixel32::Blue), + TSpectrum::ColorKey(1, TPixel32::Blue)}; + foutcol_val = TSpectrumParamP(colors2); bindParam(this, "fadeout_color", foutcol_val); bindParam(this, "fadeout_color_ctrl", foutcol_ctrl_val); bindParam(this, "fadeout_color_spread", foutcol_spread_val); diff --git a/toonz/sources/stdfx/randomwavefx.cpp b/toonz/sources/stdfx/randomwavefx.cpp index 37e8c90..1f6fdef 100644 --- a/toonz/sources/stdfx/randomwavefx.cpp +++ b/toonz/sources/stdfx/randomwavefx.cpp @@ -191,10 +191,10 @@ public: TRasterP rasIn = tileIn.getRaster(); // Compute the warper tile - TSpectrum::ColorKey colors[] = {TSpectrum::ColorKey(0, TPixel32::White), - TSpectrum::ColorKey(1, TPixel32::Black)}; - - TSpectrumParamP cloudscolors = TSpectrumParamP(tArrayCount(colors), colors); + std::vector colors = { + TSpectrum::ColorKey(0, TPixel32::White), + TSpectrum::ColorKey(1, TPixel32::Black)}; + TSpectrumParamP cloudscolors = TSpectrumParamP(colors); // Build the warper warperInfo.m_affine = warperInfo.m_affine; diff --git a/toonz/sources/stdfx/ripplefx.cpp b/toonz/sources/stdfx/ripplefx.cpp index 126503d..843281b 100644 --- a/toonz/sources/stdfx/ripplefx.cpp +++ b/toonz/sources/stdfx/ripplefx.cpp @@ -197,11 +197,11 @@ public: TRasterP rasIn = tileIn.getRaster(); // Compute the warper tile - TSpectrum::ColorKey colors[] = {TSpectrum::ColorKey(0, TPixel32::White), - TSpectrum::ColorKey(0.5, TPixel32::Black), - TSpectrum::ColorKey(1, TPixel32::White)}; - - TSpectrumParamP ripplecolors = TSpectrumParamP(tArrayCount(colors), colors); + std::vector colors = { + TSpectrum::ColorKey(0, TPixel32::White), + TSpectrum::ColorKey(0.5, TPixel32::Black), + TSpectrum::ColorKey(1, TPixel32::White)}; + TSpectrumParamP ripplecolors = TSpectrumParamP(colors); // Build the multiradial warperInfo.m_affine = warperInfo.m_affine * TTranslation(center) * diff --git a/toonz/sources/stdfx/squaregradientfx.cpp b/toonz/sources/stdfx/squaregradientfx.cpp index be4bd48..e40f6f5 100644 --- a/toonz/sources/stdfx/squaregradientfx.cpp +++ b/toonz/sources/stdfx/squaregradientfx.cpp @@ -17,11 +17,11 @@ class SquareGradientFx final : public TStandardZeraryFx { public: SquareGradientFx() : m_size(200.0) { m_size->setMeasureName("fxLength"); - TSpectrum::ColorKey colors[] = { + std::vector colors = { TSpectrum::ColorKey(0, TPixel32::White), // TSpectrum::ColorKey(0.5,TPixel32::Yellow), TSpectrum::ColorKey(1, TPixel32::Red)}; - m_colors = TSpectrumParamP(tArrayCount(colors), colors); + m_colors = TSpectrumParamP(colors); bindParam(this, "colors", m_colors); bindParam(this, "size", m_size); m_size->setValueRange(0, std::numeric_limits::max()); diff --git a/toonz/sources/stdfx/stdfx.cpp b/toonz/sources/stdfx/stdfx.cpp index 343d676..2f11f6c 100644 --- a/toonz/sources/stdfx/stdfx.cpp +++ b/toonz/sources/stdfx/stdfx.cpp @@ -89,13 +89,13 @@ TPixel32 colors[] = { TPixel32::Yellow, transparent}; */ - TSpectrum::ColorKey colors[] = {TSpectrum::ColorKey(0, TPixel32::Magenta), - TSpectrum::ColorKey(0.25, TPixel32::Black), - TSpectrum::ColorKey(0.5, TPixel32::Red), - TSpectrum::ColorKey(0.75, TPixel32::Yellow), - TSpectrum::ColorKey(1, transparent)}; - - m_spectrum = TSpectrumParamP(tArrayCount(colors), colors); + std::vector colors = { + TSpectrum::ColorKey(0, TPixel32::Magenta), + TSpectrum::ColorKey(0.25, TPixel32::Black), + TSpectrum::ColorKey(0.5, TPixel32::Red), + TSpectrum::ColorKey(0.75, TPixel32::Yellow), + TSpectrum::ColorKey(1, transparent)}; + m_spectrum = TSpectrumParamP(colors); bindParam(this, "colors", m_spectrum); bindParam(this, "freq", m_freq); @@ -128,7 +128,7 @@ void doComputeT(TRasterPT raster, TPointD posTrasf, const TAffine &aff, TPointD posAux = posTrasf; T *pix = raster->pixels(y); for (int x = 0; x < raster->getLx(); x++) { - double ang = 0.0; + double ang = 0.0; if (posAux.x != 0 || posAux.y != 0) ang = atan2(posAux.y, posAux.x); double r = sqrt(posAux.x * posAux.x + posAux.y * posAux.y); double v = 0.5 * (1 + sin(r * freq + ang + phase)); @@ -141,7 +141,7 @@ void doComputeT(TRasterPT raster, TPointD posTrasf, const TAffine &aff, } raster->unlock(); } -} +} // namespace //================================================================== @@ -174,6 +174,8 @@ class MultiLinearGradientFx final : public TStandardZeraryFx { TDoubleParamP m_wave_phase; TSpectrumParamP m_colors; + TIntEnumParamP m_curveType; + public: MultiLinearGradientFx() : m_period(100) // args, "Period") @@ -182,13 +184,18 @@ public: , m_wave_amplitude(0.0) // args, "Cycle") , m_wave_freq(0.0) // args, "Cycle") , m_wave_phase(0.0) // args, "Cycle") - // , m_colors (0) //args, "Colors") - { - TSpectrum::ColorKey colors[] = {TSpectrum::ColorKey(0, TPixel32::White), - TSpectrum::ColorKey(0.33, TPixel32::Yellow), - TSpectrum::ColorKey(0.66, TPixel32::Red), - TSpectrum::ColorKey(1, TPixel32::White)}; - m_colors = TSpectrumParamP(tArrayCount(colors), colors); + // , m_colors (0) //args, "Colors") + , m_curveType(new TIntEnumParam(EaseInOut, "Ease In-Out")) { + m_curveType->addItem(Linear, "Linear"); + m_curveType->addItem(EaseIn, "Ease In"); + m_curveType->addItem(EaseOut, "Ease Out"); + + std::vector colors = { + TSpectrum::ColorKey(0, TPixel32::White), + TSpectrum::ColorKey(0.33, TPixel32::Yellow), + TSpectrum::ColorKey(0.66, TPixel32::Red), + TSpectrum::ColorKey(1, TPixel32::White)}; + m_colors = TSpectrumParamP(colors); bindParam(this, "period", m_period); bindParam(this, "count", m_count); @@ -197,6 +204,8 @@ public: bindParam(this, "wave_frequency", m_wave_freq); bindParam(this, "wave_phase", m_wave_phase); bindParam(this, "colors", m_colors); + bindParam(this, "curveType", m_curveType); + m_period->setValueRange(0, (std::numeric_limits::max)()); m_cycle->setValueRange(0, (std::numeric_limits::max)()); m_wave_amplitude->setValueRange(0, (std::numeric_limits::max)()); @@ -237,6 +246,8 @@ class LinearGradientFx final : public TStandardZeraryFx { TPixelParamP m_color1; TPixelParamP m_color2; + TIntEnumParamP m_curveType; + public: LinearGradientFx() : m_period(100) // args, "Period") @@ -245,14 +256,20 @@ public: , m_wave_phase(0.0) // args, "Cycle") , m_color1(TPixel32::Black) , m_color2(TPixel32::White) - // , m_colors (0) //args, "Colors") - { + // , m_colors (0) //args, "Colors") + , m_curveType(new TIntEnumParam(EaseInOut, "Ease In-Out")) { + m_curveType->addItem(Linear, "Linear"); + m_curveType->addItem(EaseIn, "Ease In"); + m_curveType->addItem(EaseOut, "Ease Out"); + bindParam(this, "period", m_period); bindParam(this, "wave_amplitude", m_wave_amplitude); bindParam(this, "wave_frequency", m_wave_freq); bindParam(this, "wave_phase", m_wave_phase); bindParam(this, "color1", m_color1); bindParam(this, "color2", m_color2); + bindParam(this, "curveType", m_curveType); + m_period->setValueRange(0, std::numeric_limits::max()); m_wave_amplitude->setValueRange(0, std::numeric_limits::max()); m_period->setMeasureName("fxLength"); @@ -303,13 +320,13 @@ void doComputeT(TRasterPT ras, TPointD posTrasf, T *endPix = pix + ras->getLx(); while (pix < endPix) { if (w_amplitude) shift = w_amplitude * sin(w_freq * posAux.y + w_phase); - double radius = posAux.x + shift; - double t = 1; + double radius = posAux.x + shift; + double t = 1; if (fabs(radius) < maxRadius) { t = (radius + maxRadius + cycle) * freq; t -= floor(t); } else if (radius < 0) - t = 0; + t = 0; double polinomfactor = (-2 * t + 3) * (t * t); // pos.x += 1.0; *pix++ = spectrum.getPremultipliedValue(polinomfactor); @@ -321,7 +338,7 @@ void doComputeT(TRasterPT ras, TPointD posTrasf, } ras->unlock(); } -} +} // namespace //================================================================== @@ -337,15 +354,16 @@ void LinearGradientFx::doCompute(TTile &tile, double frame, double w_phase = m_wave_phase->getValue(frame); w_freq *= 0.01 * M_PI_180; - TSpectrum::ColorKey colors[] = { + std::vector colors = { TSpectrum::ColorKey(0, m_color1->getValue(frame)), TSpectrum::ColorKey(1, m_color2->getValue(frame))}; - TSpectrumParamP m_colors = TSpectrumParamP(tArrayCount(colors), colors); + TSpectrumParamP m_colors = TSpectrumParamP(colors); TAffine aff = ri.m_affine.inv(); TPointD posTrasf = aff * tile.m_pos; multiLinear(tile.getRaster(), posTrasf, m_colors, period, count, w_amplitude, - w_freq, w_phase, cycle, aff, frame); + w_freq, w_phase, cycle, aff, frame, + (GradientCurveType)m_curveType->getValue()); /* if (TRaster32P ras32 = tile.getRaster()) doComputeT( @@ -379,7 +397,8 @@ void MultiLinearGradientFx::doCompute(TTile &tile, double frame, TAffine aff = ri.m_affine.inv(); TPointD posTrasf = aff * tile.m_pos; multiLinear(tile.getRaster(), posTrasf, m_colors, period, count, w_amplitude, - w_freq, w_phase, cycle, aff, frame); + w_freq, w_phase, cycle, aff, frame, + (GradientCurveType)m_curveType->getValue()); /* if (TRaster32P ras32 = tile.getRaster()) doComputeT( @@ -405,20 +424,30 @@ class RadialGradientFx final : public TStandardZeraryFx { TPixelParamP m_color1; TPixelParamP m_color2; + TIntEnumParamP m_curveType; + public: RadialGradientFx() : m_period(100.0) , m_innerperiod(0.0) // args, "Period") , m_color1(TPixel32::White) , m_color2(TPixel32::Transparent) - // , m_colors (0) //args, "Colors") - { + // , m_colors (0) //args, "Colors") + , m_curveType(new TIntEnumParam()) { + m_curveType->addItem(EaseInOut, "Ease In-Out"); + m_curveType->addItem(Linear, "Linear"); + m_curveType->addItem(EaseIn, "Ease In"); + m_curveType->addItem(EaseOut, "Ease Out"); + m_curveType->setDefaultValue(Linear); + m_curveType->setValue(Linear); + m_period->setMeasureName("fxLength"); m_innerperiod->setMeasureName("fxLength"); bindParam(this, "period", m_period); bindParam(this, "innerperiod", m_innerperiod); bindParam(this, "color1", m_color1); bindParam(this, "color2", m_color2); + bindParam(this, "curveType", m_curveType); m_period->setValueRange(0.0, std::numeric_limits::max()); m_innerperiod->setValueRange(0.0, std::numeric_limits::max()); } @@ -457,25 +486,35 @@ class MultiRadialGradientFx final : public TStandardZeraryFx { TDoubleParamP m_cycle; TSpectrumParamP m_colors; + TIntEnumParamP m_curveType; + public: MultiRadialGradientFx() : m_period(100) // args, "Period") , m_count(2) // args, "Count") , m_cycle(0.0) // args, "Count") - // , m_colors (0) //args, "Colors") - { - m_period->setMeasureName("fxLength"); - TSpectrum::ColorKey colors[] = {TSpectrum::ColorKey(0, TPixel32::White), - TSpectrum::ColorKey(0.33, TPixel32::Yellow), - TSpectrum::ColorKey(0.66, TPixel32::Red), - TSpectrum::ColorKey(1, TPixel32::White)}; + // , m_colors (0) //args, "Colors") + , m_curveType(new TIntEnumParam()) { + m_curveType->addItem(EaseInOut, "Ease In-Out"); + m_curveType->addItem(Linear, "Linear"); + m_curveType->addItem(EaseIn, "Ease In"); + m_curveType->addItem(EaseOut, "Ease Out"); + m_curveType->setDefaultValue(Linear); + m_curveType->setValue(Linear); - m_colors = TSpectrumParamP(tArrayCount(colors), colors); + m_period->setMeasureName("fxLength"); + std::vector colors = { + TSpectrum::ColorKey(0, TPixel32::White), + TSpectrum::ColorKey(0.33, TPixel32::Yellow), + TSpectrum::ColorKey(0.66, TPixel32::Red), + TSpectrum::ColorKey(1, TPixel32::White)}; + m_colors = TSpectrumParamP(colors); bindParam(this, "period", m_period); bindParam(this, "count", m_count); bindParam(this, "cycle", m_cycle); bindParam(this, "colors", m_colors); + bindParam(this, "curveType", m_curveType); m_period->setValueRange(0, (std::numeric_limits::max)()); m_cycle->setValueRange(0, (std::numeric_limits::max)()); m_count->setValueRange(0, (std::numeric_limits::max)()); @@ -516,7 +555,7 @@ void MultiRadialGradientFx::doCompute(TTile &tile, double frame, TAffine aff = ri.m_affine.inv(); TPointD posTrasf = aff * tile.m_pos; multiRadial(tile.getRaster(), posTrasf, m_colors, period, count, cycle, aff, - frame); + frame, 0.0, (GradientCurveType)m_curveType->getValue()); } //================================================================== @@ -532,16 +571,15 @@ void RadialGradientFx::doCompute(TTile &tile, double frame, if (innerperiod < period) inner = innerperiod / period; else - inner = 1 - TConsts::epsilon; - TSpectrum::ColorKey colors[] = { + inner = 1 - TConsts::epsilon; + std::vector colors = { TSpectrum::ColorKey(0, m_color1->getValue(frame)), - TSpectrum::ColorKey(inner, m_color1->getValue(frame)), TSpectrum::ColorKey(1, m_color2->getValue(frame))}; - TSpectrumParamP m_colors = TSpectrumParamP(tArrayCount(colors), colors); + TSpectrumParamP m_colors = TSpectrumParamP(colors); TAffine aff = ri.m_affine.inv(); TPointD posTrasf = aff * tile.m_pos; multiRadial(tile.getRaster(), posTrasf, m_colors, period, count, cycle, aff, - frame); + frame, inner, (GradientCurveType)m_curveType->getValue()); } //------------------------------------------------------------------ @@ -631,7 +669,7 @@ void doComputeT(TRasterPT raster, TPointD posTrasf, const TAffine &aff, } if (result > 1) result = 1; if (result < 0) result = 0; - *pix++ = blend(T::Black, pixelColor, result); + *pix++ = blend(T::Black, pixelColor, result); posAux.x += aff.a11; posAux.y += aff.a21; } @@ -640,7 +678,7 @@ void doComputeT(TRasterPT raster, TPointD posTrasf, const TAffine &aff, } raster->unlock(); } -} +} // namespace //================================================================== diff --git a/toonz/sources/stdfx/test_boxfx.cpp b/toonz/sources/stdfx/test_boxfx.cpp index 2ef9607..2a40e09 100644 --- a/toonz/sources/stdfx/test_boxfx.cpp +++ b/toonz/sources/stdfx/test_boxfx.cpp @@ -43,10 +43,11 @@ public: bindParam(this, "int", m_int); bindParam(this, "range", m_range); bindParam(this, "bool", m_bool); - TSpectrum::ColorKey colors[] = {TSpectrum::ColorKey(0, TPixel32::White), - TSpectrum::ColorKey(0.5, TPixel32::Yellow), - TSpectrum::ColorKey(1, TPixel32::Red)}; - m_colors = TSpectrumParamP(tArrayCount(colors), colors); + std::vector colors = { + TSpectrum::ColorKey(0, TPixel32::White), + TSpectrum::ColorKey(0.5, TPixel32::Yellow), + TSpectrum::ColorKey(1, TPixel32::Red)}; + m_colors = TSpectrumParamP(colors); bindParam(this, "spectrum", m_colors); bindParam(this, "string", m_string); addInputPort("Source", m_input); diff --git a/toonz/sources/tcomposer/tcomposer.cpp b/toonz/sources/tcomposer/tcomposer.cpp index f7fc944..3eea750 100644 --- a/toonz/sources/tcomposer/tcomposer.cpp +++ b/toonz/sources/tcomposer/tcomposer.cpp @@ -400,7 +400,7 @@ static std::pair generateMovie(ToonzScene *scene, const TFilePath &fp, r0 = r0 - 1; r1 = r1 - 1; - if (r0 < 0) r0 = 0; + if (r0 < 0) r0 = 0; if (r1 < 0 || r1 >= scene->getFrameCount()) r1 = scene->getFrameCount() - 1; string msg; assert(r1 >= r0); @@ -561,6 +561,61 @@ static std::pair generateMovie(ToonzScene *scene, const TFilePath &fp, DV_IMPORT_API void initStdFx(); DV_IMPORT_API void initColorFx(); int main(int argc, char *argv[]) { + TCli::UsageLine usageLine; + // setCurrentModule("tcomposer"); + TCli::FilePathArgument srcName("srcName", "Source file"); + FilePathQualifier dstName("-o dstName", "Target file"); + RangeQualifier range; + IntQualifier stepOpt("-step n", "Step"); + IntQualifier shrinkOpt("-shrink n", "Shrink"); + IntQualifier multimedia("-multimedia n", "Multimedia rendering mode"); + StringQualifier farmData("-farm data", "TFarm Controller"); + StringQualifier idq("-id n", "id"); + StringQualifier nthreads("-nthreads n", "Number of rendering threads"); + StringQualifier tileSize("-maxtilesize n", + "Enable tile rendering of max n MB per tile"); + StringQualifier tmsg("-tmsg val", "only internal use"); + usageLine = srcName + dstName + range + stepOpt + shrinkOpt + multimedia + + farmData + idq + nthreads + tileSize + tmsg; + + // system path qualifiers + std::map>> + systemPathQualMap; + QString qualKey = QString("%1ROOT").arg(systemVarPrefix); + QString qualName = QString("-%1 folderpath").arg(qualKey); + QString qualHelp = + QString( + "%1 path. It will automatically set other system paths to %1 " + "unless individually specified with other qualifiers.") + .arg(qualKey); + systemPathQualMap[qualKey].reset(new TCli::QualifierT( + qualName.toStdString(), qualHelp.toStdString())); + usageLine = usageLine + *systemPathQualMap[qualKey]; + + const std::map &spm = TEnv::getSystemPathMap(); + for (auto itr = spm.begin(); itr != spm.end(); ++itr) { + qualKey = QString("%1%2") + .arg(systemVarPrefix) + .arg(QString::fromStdString((*itr).first)); + qualName = QString("-%1 folderpath").arg(qualKey); + qualHelp = QString("%1 path.").arg(qualKey); + systemPathQualMap[qualKey].reset(new TCli::QualifierT( + qualName.toStdString(), qualHelp.toStdString())); + usageLine = usageLine + *systemPathQualMap[qualKey]; + } + + Usage usage(argv[0]); + usage.add(usageLine); + if (!usage.parse(argc, argv)) exit(1); + + QHash argumentPathValues; + for (auto q_itr = systemPathQualMap.begin(); q_itr != systemPathQualMap.end(); + ++q_itr) { + if (q_itr->second->isSelected()) + argumentPathValues.insert(q_itr->first, + q_itr->second->getValue().getQString()); + } + QApplication app(argc, argv); // Create a QObject destroyed just before app - see Tnz6's main.cpp for @@ -602,6 +657,17 @@ int main(int argc, char *argv[]) { // questo definisce la registry root e inizializza TEnv TEnv::setRootVarName(rootVarName); TEnv::setSystemVarPrefix(systemVarPrefix); + + QHash::const_iterator argItr = + argumentPathValues.constBegin(); + while (argItr != argumentPathValues.constEnd()) { + if (!TEnv::setArgPathValue(argItr.key().toStdString(), + argItr.value().toStdString())) + cerr << "The qualifier " << argItr.key().toStdString() + << " is not a valid key name. Skipping." << endl; + ++argItr; + } + TSystem::hasMainLoop(true); // QMessageBox::information(0, QString("eccolo"), QString("composer!")); @@ -647,30 +713,11 @@ int main(int argc, char *argv[]) { TVectorBrushStyle::setRootDir(libraryFolder); TPalette::setRootDir(libraryFolder); TImageStyle::setLibraryDir(libraryFolder); - TFilePath cacheRoot = ToonzFolder::getCacheRootFolder(); + TFilePath cacheRoot = ToonzFolder::getCacheRootFolder(); if (cacheRoot.isEmpty()) cacheRoot = TEnv::getStuffDir() + "cache"; TImageCache::instance()->setRootDir(cacheRoot); // #endif - // setCurrentModule("tcomposer"); - TCli::FilePathArgument srcName("srcName", "Source file"); - FilePathQualifier dstName("-o dstName", "Target file"); - RangeQualifier range; - IntQualifier stepOpt("-step n", "Step"); - IntQualifier shrinkOpt("-shrink n", "Shrink"); - IntQualifier multimedia("-multimedia n", "Multimedia rendering mode"); - StringQualifier farmData("-farm data", "TFarm Controller"); - StringQualifier idq("-id n", "id"); - StringQualifier nthreads("-nthreads n", "Number of rendering threads"); - StringQualifier tileSize("-maxtilesize n", - "Enable tile rendering of max n MB per tile"); - StringQualifier tmsg("-tmsg val", "only internal use"); - - Usage usage(argv[0]); - usage.add(srcName + dstName + range + stepOpt + shrinkOpt + multimedia + - farmData + idq + nthreads + tileSize + tmsg); - if (!usage.parse(argc, argv)) exit(1); - TaskId = QString::fromStdString(idq.getValue()); string fdata = farmData.getValue(); if (fdata.empty()) @@ -933,8 +980,8 @@ int main(int argc, char *argv[]) { DVGui::info(QString::fromStdString(msg)); TImageCache::instance()->clear(true); } catch (TException &e) { - msg = "Untrapped exception: " + ::to_string(e.getMessage()), cout << msg - << endl; + msg = "Untrapped exception: " + ::to_string(e.getMessage()), + cout << msg << endl; m_userLog->error(msg); TImageCache::instance()->clear(true); } catch (...) { diff --git a/toonz/sources/tconverter/tconverter.cpp b/toonz/sources/tconverter/tconverter.cpp index ede0a42..3a597c6 100644 --- a/toonz/sources/tconverter/tconverter.cpp +++ b/toonz/sources/tconverter/tconverter.cpp @@ -29,6 +29,10 @@ #include "tvectorrenderdata.h" #include "tofflinegl.h" +#if defined(LINUX) +#include +#endif + using namespace std; using namespace TCli; @@ -355,6 +359,10 @@ void convert(const TFilePath &source, const TFilePath &dest, //------------------------------------------------------------------------ int main(int argc, char *argv[]) { +#if defined(LINUX) + QGuiApplication app(argc, argv); +#endif + TEnv::setRootVarName(rootVarName); TEnv::setSystemVarPrefix(systemVarPrefix); TFilePath fp = TEnv::getStuffDir(); diff --git a/toonz/sources/tnzcore/CMakeLists.txt b/toonz/sources/tnzcore/CMakeLists.txt index 658c70e..6873c47 100644 --- a/toonz/sources/tnzcore/CMakeLists.txt +++ b/toonz/sources/tnzcore/CMakeLists.txt @@ -290,6 +290,13 @@ add_definitions( -DTSTREAM_EXPORTS ) +if(BUILD_TARGET_WIN) + add_definitions( + -DUNICODE + -D_UNICODE + ) +endif() + message("subdir: tnzcore") #message("Sources:" ${SOURCES}) diff --git a/toonz/sources/tnzext/plasticskeleton.cpp b/toonz/sources/tnzext/plasticskeleton.cpp index 682dd0d..198b95f 100644 --- a/toonz/sources/tnzext/plasticskeleton.cpp +++ b/toonz/sources/tnzext/plasticskeleton.cpp @@ -13,7 +13,6 @@ #include "tcg/tcg_misc.h" #include "tcg/tcg_pool.h" #include "tcg/tcg_function_types.h" -#include "tcg/tcg_iterator_ops.h" #include "ext/plasticskeleton.h" @@ -573,16 +572,9 @@ int PlasticSkeleton::closestEdge(const TPointD &pos, double *dist) const { //------------------------------------------------------------------------------- std::vector PlasticSkeleton::verticesToHandles() const { - // Someway, PlasticHandle's EXPLICIT unary constructors are not enough - // to disambiguate the direct construction of a vector of PlasticHandles - // from m_vertices, at least with *gcc*. I guess it could be a compiler bug. - - // So, we'll convert them using an explicit casting iterator... - - typedef tcg::function < PlasticHandle (PlasticSkeletonVertex::*)() const, - &PlasticSkeletonVertex::operator PlasticHandle> Func; - - return std::vector( - tcg::make_cast_it(m_vertices.begin(), Func()), - tcg::make_cast_it(m_vertices.end(), Func())); + std::vector v; + for (auto const &e : m_vertices) { + v.push_back(e); + } + return v; } diff --git a/toonz/sources/tnztools/CMakeLists.txt b/toonz/sources/tnztools/CMakeLists.txt index 51942b1..62ae7a2 100644 --- a/toonz/sources/tnztools/CMakeLists.txt +++ b/toonz/sources/tnztools/CMakeLists.txt @@ -1,43 +1,45 @@ set(MOC_HEADERS - fullcolorbrushtool.h controlpointselection.h - ../include/tools/imagegrouping.h edittoolgadgets.h filltool.h + fullcolorbrushtool.h + fullcolorfilltool.h + plastictool.h skeletonsubtools.h tooloptionscontrols.h - plastictool.h + toonzrasterbrushtool.h + viewtools.h + ../include/tools/imagegrouping.h + ../include/tools/screenpicker.h ../include/tools/toolhandle.h ../include/tools/tooloptions.h - ../include/tools/screenpicker.h - rgbpickertool.h - rulertool.h - stylepickertool.h - viewtools.h - toonzrasterbrushtool.h ) -set(HEADERS ${MOC_HEADERS} +set(HEADERS + ${MOC_HEADERS} autofill.h bluredbrush.h - ../include/tools/cursormanager.h - ../include/tools/cursors.h - ../include/tools/levelselection.h - ../include/tools/rasterselection.h hookselection.h + mypainttoonzbrush.h + rasterselectiontool.h + rgbpickertool.h + rulertool.h selectiontool.h setsaveboxtool.h - rasterselectiontool.h + shifttracetool.h + stylepickertool.h + toonzvectorbrushtool.h vectorselectiontool.h + ../include/tools/RGBpicker.h + ../include/tools/cursormanager.h + ../include/tools/cursors.h + ../include/tools/levelselection.h + ../include/tools/rasterselection.h ../include/tools/strokeselection.h ../include/tools/stylepicker.h ../include/tools/tool.h ../include/tools/toolcommandids.h ../include/tools/toolutils.h - ../include/tools/RGBpicker.h - mypainttoonzbrush.h - shifttracetool.h - toonzvectorbrushtool.h ) set(SOURCES @@ -57,6 +59,7 @@ set(SOURCES filltool.cpp fullcolorbrushtool.cpp fullcolorerasertool.cpp + fullcolorfilltool.cpp geometrictool.cpp hooktool.cpp hookselection.cpp diff --git a/toonz/sources/tnztools/fullcolorbrushtool.cpp b/toonz/sources/tnztools/fullcolorbrushtool.cpp index fde2213..1f421a5 100644 --- a/toonz/sources/tnztools/fullcolorbrushtool.cpp +++ b/toonz/sources/tnztools/fullcolorbrushtool.cpp @@ -143,6 +143,9 @@ FullColorBrushTool::FullColorBrushTool(std::string name) m_prop.bind(m_preset); m_preset.setId("BrushPreset"); + m_modifierEraser.setId("RasterEraser"); + m_modifierLockAlpha.setId("LockAlpha"); + m_pressure.setId("PressureSensitivity"); m_brushTimer.start(); } diff --git a/toonz/sources/tnztools/fullcolorerasertool.cpp b/toonz/sources/tnztools/fullcolorerasertool.cpp index 5b6722e..5f523d6 100644 --- a/toonz/sources/tnztools/fullcolorerasertool.cpp +++ b/toonz/sources/tnztools/fullcolorerasertool.cpp @@ -396,6 +396,10 @@ FullColorEraserTool::FullColorEraserTool(std::string name) m_eraseType.addValue(RECTERASE); m_eraseType.addValue(FREEHANDERASE); m_eraseType.addValue(POLYLINEERASE); + + m_eraseType.setId("Type"); + m_invertOption.setId("Invert"); + m_multi.setId("FrameRange"); } //--------------------------------------------------------------------------------------------------- diff --git a/toonz/sources/tnztools/fullcolorfilltool.cpp b/toonz/sources/tnztools/fullcolorfilltool.cpp new file mode 100644 index 0000000..5c53980 --- /dev/null +++ b/toonz/sources/tnztools/fullcolorfilltool.cpp @@ -0,0 +1,223 @@ +#include "fullcolorfilltool.h" + +#include "toonz/stage2.h" +#include "tools/cursors.h" +#include "toonz/txshlevelhandle.h" +#include "toonz/trasterimageutils.h" +#include "toonz/ttileset.h" +#include "toonz/ttilesaver.h" +#include "toonz/levelproperties.h" +#include "toonz/preferences.h" +#include "toonz/txsheethandle.h" + +#include "tools/toolhandle.h" +#include "tools/toolutils.h" + +#include "tenv.h" +#include "tpalette.h" +#include "tsystem.h" + +using namespace ToolUtils; + +TEnv::IntVar FullColorMinFillDepth("InknpaintFullColorMinFillDepth", 4); +TEnv::IntVar FullColorMaxFillDepth("InknpaintFullColorMaxFillDepth", 12); + +namespace { + +//============================================================================= +// FullColorFillUndo +//----------------------------------------------------------------------------- + +class FullColorFillUndo final : public TFullColorRasterUndo { + FillParameters m_params; + bool m_saveboxOnly; + +public: + FullColorFillUndo(TTileSetFullColor *tileSet, const FillParameters ¶ms, + TXshSimpleLevel *sl, const TFrameId &fid, bool saveboxOnly) + : TFullColorRasterUndo(tileSet, sl, fid, false, false, 0) + , m_params(params) + , m_saveboxOnly(saveboxOnly) {} + + void redo() const override { + TRasterImageP image = getImage(); + if (!image) return; + TRaster32P r; + if (m_saveboxOnly) { + TRectD temp = image->getBBox(); + TRect ttemp = convert(temp); + r = image->getRaster()->extract(ttemp); + } else + r = image->getRaster(); + + fullColorFill(r, m_params); + + TTool::Application *app = TTool::getApplication(); + if (app) { + app->getCurrentXsheet()->notifyXsheetChanged(); + notifyImageChanged(); + } + } + + int getSize() const override { + return sizeof(*this) + TFullColorRasterUndo::getSize(); + } + + QString getToolName() override { + return QString("Fill Tool : %1") + .arg(QString::fromStdWString(m_params.m_fillType)); + } + int getHistoryType() override { return HistoryType::FillTool; } +}; + +//============================================================================= +// doFill +//----------------------------------------------------------------------------- + +void doFill(const TImageP &img, const TPointD &pos, FillParameters ¶ms, + bool isShiftFill, TXshSimpleLevel *sl, const TFrameId &fid) { + TTool::Application *app = TTool::getApplication(); + if (!app || !sl) return; + + if (TRasterImageP ri = TRasterImageP(img)) { + TPoint offs(0, 0); + TRaster32P ras = ri->getRaster(); + // only accept 32bpp images for now + if (!ras.getPointer() || ras->isEmpty()) return; + + ras->lock(); + + TTileSetFullColor *tileSet = new TTileSetFullColor(ras->getSize()); + TTileSaverFullColor tileSaver(ras, tileSet); + TDimension imageSize = ras->getSize(); + TPointD p(imageSize.lx % 2 ? 0.0 : 0.5, imageSize.ly % 2 ? 0.0 : 0.5); + + /*-- params.m_p = convert(pos-p)�ł́A�}�C�i�X���W�ł��ꂪ������ --*/ + TPointD tmp_p = pos - p; + params.m_p = TPoint((int)floor(tmp_p.x + 0.5), (int)floor(tmp_p.y + 0.5)); + + params.m_p += ras->getCenter(); + params.m_p -= offs; + params.m_shiftFill = isShiftFill; + + TRect rasRect(ras->getSize()); + if (!rasRect.contains(params.m_p)) { + ras->unlock(); + return; + } + + fullColorFill(ras, params, &tileSaver); + + if (tileSaver.getTileSet()->getTileCount() != 0) { + static int count = 0; + TSystem::outputDebug("RASTERFILL" + std::to_string(count++) + "\n"); + if (offs != TPoint()) + for (int i = 0; i < tileSet->getTileCount(); i++) { + TTileSet::Tile *t = tileSet->editTile(i); + t->m_rasterBounds = t->m_rasterBounds + offs; + } + TUndoManager::manager()->add( + new FullColorFillUndo(tileSet, params, sl, fid, + Preferences::instance()->getFillOnlySavebox())); + } + + sl->getProperties()->setDirtyFlag(true); + + ras->unlock(); + } + + TTool *t = app->getCurrentTool()->getTool(); + if (t) t->notifyImageChanged(); +} +}; + +//============================================================================= +// FullColorFillTool +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- + +FullColorFillTool::FullColorFillTool() + : TTool("T_Fill"), m_fillDepth("Fill Depth", 0, 15, 4, 12) { + bind(TTool::RasterImage); + m_prop.bind(m_fillDepth); +} + +void FullColorFillTool::updateTranslation() { + m_fillDepth.setQStringName(tr("Fill Depth")); +} + +FillParameters FullColorFillTool::getFillParameters() const { + FillParameters params; + int styleId = TTool::getApplication()->getCurrentLevelStyleIndex(); + params.m_styleId = styleId; + params.m_minFillDepth = (int)m_fillDepth.getValue().first; + params.m_maxFillDepth = (int)m_fillDepth.getValue().second; + + if (m_level) params.m_palette = m_level->getPalette(); + return params; +} + +void FullColorFillTool::leftButtonDown(const TPointD &pos, + const TMouseEvent &e) { + m_clickPoint = pos; + TXshLevel *xl = TTool::getApplication()->getCurrentLevel()->getLevel(); + m_level = xl ? xl->getSimpleLevel() : 0; + FillParameters params = getFillParameters(); + doFill(getImage(true), pos, params, e.isShiftPressed(), m_level.getPointer(), + getCurrentFid()); + invalidate(); +} + +void FullColorFillTool::leftButtonDrag(const TPointD &pos, + const TMouseEvent &e) { + FillParameters params = getFillParameters(); + if (m_clickPoint == pos) return; + if (!m_level || !params.m_palette) return; + TImageP img = getImage(true); + TPixel32 fillColor = + params.m_palette->getStyle(params.m_styleId)->getMainColor(); + if (TRasterImageP ri = img) { + TRaster32P ras = ri->getRaster(); + if (!ras) return; + TPointD center = ras->getCenterD(); + TPoint ipos = convert(pos + center); + if (!ras->getBounds().contains(ipos)) return; + TPixel32 pix = ras->pixels(ipos.y)[ipos.x]; + if (pix == fillColor) { + invalidate(); + return; + } + } else + return; + doFill(img, pos, params, e.isShiftPressed(), m_level.getPointer(), + getCurrentFid()); + invalidate(); +} + +bool FullColorFillTool::onPropertyChanged(std::string propertyName) { + // Fill Depth + if (propertyName == m_fillDepth.getName()) { + FullColorMinFillDepth = (int)m_fillDepth.getValue().first; + FullColorMaxFillDepth = (int)m_fillDepth.getValue().second; + } + return true; +} + +void FullColorFillTool::onActivate() { + static bool firstTime = true; + if (firstTime) { + m_fillDepth.setValue(TDoublePairProperty::Value(FullColorMinFillDepth, + FullColorMaxFillDepth)); + firstTime = false; + } +} + +int FullColorFillTool::getCursorId() const { + int ret = ToolCursor::FillCursor; + if (ToonzCheck::instance()->getChecks() & ToonzCheck::eBlackBg) + ret = ret | ToolCursor::Ex_Negate; + return ret; +} + +FullColorFillTool FullColorRasterFillTool; \ No newline at end of file diff --git a/toonz/sources/tnztools/fullcolorfilltool.h b/toonz/sources/tnztools/fullcolorfilltool.h new file mode 100644 index 0000000..1dd979c --- /dev/null +++ b/toonz/sources/tnztools/fullcolorfilltool.h @@ -0,0 +1,45 @@ +#pragma once + +#ifndef FULLCOLORFILLTOOL_H +#define FULLCOLORFILLTOOL_H + +// TnzCore includes +#include "tproperty.h" + +// TnzTools includes +#include "tools/tool.h" +#include "toonz/fill.h" +#include "toonz/txshsimplelevel.h" + +#include +#include + +class FullColorFillTool final : public QObject, public TTool { + Q_DECLARE_TR_FUNCTIONS(FullColorFillTool) + + TXshSimpleLevelP m_level; + TDoublePairProperty m_fillDepth; + TPropertyGroup m_prop; + TPointD m_clickPoint; + +public: + FullColorFillTool(); + + ToolType getToolType() const override { return TTool::LevelWriteTool; } + + void updateTranslation() override; + + TPropertyGroup *getProperties(int targetType) override { return &m_prop; } + + FillParameters getFillParameters() const; + + void leftButtonDown(const TPointD &pos, const TMouseEvent &e) override; + void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override; + + bool onPropertyChanged(std::string propertyName) override; + + void onActivate() override; + int getCursorId() const override; +}; + +#endif // FULLCOLORFILLTOOL_H \ No newline at end of file diff --git a/toonz/sources/tnztools/magnettool.cpp b/toonz/sources/tnztools/magnettool.cpp index ecbfeff..1343638 100644 --- a/toonz/sources/tnztools/magnettool.cpp +++ b/toonz/sources/tnztools/magnettool.cpp @@ -160,16 +160,7 @@ public: else m_cursorId = ToolCursor::CURSOR_NO; - double x = m_toolSize.getValue(); - - double minRange = 1; - double maxRange = 100; - - double minSize = 10; - double maxSize = 100; - - m_pointSize = - (x - minRange) / (maxRange - minRange) * (maxSize - minSize) + minSize; + updatePointSize(); } void onLeave() override { m_pointSize = -1; } @@ -448,6 +439,31 @@ lefrightButtonDown(p); int getCursorId() const override { return m_cursorId; } + bool onPropertyChanged(std::string propertyName) override + { + if(propertyName == m_toolSize.getName()) { + updatePointSize(); + invalidate(); + } + + return true; + } + +private: + /// Update point size based on property. + void updatePointSize() + { + double x = m_toolSize.getValue(); + + double minRange = 1; + double maxRange = 100; + + double minSize = 10; + double maxSize = 100; + + m_pointSize = + (x - minRange) / (maxRange - minRange) * (maxSize - minSize) + minSize; + } } magnetTool; // TTool *getMagnetTool() {return &magnetTool;} diff --git a/toonz/sources/tnztools/paintbrushtool.cpp b/toonz/sources/tnztools/paintbrushtool.cpp index ebf5ca9..d600870 100644 --- a/toonz/sources/tnztools/paintbrushtool.cpp +++ b/toonz/sources/tnztools/paintbrushtool.cpp @@ -401,18 +401,11 @@ bool PaintBrushTool::onPropertyChanged(std::string propertyName) { // Selective else if (propertyName == m_onlyEmptyAreas.getName()) { - if (m_onlyEmptyAreas.getValue() && m_colorType.getValue() == LINES) { - m_colorType.setValue(AREAS); - PaintBrushColorType = ::to_string(m_colorType.getValue()); - } PaintBrushSelective = (int)(m_onlyEmptyAreas.getValue()); } // Areas, Lines etc. else if (propertyName == m_colorType.getName()) { - if (m_colorType.getValue() == LINES) { - PaintBrushSelective = (int)(m_onlyEmptyAreas.getValue()); - } PaintBrushColorType = ::to_string(m_colorType.getValue()); /*--- ColorModelのCursor更新のためにSIGNALを出す ---*/ TTool::getApplication()->getCurrentTool()->notifyToolChanged(); @@ -428,7 +421,7 @@ void PaintBrushTool::leftButtonDown(const TPointD &pos, const TMouseEvent &e) { TImageP image(getImage(true)); if (m_colorType.getValue() == LINES) m_colorTypeBrush = INK; if (m_colorType.getValue() == AREAS) m_colorTypeBrush = PAINT; - if (m_colorType.getValue() == ALL) m_colorTypeBrush = INKNPAINT; + if (m_colorType.getValue() == ALL) m_colorTypeBrush = INKNPAINT; if (TToonzImageP ti = image) { TRasterCM32P ras = ti->getRaster(); @@ -534,7 +527,7 @@ void PaintBrushTool::onDeactivate() { //----------------------------------------------------------------------------- /*! * 描画中にツールが切り替わった場合に備え、onDeactivateでもMouseReleaseと同じ終了処理を行う -*/ + */ void PaintBrushTool::finishBrush() { if (TToonzImageP ti = (TToonzImageP)getImage(true)) { if (m_rasterTrack) { diff --git a/toonz/sources/tnztools/plastictool_build.cpp b/toonz/sources/tnztools/plastictool_build.cpp index 23cb72a..a4a2094 100644 --- a/toonz/sources/tnztools/plastictool_build.cpp +++ b/toonz/sources/tnztools/plastictool_build.cpp @@ -14,9 +14,7 @@ // tcg includes #include "tcg/tcg_point_ops.h" -#include "tcg/tcg_algorithm.h" #include "tcg/tcg_function_types.h" -#include "tcg/tcg_iterator_ops.h" #include "plastictool.h" @@ -68,20 +66,17 @@ TPointD closestMeshVertexPos(const TPointD &pos, double *distance = 0) { //------------------------------------------------------------------------ TPointD closestSkeletonVertexPos(const TPointD &pos) { - struct locals { - static inline double dist2(const TPointD &pos, - const PlasticSkeletonVertex &vx) { - return tcg::point_ops::dist2(pos, vx.P()); - } - }; - const PlasticSkeletonP &skeleton = l_plasticTool.skeleton(); if (!skeleton || skeleton->empty()) return TConsts::napd; const PlasticSkeleton::vertices_container &vertices = skeleton->vertices(); - return tcg::min_transform(vertices.begin(), vertices.end(), - tcg::bind1st(&locals::dist2, pos)) + return std::min_element(vertices.begin(), vertices.end(), + [&pos](PlasticSkeleton::vertex_type const &x, + PlasticSkeleton::vertex_type const &y) { + return tcg::point_ops::dist2(pos, x.P()) < + tcg::point_ops::dist2(pos, y.P()); + }) ->P(); } @@ -566,12 +561,6 @@ void PlasticTool::leftButtonDown_build(const TPointD &pos, // Start move vertex operation if (!m_svSel.isEmpty()) { - struct locals { - static TPointD vertexPos(const PlasticSkeleton &skel, int v) { - return skel.vertex(v).P(); - } - }; - const PlasticSkeletonP &skel = skeleton(); assert(skel); @@ -579,11 +568,11 @@ void PlasticTool::leftButtonDown_build(const TPointD &pos, if (m_svSel.hasSingleObject()) m_pressedPos = skel->vertex(m_svSel).P(); // Store original vertex positions - m_pressedVxsPos = std::vector( - tcg::make_cast_it(m_svSel.objects().begin(), - tcg::bind1st(&locals::vertexPos, *skel)), - tcg::make_cast_it(m_svSel.objects().end(), - tcg::bind1st(&locals::vertexPos, *skel))); + std::vector v; + for (auto const &e : m_svSel.objects()) { + v.push_back(skel->vertex(e).P()); + } + m_pressedVxsPos = std::move(v); } invalidate(); diff --git a/toonz/sources/tnztools/plastictool_meshedit.cpp b/toonz/sources/tnztools/plastictool_meshedit.cpp index 22deeb1..d4da3c4 100644 --- a/toonz/sources/tnztools/plastictool_meshedit.cpp +++ b/toonz/sources/tnztools/plastictool_meshedit.cpp @@ -11,7 +11,6 @@ // tcg includes #include "tcg/tcg_macros.h" #include "tcg/tcg_point_ops.h" -#include "tcg/tcg_iterator_ops.h" #include "tcg/tcg_function_types.h" // boost includes @@ -1052,11 +1051,6 @@ void PlasticTool::leftButtonDown_mesh(const TPointD &pos, } else m_this->setMeshSelection(sel, MeshSelection()); } - - static TPointD vertexPos(const TMeshImage &mi, const MeshIndex &meshIdx) { - return mi.meshes()[meshIdx.m_meshIdx]->vertex(meshIdx.m_idx).P(); - } - } locals = {this}; // Track mouse position @@ -1068,11 +1062,11 @@ void PlasticTool::leftButtonDown_mesh(const TPointD &pos, // Store original vertex positions if (!m_mvSel.isEmpty()) { - m_pressedVxsPos = std::vector( - tcg::make_cast_it(m_mvSel.objects().begin(), - tcg::bind1st(&Locals::vertexPos, *m_mi)), - tcg::make_cast_it(m_mvSel.objects().end(), - tcg::bind1st(&Locals::vertexPos, *m_mi))); + std::vector v; + for (auto const &e : m_mvSel.objects()) { + v.push_back(m_mi->meshes()[e.m_meshIdx]->vertex(e.m_idx).P()); + } + m_pressedVxsPos = std::move(v); } // Redraw selections diff --git a/toonz/sources/tnztools/strokeselection.cpp b/toonz/sources/tnztools/strokeselection.cpp index 020519d..22ac15c 100644 --- a/toonz/sources/tnztools/strokeselection.cpp +++ b/toonz/sources/tnztools/strokeselection.cpp @@ -455,6 +455,27 @@ void StrokeSelection::removeEndpoints() { m_updateSelectionBBox = false; } + +//============================================================================= +// +// selectAll +// +//----------------------------------------------------------------------------- + +void StrokeSelection::selectAll() { + if (!m_vi) return; + + int sCount = int(m_vi->getStrokeCount()); + + for (int s = 0; s < sCount; ++s) { + m_indexes.insert(s); + } + + StrokeSelection *selection = dynamic_cast( + TTool::getApplication()->getCurrentSelection()->getSelection()); + if (selection) selection->notifyView(); +} + //============================================================================= // // deleteStrokes @@ -613,6 +634,7 @@ void StrokeSelection::enableCommands() { enableCommand(m_groupCommand.get(), MI_ExitGroup, &TGroupCommand::exitGroup); enableCommand(this, MI_RemoveEndpoints, &StrokeSelection::removeEndpoints); + enableCommand(this, MI_SelectAll, &StrokeSelection::selectAll); } //=================================================================== diff --git a/toonz/sources/tnztools/stylepicker.cpp b/toonz/sources/tnztools/stylepicker.cpp index a236390..b6cc05a 100644 --- a/toonz/sources/tnztools/stylepicker.cpp +++ b/toonz/sources/tnztools/stylepicker.cpp @@ -12,6 +12,8 @@ #include "tpixelutils.h" #include "tregion.h" +#include + //--------------------------------------------------------- StylePicker::StylePicker(const TImageP &image) @@ -74,7 +76,7 @@ int StylePicker::pickStyleId(const TPointD &pos, double radius2, styleId = palette->getClosestStyle(col); } else if (TVectorImageP vi = m_image) { // prima cerca lo stile della regione piu' vicina - TRegion *r = vi->getRegion(pos); + TRegion *r = vi->getRegion(pos); if (r) styleId = r->getStyle(); // poi cerca quello della stroke, ma se prima aveva trovato una regione, // richiede che @@ -101,7 +103,7 @@ int StylePicker::pickStyleId(const TPointD &pos, double radius2, //--------------------------------------------------------- /*--- Toonz Raster LevelのToneを拾う。 ---*/ -int StylePicker::pickTone(const TPointD &pos) { +int StylePicker::pickTone(const TPointD &pos) const { if (TToonzImageP ti = m_image) { TRasterCM32P ras = ti->getRaster(); if (!ras) return -1; @@ -119,6 +121,7 @@ int StylePicker::pickTone(const TPointD &pos) { TPixel32 StylePicker::pickColor(const TPointD &pos, double radius2) const { TToonzImageP ti = m_image; TRasterImageP ri = m_image; + TVectorImageP vi = m_image; if (!!ri) // !!ti || !!ri) { TRasterP raster; @@ -135,12 +138,74 @@ TPixel32 StylePicker::pickColor(const TPointD &pos, double radius2) const { TRasterGR8P rasterGR8 = raster; if (rasterGR8) return toPixel32(rasterGR8->pixels(point.y)[point.x]); - } else if (TVectorImageP vi = m_image) { + } else if (vi) { const TPalette *palette = m_palette.getPointer(); if (!palette) return TPixel32::Transparent; int styleId = pickStyleId(pos, radius2); if (0 <= styleId && styleId < palette->getStyleCount()) return palette->getStyle(styleId)->getAverageColor(); + } else if (ti) { + const TPalette *palette = m_palette.getPointer(); + if (!palette) return TPixel32::Transparent; + int paintId = pickStyleId(pos, radius2, 0); + int inkId = pickStyleId(pos, radius2, 1); + int tone = pickTone(pos); + TPixel32 ink, paint; + if (0 <= inkId && inkId < palette->getStyleCount()) + ink = palette->getStyle(inkId)->getAverageColor(); + if (0 <= paintId && paintId < palette->getStyleCount()) + paint = palette->getStyle(paintId)->getAverageColor(); + + if (tone == 0) + return ink; + else if (tone == 255) + return paint; + else + return blend(ink, paint, tone, TPixelCM32::getMaxTone()); + } + return TPixel32::Transparent; +} + +//--------------------------------------------------------- + +TPixel32 StylePicker::pickAverageColor(const TRectD &rect) const { + TRasterImageP ri = m_image; + assert(ri); + if (!!ri) { + TRasterP raster; + raster = ri->getRaster(); + + TPoint topLeft = getRasterPoint(rect.getP00()); + TPoint bottomRight = getRasterPoint(rect.getP11()); + + if (!raster->getBounds().overlaps(TRect(topLeft, bottomRight))) + return TPixel32::Transparent; + + topLeft.x = std::max(0, topLeft.x); + topLeft.y = std::max(0, topLeft.y); + bottomRight.x = std::min(raster->getLx(), bottomRight.x); + bottomRight.y = std::min(raster->getLy(), bottomRight.y); + + TRaster32P raster32 = raster; + assert(raster32); + if (raster32) { + UINT r = 0, g = 0, b = 0, m = 0, size = 0; + for (int y = topLeft.y; y < bottomRight.y; y++) { + TPixel32 *p = &raster32->pixels(y)[topLeft.x]; + for (int x = topLeft.x; x < bottomRight.x; x++, p++) { + r += p->r; + g += p->g; + b += p->b; + m += p->m; + size++; + } + } + + if (size) + return TPixel32(r / size, g / size, b / size, m / size); + else + return TPixel32::Transparent; + } } return TPixel32::Transparent; } @@ -236,7 +301,7 @@ TPixel32 getAverageColor(TStroke *stroke) { return TPixel32(buffer[0].b, buffer[0].g, buffer[0].r, 255); } -} // namspace +} // namespace //--------------------------------------------------------- diff --git a/toonz/sources/tnztools/stylepickertool.cpp b/toonz/sources/tnztools/stylepickertool.cpp index b8b7d77..fc5fe81 100644 --- a/toonz/sources/tnztools/stylepickertool.cpp +++ b/toonz/sources/tnztools/stylepickertool.cpp @@ -63,14 +63,15 @@ StylePickerTool::StylePickerTool() void StylePickerTool::leftButtonDown(const TPointD &pos, const TMouseEvent &e) { m_oldStyleId = m_currentStyleId = getApplication()->getCurrentLevelStyleIndex(); - pick(pos, e); + pick(pos, e, false); } void StylePickerTool::leftButtonDrag(const TPointD &pos, const TMouseEvent &e) { pick(pos, e); } -void StylePickerTool::pick(const TPointD &pos, const TMouseEvent &e) { +void StylePickerTool::pick(const TPointD &pos, const TMouseEvent &e, + bool isDragging) { // Area = 0, Line = 1, All = 2 int modeValue = m_colorType.getIndex(); @@ -132,7 +133,8 @@ void StylePickerTool::pick(const TPointD &pos, const TMouseEvent &e) { ->getSelection() ->selectNone(); /*-- StyleIdの移動 --*/ - getApplication()->setCurrentLevelStyleIndex(superPicked_StyleId); + getApplication()->setCurrentLevelStyleIndex(superPicked_StyleId, + !isDragging); return; } } @@ -181,7 +183,12 @@ void StylePickerTool::pick(const TPointD &pos, const TMouseEvent &e) { if (styleSelection) styleSelection->selectNone(); } - getApplication()->setCurrentLevelStyleIndex(styleId); + // When clicking and switching between studio palette and level palette, the + // signal broadcastColorStyleSwitched is not emitted if the picked style is + // previously selected one. + // Therefore here I set the "forceEmit" flag to true in order to emit the + // signal whenever the picking with mouse press. + getApplication()->setCurrentLevelStyleIndex(styleId, !isDragging); } void StylePickerTool::mouseMove(const TPointD &pos, const TMouseEvent &e) { diff --git a/toonz/sources/tnztools/stylepickertool.h b/toonz/sources/tnztools/stylepickertool.h index de3fb68..65a46c7 100644 --- a/toonz/sources/tnztools/stylepickertool.h +++ b/toonz/sources/tnztools/stylepickertool.h @@ -36,7 +36,7 @@ public: void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override; - void pick(const TPointD &pos, const TMouseEvent &e); + void pick(const TPointD &pos, const TMouseEvent &e, bool isDragging = true); void mouseMove(const TPointD &pos, const TMouseEvent &e) override; diff --git a/toonz/sources/tnztools/tool.cpp b/toonz/sources/tnztools/tool.cpp index 5325ed0..0e5fee5 100644 --- a/toonz/sources/tnztools/tool.cpp +++ b/toonz/sources/tnztools/tool.cpp @@ -963,16 +963,10 @@ QString TTool::updateEnabled(int rowIndex, int columnIndex) { // Check TTool::ImageType tools if (toolType == TTool::LevelWriteTool) { // Check level against read-only status - if (sl->isReadOnly()) { - const std::set &editableFrames = sl->getEditableRange(); - TFrameId currentFid = getCurrentFid(); - - if (editableFrames.find(currentFid) == editableFrames.end()) - return ( - enable(false), - QObject::tr( - "The current frame is locked: any editing is forbidden.")); - } + if (sl->isFrameReadOnly(getCurrentFid())) + return (enable(false), + QObject::tr( + "The current frame is locked: any editing is forbidden.")); // Check level type write support if (sl->getPath().getType() == diff --git a/toonz/sources/tnztools/tooloptions.cpp b/toonz/sources/tnztools/tooloptions.cpp index dbc4cce..6702f93 100644 --- a/toonz/sources/tnztools/tooloptions.cpp +++ b/toonz/sources/tnztools/tooloptions.cpp @@ -25,6 +25,7 @@ #include "toonzqt/gutil.h" #include "toonzqt/dvscrollwidget.h" #include "toonzqt/lutcalibrator.h" +#include "toonzqt/viewcommandids.h" // TnzLib includes #include "toonz/tobjecthandle.h" @@ -60,9 +61,6 @@ #include #include -// tcg includes -#include "tcg/tcg_deleter_types.h" - TEnv::IntVar ArrowGlobalKeyFrame("EditToolGlobalKeyFrame", 0); //============================================================================= @@ -126,8 +124,9 @@ ToolOptionsBox::ToolOptionsBox(QWidget *parent, bool isScrollable) ToolOptionsBox::~ToolOptionsBox() { std::for_each(m_controls.begin(), m_controls.end(), - tcg::deleter()); - std::for_each(m_labels.begin(), m_labels.end(), tcg::deleter()); + std::default_delete()); + std::for_each(m_labels.begin(), m_labels.end(), + std::default_delete()); } //----------------------------------------------------------------------------- @@ -220,6 +219,17 @@ void ToolOptionControlBuilder::visit(TDoubleProperty *p) { control->addAction(a); QObject::connect(a, SIGNAL(triggered()), control, SLOT(decrease())); } + if (p->getName() == "ModifierSize") { + QAction *a; + a = cm->getAction("A_IncreaseMaxBrushThickness"); + control->addAction(a); + QObject::connect(a, SIGNAL(triggered()), control, + SLOT(increaseFractional())); + a = cm->getAction("A_DecreaseMaxBrushThickness"); + control->addAction(a); + QObject::connect(a, SIGNAL(triggered()), control, + SLOT(decreaseFractional())); + } if (p->getName() == "Hardness:") { QAction *a; a = cm->getAction("A_IncreaseBrushHardness"); @@ -525,7 +535,7 @@ ArrowToolOptionsBox::ArrowToolOptionsBox( m_nsPosField = new PegbarChannelField(m_tool, TStageObject::T_Y, "field", frameHandle, objHandle, xshHandle, this); - m_zField = new PegbarChannelField(m_tool, TStageObject::T_Z, "field", + m_zField = new PegbarChannelField(m_tool, TStageObject::T_Z, "field", frameHandle, objHandle, xshHandle, this); m_noScaleZField = new NoScaleField(m_tool, "field"); @@ -656,7 +666,7 @@ ArrowToolOptionsBox::ArrowToolOptionsBox( m_zField->setPrecision(4); m_noScaleZField->setPrecision(4); - bool splined = isCurrentObjectSplined(); + bool splined = isCurrentObjectSplined(); if (splined != m_splined) m_splined = splined; setSplined(m_splined); @@ -1054,7 +1064,7 @@ void ArrowToolOptionsBox::onStageObjectChange() { updateStatus(); } //----------------------------------------------------------------------------- /*! update the object list in combobox -*/ + */ void ArrowToolOptionsBox::updateStageObjectComboItems() { // clear items m_currentStageObjectCombo->clear(); @@ -1083,7 +1093,7 @@ void ArrowToolOptionsBox::updateStageObjectComboItems() { //------------------------------------------------------------------------------ /*! syncronize the current item in the combobox to the selected stage object -*/ + */ void ArrowToolOptionsBox::syncCurrentStageObjectComboItem() { TStageObjectId curObjId = m_objHandle->getObjectId(); @@ -1106,7 +1116,7 @@ void ArrowToolOptionsBox::syncCurrentStageObjectComboItem() { //------------------------------------------------------------------------------ /*!change the current stage object when user changes it via combobox by hand -*/ + */ void ArrowToolOptionsBox::onCurrentStageObjectComboActivated(int index) { int code = m_currentStageObjectCombo->itemData(index).toInt(); TStageObjectId id; @@ -1284,7 +1294,7 @@ SelectionToolOptionsBox::SelectionToolOptionsBox(QWidget *parent, TTool *tool, // assert(ret); bool ret = connect(m_scaleXField, SIGNAL(valueChange(bool)), SLOT(onScaleXValueChanged(bool))); - ret = ret && connect(m_scaleYField, SIGNAL(valueChange(bool)), + ret = ret && connect(m_scaleYField, SIGNAL(valueChange(bool)), SLOT(onScaleYValueChanged(bool))); if (m_setSaveboxCheckbox) ret = ret && connect(m_setSaveboxCheckbox, SIGNAL(toggled(bool)), @@ -1612,7 +1622,7 @@ PaintbrushToolOptionsBox::PaintbrushToolOptionsBox(QWidget *parent, TTool *tool, dynamic_cast(m_controls.value("Selective")); if (m_colorMode->getProperty()->getValue() == L"Lines") - m_selectiveMode->setEnabled(false); + m_selectiveMode->setVisible(false); bool ret = connect(m_colorMode, SIGNAL(currentIndexChanged(int)), this, SLOT(onColorModeChanged(int))); @@ -1632,7 +1642,26 @@ void PaintbrushToolOptionsBox::updateStatus() { void PaintbrushToolOptionsBox::onColorModeChanged(int index) { const TEnumProperty::Range &range = m_colorMode->getProperty()->getRange(); bool enabled = range[index] != L"Lines"; - m_selectiveMode->setEnabled(enabled); + m_selectiveMode->setVisible(enabled); +} + +//============================================================================= +// +// FullColorFillToolOptionsBox +// +//============================================================================= + +FullColorFillToolOptionsBox::FullColorFillToolOptionsBox( + QWidget *parent, TTool *tool, TPaletteHandle *pltHandle, + ToolHandle *toolHandle) + : ToolOptionsBox(parent) { + TPropertyGroup *props = tool->getProperties(0); + assert(props->getPropertyCount() > 0); + + ToolOptionControlBuilder builder(this, tool, pltHandle, toolHandle); + if (tool && tool->getProperties(0)) tool->getProperties(0)->accept(builder); + + m_layout->addStretch(0); } //============================================================================= @@ -1676,11 +1705,11 @@ FillToolOptionsBox::FillToolOptionsBox(QWidget *parent, TTool *tool, bool ret = connect(m_colorMode, SIGNAL(currentIndexChanged(int)), this, SLOT(onColorModeChanged(int))); - ret = ret && connect(m_toolType, SIGNAL(currentIndexChanged(int)), this, + ret = ret && connect(m_toolType, SIGNAL(currentIndexChanged(int)), this, SLOT(onToolTypeChanged(int))); - ret = ret && connect(m_onionMode, SIGNAL(toggled(bool)), this, + ret = ret && connect(m_onionMode, SIGNAL(toggled(bool)), this, SLOT(onOnionModeToggled(bool))); - ret = ret && connect(m_multiFrameMode, SIGNAL(toggled(bool)), this, + ret = ret && connect(m_multiFrameMode, SIGNAL(toggled(bool)), this, SLOT(onMultiFrameModeToggled(bool))); assert(ret); if (m_colorMode->getProperty()->getValue() == L"Lines") { @@ -2279,9 +2308,9 @@ TapeToolOptionsBox::TapeToolOptionsBox(QWidget *parent, TTool *tool, bool ret = connect(m_typeMode, SIGNAL(currentIndexChanged(int)), this, SLOT(onToolTypeChanged(int))); - ret = ret && connect(m_toolMode, SIGNAL(currentIndexChanged(int)), this, + ret = ret && connect(m_toolMode, SIGNAL(currentIndexChanged(int)), this, SLOT(onToolModeChanged(int))); - ret = ret && connect(m_joinStrokesMode, SIGNAL(toggled(bool)), this, + ret = ret && connect(m_joinStrokesMode, SIGNAL(toggled(bool)), this, SLOT(onJoinStrokesModeChanged())); assert(ret); } @@ -2329,7 +2358,7 @@ void TapeToolOptionsBox::onJoinStrokesModeChanged() { //----------------------------------------------------------------------------- /*! Label with background color -*/ + */ class RGBLabel final : public QWidget { QColor m_color; @@ -2368,10 +2397,11 @@ protected: p.setPen(Qt::black); p.setBrush(Qt::NoBrush); - p.drawText(rect(), Qt::AlignCenter, QString("R:%1 G:%2 B:%3") - .arg(m_color.red()) - .arg(m_color.green()) - .arg(m_color.blue())); + p.drawText(rect(), Qt::AlignCenter, + QString("R:%1 G:%2 B:%3") + .arg(m_color.red()) + .arg(m_color.green()) + .arg(m_color.blue())); } }; @@ -2640,6 +2670,74 @@ void ShiftTraceToolOptionBox::onAfterRadioBtnClicked() { } //============================================================================= +// ZoomToolOptionBox +//----------------------------------------------------------------------------- + +ZoomToolOptionsBox::ZoomToolOptionsBox(QWidget *parent, TTool *tool, + TPaletteHandle *pltHandle, + ToolHandle *toolHandle) + : ToolOptionsBox(parent) { + setFrameStyle(QFrame::StyledPanel); + setFixedHeight(26); + + QAction *resetZoomAction = CommandManager::instance()->getAction(V_ZoomReset); + + QPushButton *button = new QPushButton(tr("Reset Zoom")); + button->setFixedHeight(20); + button->addAction(resetZoomAction); + connect(button, SIGNAL(clicked()), resetZoomAction, SLOT(trigger())); + + m_layout->addStretch(1); + m_layout->addWidget(button, 0); +} + +//============================================================================= +// RotateToolOptionBox +//----------------------------------------------------------------------------- + +RotateToolOptionsBox::RotateToolOptionsBox(QWidget *parent, TTool *tool, + TPaletteHandle *pltHandle, + ToolHandle *toolHandle) + : ToolOptionsBox(parent) { + setFrameStyle(QFrame::StyledPanel); + setFixedHeight(26); + + QAction *resetRotationAction = + CommandManager::instance()->getAction(V_RotateReset); + + QPushButton *button = new QPushButton(tr("Reset Rotation")); + button->setFixedHeight(20); + button->addAction(resetRotationAction); + connect(button, SIGNAL(clicked()), resetRotationAction, SLOT(trigger())); + + m_layout->addStretch(1); + m_layout->addWidget(button, 0); +} + +//============================================================================= +// HandToolOptionBox +//----------------------------------------------------------------------------- + +HandToolOptionsBox::HandToolOptionsBox(QWidget *parent, TTool *tool, + TPaletteHandle *pltHandle, + ToolHandle *toolHandle) + : ToolOptionsBox(parent) { + setFrameStyle(QFrame::StyledPanel); + setFixedHeight(26); + + QAction *resetPositionAction = + CommandManager::instance()->getAction(V_PositionReset); + + QPushButton *button = new QPushButton(tr("Reset Position")); + button->setFixedHeight(20); + button->addAction(resetPositionAction); + connect(button, SIGNAL(clicked()), resetPositionAction, SLOT(trigger())); + + m_layout->addStretch(1); + m_layout->addWidget(button, 0); +} + +//============================================================================= // ToolOptions //----------------------------------------------------------------------------- @@ -2714,7 +2812,7 @@ void ToolOptions::onToolSwitched() { TTool *tool = app->getCurrentTool()->getTool(); if (tool) { // c'e' un tool corrente - ToolOptionsBox *panel = 0; + ToolOptionsBox *panel = 0; std::map::iterator it = m_panels.find(tool); if (it == m_panels.end()) { // ... senza panel associato @@ -2730,9 +2828,13 @@ void ToolOptions::onToolSwitched() { panel = new TypeToolOptionsBox(0, tool, currPalette, currTool); else if (tool->getName() == T_PaintBrush) panel = new PaintbrushToolOptionsBox(0, tool, currPalette, currTool); - else if (tool->getName() == T_Fill) - panel = new FillToolOptionsBox(0, tool, currPalette, currTool); - else if (tool->getName() == T_Eraser) + else if (tool->getName() == T_Fill) { + if (tool->getTargetType() & TTool::RasterImage) + panel = + new FullColorFillToolOptionsBox(0, tool, currPalette, currTool); + else + panel = new FillToolOptionsBox(0, tool, currPalette, currTool); + } else if (tool->getName() == T_Eraser) panel = new EraserToolOptionsBox(0, tool, currPalette, currTool); else if (tool->getName() == T_Tape) panel = new TapeToolOptionsBox(0, tool, currPalette, currTool); @@ -2749,6 +2851,12 @@ void ToolOptions::onToolSwitched() { app->getPaletteController()); else if (tool->getName() == "T_ShiftTrace") panel = new ShiftTraceToolOptionBox(this, tool); + else if (tool->getName() == T_Zoom) + panel = new ZoomToolOptionsBox(0, tool, currPalette, currTool); + else if (tool->getName() == T_Rotate) + panel = new RotateToolOptionsBox(0, tool, currPalette, currTool); + else if (tool->getName() == T_Hand) + panel = new HandToolOptionsBox(0, tool, currPalette, currTool); else panel = tool->createOptionsBox(); // Only this line should remain out // of that if/else monstrosity diff --git a/toonz/sources/tnztools/tooloptionscontrols.cpp b/toonz/sources/tnztools/tooloptionscontrols.cpp index bee24dc..24f64bb 100644 --- a/toonz/sources/tnztools/tooloptionscontrols.cpp +++ b/toonz/sources/tnztools/tooloptionscontrols.cpp @@ -192,7 +192,7 @@ void ToolOptionSlider::onValueChanged(bool isDragging) { //----------------------------------------------------------------------------- -void ToolOptionSlider::increase() { +void ToolOptionSlider::increase(double step) { if (m_toolHandle && m_toolHandle->getTool() != m_tool) return; // active only if the belonging combo-viewer is visible if (!isInVisibleViewer(this)) return; @@ -201,7 +201,7 @@ void ToolOptionSlider::increase() { double minValue, maxValue; getRange(minValue, maxValue); - value += 1; + value += step; if (value > maxValue) value = maxValue; setValue(value); @@ -213,7 +213,11 @@ void ToolOptionSlider::increase() { //----------------------------------------------------------------------------- -void ToolOptionSlider::decrease() { +void ToolOptionSlider::increaseFractional() { increase(0.06); } + +//----------------------------------------------------------------------------- + +void ToolOptionSlider::decrease(double step) { if (m_toolHandle && m_toolHandle->getTool() != m_tool) return; // active only if the belonging combo-viewer is visible if (!isInVisibleViewer(this)) return; @@ -222,7 +226,7 @@ void ToolOptionSlider::decrease() { double minValue, maxValue; getRange(minValue, maxValue); - value -= 1; + value -= step; if (value < minValue) value = minValue; setValue(value); @@ -232,6 +236,10 @@ void ToolOptionSlider::decrease() { repaint(); } +//----------------------------------------------------------------------------- + +void ToolOptionSlider::decreaseFractional() { decrease(0.06); } + //============================================================================= ToolOptionPairSlider::ToolOptionPairSlider(TTool *tool, diff --git a/toonz/sources/tnztools/tooloptionscontrols.h b/toonz/sources/tnztools/tooloptionscontrols.h index 6af4bbc..6698552 100644 --- a/toonz/sources/tnztools/tooloptionscontrols.h +++ b/toonz/sources/tnztools/tooloptionscontrols.h @@ -119,8 +119,10 @@ public: protected slots: void onValueChanged(bool isDragging); - void increase(); - void decrease(); + void increase(double step = 1.0); + void decrease(double step = 1.0); + void increaseFractional(); + void decreaseFractional(); }; //----------------------------------------------------------------------------- diff --git a/toonz/sources/tnztools/toolutils.cpp b/toonz/sources/tnztools/toolutils.cpp index cd7832b..141845b 100644 --- a/toonz/sources/tnztools/toolutils.cpp +++ b/toonz/sources/tnztools/toolutils.cpp @@ -1526,8 +1526,8 @@ void ToolUtils::drawBalloon(const TPointD &pos, std::string text, delta.x *= devPixRatio; delta.y *= devPixRatio; - textRect.moveTo(qMax(delta.x, 10 * devPixRatio + mrg), - qMax(mrg + 2 * devPixRatio, -delta.y - baseLine)); + textRect.moveTo(std::max(delta.x, 10 * devPixRatio + mrg), + std::max(mrg + 2 * devPixRatio, -delta.y - baseLine)); int y = textRect.top() + baseLine; int x0 = textRect.left() - mrg; @@ -1577,7 +1577,7 @@ void ToolUtils::drawBalloon(const TPointD &pos, std::string text, } QSize size(textRect.width() + textRect.left() + mrg, - qMax(textRect.bottom() + mrg, y + delta.y) + 3 * devPixRatio); + std::max(textRect.bottom() + mrg, y + delta.y) + 3 * devPixRatio); QImage label(size.width(), size.height(), QImage::Format_ARGB32); label.fill(Qt::transparent); diff --git a/toonz/sources/tnztools/toonzrasterbrushtool.cpp b/toonz/sources/tnztools/toonzrasterbrushtool.cpp index b632221..c432f36 100644 --- a/toonz/sources/tnztools/toonzrasterbrushtool.cpp +++ b/toonz/sources/tnztools/toonzrasterbrushtool.cpp @@ -1017,6 +1017,27 @@ void ToonzRasterBrushTool::drawEmptyCircle(TPointD pos, int thick, //------------------------------------------------------------------------------------------------------- +TPointD ToonzRasterBrushTool::getCenteredCursorPos( + const TPointD &originalCursorPos) { + if (m_isMyPaintStyleSelected) return originalCursorPos; + TXshLevelHandle *levelHandle = m_application->getCurrentLevel(); + TXshSimpleLevel *level = levelHandle ? levelHandle->getSimpleLevel() : 0; + TDimension resolution = + level ? level->getProperties()->getImageRes() : TDimension(0, 0); + + bool xEven = (resolution.lx % 2 == 0); + bool yEven = (resolution.ly % 2 == 0); + + TPointD centeredCursorPos = originalCursorPos; + + if (xEven) centeredCursorPos.x -= 0.5; + if (yEven) centeredCursorPos.y -= 0.5; + + return centeredCursorPos; +} + +//------------------------------------------------------------------------------------------------------- + void ToonzRasterBrushTool::updateTranslation() { m_rasThickness.setQStringName(tr("Size")); m_hardness.setQStringName(tr("Hardness:")); @@ -1184,6 +1205,8 @@ void ToonzRasterBrushTool::leftButtonDown(const TPointD &pos, // todo: gestire autoenable if (!m_enabled) return; + TPointD centeredPos = getCenteredCursorPos(pos); + m_currentColor = TPixel32::Black; m_active = !!getImage(true); if (!m_active) { @@ -1226,7 +1249,7 @@ void ToonzRasterBrushTool::leftButtonDown(const TPointD &pos, thickness = m_rasThickness.getValue().first; TPointD halfThick(maxThick * 0.5, maxThick * 0.5); - TRectD invalidateRect(pos - halfThick, pos + halfThick); + TRectD invalidateRect(centeredPos - halfThick, centeredPos + halfThick); TPointD dpi; ri->getDpi(dpi.x, dpi.y); TRectD previousTipRect(m_brushPos - halfThick, m_brushPos + halfThick); @@ -1244,7 +1267,7 @@ void ToonzRasterBrushTool::leftButtonDown(const TPointD &pos, // mypaint brush case if (m_isMyPaintStyleSelected) { - TPointD point(pos + rasCenter); + TPointD point(centeredPos + rasCenter); double pressure = m_pressure.getValue() && e.isTablet() ? e.m_pressure : 0.5; updateCurrentStyle(); @@ -1276,7 +1299,8 @@ void ToonzRasterBrushTool::leftButtonDown(const TPointD &pos, TPointD thickOffset(m_maxCursorThick * 0.5, m_maxCursorThick * 0.5); invalidateRect = convert(m_strokeSegmentRect) - rasCenter; - invalidateRect += TRectD(pos - thickOffset, pos + thickOffset); + invalidateRect += + TRectD(centeredPos - thickOffset, centeredPos + thickOffset); invalidateRect += TRectD(m_brushPos - thickOffset, m_brushPos + thickOffset); } else if (m_hardness.getValue() == 100 || m_pencil.getValue()) { @@ -1284,7 +1308,8 @@ void ToonzRasterBrushTool::leftButtonDown(const TPointD &pos, * --*/ if (!m_pencil.getValue()) thickness -= 1.0; - TThickPoint thickPoint(pos + convert(ras->getCenter()), thickness); + TThickPoint thickPoint(centeredPos + convert(ras->getCenter()), + thickness); m_rasterTrack = new RasterStrokeGenerator( ras, BRUSH, NONE, m_styleId, thickPoint, drawOrder != OverAll, 0, !m_pencil.getValue(), drawOrder == PaletteOrder); @@ -1305,7 +1330,7 @@ void ToonzRasterBrushTool::leftButtonDown(const TPointD &pos, } } else { m_points.clear(); - TThickPoint point(pos + rasCenter, thickness); + TThickPoint point(centeredPos + rasCenter, thickness); m_points.push_back(point); m_bluredBrush = new BluredBrush(m_workRas, maxThick, m_brushPad, false); @@ -1335,7 +1360,8 @@ void ToonzRasterBrushTool::leftButtonDown(const TPointD &pos, invalidate(invalidateRect.enlarge(2)); } // updating m_brushPos is needed to refresh viewer properly - m_brushPos = m_mousePos = pos; + m_mousePos = pos; + m_brushPos = getCenteredCursorPos(pos); } //------------------------------------------------------------------------------------------------------------- @@ -1343,10 +1369,13 @@ void ToonzRasterBrushTool::leftButtonDown(const TPointD &pos, void ToonzRasterBrushTool::leftButtonDrag(const TPointD &pos, const TMouseEvent &e) { if (!m_enabled || !m_active) { - m_brushPos = m_mousePos = pos; + m_mousePos = pos; + m_brushPos = getCenteredCursorPos(pos); return; } + TPointD centeredPos = getCenteredCursorPos(pos); + TToonzImageP ti = TImageP(getImage(true)); TPointD rasCenter = ti->getRaster()->getCenterD(); int maxThickness = m_rasThickness.getValue().second; @@ -1356,7 +1385,7 @@ void ToonzRasterBrushTool::leftButtonDrag(const TPointD &pos, TRectD invalidateRect; if (m_isMyPaintStyleSelected) { TRasterP ras = ti->getRaster(); - TPointD point(pos + rasCenter); + TPointD point(centeredPos + rasCenter); double pressure = m_pressure.getValue() && e.isTablet() ? e.m_pressure : 0.5; @@ -1372,7 +1401,8 @@ void ToonzRasterBrushTool::leftButtonDrag(const TPointD &pos, TPointD thickOffset(m_maxCursorThick * 0.5, m_maxCursorThick * 0.5); invalidateRect = convert(m_strokeSegmentRect) - rasCenter; - invalidateRect += TRectD(pos - thickOffset, pos + thickOffset); + invalidateRect += + TRectD(centeredPos - thickOffset, centeredPos + thickOffset); invalidateRect += TRectD(m_brushPos - thickOffset, m_brushPos + thickOffset); } else if (m_rasterTrack && @@ -1381,7 +1411,7 @@ void ToonzRasterBrushTool::leftButtonDrag(const TPointD &pos, * --*/ if (!m_pencil.getValue()) thickness -= 1.0; - TThickPoint thickPoint(pos + rasCenter, thickness); + TThickPoint thickPoint(centeredPos + rasCenter, thickness); std::vector pts; if (m_smooth.getValue() == 0) { pts.push_back(thickPoint); @@ -1410,7 +1440,7 @@ void ToonzRasterBrushTool::leftButtonDrag(const TPointD &pos, } else { // antialiased brush assert(m_workRas.getPointer() && m_backupRas.getPointer()); - TThickPoint thickPoint(pos + rasCenter, thickness); + TThickPoint thickPoint(centeredPos + rasCenter, thickness); std::vector pts; if (m_smooth.getValue() == 0) { pts.push_back(thickPoint); @@ -1461,10 +1491,11 @@ void ToonzRasterBrushTool::leftButtonDrag(const TPointD &pos, if (m_smooth.getValue() != 0) { TPointD halfThick(m_maxThick * 0.5, m_maxThick * 0.5); invalidateRect += TRectD(m_brushPos - halfThick, m_brushPos + halfThick); - invalidateRect += TRectD(pos - halfThick, pos + halfThick); + invalidateRect += TRectD(centeredPos - halfThick, centeredPos + halfThick); } - m_brushPos = m_mousePos = pos; + m_mousePos = pos; + m_brushPos = getCenteredCursorPos(pos); invalidate(invalidateRect.enlarge(2)); } @@ -1479,8 +1510,9 @@ void ToonzRasterBrushTool::leftButtonUp(const TPointD &pos, if (!isValid) { return; } + TPointD centeredPos = getCenteredCursorPos(pos); double pressure = m_pressure.getValue() && e.isTablet() ? e.m_pressure : 0.5; - finishRasterBrush(pos, pressure); + finishRasterBrush(centeredPos, pressure); } //--------------------------------------------------------------------------------------------------------------- @@ -1766,7 +1798,7 @@ void ToonzRasterBrushTool::mouseMove(const TPointD &pos, const TMouseEvent &e) { } else { m_mousePos = pos; - m_brushPos = pos; + m_brushPos = getCenteredCursorPos(pos); invalidateRect += TRectD(pos - halfThick, pos + halfThick); } @@ -2081,6 +2113,11 @@ void ToonzRasterBrushTool::updateCurrentStyle() { TTool::Application *app = TTool::getApplication(); TMyPaintBrushStyle *brushStyle = dynamic_cast(app->getCurrentLevelStyle()); + if (!brushStyle) { + // brush changed to normal abnormally. Complete color style change. + onColorStyleChanged(); + return; + } double radiusLog = brushStyle->getBrush().getBaseValue( MYPAINT_BRUSH_SETTING_RADIUS_LOGARITHMIC) + m_modifierSize.getValue() * log(2.0); diff --git a/toonz/sources/tnztools/toonzrasterbrushtool.h b/toonz/sources/tnztools/toonzrasterbrushtool.h index 16d1a34..c524ad6 100644 --- a/toonz/sources/tnztools/toonzrasterbrushtool.h +++ b/toonz/sources/tnztools/toonzrasterbrushtool.h @@ -226,6 +226,8 @@ protected: bool horizontal, bool isDecimal); static void drawEmptyCircle(TPointD point, int thick, bool isLxEven, bool isLyEven, bool isPencil); + + TPointD getCenteredCursorPos(const TPointD &originalCursorPos); }; //------------------------------------------------------------ diff --git a/toonz/sources/tnztools/toonzvectorbrushtool.cpp b/toonz/sources/tnztools/toonzvectorbrushtool.cpp index c539159..0a54da8 100644 --- a/toonz/sources/tnztools/toonzvectorbrushtool.cpp +++ b/toonz/sources/tnztools/toonzvectorbrushtool.cpp @@ -625,6 +625,12 @@ void ToonzVectorBrushTool::onDeactivate() { /*--- * �h���b�O���Ƀc�[�����؂�ւ�����ꍇ�ɔ����AonDeactivate�ɂ�MouseRelease�Ɠ����������s�� * ---*/ + + // End current stroke. + if (m_active && m_enabled) { + leftButtonUp(m_lastDragPos, m_lastDragEvent); + } + if (m_tileSaver && !m_isPath) { m_enabled = false; } @@ -718,6 +724,10 @@ void ToonzVectorBrushTool::leftButtonDrag(const TPointD &pos, m_brushPos = m_mousePos = pos; return; } + + m_lastDragPos = pos; + m_lastDragEvent = e; + double thickness = (m_pressure.getValue() || m_isPath) ? computeThickness(e.m_pressure, m_thickness, m_isPath) : m_thickness.getValue().second * 0.5; diff --git a/toonz/sources/tnztools/toonzvectorbrushtool.h b/toonz/sources/tnztools/toonzvectorbrushtool.h index 887da39..21fad23 100644 --- a/toonz/sources/tnztools/toonzvectorbrushtool.h +++ b/toonz/sources/tnztools/toonzvectorbrushtool.h @@ -192,6 +192,9 @@ protected: ��ƒ���FrameId���N���b�N���ɕۑ����A�}�E�X�����[�X���iUndo�̓o�^���j�ɕʂ̃t���[���� �ړ����Ă����Ƃ��̕s����C������B---*/ TFrameId m_workingFrameId; + + TPointD m_lastDragPos; //!< Position where mouse was last dragged. + TMouseEvent m_lastDragEvent; //!< Previous mouse-drag event. }; #endif // TOONZVECTORBRUSHTOOL_H diff --git a/toonz/sources/tnztools/viewtools.h b/toonz/sources/tnztools/viewtools.h index 1ad806b..786ee67 100644 --- a/toonz/sources/tnztools/viewtools.h +++ b/toonz/sources/tnztools/viewtools.h @@ -42,4 +42,4 @@ public: } }; -#endif VIEWTOOLS_H \ No newline at end of file +#endif // VIEWTOOLS_H diff --git a/toonz/sources/toonz/CMakeLists.txt b/toonz/sources/toonz/CMakeLists.txt index 10496d0..067887b 100644 --- a/toonz/sources/toonz/CMakeLists.txt +++ b/toonz/sources/toonz/CMakeLists.txt @@ -6,126 +6,104 @@ set(MOC_HEADERS adjustthicknesspopup.h antialiaspopup.h audiorecordingpopup.h + autoinputcellnumberpopup.h batches.h batchserversviewer.h binarizepopup.h + boardsettingspopup.h brightnessandcontrastpopup.h cachefxcommand.h + cameracapturelevelcontrol.h camerasettingspopup.h canvassizepopup.h - castselection.h castviewer.h - celldata.h - cellkeyframedata.h - cellkeyframeselection.h - cellselection.h - ../include/cellposition.h cleanuppaletteviewer.h cleanuppopup.h cleanuppreview.h cleanupsettingsmodel.h + cleanupsettingspane.h cleanupsettingspopup.h cleanupswatch.h + colormodelbehaviorpopup.h colormodelviewer.h - columncommand.h - columnselection.h + comboviewerpane.h commandbar.h commandbarpopup.h convertpopup.h - curveio.h - drawingdata.h duplicatepopup.h dvdirtreeview.h dvitemview.h dvwidgets.h - exportlevelcommand.h exportlevelpopup.h - exportscenepopup.h exportpanel.h + exportscenepopup.h filebrowser.h filebrowsermodel.h filebrowserpopup.h - filedata.h fileinfopopup.h - fileselection.h filmstrip.h - filmstripcommand.h - filmstripselection.h flipbook.h - floatingpanelcommand.h formatsettingspopups.h frameheadgadget.h fxparameditorpopup.h histogrampopup.h - history.h + historypane.h imageviewer.h insertfxpopup.h - iocommand.h - keyframedata.h - keyframeselection.h - keyframemover.h layerfooterpanel.h layerheaderpanel.h levelcreatepopup.h levelsettingspopup.h linesfadepopup.h - linetestcapturepane.h - linetestpane.h - linetestviewer.h lipsyncpopup.h loadfolderpopup.h + locatorpopup.h magpiefileimportpopup.h mainwindow.h matchline.h menubar.h menubarpopup.h - menubarcommandids.h meshifypopup.h messagepanel.h - moviegenerator.h - ../include/orientation.h onionskinmaskgui.h outputsettingspopup.h overwritepopup.h pane.h + penciltestpopup.h pltgizmopopup.h preferencespopup.h previewer.h previewfxmanager.h projectpopup.h psdsettingspopup.h + reframepopup.h renumberpopup.h reslist.h ruler.h - ../include/saveloadqsettings.h savepresetpopup.h - scanlist.h scanpopup.h scenesettingspopup.h sceneviewer.h sceneviewercontextmenu.h - sceneviewerevents.h scriptconsolepanel.h - selectionutils.h + separatecolorspopup.h + separatecolorsswatch.h shortcutpopup.h soundtrackexport.h startuppopup.h - subcameramanager.h - subscenecommand.h + styleshortcutswitchablepanel.h svncleanupdialog.h svncommitdialog.h svndeletedialog.h svnlockdialog.h svnlockframerangedialog.h + svnpurgedialog.h svnrevertdialog.h svnupdateandlockdialog.h svnupdatedialog.h - svnpurgedialog.h tapp.h - kis_tablet_support_win8.h tasksviewer.h testpanel.h - tfarmstuff.h timestretchpopup.h toolbar.h tpanels.h @@ -133,44 +111,68 @@ set(MOC_HEADERS vectorizerpopup.h vectorizerswatch.h versioncontrol.h - versioncontrolgui.h versioncontroltimeline.h - versioncontrolxmlreader.h versioncontrolwidget.h - viewerdraw.h viewerpane.h - viewerpopup.h - xshcellmover.h xshcellviewer.h xshcolumnviewer.h - xsheetdragtool.h xsheetviewer.h xshnoteviewer.h xshrowviewer.h xshtoolbar.h - comboviewerpane.h - historypane.h - cleanupsettingspane.h - penciltestpopup.h - locatorpopup.h - styleshortcutswitchablepanel.h - cameracapturelevelcontrol.h - reframepopup.h - autoinputcellnumberpopup.h - colormodelbehaviorpopup.h - boardsettingspopup.h - separatecolorsswatch.h - separatecolorspopup.h +) + +set(HEADERS + ${MOC_HEADERS} + celldata.h + cellkeyframedata.h + cellkeyframeselection.h + cellselection.h + columncommand.h + columnselection.h + curveio.h + drawingdata.h + exportlevelcommand.h + filedata.h + fileselection.h + filmstripcommand.h + filmstripselection.h + floatingpanelcommand.h + history.h + iocommand.h + keyframedata.h + keyframemover.h + keyframeselection.h + kis_tablet_support_win8.h + linetestcapturepane.h + linetestpane.h + linetestviewer.h + menubarcommandids.h + moviegenerator.h + scanlist.h + sceneviewerevents.h + selectionutils.h + subcameramanager.h + subscenecommand.h + tfarmstuff.h + versioncontrolgui.h + versioncontrolxmlreader.h + viewerdraw.h + viewerpopup.h + xshcellmover.h + xsheetdragtool.h + castselection.h + ../include/cellposition.h + ../include/orientation.h + ../include/saveloadqsettings.h # Tracker file + ObjectTracker.h dummyprocessor.h metnum.h - ObjectTracker.h - predict3d.h processor.h + predict3d.h ) -set(HEADERS ${MOC_HEADERS}) - set(SOURCES floatingpanelcommand.cpp canvassizepopup.cpp diff --git a/toonz/sources/toonz/adjustthicknesspopup.cpp b/toonz/sources/toonz/adjustthicknesspopup.cpp index 46e5554..75af9cb 100644 --- a/toonz/sources/toonz/adjustthicknesspopup.cpp +++ b/toonz/sources/toonz/adjustthicknesspopup.cpp @@ -48,7 +48,6 @@ // tcg includes #include "tcg/tcg_numeric_ops.h" #include "tcg/tcg_function_types.h" -#include "tcg/tcg_iterator_ops.h" // boost includes #include @@ -298,10 +297,6 @@ AdjustThicknessPopup::SelectionData::SelectionData(const TSelection *sel) struct Locals { SelectionData *m_this; - typedef tcg::function - Fid2Index; - void resetIfInvalid() // Resets to empty if thickness adjustment is { // not applicable: if (!m_this->m_sl) // 1. The level is not a VECTOR level @@ -349,11 +344,11 @@ AdjustThicknessPopup::SelectionData::SelectionData(const TSelection *sel) const std::set &fids = selection.getSelectedFids(); - m_this->m_frameIdxs = std::set( - tcg::make_cast_it(fids.begin(), - tcg::bind1st(Fid2Index(), *m_this->m_sl)), - tcg::make_cast_it(fids.end(), - tcg::bind1st(Fid2Index(), *m_this->m_sl))); + std::set s; + for (auto const &e : fids) { + s.insert(m_this->m_sl->fid2index(e)); + } + m_this->m_frameIdxs = std::move(s); resetIfInvalid(); } @@ -484,11 +479,11 @@ AdjustThicknessPopup::SelectionData::SelectionData(const TSelection *sel) const std::set &fids = TTool::getSelectedFrames(); - m_this->m_frameIdxs = std::set( - tcg::make_cast_it(fids.begin(), - tcg::bind1st(Fid2Index(), *m_this->m_sl)), - tcg::make_cast_it(fids.end(), - tcg::bind1st(Fid2Index(), *m_this->m_sl))); + std::set s; + for (auto const &e : fids) { + s.insert(m_this->m_sl->fid2index(e)); + } + m_this->m_frameIdxs = std::move(s); break; } } diff --git a/toonz/sources/toonz/boardsettingspopup.h b/toonz/sources/toonz/boardsettingspopup.h index fb86d46..583466e 100644 --- a/toonz/sources/toonz/boardsettingspopup.h +++ b/toonz/sources/toonz/boardsettingspopup.h @@ -21,7 +21,7 @@ namespace DVGui { class FileField; class ColorField; class IntLineEdit; -} +} // namespace DVGui //============================================================================= @@ -155,6 +155,7 @@ protected slots: //============================================================================= class SaveBoardPresetFilePopup final : public GenericSaveFilePopup { + Q_OBJECT public: SaveBoardPresetFilePopup(); @@ -165,6 +166,7 @@ protected: //============================================================================= class LoadBoardPresetFilePopup final : public GenericLoadFilePopup { + Q_OBJECT public: LoadBoardPresetFilePopup(); diff --git a/toonz/sources/toonz/castviewer.cpp b/toonz/sources/toonz/castviewer.cpp index 14ba6d3..44ad81c 100644 --- a/toonz/sources/toonz/castviewer.cpp +++ b/toonz/sources/toonz/castviewer.cpp @@ -695,7 +695,7 @@ bool CastBrowser::drop(const QMimeData *data) { if (data->hasUrls()) { IoCmd::LoadResourceArguments args; - foreach (const QUrl &url, data->urls()) { + for (const QUrl &url : data->urls()) { TFilePath fp(url.toLocalFile().toStdWString()); args.resourceDatas.push_back(fp); } diff --git a/toonz/sources/toonz/cellselectioncommand.cpp b/toonz/sources/toonz/cellselectioncommand.cpp index cc78814..2c041e4 100644 --- a/toonz/sources/toonz/cellselectioncommand.cpp +++ b/toonz/sources/toonz/cellselectioncommand.cpp @@ -599,7 +599,7 @@ ReframeUndo::ReframeUndo(int r0, int r1, std::vector columnIndeces, assert(m_cells); int k = 0; for (int r = r0; r <= r1; r++) - for (int c = 0; c < (int)m_columnIndeces.size(); c++) + for (int c = 0; c < (int)m_columnIndeces.size(); c++) m_cells[k++] = TApp::instance()->getCurrentXsheet()->getXsheet()->getCell( r, m_columnIndeces[c]); @@ -719,7 +719,7 @@ void TCellSelection::reframeWithEmptyInbetweens() { // destruction of m_reframePopup will be done along with the main window if (!m_reframePopup) m_reframePopup = new ReframePopup(); - int ret = m_reframePopup->exec(); + int ret = m_reframePopup->exec(); if (ret == QDialog::Rejected) return; int step, blank; @@ -762,7 +762,7 @@ void TColumnSelection::reframeWithEmptyInbetweens() { colIndeces.push_back(*it); if (!m_reframePopup) m_reframePopup = new ReframePopup(); - int ret = m_reframePopup->exec(); + int ret = m_reframePopup->exec(); if (ret == QDialog::Rejected) return; int step, blank; @@ -1294,9 +1294,8 @@ public: void undo() const override; int getSize() const override { - return sizeof *this + - (sizeof(TXshLevelP) + sizeof(TXshSimpleLevel *)) * - m_insertedLevels.size(); + return sizeof *this + (sizeof(TXshLevelP) + sizeof(TXshSimpleLevel *)) * + m_insertedLevels.size(); } QString getHistoryString() override { @@ -1366,11 +1365,13 @@ public: LevelNamePopup(const std::wstring &defaultLevelName) : DVGui::Dialog(TApp::instance()->getMainWindow(), true, true, "Clone Level") { - setWindowTitle(tr("Clone Level")); + setWindowTitle( + QObject::tr("Clone Level", "CloneLevelUndo::LevelNamePopup")); beginHLayout(); - QLabel *label = new QLabel(tr("Level Name:")); + QLabel *label = new QLabel( + QObject::tr("Level Name:", "CloneLevelUndo::LevelNamePopup")); addWidget(label); m_name = new DVGui::LineEdit; diff --git a/toonz/sources/toonz/cleanupsettingsmodel.cpp b/toonz/sources/toonz/cleanupsettingsmodel.cpp index 0d6faa1..2475210 100644 --- a/toonz/sources/toonz/cleanupsettingsmodel.cpp +++ b/toonz/sources/toonz/cleanupsettingsmodel.cpp @@ -77,12 +77,12 @@ public: class SaveSettingsPopup final : public IOSettingsPopup { public: - SaveSettingsPopup() : IOSettingsPopup(tr("Save Cleanup Settings")) { + SaveSettingsPopup() : IOSettingsPopup(QObject::tr("Save Cleanup Settings")) { // addFilterType("tif"); // addFilterType("tga"); // addFilterType("png"); - setOkText(tr("Save")); + setOkText(QObject::tr("Save")); } bool execute() override { @@ -113,8 +113,8 @@ public: class LoadSettingsPopup final : public IOSettingsPopup { public: - LoadSettingsPopup() : IOSettingsPopup(tr("Load Cleanup Settings")) { - setOkText(tr("Load")); + LoadSettingsPopup() : IOSettingsPopup(QObject::tr("Load Cleanup Settings")) { + setOkText(QObject::tr("Load")); } bool execute() override { @@ -124,7 +124,7 @@ public: if (loadPath.isEmpty()) return false; if (!TSystem::doesExistFileOrLevel(loadPath)) { - DVGui::error(tr("%1 does not exist.").arg(toQString(loadPath))); + DVGui::error(QObject::tr("%1 does not exist.").arg(toQString(loadPath))); return false; } @@ -361,7 +361,7 @@ void CleanupSettingsModel::commitChanges(int action) { // Perform actions int maxAction = std::max(action, m_action); // Add previuosly required actions - action = std::min(maxAction, + action = std::min(maxAction, m_allowedActions); // But only up to the allowed action m_action = (action == maxAction) ? NONE @@ -691,7 +691,7 @@ bool CleanupSettingsModel::loadSettings(const TFilePath &clnPath) { void CleanupSettingsModel::promptSave() { static SaveSettingsPopup *savePopup = 0; - if (!savePopup) savePopup = new SaveSettingsPopup; + if (!savePopup) savePopup = new SaveSettingsPopup; savePopup->setPath(getClnPath(m_sl)); savePopup->exec(); @@ -701,7 +701,7 @@ void CleanupSettingsModel::promptSave() { void CleanupSettingsModel::promptLoad() { static LoadSettingsPopup *loadPopup = 0; - if (!loadPopup) loadPopup = new LoadSettingsPopup; + if (!loadPopup) loadPopup = new LoadSettingsPopup; loadPopup->setPath(getClnPath(m_sl)); loadPopup->exec(); diff --git a/toonz/sources/toonz/colormodelviewer.cpp b/toonz/sources/toonz/colormodelviewer.cpp index dd6c463..39deb09 100644 --- a/toonz/sources/toonz/colormodelviewer.cpp +++ b/toonz/sources/toonz/colormodelviewer.cpp @@ -118,7 +118,7 @@ void ColorModelViewer::dragEnterEvent(QDragEnterEvent *event) { const QMimeData *mimeData = event->mimeData(); if (!acceptResourceDrop(mimeData->urls())) return; - foreach (QUrl url, mimeData->urls()) { + for (const QUrl &url : mimeData->urls()) { TFilePath fp(url.toLocalFile().toStdWString()); std::string type = fp.getType(); if (type == "scr" || type == "tpl") return; @@ -133,7 +133,7 @@ void ColorModelViewer::dragEnterEvent(QDragEnterEvent *event) { void ColorModelViewer::dropEvent(QDropEvent *event) { const QMimeData *mimeData = event->mimeData(); if (mimeData->hasUrls()) { - foreach (QUrl url, mimeData->urls()) { + for (const QUrl &url : mimeData->urls()) { TFilePath fp(url.toLocalFile().toStdWString()); loadImage(fp); setLevel(fp); @@ -198,7 +198,7 @@ void ColorModelViewer::loadImage(const TFilePath &fp) { //----------------------------------------------------------------------------- /*! Create and open the Right-click menu color model viewer. -*/ + */ void ColorModelViewer::contextMenuEvent(QContextMenuEvent *event) { /*-- Levelが取得できない場合はMenuを出さない --*/ TApp *app = TApp::instance(); @@ -244,7 +244,7 @@ void ColorModelViewer::contextMenuEvent(QContextMenuEvent *event) { menu.addSeparator(); QString shortcut = QString::fromStdString( - CommandManager::instance()->getShortcutFromId(V_ZoomReset)); + CommandManager::instance()->getShortcutFromId(V_ViewReset)); QAction *reset = menu.addAction(tr("Reset View") + "\t " + shortcut); connect(reset, SIGNAL(triggered()), m_imageViewer, SLOT(resetView())); @@ -258,21 +258,21 @@ void ColorModelViewer::contextMenuEvent(QContextMenuEvent *event) { //----------------------------------------------------------------------------- /*! If left button is pressed recall \b pick() in event pos. -*/ + */ void ColorModelViewer::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) pick(event->pos() * getDevPixRatio()); } //----------------------------------------------------------------------------- /*! If left button is moved recall \b pick() in event pos. -*/ + */ void ColorModelViewer::mouseMoveEvent(QMouseEvent *event) { if (event->buttons() & Qt::LeftButton) pick(event->pos() * getDevPixRatio()); } //----------------------------------------------------------------------------- /*! Pick color from image and set it as current style. -*/ + */ void ColorModelViewer::pick(const QPoint &p) { TImageP img = m_imageViewer->getImage(); if (!img) return; @@ -296,7 +296,7 @@ void ColorModelViewer::pick(const QPoint &p) { カレントToolに合わせてPickモードを変更 0=Area, 1=Line, 2=Line&Areas(default) ---*/ - int styleIndex = picker.pickStyleId(pos, 1, m_mode); + int styleIndex = picker.pickStyleId(pos + TPointD(-0.5, -0.5), 1, m_mode); if (styleIndex < 0) return; @@ -366,7 +366,7 @@ void ColorModelViewer::showEvent(QShowEvent *e) { ToolHandle *toolHandle = TApp::instance()->getCurrentTool(); bool ret = connect(paletteHandle, SIGNAL(paletteSwitched()), this, SLOT(showCurrentImage())); - ret = ret && connect(paletteHandle, SIGNAL(paletteChanged()), this, + ret = ret && connect(paletteHandle, SIGNAL(paletteChanged()), this, SLOT(showCurrentImage())); ret = ret && connect(paletteHandle, SIGNAL(colorStyleChanged(bool)), this, SLOT(showCurrentImage())); @@ -487,7 +487,7 @@ void ColorModelViewer::showCurrentImage() { //----------------------------------------------------------------------------- /*! Clone current image and set it in viewer. -*/ + */ void ColorModelViewer::loadCurrentFrame() { TApp *app = TApp::instance(); TXshLevel *xl = app->getCurrentLevel()->getLevel(); @@ -535,8 +535,8 @@ void ColorModelViewer::loadCurrentFrame() { m_flipConsole->enableProgressBar(false); m_flipConsole->setProgressBarStatus(0); m_flipConsole->setFrameRange(1, 1, 1); - m_title1 = m_viewerTitle + " :: " + - m_currentRefImgPath.withoutParentDir().withFrame(fid); + m_title1 = m_viewerTitle + + " :: " + m_currentRefImgPath.withoutParentDir().withFrame(fid); m_title = " :: "; m_imageViewer->setImage(refImg); @@ -585,8 +585,8 @@ void ColorModelViewer::reloadCurrentFrame() { m_flipConsole->enableProgressBar(false); m_flipConsole->setProgressBarStatus(0); m_flipConsole->setFrameRange(1, 1, 1); - m_title1 = m_viewerTitle + " :: " + - m_currentRefImgPath.withoutParentDir().withFrame(fids[0]); + m_title1 = m_viewerTitle + + " :: " + m_currentRefImgPath.withoutParentDir().withFrame(fids[0]); m_title = " :: "; m_imageViewer->setImage(refImg); diff --git a/toonz/sources/toonz/columnselection.cpp b/toonz/sources/toonz/columnselection.cpp index 4bd705e..78b90ca 100644 --- a/toonz/sources/toonz/columnselection.cpp +++ b/toonz/sources/toonz/columnselection.cpp @@ -130,7 +130,8 @@ void TColumnSelection::explodeChild() { static bool canMergeColumns(int column, int mColumn, bool forMatchlines) { TXsheet *xsh = TApp::instance()->getCurrentXsheet()->getXsheet(); - if (xsh->getColumn(column)->isLocked()) return false; + if (!xsh || !xsh->getColumn(column) || xsh->getColumn(column)->isLocked()) + return false; int start, end; xsh->getCellRange(column, start, end); diff --git a/toonz/sources/toonz/comboviewerpane.cpp b/toonz/sources/toonz/comboviewerpane.cpp index f0c4a5d..1c6a1ef 100644 --- a/toonz/sources/toonz/comboviewerpane.cpp +++ b/toonz/sources/toonz/comboviewerpane.cpp @@ -29,6 +29,7 @@ #include "toonz/palettecontroller.h" #include "toonz/toonzfolders.h" #include "toonz/preferences.h" +#include "toonz/tproject.h" // TnzQt includes #include "toonzqt/menubarcommand.h" @@ -616,11 +617,13 @@ void ComboViewerPanel::changeWindowTitle() { // if the frame type is "scene editing" if (app->getCurrentFrame()->isEditingScene()) { - QString sceneName = QString::fromStdWString(scene->getSceneName()); + TProject *project = scene->getProject(); + QString projectName = QString::fromStdString(project->getName().getName()); + QString sceneName = QString::fromStdWString(scene->getSceneName()); if (sceneName.isEmpty()) sceneName = tr("Untitled"); - if (app->getCurrentScene()->getDirtyFlag()) sceneName += QString(" *"); - name = tr("Scene: ") + sceneName; + if (app->getCurrentScene()->getDirtyFlag()) sceneName += QString("*"); + name = tr("Scene: ") + sceneName + tr(" :: Project: ") + projectName; if (frame >= 0) name = name + tr(" :: Frame: ") + tr(std::to_string(frame + 1).c_str()); diff --git a/toonz/sources/toonz/commandbarpopup.cpp b/toonz/sources/toonz/commandbarpopup.cpp index 8d0a903..1197c77 100644 --- a/toonz/sources/toonz/commandbarpopup.cpp +++ b/toonz/sources/toonz/commandbarpopup.cpp @@ -316,7 +316,7 @@ CommandBarListTree::CommandBarListTree(QWidget* parent) : QTreeWidget(parent) { addFolder(ShortcutTree::tr("Right-click Menu Commands"), RightClickMenuCommandType); addFolder(ShortcutTree::tr("Tool Modifiers"), ToolModifierCommandType); - addFolder(ShortcutTree::tr("Visualization"), ZoomCommandType); + addFolder(ShortcutTree::tr("Visualization"), VisualizationButtonCommandType); addFolder(ShortcutTree::tr("Misc"), MiscCommandType); addFolder(ShortcutTree::tr("RGBA Channels"), RGBACommandType); diff --git a/toonz/sources/toonz/curveio.cpp b/toonz/sources/toonz/curveio.cpp index 451c5e1..3db5cbf 100644 --- a/toonz/sources/toonz/curveio.cpp +++ b/toonz/sources/toonz/curveio.cpp @@ -75,8 +75,8 @@ public: class SaveCurvePopup final : public CurvePopup { public: SaveCurvePopup(const TFilePath folderPath, TDoubleParam *curve) - : CurvePopup(tr("Save Curve"), folderPath, curve) { - setOkText(tr("Save")); + : CurvePopup(QObject::tr("Save Curve"), folderPath, curve) { + setOkText(QObject::tr("Save")); setFilterType("curve"); } @@ -110,8 +110,8 @@ bool SaveCurvePopup::execute() { class LoadCurvePopup final : public CurvePopup { public: LoadCurvePopup(const TFilePath folderPath, TDoubleParam *curve) - : CurvePopup(tr("Load Curve"), folderPath, curve) { - setOkText(tr("Load")); + : CurvePopup(QObject::tr("Load Curve"), folderPath, curve) { + setOkText(QObject::tr("Load")); setFilterType("curve"); } @@ -154,8 +154,9 @@ class ExportCurvePopup final : public CurvePopup { public: ExportCurvePopup(const TFilePath folderPath, TDoubleParam *curve, const std::string &name) - : CurvePopup(tr("Export Curve"), folderPath, curve), m_name(name) { - setOkText(tr("Export")); + : CurvePopup(QObject::tr("Export Curve"), folderPath, curve) + , m_name(name) { + setOkText(QObject::tr("Export")); setFilterType("dat"); } diff --git a/toonz/sources/toonz/dvdirtreeview.cpp b/toonz/sources/toonz/dvdirtreeview.cpp index 6e38772..8a002f5 100644 --- a/toonz/sources/toonz/dvdirtreeview.cpp +++ b/toonz/sources/toonz/dvdirtreeview.cpp @@ -367,6 +367,9 @@ DvDirTreeView::DvDirTreeView(QWidget *parent) assert(ret); setAcceptDrops(true); + + if (Preferences::instance()->isAutomaticSVNFolderRefreshEnabled()) + setRefreshVersionControlEnabled(true); } //----------------------------------------------------------------------------- @@ -424,7 +427,7 @@ void DvDirTreeView::dropEvent(QDropEvent *e) { if (!folderNode || !folderNode->isFolder()) return; if (!mimeData->hasUrls()) return; int count = 0; - foreach (QUrl url, mimeData->urls()) { + for (const QUrl &url : mimeData->urls()) { TFilePath srcFp(url.toLocalFile().toStdWString()); TFilePath dstFp = folderNode->getPath(); @@ -1373,11 +1376,11 @@ void DvDirTreeView::onRefreshStatusError(const QString &text) { void DvDirTreeView::checkPartialLock(const QString &workingDir, const QStringList &files) { QStringList args; - args << "propget"; - args << "partial-lock"; + args << "proplist"; int filesCount = files.count(); for (int i = 0; i < filesCount; i++) args << files.at(i); args << "--xml"; + args << "-v"; m_thread.disconnect(SIGNAL(done(const QString &))); m_thread.disconnect(SIGNAL(error(const QString &))); @@ -1470,18 +1473,11 @@ DvItemListModel::Status DvDirTreeView::getItemVersionControlStatus( if (s.m_item == "missing" || s.m_item == "none" && s.m_repoStatus == "added") return DvItemListModel::VC_Missing; - if (s.m_isLocked) { - DvDirVersionControlRootNode *rootNode = node->getVersionControlRootNode(); - if (rootNode) { - if (QString::fromStdWString(rootNode->getUserName()) != s.m_lockOwner || - TSystem::getHostName() != s.m_lockHostName) - return DvItemListModel::VC_Locked; - else if (s.m_item == "normal" && s.m_repoStatus == "none") - return DvItemListModel::VC_Edited; - } - } - if (s.m_item == "unversioned") return DvItemListModel::VC_Unversioned; + // If, for some errors, there is some item added locally but not committed + // yet, use the modified status + if (s.m_item == "modified" || s.m_item == "added") + return DvItemListModel::VC_Modified; if (s.m_isPartialEdited) { QString from = QString::number(s.m_editFrom); QString to = QString::number(s.m_editTo); @@ -1500,15 +1496,21 @@ DvItemListModel::Status DvDirTreeView::getItemVersionControlStatus( return DvItemListModel::VC_PartialEdited; } if (s.m_isPartialLocked) return DvItemListModel::VC_PartialLocked; + if (s.m_isLocked) { + DvDirVersionControlRootNode *rootNode = node->getVersionControlRootNode(); + if (rootNode) { + if (QString::fromStdWString(rootNode->getUserName()) != s.m_lockOwner || + TSystem::getHostName() != s.m_lockHostName) + return DvItemListModel::VC_Locked; + else if (s.m_item == "normal" && s.m_repoStatus == "none") + return DvItemListModel::VC_Edited; + } + } // Pay attention: "ToUpdate" is more important than "ReadOnly" if (s.m_item == "normal" && s.m_repoStatus == "modified") return DvItemListModel::VC_ToUpdate; if (!fs.isWritable() || s.m_item == "normal") return DvItemListModel::VC_ReadOnly; - // If, for some errors, there is some item added locally but not committed - // yet, use the modified status - if (s.m_item == "modified" || s.m_item == "added") - return DvItemListModel::VC_Modified; } else if (fp.getDots() == "..") { // Get the files list to control its status... QStringList levelNames = getLevelFileNames(fp); diff --git a/toonz/sources/toonz/dvitemview.cpp b/toonz/sources/toonz/dvitemview.cpp index ddbbbc4..debe1d7 100644 --- a/toonz/sources/toonz/dvitemview.cpp +++ b/toonz/sources/toonz/dvitemview.cpp @@ -1149,6 +1149,9 @@ void DvItemViewerPanel::paintTableItem(QPainter &p, int index) { Qt::AlignLeft | Qt::AlignVCenter, elideText(value, p.font(), lx)); x += lx; + // If status icon is show, shift the next column left by the width of the + // icon + if (i == 0 && !statusPixmap.isNull()) x -= 15; } if (n > 1) { p.setPen(QColor(0, 0, 0, 100)); // column line @@ -1730,15 +1733,15 @@ void DvItemViewerTitleBar::paintEvent(QPaintEvent *) { m_itemViewer->getPanel()->getColumns(columns); QRect rect(0, 0, width(), height()); - QBrush nb = QBrush(Qt::NoBrush); - QPalette pal = - QPalette(nb, nb, QBrush(QColor(255, 255, 255, 30)), QBrush(QColor(0, 0, 0, 110)), - QBrush(QColor(Qt::gray)), nb, nb, nb, nb); + QBrush nb = QBrush(Qt::NoBrush); + QPalette pal = QPalette(nb, nb, QBrush(QColor(255, 255, 255, 30)), + QBrush(QColor(0, 0, 0, 110)), + QBrush(QColor(Qt::gray)), nb, nb, nb, nb); p.fillRect(rect, QColor(0, 0, 0, 90)); // bg color p.setPen(QColor(200, 200, 200, 255)); // text color - int h = 0; // fontMetrics().descent(); + int h = 0; // fontMetrics().descent(); int y = rect.top(); int ly = rect.height(); int lx = rect.width(); diff --git a/toonz/sources/toonz/exportpanel.cpp b/toonz/sources/toonz/exportpanel.cpp index 36a631a..b2872e4 100644 --- a/toonz/sources/toonz/exportpanel.cpp +++ b/toonz/sources/toonz/exportpanel.cpp @@ -581,7 +581,7 @@ void ClipListViewer::setDropInsertionPoint(const QPoint &pos) { void ClipListViewer::dragEnterEvent(QDragEnterEvent *event) { if (event->mimeData()->hasUrls()) { - foreach (QUrl url, event->mimeData()->urls()) { + for (const QUrl &url : event->mimeData()->urls()) { TFilePath fp(url.toLocalFile().toStdString()); if (fp.getType() != "tnz") return; } @@ -611,7 +611,7 @@ void ClipListViewer::dropEvent(QDropEvent *event) { if (event->mimeData()->hasUrls()) { int j = m_dropInsertionPoint; if (j < 0) j = getItemCount(); - foreach (QUrl url, event->mimeData()->urls()) { + for (const QUrl &url : event->mimeData()->urls()) { TFilePath fp(url.toLocalFile().toStdString()); if (fp.getType() == "tnz") getController()->insertClipPath((j++), fp); } diff --git a/toonz/sources/toonz/filebrowser.cpp b/toonz/sources/toonz/filebrowser.cpp index a9ca57c..c5c2bc2 100644 --- a/toonz/sources/toonz/filebrowser.cpp +++ b/toonz/sources/toonz/filebrowser.cpp @@ -579,6 +579,17 @@ void FileBrowser::refreshCurrentFolderItems() { } TFilePathSet::iterator it; for (it = files.begin(); it != files.end(); ++it) { +#ifdef _WIN32 + // include folder shortcut items + if (it->getType() == "lnk") { + TFileStatus info(*it); + if (info.isLink() && info.isDirectory()) { + m_items.push_back( + Item(*it, true, true, QString::fromStdString((*it).getName()))); + } + continue; + } +#endif // skip the plt file (Palette file for TOONZ 4.6 and earlier) if (it->getType() == "plt") continue; @@ -733,6 +744,17 @@ void FileBrowser::setUnregisteredFolder(const TFilePath &fp) { } for (it = files.begin(); it != files.end(); ++it) { +#ifdef _WIN32 + // include folder shortcut items + if (it->getType() == "lnk") { + TFileStatus info(*it); + if (info.isLink() && info.isDirectory()) { + m_items.push_back( + Item(*it, true, true, QString::fromStdString((*it).getName()))); + } + continue; + } +#endif // skip the plt file (Palette file for TOONZ 4.6 and earlier) if (it->getType() == "plt") continue; @@ -1328,6 +1350,10 @@ QMenu *FileBrowser::getContextMenu(QWidget *parent, int index) { } if (status == DvItemListModel::VC_Locked && files.size() == 1) { + action = vcMenu->addAction(tr("Unlock")); + ret = ret && connect(action, SIGNAL(triggered()), this, + SLOT(unlockVersionControl())); + action = vcMenu->addAction(tr("Edit Info")); ret = ret && connect(action, SIGNAL(triggered()), this, SLOT(showLockInformation())); @@ -1577,7 +1603,7 @@ bool FileBrowser::drop(const QMimeData *mimeData) { return true; } else if (mimeData->hasUrls()) { int count = 0; - foreach (QUrl url, mimeData->urls()) { + for (const QUrl &url : mimeData->urls()) { TFilePath srcFp(url.toLocalFile().toStdWString()); TFilePath dstFp = srcFp.withParentDir(folderPath); if (dstFp != srcFp) { @@ -2088,6 +2114,16 @@ void FileBrowser::refreshFolder(const TFilePath &folderPath) { //----------------------------------------------------------------------------- +void FileBrowser::updateItemViewerPanel() { + std::set::iterator it; + for (it = activeBrowsers.begin(); it != activeBrowsers.end(); ++it) { + FileBrowser *browser = *it; + browser->m_itemViewer->getPanel()->update(); + } +} + +//----------------------------------------------------------------------------- + void FileBrowser::getExpandedFolders(DvDirModelNode *node, QList &expandedNodes) { if (!node) return; diff --git a/toonz/sources/toonz/filebrowser.h b/toonz/sources/toonz/filebrowser.h index 82ab3bd..1ff501b 100644 --- a/toonz/sources/toonz/filebrowser.h +++ b/toonz/sources/toonz/filebrowser.h @@ -111,6 +111,8 @@ types to be displayed in the file browser. static void refreshFolder(const TFilePath &folder); + static void updateItemViewerPanel(); + // ritorna true se il file e' stato rinominato. dopo la chiamata fp contiene // il nuovo path static bool renameFile(TFilePath &fp, QString newName); diff --git a/toonz/sources/toonz/filebrowsermodel.cpp b/toonz/sources/toonz/filebrowsermodel.cpp index 65012de..7b6bd1f 100644 --- a/toonz/sources/toonz/filebrowsermodel.cpp +++ b/toonz/sources/toonz/filebrowsermodel.cpp @@ -18,10 +18,12 @@ #include #include +#include #ifdef _WIN32 #include #include +#include #endif #ifdef MACOSX #include @@ -49,7 +51,9 @@ TFilePath getMyDocumentsPath() { return TFilePath((const char *)[documentsDirectory cStringUsingEncoding:NSASCIIStringEncoding]); #else - return TFilePath(); + QDir dir = QDir::home(); + if (!dir.cd("Documents")) return TFilePath(); + return TFilePath(dir.absolutePath().toStdString()); #endif } @@ -71,7 +75,9 @@ TFilePath getDesktopPath() { return TFilePath((const char *)[desktopDirectory cStringUsingEncoding:NSASCIIStringEncoding]); #else - return TFilePath(); + QDir dir = QDir::home(); + if (!dir.cd("Desktop")) return TFilePath(); + return TFilePath(dir.absolutePath().toStdString()); #endif } } @@ -250,13 +256,11 @@ bool DvDirModelFileFolderNode::hasChildren() { if (m_childrenValid) return m_hasChildren; if (m_peeks) { - // Using QDir directly rather than - // DvDirModelFileFolderNode::refreshChildren() due to - // performance issues - QDir dir(QString::fromStdWString(m_path.getWideString())); + // Using QDirIterator and only checking existence of the first item + QDir dir(m_path.getQString()); dir.setFilter(QDir::AllDirs | QDir::NoDotAndDotDot); - - return (dir.count() > 0); + QDirIterator it(dir); + return (it.hasNext()); } else return true; // Not peeking nodes allow users to actively scan for // sub-folders @@ -314,16 +318,13 @@ void DvDirModelFileFolderNode::getChildrenNames( TFileStatus folderPathStatus(m_path); if (folderPathStatus.isLink()) return; - QStringList entries; - if (folderPathStatus.isDirectory()) { - QDir dir(toQString(m_path)); + if (!folderPathStatus.isDirectory()) return; - entries = dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot, - QDir::Name | QDir::LocaleAware); - } + QStringList dirItems; + TSystem::readDirectory_DirItems(dirItems, m_path); + for (const QString &name : dirItems) names.push_back(name.toStdWString()); - int e, eCount = entries.size(); - for (e = 0; e != eCount; ++e) names.push_back(entries[e].toStdWString()); + QDir dir(toQString(m_path)); } //----------------------------------------------------------------------------- @@ -1494,4 +1495,4 @@ void DvDirModel::onPreferenceChanged(const QString &prefName) { if (rootNode) rootNode->updateSceneFolderNodeVisibility(priority == Preferences::ProjectFolderOnly); -} \ No newline at end of file +} diff --git a/toonz/sources/toonz/filebrowserpopup.cpp b/toonz/sources/toonz/filebrowserpopup.cpp index 35c6f11..6fa3e9e 100644 --- a/toonz/sources/toonz/filebrowserpopup.cpp +++ b/toonz/sources/toonz/filebrowserpopup.cpp @@ -391,8 +391,7 @@ void FileBrowserPopup::showEvent(QShowEvent *) { void FileBrowserPopup::setModalBrowserToParent(QWidget *widget) { if (!widget) return; - QWidget *pwidget = NULL; - foreach (pwidget, QApplication::topLevelWidgets()) { + for (QWidget *pwidget : QApplication::topLevelWidgets()) { if ((pwidget->isWindow()) && (pwidget->isModal()) && (pwidget->isVisible())) { FileBrowserPopup *popup = qobject_cast(pwidget); @@ -2122,8 +2121,7 @@ void BrowserPopupController::openPopup(QStringList filters, m_browserPopup->setFileMode(isDirectoryOnly); if (parentWidget) { - QWidget *pwidget = NULL; - foreach (pwidget, QApplication::topLevelWidgets()) { + for (QWidget *pwidget : QApplication::topLevelWidgets()) { if (pwidget->isWindow() && pwidget->isVisible() && pwidget->isAncestorOf(parentWidget)) { Qt::WindowFlags flags = m_browserPopup->windowFlags(); diff --git a/toonz/sources/toonz/filedata.cpp b/toonz/sources/toonz/filedata.cpp index bd873d5..86d362b 100644 --- a/toonz/sources/toonz/filedata.cpp +++ b/toonz/sources/toonz/filedata.cpp @@ -41,7 +41,7 @@ void FileData::getFiles(TFilePath folder, if (!TSystem::doesExistFileOrLevel(oldPath)) { DVGui::warning( - tr("It is not possible to find the %1 level.") + QObject::tr("It is not possible to find the %1 level.", "FileData") .arg(QString::fromStdWString(oldPath.getWideString()))); return; } @@ -58,7 +58,8 @@ void FileData::getFiles(TFilePath folder, if (TSystem::copyFileOrLevel(levelPathOut, oldPath)) newFiles.push_back(levelPathOut); else { - QString msg = tr("There was an error copying %1").arg(toQString(oldPath)); + QString msg = QObject::tr("There was an error copying %1", "FileData") + .arg(toQString(oldPath)); DVGui::error(msg); return; } diff --git a/toonz/sources/toonz/fileselection.cpp b/toonz/sources/toonz/fileselection.cpp index e6a0563..81fc2f0 100644 --- a/toonz/sources/toonz/fileselection.cpp +++ b/toonz/sources/toonz/fileselection.cpp @@ -185,7 +185,7 @@ public: } }; //----------------------------------------------------------------------------- -} +} // namespace //------------------------------------------------------------------------ @@ -463,8 +463,8 @@ void FileSelection::collectAssets() { if (count > 1) { QMainWindow *mw = TApp::instance()->getMainWindow(); - ProgressDialog progress(tr("Collecting assets..."), tr("Abort"), 0, count, - mw); + ProgressDialog progress(QObject::tr("Collecting assets..."), + QObject::tr("Abort"), 0, count, mw); progress.setWindowModality(Qt::WindowModal); int i; @@ -552,8 +552,8 @@ void FileSelection::importScenes() { if (count > 1) { QMainWindow *mw = TApp::instance()->getMainWindow(); - ProgressDialog progress(tr("Importing scenes..."), tr("Abort"), 0, count, - mw); + ProgressDialog progress(QObject::tr("Importing scenes..."), + QObject::tr("Abort"), 0, count, mw); progress.setWindowModality(Qt::WindowModal); int i; @@ -599,6 +599,6 @@ void FileSelection::selectAll() { QString name = getModel()->getItemData(*it, DvItemListModel::FullPath).toString(); TFilePath fp(name.toStdWString()); - FileBrowser::refreshFolder(fp.getParentDir()); + FileBrowser::updateItemViewerPanel(); } } diff --git a/toonz/sources/toonz/filmstrip.cpp b/toonz/sources/toonz/filmstrip.cpp index 301b8c5..69a9554 100644 --- a/toonz/sources/toonz/filmstrip.cpp +++ b/toonz/sources/toonz/filmstrip.cpp @@ -539,10 +539,6 @@ void FilmstripFrames::paintEvent(QPaintEvent *evt) { int frameCount = (int)fids.size(); - std::set editableFrameRange; - - if (sl) editableFrameRange = sl->getEditableRange(); - bool isReadOnly = false; if (sl) isReadOnly = sl->isReadOnly(); @@ -619,9 +615,7 @@ void FilmstripFrames::paintEvent(QPaintEvent *evt) { // Read-only frames (lock) if (0 <= i && i < frameCount) { - if ((editableFrameRange.empty() && isReadOnly) || - (isReadOnly && (!editableFrameRange.empty() && - editableFrameRange.count(fids[i]) == 0))) { + if (sl->isFrameReadOnly(fids[i])) { static QPixmap lockPixmap(":Resources/forbidden.png"); p.drawPixmap(tmp_frameRect.bottomLeft() + QPoint(3, -13), lockPixmap); } diff --git a/toonz/sources/toonz/filmstripcommand.cpp b/toonz/sources/toonz/filmstripcommand.cpp index 1dfc524..da4bc84 100644 --- a/toonz/sources/toonz/filmstripcommand.cpp +++ b/toonz/sources/toonz/filmstripcommand.cpp @@ -70,9 +70,8 @@ void doUpdateXSheet(TXshSimpleLevel *sl, std::vector oldFids, cells[i].m_level->getType() == CHILD_XSHLEVEL) { TXshChildLevel *level = cells[i].m_level->getChildLevel(); // make sure we haven't already checked the level - if (level && - std::find(childLevels.begin(), childLevels.end(), level) == - childLevels.end()) { + if (level && std::find(childLevels.begin(), childLevels.end(), + level) == childLevels.end()) { childLevels.push_back(level); TXsheet *subXsh = level->getXsheet(); doUpdateXSheet(sl, oldFids, newFids, subXsh, childLevels); @@ -101,8 +100,8 @@ void doUpdateXSheet(TXshSimpleLevel *sl, std::vector oldFids, //----------------------------------------------------------------------------- -void updateXSheet(TXshSimpleLevel *sl, std::vector oldFids, - std::vector newFids) { +static void updateXSheet(TXshSimpleLevel *sl, std::vector oldFids, + std::vector newFids) { std::vector childLevels; TXsheet *xsh = TApp::instance()->getCurrentScene()->getScene()->getTopXsheet(); @@ -145,7 +144,7 @@ void makeSpaceForFids(TXshSimpleLevel *sl, if (Preferences::instance()->isSyncLevelRenumberWithXsheetEnabled()) updateXSheet(sl, oldFids, fids); sl->renumber(fids); - sl->setDirtyFlag(true); + sl->setDirtyFlag(true); } } @@ -250,10 +249,10 @@ bool pasteAreasWithoutUndo(const QMimeData *data, TXshSimpleLevel *sl, affine *= sc; int i; TRectD boxD; - if (rects.size() > 0) boxD = rects[0]; + if (rects.size() > 0) boxD = rects[0]; if (strokes.size() > 0) boxD = strokes[0].getBBox(); for (i = 0; i < rects.size(); i++) boxD += rects[i]; - for (i = 0; i < strokes.size(); i++) boxD += strokes[i].getBBox(); + for (i = 0; i < strokes.size(); i++) boxD += strokes[i].getBBox(); boxD = affine * boxD; TRect box = ToonzImageUtils::convertWorldToRaster(boxD, ti); TPoint pos = box.getP00(); @@ -309,10 +308,10 @@ bool pasteAreasWithoutUndo(const QMimeData *data, TXshSimpleLevel *sl, affine *= sc; int i; TRectD boxD; - if (rects.size() > 0) boxD = rects[0]; + if (rects.size() > 0) boxD = rects[0]; if (strokes.size() > 0) boxD = strokes[0].getBBox(); for (i = 0; i < rects.size(); i++) boxD += rects[i]; - for (i = 0; i < strokes.size(); i++) boxD += strokes[i].getBBox(); + for (i = 0; i < strokes.size(); i++) boxD += strokes[i].getBBox(); boxD = affine * boxD; TRect box = TRasterImageUtils::convertWorldToRaster(boxD, ri); TPoint pos = box.getP00(); @@ -604,13 +603,13 @@ public: int i; TRectD boxD; - if (rects.size() > 0) boxD = rects[0]; + if (rects.size() > 0) boxD = rects[0]; if (strokes.size() > 0) boxD = strokes[0].getBBox(); for (i = 0; i < rects.size(); i++) boxD += rects[i]; - for (i = 0; i < strokes.size(); i++) boxD += strokes[i].getBBox(); - boxD = affine * boxD; - TRect box = ToonzImageUtils::convertWorldToRaster(boxD, ti); - TPoint pos = box.getP00(); + for (i = 0; i < strokes.size(); i++) boxD += strokes[i].getBBox(); + boxD = affine * boxD; + TRect box = ToonzImageUtils::convertWorldToRaster(boxD, ti); + TPoint pos = box.getP00(); TRasterCM32P app = ras; TRop::over(ti->getRaster(), app, pos, affine); ToolUtils::updateSaveBox(m_level, *it); @@ -639,13 +638,13 @@ public: affine *= sc; int i; TRectD boxD; - if (rects.size() > 0) boxD = rects[0]; + if (rects.size() > 0) boxD = rects[0]; if (strokes.size() > 0) boxD = strokes[0].getBBox(); for (i = 0; i < rects.size(); i++) boxD += rects[i]; - for (i = 0; i < strokes.size(); i++) boxD += strokes[i].getBBox(); - boxD = affine * boxD; - TRect box = TRasterImageUtils::convertWorldToRaster(boxD, ri); - TPoint pos = box.getP00(); + for (i = 0; i < strokes.size(); i++) boxD += strokes[i].getBBox(); + boxD = affine * boxD; + TRect box = TRasterImageUtils::convertWorldToRaster(boxD, ri); + TPoint pos = box.getP00(); TRasterCM32P app = ras; if (app) TRop::over(ri->getRaster(), app, ri->getPalette(), pos, affine); @@ -985,7 +984,7 @@ public: updateXSheet(m_sl.getPointer(), newFrames, m_oldLevelFrameId); } m_sl->renumber(m_oldLevelFrameId); - m_sl->setDirtyFlag(true); + m_sl->setDirtyFlag(true); TApp::instance() ->getPaletteController() ->getCurrentLevelPalette() @@ -1309,8 +1308,8 @@ public: m_level->renumber(fids); TSelection *selection = TSelection::getCurrent(); if (selection) selection->selectNone(); - m_level->setDirtyFlag(true); - TApp::instance()->getCurrentLevel()->notifyLevelChange(); + m_level->setDirtyFlag(true); + TApp::instance()->getCurrentLevel()->notifyLevelChange(); } void undo() const override { std::vector fids; @@ -1725,7 +1724,7 @@ public: // TImageCache::instance()->add("UndoInsertEmptyFrames"+QString::number((UINT)this), // img); TImageCache::instance()->add( - "UndoInsertEmptyFrames" + QString::number((uintptr_t) this), img); + "UndoInsertEmptyFrames" + QString::number((uintptr_t)this), img); } } m_updateXSheet = @@ -1735,7 +1734,7 @@ public: ~UndoInsertEmptyFrames() { // TImageCache::instance()->remove("UndoInsertEmptyFrames"+QString::number((UINT)this)); TImageCache::instance()->remove("UndoInsertEmptyFrames" + - QString::number((uintptr_t) this)); + QString::number((uintptr_t)this)); } void undo() const override { @@ -1747,7 +1746,7 @@ public: updateXSheet(m_level.getPointer(), newFrames, m_oldFrames); } m_level->renumber(m_oldFrames); - m_level->setDirtyFlag(true); + m_level->setDirtyFlag(true); TApp::instance()->getCurrentLevel()->notifyLevelChange(); } @@ -1762,7 +1761,7 @@ public: // (TToonzImageP)TImageCache::instance()->get("UndoInsertEmptyFrames"+QString::number((UINT)this), // true); TToonzImageP image = (TToonzImageP)TImageCache::instance()->get( - "UndoInsertEmptyFrames" + QString::number((uintptr_t) this), true); + "UndoInsertEmptyFrames" + QString::number((uintptr_t)this), true); if (!image) return; for (it = m_frames.begin(); it != m_frames.end(); ++it) m_level->setFrame(*it, image); @@ -2039,7 +2038,7 @@ public: m_level->renumber(m_oldFrames); TSelection *selection = TSelection::getCurrent(); if (selection) selection->selectNone(); - m_level->setDirtyFlag(true); + m_level->setDirtyFlag(true); TApp::instance()->getCurrentLevel()->notifyLevelChange(); } void redo() const override { @@ -2205,7 +2204,7 @@ public: updateXSheet(m_level.getPointer(), newFrames, m_oldFrames); } m_level->renumber(m_oldFrames); - m_level->setDirtyFlag(true); + m_level->setDirtyFlag(true); TApp::instance()->getCurrentLevel()->notifyLevelChange(); } void redo() const override { diff --git a/toonz/sources/toonz/flipbook.cpp b/toonz/sources/toonz/flipbook.cpp index ad55025..4bc2e62 100644 --- a/toonz/sources/toonz/flipbook.cpp +++ b/toonz/sources/toonz/flipbook.cpp @@ -1765,7 +1765,7 @@ void FlipBook::dragEnterEvent(QDragEnterEvent *e) { !mimeData->hasFormat(CastItems::getMimeFormat())) return; - foreach (QUrl url, mimeData->urls()) { + for (const QUrl &url : mimeData->urls()) { TFilePath fp(url.toLocalFile().toStdWString()); std::string type = fp.getType(); if (type == "tzp" || type == "tzu" || type == "tnz" || type == "scr" || @@ -1792,7 +1792,7 @@ void FlipBook::dragEnterEvent(QDragEnterEvent *e) { void FlipBook::dropEvent(QDropEvent *e) { const QMimeData *mimeData = e->mimeData(); if (mimeData->hasUrls()) { - foreach (QUrl url, mimeData->urls()) { + for (const QUrl &url : mimeData->urls()) { TFilePath fp(url.toLocalFile().toStdWString()); if (TFileType::getInfo(fp) != TFileType::UNKNOW_FILE) setLevel(fp); e->acceptProposedAction(); diff --git a/toonz/sources/toonz/floatingpanelcommand.cpp b/toonz/sources/toonz/floatingpanelcommand.cpp index 2e25ca0..26e2f20 100644 --- a/toonz/sources/toonz/floatingpanelcommand.cpp +++ b/toonz/sources/toonz/floatingpanelcommand.cpp @@ -137,6 +137,7 @@ TPanel *OpenFloatingPanel::getOrOpenFloatingPanel( QString::fromStdString(panelType)); if (!panel) return 0; // it should never happen // panel->setWindowTitle(QObject::tr(m_title.toStdString().c_str())); + panel->restoreFloatingPanelState(); panel->setFloating(true); panel->show(); panel->raise(); diff --git a/toonz/sources/toonz/frameheadgadget.h b/toonz/sources/toonz/frameheadgadget.h index 19fd43e..9e4f8ae 100644 --- a/toonz/sources/toonz/frameheadgadget.h +++ b/toonz/sources/toonz/frameheadgadget.h @@ -70,6 +70,7 @@ public: }; class FilmstripFrameHeadGadget final : public FrameHeadGadget { + Q_OBJECT FilmstripFrames *m_filmstrip; int m_dy; int m_highlightedghostFrame; diff --git a/toonz/sources/toonz/fxparameditorpopup.cpp b/toonz/sources/toonz/fxparameditorpopup.cpp index ef0385e..0ff3a2b 100644 --- a/toonz/sources/toonz/fxparameditorpopup.cpp +++ b/toonz/sources/toonz/fxparameditorpopup.cpp @@ -59,6 +59,7 @@ FxParamEditorPopup::FxParamEditorPopup() } //============================================================================= - +/* OpenPopupCommandHandler openFxParamEditorPopup( MI_FxParamEditor); +*/ \ No newline at end of file diff --git a/toonz/sources/toonz/imageviewer.cpp b/toonz/sources/toonz/imageviewer.cpp index c0b2f35..4093022 100644 --- a/toonz/sources/toonz/imageviewer.cpp +++ b/toonz/sources/toonz/imageviewer.cpp @@ -39,6 +39,7 @@ #include #include #include +#include //=================================================================================== @@ -118,8 +119,8 @@ class FlipZoomer final : public ImageUtils::ShortcutZoomer { public: FlipZoomer(ImageViewer *parent) : ShortcutZoomer(parent) {} - bool zoom(bool zoomin, bool resetZoom) override { - static_cast(getWidget())->zoomQt(zoomin, resetZoom); + bool zoom(bool zoomin, bool resetView) override { + static_cast(getWidget())->zoomQt(zoomin, resetView); return true; } @@ -128,6 +129,11 @@ public: return true; } + bool resetZoom() override { + static_cast(getWidget())->resetZoom(); + return true; + } + bool toggleFullScreen(bool quit) override { if (ImageUtils::FullScreenWidget *fsWidget = dynamic_cast( @@ -218,7 +224,8 @@ ImageViewer::ImageViewer(QWidget *parent, FlipBook *flipbook, , m_isColorModel(false) , m_histogramPopup(0) , m_isRemakingPreviewFx(false) - , m_rectRGBPick(false) { + , m_rectRGBPick(false) + , m_firstImage(true) { m_visualSettings.m_sceneProperties = TApp::instance()->getCurrentScene()->getScene()->getProperties(); m_visualSettings.m_drawExternalBG = true; @@ -227,6 +234,11 @@ ImageViewer::ImageViewer(QWidget *parent, FlipBook *flipbook, setMouseTracking(true); + setAttribute(Qt::WA_AcceptTouchEvents); + grabGesture(Qt::SwipeGesture); + grabGesture(Qt::PanGesture); + grabGesture(Qt::PinchGesture); + if (m_isHistogramEnable) m_histogramPopup = new HistogramPopup(tr("Flipbook Histogram")); @@ -237,8 +249,6 @@ ImageViewer::ImageViewer(QWidget *parent, FlipBook *flipbook, //----------------------------------------------------------------------------- void ImageViewer::contextMenuEvent(QContextMenuEvent *event) { - if (!m_flipbook) return; - QAction *action; if (m_isColorModel) { @@ -248,56 +258,59 @@ void ImageViewer::contextMenuEvent(QContextMenuEvent *event) { QMenu *menu = new QMenu(this); - if (m_flipbook->getPreviewedFx()) { - if (!(windowState() & Qt::WindowFullScreen)) { - action = menu->addAction(tr("Clone Preview")); - action->setShortcut(QKeySequence( - CommandManager::instance()->getKeyFromId(MI_ClonePreview))); - connect(action, SIGNAL(triggered()), m_flipbook, SLOT(clonePreview())); - } + if (m_flipbook) { + if (m_flipbook->getPreviewedFx()) { + if (!(windowState() & Qt::WindowFullScreen)) { + action = menu->addAction(tr("Clone Preview")); + action->setShortcut(QKeySequence( + CommandManager::instance()->getKeyFromId(MI_ClonePreview))); + connect(action, SIGNAL(triggered()), m_flipbook, SLOT(clonePreview())); + } - if (m_flipbook->isFreezed()) { - action = menu->addAction(tr("Unfreeze Preview")); + if (m_flipbook->isFreezed()) { + action = menu->addAction(tr("Unfreeze Preview")); + action->setShortcut(QKeySequence( + CommandManager::instance()->getKeyFromId(MI_FreezePreview))); + connect(action, SIGNAL(triggered()), m_flipbook, + SLOT(unfreezePreview())); + } else { + action = menu->addAction(tr("Freeze Preview")); + action->setShortcut(QKeySequence( + CommandManager::instance()->getKeyFromId(MI_FreezePreview))); + connect(action, SIGNAL(triggered()), m_flipbook, SLOT(freezePreview())); + } + + action = menu->addAction(tr("Regenerate Preview")); action->setShortcut(QKeySequence( - CommandManager::instance()->getKeyFromId(MI_FreezePreview))); - connect(action, SIGNAL(triggered()), m_flipbook, SLOT(unfreezePreview())); - } else { - action = menu->addAction(tr("Freeze Preview")); + CommandManager::instance()->getKeyFromId(MI_RegeneratePreview))); + connect(action, SIGNAL(triggered()), m_flipbook, SLOT(regenerate())); + + action = menu->addAction(tr("Regenerate Frame Preview")); action->setShortcut(QKeySequence( - CommandManager::instance()->getKeyFromId(MI_FreezePreview))); - connect(action, SIGNAL(triggered()), m_flipbook, SLOT(freezePreview())); + CommandManager::instance()->getKeyFromId(MI_RegenerateFramePr))); + connect(action, SIGNAL(triggered()), m_flipbook, SLOT(regenerateFrame())); + + menu->addSeparator(); } - action = menu->addAction(tr("Regenerate Preview")); - action->setShortcut(QKeySequence( - CommandManager::instance()->getKeyFromId(MI_RegeneratePreview))); - connect(action, SIGNAL(triggered()), m_flipbook, SLOT(regenerate())); + action = menu->addAction(tr("Load / Append Images")); + connect(action, SIGNAL(triggered()), m_flipbook, SLOT(loadImages())); - action = menu->addAction(tr("Regenerate Frame Preview")); - action->setShortcut(QKeySequence( - CommandManager::instance()->getKeyFromId(MI_RegenerateFramePr))); - connect(action, SIGNAL(triggered()), m_flipbook, SLOT(regenerateFrame())); + // history of the loaded paths of flipbook + action = CommandManager::instance()->getAction(MI_LoadRecentImage); + menu->addAction(action); + action->setParent(m_flipbook); + if (m_flipbook->isSavable()) { + action = menu->addAction(tr("Save Images")); + connect(action, SIGNAL(triggered()), m_flipbook, SLOT(saveImages())); + } menu->addSeparator(); } - action = menu->addAction(tr("Load / Append Images")); - connect(action, SIGNAL(triggered()), m_flipbook, SLOT(loadImages())); - - // history of the loaded paths of flipbook - action = CommandManager::instance()->getAction(MI_LoadRecentImage); - menu->addAction(action); - action->setParent(m_flipbook); - - if (m_flipbook->isSavable()) { - action = menu->addAction(tr("Save Images")); - connect(action, SIGNAL(triggered()), m_flipbook, SLOT(saveImages())); - } - menu->addSeparator(); - QAction *reset = menu->addAction(tr("Reset View")); reset->setShortcut( - QKeySequence(CommandManager::instance()->getKeyFromId(V_ZoomReset))); + QKeySequence(CommandManager::instance()->getKeyFromId(V_ViewReset))); connect(reset, SIGNAL(triggered()), SLOT(resetView())); QAction *fit = menu->addAction(tr("Fit To Window")); @@ -305,42 +318,45 @@ void ImageViewer::contextMenuEvent(QContextMenuEvent *event) { QKeySequence(CommandManager::instance()->getKeyFromId(V_ZoomFit))); connect(fit, SIGNAL(triggered()), SLOT(fitView())); + if (m_flipbook) { #ifdef _WIN32 + if (ImageUtils::FullScreenWidget *fsWidget = + dynamic_cast(parentWidget())) { + bool isFullScreen = (fsWidget->windowState() & Qt::WindowFullScreen) != 0; - if (ImageUtils::FullScreenWidget *fsWidget = - dynamic_cast(parentWidget())) { - bool isFullScreen = (fsWidget->windowState() & Qt::WindowFullScreen) != 0; - - action = menu->addAction(isFullScreen ? tr("Exit Full Screen Mode") - : tr("Full Screen Mode")); + action = menu->addAction(isFullScreen ? tr("Exit Full Screen Mode") + : tr("Full Screen Mode")); - action->setShortcut(QKeySequence( - CommandManager::instance()->getKeyFromId(V_ShowHideFullScreen))); - connect(action, SIGNAL(triggered()), fsWidget, SLOT(toggleFullScreen())); - } + action->setShortcut(QKeySequence( + CommandManager::instance()->getKeyFromId(V_ShowHideFullScreen))); + connect(action, SIGNAL(triggered()), fsWidget, SLOT(toggleFullScreen())); + } #endif - bool addedSep = false; + bool addedSep = false; - if (m_isHistogramEnable && - visibleRegion().contains(event->pos() * getDevPixRatio())) { - menu->addSeparator(); - addedSep = true; - action = menu->addAction(tr("Show Histogram")); - connect(action, SIGNAL(triggered()), SLOT(showHistogram())); - } + if (m_isHistogramEnable && + visibleRegion().contains(event->pos() * getDevPixRatio())) { + menu->addSeparator(); + addedSep = true; + action = menu->addAction(tr("Show Histogram")); + connect(action, SIGNAL(triggered()), SLOT(showHistogram())); + } - if (m_visualSettings.m_doCompare) { - if (!addedSep) menu->addSeparator(); - action = menu->addAction(tr("Swap Compared Images")); - connect(action, SIGNAL(triggered()), SLOT(swapCompared())); + if (m_visualSettings.m_doCompare) { + if (!addedSep) menu->addSeparator(); + action = menu->addAction(tr("Swap Compared Images")); + connect(action, SIGNAL(triggered()), SLOT(swapCompared())); + } } menu->exec(event->globalPos()); - action = CommandManager::instance()->getAction(MI_LoadRecentImage); - action->setParent(0); + if (m_flipbook) { + action = CommandManager::instance()->getAction(MI_LoadRecentImage); + action->setParent(0); + } delete menu; update(); @@ -372,10 +388,19 @@ ImageViewer::~ImageViewer() { //----------------------------------------------------------------------------- /*! Set current image to \b image and update. If Histogram is visible set its * image. -*/ + */ void ImageViewer::setImage(TImageP image) { m_image = image; + if (m_image && m_firstImage) { + m_firstImage = false; + fitView(); + // when the viewer size is large enough, limit the zoom ratio to 100% so + // that the image is shown in actual pixel size without jaggies due to + // resampling. + if (fabs(m_viewAff.det()) > 1.0) resetView(); + } + if (m_isHistogramEnable && m_histogramPopup->isVisible()) m_histogramPopup->setImage(image); if (!isColorModel()) @@ -417,7 +442,7 @@ void ImageViewer::initializeGL() { initializeOpenGLFunctions(); // to be computed once through the software - if (m_lutCalibrator) { + if (m_lutCalibrator && !m_lutCalibrator->isInitialized()) { m_lutCalibrator->initialize(); connect(context(), SIGNAL(aboutToBeDestroyed()), this, SLOT(onContextAboutToBeDestroyed())); @@ -425,6 +450,13 @@ void ImageViewer::initializeGL() { // glClearColor(1.0,1.0,1.0,1); glClear(GL_COLOR_BUFFER_BIT); + + if (m_firstInitialized) + m_firstInitialized = false; + else { + resizeGL(width(), height()); + update(); + } } //----------------------------------------------------------------------------- @@ -557,7 +589,7 @@ void ImageViewer::paintGL() { } else if (m_draggingZoomSelection || m_rectRGBPick) { fromPos = TPoint(m_pressedMousePos.x - width() * 0.5, height() * 0.5 - m_pressedMousePos.y); - toPos = TPoint(m_pos.x() - width() * 0.5, height() * 0.5 - m_pos.y()); + toPos = TPoint(m_pos.x() - width() * 0.5, height() * 0.5 - m_pos.y()); } if (fromPos != TPoint() || toPos != TPoint()) { if (m_rectRGBPick) { @@ -596,7 +628,7 @@ void ImageViewer::paintGL() { //------------------------------------------------------------------------------ /*! Add to current trasformation matrix a \b delta traslation. -*/ + */ void ImageViewer::panQt(const QPoint &delta) { if (delta == QPoint()) return; @@ -660,6 +692,14 @@ void ImageViewer::zoomQt(bool forward, bool reset) { //----------------------------------------------------------------------------- +void ImageViewer::resetZoom() { + double oldZoomScale = sqrt(m_viewAff.det()); + setViewAff(TScale(1.0 / oldZoomScale) * m_viewAff); + update(); +} + +//----------------------------------------------------------------------------- + void ImageViewer::dragCompare(const QPoint &dp) { if (m_compareSettings.m_dragCompareX) m_compareSettings.m_compareX += ((double)dp.x()) / width(); @@ -730,9 +770,15 @@ void ImageViewer::updateCursor(const TPoint &curPos) { //--------------------------------------------------------------------------------------------- /*! If middle button is pressed pan the image. Update current mouse position. -*/ + */ void ImageViewer::mouseMoveEvent(QMouseEvent *event) { if (!m_image) return; + + if (m_gestureActive && m_touchDevice == QTouchDevice::TouchScreen && + !m_stylusUsed) { + return; + } + QPoint curQPos = event->pos() * getDevPixRatio(); TPoint curPos = TPoint(curQPos.x(), curQPos.y()); @@ -819,7 +865,7 @@ void ImageViewer::mouseMoveEvent(QMouseEvent *event) { //--------------------------------------------------------------------------------------------- /*! notify the color picked by rgb picker to palette controller -*/ + */ void ImageViewer::setPickedColorToStyleEditor(const TPixel32 &color) { // do not modify the style #0 TPaletteHandle *ph = @@ -830,38 +876,68 @@ void ImageViewer::setPickedColorToStyleEditor(const TPixel32 &color) { } //--------------------------------------------------------------------------------------------- + +TImageP ImageViewer::getPickedImage(QPointF mousePos) { + bool cursorIsInSnapShot = false; + if (m_visualSettings.m_doCompare) { + if (m_compareSettings.m_compareY == ImagePainter::DefaultCompareValue) + cursorIsInSnapShot = + m_compareSettings.m_swapCompared == + (mousePos.x() > width() * m_compareSettings.m_compareX); + else + cursorIsInSnapShot = + m_compareSettings.m_swapCompared == + (height() - mousePos.y() > height() * m_compareSettings.m_compareY); + } + if (cursorIsInSnapShot) + return TImageCache::instance()->get(QString("TnzCompareImg"), false); + else + return m_image; +} + +//--------------------------------------------------------------------------------------------- /*! rgb picking -*/ + */ void ImageViewer::pickColor(QMouseEvent *event, bool putValueToStyleEditor) { if (!m_isHistogramEnable) return; if (!m_histogramPopup->isVisible()) return; - QPoint curPos = event->pos() * getDevPixRatio(); + QPointF curPos = event->localPos() * getDevPixRatio(); // avoid to pick outside of the flip - if ((!m_image) || !rect().contains(curPos)) { + if ((!m_image) || !rect().contains(curPos.toPoint())) { // throw transparent color m_histogramPopup->updateInfo(TPixel32::Transparent, TPointD(-1, -1)); return; } - StylePicker picker(m_image); + TImageP img = getPickedImage(curPos); + if (!img) { + m_histogramPopup->updateInfo(TPixel32::Transparent, TPointD(-1, -1)); + return; + } - TPoint mousePos = TPoint(curPos.x(), height() - 1 - curPos.y()); - TRectD area = TRectD(mousePos.x, mousePos.y, mousePos.x, mousePos.y); + StylePicker picker(img); - if (m_lutCalibrator && m_lutCalibrator->isValid()) m_fbo->bind(); + TPointD mousePos = TPointD(curPos.x(), height() - 1 - curPos.y()); + TRectD area = TRectD(mousePos.x, mousePos.y, mousePos.x, mousePos.y); + + TPointD pos = + getViewAff().inv() * TPointD(curPos.x() - (qreal)(width()) / 2, + -curPos.y() + (qreal)(height()) / 2); - const TPixel32 pix = picker.pickColor(area); + TRectD imgRect = (img->raster()) ? convert(TRect(img->raster()->getSize())) + : img->getBBox(); + TPointD imagePos = + TPointD(0.5 * imgRect.getLx() + pos.x, 0.5 * imgRect.getLy() + pos.y); - if (m_lutCalibrator && m_lutCalibrator->isValid()) m_fbo->release(); + TPixel32 pix; + if (m_lutCalibrator && m_lutCalibrator->isValid()) + pix = picker.pickColor(pos + TPointD(-0.5, -0.5)); + else + pix = picker.pickColor(area); - QPoint viewP = mapFrom(this, curPos); - TPointD pos = getViewAff().inv() * - TPointD(viewP.x() - width() / 2, -viewP.y() + height() / 2); - TPointD imagePos = TPointD(0.5 * m_image->getBBox().getLx() + pos.x, - 0.5 * m_image->getBBox().getLy() + pos.y); - if (m_image->getBBox().contains(imagePos)) { + if (!img->raster() || imgRect.contains(imagePos)) { // throw the picked color to the histogram m_histogramPopup->updateInfo(pix, imagePos); // throw it to the style editor as well @@ -875,12 +951,26 @@ void ImageViewer::pickColor(QMouseEvent *event, bool putValueToStyleEditor) { //--------------------------------------------------------------------------------------------- /*! rectangular rgb picking. The picked color will be an average of pixels in * specified rectangle -*/ + */ void ImageViewer::rectPickColor(bool putValueToStyleEditor) { + auto isRas32 = [this](TImageP img) -> bool { + TRasterImageP ri = img; + if (!ri) return false; + TRaster32P ras32 = ri->getRaster(); + if (!ras32) return false; + return true; + }; + if (!m_isHistogramEnable) return; if (!m_histogramPopup->isVisible()) return; - StylePicker picker(m_image); + TImageP img = getPickedImage(m_pos); + if (!img) { + m_histogramPopup->updateAverageColor(TPixel32::Transparent); + return; + } + + StylePicker picker(img); TPoint startPos = TPoint(m_pressedMousePos.x, height() - 1 - m_pressedMousePos.y); @@ -892,11 +982,15 @@ void ImageViewer::rectPickColor(bool putValueToStyleEditor) { return; } - if (m_lutCalibrator && m_lutCalibrator->isValid() && m_fbo) m_fbo->bind(); - - const TPixel32 pix = picker.pickColor(area.enlarge(-1, -1)); - - if (m_lutCalibrator && m_lutCalibrator->isValid() && m_fbo) m_fbo->release(); + TPixel32 pix; + if (m_lutCalibrator && m_lutCalibrator->isValid() && isRas32(img)) { + TPointD start = getViewAff().inv() * TPointD(startPos.x - width() / 2, + startPos.y - height() / 2); + TPointD end = getViewAff().inv() * + TPointD(endPos.x - width() / 2, endPos.y - height() / 2); + pix = picker.pickAverageColor(TRectD(start, end)); + } else + pix = picker.pickColor(area.enlarge(-1, -1)); // throw the picked color to the histogram m_histogramPopup->updateAverageColor(pix); @@ -939,6 +1033,13 @@ int ImageViewer::getDragType(const TPoint &pos, const TRect &loadbox) { //------------------------------------------------------------------------------- void ImageViewer::mouseDoubleClickEvent(QMouseEvent *event) { if (!m_image) return; + // qDebug() << "[mouseDoubleClickEvent]"; + if (m_gestureActive && !m_stylusUsed) { + m_gestureActive = false; + fitView(); + return; + } + if (m_visualSettings.m_defineLoadbox && m_flipbook) { m_flipbook->setLoadbox(TRect()); update(); @@ -950,6 +1051,13 @@ void ImageViewer::mouseDoubleClickEvent(QMouseEvent *event) { void ImageViewer::mousePressEvent(QMouseEvent *event) { if (!m_image) return; + + // qDebug() << "[mousePressEvent]"; + if (m_gestureActive && m_touchDevice == QTouchDevice::TouchScreen && + !m_stylusUsed) { + return; + } + m_pos = event->pos() * getDevPixRatio(); m_pressedMousePos = TPoint(m_pos.x(), m_pos.y()); m_mouseButton = event->button(); @@ -995,7 +1103,7 @@ void ImageViewer::mousePressEvent(QMouseEvent *event) { //----------------------------------------------------------------------------- /*! Reset current mouse position and current mouse button event. -*/ + */ void ImageViewer::mouseReleaseEvent(QMouseEvent *event) { if (!m_image) return; if (m_draggingZoomSelection && !m_visualSettings.m_defineLoadbox) { @@ -1026,19 +1134,64 @@ void ImageViewer::mouseReleaseEvent(QMouseEvent *event) { m_mouseButton = Qt::NoButton; m_compareSettings.m_dragCompareX = m_compareSettings.m_dragCompareY = false; + m_gestureActive = false; + m_zooming = false; + m_panning = false; + m_stylusUsed = false; + event->ignore(); } //----------------------------------------------------------------------------- /*! Apply zoom. -*/ + */ void ImageViewer::wheelEvent(QWheelEvent *event) { if (!m_image) return; if (event->orientation() == Qt::Horizontal) return; - int delta = event->delta() > 0 ? 120 : -120; - QPoint center(event->pos().x() * getDevPixRatio() - width() / 2, - -event->pos().y() * getDevPixRatio() + height() / 2); - zoomQt(center, exp(0.001 * delta)); + int delta = 0; + switch (event->source()) { + case Qt::MouseEventNotSynthesized: { + if (event->modifiers() & Qt::AltModifier) + delta = event->angleDelta().x(); + else + delta = event->angleDelta().y(); + break; + } + + case Qt::MouseEventSynthesizedBySystem: { + QPoint numPixels = event->pixelDelta(); + QPoint numDegrees = event->angleDelta() / 8; + if (!numPixels.isNull()) { + delta = event->pixelDelta().y(); + } else if (!numDegrees.isNull()) { + QPoint numSteps = numDegrees / 15; + delta = numSteps.y(); + } + break; + } + + default: // Qt::MouseEventSynthesizedByQt, + // Qt::MouseEventSynthesizedByApplication + { + std::cout << "not supported event: Qt::MouseEventSynthesizedByQt, " + "Qt::MouseEventSynthesizedByApplication" + << std::endl; + break; + } + + } // end switch + + if (abs(delta) > 0) { + if ((m_gestureActive == true && + m_touchDevice == QTouchDevice::TouchScreen) || + m_gestureActive == false) { + int delta = event->delta() > 0 ? 120 : -120; + QPoint center(event->pos().x() * getDevPixRatio() - width() / 2, + -event->pos().y() * getDevPixRatio() + height() / 2); + zoomQt(center, exp(0.001 * delta)); + } + } + event->accept(); } //----------------------------------------------------------------------------- @@ -1110,6 +1263,8 @@ TAffine ImageViewer::getImgToWidgetAffine(const TRectD &geom) const { void ImageViewer::adaptView(const TRect &imgRect, const TRect &viewRect) { QRect viewerRect(rect()); + if (viewerRect.isEmpty()) return; + double imageScale = std::min(viewerRect.width() / (double)viewRect.getLx(), viewerRect.height() / (double)viewRect.getLy()); @@ -1168,9 +1323,182 @@ void ImageViewer::onContextAboutToBeDestroyed() { doneCurrent(); } +//------------------------------------------------------------------ + +void ImageViewer::tabletEvent(QTabletEvent *e) { + // qDebug() << "[tabletEvent]"; + if (e->type() == QTabletEvent::TabletPress) { + m_stylusUsed = e->pointerType() ? true : false; + } else if (e->type() == QTabletEvent::TabletRelease) { + m_stylusUsed = false; + } + + e->accept(); +} + +//------------------------------------------------------------------ + +void ImageViewer::gestureEvent(QGestureEvent *e) { + // qDebug() << "[gestureEvent]"; + m_gestureActive = false; + if (QGesture *swipe = e->gesture(Qt::SwipeGesture)) { + m_gestureActive = true; + } else if (QGesture *pan = e->gesture(Qt::PanGesture)) { + m_gestureActive = true; + } + if (QGesture *pinch = e->gesture(Qt::PinchGesture)) { + QPinchGesture *gesture = static_cast(pinch); + QPinchGesture::ChangeFlags changeFlags = gesture->changeFlags(); + QPoint firstCenter = gesture->centerPoint().toPoint(); + if (m_touchDevice == QTouchDevice::TouchScreen) + firstCenter = mapFromGlobal(firstCenter); + + if (gesture->state() == Qt::GestureStarted) { + m_gestureActive = true; + } else if (gesture->state() == Qt::GestureFinished) { + m_gestureActive = false; + m_zooming = false; + m_scaleFactor = 0.0; + } else { + if (changeFlags & QPinchGesture::ScaleFactorChanged) { + double scaleFactor = gesture->scaleFactor(); + // the scale factor makes for too sensitive scaling + // divide the change in half + if (scaleFactor > 1) { + double decimalValue = scaleFactor - 1; + decimalValue /= 1.5; + scaleFactor = 1 + decimalValue; + } else if (scaleFactor < 1) { + double decimalValue = 1 - scaleFactor; + decimalValue /= 1.5; + scaleFactor = 1 - decimalValue; + } + if (!m_zooming) { + double delta = scaleFactor - 1; + m_scaleFactor += delta; + if (m_scaleFactor > .2 || m_scaleFactor < -.2) { + m_zooming = true; + } + } + if (m_zooming) { + const QPoint center( + firstCenter.x() * getDevPixRatio() - width() / 2, + -firstCenter.y() * getDevPixRatio() + height() / 2); + zoomQt(center, scaleFactor); + m_panning = false; + } + m_gestureActive = true; + } + + if (changeFlags & QPinchGesture::CenterPointChanged) { + QPointF centerDelta = (gesture->centerPoint() * getDevPixRatio()) - + (gesture->lastCenterPoint() * getDevPixRatio()); + if (centerDelta.manhattanLength() > 1) { + // panQt(centerDelta.toPoint()); + } + m_gestureActive = true; + } + } + } + e->accept(); +} + +void ImageViewer::touchEvent(QTouchEvent *e, int type) { + // qDebug() << "[touchEvent]"; + if (type == QEvent::TouchBegin) { + m_touchActive = true; + m_firstPanPoint = e->touchPoints().at(0).pos(); + // obtain device type + m_touchDevice = e->device()->type(); + } else if (m_touchActive) { + // touchpads must have 2 finger panning for tools and navigation to be + // functional on other devices, 1 finger panning is preferred + if ((e->touchPoints().count() == 2 && + m_touchDevice == QTouchDevice::TouchPad) || + (e->touchPoints().count() == 1 && + m_touchDevice == QTouchDevice::TouchScreen)) { + QTouchEvent::TouchPoint panPoint = e->touchPoints().at(0); + if (!m_panning) { + QPointF deltaPoint = panPoint.pos() - m_firstPanPoint; + // minimize accidental and jerky zooming/rotating during 2 finger + // panning + if ((deltaPoint.manhattanLength() > 100) && !m_zooming) { + m_panning = true; + } + } + if (m_panning) { + QPoint curPos = panPoint.pos().toPoint() * getDevPixRatio(); + QPoint lastPos = panPoint.lastPos().toPoint() * getDevPixRatio(); + QPoint centerDelta = curPos - lastPos; + panQt(centerDelta); + } + } + } + if (type == QEvent::TouchEnd || type == QEvent::TouchCancel) { + m_touchActive = false; + m_panning = false; + } + e->accept(); +} + +bool ImageViewer::event(QEvent *e) { + /* + switch (e->type()) { + case QEvent::TabletPress: { + QTabletEvent *te = static_cast(e); + qDebug() << "[event] TabletPress: pointerType(" << te->pointerType() + << ") device(" << te->device() << ")"; + } break; + case QEvent::TabletRelease: + qDebug() << "[event] TabletRelease"; + break; + case QEvent::TouchBegin: + qDebug() << "[event] TouchBegin"; + break; + case QEvent::TouchEnd: + qDebug() << "[event] TouchEnd"; + break; + case QEvent::TouchCancel: + qDebug() << "[event] TouchCancel"; + break; + case QEvent::MouseButtonPress: + qDebug() << "[event] MouseButtonPress"; + break; + case QEvent::MouseButtonDblClick: + qDebug() << "[event] MouseButtonDblClick"; + break; + case QEvent::MouseButtonRelease: + qDebug() << "[event] MouseButtonRelease"; + break; + case QEvent::Gesture: + qDebug() << "[event] Gesture"; + break; + default: + break; + } + */ + + if (e->type() == QEvent::Gesture && CommandManager::instance() + ->getAction(MI_TouchGestureControl) + ->isChecked()) { + gestureEvent(static_cast(e)); + return true; + } + if ((e->type() == QEvent::TouchBegin || e->type() == QEvent::TouchEnd || + e->type() == QEvent::TouchCancel || e->type() == QEvent::TouchUpdate) && + CommandManager::instance() + ->getAction(MI_TouchGestureControl) + ->isChecked()) { + touchEvent(static_cast(e), e->type()); + m_gestureActive = true; + return true; + } + return GLWidgetForHighDpi::event(e); +} + //----------------------------------------------------------------------------- /*! load image from history -*/ + */ class LoadRecentFlipbookImagesCommandHandler final : public MenuItemHandler { public: LoadRecentFlipbookImagesCommandHandler() @@ -1198,7 +1526,7 @@ public: //----------------------------------------------------------------------------- /*! clear the history -*/ + */ class ClearRecentFlipbookImagesCommandHandler final : public MenuItemHandler { public: ClearRecentFlipbookImagesCommandHandler() diff --git a/toonz/sources/toonz/imageviewer.h b/toonz/sources/toonz/imageviewer.h index 0e139a2..1fc3e2b 100644 --- a/toonz/sources/toonz/imageviewer.h +++ b/toonz/sources/toonz/imageviewer.h @@ -6,6 +6,8 @@ #include "toonz/imagepainter.h" #include "toonzqt/glwidget_for_highdpi.h" +#include + //----------------------------------------------------------------------------- // Forward declarations @@ -13,7 +15,8 @@ class FlipBook; class HistogramPopup; class QOpenGLFramebufferObject; class LutCalibrator; - +class QTouchEvent; +class QGestureEvent; //----------------------------------------------------------------------------- //==================== @@ -50,6 +53,7 @@ class ImageViewer final : public GLWidgetForHighDpi { QPoint m_pos; bool m_isHistogramEnable; HistogramPopup *m_histogramPopup; + bool m_firstImage; bool m_isColorModel; // when fx parameter is modified with showing the fx preview, @@ -60,6 +64,16 @@ class ImageViewer final : public GLWidgetForHighDpi { QOpenGLFramebufferObject *m_fbo = NULL; LutCalibrator *m_lutCalibrator = NULL; + bool m_touchActive = false; + bool m_gestureActive = false; + QTouchDevice::DeviceType m_touchDevice = QTouchDevice::TouchScreen; + bool m_zooming = false; + bool m_panning = false; + double m_scaleFactor; // used for zoom gesture + + bool m_stylusUsed = false; + bool m_firstInitialized = true; + int getDragType(const TPoint &pos, const TRect &loadBox); void updateLoadbox(const TPoint &curPos); void updateCursor(const TPoint &curPos); @@ -68,6 +82,8 @@ class ImageViewer final : public GLWidgetForHighDpi { void pickColor(QMouseEvent *event, bool putValueToStyleEditor = false); void rectPickColor(bool putValueToStyleEditor = false); void setPickedColorToStyleEditor(const TPixel32 &color); + // get the image (m_image or the snapshot) to be picked. + TImageP getPickedImage(QPointF mousePos); public: ImageViewer(QWidget *parent, FlipBook *flipbook, bool showHistogram); @@ -96,6 +112,7 @@ public: */ void hideHistogram(); void zoomQt(bool forward, bool reset); + void resetZoom(); void setIsRemakingPreviewFx(bool on) { m_isRemakingPreviewFx = on; @@ -127,6 +144,11 @@ protected: void dragCompare(const QPoint &dp); + void tabletEvent(QTabletEvent *e); + void touchEvent(QTouchEvent *e, int type); + void gestureEvent(QGestureEvent *e); + bool event(QEvent *e); + public slots: void updateImageViewer(); @@ -135,6 +157,9 @@ public slots: void showHistogram(); void swapCompared(); void onContextAboutToBeDestroyed(); + +private: + QPointF m_firstPanPoint; }; #endif // IMAGEVIEWER_INCLUDE diff --git a/toonz/sources/toonz/iocommand.cpp b/toonz/sources/toonz/iocommand.cpp index 98cd2be..a788967 100644 --- a/toonz/sources/toonz/iocommand.cpp +++ b/toonz/sources/toonz/iocommand.cpp @@ -190,7 +190,7 @@ public: // TFilePath process(ToonzScene *scene, ToonzScene *srcScene, TFilePath srcPath) override { - TFilePath actualSrcPath = srcPath; + TFilePath actualSrcPath = srcPath; if (srcScene) actualSrcPath = srcScene->decodeFilePath(srcPath); if (!isImportEnabled()) { @@ -1350,7 +1350,7 @@ bool IoCmd::saveScene(const TFilePath &path, int flags) { TApp *app = TApp::instance(); assert(!path.isEmpty()); - TFilePath scenePath = path; + TFilePath scenePath = path; if (scenePath.getType() == "") scenePath = scenePath.withType("tnz"); if (scenePath.getType() != "tnz") { error( @@ -1376,21 +1376,45 @@ bool IoCmd::saveScene(const TFilePath &path, int flags) { ToonzScene *scene = TApp::instance()->getCurrentScene()->getScene(); + TXsheet *xsheet = 0; + if (saveSubxsheet) xsheet = TApp::instance()->getCurrentXsheet()->getXsheet(); + // If the scene will be saved in the different folder, check out the scene // cast. // if the cast contains the level specified with $scenefolder alias, // open a warning popup notifying that such level will lose link. + + // in case of saving subxsheet, the current scene will not be switched to the + // saved one + // so the level paths are needed to be reverted after saving + QHash orgLevelPaths; + auto revertOrgLevelPaths = [&] { + QHash::const_iterator i = + orgLevelPaths.constBegin(); + while (i != orgLevelPaths.constEnd()) { + if (TXshSimpleLevel *sil = i.key()->getSimpleLevel()) + sil->setPath(i.value(), true); + else if (TXshPaletteLevel *pal = i.key()->getPaletteLevel()) + pal->setPath(i.value()); + else if (TXshSoundLevel *sol = i.key()->getSoundLevel()) + sol->setPath(i.value()); + ++i; + } + }; + if (!overwrite) { - bool ret = takeCareSceneFolderItemsOnSaveSceneAs(scene, scenePath); - if (!ret) return false; + bool ret = takeCareSceneFolderItemsOnSaveSceneAs(scene, scenePath, xsheet, + orgLevelPaths); + if (!ret) { + revertOrgLevelPaths(); + return false; + } } TFilePath oldFullPath = scene->decodeFilePath(scene->getScenePath()); TFilePath newFullPath = scene->decodeFilePath(scenePath); QApplication::setOverrideCursor(Qt::WaitCursor); - TXsheet *xsheet = 0; - if (saveSubxsheet) xsheet = TApp::instance()->getCurrentXsheet()->getXsheet(); if (app->getCurrentScene()->getDirtyFlag()) scene->getContentHistory(true)->modifiedNow(); @@ -1414,11 +1438,6 @@ bool IoCmd::saveScene(const TFilePath &path, int flags) { try { scene->save(scenePath, xsheet); - TApp::instance() - ->getPaletteController() - ->getCurrentLevelPalette() - ->notifyPaletteChanged(); // non toglieva l'asterisco alla - // paletta...forse non va qua? vinz } catch (const TSystemException &se) { DVGui::warning(QString::fromStdWString(se.getMessage())); } catch (...) { @@ -1427,7 +1446,11 @@ bool IoCmd::saveScene(const TFilePath &path, int flags) { cp->assign(&oldCP); - if (!overwrite) app->getCurrentScene()->notifyNameSceneChange(); + // in case of saving subxsheet, revert the level paths after saving + revertOrgLevelPaths(); + + if (!overwrite && !saveSubxsheet) + app->getCurrentScene()->notifyNameSceneChange(); FileBrowser::refreshFolder(scenePath.getParentDir()); IconGenerator::instance()->invalidate(scenePath); @@ -1440,8 +1463,13 @@ bool IoCmd::saveScene(const TFilePath &path, int flags) { app->getCurrentScene()->setDirtyFlag(false); History::instance()->addItem(scenePath); - RecentFiles::instance()->addFilePath(toQString(scenePath), - RecentFiles::Scene); + RecentFiles::instance()->addFilePath( + toQString(scenePath), RecentFiles::Scene, + QString::fromStdString(app->getCurrentScene() + ->getScene() + ->getProject() + ->getName() + .getName())); QApplication::restoreOverrideCursor(); @@ -1463,8 +1491,8 @@ bool IoCmd::saveScene() { ToonzScene *scene = TApp::instance()->getCurrentScene()->getScene(); if (scene->isUntitled()) { static SaveSceneAsPopup *popup = 0; - if (!popup) popup = new SaveSceneAsPopup(); - int ret = popup->exec(); + if (!popup) popup = new SaveSceneAsPopup(); + int ret = popup->exec(); if (ret == QDialog::Accepted) { TApp::instance()->getCurrentScene()->setDirtyFlag(false); return true; @@ -1728,8 +1756,8 @@ bool IoCmd::loadScene(const TFilePath &path, bool updateRecentFile, if (checkSaveOldScene) if (!saveSceneIfNeeded(QApplication::tr("Load Scene"))) return false; assert(!path.isEmpty()); - TFilePath scenePath = path; - bool importScene = false; + TFilePath scenePath = path; + bool importScene = false; if (scenePath.getType() == "") scenePath = scenePath.withType("tnz"); if (scenePath.getType() != "tnz") { QString msg; @@ -1823,9 +1851,8 @@ bool IoCmd::loadScene(const TFilePath &path, bool updateRecentFile, // import if needed TProjectManager *pm = TProjectManager::instance(); TProjectP currentProject = pm->getCurrentProject(); - if (!scene->getProject() || - scene->getProject()->getProjectPath() != - currentProject->getProjectPath()) { + if (!scene->getProject() || scene->getProject()->getProjectPath() != + currentProject->getProjectPath()) { ResourceImportDialog resourceLoader; // resourceLoader.setImportEnabled(true); ResourceImporter importer(scene, currentProject.getPointer(), @@ -1884,8 +1911,9 @@ bool IoCmd::loadScene(const TFilePath &path, bool updateRecentFile, TApp::instance()->getCurrentScene()->setDirtyFlag(false); History::instance()->addItem(scenePath); if (updateRecentFile) - RecentFiles::instance()->addFilePath(toQString(scenePath), - RecentFiles::Scene); + RecentFiles::instance()->addFilePath( + toQString(scenePath), RecentFiles::Scene, + QString::fromStdString(scene->getProject()->getName().getName())); QApplication::restoreOverrideCursor(); int forbiddenLevelCount = 0; @@ -2100,10 +2128,10 @@ static int loadPSDResource(IoCmd::LoadResourceArguments &args, int &row1 = args.row1; int &col1 = args.col1; - int count = 0; - TApp *app = TApp::instance(); - ToonzScene *scene = app->getCurrentScene()->getScene(); - TXsheet *xsh = scene->getXsheet(); + int count = 0; + TApp *app = TApp::instance(); + ToonzScene *scene = app->getCurrentScene()->getScene(); + TXsheet *xsh = scene->getXsheet(); if (row0 == -1) row0 = app->getCurrentFrame()->getFrameIndex(); if (col0 == -1) col0 = app->getCurrentColumn()->getColumnIndex(); @@ -2488,8 +2516,8 @@ bool IoCmd::exposeLevel(TXshSimpleLevel *sl, int row, int col, if (!insert && !overWrite) insertEmptyColumn = beforeCellsInsert( xsh, row, col, fids.size(), TXshColumn::toColumnType(sl->getType())); - ExposeType type = eNone; - if (insert) type = eShiftCells; + ExposeType type = eNone; + if (insert) type = eShiftCells; if (overWrite) type = eOverWrite; ExposeLevelUndo *undo = new ExposeLevelUndo(sl, row, col, frameCount, insertEmptyColumn, type); @@ -2574,36 +2602,80 @@ bool IoCmd::importLipSync(TFilePath levelPath, QList frameList, // if the cast contains the level specified with $scenefolder alias, // open a warning popup notifying that such level will lose link. // return false if cancelled. -bool IoCmd::takeCareSceneFolderItemsOnSaveSceneAs(ToonzScene *scene, - const TFilePath &newPath) { - TFilePath oldFullPath = scene->decodeFilePath(scene->getScenePath()); - TFilePath newFullPath = scene->decodeFilePath(newPath); +bool IoCmd::takeCareSceneFolderItemsOnSaveSceneAs( + ToonzScene *scene, const TFilePath &newPath, TXsheet *subxsh, + QHash &orgLevelPaths) { + auto setPathToLevel = [&](TXshLevel *level, TFilePath fp) { + // in case of saving subxsheet, the current scene will not be switched to + // the saved one + // so the level paths are needed to be reverted after saving + if (subxsh) orgLevelPaths.insert(level, level->getPath()); + if (TXshSimpleLevel *sil = level->getSimpleLevel()) + sil->setPath(fp, true); + else if (TXshPaletteLevel *pal = level->getPaletteLevel()) + pal->setPath(fp); + else if (TXshSoundLevel *sol = level->getSoundLevel()) + sol->setPath(fp); + }; + + TFilePath oldSceneFolder = + scene->decodeFilePath(scene->getScenePath()).getParentDir(); + TFilePath newSceneFolder = scene->decodeFilePath(newPath).getParentDir(); + // in case of saving in the same folder - if (oldFullPath.getParentDir() == newFullPath.getParentDir()) return true; + if (oldSceneFolder == newSceneFolder) return true; TLevelSet *levelSet = scene->getLevelSet(); std::vector levels; + + // in case of saving subxsheet, checking only used levels. + if (subxsh) { + std::set saveSet; + subxsh->getUsedLevels(saveSet); + levels = std::vector(saveSet.begin(), saveSet.end()); + } + // in case of saving the scene (i.e. top xsheet) + else + levelSet->listLevels(levels); + QList sceneFolderLevels; - levelSet->listLevels(levels); QString str; - for (int i = 0; i < levels.size(); i++) { - TXshLevel *level = levels.at(i); + int count = 0; + for (TXshLevel *level : levels) { if (!level->getPath().isEmpty() && TFilePath("$scenefolder").isAncestorOf(level->getPath())) { - sceneFolderLevels.append(level); - str.append(" " + QString::fromStdWString(level->getName()) + " (" + - level->getPath().getQString() + ")\n"); + TFilePath levelFullPath = scene->decodeFilePath(level->getPath()); + // check if the path can be re-coded with the new scene folder path + if (newSceneFolder.isAncestorOf(levelFullPath)) { + // just replace the path without warning + TFilePath fp = + TFilePath("$scenefolder") + (levelFullPath - newSceneFolder); + setPathToLevel(level, fp); + } + // if re-coding is not possible, then it needs to ask user's preference + else { + sceneFolderLevels.append(level); + if (count < 10) { + str.append(" " + QString::fromStdWString(level->getName()) + " (" + + level->getPath().getQString() + ")\n"); + } + count++; + } } } + // list maximum 10 levels + if (count > 10) + str.append(QObject::tr(" + %1 more level(s) \n").arg(count - 10)); // in case there is no items with $scenefolder if (sceneFolderLevels.isEmpty()) return true; str = QObject::tr( "The following level(s) use path with $scenefolder alias.\n\n") + - str + QObject::tr( - "\nThey will not be opened properly when you load the " - "scene next time.\nWhat do you want to do?"); + str + + QObject::tr( + "\nThey will not be opened properly when you load the " + "scene next time.\nWhat do you want to do?"); int ret = DVGui::MsgBox( str, QObject::tr("Copy the levels to correspondent paths"), @@ -2616,7 +2688,7 @@ bool IoCmd::takeCareSceneFolderItemsOnSaveSceneAs(ToonzScene *scene, for (int i = 0; i < sceneFolderLevels.size(); i++) { TXshLevel *level = sceneFolderLevels.at(i); TFilePath fp = level->getPath() - TFilePath("$scenefolder"); - fp = fp.withParentDir(newFullPath.getParentDir()); + fp = fp.withParentDir(newSceneFolder); // check the level existence if (TSystem::doesExistFileOrLevel(fp)) { bool overwrite = (policy == YES_FOR_ALL); @@ -2663,15 +2735,7 @@ bool IoCmd::takeCareSceneFolderItemsOnSaveSceneAs(ToonzScene *scene, // decode and code again TFilePath fp = scene->codeFilePath(scene->decodeFilePath(level->getPath())); - TXshSimpleLevel *sil = level->getSimpleLevel(); - TXshPaletteLevel *pal = level->getPaletteLevel(); - TXshSoundLevel *sol = level->getSoundLevel(); - if (sil) - sil->setPath(fp); - else if (pal) - pal->setPath(fp); - else if (sol) - sol->setPath(fp); + setPathToLevel(level, fp); } Preferences::instance()->setPathAliasPriority(oldPriority); } diff --git a/toonz/sources/toonz/iocommand.h b/toonz/sources/toonz/iocommand.h index d23c480..858643e 100644 --- a/toonz/sources/toonz/iocommand.h +++ b/toonz/sources/toonz/iocommand.h @@ -31,6 +31,7 @@ class TXshSoundLevel; class ToonzScene; class TCamera; class TPropertyGroup; +class TXsheet; namespace DVGui { class ProgressDialog; @@ -221,9 +222,8 @@ int loadResources( //! access and finalization. //!< Loads a group of resources by path. //! \return The actually loaded levels count. - int xFrom = -1, - int xTo = -1, std::wstring levelName = L"", int step = -1, int inc = -1, - int frameCount = -1, bool doesFileActuallyExist = true, + int xFrom = -1, int xTo = -1, std::wstring levelName = L"", int step = -1, + int inc = -1, int frameCount = -1, bool doesFileActuallyExist = true, CacheTlvBehavior cachingBehavior = ON_DEMAND); int loadResourceFolders( @@ -231,7 +231,7 @@ int loadResourceFolders( LoadResourceArguments::ScopedBlock *sb = 0 //!< Load block. May be nonzero in order to extend block data //! access and finalization. - ); //!< Loads the specified folders in current xsheet. +); //!< Loads the specified folders in current xsheet. //! \return The actually loaded levels count. bool exposeLevel(TXshSimpleLevel *sl, int row, int col, bool insert = false, bool overWrite = false); @@ -256,8 +256,9 @@ bool importLipSync(TFilePath levelPath, QList frameList, // cast. // if the cast contains the level specified with $scenefolder alias, // open a warning popup notifying that such level will lose link. -bool takeCareSceneFolderItemsOnSaveSceneAs(ToonzScene *scene, - const TFilePath &newPath); +bool takeCareSceneFolderItemsOnSaveSceneAs( + ToonzScene *scene, const TFilePath &newPath, TXsheet *subxsh, + QHash &orgLevelPaths); } // namespace IoCmd diff --git a/toonz/sources/toonz/keyframedata.cpp b/toonz/sources/toonz/keyframedata.cpp index b09f02c..3425a9d 100644 --- a/toonz/sources/toonz/keyframedata.cpp +++ b/toonz/sources/toonz/keyframedata.cpp @@ -10,6 +10,7 @@ #include "toonz/tstageobjecttree.h" #include "toonz/tstageobjectkeyframe.h" #include "toonz/txshcolumn.h" +#include "toonz/preferences.h" #include @@ -84,9 +85,20 @@ bool TKeyframeData::getKeyframes(std::set &positions, std::set::iterator it2 = positions.begin(); int r0 = it2->first; int c0 = it2->second; + std::map firstRowCol, lastRowCol; + firstRowCol.insert(std::pair(c0, r0)); + lastRowCol.insert(std::pair(c0, r0)); for (++it2; it2 != positions.end(); ++it2) { r0 = std::min(r0, it2->first); c0 = std::min(c0, it2->second); + std::map::iterator itF = firstRowCol.find(it2->second); + std::map::iterator itL = lastRowCol.find(it2->second); + if (itF == firstRowCol.end()) + firstRowCol.insert(std::pair(it2->second, it2->first)); + if (itL == lastRowCol.end()) + lastRowCol.insert(std::pair(it2->second, it2->first)); + else + itL->second = c0; } XsheetViewer *viewer = TApp::instance()->getCurrentXsheetViewer(); @@ -109,7 +121,63 @@ bool TKeyframeData::getKeyframes(std::set &positions, continue; keyFrameChanged = true; assert(pegbar); + + int kF, kL, kP, kN; + double e0, e1; + pegbar->getKeyframeRange(kF, kL); pegbar->setKeyframeWithoutUndo(row, it->second); + + std::map::iterator itF = firstRowCol.find(col); + std::map::iterator itL = lastRowCol.find(col); + TStageObject::Keyframe newKey = pegbar->getKeyframe(row); + // Process 1st key added in column + if (itF != firstRowCol.end() && itF->second == row) { + if (row > kL) { + // If new key was added after the existing last one, create new + // interpolation between them using preference setting + TStageObject::Keyframe prevKey = pegbar->getKeyframe(kL); + for (int i = 0; i < TStageObject::T_ChannelCount; i++) { + prevKey.m_channels[i].m_type = + TDoubleKeyframe::Type(Preferences::instance()->getKeyframeType()); + newKey.m_channels[i].m_prevType = prevKey.m_channels[i].m_type; + } + pegbar->setKeyframeWithoutUndo(kL, prevKey); + pegbar->setKeyframeWithoutUndo(row, newKey); + } else if (row > kF) { + // If new key was added between existing keys, sync new key's previous + // interpolation to key just before it + if (!pegbar->getKeyframeSpan(row - 1, kP, e0, kN, e1)) kP = row - 1; + TStageObject::Keyframe prevKey = pegbar->getKeyframe(kP); + for (int i = 0; i < TStageObject::T_ChannelCount; i++) { + newKey.m_channels[i].m_prevType = prevKey.m_channels[i].m_type; + } + pegbar->setKeyframeWithoutUndo(row, newKey); + } + } + // Process last key added in column + if (itL != lastRowCol.end() && itL->second == row) { + if (row < kF) { + // If new key was added before the existing 1st one, create new + // interpolation between them using preference setting + TStageObject::Keyframe nextKey = pegbar->getKeyframe(kF); + for (int i = 0; i < TStageObject::T_ChannelCount; i++) { + newKey.m_channels[i].m_type = + TDoubleKeyframe::Type(Preferences::instance()->getKeyframeType()); + nextKey.m_channels[i].m_prevType = newKey.m_channels[i].m_type; + } + pegbar->setKeyframeWithoutUndo(row, newKey); + pegbar->setKeyframeWithoutUndo(kF, nextKey); + } else if (row < kL) { + // If new key was added between existing keys, sync new key to the next + // key's previous interpolation + if (!pegbar->getKeyframeSpan(row + 1, kP, e0, kN, e1)) kN = row + 1; + TStageObject::Keyframe nextKey = pegbar->getKeyframe(kN); + for (int i = 0; i < TStageObject::T_ChannelCount; i++) { + newKey.m_channels[i].m_type = nextKey.m_channels[i].m_prevType; + } + pegbar->setKeyframeWithoutUndo(row, newKey); + } + } } if (!keyFrameChanged) return false; diff --git a/toonz/sources/toonz/kis_tablet_support_win8.cpp b/toonz/sources/toonz/kis_tablet_support_win8.cpp index c196885..798be5a 100644 --- a/toonz/sources/toonz/kis_tablet_support_win8.cpp +++ b/toonz/sources/toonz/kis_tablet_support_win8.cpp @@ -341,7 +341,7 @@ bool KisTabletSupportWin8::isPenDeviceAvailable() { return false; } bool hasPenDevice = false; - Q_FOREACH (const POINTER_DEVICE_INFO &device, devices) { + for (const POINTER_DEVICE_INFO &device : devices) { #ifdef KRITA dbgTablet << "Found pointer device" << static_cast(device.device) << QString::fromWCharArray(device.productString) diff --git a/toonz/sources/toonz/levelcommand.cpp b/toonz/sources/toonz/levelcommand.cpp index 4ae2d12..ab63c22 100644 --- a/toonz/sources/toonz/levelcommand.cpp +++ b/toonz/sources/toonz/levelcommand.cpp @@ -334,7 +334,7 @@ void revertTo(bool isCleanedUp) { delete undo; else { TUndoManager::manager()->add(undo); - sl->setDirtyFlag(true); + if (isCleanedUp) sl->setDirtyFlag(true); } app->getCurrentLevel()->notifyLevelChange(); } @@ -390,7 +390,7 @@ void revertTo(bool isCleanedUp) { delete undo; else { TUndoManager::manager()->add(undo); - sl->setDirtyFlag(true); + if (isCleanedUp) sl->setDirtyFlag(true); } } TUndoManager::manager()->endBlock(); diff --git a/toonz/sources/toonz/lipsyncpopup.cpp b/toonz/sources/toonz/lipsyncpopup.cpp index 73c0c8e..6a00ce3 100644 --- a/toonz/sources/toonz/lipsyncpopup.cpp +++ b/toonz/sources/toonz/lipsyncpopup.cpp @@ -469,7 +469,7 @@ void LipSyncPopup::imageNavClicked(int id) { else if (frameIndex == 0 && direction == -1) newIndex = m_levelFrameIds.size() - 1; else - newIndex = frameIndex + direction; + newIndex = frameIndex + direction; m_activeFrameIds[frameNumber] = m_levelFrameIds.at(newIndex); TXshCell newCell = TApp::instance()->getCurrentScene()->getScene()->getXsheet()->getCell( @@ -507,7 +507,7 @@ void LipSyncPopup::paintEvent(QPaintEvent *) { m_pixmaps[i] = pm; m_imageLabels[i]->setPixmap(m_pixmaps[i]); m_textLabels[i]->setText( - "Drawing: " + QString::number(m_activeFrameIds[i].getNumber())); + tr("Drawing: ") + QString::number(m_activeFrameIds[i].getNumber())); } i++; } diff --git a/toonz/sources/toonz/loadfoldercommand.cpp b/toonz/sources/toonz/loadfoldercommand.cpp index 950d518..7fdec12 100644 --- a/toonz/sources/toonz/loadfoldercommand.cpp +++ b/toonz/sources/toonz/loadfoldercommand.cpp @@ -31,7 +31,6 @@ #include // tcg includes -#include "tcg/tcg_algorithm.h" #include "tcg/tcg_function_types.h" // boost includes @@ -373,7 +372,7 @@ struct import_Locals { m_scene.getImportedLevelPath(path.absoluteResourcePath()) .getParentDir() // E.g. +drawings/ + path.m_rootFp.getWideName() // Root dir name - ); + ); } static void copy(const TFilePath &srcDir, const TFilePath &dstDir, @@ -465,11 +464,11 @@ void import(const ToonzScene &scene, std::vector &resources, OverwriteDialog::OverwriteDialog(QWidget *parent) : ValidatedChoiceDialog(parent, ValidatedChoiceDialog::APPLY_TO_ALL) { - setWindowTitle(tr("Warning!")); + setWindowTitle(QObject::tr("Warning!", "OverwriteDialog")); // Option 1: OVERWRITE QRadioButton *radioButton = new QRadioButton; - radioButton->setText(tr("Overwrite")); + radioButton->setText(QObject::tr("Overwrite", "OverwriteDialog")); radioButton->setFixedHeight(20); radioButton->setChecked(true); // initial option: OVERWRITE @@ -478,7 +477,7 @@ OverwriteDialog::OverwriteDialog(QWidget *parent) // Option 2: SKIP radioButton = new QRadioButton; - radioButton->setText(tr("Skip")); + radioButton->setText(QObject::tr("Skip", "OverwriteDialog")); radioButton->setFixedHeight(20); m_buttonGroup->addButton(radioButton, SKIP); @@ -512,7 +511,9 @@ QString OverwriteDialog::acceptResolution(void *obj_, int resolution, if (resolution == NO_RESOLUTION) { // Test existence of any resource components if (locals::existsResource(obj.m_dstDir, obj.m_rsrc)) - error = tr("File \"%1\" already exists.\nDo you want to overwrite it?") + error = QObject::tr( + "File \"%1\" already exists.\nDo you want to overwrite it?", + "OverwriteDialog") .arg(obj.m_rsrc.m_path.m_relFp.getQString()); } diff --git a/toonz/sources/toonz/main.cpp b/toonz/sources/toonz/main.cpp index 8fb85fe..8ae73fc 100644 --- a/toonz/sources/toonz/main.cpp +++ b/toonz/sources/toonz/main.cpp @@ -409,6 +409,8 @@ int main(int argc, char *argv[]) { } #endif + TEnv::setApplicationFileName(argv[0]); + // splash screen QPixmap splashPixmap = QIcon(":Resources/splash.svg").pixmap(QSize(610, 344)); splashPixmap.setDevicePixelRatio(QApplication::desktop()->devicePixelRatio()); diff --git a/toonz/sources/toonz/mainwindow.cpp b/toonz/sources/toonz/mainwindow.cpp index 289f81a..1d2c100 100644 --- a/toonz/sources/toonz/mainwindow.cpp +++ b/toonz/sources/toonz/mainwindow.cpp @@ -32,6 +32,7 @@ #include "toonz/tscenehandle.h" #include "toonz/toonzscene.h" #include "toonz/txshleveltypes.h" +#include "toonz/tproject.h" // TnzBase includes #include "tenv.h" @@ -449,6 +450,7 @@ centralWidget->setLayout(centralWidgetLayout);*/ setCommandHandler(MI_PickStyleLines, this, &MainWindow::togglePickStyleLines); setCommandHandler(MI_About, this, &MainWindow::onAbout); + setCommandHandler(MI_OpenOnlineManual, this, &MainWindow::onOpenOnlineManual); setCommandHandler(MI_MaximizePanel, this, &MainWindow::maximizePanel); setCommandHandler(MI_FullScreenWindow, this, &MainWindow::fullScreenWindow); setCommandHandler("MI_NewVectorLevel", this, @@ -484,14 +486,19 @@ void MainWindow::changeWindowTitle() { ToonzScene *scene = app->getCurrentScene()->getScene(); if (!scene) return; - QString name = QString::fromStdWString(scene->getSceneName()); + TProject *project = scene->getProject(); + QString projectName = QString::fromStdString(project->getName().getName()); - /*--- レイアウトファイル名を頭に表示させる ---*/ - if (!m_layoutName.isEmpty()) name.prepend(m_layoutName + " : "); + QString sceneName = QString::fromStdWString(scene->getSceneName()); + + if (sceneName.isEmpty()) sceneName = tr("Untitled"); + if (app->getCurrentScene()->getDirtyFlag()) sceneName += QString("*"); - if (name.isEmpty()) name = tr("Untitled"); + /*--- レイアウトファイル名を頭に表示させる ---*/ + if (!m_layoutName.isEmpty()) sceneName.prepend(m_layoutName + " : "); - name += " : " + QString::fromStdString(TEnv::getApplicationFullName()); + QString name = sceneName + " [" + projectName + "] : " + + QString::fromStdString(TEnv::getApplicationFullName()); setWindowTitle(name); } @@ -521,7 +528,7 @@ Room *MainWindow::getRoom(int index) const { //----------------------------------------------------------------------------- /*! Roomを名前から探す -*/ + */ Room *MainWindow::getRoomByName(QString &roomName) { for (int i = 0; i < getRoomCount(); i++) { Room *room = dynamic_cast(m_stackedWidget->widget(i)); @@ -983,6 +990,12 @@ void MainWindow::onAbout() { //----------------------------------------------------------------------------- +void MainWindow::onOpenOnlineManual() { + QDesktopServices::openUrl(QUrl(tr("http://opentoonz.readthedocs.io"))); +} + +//----------------------------------------------------------------------------- + void MainWindow::autofillToggle() { TPaletteHandle *h = TApp::instance()->getCurrentPalette(); h->toggleAutopaint(); @@ -1050,7 +1063,6 @@ void MainWindow::onCurrentRoomChanged(int newRoomIndex) { TPanel *pane = paneList.at(i); if (pane->isFloating() && !pane->isHidden()) { QRect oldGeometry = pane->geometry(); - // Just setting the new parent is not enough for the new layout manager. // Must be removed from the old and added to the new. oldRoom->removeDockWidget(pane); @@ -1148,7 +1160,7 @@ void MainWindow::onMenuCheckboxChanged() { #endif else if (cm->getAction(MI_RasterizePli) == action) { if (!QGLPixelBuffer::hasOpenGLPbuffers()) isChecked = 0; - RasterizePliToggleAction = isChecked; + RasterizePliToggleAction = isChecked; } else if (cm->getAction(MI_SafeArea) == action) SafeAreaToggleAction = isChecked; else if (cm->getAction(MI_ViewColorcard) == action) @@ -1428,6 +1440,13 @@ QAction *MainWindow::createViewerAction(const char *id, const QString &name, //----------------------------------------------------------------------------- +QAction *MainWindow::createVisualizationButtonAction(const char *id, + const QString &name) { + return createAction(id, name, "", VisualizationButtonCommandType); +} + +//----------------------------------------------------------------------------- + QAction *MainWindow::createMiscAction(const char *id, const QString &name, const char *defaultShortcut) { QAction *action = new DVAction(name, this); @@ -1610,14 +1629,14 @@ void MainWindow::defineActions() { createMenuEditAction(MI_Ungroup, tr("&Ungroup"), "Ctrl+Shift+G"); createMenuEditAction(MI_BringToFront, tr("&Bring to Front"), "Ctrl+]"); createMenuEditAction(MI_BringForward, tr("&Bring Forward"), "]"); - createMenuEditAction(MI_SendBack, tr("&Send Back"), "Ctrl+["); + createMenuEditAction(MI_SendBack, tr("&Send to Back"), "Ctrl+["); createMenuEditAction(MI_SendBackward, tr("&Send Backward"), "["); createMenuEditAction(MI_EnterGroup, tr("&Enter Group"), ""); createMenuEditAction(MI_ExitGroup, tr("&Exit Group"), ""); createMenuEditAction(MI_RemoveEndpoints, tr("&Remove Vector Overflow"), ""); QAction *touchToggle = createToggle(MI_TouchGestureControl, tr("&Touch Gesture Control"), "", - TouchGestureControl ? 1 : 0, MenuEditCommandType); + TouchGestureControl ? 1 : 0, MiscCommandType); touchToggle->setEnabled(true); touchToggle->setIcon(QIcon(":Resources/touch.svg")); @@ -1946,6 +1965,7 @@ void MainWindow::defineActions() { "Ctrl+`"); createMenuWindowsAction(MI_About, tr("&About OpenToonz..."), ""); createMenuWindowsAction(MI_StartupPopup, tr("&Startup Popup..."), "Alt+S"); + createMenuWindowsAction(MI_OpenOnlineManual, tr("&Online Manual..."), "F1"); createRightClickMenuAction(MI_BlendColors, tr("&Blend colors"), ""); @@ -2094,8 +2114,11 @@ void MainWindow::defineActions() { createViewerAction(V_ZoomIn, tr("Zoom In"), "+"); createViewerAction(V_ZoomOut, tr("Zoom Out"), "-"); - createViewerAction(V_ZoomReset, tr("Reset View"), "Alt+0"); + createViewerAction(V_ViewReset, tr("Reset View"), "Alt+0"); createViewerAction(V_ZoomFit, tr("Fit to Window"), "Alt+9"); + createViewerAction(V_ZoomReset, tr("Reset Zoom"), ""); + createViewerAction(V_RotateReset, tr("Reset Rotation"), ""); + createViewerAction(V_PositionReset, tr("Reset Position"), ""); createViewerAction(V_ActualPixelSize, tr("Actual Pixel Size"), "N"); createViewerAction(V_FlipX, tr("Flip Viewer Horizontally"), ""); createViewerAction(V_FlipY, tr("Flip Viewer Vertically"), ""); @@ -2105,6 +2128,21 @@ void MainWindow::defineActions() { tr("Full Screen Mode"), tr("Exit Full Screen Mode")); + // Following actions are for adding "Visualization" menu items to the command + // bar. They are separated from the original actions in order to avoid + // assigning shortcut keys. They must be triggered only from pressing buttons + // in the command bar. Assinging shortcut keys and registering as MenuItem + // will break a logic of ShortcutZoomer. So here we register separate items + // and bypass the command. + createVisualizationButtonAction(VB_ViewReset, tr("Reset View")); + createVisualizationButtonAction(VB_ZoomFit, tr("Fit to Window")); + createVisualizationButtonAction(VB_ZoomReset, tr("Reset Zoom")); + createVisualizationButtonAction(VB_RotateReset, tr("Reset Rotation")); + createVisualizationButtonAction(VB_PositionReset, tr("Reset Position")); + createVisualizationButtonAction(VB_ActualPixelSize, tr("Actual Pixel Size")); + createVisualizationButtonAction(VB_FlipX, tr("Flip Viewer Horizontally")); + createVisualizationButtonAction(VB_FlipY, tr("Flip Viewer Vertically")); + QAction *refreshAct = createMiscAction(MI_RefreshTree, tr("Refresh Folder Tree"), ""); refreshAct->setIconText(tr("Refresh")); @@ -2152,6 +2190,10 @@ void MainWindow::defineActions() { createToolOptionsAction("A_ToolOption_JoinVectors", tr("Join Vectors"), ""); createToolOptionsAction("A_ToolOption_ShowOnlyActiveSkeleton", tr("Show Only Active Skeleton"), ""); + createToolOptionsAction("A_ToolOption_RasterEraser", + tr("Brush Tool - Eraser (Raster option)"), ""); + createToolOptionsAction("A_ToolOption_LockAlpha", + tr("Brush Tool - Lock Alpha"), ""); // Option Menu createToolOptionsAction("A_ToolOption_BrushPreset", tr("Brush Preset"), ""); @@ -2313,7 +2355,8 @@ void MainWindow::onQuit() { close(); } // RecentFiles //============================================================================= -RecentFiles::RecentFiles() : m_recentScenes(), m_recentLevels() {} +RecentFiles::RecentFiles() + : m_recentScenes(), m_recentSceneProjects(), m_recentLevels() {} //----------------------------------------------------------------------------- @@ -2328,17 +2371,25 @@ RecentFiles::~RecentFiles() {} //----------------------------------------------------------------------------- -void RecentFiles::addFilePath(QString path, FileType fileType) { +void RecentFiles::addFilePath(QString path, FileType fileType, + QString projectName) { QList files = - (fileType == Scene) ? m_recentScenes : (fileType == Level) - ? m_recentLevels - : m_recentFlipbookImages; + (fileType == Scene) + ? m_recentScenes + : (fileType == Level) ? m_recentLevels : m_recentFlipbookImages; int i; for (i = 0; i < files.size(); i++) - if (files.at(i) == path) files.removeAt(i); + if (files.at(i) == path) { + files.removeAt(i); + if (fileType == Scene) m_recentSceneProjects.removeAt(i); + } files.insert(0, path); + if (fileType == Scene) m_recentSceneProjects.insert(0, projectName); int maxSize = 10; - if (files.size() > maxSize) files.removeAt(maxSize); + if (files.size() > maxSize) { + files.removeAt(maxSize); + if (fileType == Scene) m_recentSceneProjects.removeAt(maxSize); + } if (fileType == Scene) m_recentScenes = files; @@ -2354,9 +2405,10 @@ void RecentFiles::addFilePath(QString path, FileType fileType) { //----------------------------------------------------------------------------- void RecentFiles::moveFilePath(int fromIndex, int toIndex, FileType fileType) { - if (fileType == Scene) + if (fileType == Scene) { m_recentScenes.move(fromIndex, toIndex); - else if (fileType == Level) + m_recentSceneProjects.move(fromIndex, toIndex); + } else if (fileType == Level) m_recentLevels.move(fromIndex, toIndex); else m_recentFlipbookImages.move(fromIndex, toIndex); @@ -2366,9 +2418,10 @@ void RecentFiles::moveFilePath(int fromIndex, int toIndex, FileType fileType) { //----------------------------------------------------------------------------- void RecentFiles::removeFilePath(int index, FileType fileType) { - if (fileType == Scene) + if (fileType == Scene) { m_recentScenes.removeAt(index); - else if (fileType == Level) + m_recentSceneProjects.removeAt(index); + } else if (fileType == Level) m_recentLevels.removeAt(index); saveRecentFiles(); } @@ -2384,10 +2437,26 @@ QString RecentFiles::getFilePath(int index, FileType fileType) const { //----------------------------------------------------------------------------- +QString RecentFiles::getFileProject(int index) const { + if (index >= m_recentScenes.size() || index >= m_recentSceneProjects.size()) + return "-"; + return m_recentSceneProjects[index]; +} + +QString RecentFiles::getFileProject(QString fileName) const { + for (int index = 0; index < m_recentScenes.size(); index++) + if (m_recentScenes[index] == fileName) return m_recentSceneProjects[index]; + + return "-"; +} + +//----------------------------------------------------------------------------- + void RecentFiles::clearRecentFilesList(FileType fileType) { - if (fileType == Scene) + if (fileType == Scene) { m_recentScenes.clear(); - else if (fileType == Level) + m_recentSceneProjects.clear(); + } else if (fileType == Level) m_recentLevels.clear(); else m_recentFlipbookImages.clear(); @@ -2411,6 +2480,22 @@ void RecentFiles::loadRecentFiles() { QString scene = settings.value(QString("Scenes")).toString(); if (!scene.isEmpty()) m_recentScenes.append(scene); } + + // Load scene's projects info. This is for display purposes only. For + // backwards compatibility it is stored and maintained separately. + QList sceneProjects = + settings.value(QString("SceneProjects")).toList(); + if (!sceneProjects.isEmpty()) { + for (i = 0; i < sceneProjects.size(); i++) + m_recentSceneProjects.append(sceneProjects.at(i).toString()); + } else { + QString sceneProject = settings.value(QString("SceneProjects")).toString(); + if (!sceneProject.isEmpty()) m_recentSceneProjects.append(sceneProject); + } + // Should be 1-to-1. If we're short, append projects list with "-". + while (m_recentSceneProjects.size() < m_recentScenes.size()) + m_recentSceneProjects.append("-"); + QList levels = settings.value(QString("Levels")).toList(); if (!levels.isEmpty()) { for (i = 0; i < levels.size(); i++) { @@ -2448,6 +2533,7 @@ void RecentFiles::saveRecentFiles() { TFilePath fp = ToonzFolder::getMyModuleDir() + TFilePath("RecentFiles.ini"); QSettings settings(toQString(fp), QSettings::IniFormat); settings.setValue(QString("Scenes"), QVariant(m_recentScenes)); + settings.setValue(QString("SceneProjects"), QVariant(m_recentSceneProjects)); settings.setValue(QString("Levels"), QVariant(m_recentLevels)); settings.setValue(QString("FlipbookImages"), QVariant(m_recentFlipbookImages)); @@ -2457,9 +2543,9 @@ void RecentFiles::saveRecentFiles() { QList RecentFiles::getFilesNameList(FileType fileType) { QList files = - (fileType == Scene) ? m_recentScenes : (fileType == Level) - ? m_recentLevels - : m_recentFlipbookImages; + (fileType == Scene) + ? m_recentScenes + : (fileType == Level) ? m_recentLevels : m_recentFlipbookImages; QList names; int i; for (i = 0; i < files.size(); i++) { @@ -2486,9 +2572,9 @@ void RecentFiles::refreshRecentFilesMenu(FileType fileType) { menu->setEnabled(false); else { CommandId clearActionId = - (fileType == Scene) ? MI_ClearRecentScene : (fileType == Level) - ? MI_ClearRecentLevel - : MI_ClearRecentImage; + (fileType == Scene) + ? MI_ClearRecentScene + : (fileType == Level) ? MI_ClearRecentLevel : MI_ClearRecentImage; menu->setActions(names); menu->addSeparator(); QAction *clearAction = CommandManager::instance()->getAction(clearActionId); diff --git a/toonz/sources/toonz/mainwindow.h b/toonz/sources/toonz/mainwindow.h index bf11637..1e7379c 100644 --- a/toonz/sources/toonz/mainwindow.h +++ b/toonz/sources/toonz/mainwindow.h @@ -95,6 +95,7 @@ public: void autofillToggle(); void onUpgradeTabPro(); void onAbout(); + void onOpenOnlineManual(); void checkForUpdates(); int getRoomCount() const; Room *getRoom(int index) const; @@ -175,6 +176,9 @@ private: const QString &defaultShortcut); QAction *createViewerAction(const char *id, const QString &name, const QString &defaultShortcut); + // For command bar, no shortcut keys + QAction *createVisualizationButtonAction(const char *id, const QString &name); + QAction *createMiscAction(const char *id, const QString &name, const char *defaultShortcut); QAction *createToolOptionsAction(const char *id, const QString &name, @@ -208,6 +212,7 @@ signals: class RecentFiles { friend class StartupPopup; QList m_recentScenes; + QList m_recentSceneProjects; QList m_recentLevels; QList m_recentFlipbookImages; @@ -219,10 +224,12 @@ public: static RecentFiles *instance(); ~RecentFiles(); - void addFilePath(QString path, FileType fileType); + void addFilePath(QString path, FileType fileType, QString projectName = 0); void moveFilePath(int fromIndex, int toIndex, FileType fileType); void removeFilePath(int fromIndex, FileType fileType); QString getFilePath(int index, FileType fileType) const; + QString getFileProject(QString fileName) const; + QString getFileProject(int index) const; void clearRecentFilesList(FileType fileType); void loadRecentFiles(); void saveRecentFiles(); diff --git a/toonz/sources/toonz/matchlinecommand.cpp b/toonz/sources/toonz/matchlinecommand.cpp index 4facb4c..c4df760 100644 --- a/toonz/sources/toonz/matchlinecommand.cpp +++ b/toonz/sources/toonz/matchlinecommand.cpp @@ -49,10 +49,9 @@ void MergeCmappedDialog::accept() { if (TSystem::doesExistFileOrLevel(fp)) { if (DVGui::MsgBox( - QObject::tr("Level ") + - QString::fromStdWString(m_levelPath.getWideString()) + - QObject::tr( - " already exists! Are you sure you want to overwrite it?"), + tr("Level %1 already exists! Are you sure you want to overwrite " + "it?") + .arg(QString::fromStdWString(m_levelPath.getWideString())), tr("Ok"), tr("Cancel")) != 1) return; else { @@ -112,16 +111,16 @@ public: selection ? selection->getIndices() : std::set(); if (indices.empty()) { - DVGui::warning( - tr("It is not possible to execute the merge column command because " - "no column was selected.")); + DVGui::warning(QObject::tr( + "It is not possible to execute the merge column command because " + "no column was selected.")); return; } if (indices.size() == 1) { - DVGui::warning( - tr("It is not possible to execute the merge column command because " - "only one columns is selected.")); + DVGui::warning(QObject::tr( + "It is not possible to execute the merge column command because " + "only one columns is selected.")); return; } @@ -143,18 +142,18 @@ public: TColumnSelection *selection = dynamic_cast(TSelection::getCurrent()); if (!selection) { - DVGui::warning( - tr("It is not possible to apply the match lines because no column " - "was selected.")); + DVGui::warning(QObject::tr( + "It is not possible to apply the match lines because no column " + "was selected.")); return; } std::set indices = selection->getIndices(); if (indices.size() != 2) { - DVGui::warning( - tr("It is not possible to apply the match lines because two columns " - "have to be selected.")); + DVGui::warning(QObject::tr( + "It is not possible to apply the match lines because two columns " + "have to be selected.")); return; } @@ -263,9 +262,8 @@ public: } int getSize() const override { - return sizeof *this + - (sizeof(TXshLevelP) + sizeof(TXshSimpleLevel *)) * - m_createdLevels.size(); + return sizeof *this + (sizeof(TXshLevelP) + sizeof(TXshSimpleLevel *)) * + m_createdLevels.size(); } }; @@ -420,18 +418,18 @@ public: TColumnSelection *selection = dynamic_cast(TSelection::getCurrent()); if (!selection) { - DVGui::warning( - tr("It is not possible to merge tlv columns because no column was " - "selected.")); + DVGui::warning(QObject::tr( + "It is not possible to merge tlv columns because no column was " + "selected.")); return; } std::set indices = selection->getIndices(); if (indices.size() < 2) { - DVGui::warning( - tr("It is not possible to merge tlv columns because at least two " - "columns have to be selected.")); + DVGui::warning(QObject::tr( + "It is not possible to merge tlv columns because at least two " + "columns have to be selected.")); return; } @@ -459,11 +457,11 @@ public: for (; it != indices.end(); ++it) if (!checkColumnValidity(*it)) return; - DVGui::ProgressDialog progress(tr("Merging Tlv Levels..."), QString(), 0, - indices.size() - 1, + DVGui::ProgressDialog progress(QObject::tr("Merging Tlv Levels..."), + QString(), 0, indices.size() - 1, TApp::instance()->getMainWindow()); progress.setWindowModality(Qt::WindowModal); - progress.setWindowTitle(tr("Merging Tlv Levels...")); + progress.setWindowTitle(QObject::tr("Merging Tlv Levels...")); progress.setValue(0); progress.show(); diff --git a/toonz/sources/toonz/menubar.cpp b/toonz/sources/toonz/menubar.cpp index 9248905..cc8d616 100644 --- a/toonz/sources/toonz/menubar.cpp +++ b/toonz/sources/toonz/menubar.cpp @@ -1087,54 +1087,38 @@ QMenuBar *StackedMenuBar::createFullMenuBar() { addMenuItem(fileMenu, MI_LoadFolder); addMenuItem(fileMenu, MI_LoadSubSceneFile); fileMenu->addSeparator(); - addMenuItem(fileMenu, MI_NewLevel); - addMenuItem(fileMenu, MI_LoadLevel); - addMenuItem(fileMenu, MI_SaveAllLevels); - addMenuItem(fileMenu, MI_SaveLevel); - addMenuItem(fileMenu, MI_SaveLevelAs); - addMenuItem(fileMenu, MI_ExportLevel); - addMenuItem(fileMenu, MI_OpenRecentLevel); - fileMenu->addSeparator(); addMenuItem(fileMenu, MI_ConvertFileWithInput); fileMenu->addSeparator(); addMenuItem(fileMenu, MI_LoadColorModel); fileMenu->addSeparator(); - addMenuItem(fileMenu, MI_ImportMagpieFile); - fileMenu->addSeparator(); - addMenuItem(fileMenu, MI_NewProject); - addMenuItem(fileMenu, MI_ProjectSettings); - addMenuItem(fileMenu, MI_SaveDefaultSettings); - fileMenu->addSeparator(); - addMenuItem(fileMenu, MI_PreviewSettings); - addMenuItem(fileMenu, MI_Preview); - // addMenuItem(fileMenu, MI_SavePreview); + QMenu *projectManagementMenu = fileMenu->addMenu(tr("Project Management")); + { + addMenuItem(projectManagementMenu, MI_NewProject); + addMenuItem(projectManagementMenu, MI_ProjectSettings); + projectManagementMenu->addSeparator(); + addMenuItem(projectManagementMenu, MI_SaveDefaultSettings); + } fileMenu->addSeparator(); - addMenuItem(fileMenu, MI_OutputSettings); - addMenuItem(fileMenu, MI_Render); - addMenuItem(fileMenu, MI_FastRender); - addMenuItem(fileMenu, MI_SoundTrack); - // addMenuItem(fileMenu, MI_SavePreviewedFrames); + QMenu *importMenu = fileMenu->addMenu(tr("Import")); + { addMenuItem(importMenu, MI_ImportMagpieFile); } + QMenu *exportMenu = fileMenu->addMenu(tr("Export")); + { addMenuItem(exportMenu, MI_SoundTrack); } fileMenu->addSeparator(); addMenuItem(fileMenu, MI_PrintXsheet); addMenuItem(fileMenu, MI_Print); + addMenuItem(fileMenu, MI_Export); + fileMenu->addSeparator(); + QMenu *scriptMenu = fileMenu->addMenu(tr("Script")); + { + addMenuItem(scriptMenu, "MI_RunScript"); + addMenuItem(scriptMenu, "MI_OpenScriptConsole"); + } fileMenu->addSeparator(); addMenuItem(fileMenu, MI_Preferences); addMenuItem(fileMenu, MI_ShortcutPopup); fileMenu->addSeparator(); - // addMenuItem(fileMenu, MI_Export); - // addMenuItem(fileMenu, MI_TestAnimation); - // fileMenu->addSeparator(); - - addMenuItem(fileMenu, "MI_RunScript"); - addMenuItem(fileMenu, "MI_OpenScriptConsole"); - - fileMenu->addSeparator(); addMenuItem(fileMenu, MI_Quit); -#ifndef NDEBUG - addMenuItem(fileMenu, "MI_ReloadStyle"); -#endif - // Menu' EDIT QMenu *editMenu = addMenu(tr("Edit"), fullMenuBar); addMenuItem(editMenu, MI_Undo); @@ -1146,29 +1130,28 @@ QMenuBar *StackedMenuBar::createFullMenuBar() { addMenuItem(editMenu, MI_PasteAbove); // addMenuItem(editMenu, MI_PasteNew); addMenuItem(editMenu, MI_PasteInto); - editMenu->addSeparator(); - addMenuItem(editMenu, MI_Clear); addMenuItem(editMenu, MI_Insert); addMenuItem(editMenu, MI_InsertAbove); + addMenuItem(editMenu, MI_Clear); editMenu->addSeparator(); addMenuItem(editMenu, MI_SelectAll); addMenuItem(editMenu, MI_InvertSelection); editMenu->addSeparator(); - addMenuItem(editMenu, MI_RemoveEndpoints); - editMenu->addSeparator(); - addMenuItem(editMenu, MI_Group); - addMenuItem(editMenu, MI_Ungroup); - addMenuItem(editMenu, MI_EnterGroup); - addMenuItem(editMenu, MI_ExitGroup); - editMenu->addSeparator(); - - addMenuItem(editMenu, MI_BringToFront); - addMenuItem(editMenu, MI_BringForward); - addMenuItem(editMenu, MI_SendBack); - addMenuItem(editMenu, MI_SendBackward); - + QMenu *groupMenu = editMenu->addMenu(tr("Group")); + { + addMenuItem(groupMenu, MI_Group); + addMenuItem(groupMenu, MI_Ungroup); + addMenuItem(groupMenu, MI_EnterGroup); + addMenuItem(groupMenu, MI_ExitGroup); + } editMenu->addSeparator(); - addMenuItem(editMenu, MI_TouchGestureControl); + QMenu *arrangeMenu = editMenu->addMenu(tr("Arrange")); + { + addMenuItem(arrangeMenu, MI_BringToFront); + addMenuItem(arrangeMenu, MI_BringForward); + addMenuItem(arrangeMenu, MI_SendBack); + addMenuItem(arrangeMenu, MI_SendBackward); + } // Menu' SCAN CLEANUP #ifdef LINETEST @@ -1176,16 +1159,11 @@ QMenuBar *StackedMenuBar::createFullMenuBar() { #else QMenu *scanCleanupMenu = addMenu(tr("Scan && Cleanup"), fullMenuBar); #endif - addMenuItem(scanCleanupMenu, MI_DefineScanner); addMenuItem(scanCleanupMenu, MI_ScanSettings); addMenuItem(scanCleanupMenu, MI_Scan); addMenuItem(scanCleanupMenu, MI_SetScanCropbox); addMenuItem(scanCleanupMenu, MI_ResetScanCropbox); -#ifdef LINETEST - scanCleanupMenu->addSeparator(); - addMenuItem(scanCleanupMenu, MI_Autocenter); -#else scanCleanupMenu->addSeparator(); addMenuItem(scanCleanupMenu, MI_CleanupSettings); addMenuItem(scanCleanupMenu, MI_CleanupPreview); @@ -1193,33 +1171,63 @@ QMenuBar *StackedMenuBar::createFullMenuBar() { addMenuItem(scanCleanupMenu, MI_Cleanup); scanCleanupMenu->addSeparator(); addMenuItem(scanCleanupMenu, MI_PencilTest); +#ifdef LINETEST + scanCleanupMenu->addSeparator(); + addMenuItem(scanCleanupMenu, MI_Autocenter); #endif // Menu' LEVEL QMenu *levelMenu = addMenu(tr("Level"), fullMenuBar); + QMenu *newMenu = levelMenu->addMenu(tr("New")); + { + addMenuItem(newMenu, MI_NewLevel); + newMenu->addSeparator(); + addMenuItem(newMenu, MI_NewToonzRasterLevel); + addMenuItem(newMenu, MI_NewVectorLevel); + addMenuItem(newMenu, MI_NewRasterLevel); + addMenuItem(newMenu, MI_NewNoteLevel); + } + addMenuItem(levelMenu, MI_LoadLevel); + addMenuItem(levelMenu, MI_SaveLevel); + addMenuItem(levelMenu, MI_SaveLevelAs); + addMenuItem(levelMenu, MI_SaveAllLevels); + addMenuItem(levelMenu, MI_OpenRecentLevel); + addMenuItem(levelMenu, MI_ExportLevel); + levelMenu->addSeparator(); addMenuItem(levelMenu, MI_AddFrames); addMenuItem(levelMenu, MI_Renumber); addMenuItem(levelMenu, MI_ReplaceLevel); addMenuItem(levelMenu, MI_RevertToCleanedUp); addMenuItem(levelMenu, MI_RevertToLastSaved); - addMenuItem(levelMenu, MI_ConvertToVectors); - addMenuItem(levelMenu, MI_ConvertToToonzRaster); - addMenuItem(levelMenu, MI_ConvertVectorToVector); addMenuItem(levelMenu, MI_Tracking); levelMenu->addSeparator(); + QMenu *adjustMenu = levelMenu->addMenu(tr("Adjust")); + { + addMenuItem(adjustMenu, MI_BrightnessAndContrast); + addMenuItem(adjustMenu, MI_AdjustLevels); + addMenuItem(adjustMenu, MI_AdjustThickness); + addMenuItem(adjustMenu, MI_Antialias); + addMenuItem(adjustMenu, MI_Binarize); + addMenuItem(adjustMenu, MI_LinesFade); + } + QMenu *optimizeMenu = levelMenu->addMenu(tr("Optimize")); + { + addMenuItem(optimizeMenu, MI_RemoveEndpoints); + addMenuItem(optimizeMenu, MI_ConvertVectorToVector); + } + QMenu *convertMenu = levelMenu->addMenu(tr("Convert")); + { + addMenuItem(convertMenu, MI_ConvertToVectors); + addMenuItem(convertMenu, MI_ConvertToToonzRaster); + } + levelMenu->addSeparator(); addMenuItem(levelMenu, MI_ExposeResource); addMenuItem(levelMenu, MI_EditLevel); levelMenu->addSeparator(); + addMenuItem(levelMenu, MI_CanvasSize); addMenuItem(levelMenu, MI_LevelSettings); addMenuItem(levelMenu, MI_FileInfo); - levelMenu->addSeparator(); - addMenuItem(levelMenu, MI_AdjustLevels); - addMenuItem(levelMenu, MI_AdjustThickness); - addMenuItem(levelMenu, MI_Antialias); - addMenuItem(levelMenu, MI_Binarize); - addMenuItem(levelMenu, MI_BrightnessAndContrast); - addMenuItem(levelMenu, MI_CanvasSize); - addMenuItem(levelMenu, MI_LinesFade); + addMenuItem(levelMenu, MI_ReplaceParentDirectory); levelMenu->addSeparator(); addMenuItem(levelMenu, MI_RemoveUnused); #ifdef LINETEST @@ -1245,29 +1253,20 @@ QMenuBar *StackedMenuBar::createFullMenuBar() { addMenuItem(xsheetMenu, MI_MergeCmapped); xsheetMenu->addSeparator(); addMenuItem(xsheetMenu, MI_MergeColumns); - addMenuItem(xsheetMenu, MI_DeleteMatchLines); addMenuItem(xsheetMenu, MI_DeleteInk); xsheetMenu->addSeparator(); addMenuItem(xsheetMenu, MI_InsertFx); addMenuItem(xsheetMenu, MI_NewOutputFx); - addMenuItem(xsheetMenu, MI_NewNoteLevel); - addMenuItem(xsheetMenu, MI_RemoveEmptyColumns); xsheetMenu->addSeparator(); addMenuItem(xsheetMenu, MI_InsertSceneFrame); addMenuItem(xsheetMenu, MI_RemoveSceneFrame); addMenuItem(xsheetMenu, MI_InsertGlobalKeyframe); addMenuItem(xsheetMenu, MI_RemoveGlobalKeyframe); xsheetMenu->addSeparator(); - addMenuItem(xsheetMenu, MI_NextFrame); - addMenuItem(xsheetMenu, MI_PrevFrame); - addMenuItem(xsheetMenu, MI_FirstFrame); - addMenuItem(xsheetMenu, MI_LastFrame); - addMenuItem(xsheetMenu, MI_NextDrawing); - addMenuItem(xsheetMenu, MI_PrevDrawing); - addMenuItem(xsheetMenu, MI_NextStep); - addMenuItem(xsheetMenu, MI_PrevStep); addMenuItem(xsheetMenu, MI_LipSyncPopup); + xsheetMenu->addSeparator(); + addMenuItem(xsheetMenu, MI_RemoveEmptyColumns); // Menu' CELLS QMenu *cellsMenu = addMenu(tr("Cells"), fullMenuBar); @@ -1277,41 +1276,90 @@ QMenuBar *StackedMenuBar::createFullMenuBar() { addMenuItem(cellsMenu, MI_Increment); addMenuItem(cellsMenu, MI_Dup); cellsMenu->addSeparator(); - addMenuItem(cellsMenu, MI_ResetStep); - addMenuItem(cellsMenu, MI_IncreaseStep); - addMenuItem(cellsMenu, MI_DecreaseStep); - addMenuItem(cellsMenu, MI_Step2); - addMenuItem(cellsMenu, MI_Step3); - addMenuItem(cellsMenu, MI_Step4); - addMenuItem(cellsMenu, MI_Each2); - addMenuItem(cellsMenu, MI_Each3); - addMenuItem(cellsMenu, MI_Each4); + QMenu *reframeMenu = cellsMenu->addMenu(tr("Reframe")); + { + addMenuItem(reframeMenu, MI_Reframe1); + addMenuItem(reframeMenu, MI_Reframe2); + addMenuItem(reframeMenu, MI_Reframe3); + addMenuItem(reframeMenu, MI_Reframe4); + addMenuItem(reframeMenu, MI_ReframeWithEmptyInbetweens); + } + QMenu *stepMenu = cellsMenu->addMenu(tr("Step")); + { + addMenuItem(stepMenu, MI_IncreaseStep); + addMenuItem(stepMenu, MI_DecreaseStep); + addMenuItem(stepMenu, MI_ResetStep); + addMenuItem(stepMenu, MI_Step2); + addMenuItem(stepMenu, MI_Step3); + addMenuItem(stepMenu, MI_Step4); + } + QMenu *eachMenu = cellsMenu->addMenu(tr("Each")); + { + addMenuItem(eachMenu, MI_Each2); + addMenuItem(eachMenu, MI_Each3); + addMenuItem(eachMenu, MI_Each4); + } addMenuItem(cellsMenu, MI_Rollup); addMenuItem(cellsMenu, MI_Rolldown); addMenuItem(cellsMenu, MI_TimeStretch); - addMenuItem(cellsMenu, MI_FillEmptyCell); + addMenuItem(cellsMenu, MI_AutoInputCellNumber); cellsMenu->addSeparator(); - addMenuItem(cellsMenu, MI_DrawingSubForward); - addMenuItem(cellsMenu, MI_DrawingSubBackward); - addMenuItem(cellsMenu, MI_DrawingSubGroupForward); - addMenuItem(cellsMenu, MI_DrawingSubGroupBackward); + QMenu *drawingSubMenu = cellsMenu->addMenu(tr("Drawing Substitution")); + { + addMenuItem(drawingSubMenu, MI_DrawingSubForward); + addMenuItem(drawingSubMenu, MI_DrawingSubBackward); + addMenuItem(drawingSubMenu, MI_DrawingSubGroupForward); + addMenuItem(drawingSubMenu, MI_DrawingSubGroupBackward); + } cellsMenu->addSeparator(); addMenuItem(cellsMenu, MI_Autorenumber); addMenuItem(cellsMenu, MI_Duplicate); addMenuItem(cellsMenu, MI_MergeFrames); addMenuItem(cellsMenu, MI_CloneLevel); + cellsMenu->addSeparator(); + addMenuItem(cellsMenu, MI_FillEmptyCell); + + // Menu' PLAY + QMenu *playMenu = addMenu(tr("Play"), fullMenuBar); + addMenuItem(playMenu, MI_Play); + addMenuItem(playMenu, MI_Pause); + addMenuItem(playMenu, MI_Loop); + playMenu->addSeparator(); + addMenuItem(playMenu, MI_FirstFrame); + addMenuItem(playMenu, MI_LastFrame); + addMenuItem(playMenu, MI_PrevFrame); + addMenuItem(playMenu, MI_NextFrame); + addMenuItem(playMenu, MI_PrevStep); + addMenuItem(playMenu, MI_NextStep); + playMenu->addSeparator(); + addMenuItem(playMenu, MI_NextDrawing); + addMenuItem(playMenu, MI_PrevDrawing); + playMenu->addSeparator(); + addMenuItem(playMenu, MI_Link); + + // Menu' RENDER + QMenu *renderMenu = addMenu(tr("Render"), fullMenuBar); + addMenuItem(renderMenu, MI_PreviewSettings); + addMenuItem(renderMenu, MI_Preview); + // addMenuItem(renderMenu, MI_SavePreview); + addMenuItem(renderMenu, MI_SavePreviewedFrames); + renderMenu->addSeparator(); + addMenuItem(renderMenu, MI_OutputSettings); + addMenuItem(renderMenu, MI_Render); + renderMenu->addSeparator(); + addMenuItem(renderMenu, MI_FastRender); // Menu' VIEW QMenu *viewMenu = addMenu(tr("View"), fullMenuBar); - - addMenuItem(viewMenu, MI_ViewCamera); addMenuItem(viewMenu, MI_ViewTable); - addMenuItem(viewMenu, MI_FieldGuide); - addMenuItem(viewMenu, MI_SafeArea); - addMenuItem(viewMenu, MI_ViewBBox); + addMenuItem(viewMenu, MI_ViewCamera); addMenuItem(viewMenu, MI_ViewColorcard); - addMenuItem(viewMenu, MI_ViewGuide); + addMenuItem(viewMenu, MI_ViewBBox); + viewMenu->addSeparator(); + addMenuItem(viewMenu, MI_SafeArea); + addMenuItem(viewMenu, MI_FieldGuide); addMenuItem(viewMenu, MI_ViewRuler); + addMenuItem(viewMenu, MI_ViewGuide); viewMenu->addSeparator(); addMenuItem(viewMenu, MI_TCheck); addMenuItem(viewMenu, MI_ICheck); @@ -1328,55 +1376,70 @@ QMenuBar *StackedMenuBar::createFullMenuBar() { addMenuItem(viewMenu, MI_ResetShift); viewMenu->addSeparator(); addMenuItem(viewMenu, MI_RasterizePli); - viewMenu->addSeparator(); - addMenuItem(viewMenu, MI_Link); #ifdef LINETEST viewMenu->addSeparator(); addMenuItem(viewMenu, MI_CapturePanelFieldGuide); #endif // Menu' WINDOWS - QMenu *windowsMenu = addMenu(tr("Windows"), fullMenuBar); - addMenuItem(windowsMenu, MI_DockingCheck); + QMenu *windowsMenu = addMenu(tr("Windows"), fullMenuBar); + QMenu *workspaceMenu = windowsMenu->addMenu(tr("Workspace")); + { + addMenuItem(workspaceMenu, MI_DockingCheck); + workspaceMenu->addSeparator(); + addMenuItem(workspaceMenu, MI_ResetRoomLayout); + } + addMenuItem(windowsMenu, MI_OpenCommandToolbar); + addMenuItem(windowsMenu, MI_OpenToolbar); + addMenuItem(windowsMenu, MI_OpenToolOptionBar); windowsMenu->addSeparator(); - addMenuItem(windowsMenu, MI_OpenBatchServers); - addMenuItem(windowsMenu, MI_OpenCleanupSettings); + addMenuItem(windowsMenu, MI_OpenStyleControl); + addMenuItem(windowsMenu, MI_OpenPalette); + addMenuItem(windowsMenu, MI_OpenStudioPalette); addMenuItem(windowsMenu, MI_OpenColorModel); -#ifdef LINETEST - addMenuItem(windowsMenu, MI_OpenExport); -#endif - addMenuItem(windowsMenu, MI_OpenFileBrowser); + windowsMenu->addSeparator(); + addMenuItem(windowsMenu, MI_OpenComboViewer); + addMenuItem(windowsMenu, MI_OpenLevelView); addMenuItem(windowsMenu, MI_OpenFileViewer); + windowsMenu->addSeparator(); + addMenuItem(windowsMenu, MI_OpenXshView); + addMenuItem(windowsMenu, MI_OpenTimelineView); addMenuItem(windowsMenu, MI_OpenFunctionEditor); + addMenuItem(windowsMenu, MI_OpenSchematic); addMenuItem(windowsMenu, MI_OpenFilmStrip); -#ifdef LINETEST - addMenuItem(windowsMenu, MI_OpenLineTestCapture); - addMenuItem(windowsMenu, MI_OpenLineTestView); -#endif - addMenuItem(windowsMenu, MI_OpenPalette); + windowsMenu->addSeparator(); + addMenuItem(windowsMenu, MI_OpenFileBrowser); addMenuItem(windowsMenu, MI_OpenFileBrowser2); - addMenuItem(windowsMenu, MI_OpenSchematic); - addMenuItem(windowsMenu, MI_OpenStudioPalette); - addMenuItem(windowsMenu, MI_OpenStyleControl); + windowsMenu->addSeparator(); + addMenuItem(windowsMenu, MI_OpenCleanupSettings); addMenuItem(windowsMenu, MI_OpenTasks); + addMenuItem(windowsMenu, MI_OpenBatchServers); addMenuItem(windowsMenu, MI_OpenTMessage); - addMenuItem(windowsMenu, MI_OpenToolbar); - addMenuItem(windowsMenu, MI_OpenCommandToolbar); - addMenuItem(windowsMenu, MI_OpenToolOptionBar); - addMenuItem(windowsMenu, MI_OpenLevelView); - addMenuItem(windowsMenu, MI_OpenComboViewer); - addMenuItem(windowsMenu, MI_OpenXshView); - addMenuItem(windowsMenu, MI_OpenTimelineView); addMenuItem(windowsMenu, MI_OpenHistoryPanel); addMenuItem(windowsMenu, MI_AudioRecording); + addMenuItem(windowsMenu, MI_StartupPopup); +#ifdef LINETEST windowsMenu->addSeparator(); - addMenuItem(windowsMenu, MI_ResetRoomLayout); + addMenuItem(windowsMenu, MI_OpenExport); + addMenuItem(windowsMenu, MI_OpenLineTestCapture); + addMenuItem(windowsMenu, MI_OpenLineTestView); +#endif + windowsMenu->addSeparator(); + addMenuItem(windowsMenu, MI_MaximizePanel); + addMenuItem(windowsMenu, MI_FullScreenWindow); - //---Help Menu + // Menu' HELP QMenu *helpMenu = addMenu(tr("Help"), fullMenuBar); - addMenuItem(helpMenu, MI_StartupPopup); + addMenuItem(helpMenu, MI_OpenOnlineManual); + helpMenu->addSeparator(); addMenuItem(helpMenu, MI_About); +// addMenuItem(fileMenu, MI_TestAnimation); +// fileMenu->addSeparator(); +#ifndef NDEBUG + addMenuItem(fileMenu, "MI_ReloadStyle"); +#endif + return fullMenuBar; } diff --git a/toonz/sources/toonz/menubarcommandids.h b/toonz/sources/toonz/menubarcommandids.h index 996825b..c23f11a 100644 --- a/toonz/sources/toonz/menubarcommandids.h +++ b/toonz/sources/toonz/menubarcommandids.h @@ -344,4 +344,6 @@ #define MI_TouchGestureControl "MI_TouchGestureControl" #define MI_SeparateColors "MI_SeparateColors" +#define MI_OpenOnlineManual "MI_OpenOnlineManual" + #endif diff --git a/toonz/sources/toonz/outputsettingspopup.cpp b/toonz/sources/toonz/outputsettingspopup.cpp index 141c68a..a086e66 100644 --- a/toonz/sources/toonz/outputsettingspopup.cpp +++ b/toonz/sources/toonz/outputsettingspopup.cpp @@ -970,21 +970,24 @@ void OutputSettingsPopup::onNameChanged() { /*! Set current scene output format to new format set in popup field. */ void OutputSettingsPopup::onFormatChanged(const QString &str) { - // string ext = RenderController::instance()->format2ext(str.toStdString()); - // RenderController::instance()->setMovieExt(ext); - - TOutputProperties *prop = getProperties(); - TFilePath fp = prop->getPath().withType(str.toStdString()); + auto isMultiRenderInvalid = [](std::string ext) -> bool { + return ext == "mp4" || ext == "gif" || ext == "webm" || + ext == "spritesheet"; + }; + + TOutputProperties *prop = getProperties(); + bool wasMultiRenderInvalid = isMultiRenderInvalid(prop->getPath().getType()); + TFilePath fp = prop->getPath().withType(str.toStdString()); prop->setPath(fp); TApp::instance()->getCurrentScene()->setDirtyFlag(true); if (m_presetCombo) m_presetCombo->setCurrentIndex(0); - if (str == "mp4" || str == "gif" || str == "webm" || str == "spritesheet") { + if (isMultiRenderInvalid(str.toStdString())) { m_threadsComboOm->setDisabled(true); m_threadsComboOm->setCurrentIndex(0); } else { m_threadsComboOm->setDisabled(false); - m_threadsComboOm->setCurrentIndex(2); + if (wasMultiRenderInvalid) m_threadsComboOm->setCurrentIndex(2); } // clapperboard is only available with movie formats diff --git a/toonz/sources/toonz/pane.cpp b/toonz/sources/toonz/pane.cpp index 527644a..e3d08a2 100644 --- a/toonz/sources/toonz/pane.cpp +++ b/toonz/sources/toonz/pane.cpp @@ -6,6 +6,7 @@ #include "tapp.h" #include "mainwindow.h" #include "tenv.h" +#include "saveloadqsettings.h" #include "toonzqt/gutil.h" @@ -29,6 +30,7 @@ #include #include #include +#include extern TEnv::StringVar EnvSafeAreaName; @@ -60,7 +62,22 @@ TPanel::TPanel(QWidget *parent, Qt::WindowFlags flags, //----------------------------------------------------------------------------- -TPanel::~TPanel() {} +TPanel::~TPanel() { + // On quitting, save the floating panel's geomtry and state in order to + // restore them when opening the floating panel next time + if (isFloating()) { + TFilePath savePath = + ToonzFolder::getMyModuleDir() + TFilePath("popups.ini"); + QSettings settings(QString::fromStdWString(savePath.getWideString()), + QSettings::IniFormat); + settings.beginGroup("Panels"); + settings.beginGroup(QString::fromStdString(m_panelType)); + settings.setValue("geometry", geometry()); + if (SaveLoadQSettings *persistent = + dynamic_cast(widget())) + persistent->save(settings); + } +} //----------------------------------------------------------------------------- @@ -104,7 +121,7 @@ void TPanel::onCloseButtonPressed() { //----------------------------------------------------------------------------- /*! activate the panel and set focus specified widget when mouse enters -*/ + */ void TPanel::enterEvent(QEvent *event) { // Only when Toonz application is active if (qApp->activeWindow()) { @@ -120,9 +137,35 @@ void TPanel::enterEvent(QEvent *event) { //----------------------------------------------------------------------------- /*! clear focus when mouse leaves -*/ + */ void TPanel::leaveEvent(QEvent *event) { widgetClearFocusOnLeave(); } +//----------------------------------------------------------------------------- +/*! load and restore previous geometry and state of the floating panel. + called from the function OpenFloatingPanel::getOrOpenFloatingPanel() + in floatingpanelcommand.cpp +*/ +void TPanel::restoreFloatingPanelState() { + TFilePath savePath = ToonzFolder::getMyModuleDir() + TFilePath("popups.ini"); + QSettings settings(QString::fromStdWString(savePath.getWideString()), + QSettings::IniFormat); + settings.beginGroup("Panels"); + + if (!settings.childGroups().contains(QString::fromStdString(m_panelType))) + return; + + settings.beginGroup(QString::fromStdString(m_panelType)); + + QRect geom = settings.value("geometry", saveGeometry()).toRect(); + // check if it can be visible in the current screen + if (!(geom & QApplication::desktop()->availableGeometry(this)).isEmpty()) + setGeometry(geom); + // load optional settings + if (SaveLoadQSettings *persistent = + dynamic_cast(widget())) + persistent->load(settings); +} + //============================================================================= // TPanelTitleBarButton //----------------------------------------------------------------------------- @@ -181,9 +224,10 @@ void TPanelTitleBarButton::setPressed(bool pressed) { void TPanelTitleBarButton::paintEvent(QPaintEvent *event) { QPainter painter(this); - painter.drawPixmap( - 0, 0, m_pressed ? m_pressedPixmap : m_rollover ? m_rolloverPixmap - : m_standardPixmap); + painter.drawPixmap(0, 0, + m_pressed + ? m_pressedPixmap + : m_rollover ? m_rolloverPixmap : m_standardPixmap); painter.end(); } diff --git a/toonz/sources/toonz/pane.h b/toonz/sources/toonz/pane.h index 33f1697..333cd3d 100644 --- a/toonz/sources/toonz/pane.h +++ b/toonz/sources/toonz/pane.h @@ -55,7 +55,7 @@ signals: //----------------------------------------------------------------------------- /*! specialized button for sage area which enables to choose safe area size by * context menu -*/ + */ class TPanelTitleBarButtonForSafeArea final : public TPanelTitleBarButton { Q_OBJECT @@ -232,6 +232,8 @@ public: return false; }; + void restoreFloatingPanelState(); + protected: void paintEvent(QPaintEvent *) override; void enterEvent(QEvent *) override; diff --git a/toonz/sources/toonz/penciltestpopup.cpp b/toonz/sources/toonz/penciltestpopup.cpp index a24894e..47a6833 100644 --- a/toonz/sources/toonz/penciltestpopup.cpp +++ b/toonz/sources/toonz/penciltestpopup.cpp @@ -72,6 +72,9 @@ #include #include +#include +#include + #ifdef _WIN32 #include #endif @@ -174,7 +177,7 @@ inline void doPixBinary(QRgb* pix, int threshold) { gray = 255; else gray = 0; - *pix = qRgb(gray, gray, gray); + *pix = qRgb(gray, gray, gray); } //----------------------------------------------------------------------------- @@ -190,25 +193,26 @@ void onChange(QImage& img, int black, int white, float gamma, bool doGray) { std::vector lut(TPixel32::maxChannelValue + 1); my_compute_lut(black, white, gamma, lut); - int lx = img.width(), y, ly = img.height(); + int ly = img.height(); + // compute in multi thread + int threadCount = + std::max(1, QThreadPool::globalInstance()->maxThreadCount() / 2); + int tmpStart = 0; + for (int t = 0; t < threadCount; t++) { + int tmpEnd = (int)std::round((float)(ly * (t + 1)) / (float)threadCount); - if (doGray) { - for (y = 0; y < ly; ++y) { - QRgb *pix = (QRgb *)img.scanLine(y), *endPix = (QRgb *)(pix + lx); - while (pix < endPix) { - doPixGray(pix, lut); - ++pix; - } - } - } else { // color - for (y = 0; y < ly; ++y) { - QRgb *pix = (QRgb *)img.scanLine(y), *endPix = (QRgb *)(pix + lx); - while (pix < endPix) { - doPix(pix, lut); - ++pix; - } - } + QRunnable* task; + if (doGray) + task = new ApplyGrayLutTask(tmpStart, tmpEnd, img, lut); + else + task = new ApplyLutTask(tmpStart, tmpEnd, img, lut); + + QThreadPool::globalInstance()->start(task); + + tmpStart = tmpEnd; } + + QThreadPool::globalInstance()->waitForDone(); } //----------------------------------------------------------------------------- @@ -216,7 +220,7 @@ void onChange(QImage& img, int black, int white, float gamma, bool doGray) { void onChangeBW(QImage& img, int threshold) { int lx = img.width(), y, ly = img.height(); for (y = 0; y < ly; ++y) { - QRgb *pix = (QRgb *)img.scanLine(y), *endPix = (QRgb *)(pix + lx); + QRgb *pix = (QRgb*)img.scanLine(y), *endPix = (QRgb*)(pix + lx); while (pix < endPix) { doPixBinary(pix, threshold); ++pix; @@ -469,83 +473,421 @@ bool getRasterLevelSize(TXshLevel* level, TDimension& dim) { //============================================================================= -MyViewFinder::MyViewFinder(QWidget* parent) - : QFrame(parent) - , m_image(QImage()) - , m_camera(0) +void ApplyLutTask::run() { + int lx = m_img.width(); + for (int y = m_fromY; y < m_toY; ++y) { + QRgb *pix = (QRgb*)m_img.scanLine(y), *endPix = (QRgb*)(pix + lx); + while (pix < endPix) { + doPix(pix, m_lut); + ++pix; + } + } +} + +void ApplyGrayLutTask::run() { + int lx = m_img.width(); + for (int y = m_fromY; y < m_toY; ++y) { + QRgb *pix = (QRgb*)m_img.scanLine(y), *endPix = (QRgb*)(pix + lx); + while (pix < endPix) { + doPixGray(pix, m_lut); + ++pix; + } + } +} + +//============================================================================= + +MyVideoSurface::MyVideoSurface(QWidget* widget, QObject* parent) + : QAbstractVideoSurface(parent) + , m_widget(widget) + , m_imageFormat(QImage::Format_Invalid) {} + +QList MyVideoSurface::supportedPixelFormats( + QAbstractVideoBuffer::HandleType handleType) const { + if (handleType == QAbstractVideoBuffer::NoHandle) { + return QList() + << QVideoFrame::Format_RGB32 << QVideoFrame::Format_ARGB32 + << QVideoFrame::Format_ARGB32_Premultiplied + << QVideoFrame::Format_RGB565 << QVideoFrame::Format_RGB555; + } else { + return QList(); + } +} + +bool MyVideoSurface::isFormatSupported(const QVideoSurfaceFormat& format, + QVideoSurfaceFormat* similar) const { + Q_UNUSED(similar); + + const QImage::Format imageFormat = + QVideoFrame::imageFormatFromPixelFormat(format.pixelFormat()); + const QSize size = format.frameSize(); + + return imageFormat != QImage::Format_Invalid && !size.isEmpty() && + format.handleType() == QAbstractVideoBuffer::NoHandle; +} + +bool MyVideoSurface::start(const QVideoSurfaceFormat& format) { + const QImage::Format imageFormat = + QVideoFrame::imageFormatFromPixelFormat(format.pixelFormat()); + const QSize size = format.frameSize(); + + if (imageFormat != QImage::Format_Invalid && !size.isEmpty()) { + m_imageFormat = imageFormat; + m_imageSize = size; + m_sourceRect = format.viewport(); + + QAbstractVideoSurface::start(format); + + m_widget->updateGeometry(); + updateVideoRect(); + + return true; + } else { + return false; + } +} + +void MyVideoSurface::updateVideoRect() { + QSize size = surfaceFormat().sizeHint(); + size.scale(m_widget->size(), Qt::KeepAspectRatio); + + m_targetRect = QRect(QPoint(0, 0), size); + m_targetRect.moveCenter(m_widget->rect().center()); + + double scale = + (double)m_targetRect.width() / (double)surfaceFormat().sizeHint().width(); + m_S2V_Transform = + QTransform::fromTranslate(m_targetRect.left(), m_targetRect.top()) + .scale(scale, scale); +} + +bool MyVideoSurface::present(const QVideoFrame& frame) { + if (surfaceFormat().pixelFormat() != frame.pixelFormat() || + surfaceFormat().frameSize() != frame.size()) { + setError(IncorrectFormatError); + stop(); + return false; + } else { + m_currentFrame = frame; + + if (m_currentFrame.map(QAbstractVideoBuffer::ReadOnly)) { + QImage image = QImage(m_currentFrame.bits(), m_currentFrame.width(), + m_currentFrame.height(), + m_currentFrame.bytesPerLine(), m_imageFormat); + m_currentFrame.unmap(); + if (!image.isNull()) emit frameCaptured(image); + } + + return true; + } +} + +void MyVideoSurface::stop() { + m_currentFrame = QVideoFrame(); + m_targetRect = QRect(); + + QAbstractVideoSurface::stop(); + + m_widget->update(); +} + +//============================================================================= + +MyVideoWidget::MyVideoWidget(QWidget* parent) + : QWidget(parent) + , m_previousImage(QImage()) + , m_surface(0) , m_showOnionSkin(false) , m_onionOpacity(128) , m_upsideDown(false) - , m_countDownTime(0) {} + , m_countDownTime(0) + , m_subCameraRect(QRect()) { + setAutoFillBackground(false); + setAttribute(Qt::WA_NoSystemBackground, true); + setAttribute(Qt::WA_PaintOnScreen, true); -void MyViewFinder::paintEvent(QPaintEvent* event) { + QPalette palette = this->palette(); + palette.setColor(QPalette::Background, Qt::black); + setPalette(palette); + + setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + + m_surface = new MyVideoSurface(this); + setMouseTracking(true); +} + +MyVideoWidget::~MyVideoWidget() { delete m_surface; } + +QSize MyVideoWidget::sizeHint() const { + return m_surface->surfaceFormat().sizeHint(); +} + +void MyVideoWidget::paintEvent(QPaintEvent* event) { QPainter p(this); p.fillRect(rect(), Qt::black); - if (m_image.isNull()) { + if (m_surface->isActive()) { + const QRect videoRect = m_surface->videoRect(); + const QTransform oldTransform = p.transform(); + + if (m_upsideDown) { + p.translate(videoRect.center()); + p.rotate(180); + p.translate(-videoRect.center()); + } + if (m_surface->surfaceFormat().scanLineDirection() == + QVideoSurfaceFormat::BottomToTop) { + p.scale(1, -1); + p.translate(0, -height()); + } + + p.drawImage(videoRect, m_image, m_surface->sourceRect()); + + p.setTransform(oldTransform); + + if (m_showOnionSkin && m_onionOpacity > 0.0f && !m_previousImage.isNull() && + m_previousImage.size() == m_image.size()) { + p.setOpacity((qreal)m_onionOpacity / 255.0); + p.drawImage(videoRect, m_previousImage, m_surface->sourceRect()); + p.setOpacity(1.0); + } + + // draw subcamera + if (m_subCameraRect.isValid()) drawSubCamera(p); + + // draw countdown text + if (m_countDownTime > 0) { + QString str = + QTime::fromMSecsSinceStartOfDay(m_countDownTime).toString("s.zzz"); + p.setPen(Qt::yellow); + QFont font = p.font(); + font.setPixelSize(50); + p.setFont(font); + p.drawText(rect(), Qt::AlignRight | Qt::AlignBottom, str); + } + } else { p.setPen(Qt::white); QFont font = p.font(); font.setPixelSize(30); p.setFont(font); p.drawText(rect(), Qt::AlignCenter, tr("Camera is not available")); - return; } +} - p.save(); - - if (m_upsideDown) { - p.translate(m_imageRect.center()); - p.rotate(180); - p.translate(-m_imageRect.center()); +void MyVideoWidget::resizeEvent(QResizeEvent* event) { + QWidget::resizeEvent(event); + + m_surface->updateVideoRect(); +} + +void MyVideoWidget::setSubCameraSize(QSize size) { + QSize frameSize = m_surface->surfaceFormat().frameSize(); + assert(frameSize == size.expandedTo(frameSize)); + + m_subCameraRect.setSize(size); + // make sure the sub camera is inside of the frame + if (!QRect(QPoint(0, 0), frameSize).contains(m_subCameraRect)) + m_subCameraRect.moveCenter(QRect(QPoint(0, 0), frameSize).center()); + + update(); +} + +void MyVideoWidget::drawSubCamera(QPainter& p) { + auto drawSubFrameLine = [&](SUBHANDLE handle, QPoint from, QPoint to) { + p.setPen(QPen(handle == m_activeSubHandle ? Qt::green : Qt::magenta, 2)); + p.drawLine(from, to); + }; + + auto drawHandle = [&](SUBHANDLE handle, QPoint pos) { + p.setPen(handle == m_activeSubHandle ? Qt::green : Qt::magenta); + QRect handleRect(0, 0, 11, 11); + handleRect.moveCenter(pos); + p.drawRect(handleRect); + }; + + QRect vidSubRect = m_surface->transform().mapRect(m_subCameraRect); + p.setBrush(Qt::NoBrush); + drawSubFrameLine(HandleLeft, vidSubRect.topLeft(), vidSubRect.bottomLeft()); + drawSubFrameLine(HandleTop, vidSubRect.topLeft(), vidSubRect.topRight()); + drawSubFrameLine(HandleRight, vidSubRect.topRight(), + vidSubRect.bottomRight()); + drawSubFrameLine(HandleBottom, vidSubRect.bottomLeft(), + vidSubRect.bottomRight()); + + // draw handles + drawHandle(HandleTopLeft, vidSubRect.topLeft()); + drawHandle(HandleTopRight, vidSubRect.topRight()); + drawHandle(HandleBottomLeft, vidSubRect.bottomLeft()); + drawHandle(HandleBottomRight, vidSubRect.bottomRight()); +} + +void MyVideoWidget::mouseMoveEvent(QMouseEvent* event) { + int d = 10; + + auto isNearBy = [&](QPoint handlePos) -> bool { + return (handlePos - event->pos()).manhattanLength() <= d * 2; + }; + + auto isNearEdge = [&](int handlePos, int mousePos) -> bool { + return std::abs(handlePos - mousePos) <= d; + }; + + // if the sub camera is not active, do nothing and return + if (!m_surface->isActive() || m_subCameraRect.isNull()) return; + + // with no mouse button, update the active handles + if (event->buttons() == Qt::NoButton) { + QRect vidSubRect = m_surface->transform().mapRect(m_subCameraRect); + SUBHANDLE preHandle = m_activeSubHandle; + if (!vidSubRect.adjusted(-d, -d, d, d).contains(event->pos())) + m_activeSubHandle = HandleNone; + else if (vidSubRect.adjusted(d, d, -d, -d).contains(event->pos())) + m_activeSubHandle = HandleFrame; + else if (isNearBy(vidSubRect.topLeft())) + m_activeSubHandle = HandleTopLeft; + else if (isNearBy(vidSubRect.topRight())) + m_activeSubHandle = HandleTopRight; + else if (isNearBy(vidSubRect.bottomLeft())) + m_activeSubHandle = HandleBottomLeft; + else if (isNearBy(vidSubRect.bottomRight())) + m_activeSubHandle = HandleBottomRight; + else if (isNearEdge(vidSubRect.left(), event->pos().x())) + m_activeSubHandle = HandleLeft; + else if (isNearEdge(vidSubRect.top(), event->pos().y())) + m_activeSubHandle = HandleTop; + else if (isNearEdge(vidSubRect.right(), event->pos().x())) + m_activeSubHandle = HandleRight; + else if (isNearEdge(vidSubRect.bottom(), event->pos().y())) + m_activeSubHandle = HandleBottom; + else + m_activeSubHandle = HandleNone; + if (preHandle != m_activeSubHandle) { + Qt::CursorShape cursor; + if (m_activeSubHandle == HandleNone) + cursor = Qt::ArrowCursor; + else if (m_activeSubHandle == HandleFrame) + cursor = Qt::SizeAllCursor; + else if (m_activeSubHandle == HandleTopLeft || + m_activeSubHandle == HandleBottomRight) + cursor = Qt::SizeFDiagCursor; + else if (m_activeSubHandle == HandleTopRight || + m_activeSubHandle == HandleBottomLeft) + cursor = Qt::SizeBDiagCursor; + else if (m_activeSubHandle == HandleLeft || + m_activeSubHandle == HandleRight) + cursor = Qt::SplitHCursor; + else // if (m_activeSubHandle == HandleTop || m_activeSubHandle == + // HandleBottom) + cursor = Qt::SplitVCursor; + + setCursor(cursor); + update(); + } } + // if left button is pressed and some handle is active, transform the + // subcamera + else if (event->buttons() & Qt::LeftButton && + m_activeSubHandle != HandleNone && m_preSubCameraRect.isValid()) { + auto clampVal = [&](int& val, int min, int max) { + if (val < min) + val = min; + else if (val > max) + val = max; + }; + auto clampPoint = [&](QPoint& pos, int xmin, int xmax, int ymin, int ymax) { + clampVal(pos.rx(), xmin, xmax); + clampVal(pos.ry(), ymin, ymax); + }; + + int minimumSize = 100; + + QPoint offset = + m_surface->transform().inverted().map(event->pos()) - m_dragStartPos; + if (m_activeSubHandle >= HandleTopLeft && + m_activeSubHandle <= HandleBottomRight) { + QSize offsetSize = m_preSubCameraRect.size(); + if (m_activeSubHandle == HandleBottomLeft || + m_activeSubHandle == HandleTopRight) + offset.rx() *= -1; + offsetSize.scale(offset.x(), offset.y(), Qt::KeepAspectRatioByExpanding); + offset = QPoint(offsetSize.width(), offsetSize.height()); + if (m_activeSubHandle == HandleBottomLeft || + m_activeSubHandle == HandleTopRight) + offset.rx() *= -1; + } + QSize camSize = m_surface->surfaceFormat().sizeHint(); + + if (m_activeSubHandle == HandleFrame) { + clampPoint(offset, -m_preSubCameraRect.left(), + camSize.width() - m_preSubCameraRect.right(), + -m_preSubCameraRect.top(), + camSize.height() - m_preSubCameraRect.bottom()); + m_subCameraRect = m_preSubCameraRect.translated(offset); + } else { + if (m_activeSubHandle == HandleTopLeft || + m_activeSubHandle == HandleBottomLeft || + m_activeSubHandle == HandleLeft) { + clampVal(offset.rx(), -m_preSubCameraRect.left(), + m_preSubCameraRect.width() - minimumSize); + m_subCameraRect.setLeft(m_preSubCameraRect.left() + offset.x()); + } else if (m_activeSubHandle == HandleTopRight || + m_activeSubHandle == HandleBottomRight || + m_activeSubHandle == HandleRight) { + clampVal(offset.rx(), -m_preSubCameraRect.width() + minimumSize, + camSize.width() - m_preSubCameraRect.right()); + m_subCameraRect.setRight(m_preSubCameraRect.right() + offset.x()); + } - p.drawImage(m_imageRect, m_image); - - if (m_showOnionSkin && m_onionOpacity > 0.0f && !m_previousImage.isNull() && - m_previousImage.size() == m_image.size()) { - p.setCompositionMode(QPainter::CompositionMode_DestinationIn); - p.setPen(Qt::NoPen); - p.setBrush(QBrush(QColor(255, 255, 255, 255 - m_onionOpacity))); - p.drawRect(m_imageRect); - p.setCompositionMode(QPainter::CompositionMode_DestinationOver); - p.drawImage(m_imageRect, m_previousImage); - p.setCompositionMode(QPainter::CompositionMode_SourceOver); + if (m_activeSubHandle == HandleTopLeft || + m_activeSubHandle == HandleTopRight || + m_activeSubHandle == HandleTop) { + clampVal(offset.ry(), -m_preSubCameraRect.top(), + m_preSubCameraRect.height() - minimumSize); + m_subCameraRect.setTop(m_preSubCameraRect.top() + offset.y()); + } else if (m_activeSubHandle == HandleBottomRight || + m_activeSubHandle == HandleBottomLeft || + m_activeSubHandle == HandleBottom) { + clampVal(offset.ry(), -m_preSubCameraRect.height() + minimumSize, + camSize.height() - m_preSubCameraRect.bottom()); + m_subCameraRect.setBottom(m_preSubCameraRect.bottom() + offset.y()); + } + // if the sub camera size is changed, notify the parent for updating the + // fields + emit subCameraResized(true); + } + update(); } +} - p.restore(); +void MyVideoWidget::mousePressEvent(QMouseEvent* event) { + // if the sub camera is not active, do nothing and return + // use left button only and some handle must be active + if (!m_surface->isActive() || m_subCameraRect.isNull() || + event->button() != Qt::LeftButton || m_activeSubHandle == HandleNone) + return; - // draw countdown text - if (m_countDownTime > 0) { - QString str = - QTime::fromMSecsSinceStartOfDay(m_countDownTime).toString("s.zzz"); - p.setPen(Qt::yellow); - QFont font = p.font(); - font.setPixelSize(50); - p.setFont(font); - p.drawText(rect(), Qt::AlignRight | Qt::AlignBottom, str); - } -} + // record the original sub camera size + m_preSubCameraRect = m_subCameraRect; + m_dragStartPos = m_surface->transform().inverted().map(event->pos()); -void MyViewFinder::updateSize() { - if (!m_camera) return; - QSize cameraReso = m_camera->viewfinderSettings().resolution(); - double cameraAR = (double)cameraReso.width() / (double)cameraReso.height(); - // in case the camera aspect is wider than this widget - if (cameraAR >= (double)width() / (double)height()) { - m_imageRect.setWidth(width()); - m_imageRect.setHeight((int)((double)width() / cameraAR)); - m_imageRect.moveTo(0, (height() - m_imageRect.height()) / 2); - } - // in case the camera aspect is thinner than this widget - else { - m_imageRect.setHeight(height()); - m_imageRect.setWidth((int)((double)height() * cameraAR)); - m_imageRect.moveTo((width() - m_imageRect.width()) / 2, 0); - } + // temporary stop the camera + emit stopCamera(); } -void MyViewFinder::resizeEvent(QResizeEvent* event) { updateSize(); } +void MyVideoWidget::mouseReleaseEvent(QMouseEvent* event) { + // if the sub camera is not active, do nothing and return + // use left button only and some handle must be active + if (!m_surface->isActive() || m_subCameraRect.isNull() || + event->button() != Qt::LeftButton || m_activeSubHandle == HandleNone) + return; + + m_preSubCameraRect = QRect(); + if (m_activeSubHandle != HandleFrame) emit subCameraResized(false); + + // restart the camera + emit startCamera(); +} //============================================================================= @@ -608,7 +950,14 @@ int FrameNumberLineEdit::getValue() { //----------------------------------------------------------------------------- +void FrameNumberLineEdit::focusInEvent(QFocusEvent* e) { + m_textOnFocusIn = text(); +} + void FrameNumberLineEdit::focusOutEvent(QFocusEvent* e) { + // if the field is empty, then revert the last input + if (text().isEmpty()) setText(m_textOnFocusIn); + LineEdit::focusOutEvent(e); } @@ -907,7 +1256,7 @@ QString formatString(QString inStr, int charNum) { } return numStr.rightJustified(charNum, '0') + postStr; } -}; +}; // namespace void PencilTestSaveInFolderPopup::updateSubFolderName() { if (!m_autoSubNameCB->isChecked()) return; @@ -1077,11 +1426,10 @@ void PencilTestSaveInFolderPopup::updateParentFolder() { PencilTestPopup::PencilTestPopup() // set the parent 0 in order to enable the popup behind the main window - : Dialog(0, false, false, "PencilTest"), - m_currentCamera(NULL), - m_cameraImageCapture(NULL), - m_captureWhiteBGCue(false), - m_captureCue(false) { + : Dialog(0, false, false, "PencilTest") + , m_currentCamera(NULL) + , m_captureWhiteBGCue(false) + , m_captureCue(false) { setWindowTitle(tr("Camera Capture")); // add maximize button to the dialog @@ -1089,17 +1437,9 @@ PencilTestPopup::PencilTestPopup() layout()->setSizeConstraint(QLayout::SetNoConstraint); - std::wstring dateTime = - QDateTime::currentDateTime().toString("yyMMddhhmmss").toStdWString(); - TFilePath cacheImageFp = ToonzFolder::getCacheRootFolder() + - TFilePath(L"penciltest" + dateTime + L".jpg"); - m_cacheImagePath = cacheImageFp.getQString(); - m_saveInFolderPopup = new PencilTestSaveInFolderPopup(this); - m_cameraViewfinder = new MyViewFinder(this); - // CameraViewfinderContainer* cvfContainer = new - // CameraViewfinderContainer(m_cameraViewfinder, this); + m_videoWidget = new MyVideoWidget(this); m_cameraListCombo = new QComboBox(this); QPushButton* refreshCamListButton = new QPushButton(tr("Refresh"), this); @@ -1156,6 +1496,12 @@ PencilTestPopup::PencilTestPopup() QPushButton* subfolderButton = new QPushButton(tr("Subfolder"), this); + // subcamera + m_subcameraButton = new QPushButton(tr("Subcamera"), this); + m_subWidthFld = new IntLineEdit(this); + m_subHeightFld = new IntLineEdit(this); + QWidget* subCamWidget = new QWidget(this); + #ifdef MACOSX m_dummyViewFinder = new QCameraViewfinder(this); m_dummyViewFinder->hide(); @@ -1223,6 +1569,12 @@ PencilTestPopup::PencilTestPopup() m_saveInFolderPopup->hide(); + m_subcameraButton->setObjectName("SubcameraButton"); + m_subcameraButton->setIconSize(QSize(15, 15)); + m_subcameraButton->setCheckable(true); + m_subcameraButton->setChecked(false); + subCamWidget->setHidden(true); + //---- layout ---- m_topLayout->setMargin(10); m_topLayout->setSpacing(10); @@ -1243,6 +1595,20 @@ PencilTestPopup::PencilTestPopup() camLay->addWidget(m_captureFilterSettingsBtn); } + camLay->addSpacing(10); + camLay->addWidget(m_subcameraButton, 0); + QHBoxLayout* subCamLay = new QHBoxLayout(); + subCamLay->setMargin(0); + subCamLay->setSpacing(3); + { + subCamLay->addWidget(m_subWidthFld, 0); + subCamLay->addWidget(new QLabel("x", this), 0); + subCamLay->addWidget(m_subHeightFld, 0); + subCamLay->addStretch(0); + } + subCamWidget->setLayout(subCamLay); + camLay->addWidget(subCamWidget, 0); + camLay->addStretch(0); camLay->addSpacing(15); camLay->addWidget(new QLabel(tr("Save In:"), this), 0); @@ -1257,7 +1623,7 @@ PencilTestPopup::PencilTestPopup() bottomLay->setMargin(0); bottomLay->setSpacing(10); { - bottomLay->addWidget(m_cameraViewfinder, 1); + bottomLay->addWidget(m_videoWidget, 1); QVBoxLayout* rightLay = new QVBoxLayout(); rightLay->setMargin(0); @@ -1355,7 +1721,6 @@ PencilTestPopup::PencilTestPopup() } displayLay->setColumnStretch(0, 0); displayLay->setColumnStretch(1, 1); - // displayLay->setColumnStretch(2, 1); displayFrame->setLayout(displayLay); rightLay->addWidget(displayFrame); @@ -1391,7 +1756,7 @@ PencilTestPopup::PencilTestPopup() bool ret = true; ret = ret && connect(refreshCamListButton, SIGNAL(pressed()), this, SLOT(refreshCameraList())); - ret = ret && connect(m_cameraListCombo, SIGNAL(activated(int)), this, + ret = ret && connect(m_cameraListCombo, SIGNAL(activated(int)), this, SLOT(onCameraListComboActivated(int))); ret = ret && connect(m_resolutionCombo, SIGNAL(activated(const QString&)), this, SLOT(onResolutionComboActivated(const QString&))); @@ -1413,8 +1778,8 @@ PencilTestPopup::PencilTestPopup() SLOT(onLoadImageButtonPressed())); ret = ret && connect(m_onionOpacityFld, SIGNAL(valueEditedByHand()), this, SLOT(onOnionOpacityFldEdited())); - ret = ret && connect(m_upsideDownCB, SIGNAL(toggled(bool)), - m_cameraViewfinder, SLOT(onUpsideDownChecked(bool))); + ret = ret && connect(m_upsideDownCB, SIGNAL(toggled(bool)), m_videoWidget, + SLOT(onUpsideDownChecked(bool))); ret = ret && connect(m_timerCB, SIGNAL(toggled(bool)), this, SLOT(onTimerCBToggled(bool))); ret = ret && connect(m_captureTimer, SIGNAL(timeout()), this, @@ -1436,6 +1801,25 @@ PencilTestPopup::PencilTestPopup() SLOT(refreshFrameInfo())); ret = ret && connect(m_frameNumberEdit, SIGNAL(editingFinished()), this, SLOT(refreshFrameInfo())); + + // sub camera + ret = ret && connect(m_subcameraButton, SIGNAL(toggled(bool)), this, + SLOT(onSubCameraToggled(bool))); + ret = ret && connect(m_subcameraButton, SIGNAL(toggled(bool)), subCamWidget, + SLOT(setVisible(bool))); + ret = ret && connect(m_subWidthFld, SIGNAL(editingFinished()), this, + SLOT(onSubCameraSizeEdited())); + ret = ret && connect(m_subHeightFld, SIGNAL(editingFinished()), this, + SLOT(onSubCameraSizeEdited())); + ret = ret && connect(m_videoWidget, &MyVideoWidget::startCamera, [&]() { + if (m_currentCamera) m_currentCamera->start(); + }); + ret = ret && connect(m_videoWidget, &MyVideoWidget::stopCamera, [&]() { + if (m_currentCamera) m_currentCamera->stop(); + }); + ret = ret && connect(m_videoWidget, SIGNAL(subCameraResized(bool)), this, + SLOT(onSubCameraResized(bool))); + assert(ret); refreshCameraList(); @@ -1450,7 +1834,7 @@ PencilTestPopup::PencilTestPopup() QString resStr = QString::fromStdString(CamCapCameraResolution.getValue()); if (m_currentCamera && !resStr.isEmpty()) { int startupResolutionIndex = m_resolutionCombo->findText(resStr); - if (startupResolutionIndex > 0) { + if (startupResolutionIndex >= 0) { m_resolutionCombo->setCurrentIndex(startupResolutionIndex); onResolutionComboActivated(resStr); } @@ -1469,9 +1853,6 @@ PencilTestPopup::~PencilTestPopup() { m_currentCamera->unload(); delete m_currentCamera; } - // remove the cache image, if it exists - TFilePath fp(m_cacheImagePath); - if (TFileStatus(fp).doesExist()) TSystem::deleteFile(fp); } //----------------------------------------------------------------------------- @@ -1507,14 +1888,7 @@ void PencilTestPopup::onCameraListComboActivated(int comboIndex) { // if selected the non-connected state, then disconnect the current camera if (comboIndex == 0) { - m_cameraViewfinder->setCamera(NULL); - if (m_cameraImageCapture) { - disconnect(m_cameraImageCapture, - SIGNAL(imageCaptured(int, const QImage&)), this, - SLOT(onImageCaptured(int, const QImage&))); - delete m_cameraImageCapture; - m_cameraImageCapture = NULL; - } + m_videoWidget->videoSurface()->stop(); if (m_currentCamera) { if (m_currentCamera->state() == QCamera::ActiveState) m_currentCamera->stop(); @@ -1522,7 +1896,7 @@ void PencilTestPopup::onCameraListComboActivated(int comboIndex) { m_currentCamera->unload(); } m_deviceName = QString(); - m_cameraViewfinder->setImage(QImage()); + m_videoWidget->setImage(QImage()); // update env CamCapCameraName = ""; return; @@ -1533,29 +1907,15 @@ void PencilTestPopup::onCameraListComboActivated(int comboIndex) { if (cameras.at(index).deviceName() == m_deviceName) return; QCamera* oldCamera = m_currentCamera; - m_currentCamera = new QCamera(cameras.at(index), this); - m_deviceName = cameras.at(index).deviceName(); - if (m_cameraImageCapture) { - disconnect(m_cameraImageCapture, SIGNAL(imageCaptured(int, const QImage&)), - this, SLOT(onImageCaptured(int, const QImage&))); - delete m_cameraImageCapture; - } + if (oldCamera) m_videoWidget->videoSurface()->stop(); + m_currentCamera = new QCamera(cameras.at(index), this); + m_deviceName = cameras.at(index).deviceName(); #ifdef MACOSX // this line is needed only in macosx m_currentCamera->setViewfinder(m_dummyViewFinder); #endif - m_cameraImageCapture = new QCameraImageCapture(m_currentCamera, this); - /* Capturing to buffer currently seems not to be supported on Windows */ - // if - // (!m_cameraImageCapture->isCaptureDestinationSupported(QCameraImageCapture::CaptureToBuffer)) - // std::cout << "it does not support CaptureToBuffer" << std::endl; - m_cameraImageCapture->setCaptureDestination( - QCameraImageCapture::CaptureToBuffer); - connect(m_cameraImageCapture, SIGNAL(imageCaptured(int, const QImage&)), this, - SLOT(onImageCaptured(int, const QImage&))); - // loading new camera m_currentCamera->load(); @@ -1573,14 +1933,10 @@ void PencilTestPopup::onCameraListComboActivated(int comboIndex) { QCameraViewfinderSettings settings = m_currentCamera->viewfinderSettings(); settings.setResolution(sizes.last()); m_currentCamera->setViewfinderSettings(settings); - QImageEncoderSettings imageEncoderSettings; - imageEncoderSettings.setCodec("image/jpeg"); - imageEncoderSettings.setQuality(QMultimedia::NormalQuality); - imageEncoderSettings.setResolution(sizes.last()); - m_cameraImageCapture->setEncodingSettings(imageEncoderSettings); } - m_cameraViewfinder->setCamera(m_currentCamera); - m_cameraViewfinder->updateSize(); + m_currentCamera->setViewfinder(m_videoWidget->videoSurface()); + m_videoWidget->videoSurface()->start( + m_videoWidget->videoSurface()->surfaceFormat()); // deleting old camera if (oldCamera) { @@ -1589,7 +1945,7 @@ void PencilTestPopup::onCameraListComboActivated(int comboIndex) { } // start new camera m_currentCamera->start(); - m_cameraViewfinder->setImage(QImage()); + m_videoWidget->setImage(QImage()); // update env CamCapCameraName = m_cameraListCombo->itemText(comboIndex).toStdString(); @@ -1610,12 +1966,6 @@ void PencilTestPopup::onResolutionComboActivated(const QString& itemText) { QSize newResolution(texts[0].toInt(), texts[2].toInt()); settings.setResolution(newResolution); m_currentCamera->setViewfinderSettings(settings); - QImageEncoderSettings imageEncoderSettings; - imageEncoderSettings.setCodec("image/jpeg"); - imageEncoderSettings.setQuality(QMultimedia::NormalQuality); - imageEncoderSettings.setResolution(newResolution); - m_cameraImageCapture->setEncodingSettings(imageEncoderSettings); - m_cameraViewfinder->updateSize(); #ifdef MACOSX m_dummyViewFinder->resize(newResolution); @@ -1626,12 +1976,35 @@ void PencilTestPopup::onResolutionComboActivated(const QString& itemText) { m_bgReductionFld->setDisabled(true); m_currentCamera->start(); - m_cameraViewfinder->setImage(QImage()); + m_videoWidget->setImage(QImage()); // update env CamCapCameraResolution = itemText.toStdString(); refreshFrameInfo(); + + // reset subcamera info + m_subcameraButton->setChecked(false); // this will hide the size fields + m_subWidthFld->setRange(10, newResolution.width()); + m_subHeightFld->setRange(10, newResolution.height()); + // if there is no existing level or its size is larger than the current camera + if (!m_allowedCameraSize.isValid() || + m_allowedCameraSize.width() > newResolution.width() || + m_allowedCameraSize.height() > newResolution.height()) { + // make the initial subcamera size to be with the same aspect ratio as the + // current camera + TCamera* camera = + TApp::instance()->getCurrentScene()->getScene()->getCurrentCamera(); + TDimension camres = camera->getRes(); + newResolution = + QSize(camres.lx, camres.ly).scaled(newResolution, Qt::KeepAspectRatio); + // newResolution.scale(QSize(res.lx, res.ly), Qt::KeepAspectRatio); + m_subWidthFld->setValue(newResolution.width()); + m_subHeightFld->setValue(newResolution.height()); + } else { + m_subWidthFld->setValue(m_allowedCameraSize.width()); + m_subHeightFld->setValue(m_allowedCameraSize.height()); + } } //----------------------------------------------------------------------------- @@ -1768,8 +2141,8 @@ void PencilTestPopup::onColorTypeComboChanged(int index) { //----------------------------------------------------------------------------- -void PencilTestPopup::onImageCaptured(int id, const QImage& image) { - if (!m_cameraViewfinder) return; +void PencilTestPopup::onFrameCaptured(QImage& image) { + if (!m_videoWidget || image.isNull()) return; // capture the white BG if (m_captureWhiteBGCue) { m_whiteBGImg = image.copy(); @@ -1777,14 +2150,23 @@ void PencilTestPopup::onImageCaptured(int id, const QImage& image) { m_bgReductionFld->setEnabled(true); } - QImage procImg = image.copy(); - processImage(procImg); - m_cameraViewfinder->setImage(procImg); + processImage(image); + m_videoWidget->setImage(image.copy()); if (m_captureCue) { + m_currentCamera->stop(); + m_captureCue = false; - if (importImage(procImg)) { - m_cameraViewfinder->setPreviousImage(procImg); + + bool scanBtoT = + m_videoWidget->videoSurface()->surfaceFormat().scanLineDirection() == + QVideoSurfaceFormat::BottomToTop; + bool upsideDown = m_upsideDownCB->isChecked(); + + image = image.mirrored(upsideDown, upsideDown != scanBtoT); + + if (importImage(image)) { + m_videoWidget->setPreviousImage(image); if (Preferences::instance()->isShowFrameNumberWithLettersEnabled()) { int f = m_frameNumberEdit->getValue(); if (f % 10 == 0) // next number @@ -1812,28 +2194,15 @@ void PencilTestPopup::onImageCaptured(int id, const QImage& image) { m_captureButton->setChecked(false); onCaptureButtonClicked(false); } - } -} - -//----------------------------------------------------------------------------- - -void PencilTestPopup::timerEvent(QTimerEvent* event) { - if (!m_currentCamera || !m_cameraImageCapture || - !m_cameraImageCapture->isAvailable() || - !m_cameraImageCapture->isReadyForCapture()) - return; - m_currentCamera->setCaptureMode(QCamera::CaptureStillImage); - m_currentCamera->start(); - m_currentCamera->searchAndLock(); - m_cameraImageCapture->capture(m_cacheImagePath); - m_currentCamera->unlock(); + m_currentCamera->start(); + } } //----------------------------------------------------------------------------- void PencilTestPopup::showEvent(QShowEvent* event) { - m_timerId = startTimer(10); + // m_timerId = startTimer(10); // if there is another action of which "return" key is assigned as short cut // key, @@ -1841,6 +2210,9 @@ void PencilTestPopup::showEvent(QShowEvent* event) { QAction* action = CommandManager::instance()->getActionFromShortcut("Return"); if (action) action->setShortcut(QKeySequence("")); + connect(m_videoWidget->videoSurface(), SIGNAL(frameCaptured(QImage&)), this, + SLOT(onFrameCaptured(QImage&))); + // reload camera if (m_currentCamera) { if (m_currentCamera->state() == QCamera::UnloadedState) @@ -1852,18 +2224,22 @@ void PencilTestPopup::showEvent(QShowEvent* event) { TSceneHandle* sceneHandle = TApp::instance()->getCurrentScene(); connect(sceneHandle, SIGNAL(sceneSwitched()), this, SLOT(onSceneSwitched())); connect(sceneHandle, SIGNAL(castChanged()), this, SLOT(refreshFrameInfo())); + + bool tmp_alwaysOverwrite = m_alwaysOverwrite; onSceneSwitched(); + m_alwaysOverwrite = tmp_alwaysOverwrite; } //----------------------------------------------------------------------------- void PencilTestPopup::hideEvent(QHideEvent* event) { - killTimer(m_timerId); - // set back the "return" short cut key QAction* action = CommandManager::instance()->getActionFromShortcut("Return"); if (action) action->setShortcut(QKeySequence("Return")); + disconnect(m_videoWidget->videoSurface(), SIGNAL(frameCaptured(QImage&)), + this, SLOT(onFrameCaptured(QImage&))); + // stop interval timer if it is active if (m_timerCB->isChecked() && m_captureButton->isChecked()) { m_captureButton->setChecked(false); @@ -1890,7 +2266,8 @@ void PencilTestPopup::hideEvent(QHideEvent* event) { void PencilTestPopup::keyPressEvent(QKeyEvent* event) { // override return (or enter) key as shortcut key for capturing - if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) { + int key = event->key(); + if (key == Qt::Key_Return || key == Qt::Key_Enter) { // show button-clicking animation followed by calling // onCaptureButtonClicked() m_captureButton->animateClick(); @@ -1901,10 +2278,26 @@ void PencilTestPopup::keyPressEvent(QKeyEvent* event) { //----------------------------------------------------------------------------- +bool PencilTestPopup::event(QEvent* event) { + if (event->type() == QEvent::ShortcutOverride) { + QKeyEvent* ke = static_cast(event); + int key = ke->key(); + if (key >= Qt::Key_0 && key <= Qt::Key_9) { + if (!m_frameNumberEdit->hasFocus()) { + m_frameNumberEdit->setFocus(); + m_frameNumberEdit->clear(); + } + event->accept(); + return true; + } + } + return DVGui::Dialog::event(event); +} +//----------------------------------------------------------------------------- + void PencilTestPopup::processImage(QImage& image) { /* "upside down" is not executed here. It will be done when capturing the * image */ - // white bg reduction if (!m_whiteBGImg.isNull() && m_bgReductionFld->getValue() != 0) { bgReduction(image, m_whiteBGImg, m_bgReductionFld->getValue()); @@ -1917,7 +2310,9 @@ void PencilTestPopup::processImage(QImage& image) { int black, white; float gamma; m_camCapLevelControl->getValues(black, white, gamma); - onChange(image, black, white, gamma, m_colorTypeCombo->currentIndex() != 0); + if (black != 0 || white != 255 || gamma != 1.0) + onChange(image, black, white, gamma, + m_colorTypeCombo->currentIndex() != 0); } else { onChangeBW(image, m_camCapLevelControl->getThreshold()); } @@ -1932,7 +2327,7 @@ void PencilTestPopup::onCaptureWhiteBGButtonPressed() { //----------------------------------------------------------------------------- void PencilTestPopup::onOnionCBToggled(bool on) { - m_cameraViewfinder->setShowOnionSkin(on); + m_videoWidget->setShowOnionSkin(on); m_onionOpacityFld->setEnabled(on); } @@ -1994,13 +2389,8 @@ void PencilTestPopup::onLoadImageButtonPressed() { QImage qi2(qi.size(), QImage::Format_ARGB32); qi2.fill(QColor(Qt::white).rgb()); QPainter painter(&qi2); - if (m_upsideDownCB->isChecked()) { - painter.translate(m_lx / 2, m_ly / 2); - painter.rotate(180); - painter.translate(-m_lx / 2, -m_ly / 2); - } painter.drawImage(0, 0, qi); - m_cameraViewfinder->setPreviousImage(qi2); + m_videoWidget->setPreviousImage(qi2); m_onionSkinCB->setChecked(true); free(buffer); } @@ -2010,7 +2400,7 @@ void PencilTestPopup::onLoadImageButtonPressed() { void PencilTestPopup::onOnionOpacityFldEdited() { int value = (int)(255.0f * (float)m_onionOpacityFld->getValue() / 100.0f); - m_cameraViewfinder->setOnionOpacity(value); + m_videoWidget->setOnionOpacity(value); } //----------------------------------------------------------------------------- @@ -2042,7 +2432,7 @@ void PencilTestPopup::onCaptureButtonClicked(bool on) { m_captureTimer->stop(); m_countdownTimer->stop(); // hide the count down text - m_cameraViewfinder->showCountDownTime(0); + m_videoWidget->showCountDownTime(0); } } // capture immediately @@ -2057,14 +2447,14 @@ void PencilTestPopup::onCaptureTimerTimeout() { m_captureCue = true; } //----------------------------------------------------------------------------- void PencilTestPopup::onCountDown() { - m_cameraViewfinder->showCountDownTime( + m_videoWidget->showCountDownTime( m_captureTimer->isActive() ? m_captureTimer->remainingTime() : 0); } //----------------------------------------------------------------------------- /*! referenced from LevelCreatePopup::apply() -*/ -bool PencilTestPopup::importImage(QImage& image) { + */ +bool PencilTestPopup::importImage(QImage image) { TApp* app = TApp::instance(); ToonzScene* scene = app->getCurrentScene()->getScene(); TXsheet* xsh = scene->getXsheet(); @@ -2105,6 +2495,11 @@ bool PencilTestPopup::importImage(QImage& image) { TXshLevel* level = scene->getLevelSet()->getLevel(levelName); enum State { NEWLEVEL = 0, ADDFRAME, OVERWRITE } state; + // retrieve subcamera image + if (m_subcameraButton->isChecked() && + m_videoWidget->subCameraRect().isValid()) + image = image.copy(m_videoWidget->subCameraRect()); + /* if the level already exists in the scene cast */ if (level) { /* if the existing level is not a raster level, then return */ @@ -2132,11 +2527,16 @@ bool PencilTestPopup::importImage(QImage& image) { /* if the level already have the same frame, then ask if overwrite it */ TFilePath frameFp(actualLevelFp.withFrame(frameNumber)); if (TFileStatus(frameFp).doesExist()) { - QString question = tr("File %1 does exist.\nDo you want to overwrite it?") - .arg(toQString(frameFp)); - int ret = DVGui::MsgBox(question, QObject::tr("Overwrite"), - QObject::tr("Cancel")); - if (ret == 0 || ret == 2) return false; + if (!m_alwaysOverwrite) { + QString question = + tr("File %1 does exist.\nDo you want to overwrite it?") + .arg(toQString(frameFp)); + int ret = DVGui::MsgBox(question, QObject::tr("Overwrite"), + QObject::tr("Always Overwrite in This Scene"), + QObject::tr("Cancel")); + if (ret == 0 || ret == 3) return false; + if (ret == 2) m_alwaysOverwrite = true; + } state = OVERWRITE; } else state = ADDFRAME; @@ -2153,9 +2553,8 @@ bool PencilTestPopup::importImage(QImage& image) { /* if the loaded level does not match in pixel size, then return */ sl = level->getSimpleLevel(); - if (!sl || - sl->getProperties()->getImageRes() != - TDimension(image.width(), image.height())) { + if (!sl || sl->getProperties()->getImageRes() != + TDimension(image.width(), image.height())) { error(tr( "The captured image size does not match with the existing level.")); return false; @@ -2164,24 +2563,44 @@ bool PencilTestPopup::importImage(QImage& image) { /* confirm overwrite */ TFilePath frameFp(actualLevelFp.withFrame(frameNumber)); if (TFileStatus(frameFp).doesExist()) { - QString question = - tr("File %1 does exist.\nDo you want to overwrite it?") - .arg(toQString(frameFp)); - int ret = DVGui::MsgBox(question, QObject::tr("Overwrite"), - QObject::tr("Cancel")); - if (ret == 0 || ret == 2) return false; + if (!m_alwaysOverwrite) { + QString question = + tr("File %1 does exist.\nDo you want to overwrite it?") + .arg(toQString(frameFp)); + int ret = DVGui::MsgBox(question, QObject::tr("Overwrite"), + QObject::tr("Always Overwrite in This Scene"), + QObject::tr("Cancel")); + if (ret == 0 || ret == 3) return false; + if (ret == 2) m_alwaysOverwrite = true; + } } } /* if the file does not exist, then create a new level */ else { TXshLevel* level = scene->createNewLevel(OVL_XSHLEVEL, levelName, TDimension(), 0, levelFp); - sl = level->getSimpleLevel(); + sl = level->getSimpleLevel(); sl->setPath(levelFp, true); sl->getProperties()->setDpiPolicy(LevelProperties::DP_CustomDpi); - TPointD currentCamDpi = getCurrentCameraDpi(); - sl->getProperties()->setDpi(currentCamDpi.x); - sl->getProperties()->setImageDpi(currentCamDpi); + TPointD dpi; + // if the subcamera is not active or the pixel unit is used, apply the + // current camera dpi + if (!m_subcameraButton->isChecked() || + !m_videoWidget->subCameraRect().isValid() || + Preferences::instance()->getPixelsOnly()) + dpi = getCurrentCameraDpi(); + // if the subcamera is active, compute the dpi so that the image will fit + // to the camera frame + else { + TCamera* camera = + TApp::instance()->getCurrentScene()->getScene()->getCurrentCamera(); + TDimensionD size = camera->getSize(); + double minimumDpi = + std::min(image.width() / size.lx, image.height() / size.ly); + dpi = TPointD(minimumDpi, minimumDpi); + } + sl->getProperties()->setDpi(dpi.x); + sl->getProperties()->setImageDpi(dpi); sl->getProperties()->setImageRes( TDimension(image.width(), image.height())); } @@ -2193,9 +2612,8 @@ bool PencilTestPopup::importImage(QImage& image) { TPointD levelDpi = sl->getDpi(); /* create the raster */ TRaster32P raster(image.width(), image.height()); - convertImageToRaster(raster, (m_upsideDownCB->isChecked()) - ? image - : image.mirrored(true, true)); + convertImageToRaster(raster, image.mirrored(true, true)); + TRasterImageP ri(raster); ri->setDpi(levelDpi.x, levelDpi.y); /* setting the frame */ @@ -2321,9 +2739,14 @@ void PencilTestPopup::refreshFrameInfo() { std::wstring levelName = m_levelNameEdit->text().toStdWString(); int frameNumber = m_frameNumberEdit->getValue(); - QStringList texts = m_resolutionCombo->currentText().split(' '); - if (texts.size() != 3) return; - TDimension camRes(texts[0].toInt(), texts[2].toInt()); + TDimension camRes; + if (m_subcameraButton->isChecked()) + camRes = TDimension(m_subWidthFld->getValue(), m_subHeightFld->getValue()); + else { + QStringList texts = m_resolutionCombo->currentText().split(' '); + if (texts.size() != 3) return; + camRes = TDimension(texts[0].toInt(), texts[2].toInt()); + } bool letterOptionEnabled = Preferences::instance()->isShowFrameNumberWithLettersEnabled(); @@ -2345,9 +2768,12 @@ void PencilTestPopup::refreshFrameInfo() { // frame existence TFilePath frameFp(actualLevelFp.withFrame(frameNumber)); - bool frameExist = false; + bool frameExist = false; if (levelExist) frameExist = TFileStatus(frameFp).doesExist(); + // reset acceptable camera size + m_allowedCameraSize = QSize(); + // ### CASE 1 ### // If there is no same level registered in the scene cast if (!level_sameName && !level_samePath) { @@ -2430,6 +2856,7 @@ void PencilTestPopup::refreshFrameInfo() { else labelStr += tr(" %1 frames").arg(frameCount); } + m_allowedCameraSize = QSize(dim.lx, dim.ly); } // If no level exists in the file system, then it will be a new level else { @@ -2500,6 +2927,7 @@ void PencilTestPopup::refreshFrameInfo() { else labelStr += tr(" %1 frames").arg(frameCount); } + m_allowedCameraSize = QSize(dim.lx, dim.ly); } // ### CASE 3 ### // If there are some conflicts with the existing level. @@ -2519,6 +2947,7 @@ void PencilTestPopup::refreshFrameInfo() { "with the same name is is %1 x %2.") .arg(dim.lx) .arg(dim.ly); + m_allowedCameraSize = QSize(dim.lx, dim.ly); } if (level_samePath) { std::wstring anotherName = level_samePath->getName(); @@ -2536,6 +2965,7 @@ void PencilTestPopup::refreshFrameInfo() { "with the same path is %1 x %2.") .arg(dim.lx) .arg(dim.ly); + m_allowedCameraSize = QSize(dim.lx, dim.ly); } labelStr += tr("WARNING"); infoType = WARNING; @@ -2564,6 +2994,34 @@ void PencilTestPopup::onSceneSwitched() { m_saveInFolderPopup->updateParentFolder(); m_saveInFileFld->setPath(m_saveInFolderPopup->getParentPath()); refreshFrameInfo(); + m_alwaysOverwrite = false; +} + +//----------------------------------------------------------------------------- + +void PencilTestPopup::onSubCameraToggled(bool on) { + m_videoWidget->setSubCameraSize( + on ? QSize(m_subWidthFld->getValue(), m_subHeightFld->getValue()) + : QSize()); + refreshFrameInfo(); +} + +//----------------------------------------------------------------------------- + +void PencilTestPopup::onSubCameraResized(bool isDragging) { + QSize subSize = m_videoWidget->subCameraRect().size(); + assert(subSize.isValid()); + m_subWidthFld->setValue(subSize.width()); + m_subHeightFld->setValue(subSize.height()); + if (!isDragging) refreshFrameInfo(); +} + +//----------------------------------------------------------------------------- + +void PencilTestPopup::onSubCameraSizeEdited() { + m_videoWidget->setSubCameraSize( + QSize(m_subWidthFld->getValue(), m_subHeightFld->getValue())); + refreshFrameInfo(); } //----------------------------------------------------------------------------- diff --git a/toonz/sources/toonz/penciltestpopup.h b/toonz/sources/toonz/penciltestpopup.h index 0ebee84..235393f 100644 --- a/toonz/sources/toonz/penciltestpopup.h +++ b/toonz/sources/toonz/penciltestpopup.h @@ -7,7 +7,8 @@ #include "toonzqt/lineedit.h" #include "toonz/namebuilder.h" -#include +#include +#include // forward decl. class QCamera; @@ -30,51 +31,149 @@ class QCameraViewfinder; namespace DVGui { class FileField; class IntField; -} +class IntLineEdit; +} // namespace DVGui class CameraCaptureLevelControl; +class ApplyLutTask : public QRunnable { +protected: + int m_fromY, m_toY; + QImage& m_img; + std::vector& m_lut; + +public: + ApplyLutTask(int from, int to, QImage& img, std::vector& lut) + : m_fromY(from), m_toY(to), m_img(img), m_lut(lut) {} + +private: + virtual void run() override; +}; + +class ApplyGrayLutTask : public ApplyLutTask { +public: + ApplyGrayLutTask(int from, int to, QImage& img, std::vector& lut) + : ApplyLutTask(from, to, img, lut) {} + +private: + void run() override; +}; + +//============================================================================= +// MyVideoSurface +//----------------------------------------------------------------------------- + +class QVideoSurfaceFormat; +class MyVideoSurface : public QAbstractVideoSurface { + Q_OBJECT +public: + MyVideoSurface(QWidget* widget, QObject* parent = 0); + + QList supportedPixelFormats( + QAbstractVideoBuffer::HandleType handleType = + QAbstractVideoBuffer::NoHandle) const; + bool isFormatSupported(const QVideoSurfaceFormat& format, + QVideoSurfaceFormat* similar) const; + + bool start(const QVideoSurfaceFormat& format); + void stop(); + + bool present(const QVideoFrame& frame); + + QRect videoRect() const { return m_targetRect; } + QRect sourceRect() const { return m_sourceRect; } + void updateVideoRect(); + + QTransform transform() { return m_S2V_Transform; } + +private: + QWidget* m_widget; + QImage::Format m_imageFormat; + QRect m_targetRect; + QSize m_imageSize; + QRect m_sourceRect; + QVideoFrame m_currentFrame; + + QTransform m_S2V_Transform; // surface to video transform + +signals: + void frameCaptured(QImage& image); +}; + //============================================================================= -// MyViewFinder +// MyVideoWidget //----------------------------------------------------------------------------- -class MyViewFinder : public QFrame { +class MyVideoWidget : public QWidget { Q_OBJECT QImage m_image; QImage m_previousImage; - QCamera* m_camera; - QRect m_imageRect; - int m_countDownTime; - bool m_showOnionSkin; int m_onionOpacity; bool m_upsideDown; + QRect m_subCameraRect; + QRect m_preSubCameraRect; + QPoint m_dragStartPos; + + enum SUBHANDLE { + HandleNone, + HandleFrame, + HandleTopLeft, + HandleTopRight, + HandleBottomLeft, + HandleBottomRight, + HandleLeft, + HandleTop, + HandleRight, + HandleBottom + } m_activeSubHandle = HandleNone; + void drawSubCamera(QPainter&); + public: - MyViewFinder(QWidget* parent = 0); + MyVideoWidget(QWidget* parent = 0); + ~MyVideoWidget(); + void setImage(const QImage& image) { m_image = image; update(); } - void setCamera(QCamera* camera) { m_camera = camera; } + QAbstractVideoSurface* videoSurface() const { return m_surface; } + + QSize sizeHint() const; + void setShowOnionSkin(bool on) { m_showOnionSkin = on; } void setOnionOpacity(int value) { m_onionOpacity = value; } - void setPreviousImage(QImage& prevImage) { m_previousImage = prevImage; } + void setPreviousImage(QImage prevImage) { m_previousImage = prevImage; } void showCountDownTime(int time) { m_countDownTime = time; repaint(); } - void updateSize(); + void setSubCameraSize(QSize size); + QRect subCameraRect() { return m_subCameraRect; } protected: - void paintEvent(QPaintEvent* event); - void resizeEvent(QResizeEvent* event); + void paintEvent(QPaintEvent* event) override; + void resizeEvent(QResizeEvent* event) override; + + void mouseMoveEvent(QMouseEvent* event) override; + void mousePressEvent(QMouseEvent* event) override; + void mouseReleaseEvent(QMouseEvent* event) override; + +private: + MyVideoSurface* m_surface; + protected slots: void onUpsideDownChecked(bool on) { m_upsideDown = on; } + +signals: + void startCamera(); + void stopCamera(); + void subCameraResized(bool isDragging); }; //============================================================================= @@ -91,6 +190,7 @@ class FrameNumberLineEdit : public DVGui::LineEdit { QRegExpValidator* m_regexpValidator; void updateValidator(); + QString m_textOnFocusIn; public: FrameNumberLineEdit(QWidget* parent = 0, int value = 1); @@ -104,6 +204,7 @@ public: protected: /*! If focus is lost and current text value is out of range emit signal \b editingFinished.*/ + void focusInEvent(QFocusEvent*) override; void focusOutEvent(QFocusEvent*) override; void showEvent(QShowEvent* event) override { updateValidator(); } }; @@ -182,8 +283,7 @@ class PencilTestPopup : public DVGui::Dialog { QCamera* m_currentCamera; QString m_deviceName; - MyViewFinder* m_cameraViewfinder; - QCameraImageCapture* m_cameraImageCapture; + MyVideoWidget* m_videoWidget; QComboBox *m_cameraListCombo, *m_resolutionCombo, *m_fileTypeCombo, *m_colorTypeCombo; @@ -210,17 +310,20 @@ class PencilTestPopup : public DVGui::Dialog { QToolButton* m_previousLevelButton; + QPushButton* m_subcameraButton; + DVGui::IntLineEdit *m_subWidthFld, *m_subHeightFld; + QSize m_allowedCameraSize; + #ifdef MACOSX QCameraViewfinder* m_dummyViewFinder; #endif - int m_timerId; - QString m_cacheImagePath; bool m_captureWhiteBGCue; bool m_captureCue; + bool m_alwaysOverwrite = false; void processImage(QImage& procImage); - bool importImage(QImage& image); + bool importImage(QImage image); void setToNextNewLevel(); void updateLevelNameAndFrame(std::wstring levelName); @@ -230,12 +333,12 @@ public: ~PencilTestPopup(); protected: - void timerEvent(QTimerEvent* event); void showEvent(QShowEvent* event); void hideEvent(QHideEvent* event); - void keyPressEvent(QKeyEvent* event); + bool event(QEvent* e) override; + protected slots: void refreshCameraList(); void onCameraListComboActivated(int index); @@ -245,7 +348,7 @@ protected slots: void onNextName(); void onPreviousName(); void onColorTypeComboChanged(int index); - void onImageCaptured(int, const QImage&); + void onFrameCaptured(QImage& image); void onCaptureWhiteBGButtonPressed(); void onOnionCBToggled(bool); void onLoadImageButtonPressed(); @@ -262,6 +365,10 @@ protected slots: void onSaveInPathEdited(); void onSceneSwitched(); + void onSubCameraToggled(bool); + void onSubCameraResized(bool isDragging); + void onSubCameraSizeEdited(); + public slots: void openSaveInFolderPopup(); }; diff --git a/toonz/sources/toonz/preferencespopup.cpp b/toonz/sources/toonz/preferencespopup.cpp index 99df555..ea30610 100644 --- a/toonz/sources/toonz/preferencespopup.cpp +++ b/toonz/sources/toonz/preferencespopup.cpp @@ -260,10 +260,10 @@ void PreferencesPopup::onPixelsOnlyChanged(int index) { QString tempUnit; int unitIndex; tempUnit = m_pref->getOldUnits(); - unitIndex = m_unitOm->findText(tempUnit); + unitIndex = std::find(::units, ::units + ::unitsCount, tempUnit) - ::units; m_unitOm->setCurrentIndex(unitIndex); tempUnit = m_pref->getOldCameraUnits(); - unitIndex = m_cameraUnitOm->findText(tempUnit); + unitIndex = std::find(::units, ::units + ::unitsCount, tempUnit) - ::units; m_cameraUnitOm->setCurrentIndex(unitIndex); m_unitOm->setDisabled(false); m_cameraUnitOm->setDisabled(false); @@ -381,7 +381,7 @@ void PreferencesPopup::onInterfaceFontChanged(int index) { QString oldTypeface = m_interfaceFontStyle->currentText(); rebuilldFontStyleList(); if (!oldTypeface.isEmpty()) { - int newIndex = m_interfaceFontStyle->findText(oldTypeface); + int newIndex = m_interfaceFontStyle->findText(oldTypeface); if (newIndex < 0) newIndex = 0; m_interfaceFontStyle->setCurrentIndex(newIndex); } @@ -504,7 +504,7 @@ void PreferencesPopup::onTranspCheckDataChanged(const TPixel32 &, void PreferencesPopup::onOnionDataChanged(const TPixel32 &, bool isDragging) { if (isDragging) return; - bool inksOnly = false; + bool inksOnly = false; if (m_inksOnly) inksOnly = m_inksOnly->isChecked(); m_pref->setOnionData(m_frontOnionColor->getColor(), m_backOnionColor->getColor(), inksOnly); @@ -517,7 +517,7 @@ void PreferencesPopup::onOnionDataChanged(const TPixel32 &, bool isDragging) { //----------------------------------------------------------------------------- void PreferencesPopup::onOnionDataChanged(int) { - bool inksOnly = false; + bool inksOnly = false; if (m_inksOnly) inksOnly = m_inksOnly->isChecked(); m_pref->setOnionData(m_frontOnionColor->getColor(), m_backOnionColor->getColor(), inksOnly); @@ -927,8 +927,14 @@ void PreferencesPopup::onLineTestFpsCapture(int index) { //----------------------------------------------------------------------------- -void PreferencesPopup::onLevelsBackupChanged(int index) { - m_pref->enableLevelsBackup(index == Qt::Checked); +void PreferencesPopup::onBackupChanged(bool enabled) { + m_pref->enableBackup(enabled); +} + +//----------------------------------------------------------------------------- + +void PreferencesPopup::onBackupKeepCountChanged() { + m_pref->setBackupKeepCount(m_backupKeepCount->getValue()); } //----------------------------------------------------------------------------- @@ -1240,6 +1246,20 @@ void PreferencesPopup::onCurrentColumnDataChanged(const TPixel32 &, //--------------------------------------------------------------------------------------- +void PreferencesPopup::onEnableTouchGesturesChanged(int index) { + QAction *action = + CommandManager::instance()->getAction(MI_TouchGestureControl); + action->setChecked(index == Qt::Checked); +} + +//--------------------------------------------------------------------------------------- + +void PreferencesPopup::onEnableTouchGesturesTriggered(bool checked) { + m_enableTouchGestures->setChecked(checked); +} + +//--------------------------------------------------------------------------------------- + void PreferencesPopup::onEnableWinInkChanged(int index) { m_pref->enableWinInk(index == Qt::Checked); } @@ -1270,10 +1290,10 @@ PreferencesPopup::PreferencesPopup() , m_inksOnly(0) , m_blanksCount(0) , m_blankColor(0) { - bool showTabletSettings = false; + bool winInkAvailable = false; #ifdef _WIN32 - showTabletSettings = KisTabletSupportWin8::isAvailable(); + winInkAvailable = KisTabletSupportWin8::isAvailable(); #endif setWindowTitle(tr("Preferences")); @@ -1306,7 +1326,10 @@ PreferencesPopup::PreferencesPopup() m_undoMemorySize = new DVGui::IntLineEdit(this, m_pref->getUndoMemorySize(), 0, 2000); - m_levelsBackup = new CheckBox(tr("Backup Animation Levels when Saving")); + m_backup = new QGroupBox(tr("Backup Scene and Animation Levels when Saving")); + m_backup->setCheckable(true); + m_backupKeepCount = + new DVGui::IntLineEdit(this, m_pref->getBackupKeepCount(), 1); m_chunkSizeFld = new DVGui::IntLineEdit(this, m_pref->getDefaultTaskChunkSize(), 1, 2000); CheckBox *sceneNumberingCB = new CheckBox(tr("Show Info in Rendered Frames")); @@ -1620,9 +1643,13 @@ PreferencesPopup::PreferencesPopup() QLabel *note_tablet; //--- Tablet Settings ------------------------------ - if (showTabletSettings) { - categoryList->addItem(tr("Tablet Settings")); + categoryList->addItem(tr("Touch/Tablet Settings")); + + m_enableTouchGestures = + new DVGui::CheckBox(tr("Enable Touch Gesture Controls")); + + if (winInkAvailable) { m_enableWinInk = new DVGui::CheckBox(tr("Enable Windows Ink Support* (EXPERIMENTAL)")); @@ -1646,7 +1673,7 @@ PreferencesPopup::PreferencesPopup() replaceAfterSaveLevelAsCB->setChecked( m_pref->isReplaceAfterSaveLevelAsEnabled()); - m_levelsBackup->setChecked(m_pref->isLevelsBackupEnabled()); + m_backup->setChecked(m_pref->isBackupEnabled()); sceneNumberingCB->setChecked(m_pref->isSceneNumberingEnabled()); watchFileSystemCB->setChecked(m_pref->isWatchFileSystemEnabled()); @@ -1961,7 +1988,11 @@ PreferencesPopup::PreferencesPopup() checkForTheLatestVersionCB->setChecked(m_pref->isLatestVersionCheckEnabled()); //--- Tablet Settings ------------------------------ - if (showTabletSettings) m_enableWinInk->setChecked(m_pref->isWinInkEnabled()); + m_enableTouchGestures->setChecked(CommandManager::instance() + ->getAction(MI_TouchGestureControl) + ->isChecked()); + + if (winInkAvailable) m_enableWinInk->setChecked(m_pref->isWinInkEnabled()); /*--- layout ---*/ @@ -2035,8 +2066,24 @@ PreferencesPopup::PreferencesPopup() generalFrameLay->addWidget(replaceAfterSaveLevelAsCB, 0, Qt::AlignLeft | Qt::AlignVCenter); - generalFrameLay->addWidget(m_levelsBackup, 0, - Qt::AlignLeft | Qt::AlignVCenter); + + QVBoxLayout *backupLay = new QVBoxLayout(); + backupLay->setMargin(10); + { + QHBoxLayout *backupCountLay = new QHBoxLayout(); + backupCountLay->setMargin(0); + backupCountLay->setSpacing(5); + { + backupCountLay->addWidget( + new QLabel(tr("# of backups to keep: "), this)); + backupCountLay->addWidget(m_backupKeepCount, 0); + backupCountLay->addStretch(1); + } + backupLay->addLayout(backupCountLay, 0); + } + m_backup->setLayout(backupLay); + generalFrameLay->addWidget(m_backup); + generalFrameLay->addWidget(sceneNumberingCB, 0, Qt::AlignLeft | Qt::AlignVCenter); generalFrameLay->addWidget(watchFileSystemCB, 0, @@ -2739,21 +2786,23 @@ PreferencesPopup::PreferencesPopup() stackedWidget->addWidget(versionControlBox); //--- Tablet Settings -------------------------- - if (showTabletSettings) { - QWidget *tabletSettingsBox = new QWidget(this); - QVBoxLayout *tsLay = new QVBoxLayout(); - tsLay->setMargin(15); - tsLay->setSpacing(10); - { + QWidget *tabletSettingsBox = new QWidget(this); + QVBoxLayout *tsLay = new QVBoxLayout(); + tsLay->setMargin(15); + tsLay->setSpacing(10); + { + tsLay->addWidget(m_enableTouchGestures, 0, + Qt::AlignLeft | Qt::AlignVCenter); + + if (winInkAvailable) tsLay->addWidget(m_enableWinInk, 0, Qt::AlignLeft | Qt::AlignVCenter); - tsLay->addStretch(1); + tsLay->addStretch(1); - tsLay->addWidget(note_tablet, 0); - } - tabletSettingsBox->setLayout(tsLay); - stackedWidget->addWidget(tabletSettingsBox); + if (winInkAvailable) tsLay->addWidget(note_tablet, 0); } + tabletSettingsBox->setLayout(tsLay); + stackedWidget->addWidget(tabletSettingsBox); mainLayout->addWidget(stackedWidget, 1); } @@ -2790,8 +2839,10 @@ PreferencesPopup::PreferencesPopup() SLOT(onDragCellsBehaviourChanged(int))); ret = ret && connect(m_undoMemorySize, SIGNAL(editingFinished()), SLOT(onUndoMemorySizeChanged())); - ret = ret && connect(m_levelsBackup, SIGNAL(stateChanged(int)), - SLOT(onLevelsBackupChanged(int))); + ret = ret && + connect(m_backup, SIGNAL(toggled(bool)), SLOT(onBackupChanged(bool))); + ret = ret && connect(m_backupKeepCount, SIGNAL(editingFinished()), this, + SLOT(onBackupKeepCountChanged())); ret = ret && connect(sceneNumberingCB, SIGNAL(stateChanged(int)), SLOT(onSceneNumberingChanged(int))); ret = ret && connect(watchFileSystemCB, SIGNAL(stateChanged(int)), @@ -3092,8 +3143,16 @@ PreferencesPopup::PreferencesPopup() ret = ret && connect(checkForTheLatestVersionCB, SIGNAL(clicked(bool)), SLOT(onCheckLatestVersionChanged(bool))); - //--- Tablet Settings ---------------------- - if (showTabletSettings) + //--- Touch/Tablet Settings ---------------------- + ret = ret && connect(m_enableTouchGestures, SIGNAL(stateChanged(int)), + SLOT(onEnableTouchGesturesChanged(int))); + + QAction *action = + CommandManager::instance()->getAction(MI_TouchGestureControl); + ret = ret && connect(action, SIGNAL(triggered(bool)), + SLOT(onEnableTouchGesturesTriggered(bool))); + + if (winInkAvailable) ret = ret && connect(m_enableWinInk, SIGNAL(stateChanged(int)), SLOT(onEnableWinInkChanged(int))); diff --git a/toonz/sources/toonz/preferencespopup.h b/toonz/sources/toonz/preferencespopup.h index 577a929..ebd9955 100644 --- a/toonz/sources/toonz/preferencespopup.h +++ b/toonz/sources/toonz/preferencespopup.h @@ -71,19 +71,19 @@ private: DVGui::IntLineEdit *m_minuteFld, *m_chunkSizeFld, *m_iconSizeLx, *m_iconSizeLy, *m_viewShrink, *m_viewStep, *m_blanksCount, *m_onionPaperThickness, *m_animationStepField, *m_undoMemorySize, - *m_xsheetStep, *m_ffmpegTimeout; + *m_xsheetStep, *m_ffmpegTimeout, *m_backupKeepCount; QPushButton *m_addLevelFormat, *m_removeLevelFormat, *m_editLevelFormat; - DVGui::CheckBox *m_inksOnly, *m_enableVersionControl, *m_levelsBackup, - *m_onionSkinVisibility, *m_pixelsOnlyCB, *m_projectRootDocuments, - *m_projectRootDesktop, *m_projectRootCustom, *m_projectRootStuff, - *m_onionSkinDuringPlayback, *m_autoSaveSceneCB, *m_autoSaveOtherFilesCB, + DVGui::CheckBox *m_inksOnly, *m_enableVersionControl, *m_onionSkinVisibility, + *m_pixelsOnlyCB, *m_projectRootDocuments, *m_projectRootDesktop, + *m_projectRootCustom, *m_projectRootStuff, *m_onionSkinDuringPlayback, + *m_autoSaveSceneCB, *m_autoSaveOtherFilesCB, *m_useNumpadForSwitchingStyles, *m_expandFunctionHeader, *m_useHigherDpiOnVectorSimplifyCB, *m_keepFillOnVectorSimplifyCB, *m_newLevelToCameraSizeCB, *m_ignoreImageDpiCB, *m_syncLevelRenumberWithXsheet, *m_downArrowInLevelStripCreatesNewFrame, - *m_enableAutoStretch, *m_enableWinInk, + *m_enableAutoStretch, *m_enableWinInk, *m_enableTouchGestures, *m_useOnionColorsForShiftAndTraceCB; DVGui::FileField *m_customProjectRootFileField; @@ -91,7 +91,8 @@ private: DVGui::FileField *m_ffmpegPathFileFld, *m_fastRenderPathFileField, *m_lutPathFileField; - QGroupBox *m_autoSaveGroup, *m_showXSheetToolbar, *m_colorCalibration; + QGroupBox *m_autoSaveGroup, *m_showXSheetToolbar, *m_colorCalibration, + *m_backup; DVGui::ColorField *m_currentColumnColor; @@ -148,7 +149,7 @@ private slots: void onSVNEnabledChanged(int); void onAutomaticSVNRefreshChanged(int); void onDragCellsBehaviourChanged(int); - void onLevelsBackupChanged(int); + void onBackupChanged(bool enabled); void onSceneNumberingChanged(int); void onChunkSizeChanged(); void onDefLevelTypeChanged(int); @@ -220,8 +221,11 @@ private slots: void onCursorBrushStyleChanged(int index); void onCursorOutlineChanged(int); void onCurrentColumnDataChanged(const TPixel32 &, bool isDragging); + void onEnableTouchGesturesChanged(int index); + void onEnableTouchGesturesTriggered(bool checked); void onEnableWinInkChanged(int index); void onRasterBackgroundColorChanged(const TPixel32 &, bool isDragging); + void onBackupKeepCountChanged(); void onLevelBasedToolsDisplayChanged(int); }; diff --git a/toonz/sources/toonz/previewer.cpp b/toonz/sources/toonz/previewer.cpp index 264f959..6ace624 100644 --- a/toonz/sources/toonz/previewer.cpp +++ b/toonz/sources/toonz/previewer.cpp @@ -115,7 +115,7 @@ void buildNodeTreeDescription(std::string &desc, const TFxP &root); inline bool contains(const QRegion ®ion, const TRect &rect) { return QRegion(toQRect(rect)).subtracted(region).isEmpty(); } -} +} // namespace //====================================================================================== // Internal classes declaration @@ -384,7 +384,7 @@ void Previewer::Imp::updateFrameRange() { // Resize the progress bar status int i, oldSize = m_pbStatus.size(); m_pbStatus.resize(newFrameCount); - for (i = oldSize; i < newFrameCount; ++i) + for (i = oldSize; i < newFrameCount; ++i) m_pbStatus[i] = FlipSlider::PBFrameNotStarted; } @@ -466,10 +466,9 @@ void Previewer::Imp::updateAliases() { std::string newAlias = fxPair.m_frameA ? fxPair.m_frameA->getAlias(it->first, m_renderSettings) : ""; - newAlias = - newAlias + (fxPair.m_frameB - ? fxPair.m_frameB->getAlias(it->first, m_renderSettings) - : ""); + newAlias = newAlias + (fxPair.m_frameB ? fxPair.m_frameB->getAlias( + it->first, m_renderSettings) + : ""); if (newAlias != it->second.m_alias) { // Clear the remaining frame infos @@ -484,16 +483,14 @@ void Previewer::Imp::updateAliasKeyword(const std::string &keyword) { std::map::iterator it; for (it = m_frames.begin(); it != m_frames.end(); ++it) { if (it->second.m_alias.find(keyword) != std::string::npos) { - TFxPair fxPair = buildSceneFx(it->first); - it->second.m_alias = - fxPair.m_frameA - ? fxPair.m_frameA->getAlias(it->first, m_renderSettings) - : ""; - it->second.m_alias = - it->second.m_alias + - (fxPair.m_frameB - ? fxPair.m_frameB->getAlias(it->first, m_renderSettings) - : ""); + TFxPair fxPair = buildSceneFx(it->first); + it->second.m_alias = fxPair.m_frameA ? fxPair.m_frameA->getAlias( + it->first, m_renderSettings) + : ""; + it->second.m_alias = it->second.m_alias + + (fxPair.m_frameB ? fxPair.m_frameB->getAlias( + it->first, m_renderSettings) + : ""); // Clear the remaining frame infos it->second.m_renderedRegion = QRegion(); @@ -818,8 +815,9 @@ class SavePreviewedPopup final : public FileBrowserPopup { Previewer *m_p; public: - SavePreviewedPopup() : FileBrowserPopup(tr("Save Previewed Images")) { - setOkText(tr("Save")); + SavePreviewedPopup() + : FileBrowserPopup(QObject::tr("Save Previewed Images")) { + setOkText(QObject::tr("Save")); } void setPreview(Previewer *p) { m_p = p; } @@ -856,14 +854,14 @@ bool Previewer::Imp::doSaveRenderedFrames(TFilePath fp) { fp = fp.withType(ext); } if (fp.getName() == "") { - DVGui::warning( - tr("The file name cannot be empty or contain any of the following " - "characters:(new line) \\ / : * ? \" |")); + DVGui::warning(QObject::tr( + "The file name cannot be empty or contain any of the following " + "characters:(new line) \\ / : * ? \" |")); return false; } if (!formats.contains(QString::fromStdString(ext))) { - DVGui::warning("Unsopporter raster format, cannot save"); + DVGui::warning(QObject::tr("Unsopporter raster format, cannot save")); return false; } @@ -882,18 +880,22 @@ bool Previewer::Imp::doSaveRenderedFrames(TFilePath fp) { TSystem::mkDir(parent); DvDirModel::instance()->refreshFolder(parent.getParentDir()); } catch (TException &e) { - error("Cannot create " + toQString(fp.getParentDir()) + " : " + - QString(::to_string(e.getMessage()).c_str())); + error(QObject::tr("Cannot create %1 : %2", + "Previewer warning %1:path %2:message") + .arg(toQString(fp.getParentDir())) + .arg(QString(::to_string(e.getMessage()).c_str()))); return false; } catch (...) { - error("Cannot create " + toQString(fp.getParentDir())); + error(QObject::tr("Cannot create %1", "Previewer warning %1:path") + .arg(toQString(fp.getParentDir()))); return false; } } if (TSystem::doesExistFileOrLevel(fp)) { - QString question(tr("File %1 already exists.\nDo you want to overwrite it?") - .arg(toQString(fp))); + QString question( + QObject::tr("File %1 already exists.\nDo you want to overwrite it?") + .arg(toQString(fp))); int ret = DVGui::MsgBox(question, QObject::tr("Overwrite"), QObject::tr("Cancel"), 0); if (ret == 2) return false; @@ -935,7 +937,7 @@ void Previewer::Imp::saveFrame() { if (!Pd) break; // Ensure that current frame actually have to be saved - int currFrameToSave = m_currentFrameToSave - 1; + int currFrameToSave = m_currentFrameToSave - 1; std::map::iterator it = m_frames.find(currFrameToSave); if (it == m_frames.end()) continue; @@ -960,12 +962,14 @@ void Previewer::Imp::saveFrame() { } // Output the save result - QString str = "Saved " + QString(std::to_string(savedFrames).c_str()) + - " frames out of " + - QString(std::to_string(frameCount).c_str()) + " in " + - QString(::to_string(m_lw->getFilePath()).c_str()); + QString str = + QObject::tr("Saved %1 frames out of %2 in %3", + "Previewer %1:savedframes %2:framecount %3:filepath") + .arg(QString(std::to_string(savedFrames).c_str())) + .arg(QString(std::to_string(frameCount).c_str())) + .arg(QString(::to_string(m_lw->getFilePath()).c_str())); - if (!Pd) str = "Canceled! " + str; + if (!Pd) str = QObject::tr("Canceled! ", "Previewer") + str; ProgressBarMessager(eEnd, 0, str).send(); @@ -1100,16 +1104,16 @@ void Previewer::saveFrame() { m_imp->saveFrame(); } void Previewer::saveRenderedFrames() { if (TApp::instance()->getCurrentXsheet()->getXsheet()->getFrameCount() == 0) { - info("No frame to save!"); + info(QObject::tr("No frame to save!")); return; } if (m_imp->m_currentFrameToSave != 0) { - info("Already saving!"); + info(QObject::tr("Already saving!")); return; } static SavePreviewedPopup *savePopup = 0; - if (!savePopup) savePopup = new SavePreviewedPopup; + if (!savePopup) savePopup = new SavePreviewedPopup; savePopup->setPreview(this); diff --git a/toonz/sources/toonz/projectpopup.cpp b/toonz/sources/toonz/projectpopup.cpp index d861571..638f999 100644 --- a/toonz/sources/toonz/projectpopup.cpp +++ b/toonz/sources/toonz/projectpopup.cpp @@ -145,7 +145,7 @@ DvDirModelNode *ProjectDirModel::getNode(const QModelIndex &index) const { QModelIndex ProjectDirModel::index(int row, int column, const QModelIndex &parent) const { if (column != 0) return QModelIndex(); - DvDirModelNode *parentNode = m_root; + DvDirModelNode *parentNode = m_root; if (parent.isValid()) parentNode = getNode(parent); if (row < 0 || row >= parentNode->getChildCount()) return QModelIndex(); DvDirModelNode *node = parentNode->getChild(row); @@ -321,19 +321,20 @@ ProjectPopup::ProjectPopup(bool isModal) Qt::AlignRight | Qt::AlignVCenter); upperLayout->addWidget(ff, i + 2, 1); } - struct { - QString name; - std::string folderName; - } cbs[] = {{tr("Append $scenepath to +drawings"), TProject::Drawings}, - {tr("Append $scenepath to +inputs"), TProject::Inputs}, - {tr("Append $scenepath to +extras"), TProject::Extras}}; + std::vector> cbs = { + std::make_tuple(tr("Append $scenepath to +drawings"), + TProject::Drawings), + std::make_tuple(tr("Append $scenepath to +inputs"), TProject::Inputs), + std::make_tuple(tr("Append $scenepath to +extras"), TProject::Extras)}; int currentRow = upperLayout->rowCount(); - for (i = 0; i < tArrayCount(cbs); i++) { - CheckBox *cb = new CheckBox(cbs[i].name); + for (int i = 0; i < cbs.size(); ++i) { + auto const &name = std::get<0>(cbs[i]); + auto const &folderName = std::get<1>(cbs[i]); + CheckBox *cb = new CheckBox(name); cb->setMaximumHeight(WidgetHeight); upperLayout->addWidget(cb, currentRow + i, 1); - m_useScenePathCbs.append(qMakePair(cbs[i].folderName, cb)); + m_useScenePathCbs.append(qMakePair(folderName, cb)); } m_topLayout->addLayout(upperLayout); } diff --git a/toonz/sources/toonz/psdsettingspopup.cpp b/toonz/sources/toonz/psdsettingspopup.cpp index 0d2cbc9..edeb128 100644 --- a/toonz/sources/toonz/psdsettingspopup.cpp +++ b/toonz/sources/toonz/psdsettingspopup.cpp @@ -28,12 +28,7 @@ using namespace DVGui; #define REF_LAYER_BY_NAME -QStringList modesDescription = - (QStringList() - << "Flatten visible document layers into a single image. Layer styles are " - "maintained." - << "Load document layers as frames into a single xsheet column." - << "Load document layers as xhseet columns."); +QStringList modesDescription; // Per adesso non appare // Costruisce la stringa delle info della psd da caricare che comparirà nel @@ -121,6 +116,14 @@ PsdSettingsPopup::PsdSettingsPopup() setWindowTitle(tr("Load PSD File")); + if (modesDescription.isEmpty()) { + modesDescription + << tr("Flatten visible document layers into a single image. Layer " + "styles are maintained.") + << tr("Load document layers as frames into a single xsheet column.") + << tr("Load document layers as xhseet columns."); + } + m_filename = new QLabel(tr("")); m_filename->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_filename->setFixedHeight(WidgetHeight); @@ -153,11 +156,9 @@ PsdSettingsPopup::PsdSettingsPopup() addSeparator(); m_loadMode = new QComboBox(); - QStringList modes; - modes.push_back("Single Image"); - modes.push_back("Frames"); - modes.push_back("Columns"); - m_loadMode->addItems(modes); + m_loadMode->addItem(tr("Single Image"), QString("Single Image")); + m_loadMode->addItem(tr("Frames"), QString("Frames")); + m_loadMode->addItem(tr("Columns"), QString("Columns")); m_loadMode->setFixedHeight(WidgetHeight); m_loadMode->setFixedWidth(120); @@ -225,13 +226,13 @@ PsdSettingsPopup::PsdSettingsPopup() addLayout(folderOptLayout, false); ret = ret && connect(m_loadMode, SIGNAL(currentIndexChanged(const QString &)), - SLOT(onModeChanged(const QString &))); + SLOT(onModeChanged())); assert(ret); ret = ret && connect(m_psdFolderOptions, SIGNAL(buttonClicked(int)), this, SLOT(onFolderOptionChange(int))); assert(ret); - m_okBtn = new QPushButton("OK", this); - m_cancelBtn = new QPushButton("Cancel", this); + m_okBtn = new QPushButton(tr("OK"), this); + m_cancelBtn = new QPushButton(tr("Cancel"), this); connect(m_okBtn, SIGNAL(clicked()), this, SLOT(onOk())); connect(m_cancelBtn, SIGNAL(clicked()), this, SLOT(close())); addButtonBarWidget(m_okBtn, m_cancelBtn); @@ -263,7 +264,8 @@ int PsdSettingsPopup::levelNameType() { return m_levelNameType->currentIndex(); } -void PsdSettingsPopup::onModeChanged(const QString &mode) { +void PsdSettingsPopup::onModeChanged() { + QString mode = m_loadMode->currentData().toString(); if (mode == "Single Image") { m_mode = FLAT; m_modeDescription->setText(modesDescription[0]); diff --git a/toonz/sources/toonz/psdsettingspopup.h b/toonz/sources/toonz/psdsettingspopup.h index 9e00498..a3ce529 100644 --- a/toonz/sources/toonz/psdsettingspopup.h +++ b/toonz/sources/toonz/psdsettingspopup.h @@ -79,7 +79,7 @@ private: void doPsdParser(); protected slots: - void onModeChanged(const QString &mode); + void onModeChanged(); void onFolderOptionChange(int id); }; diff --git a/toonz/sources/toonz/reframepopup.cpp b/toonz/sources/toonz/reframepopup.cpp index 7c23ef7..6b38f64 100644 --- a/toonz/sources/toonz/reframepopup.cpp +++ b/toonz/sources/toonz/reframepopup.cpp @@ -61,10 +61,10 @@ ReframePopup::ReframePopup() bool ret = true; ret = ret && connect(m_step, SIGNAL(editingFinished()), this, SLOT(updateBlankCellCount())); - ret = ret && connect(m_blank, SIGNAL(editingFinished()), this, + ret = ret && connect(m_blank, SIGNAL(editingFinished()), this, SLOT(updateBlankCellCount())); - ret = ret && connect(okBtn, SIGNAL(clicked()), this, SLOT(accept())); - ret = ret && connect(cancelBtn, SIGNAL(clicked()), this, SLOT(reject())); + ret = ret && connect(okBtn, SIGNAL(clicked()), this, SLOT(accept())); + ret = ret && connect(cancelBtn, SIGNAL(clicked()), this, SLOT(reject())); assert(ret); } @@ -81,3 +81,7 @@ void ReframePopup::getValues(int& step, int& blank) { step = m_step->getValue(); blank = m_blank->getValue(); } + +//----------------------------------------------------------------------------- + +void ReframePopup::showEvent(QShowEvent* event) { m_step->selectAll(); } \ No newline at end of file diff --git a/toonz/sources/toonz/reframepopup.h b/toonz/sources/toonz/reframepopup.h index e02c1bc..040541b 100644 --- a/toonz/sources/toonz/reframepopup.h +++ b/toonz/sources/toonz/reframepopup.h @@ -32,6 +32,9 @@ public: ReframePopup(); void getValues(int& step, int& blank); +protected: + void showEvent(QShowEvent* event) override; + public slots: void updateBlankCellCount(); }; diff --git a/toonz/sources/toonz/rendercommand.cpp b/toonz/sources/toonz/rendercommand.cpp index 8424092..c7e615b 100644 --- a/toonz/sources/toonz/rendercommand.cpp +++ b/toonz/sources/toonz/rendercommand.cpp @@ -154,7 +154,7 @@ public: isPreview ? *scene->getProperties()->getPreviewProperties() : *scene->getProperties()->getOutputProperties(); outputSettings.getRange(r0, r1, step); - const TRenderSettings rs = outputSettings.getRenderSettings(); + const TRenderSettings rs = outputSettings.getRenderSettings(); if (r0 == 0 && r1 == -1) r0 = 0, r1 = scene->getFrameCount() - 1; double timeStretchFactor = @@ -245,7 +245,7 @@ bool RenderCommand::init(bool isPreview) { m_r0 = 0; m_r1 = scene->getFrameCount() - 1; } - if (m_r0 < 0) m_r0 = 0; + if (m_r0 < 0) m_r0 = 0; if (m_r1 >= scene->getFrameCount()) m_r1 = scene->getFrameCount() - 1; if (m_r1 < m_r0) { DVGui::warning(QObject::tr( @@ -300,7 +300,7 @@ sprop->getOutputProperties()->setRenderSettings(rso);*/ fp.getType() == "pict") // pct e' un formato"livello" (ha i settings di // quicktime) ma fatto di diversi frames fp = fp.withFrame(TFrameId::EMPTY_FRAME); - fp = scene->decodeFilePath(fp); + fp = scene->decodeFilePath(fp); if (!TFileStatus(fp.getParentDir()).doesExist()) { try { TFilePath parent = fp.getParentDir(); @@ -417,8 +417,10 @@ class RenderListener final : public DVGui::ProgressDialog, if (m_frame == -1) m_pb->hide(); else { - m_pb->setLabelText("Rendering frame " + QString::number(m_frame) + "/" + - m_labelText); + m_pb->setLabelText( + QObject::tr("Rendering frame %1 / %2", "RenderListener") + .arg(m_frame) + .arg(m_labelText)); m_pb->setValue(m_frame); } } @@ -428,9 +430,11 @@ public: RenderListener(TRenderer *renderer, const TFilePath &path, int steps, bool isPreview) : DVGui::ProgressDialog( - "Precomputing " + QString::number(steps) + " Frames" + - ((isPreview) ? "" : " of " + toQString(path)), - "Cancel", 0, steps, TApp::instance()->getMainWindow()) + QObject::tr("Precomputing %1 Frames", "RenderListener").arg(steps) + + ((isPreview) ? "" + : QObject::tr(" of %1", "RenderListener") + .arg(toQString(path))), + QObject::tr("Cancel"), 0, steps, TApp::instance()->getMainWindow()) , m_renderer(renderer) , m_frameCounter(0) , m_error(false) { @@ -443,7 +447,10 @@ public: #endif setWindowFlags(Qt::Dialog | Qt::WindowTitleHint | Qt::CustomizeWindowHint); m_progressBarString = - QString::number(steps) + ((isPreview) ? "" : " of " + toQString(path)); + QString::number(steps) + + ((isPreview) + ? "" + : QObject::tr(" of %1", "RenderListener").arg(toQString(path))); // setMinimumDuration (0); m_totalFrames = steps; show(); @@ -455,7 +462,8 @@ public: if (m_frameCounter + 1 < m_totalFrames) Message(this, ret ? -1 : ++m_frameCounter, m_progressBarString).send(); else - setLabelText(tr("Finalizing render, please wait.")); + setLabelText( + QObject::tr("Finalizing render, please wait.", "RenderListener")); return !ret; } bool onFrameFailed(int frame, TException &) override { @@ -471,7 +479,7 @@ public: void onCancel() override { m_isCanceled = true; - setLabelText("Aborting render..."); + setLabelText(QObject::tr("Aborting render...", "RenderListener")); reset(); hide(); RenderCommand::resetBgColor(); @@ -515,7 +523,11 @@ void RenderCommand::rasterRender(bool isPreview) { // fixes background colors for non alpha-enabled movie types (eventually // transparent gif would be good) currBgColor.m = 255; - if (isMovieType(ext)) { + // Mov may have alpha channel under some settings (Millions of Colors+ color + // depth). I tried to make OT to detect the mov settings and adaptively switch + // the behavior, but ended in vain :-( + // So I just omitted every mov from applying solid background as a quick fix. + if (isMovieType(ext) && ext != "mov") { scene->getProperties()->setBgColor(currBgColor); } // for non alpha-enabled images (like jpg), background color will be inserted @@ -584,7 +596,8 @@ void RenderCommand::rasterRender(bool isPreview) { buildSceneProgressBar->setMaximum(m_numFrames - 1); buildSceneProgressBar->setValue(0); buildSceneProgressBar->move(600, 500); - buildSceneProgressBar->setWindowTitle("Building Schematic..."); + buildSceneProgressBar->setWindowTitle( + QObject::tr("Building Schematic...", "RenderCommand")); buildSceneProgressBar->show(); for (int i = 0; i < m_numFrames; ++i, m_r += m_stepd) { @@ -662,13 +675,18 @@ class MultimediaProgressBar final : public DVGui::ProgressDialog, if (m_pbValue == -1) m_pb->hide(); else { - QString modeStr(m_pb->m_renderer->getMultimediaMode() == - MultimediaRenderer::COLUMNS - ? "column " - : "layer "); - m_pb->setLabelText("Rendering " + modeStr + QString::number(m_column) + - ", frame " + QString::number(m_frame) + "/" + - m_labelText); + QString modeStr( + m_pb->m_renderer->getMultimediaMode() == MultimediaRenderer::COLUMNS + ? QObject::tr("column ", + "MultimediaProgressBar label (mode name)") + : QObject::tr("layer ", + "MultimediaProgressBar label (mode name)")); + m_pb->setLabelText(QObject::tr("Rendering %1%2, frame %3 / %4", + "MultimediaProgressBar label") + .arg(modeStr) + .arg(m_column) + .arg(m_frame) + .arg(m_labelText)); m_pb->setValue(m_pbValue); } } @@ -679,9 +697,10 @@ class MultimediaProgressBar final : public DVGui::ProgressDialog, public: MultimediaProgressBar(MultimediaRenderer *renderer) : ProgressDialog( - "Rendering " + QString::number(renderer->getFrameCount()) + - " frames " + " of " + toQString(renderer->getFilePath()), - "Cancel", 0, + QObject::tr("Rendering %1 frames of %2", "MultimediaProgressBar") + .arg(renderer->getFrameCount()) + .arg(toQString(renderer->getFilePath())), + QObject::tr("Cancel"), 0, renderer->getFrameCount() * renderer->getColumnsCount()) , m_renderer(renderer) , m_frameCounter(0) @@ -695,8 +714,11 @@ public: setWindowModality(Qt::ApplicationModal); #endif setWindowFlags(Qt::WindowTitleHint | Qt::CustomizeWindowHint); - m_progressBarString = QString::number(m_renderer->getFrameCount()) + - " of " + toQString(m_renderer->getFilePath()); + m_progressBarString = + QObject::tr("%1 of %2", + "MultimediaProgressBar - [totalframe] of [path]") + .arg(m_renderer->getFrameCount()) + .arg(toQString(m_renderer->getFilePath())); show(); } @@ -730,7 +752,7 @@ public: void onCancel() override { m_isCanceled = true; - setLabelText("Aborting render..."); + setLabelText(QObject::tr("Aborting render...", "MultimediaProgressBar")); TRenderer *trenderer(m_renderer->getTRenderer()); if (m_renderer) trenderer->stopRendering(true); reset(); @@ -875,9 +897,11 @@ void RenderCommand::doRender(bool isPreview) { } } if (!isWritable) { - std::string str = "It is not possible to write the output: the file"; - str += isMultiFrame ? "s are read only." : " is read only."; - DVGui::warning(QString::fromStdString(str)); + QString str = QObject::tr( + "It is not possible to write the output: the file", "RenderCommand"); + str += isMultiFrame ? QObject::tr("s are read only.", "RenderCommand") + : QObject::tr(" is read only.", "RenderCommand"); + DVGui::warning(str); return; } diff --git a/toonz/sources/toonz/ruler.cpp b/toonz/sources/toonz/ruler.cpp index c6d9d50..bd27cac 100644 --- a/toonz/sources/toonz/ruler.cpp +++ b/toonz/sources/toonz/ruler.cpp @@ -248,36 +248,44 @@ double Ruler::posToValue(const QPoint &p) const { //----------------------------------------------------------------------------- void Ruler::mousePressEvent(QMouseEvent *e) { - if (e->button() == Qt::LeftButton) { - Guides &guides = getGuides(); - double v = posToValue(e->pos()); - m_hiding = false; - m_moving = false; - int selected = -1; - double minDist2 = 0; - int i; - int count = guides.size(); - for (i = 0; i < count; i++) { - double g = guides[i] / (double)getDevPixRatio(); - double dist2 = (g - v) * (g - v); - if (selected < 0 || dist2 < minDist2) { - minDist2 = dist2; - selected = i; - } + if (e->button() != Qt::LeftButton && e->button() != Qt::RightButton) return; + Guides &guides = getGuides(); + double v = posToValue(e->pos()); + m_hiding = false; + m_moving = false; + int selected = -1; + double minDist2 = 0; + int i; + int count = guides.size(); + for (i = 0; i < count; i++) { + double g = guides[i] / (double)getDevPixRatio(); + double dist2 = (g - v) * (g - v); + if (selected < 0 || dist2 < minDist2) { + minDist2 = dist2; + selected = i; } + } + if (e->button() == Qt::LeftButton) { if (selected < 0 || minDist2 > 25) { // crea una nuova guida guides.push_back(v * getDevPixRatio()); m_viewer->update(); // aggiorna sprop!!!! - } else { - // muove la guida vecchia - if (selected < count - 1) std::swap(guides[selected], guides.back()); - // aggiorna sprop!!!! - } + } else if (selected < count - 1) + std::swap(guides[selected], guides.back()); + m_moving = true; update(); assert(guides.size() > 0); + } else if (e->button() == Qt::RightButton) { + if (selected < count - 1) std::swap(guides[selected], guides.back()); + if (count > 0 && minDist2 <= 25) { + assert(!guides.empty()); + guides.pop_back(); + update(); + m_viewer->update(); + return; + } } } @@ -293,25 +301,26 @@ void Ruler::mouseMoveEvent(QMouseEvent *e) { return; } - Guides &guides = getGuides(); - double v = posToValue(e->pos()); - m_hiding = false; - m_moving = false; - double minDist2 = 5; - int i; + Guides &guides = getGuides(); + double v = posToValue(e->pos()); + m_hiding = false; + m_moving = false; + int count = guides.size(); - for (i = 0; i < count; i++) { + for (int i = 0; i < count; i++) { double g = guides[i] / (double)getDevPixRatio(); double dist2 = (g - v) * (g - v); - if (dist2 < minDist2) - setToolTip(tr("Click and drag to move guide")); - else { - if (m_vertical) - setToolTip(tr("Click to create an horizontal guide")); - else - setToolTip(tr("Click to create a vertical guide")); + if (dist2 < 25) { + setToolTip( + tr("Left click and drag to move guide. Right click to delete guide")); + return; } } + // in case no guides are found near the cursor + if (m_vertical) + setToolTip(tr("Click to create an horizontal guide")); + else + setToolTip(tr("Click to create a vertical guide")); } //----------------------------------------------------------------------------- diff --git a/toonz/sources/toonz/scenesettingspopup.cpp b/toonz/sources/toonz/scenesettingspopup.cpp index 83a25b1..0998345 100644 --- a/toonz/sources/toonz/scenesettingspopup.cpp +++ b/toonz/sources/toonz/scenesettingspopup.cpp @@ -252,6 +252,8 @@ void SceneSettingsPopup::update() { sprop->getMarkers(markerDistance, markerOffset); m_markerIntervalFld->setValue(markerDistance); m_startFrameFld->setValue(markerOffset + 1); + m_colorFilterOnRenderCB->setChecked( + sprop->isColumnColorFilterOnRenderEnabled()); } //----------------------------------------------------------------------------- diff --git a/toonz/sources/toonz/sceneviewer.cpp b/toonz/sources/toonz/sceneviewer.cpp index 4ff0e27..2d27437 100644 --- a/toonz/sources/toonz/sceneviewer.cpp +++ b/toonz/sources/toonz/sceneviewer.cpp @@ -24,6 +24,7 @@ #include "toonzqt/gutil.h" #include "toonzqt/imageutils.h" #include "toonzqt/lutcalibrator.h" +#include "toonzqt/viewcommandids.h" // TnzLib includes #include "toonz/tscenehandle.h" @@ -451,6 +452,83 @@ public: } } resetShiftTraceCommand; +//----------------------------------------------------------------------------- +// Following commands (VB_***) are registered for command bar buttons. +// They are separatd from the original visalization commands +// so that they will not break a logic of ShortcutZoomer. + +class TViewResetCommand final : public MenuItemHandler { +public: + TViewResetCommand() : MenuItemHandler(VB_ViewReset) {} + void execute() override { + if (TApp::instance()->getActiveViewer()) + TApp::instance()->getActiveViewer()->resetSceneViewer(); + } +} viewResetCommand; + +class TZoomResetCommand final : public MenuItemHandler { +public: + TZoomResetCommand() : MenuItemHandler(VB_ZoomReset) {} + void execute() override { + if (TApp::instance()->getActiveViewer()) + TApp::instance()->getActiveViewer()->resetZoom(); + } +} zoomResetCommand; + +class TZoomFitCommand final : public MenuItemHandler { +public: + TZoomFitCommand() : MenuItemHandler(VB_ZoomFit) {} + void execute() override { + if (TApp::instance()->getActiveViewer()) + TApp::instance()->getActiveViewer()->fitToCamera(); + } +} zoomFitCommand; + +class TActualPixelSizeCommand final : public MenuItemHandler { +public: + TActualPixelSizeCommand() : MenuItemHandler(VB_ActualPixelSize) {} + void execute() override { + if (TApp::instance()->getActiveViewer()) + TApp::instance()->getActiveViewer()->setActualPixelSize(); + } +} actualPixelSizeCommand; + +class TFlipViewerXCommand final : public MenuItemHandler { +public: + TFlipViewerXCommand() : MenuItemHandler(VB_FlipX) {} + void execute() override { + if (TApp::instance()->getActiveViewer()) + TApp::instance()->getActiveViewer()->flipX(); + } +} flipViewerXCommand; + +class TFlipViewerYCommand final : public MenuItemHandler { +public: + TFlipViewerYCommand() : MenuItemHandler(VB_FlipY) {} + void execute() override { + if (TApp::instance()->getActiveViewer()) + TApp::instance()->getActiveViewer()->flipY(); + } +} flipViewerYCommand; + +class TRotateResetCommand final : public MenuItemHandler { +public: + TRotateResetCommand() : MenuItemHandler(VB_RotateReset) {} + void execute() override { + if (TApp::instance()->getActiveViewer()) + TApp::instance()->getActiveViewer()->resetRotation(); + } +} rotateResetCommand; + +class TPositionResetCommand final : public MenuItemHandler { +public: + TPositionResetCommand() : MenuItemHandler(VB_PositionReset) {} + void execute() override { + if (TApp::instance()->getActiveViewer()) + TApp::instance()->getActiveViewer()->resetPosition(); + } +} positionResetCommand; + //============================================================================= // SceneViewer //----------------------------------------------------------------------------- @@ -511,8 +589,10 @@ SceneViewer::SceneViewer(ImageUtils::FullScreenWidget *parent) this->setTabletTracking(true); #endif - for (int i = 0; i < tArrayCount(m_viewAff); i++) + for (int i = 0; i < m_viewAff.size(); ++i) { setViewMatrix(getNormalZoomScale(), i); + m_rotationAngle[i] = 0.0; + } m_3DSideR = rasterFromQPixmap(svgToPixmap(":Resources/3Dside_r.svg")); m_3DSideL = rasterFromQPixmap(svgToPixmap(":Resources/3Dside_l.svg")); @@ -849,7 +929,7 @@ void SceneViewer::initializeGL() { registerContext(); // to be computed once through the software - if (m_lutCalibrator) { + if (m_lutCalibrator && !m_lutCalibrator->isInitialized()) { m_lutCalibrator->initialize(); connect(context(), SIGNAL(aboutToBeDestroyed()), this, SLOT(onContextAboutToBeDestroyed())); @@ -857,6 +937,13 @@ void SceneViewer::initializeGL() { // glClearColor(1.0,1.0,1.0,1); glClear(GL_COLOR_BUFFER_BIT); + + if (m_firstInitialized) + m_firstInitialized = false; + else { + resizeGL(width(), height()); + update(); + } } //----------------------------------------------------------------------------- @@ -1635,7 +1722,7 @@ double SceneViewer::projectToZ(const TPointD &delta) { GLint viewport[4]; double modelview[16], projection[16]; glGetIntegerv(GL_VIEWPORT, viewport); - for (int i = 0; i < 16; i++) + for (int i = 0; i < 16; i++) projection[i] = (double)m_projectionMatrix.constData()[i]; glGetDoublev(GL_MODELVIEW_MATRIX, modelview); @@ -1797,8 +1884,9 @@ void SceneViewer::zoomQt(bool forward, bool reset) { if (reset || ((m_zoomScale3D < 500 || !forward) && (m_zoomScale3D > 0.01 || forward))) { double oldZoomScale = m_zoomScale3D; - m_zoomScale3D = reset ? 1 : ImageUtils::getQuantizedZoomFactor( - m_zoomScale3D, forward); + m_zoomScale3D = + reset ? 1 + : ImageUtils::getQuantizedZoomFactor(m_zoomScale3D, forward); m_pan3D = -(m_zoomScale3D / oldZoomScale) * -m_pan3D; } @@ -1819,17 +1907,18 @@ void SceneViewer::zoomQt(bool forward, bool reset) { int i; for (i = 0; i < 2; i++) { - TAffine &viewAff = m_viewAff[i]; + TAffine &viewAff = m_viewAff[i]; if (m_isFlippedX) viewAff = viewAff * TScale(-1, 1); if (m_isFlippedX) viewAff = viewAff * TScale(1, -1); - double scale2 = abs(viewAff.det()); + double scale2 = std::abs(viewAff.det()); if (m_isFlippedX) viewAff = viewAff * TScale(-1, 1); if (m_isFlippedX) viewAff = viewAff * TScale(1, -1); if (reset || ((scale2 < 100000 || !forward) && (scale2 > 0.001 * 0.05 || forward))) { double oldZoomScale = sqrt(scale2) * dpiFactor; - double zoomScale = reset ? 1 : ImageUtils::getQuantizedZoomFactor( - oldZoomScale, forward); + double zoomScale = + reset ? 1 + : ImageUtils::getQuantizedZoomFactor(oldZoomScale, forward); // threshold value -0.001 is intended to absorb the error of calculation if ((oldZoomScale - zoomScaleFittingWithScreen) * @@ -1995,8 +2084,18 @@ void SceneViewer::zoom(const TPointD ¢er, double factor) { //----------------------------------------------------------------------------- void SceneViewer::flipX() { - m_viewAff[0] = m_viewAff[0] * TScale(-1, 1); - m_viewAff[1] = m_viewAff[1] * TScale(-1, 1); + double flipAngle0 = (m_rotationAngle[0] * -1) * 2; + double flipAngle1 = (m_rotationAngle[1] * -1) * 2; + m_rotationAngle[0] += flipAngle0; + m_rotationAngle[1] += flipAngle1; + if (m_isFlippedX != m_isFlippedY) { + flipAngle0 = -flipAngle0; + flipAngle1 = -flipAngle1; + } + m_viewAff[0] = m_viewAff[0] * TRotation(flipAngle0) * TScale(-1, 1); + m_viewAff[1] = m_viewAff[1] * TRotation(flipAngle1) * TScale(-1, 1); + m_viewAff[0].a13 *= -1; + m_viewAff[1].a13 *= -1; m_isFlippedX = !m_isFlippedX; invalidateAll(); emit onZoomChanged(); @@ -2005,8 +2104,18 @@ void SceneViewer::flipX() { //----------------------------------------------------------------------------- void SceneViewer::flipY() { - m_viewAff[0] = m_viewAff[0] * TScale(1, -1); - m_viewAff[1] = m_viewAff[1] * TScale(1, -1); + double flipAngle0 = (m_rotationAngle[0] * -1) * 2; + double flipAngle1 = (m_rotationAngle[1] * -1) * 2; + m_rotationAngle[0] += flipAngle0; + m_rotationAngle[1] += flipAngle1; + if (m_isFlippedX != m_isFlippedY) { + flipAngle0 = -flipAngle0; + flipAngle1 = -flipAngle1; + } + m_viewAff[0] = m_viewAff[0] * TRotation(flipAngle0) * TScale(1, -1); + m_viewAff[1] = m_viewAff[1] * TRotation(flipAngle1) * TScale(1, -1); + m_viewAff[0].a23 *= -1; + m_viewAff[1].a23 *= -1; m_isFlippedY = !m_isFlippedY; invalidateAll(); emit onZoomChanged(); @@ -2017,7 +2126,8 @@ void SceneViewer::flipY() { void SceneViewer::rotate(const TPointD ¢er, double angle) { if (angle == 0) return; if (m_isFlippedX != m_isFlippedY) angle = -angle; - TPointD realCenter = m_viewAff[m_viewMode] * center; + m_rotationAngle[m_viewMode] += angle; + TPointD realCenter = m_viewAff[m_viewMode] * center; setViewMatrix(TRotation(realCenter, angle) * m_viewAff[m_viewMode], m_viewMode); invalidateAll(); @@ -2080,9 +2190,9 @@ void SceneViewer::fitToCamera() { TPointD P11 = cameraAff * cameraRect.getP11(); TPointD p0 = TPointD(std::min({P00.x, P01.x, P10.x, P11.x}), std::min({P00.y, P01.y, P10.y, P11.y})); - TPointD p1 = TPointD(std::max({P00.x, P01.x, P10.x, P11.x}), + TPointD p1 = TPointD(std::max({P00.x, P01.x, P10.x, P11.x}), std::max({P00.y, P01.y, P10.y, P11.y})); - cameraRect = TRectD(p0.x, p0.y, p1.x, p1.y); + cameraRect = TRectD(p0.x, p0.y, p1.x, p1.y); // Pan if (!is3DView()) { @@ -2109,8 +2219,10 @@ void SceneViewer::resetSceneViewer() { m_visualSettings.m_sceneProperties = TApp::instance()->getCurrentScene()->getScene()->getProperties(); - for (int i = 0; i < tArrayCount(m_viewAff); i++) + for (int i = 0; i < m_viewAff.size(); ++i) { setViewMatrix(getNormalZoomScale(), i); + m_rotationAngle[i] = 0.0; + } m_pos = QPoint(0, 0); m_pan3D = TPointD(0, 0); @@ -2125,6 +2237,45 @@ void SceneViewer::resetSceneViewer() { //----------------------------------------------------------------------------- +void SceneViewer::resetZoom() { + TPointD realCenter(m_viewAff[m_viewMode].a13, m_viewAff[m_viewMode].a23); + TAffine aff = + getNormalZoomScale() * TRotation(realCenter, m_rotationAngle[m_viewMode]); + aff.a13 = realCenter.x; + aff.a23 = realCenter.y; + if (m_isFlippedX) aff = aff * TScale(-1, 1); + if (m_isFlippedY) aff = aff * TScale(1, -1); + setViewMatrix(aff, m_viewMode); + invalidateAll(); + emit onZoomChanged(); +} + +//----------------------------------------------------------------------------- + +void SceneViewer::resetRotation() { + double reverseRotatation = m_rotationAngle[m_viewMode] * -1; + if (m_isFlippedX) reverseRotatation *= -1; + if (m_isFlippedY) reverseRotatation *= -1; + TTool *tool = TApp::instance()->getCurrentTool()->getTool(); + TPointD center = m_viewAff[m_viewMode].inv() * TPointD(0, 0); + if (tool->getName() == "T_Rotate" && + tool->getProperties(0) + ->getProperty("Rotate On Camera Center") + ->getValueAsString() == "1") + center = TPointD(0, 0); + rotate(center, reverseRotatation); +} + +//----------------------------------------------------------------------------- + +void SceneViewer::resetPosition() { + m_viewAff[m_viewMode].a13 = 0.0; + m_viewAff[m_viewMode].a23 = 0.0; + invalidateAll(); +} + +//----------------------------------------------------------------------------- + void SceneViewer::setActualPixelSize() { TApp *app = TApp::instance(); TXshLevel *l = app->getCurrentLevel()->getLevel(); @@ -2148,16 +2299,17 @@ void SceneViewer::setActualPixelSize() { } else dpi = sl->getDpi(fid); - const double inch = Stage::inch; - TAffine tempAff = getNormalZoomScale(); - if (m_isFlippedX) tempAff = tempAff * TScale(-1, 1); - if (m_isFlippedY) tempAff = tempAff * TScale(1, -1); - TPointD tempScale = dpi; + const double inch = Stage::inch; + TAffine tempAff = getNormalZoomScale(); + if (m_isFlippedX) tempAff = tempAff * TScale(-1, 1); + if (m_isFlippedY) tempAff = tempAff * TScale(1, -1); + TPointD tempScale = dpi; if (m_isFlippedX) tempScale.x = -tempScale.x; if (m_isFlippedY) tempScale.y = -tempScale.y; - for (int i = 0; i < tArrayCount(m_viewAff); i++) - setViewMatrix(dpi == TPointD(0, 0) ? tempAff : TScale(tempScale.x / inch, - tempScale.y / inch), + for (int i = 0; i < m_viewAff.size(); ++i) + setViewMatrix(dpi == TPointD(0, 0) + ? tempAff + : TScale(tempScale.x / inch, tempScale.y / inch), i); m_pos = QPoint(0, 0); @@ -2261,8 +2413,8 @@ int SceneViewer::pick(const TPointD &point) { assert(glGetError() == GL_NO_ERROR); GLint viewport[4]; glGetIntegerv(GL_VIEWPORT, viewport); - GLuint selectBuffer[512]; - glSelectBuffer(tArrayCount(selectBuffer), selectBuffer); + std::array selectBuffer; + glSelectBuffer(selectBuffer.size(), selectBuffer.data()); glRenderMode(GL_SELECT); // definisco la matrice di proiezione @@ -2321,7 +2473,7 @@ int SceneViewer::pick(const TPointD &point) { // conto gli hits int ret = -1; int hitCount = glRenderMode(GL_RENDER); - GLuint *p = selectBuffer; + GLuint *p = selectBuffer.data(); for (int i = 0; i < hitCount; ++i) { GLuint nameCount = *p++; GLuint zmin = *p++; @@ -2440,7 +2592,7 @@ void drawSpline(const TAffine &viewMatrix, const TRect &clipRect, bool camera3d, TStageObject *pegbar = objId != TStageObjectId::NoneId ? xsh->getStageObject(objId) : 0; - const TStroke *stroke = 0; + const TStroke *stroke = 0; if (pegbar && pegbar->getSpline()) stroke = pegbar->getSpline()->getStroke(); if (!stroke) return; diff --git a/toonz/sources/toonz/sceneviewer.h b/toonz/sources/toonz/sceneviewer.h index d6139f1..72f488d 100644 --- a/toonz/sources/toonz/sceneviewer.h +++ b/toonz/sources/toonz/sceneviewer.h @@ -22,6 +22,7 @@ #include "pane.h" #include "previewer.h" +#include #include #include @@ -98,11 +99,11 @@ class SceneViewer final : public GLWidgetForHighDpi, bool m_isMouseEntered, m_forceGlFlush; bool m_isFlippedX = false, m_isFlippedY = false; /*! FreezedStatus: -* \li NO_FREEZED freezed is not active; -* \li NORMAL_FREEZED freezed is active: show grab image; -* \li UPDATE_FREEZED freezed is active: draw last unfreezed image and grab -* view; -*/ + * \li NO_FREEZED freezed is not active; + * \li NORMAL_FREEZED freezed is active: show grab image; + * \li UPDATE_FREEZED freezed is active: draw last unfreezed image and grab + * view; + */ enum FreezedStatus { NO_FREEZED = 0, NORMAL_FREEZED = 1, @@ -124,7 +125,7 @@ class SceneViewer final : public GLWidgetForHighDpi, // current pan/zoom matrix (two different matrices are used for editing scenes // and leves) - TAffine m_viewAff[2]; + std::array m_viewAff; int m_viewMode; TPointD m_dpiScale; @@ -178,6 +179,10 @@ class SceneViewer final : public GLWidgetForHighDpi, // updated in drawScene() and used in GLInvalidateRect() TRectD m_guidedDrawingBBox; + double m_rotationAngle[2]; + + bool m_firstInitialized = true; + public: enum ReferenceMode { NORMAL_REFERENCE = 1, @@ -394,6 +399,9 @@ protected: public slots: void resetSceneViewer(); + void resetZoom(); + void resetRotation(); + void resetPosition(); void setActualPixelSize(); void flipX(); void flipY(); diff --git a/toonz/sources/toonz/sceneviewercontextmenu.cpp b/toonz/sources/toonz/sceneviewercontextmenu.cpp index d8b6988..5a6c703 100644 --- a/toonz/sources/toonz/sceneviewercontextmenu.cpp +++ b/toonz/sources/toonz/sceneviewercontextmenu.cpp @@ -81,12 +81,6 @@ SceneViewerContextMenu::SceneViewerContextMenu(SceneViewer *parent) parent->connect(action, SIGNAL(triggered()), SLOT(swapCompared())); } - // reset - action = commandManager->createAction(V_ZoomReset, this); - addAction(action); - ret = ret && - parent->connect(action, SIGNAL(triggered()), SLOT(resetSceneViewer())); - if (!isEditingLevel) { // fit camera action = commandManager->createAction(V_ZoomFit, this); @@ -95,6 +89,43 @@ SceneViewerContextMenu::SceneViewerContextMenu(SceneViewer *parent) parent->connect(action, SIGNAL(triggered()), SLOT(fitToCamera())); } + QMenu *flipViewMenu = addMenu(tr("Flip View")); + + // flip horizontally + action = commandManager->createAction(V_FlipX, this); + flipViewMenu->addAction(action); + ret = ret && parent->connect(action, SIGNAL(triggered()), SLOT(flipX())); + + // flip vertically + action = commandManager->createAction(V_FlipY, this); + flipViewMenu->addAction(action); + ret = ret && parent->connect(action, SIGNAL(triggered()), SLOT(flipY())); + + QMenu *resetViewMenu = addMenu(tr("Reset View")); + + // reset + action = commandManager->createAction(V_ViewReset, this); + resetViewMenu->addAction(action); + ret = ret && + parent->connect(action, SIGNAL(triggered()), SLOT(resetSceneViewer())); + + // reset zoom + action = commandManager->createAction(V_ZoomReset, this); + resetViewMenu->addAction(action); + ret = ret && parent->connect(action, SIGNAL(triggered()), SLOT(resetZoom())); + + // reset rotation + action = commandManager->createAction(V_RotateReset, this); + resetViewMenu->addAction(action); + ret = ret && + parent->connect(action, SIGNAL(triggered()), SLOT(resetRotation())); + + // reset position + action = commandManager->createAction(V_PositionReset, this); + resetViewMenu->addAction(action); + ret = ret && + parent->connect(action, SIGNAL(triggered()), SLOT(resetPosition())); + // actual pixel size action = commandManager->createAction(V_ActualPixelSize, this); addAction(action); diff --git a/toonz/sources/toonz/sceneviewerevents.cpp b/toonz/sources/toonz/sceneviewerevents.cpp index 1d10fd4..28396ba 100644 --- a/toonz/sources/toonz/sceneviewerevents.cpp +++ b/toonz/sources/toonz/sceneviewerevents.cpp @@ -70,7 +70,7 @@ namespace { void initToonzEvent(TMouseEvent &toonzEvent, QMouseEvent *event, int widgetHeight, double pressure, int devPixRatio) { - toonzEvent.m_pos = TPointD(event->pos().x() * devPixRatio, + toonzEvent.m_pos = TPointD(event->pos().x() * devPixRatio, widgetHeight - 1 - event->pos().y() * devPixRatio); toonzEvent.m_mousePos = event->pos(); toonzEvent.m_pressure = 1.0; @@ -279,6 +279,8 @@ void SceneViewer::tabletEvent(QTabletEvent *e) { initToonzEvent(mouseEvent, e, height(), m_pressure, getDevPixRatio()); m_tabletState = Touched; onPress(mouseEvent); + } else if (m_tabletState == Touched) { + m_tabletState = StartStroke; } } else m_tabletEvent = false; @@ -452,7 +454,7 @@ void SceneViewer::onMove(const TMouseEvent &event) { // if the "compare with snapshot" mode is activated, change the mouse cursor // on the border handle - if (m_visualSettings.m_doCompare) { + if (m_visualSettings.m_doCompare && isPreviewEnabled()) { if (abs(curPos.x() - width() * m_compareSettings.m_compareX) < 20) { cursorSet = true; setToolCursor(this, ToolCursor::ScaleHCursor); @@ -811,9 +813,9 @@ quit: // Don't clear it out table state so the tablePress event will process // correctly. if (m_tabletState != Touched) m_tabletState = None; - m_mouseState = None; - m_tabletMove = false; - m_pressure = 0; + m_mouseState = None; + m_tabletMove = false; + m_pressure = 0; // Leave m_tabletEvent as-is in order to check whether the onRelease is called // from tabletEvent or not in mouseReleaseEvent. if (m_tabletState == Released) // only clear if tabletRelease event @@ -869,12 +871,12 @@ void SceneViewer::wheelEvent(QWheelEvent *event) { default: // Qt::MouseEventSynthesizedByQt, // Qt::MouseEventSynthesizedByApplication - { - std::cout << "not supported event: Qt::MouseEventSynthesizedByQt, " - "Qt::MouseEventSynthesizedByApplication" - << std::endl; - break; - } + { + std::cout << "not supported event: Qt::MouseEventSynthesizedByQt, " + "Qt::MouseEventSynthesizedByApplication" + << std::endl; + break; + } } // end switch @@ -965,6 +967,7 @@ void SceneViewer::gestureEvent(QGestureEvent *e) { if (changeFlags & QPinchGesture::RotationAngleChanged) { qreal rotationDelta = gesture->rotationAngle() - gesture->lastRotationAngle(); + if (m_isFlippedX != m_isFlippedY) rotationDelta = -rotationDelta; TAffine aff = getViewMatrix().inv(); TPointD center = aff * TPointD(0, 0); if (!m_rotating && !m_zooming) { @@ -1046,71 +1049,70 @@ void SceneViewer::touchEvent(QTouchEvent *e, int type) { bool SceneViewer::event(QEvent *e) { /* - switch (e->type()) { - // case QEvent::Enter: - // qDebug() << "[enter] ************************** Enter"; - // break; - // case QEvent::Leave: - // qDebug() << "[enter] ************************** Leave"; - // break; - - case QEvent::TabletPress: { - QTabletEvent *te = static_cast(e); - qDebug() << "[enter] ************************** TabletPress mouseState(" - << m_mouseState << ") tabletState(" << m_tabletState - << ") pressure(" << m_pressure << ") pointerType(" - << te->pointerType() << ") device(" << te->device() << ")"; - } break; - // case QEvent::TabletMove: - // qDebug() << "[enter] ************************** TabletMove - //mouseState("<type()) { + // case QEvent::Enter: + // qDebug() << "[enter] ************************** Enter"; + // break; + // case QEvent::Leave: + // qDebug() << "[enter] ************************** Leave"; + // break; - case QEvent::TouchBegin: - qDebug() << "[enter] ************************** TouchBegin"; - break; - case QEvent::TouchEnd: - qDebug() << "[enter] ************************** TouchEnd"; - break; - case QEvent::TouchCancel: - qDebug() << "[enter] ************************** TouchCancel"; - break; + case QEvent::TabletPress: { + QTabletEvent *te = static_cast(e); + qDebug() << "[enter] ************************** TabletPress mouseState(" + << m_mouseState << ") tabletState(" << m_tabletState + << ") pressure(" << m_pressure << ") pointerType(" + << te->pointerType() << ") device(" << te->device() << ")"; + } break; + // case QEvent::TabletMove: + // qDebug() << "[enter] ************************** TabletMove + //mouseState("<type() == QEvent::Gesture && - CommandManager::instance() - ->getAction(MI_TouchGestureControl) - ->isChecked()) { + if (e->type() == QEvent::Gesture && CommandManager::instance() + ->getAction(MI_TouchGestureControl) + ->isChecked()) { gestureEvent(static_cast(e)); return true; } @@ -1180,11 +1182,11 @@ class ViewerZoomer final : public ImageUtils::ShortcutZoomer { public: ViewerZoomer(SceneViewer *parent) : ShortcutZoomer(parent) {} - bool zoom(bool zoomin, bool resetZoom) override { + bool zoom(bool zoomin, bool resetView) override { SceneViewer *sceneViewer = static_cast(getWidget()); - resetZoom ? sceneViewer->resetSceneViewer() - : sceneViewer->zoomQt(zoomin, resetZoom); + resetView ? sceneViewer->resetSceneViewer() + : sceneViewer->zoomQt(zoomin, resetView); return true; } @@ -1209,6 +1211,21 @@ public: return true; } + bool resetZoom() override { + static_cast(getWidget())->resetZoom(); + return true; + } + + bool resetRotation() override { + static_cast(getWidget())->resetRotation(); + return true; + } + + bool resetPosition() override { + static_cast(getWidget())->resetPosition(); + return true; + } + bool toggleFullScreen(bool quit) override { if (ImageUtils::FullScreenWidget *fsWidget = dynamic_cast( @@ -1516,10 +1533,13 @@ void SceneViewer::dragEnterEvent(QDragEnterEvent *event) { const QMimeData *mimeData = event->mimeData(); - if (acceptResourceOrFolderDrop(mimeData->urls())) - event->acceptProposedAction(); - else + if (acceptResourceOrFolderDrop(mimeData->urls())) { + // Force CopyAction + event->setDropAction(Qt::CopyAction); + event->accept(); + } else { event->ignore(); + } } //----------------------------------------------------------------------------- @@ -1531,7 +1551,7 @@ void SceneViewer::dropEvent(QDropEvent *e) { if (mimeData->hasUrls()) { IoCmd::LoadResourceArguments args; - foreach (const QUrl &url, mimeData->urls()) { + for (const QUrl &url : mimeData->urls()) { TFilePath fp(url.toLocalFile().toStdWString()); args.resourceDatas.push_back(fp); } diff --git a/toonz/sources/toonz/startuppopup.cpp b/toonz/sources/toonz/startuppopup.cpp index b84d860..fee6e05 100644 --- a/toonz/sources/toonz/startuppopup.cpp +++ b/toonz/sources/toonz/startuppopup.cpp @@ -95,9 +95,9 @@ StartupPopup::StartupPopup() : Dialog(TApp::instance()->getMainWindow(), true, true, "StartupPopup") { setWindowTitle(tr("OpenToonz Startup")); - m_projectBox = new QGroupBox(tr("Choose Project"), this); + m_projectBox = new QGroupBox(tr("Current Project"), this); m_sceneBox = new QGroupBox(tr("Create a New Scene"), this); - m_recentBox = new QGroupBox(tr("Open Scene"), this); + m_recentBox = new QGroupBox(tr("Recent Scenes [Project]"), this); m_projectBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_nameFld = new LineEdit(this); m_pathFld = new FileField(this); @@ -168,6 +168,7 @@ StartupPopup::StartupPopup() m_sceneBox->setMinimumWidth(480); m_projectBox->setMinimumWidth(480); m_buttonFrame->setFixedHeight(34); + //--- layout m_topLayout->setMargin(0); m_topLayout->setSpacing(0); @@ -240,14 +241,15 @@ StartupPopup::StartupPopup() newSceneLay->addWidget(createButton, 7, 1, 1, 3, Qt::AlignLeft); } m_sceneBox->setLayout(newSceneLay); - guiLay->addWidget(m_sceneBox, 2, 0, 4, 1, Qt::AlignLeft); + guiLay->addWidget(m_sceneBox, 2, 0, 4, 1, Qt::AlignTop); m_recentSceneLay->setMargin(5); m_recentSceneLay->setSpacing(2); { // Recent Scene List m_recentBox->setLayout(m_recentSceneLay); - guiLay->addWidget(m_recentBox, 1, 1, 4, 1, Qt::AlignTop); + guiLay->addWidget(m_recentBox, 1, 1, 4, 1, + Qt::AlignTop | Qt::AlignHCenter); guiLay->addWidget(loadOtherSceneButton, 5, 1, 1, 1, Qt::AlignRight); } m_topLayout->addLayout(guiLay, 0); @@ -409,10 +411,13 @@ void StartupPopup::refreshRecentScenes() { int i = 0; for (QString name : m_sceneNames) { if (i > 9) break; // box can hold 10 scenes - QString justName = QString::fromStdString(TFilePath(name).getName()); + QString fileName = + name.remove(0, name.indexOf(" ") + 1); // remove "#. " prefix + QString projectName = RecentFiles::instance()->getFileProject(fileName); + QString justName = QString::fromStdString(TFilePath(fileName).getName()) + + (projectName != "-" ? " [" + projectName + "]" : ""); m_recentNamesLabels[i] = new StartupLabel(justName, this, i); - m_recentNamesLabels[i]->setToolTip( - name.remove(0, name.indexOf(" ") + 1)); // remove "#. " prefix + m_recentNamesLabels[i]->setToolTip(fileName); m_recentSceneLay->addWidget(m_recentNamesLabels[i], 0, Qt::AlignTop); i++; } @@ -856,8 +861,34 @@ void StartupPopup::onRecentSceneClicked(int index) { DVGui::warning(msg); refreshRecentScenes(); } else { - IoCmd::loadScene(TFilePath(path.toStdWString()), false); - RecentFiles::instance()->moveFilePath(index, 0, RecentFiles::Scene); + if (RecentFiles::instance()->getFileProject(index) != "-") { + QString projectName = RecentFiles::instance()->getFileProject(index); + int projectIndex = m_projectsCB->findText(projectName); + if (projectIndex >= 0) { + TFilePath projectFp = m_projectPaths[projectIndex]; + TProjectManager::instance()->setCurrentProjectPath(projectFp); + } else { + QString msg = tr("The selected scene project '%1' is not in the " + "Current Project list and may not open automatically.") + .arg(projectName); + DVGui::warning(msg); + } + } + IoCmd::loadScene(TFilePath(path.toStdWString()), false, true); + if (RecentFiles::instance()->getFileProject(index) == "-") { + QString fileName = + RecentFiles::instance()->getFilePath(index, RecentFiles::Scene); + QString projectName = QString::fromStdString(TApp::instance() + ->getCurrentScene() + ->getScene() + ->getProject() + ->getName() + .getName()); + RecentFiles::instance()->removeFilePath(index, RecentFiles::Scene); + RecentFiles::instance()->addFilePath(fileName, RecentFiles::Scene, + projectName); + } else + RecentFiles::instance()->moveFilePath(index, 0, RecentFiles::Scene); RecentFiles::instance()->refreshRecentFilesMenu(RecentFiles::Scene); hide(); } diff --git a/toonz/sources/toonz/styleshortcutswitchablepanel.cpp b/toonz/sources/toonz/styleshortcutswitchablepanel.cpp index d680521..2ad3607 100644 --- a/toonz/sources/toonz/styleshortcutswitchablepanel.cpp +++ b/toonz/sources/toonz/styleshortcutswitchablepanel.cpp @@ -92,7 +92,7 @@ void StyleShortcutSwitchablePanel::updateTabFocus() { QList widgets = findChildren(); if (Preferences::instance()->isUseNumpadForSwitchingStylesEnabled()) { // disable tab focus - foreach (QWidget *widget, widgets) { + for (QWidget *widget : widgets) { Qt::FocusPolicy policy = widget->focusPolicy(); if (policy == Qt::TabFocus || policy == Qt::StrongFocus || policy == Qt::WheelFocus) { diff --git a/toonz/sources/toonz/svncommitdialog.cpp b/toonz/sources/toonz/svncommitdialog.cpp index e3bfeb1..a999877 100644 --- a/toonz/sources/toonz/svncommitdialog.cpp +++ b/toonz/sources/toonz/svncommitdialog.cpp @@ -469,7 +469,8 @@ void SVNCommitDialog::onResourcesStatusRetrieved(const QString &xmlResponse) { void SVNCommitDialog::onStatusRetrieved(const QString &xmlResponse) { SVNStatusReader sr(xmlResponse); - m_status = sr.getStatus(); + m_status = sr.getStatus(); + int height = 160; m_thread.disconnect(SIGNAL(statusRetrieved(const QString &))); @@ -508,6 +509,10 @@ void SVNCommitDialog::onStatusRetrieved(const QString &xmlResponse) { } } + if (m_treeWidget->isVisible()) height += (filesToPutCount * 25); + + setMinimumSize(350, min(height, 350)); + m_waitingLabel->hide(); m_commentLabel->show(); m_commentTextEdit->show(); @@ -531,6 +536,10 @@ void SVNCommitDialog::onStatusRetrieved(const QString &xmlResponse) { m_selectionLabel->show(); } + if (m_treeWidget->isVisible()) height += (m_items.size() * 25); + + setMinimumSize(350, min(height, 350)); + m_waitingLabel->hide(); m_textLabel->hide(); m_commentLabel->show(); @@ -630,7 +639,7 @@ void SVNCommitDialog::addUnversionedItem(const QString &relativePath) { item = new QTreeWidgetItem(m_treeWidget, QStringList(list.at(i))); if (fi.isDir()) item->setIcon(0, folderIcon); - if (relativePath == tempString) { + if ((i + 1) == levelCount) { item->setCheckState(0, m_folderOnly ? Qt::Unchecked : Qt::Checked); item->setData(0, Qt::UserRole, tempString); item->setData(0, Qt::UserRole + 1, true); @@ -916,7 +925,7 @@ SVNCommitFrameRangeDialog::SVNCommitFrameRangeDialog(QWidget *parent, setWindowTitle(tr("Version Control: Put")); - setMinimumSize(300, 150); + setMinimumSize(350, 150); QWidget *container = new QWidget; QVBoxLayout *mainLayout = new QVBoxLayout; @@ -1041,10 +1050,10 @@ void SVNCommitFrameRangeDialog::onLockDone() { // Step 3: propget QStringList args; - args << "propget"; - args << "partial-lock"; + args << "proplist"; args << m_file; args << "--xml"; + args << "-v"; m_thread.disconnect(SIGNAL(done(const QString &))); connect(&m_thread, SIGNAL(done(const QString &)), this, diff --git a/toonz/sources/toonz/svndeletedialog.cpp b/toonz/sources/toonz/svndeletedialog.cpp index c2557a6..e3e0da7 100644 --- a/toonz/sources/toonz/svndeletedialog.cpp +++ b/toonz/sources/toonz/svndeletedialog.cpp @@ -169,8 +169,15 @@ SVNDeleteDialog::SVNDeleteDialog(QWidget *parent, const QString &workingDir, //----------------------------------------------------------------------------- void SVNDeleteDialog::showEvent(QShowEvent *e) { + if (!m_isFolder) { + initTreeWidget(); + + int height = 50; + if (m_treeWidget->isVisible()) height += (m_files.size() * 50); + + setMinimumSize(300, min(height, 350)); + } QDialog::showEvent(e); - if (!m_isFolder) initTreeWidget(); } //----------------------------------------------------------------------------- @@ -261,6 +268,10 @@ void SVNDeleteDialog::onDeleteServerButtonClicked() { m_deleteServerButton->setText(tr("Delete")); connect(m_deleteServerButton, SIGNAL(clicked()), this, SLOT(deleteFiles())); + int height = 175; + if (m_treeWidget->isVisible()) height += (m_files.size() * 50); + setMinimumSize(300, min(height, 350)); + m_textLabel->setText( tr("You are deleting items also on repository. Are you sure ?")); m_commentLabel->show(); diff --git a/toonz/sources/toonz/svnlockdialog.cpp b/toonz/sources/toonz/svnlockdialog.cpp index 633c770..819030b 100644 --- a/toonz/sources/toonz/svnlockdialog.cpp +++ b/toonz/sources/toonz/svnlockdialog.cpp @@ -160,7 +160,7 @@ SVNLockDialog::SVNLockDialog(QWidget *parent, const QString &workingDir, // 1. Getting status connect(&m_thread, SIGNAL(statusRetrieved(const QString &)), this, SLOT(onStatusRetrieved(const QString &))); - m_thread.getSVNStatus(m_workingDir); + m_thread.getSVNStatus(m_workingDir, true); } //----------------------------------------------------------------------------- @@ -185,20 +185,24 @@ void SVNLockDialog::onStatusRetrieved(const QString &xmlResponse) { switchToCloseButton(); } else { + int height = m_lock ? 160 : 50; + if (m_treeWidget->isVisible()) + height += (m_filesToEdit.size() * (m_lock ? 25 : 50)); + + setMinimumSize(300, min(height, 350)); + m_waitingLabel->hide(); if (m_lock) m_textLabel->setText( tr("%1 items to edit.") - .arg(m_filesToEdit.size() == 1 - ? 1 - : m_filesToEdit.size() - m_sceneIconAdded)); + .arg(m_filesToEdit.size() == 1 ? 1 : m_filesToEdit.size() - + m_sceneIconAdded)); else m_textLabel->setText( tr("%1 items to unlock.") - .arg(m_filesToEdit.size() == 1 - ? 1 - : m_filesToEdit.size() - m_sceneIconAdded)); + .arg(m_filesToEdit.size() == 1 ? 1 : m_filesToEdit.size() - + m_sceneIconAdded)); m_lockButton->show(); } @@ -267,15 +271,13 @@ void SVNLockDialog::executeCommand() { if (m_lock) m_textLabel->setText( tr("Editing %1 items...") - .arg(m_filesToEdit.size() == 1 - ? 1 - : m_filesToEdit.size() - m_sceneIconAdded)); + .arg(m_filesToEdit.size() == 1 ? 1 : m_filesToEdit.size() - + m_sceneIconAdded)); else m_textLabel->setText( tr("Unlocking %1 items...") - .arg(m_filesToEdit.size() == 1 - ? 1 - : m_filesToEdit.size() - m_sceneIconAdded)); + .arg(m_filesToEdit.size() == 1 ? 1 : m_filesToEdit.size() - + m_sceneIconAdded)); QStringList args; if (m_lock) diff --git a/toonz/sources/toonz/svnlockframerangedialog.cpp b/toonz/sources/toonz/svnlockframerangedialog.cpp index 9c30517..d9930d0 100644 --- a/toonz/sources/toonz/svnlockframerangedialog.cpp +++ b/toonz/sources/toonz/svnlockframerangedialog.cpp @@ -185,6 +185,10 @@ void SVNLockFrameRangeDialog::onPropGetDone(const QString &xmlResponse) { } } + int height = + 180 + (m_lockInfos.isEmpty() ? 0 : ((m_lockInfos.size() - 1) * 25)); + setMinimumSize(300, height); + m_lockButton->show(); m_cancelButton->show(); @@ -304,10 +308,10 @@ void SVNLockFrameRangeDialog::onLockDone() { // Step 2: propget QStringList args; - args << "propget"; - args << "partial-lock"; + args << "proplist"; args << m_file; args << "--xml"; + args << "-v"; m_thread.disconnect(SIGNAL(done(const QString &))); connect(&m_thread, SIGNAL(done(const QString &)), this, @@ -531,6 +535,10 @@ void SVNLockMultiFrameRangeDialog::onStatusRetrieved( m_textLabel->setText(temp); } + int height = + 180 + (m_lockInfos.isEmpty() ? 0 : ((m_lockInfos.size() - 1) * 25)); + setMinimumSize(300, height); + m_lockButton->show(); m_cancelButton->show(); @@ -736,10 +744,10 @@ void SVNUnlockFrameRangeDialog::onLockDone() { // Step 3: propget QStringList args; - args << "propget"; - args << "partial-lock"; + args << "proplist"; args << m_file; args << "--xml"; + args << "-v"; m_thread.disconnect(SIGNAL(done(const QString &))); connect(&m_thread, SIGNAL(done(const QString &)), this, @@ -1074,10 +1082,10 @@ SVNFrameRangeLockInfoDialog::SVNFrameRangeLockInfoDialog( // 1. propget QStringList args; - args << "propget"; - args << "partial-lock"; + args << "proplist"; args << m_file; args << "--xml"; + args << "-v"; connect(&m_thread, SIGNAL(done(const QString &)), this, SLOT(onPropGetDone(const QString &))); @@ -1115,6 +1123,9 @@ void SVNFrameRangeLockInfoDialog::onPropGetDone(const QString &xmlResponse) { .arg(lock.m_from) .arg(lock.m_to)); } + int height = 100 + ((lockInfos.size() - 1) * 25); + setMinimumSize(300, height); + m_textLabel->setText(temp); } } @@ -1224,6 +1235,9 @@ void SVNMultiFrameRangeLockInfoDialog::onStatusRetrieved( .arg(lock.m_from) .arg(lock.m_to)); } + int height = 100 + ((lockInfos.size() - 1) * 25); + setMinimumSize(300, height); + m_textLabel->setText(temp); } } diff --git a/toonz/sources/toonz/svnrevertdialog.cpp b/toonz/sources/toonz/svnrevertdialog.cpp index 6d3d433..41feb4e 100644 --- a/toonz/sources/toonz/svnrevertdialog.cpp +++ b/toonz/sources/toonz/svnrevertdialog.cpp @@ -121,7 +121,8 @@ SVNRevertDialog::SVNRevertDialog(QWidget *parent, const QString &workingDir, void SVNRevertDialog::onStatusRetrieved(const QString &xmlResponse) { SVNStatusReader sr(xmlResponse); - m_status = sr.getStatus(); + m_status = sr.getStatus(); + int height = 50; checkFiles(); @@ -140,6 +141,10 @@ void SVNRevertDialog::onStatusRetrieved(const QString &xmlResponse) { m_textLabel->setText(msg); switchToCloseButton(); } else { + if (m_treeWidget->isVisible()) height += (m_filesToRevert.size() * 50); + + setMinimumSize(300, min(height, 350)); + QString msg = QString(tr("%1 items to revert.")) .arg(m_filesToRevert.size() == 1 ? 1 diff --git a/toonz/sources/toonz/svnupdateandlockdialog.cpp b/toonz/sources/toonz/svnupdateandlockdialog.cpp index 1659a08..2a15fe7 100644 --- a/toonz/sources/toonz/svnupdateandlockdialog.cpp +++ b/toonz/sources/toonz/svnupdateandlockdialog.cpp @@ -156,6 +156,8 @@ void SVNUpdateAndLockDialog::onStatusRetrieved(const QString &xmlResponse) { m_commentLabel->show(); switchToCloseButton(); } else { + setMinimumSize(300, 150); + m_waitingLabel->hide(); m_textLabel->setText( diff --git a/toonz/sources/toonz/svnupdatedialog.cpp b/toonz/sources/toonz/svnupdatedialog.cpp index 1dbad96..13a84e9 100644 --- a/toonz/sources/toonz/svnupdatedialog.cpp +++ b/toonz/sources/toonz/svnupdatedialog.cpp @@ -257,6 +257,8 @@ void SVNUpdateDialog::updateFiles() { return; } + setMinimumSize(300, 200); + if (m_updateSceneContentsCheckBox) m_updateSceneContentsCheckBox->hide(); m_updateButton->setEnabled(false); m_waitingLabel->hide(); diff --git a/toonz/sources/toonz/tapp.cpp b/toonz/sources/toonz/tapp.cpp index 8318336..023c520 100644 --- a/toonz/sources/toonz/tapp.cpp +++ b/toonz/sources/toonz/tapp.cpp @@ -267,8 +267,9 @@ int TApp::getCurrentLevelStyleIndex() const { //----------------------------------------------------------------------------- -void TApp::setCurrentLevelStyleIndex(int index) { - m_paletteController->getCurrentLevelPalette()->setStyleIndex(index); +void TApp::setCurrentLevelStyleIndex(int index, bool forceUpdate) { + m_paletteController->getCurrentLevelPalette()->setStyleIndex(index, + forceUpdate); } //----------------------------------------------------------------------------- diff --git a/toonz/sources/toonz/tapp.h b/toonz/sources/toonz/tapp.h index ae97c52..ec5695a 100644 --- a/toonz/sources/toonz/tapp.h +++ b/toonz/sources/toonz/tapp.h @@ -160,7 +160,7 @@ public: int getCurrentLevelStyleIndex() const override; - void setCurrentLevelStyleIndex(int index) override; + void setCurrentLevelStyleIndex(int index, bool forceUpdate = false) override; void setMainWindow(QMainWindow *mainWindow) { m_mainWindow = mainWindow; } /*! diff --git a/toonz/sources/toonz/tasksviewer.cpp b/toonz/sources/toonz/tasksviewer.cpp index e9abdf6..f76bbd8 100644 --- a/toonz/sources/toonz/tasksviewer.cpp +++ b/toonz/sources/toonz/tasksviewer.cpp @@ -324,7 +324,7 @@ void TaskSheet::update(TFarmTask *task) { m_commandLine->setText(task->getCommandLine()); m_server->setText(task->m_server); m_submittedBy->setText(task->m_user); - m_submittedOn->setText(task->m_submissionDate.toString()); + m_submittedOn->setText(task->m_callerMachineName); m_priority->setText(QString::number(task->m_priority)); m_submitDate->setText(task->m_submissionDate.toString()); m_startDate->setText(task->m_startDate.toString()); diff --git a/toonz/sources/toonz/tpanels.cpp b/toonz/sources/toonz/tpanels.cpp index 0f77011..4e5a6c1 100644 --- a/toonz/sources/toonz/tpanels.cpp +++ b/toonz/sources/toonz/tpanels.cpp @@ -53,6 +53,7 @@ #include "toonzqt/tselectionhandle.h" #include "toonzqt/tmessageviewer.h" #include "toonzqt/scriptconsole.h" +#include "toonzqt/fxsettings.h" // TnzLib includes #include "toonz/palettecontroller.h" @@ -1358,3 +1359,52 @@ public: OpenFloatingPanel openHistoryPanelCommand(MI_OpenHistoryPanel, "HistoryPanel", QObject::tr("History")); //============================================================================= + +//============================================================================= +// FxSettings +//----------------------------------------------------------------------------- + +FxSettingsPanel::FxSettingsPanel(QWidget *parent) : TPanel(parent) { + TApp *app = TApp::instance(); + TSceneHandle *hScene = app->getCurrentScene(); + TPixel32 col1, col2; + Preferences::instance()->getChessboardColors(col1, col2); + + m_fxSettings = new FxSettings(this, col1, col2); + m_fxSettings->setSceneHandle(hScene); + m_fxSettings->setFxHandle(app->getCurrentFx()); + m_fxSettings->setFrameHandle(app->getCurrentFrame()); + m_fxSettings->setXsheetHandle(app->getCurrentXsheet()); + m_fxSettings->setLevelHandle(app->getCurrentLevel()); + m_fxSettings->setObjectHandle(app->getCurrentObject()); + + m_fxSettings->setCurrentFx(); + + setWidget(m_fxSettings); +} + +//============================================================================= +// FxSettingsFactory +//----------------------------------------------------------------------------- + +class FxSettingsFactory final : public TPanelFactory { +public: + FxSettingsFactory() : TPanelFactory("FxSettings") {} + + TPanel *createPanel(QWidget *parent) override { + FxSettingsPanel *panel = new FxSettingsPanel(parent); + panel->move(qApp->desktop()->screenGeometry(panel).center()); + panel->setObjectName(getPanelType()); + panel->setWindowTitle(QObject::tr("Fx Settings")); + panel->setMinimumSize(390, 85); + panel->allowMultipleInstances(false); + return panel; + } + + void initialize(TPanel *panel) override { assert(0); } + +} FxSettingsFactory; + +//============================================================================= +OpenFloatingPanel openFxSettingsCommand(MI_FxParamEditor, "FxSettings", + QObject::tr("Fx Settings")); diff --git a/toonz/sources/toonz/tpanels.h b/toonz/sources/toonz/tpanels.h index 2a0498a..904902b 100644 --- a/toonz/sources/toonz/tpanels.h +++ b/toonz/sources/toonz/tpanels.h @@ -25,6 +25,8 @@ class FunctionViewer; class FlipBook; class ToolOptions; class ComboViewerPanel; +class FxSettings; + //========================================================= // PaletteViewerPanel //--------------------------------------------------------- @@ -267,4 +269,17 @@ protected: void widgetClearFocusOnLeave() override; }; +//========================================================= +// FxSettingsPanel +//--------------------------------------------------------- + +class FxSettingsPanel final : public TPanel { + Q_OBJECT + + FxSettings *m_fxSettings; + +public: + FxSettingsPanel(QWidget *parent); +}; + #endif diff --git a/toonz/sources/toonz/vectorizerpopup.cpp b/toonz/sources/toonz/vectorizerpopup.cpp index 0b1335f..91b0b52 100644 --- a/toonz/sources/toonz/vectorizerpopup.cpp +++ b/toonz/sources/toonz/vectorizerpopup.cpp @@ -190,6 +190,17 @@ void getSelectedFids(std::vector &fids, TXshSimpleLevel *level, for (fst = fidsSet.begin(); fst != fsEnd; ++fst) fids.push_back(*fst); } +// Toonz Raster Level may have palette including MyPaint styles, +// which cannot be rendered in vector levels. +// In such case replace MyPaint styles by solid color styles. +void replaceMyPaintBrushStyles(TPalette *palette) { + for (int s = 0; s < palette->getStyleCount(); s++) { + TColorStyle *style = palette->getStyle(s); + if (style->getTagId() == 4001) // TMyPaintBrushStyle + palette->setStyle(s, style->getMainColor()); + } +} + } // namespace //***************************************************************************** @@ -288,10 +299,12 @@ void Vectorizer::setLevel(const TXshSimpleLevelP &level) { vl->setName(levelName); } - TPalette *palette = 0; - if (sl->getType() == TZP_XSHLEVEL) palette = sl->getPalette(); - - palette = palette ? palette->clone() : new TPalette; + TPalette *palette = 0; + if (sl->getType() == TZP_XSHLEVEL) { + palette = sl->getPalette()->clone(); + replaceMyPaintBrushStyles(palette); + } else + palette = new TPalette; palette->setPaletteName(vl->getName()); vl->setPalette(palette); diff --git a/toonz/sources/toonz/vectorizerswatch.cpp b/toonz/sources/toonz/vectorizerswatch.cpp index 2cfc4dd..dcdbe44 100644 --- a/toonz/sources/toonz/vectorizerswatch.cpp +++ b/toonz/sources/toonz/vectorizerswatch.cpp @@ -1,7 +1,6 @@ // TnzCore includes -#include "tpalette.h" #include "trasterimage.h" #include "ttoonzimage.h" #include "tvectorimage.h" @@ -108,6 +107,13 @@ struct VectorizationBuilder final : public TThread::Executor { QList m_listeners; + // Toonz Raster Level may have palette including MyPaint styles, + // which cannot be rendered in vector levels. + // In such case prepare an alternative palette in which MyPaint styles + // are converted to solid color styles. + TPaletteP m_substitutePalette; + void prepareSupstitutePaletteIfNeeded(int row, int col); + public: VectorizationBuilder() : m_row(-1), m_col(-1), m_image(), m_done(false), m_submitted(false) { @@ -159,7 +165,8 @@ bool VectorizationBuilder::update(TImageP &img) { if (row != m_row || col != m_col) { m_row = row, m_col = col; m_done = false; - addTask(new VectorizationSwatchTask(row, col)); + prepareSupstitutePaletteIfNeeded(row, col); + addTask(new VectorizationSwatchTask(row, col, m_substitutePalette)); computing = true; } @@ -170,8 +177,9 @@ bool VectorizationBuilder::update(TImageP &img) { //----------------------------------------------------------------------------- bool VectorizationBuilder::invalidate(TImageP &img) { - m_row = m_col = -1; - m_done = false; + m_row = m_col = -1; + m_done = false; + m_substitutePalette = TPaletteP(); return update(img); } @@ -190,12 +198,31 @@ void VectorizationBuilder::notifyDone(TImageP img) { } } +//----------------------------------------------------------------------------- + +void VectorizationBuilder::prepareSupstitutePaletteIfNeeded(int row, int col) { + // Retrieve the image to be vectorized + TToonzImageP ti(getXsheetImage(row, col)); + if (!ti) return; + m_substitutePalette = ti->getPalette()->clone(); + bool found = false; + for (int s = 0; s < m_substitutePalette->getStyleCount(); s++) { + TColorStyle *style = m_substitutePalette->getStyle(s); + if (style->getTagId() == 4001) { // TMyPaintBrushStyle + found = true; + m_substitutePalette->setStyle(s, style->getMainColor()); + } + } + if (!found) m_substitutePalette = TPaletteP(); +} + //***************************************************************************** // VectorizationSwatchTask implementation //***************************************************************************** -VectorizationSwatchTask::VectorizationSwatchTask(int row, int col) - : m_row(row), m_col(col) { +VectorizationSwatchTask::VectorizationSwatchTask(int row, int col, + TPaletteP substitutePalette) + : m_row(row), m_col(col), m_substitutePalette(substitutePalette) { // Establish connections to default slots; the started one must be blocking, // so that run() awaits until it has been performed. @@ -237,7 +264,7 @@ void VectorizationSwatchTask::run() { TPointD center, dpi; if (TToonzImageP ti = m_image) { - palette = ti->getPalette(); + palette = (m_substitutePalette) ? m_substitutePalette : ti->getPalette(); center = ti->getRaster()->getCenterD(); ti->getDpi(dpi.x, dpi.y); } else if (TRasterImageP ri = m_image) { diff --git a/toonz/sources/toonz/vectorizerswatch.h b/toonz/sources/toonz/vectorizerswatch.h index 6827d9d..ce5f870 100644 --- a/toonz/sources/toonz/vectorizerswatch.h +++ b/toonz/sources/toonz/vectorizerswatch.h @@ -3,6 +3,9 @@ #ifndef VECTORIZER_SWATCH_H #define VECTORIZER_SWATCH_H +// TnzCore includes +#include "tpalette.h" + // Toonz includes #include "tthread.h" #include "timage.h" @@ -95,8 +98,11 @@ class VectorizationSwatchTask final : public TThread::Runnable { std::unique_ptr m_config; + TPaletteP m_substitutePalette; + public: - VectorizationSwatchTask(int row, int col); + VectorizationSwatchTask(int row, int col, + TPaletteP substitutePalette = TPaletteP()); void run() override; void onStarted(TThread::RunnableP task) override; diff --git a/toonz/sources/toonz/versioncontrol.cpp b/toonz/sources/toonz/versioncontrol.cpp index bf8f4cf..c99423f 100644 --- a/toonz/sources/toonz/versioncontrol.cpp +++ b/toonz/sources/toonz/versioncontrol.cpp @@ -15,9 +15,11 @@ #include "toonz/palettecontroller.h" #include "toonz/tpalettehandle.h" #include "toonz/tscenehandle.h" +#include "toonz/tproject.h" #include "tsystem.h" #include "tenv.h" #include "tapp.h" +#include "permissionsmanager.h" #include #include @@ -316,6 +318,18 @@ VersionControlManager *VersionControlManager::instance() { } //----------------------------------------------------------------------------- +void setVersionControlCredentials(QString currentPath) { + VersionControl *vc = VersionControl::instance(); + QList repositories = vc->getRepositories(); + int repoCount = repositories.size(); + for (int i = 0; i < repoCount; i++) { + SVNRepository r = repositories.at(i); + if (!currentPath.startsWith(r.m_localPath)) continue; + vc->setUserName(r.m_username); + vc->setPassword(r.m_password); + return; + } +} void VersionControlManager::setFrameRange(TLevelSet *levelSet, bool deleteLater) { @@ -327,8 +341,7 @@ void VersionControlManager::setFrameRange(TLevelSet *levelSet, m_deleteLater = deleteLater; QStringList args; - args << "propget"; - args << "partial-lock"; + args << "proplist"; bool checkVersionControl = false; bool filesAddedToArgs = false; @@ -341,8 +354,10 @@ void VersionControlManager::setFrameRange(TLevelSet *levelSet, TFilePath parentDir = sl->getScene()->decodeFilePath(sl->getPath().getParentDir()); if (VersionControl::instance()->isFolderUnderVersionControl( - toQString(parentDir))) + toQString(parentDir))) { checkVersionControl = true; + setVersionControlCredentials(toQString(parentDir)); + } } if (sl && sl->isReadOnly()) { @@ -379,6 +394,7 @@ void VersionControlManager::setFrameRange(TLevelSet *levelSet, } args << "--xml"; + args << "-v"; TFilePath path = m_scene->getScenePath(); path = m_scene->decodeFilePath(path); @@ -435,6 +451,8 @@ void VersionControlManager::onFrameRangeDone(const QString &text) { } } + setVersionControlCredentials(toQString(currentPath)); + QString username = VersionControl::instance()->getUserName(); QString hostName = TSystem::getHostName(); @@ -612,7 +630,15 @@ bool VersionControl::testSetup() { //----------------------------------------------------------------------------- bool VersionControl::isFolderUnderVersionControl(const QString &folderPath) { QDir dir(folderPath); - return dir.entryList(QDir::AllDirs | QDir::Hidden).contains(".svn"); + if (dir.entryList(QDir::AllDirs | QDir::Hidden).contains(".svn")) return true; + // For SVN 1.7 and greater, check parent directories to see if it's under + // version control + while (dir.cdUp()) { + if (dir.entryList(QDir::AllDirs | QDir::Hidden).contains(".svn")) + return true; + } + + return false; } //----------------------------------------------------------------------------- diff --git a/toonz/sources/toonz/versioncontroltimeline.cpp b/toonz/sources/toonz/versioncontroltimeline.cpp index 4250a87..75dfdf7 100644 --- a/toonz/sources/toonz/versioncontroltimeline.cpp +++ b/toonz/sources/toonz/versioncontroltimeline.cpp @@ -50,9 +50,7 @@ TimelineWidget::TimelineWidget(QWidget *parent) : QWidget(parent) { QLabel *label = new QLabel(tr("Recent Version")); label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); label->setAlignment(Qt::AlignHCenter); - label->setStyleSheet( - "background-color: rgb(220,220,220); border: 1px solid " - "rgb(150,150,150);"); + label->setStyleSheet("border: 1px solid rgb(150,150,150);"); mainLayout->addWidget(label); @@ -72,9 +70,7 @@ TimelineWidget::TimelineWidget(QWidget *parent) : QWidget(parent) { label = new QLabel(tr("Older Version")); label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); label->setAlignment(Qt::AlignHCenter); - label->setStyleSheet( - "background-color: rgb(220,220,220); border: 1px solid " - "rgb(150,150,150); "); + label->setStyleSheet("border: 1px solid rgb(150,150,150); "); mainLayout->addWidget(label); @@ -93,7 +89,7 @@ int TimelineWidget::getCurrentIndex() const { SVNTimeline::SVNTimeline(QWidget *parent, const QString &workingDir, const QString &fileName, const QStringList &auxFiles) - : Dialog(TApp::instance()->getMainWindow(), true, true) + : Dialog(TApp::instance()->getMainWindow(), true, false) , m_workingDir(workingDir) , m_auxFiles(auxFiles) , m_fileName(fileName) @@ -121,9 +117,7 @@ SVNTimeline::SVNTimeline(QWidget *parent, const QString &workingDir, hLayout->addStretch(); m_timelineWidget = new TimelineWidget; - m_timelineWidget->setStyleSheet( - "QListWidget { background-color: white; } QListWidget:item { margin: " - "5px; }"); + m_timelineWidget->setStyleSheet("QListWidget:item { margin: 5px; }"); m_timelineWidget->hide(); connect(m_timelineWidget->getListWidget(), SIGNAL(itemSelectionChanged()), this, SLOT(onSelectionChanged())); @@ -185,7 +179,7 @@ SVNTimeline::SVNTimeline(QWidget *parent, const QString &workingDir, SVNTimeline::~SVNTimeline() { removeTempFiles(); // Delete, if exist the sceneIcons folder - QDir d; + QDir d(QDir::tempPath()); d.rmdir("sceneIcons"); } @@ -269,8 +263,10 @@ void SVNTimeline::onLogDone(const QString &xmlResponse) { lwi->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); lwi->setToolTip(tooltip); lwi->setTextAlignment(Qt::AlignLeft); - m_tempFiles.append(new QTemporaryFile("svn_temp_img_" + QString::number(i) + - "." + fileNameType)); + QString tmpFileName = QDir::tempPath() + "/svn_temp_img_" + + QString::number(i) + "." + fileNameType; + m_tempFiles.append(new QTemporaryFile()); + m_tempFiles.last()->setFileName(tmpFileName); // Add also auxiliary files TFilePath fp(TFilePath(m_workingDir.toStdWString()) + @@ -283,10 +279,13 @@ void SVNTimeline::onLogDone(const QString &xmlResponse) { TFilePathSet::iterator it; for (it = fpset.begin(); it != fpset.end(); ++it) { TFilePath fp = *it; - if (fp.getType() == "tpl") - m_auxTempFiles.append( - new QTemporaryFile("svn_temp_img_" + QString::number(i) + "." + - QString::fromStdString(fp.getType()))); + if (fp.getType() == "tpl") { + QString tmpFileName = QDir::tempPath() + "/svn_temp_img_" + + QString::number(i) + "." + + QString::fromStdString(fp.getType()); + m_auxTempFiles.append(new QTemporaryFile()); + m_auxTempFiles.last()->setFileName(tmpFileName); + } } } // Add sceneIcon (only for scene files) @@ -296,17 +295,20 @@ void SVNTimeline::onLogDone(const QString &xmlResponse) { QDir dir(toQString(fp.getParentDir())); // Create the sceneIcons folder - QDir d; + QDir d(QDir::tempPath()); d.mkdir("sceneIcons"); - m_auxTempFiles.append( - new QTemporaryFile(QDir::tempPath() + QString("/sceneicons/") + - "svn_temp_img_" + QString::number(i) + " .png")); + QString tmpFileName = QDir::tempPath() + QString("/sceneicons/") + + "svn_temp_img_" + QString::number(i) + " .png"; + m_auxTempFiles.append(new QTemporaryFile()); + m_auxTempFiles.at(m_auxTempFiles.size() - 1)->setFileName(tmpFileName); } } m_listWidgetitems.append(lwi); } + setMinimumSize(430, 450); + m_timelineWidget->getListWidget()->update(); m_timelineWidget->show(); @@ -389,14 +391,13 @@ void SVNTimeline::exportToTemporaryFile(int index, bool isAuxFile) { // SceneIcons (pay attention to add a space at the fileName end) if (isAuxFile && fi.completeSuffix() == "png") { - args << "sceneIcons/" + fileName + " ." + extension + "@" + - m_log.at(index).m_revision; + args << "sceneIcons/" + fileName + " .png@" + m_log.at(index).m_revision; args << fi.absoluteFilePath(); } else { - args << fileName + "." + fi.completeSuffix() + "@" + - m_log.at(index).m_revision; + args << m_fileName + "@" + m_log.at(index).m_revision; args << fi.absoluteFilePath(); } + args << "--force"; // Export to temporary file... m_thread.executeCommand(m_workingDir, "svn", args, true); diff --git a/toonz/sources/toonz/viewerpane.cpp b/toonz/sources/toonz/viewerpane.cpp index a82f7e7..7373e7b 100644 --- a/toonz/sources/toonz/viewerpane.cpp +++ b/toonz/sources/toonz/viewerpane.cpp @@ -27,6 +27,7 @@ #include "toonz/tonionskinmaskhandle.h" #include "toutputproperties.h" #include "toonz/preferences.h" +#include "toonz/tproject.h" // TnzQt includes #include "toonzqt/menubarcommand.h" @@ -521,10 +522,12 @@ void SceneViewerPanel::changeWindowTitle() { int frame = app->getCurrentFrame()->getFrame(); QString name; if (app->getCurrentFrame()->isEditingScene()) { - QString sceneName = QString::fromStdWString(scene->getSceneName()); + TProject *project = scene->getProject(); + QString projectName = QString::fromStdString(project->getName().getName()); + QString sceneName = QString::fromStdWString(scene->getSceneName()); if (sceneName.isEmpty()) sceneName = tr("Untitled"); if (app->getCurrentScene()->getDirtyFlag()) sceneName += QString("*"); - name = tr("Scene: ") + sceneName; + name = tr("Scene: ") + sceneName + tr(" :: Project: ") + projectName; if (frame >= 0) name = name + tr(" :: Frame: ") + tr(std::to_string(frame + 1).c_str()); diff --git a/toonz/sources/toonz/xshcellmover.cpp b/toonz/sources/toonz/xshcellmover.cpp index 6a5858b..ece092c 100644 --- a/toonz/sources/toonz/xshcellmover.cpp +++ b/toonz/sources/toonz/xshcellmover.cpp @@ -183,10 +183,7 @@ bool CellsMover::canMoveCells(const TPoint &pos) { while (i < m_rowCount * m_colCount) { TXshColumn::ColumnType srcType = getColumnTypeFromCell(i); int dstIndex = c + i; - if (!m_orientation->isVerticalTimeline() && - dstIndex >= xsh->getColumnCount()) - return false; - TXshColumn *dstColumn = xsh->getColumn(dstIndex); + TXshColumn *dstColumn = xsh->getColumn(dstIndex); if (srcType == TXshColumn::eZeraryFxType || srcType == TXshColumn::eSoundTextType) return false; @@ -663,8 +660,8 @@ void LevelMoverTool::drawCellsArea(QPainter &p) { CellRange(CellPosition(rect.y0, rect.x0), CellPosition(rect.y1 + 1, rect.x1 + 1))); else { - int newY0 = qMax(rect.y0, rect.y1); - int newY1 = qMin(rect.y0, rect.y1); + int newY0 = std::max(rect.y0, rect.y1); + int newY1 = std::min(rect.y0, rect.y1); screen = getViewer()->rangeToXYRect(CellRange( CellPosition(rect.x0, newY0), CellPosition(rect.x1 + 1, newY1 - 1))); } diff --git a/toonz/sources/toonz/xshcellviewer.cpp b/toonz/sources/toonz/xshcellviewer.cpp index 745e96f..7fe015f 100644 --- a/toonz/sources/toonz/xshcellviewer.cpp +++ b/toonz/sources/toonz/xshcellviewer.cpp @@ -318,46 +318,36 @@ bool isGlobalKeyFrameWithSameTypeDiffFromLinear(TStageObject *stageObject, TDoubleKeyframe::Type type = stageObject->getParam(TStageObject::T_Angle)->getKeyframeAt(frame).m_type; if (type == TDoubleKeyframe::Linear) return false; - if (type != - stageObject->getParam(TStageObject::T_X) - ->getKeyframeAt(frame) - .m_type || - type != - stageObject->getParam(TStageObject::T_Y) - ->getKeyframeAt(frame) - .m_type || - type != - stageObject->getParam(TStageObject::T_Z) - ->getKeyframeAt(frame) - .m_type || - type != - stageObject->getParam(TStageObject::T_SO) - ->getKeyframeAt(frame) - .m_type || - type != - stageObject->getParam(TStageObject::T_ScaleX) - ->getKeyframeAt(frame) - .m_type || - type != - stageObject->getParam(TStageObject::T_ScaleY) - ->getKeyframeAt(frame) - .m_type || - type != - stageObject->getParam(TStageObject::T_Scale) - ->getKeyframeAt(frame) - .m_type || - type != - stageObject->getParam(TStageObject::T_Path) - ->getKeyframeAt(frame) - .m_type || - type != - stageObject->getParam(TStageObject::T_ShearX) - ->getKeyframeAt(frame) - .m_type || - type != - stageObject->getParam(TStageObject::T_ShearY) - ->getKeyframeAt(frame) - .m_type) + if (type != stageObject->getParam(TStageObject::T_X) + ->getKeyframeAt(frame) + .m_type || + type != stageObject->getParam(TStageObject::T_Y) + ->getKeyframeAt(frame) + .m_type || + type != stageObject->getParam(TStageObject::T_Z) + ->getKeyframeAt(frame) + .m_type || + type != stageObject->getParam(TStageObject::T_SO) + ->getKeyframeAt(frame) + .m_type || + type != stageObject->getParam(TStageObject::T_ScaleX) + ->getKeyframeAt(frame) + .m_type || + type != stageObject->getParam(TStageObject::T_ScaleY) + ->getKeyframeAt(frame) + .m_type || + type != stageObject->getParam(TStageObject::T_Scale) + ->getKeyframeAt(frame) + .m_type || + type != stageObject->getParam(TStageObject::T_Path) + ->getKeyframeAt(frame) + .m_type || + type != stageObject->getParam(TStageObject::T_ShearX) + ->getKeyframeAt(frame) + .m_type || + type != stageObject->getParam(TStageObject::T_ShearY) + ->getKeyframeAt(frame) + .m_type) return false; return true; } @@ -380,46 +370,36 @@ bool isGlobalKeyFrameWithSamePrevTypeDiffFromLinear(TStageObject *stageObject, ->getKeyframeAt(frame) .m_prevType; if (type == TDoubleKeyframe::Linear) return false; - if (type != - stageObject->getParam(TStageObject::T_X) - ->getKeyframeAt(frame) - .m_prevType || - type != - stageObject->getParam(TStageObject::T_Y) - ->getKeyframeAt(frame) - .m_prevType || - type != - stageObject->getParam(TStageObject::T_Z) - ->getKeyframeAt(frame) - .m_prevType || - type != - stageObject->getParam(TStageObject::T_SO) - ->getKeyframeAt(frame) - .m_prevType || - type != - stageObject->getParam(TStageObject::T_ScaleX) - ->getKeyframeAt(frame) - .m_prevType || - type != - stageObject->getParam(TStageObject::T_ScaleY) - ->getKeyframeAt(frame) - .m_prevType || - type != - stageObject->getParam(TStageObject::T_Scale) - ->getKeyframeAt(frame) - .m_prevType || - type != - stageObject->getParam(TStageObject::T_Path) - ->getKeyframeAt(frame) - .m_prevType || - type != - stageObject->getParam(TStageObject::T_ShearX) - ->getKeyframeAt(frame) - .m_prevType || - type != - stageObject->getParam(TStageObject::T_ShearY) - ->getKeyframeAt(frame) - .m_prevType) + if (type != stageObject->getParam(TStageObject::T_X) + ->getKeyframeAt(frame) + .m_prevType || + type != stageObject->getParam(TStageObject::T_Y) + ->getKeyframeAt(frame) + .m_prevType || + type != stageObject->getParam(TStageObject::T_Z) + ->getKeyframeAt(frame) + .m_prevType || + type != stageObject->getParam(TStageObject::T_SO) + ->getKeyframeAt(frame) + .m_prevType || + type != stageObject->getParam(TStageObject::T_ScaleX) + ->getKeyframeAt(frame) + .m_prevType || + type != stageObject->getParam(TStageObject::T_ScaleY) + ->getKeyframeAt(frame) + .m_prevType || + type != stageObject->getParam(TStageObject::T_Scale) + ->getKeyframeAt(frame) + .m_prevType || + type != stageObject->getParam(TStageObject::T_Path) + ->getKeyframeAt(frame) + .m_prevType || + type != stageObject->getParam(TStageObject::T_ShearX) + ->getKeyframeAt(frame) + .m_prevType || + type != stageObject->getParam(TStageObject::T_ShearY) + ->getKeyframeAt(frame) + .m_prevType) return false; return true; } @@ -778,7 +758,7 @@ void RenameCellField::renameCell() { fid = TFrameId(fidRe.cap(1).toInt(), fidRe.cap(2) == "" ? 0 : fidRe.cap(2).toLatin1()[0]); #else - fid = TFrameId(fidRe.cap(1).toInt(), + fid = TFrameId(fidRe.cap(1).toInt(), fidRe.cap(2) == "" ? 0 : fidRe.cap(2).toAscii()[0]); #endif FilmstripCmd::renumberDrawing(sl, cell.m_frameId, fid); @@ -792,6 +772,7 @@ void RenameCellField::renameCell() { if (!cellSelection) return; QList cells; + bool hasFrameZero = false; if (levelName == L"") { int r0, c0, r1, c1; @@ -828,7 +809,7 @@ void RenameCellField::renameCell() { } TXshLevel *xl = cell.m_level.getPointer(); - if (!xl || (xl->getSimpleLevel() && + if (!xl || (xl->getSimpleLevel() && !xl->getSimpleLevel()->isEmpty() && xl->getSimpleLevel()->getFirstFid() == TFrameId::NO_FRAME)) { cells.append(TXshCell()); continue; @@ -837,7 +818,9 @@ void RenameCellField::renameCell() { if (fid == TFrameId::NO_FRAME) fid = (m_row - tmpRow <= 1) ? cell.m_frameId : TFrameId(0); cells.append(TXshCell(xl, fid)); - changed = true; + changed = true; + hasFrameZero = (fid.getNumber() == 0 && xl->getSimpleLevel() && + xl->getSimpleLevel()->isFid(fid)); } if (!changed) return; } else { @@ -857,9 +840,11 @@ void RenameCellField::renameCell() { } if (!xl) return; cells.append(TXshCell(xl, fid)); + hasFrameZero = (fid.getNumber() == 0 && xl->getSimpleLevel() && + xl->getSimpleLevel()->isFid(fid)); } - if (fid.getNumber() == 0) { + if (fid.getNumber() == 0 && !hasFrameZero) { TCellSelection::Range range = cellSelection->getSelectedCells(); cellSelection->deleteCells(); // revert cell selection @@ -1120,8 +1105,8 @@ void CellArea::drawCells(QPainter &p, const QRect toBeUpdated) { c0 = visible.from().layer(); c1 = visible.to().layer(); if (!m_viewer->orientation()->isVerticalTimeline()) { - int colCount = qMax(1, xsh->getColumnCount()); - c1 = qMin(c1, colCount - 1); + int colCount = std::max(1, xsh->getColumnCount()); + c1 = std::min(c1, colCount - 1); } drawNonEmptyBackground(p); @@ -1291,8 +1276,8 @@ void CellArea::drawSelectionBackground(QPainter &p) const { CellRange(CellPosition(selRow0, selCol0), CellPosition(selRow1 + 1, selCol1 + 1))); else { - int newSelCol0 = qMax(selCol0, selCol1); - int newSelCol1 = qMin(selCol0, selCol1); + int newSelCol0 = std::max(selCol0, selCol1); + int newSelCol1 = std::min(selCol0, selCol1); selectionRect = m_viewer->rangeToXYRect( CellRange(CellPosition(selRow0, newSelCol0), CellPosition(selRow1 + 1, newSelCol1 - 1))); @@ -1794,10 +1779,10 @@ void CellArea::drawLevelCell(QPainter &p, int row, int col, bool isReference) { nameRect.adjust(0, 0, -frameAdj, 0); // draw text in red if the file does not exist - bool isRed = false; - TXshSimpleLevel *sl = cell.getSimpleLevel(); + bool isRed = false; + TXshSimpleLevel *sl = cell.getSimpleLevel(); if (sl && !sl->isFid(cell.m_frameId)) isRed = true; - TXshChildLevel *cl = cell.getChildLevel(); + TXshChildLevel *cl = cell.getChildLevel(); if (cl && cell.getFrameId().getNumber() - 1 >= cl->getFrameCount()) isRed = true; QColor penColor = @@ -1856,7 +1841,7 @@ void CellArea::drawLevelCell(QPainter &p, int row, int col, bool isReference) { else { std::string frameNumber(""); // set number - if (fid.getNumber() > 0) frameNumber = std::to_string(fid.getNumber()); + if (fid.getNumber() >= 0) frameNumber = std::to_string(fid.getNumber()); // add letter if (fid.getLetter() != 0) frameNumber.append(1, fid.getLetter()); fnum = QString::fromStdString(frameNumber); @@ -1897,8 +1882,9 @@ void CellArea::drawSoundTextCell(QPainter &p, int row, int col) { bool isSelected = cellSelection->isCellSelected(row, col) || columnSelection->isColumnSelected(col); - if (row > 0) prevCell = xsh->getCell(row - 1, col); // cell in previous frame - // nothing to draw + if (row > 0) + prevCell = xsh->getCell(row - 1, col); // cell in previous frame + // nothing to draw bool sameLevel = prevCell.m_level.getPointer() == cell.m_level.getPointer(); @@ -2004,7 +1990,7 @@ void CellArea::drawSoundTextCell(QPainter &p, int row, int col) { #ifdef _WIN32 fontName = "Arial"; #else - fontName = "Helvetica"; + fontName = "Helvetica"; #endif } static QFont font(fontName, -1, QFont::Normal); @@ -2036,7 +2022,7 @@ void CellArea::drawSoundTextCell(QPainter &p, int row, int col) { #if QT_VERSION >= 0x050500 QString elidaName = elideText(text, metric, nameRect.width(), "~"); #else - QString elidaName = elideText(text, font, nameRect.width(), "~"); + QString elidaName = elideText(text, font, nameRect.width(), "~"); #endif if (!sameLevel || prevCell.m_frameId != cell.m_frameId) @@ -2057,7 +2043,7 @@ void CellArea::drawPaletteCell(QPainter &p, int row, int col, bool isSelected = cellSelection->isCellSelected(row, col); if (row > 0) prevCell = xsh->getCell(row - 1, col); - TXshCell nextCell = xsh->getCell(row + 1, col); + TXshCell nextCell = xsh->getCell(row + 1, col); bool sameLevel = prevCell.m_level.getPointer() == cell.m_level.getPointer(); @@ -2068,8 +2054,8 @@ void CellArea::drawPaletteCell(QPainter &p, int row, int col, bool isAfterMarkers = distance > 0 && ((row - offset) % distance) == 0 && row != 0; - bool isRed = false; - TXshPaletteLevel *pl = cell.getPaletteLevel(); + bool isRed = false; + TXshPaletteLevel *pl = cell.getPaletteLevel(); if (pl && !pl->getPalette()) isRed = true; QPoint xy = m_viewer->positionToXY(CellPosition(row, col)); @@ -2201,7 +2187,7 @@ void CellArea::drawPaletteCell(QPainter &p, int row, int col, #ifdef _WIN32 fontName = "Arial"; #else - fontName = "Helvetica"; + fontName = "Helvetica"; #endif } static QFont font(fontName, -1, QFont::Normal); @@ -2531,6 +2517,8 @@ public: void undo() const override { m_pegbar->enableCycle(!m_pegbar->isCycleEnabled()); m_area->update(); + TApp::instance()->getCurrentScene()->setDirtyFlag(true); + TApp::instance()->getCurrentObject()->notifyObjectIdChanged(false); } void redo() const override { undo(); } int getSize() const override { return sizeof *this; } @@ -2694,8 +2682,9 @@ void CellArea::mousePressEvent(QMouseEvent *event) { } else if (isKeyframeFrame && row == k1 + 1 && o->rect(PredefinedRect::LOOP_ICON) .contains(mouseInCell)) { // cycle toggle - pegbar->enableCycle(!pegbar->isCycleEnabled()); - TUndoManager::manager()->add(new CycleUndo(pegbar, this)); + CycleUndo *undo = new CycleUndo(pegbar, this); + undo->redo(); + TUndoManager::manager()->add(undo); accept = true; } if (accept) { @@ -2709,11 +2698,16 @@ void CellArea::mousePressEvent(QMouseEvent *event) { if (m_levelExtenderRect.contains(pos.x, pos.y)) { m_viewer->getKeyframeSelection()->selectNone(); - setDragTool(XsheetGUI::DragTool::makeLevelExtenderTool(m_viewer)); + if (event->modifiers() & Qt::ControlModifier) + setDragTool( + XsheetGUI::DragTool::makeLevelExtenderTool(m_viewer, false)); + else + setDragTool(XsheetGUI::DragTool::makeLevelExtenderTool(m_viewer, true)); } else if (event->modifiers() & Qt::ControlModifier && m_upperLevelExtenderRect.contains(pos.x, pos.y)) { m_viewer->getKeyframeSelection()->selectNone(); - setDragTool(XsheetGUI::DragTool::makeLevelExtenderTool(m_viewer, true)); + setDragTool( + XsheetGUI::DragTool::makeLevelExtenderTool(m_viewer, false, true)); } else if ((!xsh->getCell(row, col).isEmpty()) && o->rect(PredefinedRect::DRAG_AREA) .adjusted(0, 0, -frameAdj, 0) @@ -2742,10 +2736,9 @@ void CellArea::mousePressEvent(QMouseEvent *event) { setDragTool(XsheetGUI::DragTool::makeLevelMoverTool(m_viewer)); } else { m_viewer->getKeyframeSelection()->selectNone(); - if (isSoundColumn && - o->rect(PredefinedRect::PREVIEW_TRACK) - .adjusted(0, 0, -frameAdj, 0) - .contains(mouseInCell)) + if (isSoundColumn && o->rect(PredefinedRect::PREVIEW_TRACK) + .adjusted(0, 0, -frameAdj, 0) + .contains(mouseInCell)) setDragTool(XsheetGUI::DragTool::makeSoundScrubTool( m_viewer, column->getSoundColumn())); else if (isSoundColumn && @@ -2871,7 +2864,7 @@ void CellArea::mouseMoveEvent(QMouseEvent *event) { m_viewer->getFrameNumberWithLetters(fid.getNumber()); } else { std::string frameNumber(""); - if (fid.getNumber() > 0) frameNumber = std::to_string(fid.getNumber()); + if (fid.getNumber() >= 0) frameNumber = std::to_string(fid.getNumber()); if (fid.getLetter() != 0) frameNumber.append(1, fid.getLetter()); m_tooltip = QString((frameNumber.empty()) @@ -2879,10 +2872,9 @@ void CellArea::mouseMoveEvent(QMouseEvent *event) { : QString::fromStdWString(levelName) + QString(" ") + QString::fromStdString(frameNumber)); } - } else if (isSoundColumn && - o->rect(PredefinedRect::PREVIEW_TRACK) - .adjusted(0, 0, -frameAdj, 0) - .contains(mouseInCell)) + } else if (isSoundColumn && o->rect(PredefinedRect::PREVIEW_TRACK) + .adjusted(0, 0, -frameAdj, 0) + .contains(mouseInCell)) m_tooltip = tr("Click and drag to play"); else if (m_levelExtenderRect.contains(pos)) m_tooltip = tr("Click and drag to repeat selected cells"); @@ -3132,9 +3124,8 @@ const bool CellArea::isControlPressed() { return isCtrlPressed; } void CellArea::createCellMenu(QMenu &menu, bool isCellSelected, TXshCell cell) { CommandManager *cmdManager = CommandManager::instance(); - bool soundCellsSelected = m_viewer->areSoundCellsSelected(); - - if (m_viewer->areSoundTextCellsSelected()) return; // Magpies stop here + bool soundCellsSelected = m_viewer->areSoundCellsSelected(); + bool soundTextCellsSelected = m_viewer->areSoundTextCellsSelected(); menu.addSeparator(); @@ -3145,13 +3136,17 @@ void CellArea::createCellMenu(QMenu &menu, bool isCellSelected, TXshCell cell) { } if (isCellSelected) { + bool addSeparator = false; // open fx settings instead of level settings when clicked on zerary fx // level - if (cell.m_level && cell.m_level->getZeraryFxLevel()) + if (cell.m_level && cell.m_level->getZeraryFxLevel()) { menu.addAction(cmdManager->getAction(MI_FxParamEditor)); - else + addSeparator = true; + } else if (!soundTextCellsSelected) { menu.addAction(cmdManager->getAction(MI_LevelSettings)); - menu.addSeparator(); + addSeparator = true; + } + if (addSeparator) menu.addSeparator(); if (!soundCellsSelected) { QMenu *reframeSubMenu = new QMenu(tr("Reframe"), this); @@ -3183,74 +3178,81 @@ void CellArea::createCellMenu(QMenu &menu, bool isCellSelected, TXshCell cell) { } menu.addMenu(eachSubMenu); - QMenu *editCellNumbersMenu = new QMenu(tr("Edit Cell Numbers"), this); - { - editCellNumbersMenu->addAction(cmdManager->getAction(MI_Reverse)); - editCellNumbersMenu->addAction(cmdManager->getAction(MI_Swing)); - editCellNumbersMenu->addAction(cmdManager->getAction(MI_Random)); - editCellNumbersMenu->addAction(cmdManager->getAction(MI_Dup)); - editCellNumbersMenu->addAction(cmdManager->getAction(MI_Rollup)); - editCellNumbersMenu->addAction(cmdManager->getAction(MI_Rolldown)); - editCellNumbersMenu->addAction(cmdManager->getAction(MI_TimeStretch)); - editCellNumbersMenu->addAction( - cmdManager->getAction(MI_AutoInputCellNumber)); + if (!soundTextCellsSelected) { + QMenu *editCellNumbersMenu = new QMenu(tr("Edit Cell Numbers"), this); + { + editCellNumbersMenu->addAction(cmdManager->getAction(MI_Reverse)); + editCellNumbersMenu->addAction(cmdManager->getAction(MI_Swing)); + editCellNumbersMenu->addAction(cmdManager->getAction(MI_Random)); + editCellNumbersMenu->addAction(cmdManager->getAction(MI_Dup)); + editCellNumbersMenu->addAction(cmdManager->getAction(MI_Rollup)); + editCellNumbersMenu->addAction(cmdManager->getAction(MI_Rolldown)); + editCellNumbersMenu->addAction(cmdManager->getAction(MI_TimeStretch)); + editCellNumbersMenu->addAction( + cmdManager->getAction(MI_AutoInputCellNumber)); + } + menu.addMenu(editCellNumbersMenu); } - menu.addMenu(editCellNumbersMenu); menu.addAction(cmdManager->getAction(MI_FillEmptyCell)); menu.addSeparator(); - menu.addAction(cmdManager->getAction(MI_Autorenumber)); + + if (!soundTextCellsSelected) + menu.addAction(cmdManager->getAction(MI_Autorenumber)); } - QMenu *replaceLevelMenu = new QMenu(tr("Replace Level"), this); - menu.addMenu(replaceLevelMenu); + if (!soundTextCellsSelected) { + QMenu *replaceLevelMenu = new QMenu(tr("Replace Level"), this); + menu.addMenu(replaceLevelMenu); - replaceLevelMenu->addAction(cmdManager->getAction(MI_ReplaceLevel)); + replaceLevelMenu->addAction(cmdManager->getAction(MI_ReplaceLevel)); - replaceLevelMenu->addAction( - cmdManager->getAction(MI_ReplaceParentDirectory)); + replaceLevelMenu->addAction( + cmdManager->getAction(MI_ReplaceParentDirectory)); - { - // replace with another level in scene cast - std::vector levels; - TApp::instance() - ->getCurrentScene() - ->getScene() - ->getLevelSet() - ->listLevels(levels); - if (!levels.empty()) { - QMenu *replaceMenu = replaceLevelMenu->addMenu(tr("Replace with")); - connect(replaceMenu, SIGNAL(triggered(QAction *)), this, - SLOT(onReplaceByCastedLevel(QAction *))); - for (int i = 0; i < (int)levels.size(); i++) { - if (!levels[i]->getSimpleLevel() && !levels[i]->getChildLevel()) - continue; - - if (levels[i]->getChildLevel() && - !TApp::instance()->getCurrentXsheet()->getXsheet()->isLevelUsed( - levels[i])) - continue; - - QString tmpLevelName = QString::fromStdWString(levels[i]->getName()); - QAction *tmpAction = new QAction(tmpLevelName, replaceMenu); - tmpAction->setData(tmpLevelName); - replaceMenu->addAction(tmpAction); + { + // replace with another level in scene cast + std::vector levels; + TApp::instance() + ->getCurrentScene() + ->getScene() + ->getLevelSet() + ->listLevels(levels); + if (!levels.empty()) { + QMenu *replaceMenu = replaceLevelMenu->addMenu(tr("Replace with")); + connect(replaceMenu, SIGNAL(triggered(QAction *)), this, + SLOT(onReplaceByCastedLevel(QAction *))); + for (int i = 0; i < (int)levels.size(); i++) { + if (!levels[i]->getSimpleLevel() && !levels[i]->getChildLevel()) + continue; + + if (levels[i]->getChildLevel() && + !TApp::instance()->getCurrentXsheet()->getXsheet()->isLevelUsed( + levels[i])) + continue; + + QString tmpLevelName = + QString::fromStdWString(levels[i]->getName()); + QAction *tmpAction = new QAction(tmpLevelName, replaceMenu); + tmpAction->setData(tmpLevelName); + replaceMenu->addAction(tmpAction); + } } } - } - if (!soundCellsSelected) { - if (selectionContainTlvImage(m_viewer->getCellSelection(), - m_viewer->getXsheet())) - replaceLevelMenu->addAction( - cmdManager->getAction(MI_RevertToCleanedUp)); - if (selectionContainLevelImage(m_viewer->getCellSelection(), + if (!soundCellsSelected && !soundTextCellsSelected) { + if (selectionContainTlvImage(m_viewer->getCellSelection(), m_viewer->getXsheet())) - replaceLevelMenu->addAction( - cmdManager->getAction(MI_RevertToLastSaved)); - menu.addAction(cmdManager->getAction(MI_SetKeyframes)); + replaceLevelMenu->addAction( + cmdManager->getAction(MI_RevertToCleanedUp)); + if (selectionContainLevelImage(m_viewer->getCellSelection(), + m_viewer->getXsheet())) + replaceLevelMenu->addAction( + cmdManager->getAction(MI_RevertToLastSaved)); + menu.addAction(cmdManager->getAction(MI_SetKeyframes)); + } + menu.addSeparator(); } - menu.addSeparator(); menu.addAction(cmdManager->getAction(MI_Cut)); menu.addAction(cmdManager->getAction(MI_Copy)); @@ -3265,7 +3267,8 @@ void CellArea::createCellMenu(QMenu &menu, bool isCellSelected, TXshCell cell) { menu.addAction(cmdManager->getAction(MI_Clear)); menu.addAction(cmdManager->getAction(MI_Insert)); - menu.addAction(cmdManager->getAction(MI_Duplicate)); + if (!soundTextCellsSelected) + menu.addAction(cmdManager->getAction(MI_Duplicate)); menu.addSeparator(); TXshSimpleLevel *sl = TApp::instance()->getCurrentLevel()->getSimpleLevel(); @@ -3513,4 +3516,4 @@ void CellArea::onStepChanged(QAction *act) { //----------------------------------------------------------------------------- -} // namespace XsheetGUI; +} // namespace XsheetGUI diff --git a/toonz/sources/toonz/xshcolumnviewer.cpp b/toonz/sources/toonz/xshcolumnviewer.cpp index b974f4b..1e6cf08 100644 --- a/toonz/sources/toonz/xshcolumnviewer.cpp +++ b/toonz/sources/toonz/xshcolumnviewer.cpp @@ -1531,8 +1531,8 @@ void ColumnArea::paintEvent(QPaintEvent *event) { // AREA c0 = cellRange.from().layer(); c1 = cellRange.to().layer(); if (!m_viewer->orientation()->isVerticalTimeline()) { - int colCount = qMax(1, xsh->getColumnCount()); - c1 = qMin(c1, colCount - 1); + int colCount = std::max(1, xsh->getColumnCount()); + c1 = std::min(c1, colCount - 1); } ColumnFan *columnFan = xsh->getColumnFan(m_viewer->orientation()); diff --git a/toonz/sources/toonz/xsheetcmd.cpp b/toonz/sources/toonz/xsheetcmd.cpp index 1544141..731a532 100644 --- a/toonz/sources/toonz/xsheetcmd.cpp +++ b/toonz/sources/toonz/xsheetcmd.cpp @@ -699,64 +699,93 @@ private: int m_row; int m_col; int m_count; + bool m_selected; + TCellSelection::Range m_range; + std::vector> emptyCells; + typedef std::map, int> FramesMap; + FramesMap m_frameRanges; public: - DrawingSubtitutionGroupUndo(int dir, int row, int col) - : m_direction(dir), m_col(col), m_row(row) { - m_count = 1; - TXshCell cell = TTool::getApplication() - ->getCurrentScene() - ->getScene() - ->getXsheet() - ->getCell(m_row, m_col); - if (!cell.m_level || - !(cell.m_level->getSimpleLevel() || cell.m_level->getChildLevel() || - cell.m_level->getSoundTextLevel())) - return; + DrawingSubtitutionGroupUndo(int dir, int row, int col, bool selected, + TCellSelection::Range range) + : m_direction(dir) + , m_col(col) + , m_row(row) + , m_selected(selected) + , m_range(range) { + TXsheet *xsh = + TTool::getApplication()->getCurrentScene()->getScene()->getXsheet(); + + if (!selected) { + m_range.m_c0 = col; + m_range.m_r0 = row; + m_range.m_c1 = col; + m_range.m_r1 = row; + } - TFrameId id = cell.m_frameId; - - TXshCell nextCell = TTool::getApplication() - ->getCurrentScene() - ->getScene() - ->getXsheet() - ->getCell(m_row + m_count, m_col); - if (!nextCell.m_level || - !(nextCell.m_level->getSimpleLevel() || - nextCell.m_level->getChildLevel() || - nextCell.m_level->getSoundTextLevel())) - return; + for (int c = m_range.m_c0; c <= m_range.m_c1; c++) { + for (int r = m_range.m_r0; r <= m_range.m_r1; r++) { + TXshCell baseCell = xsh->getCell(r, c); + + // Find the 1st populated cell in the column + if (baseCell.isEmpty()) continue; - TFrameId nextId = nextCell.m_frameId; + FramesMap::key_type frameBaseKey(r, c); + int frameCount = 1; + TXshCell nextCell = xsh->getCell((r + frameCount), c); + while (nextCell == baseCell || + (nextCell.isEmpty() && (r + frameCount) <= m_range.m_r1)) { + if (nextCell.isEmpty()) + emptyCells.push_back(std::make_pair((r + frameCount), c)); - while (id == nextId) { - m_count++; - nextCell = TTool::getApplication() - ->getCurrentScene() - ->getScene() - ->getXsheet() - ->getCell(m_row + m_count, m_col); - nextId = nextCell.m_frameId; + frameCount++; + nextCell = xsh->getCell((r + frameCount), c); + } + m_frameRanges.insert(std::make_pair(frameBaseKey, 0)); + m_frameRanges[frameBaseKey] = frameCount; + r = r + (frameCount - 1); // Skip frames in range we've processed + } } } void undo() const override { - int n = 1; - DrawingSubtitutionUndo::changeDrawing(-m_direction, m_row, m_col); - while (n < m_count) { - DrawingSubtitutionUndo::changeDrawing(-m_direction, m_row + n, m_col); - n++; + TXsheet *xsh = + TTool::getApplication()->getCurrentScene()->getScene()->getXsheet(); + FramesMap::const_iterator ct; + for (ct = m_frameRanges.begin(); ct != m_frameRanges.end(); ++ct) { + int n = 0; + while (n < ct->second) { + int row = ct->first.first + n; + int col = ct->first.second; + std::vector>::const_iterator it; + bool found = false; + for (it = emptyCells.begin(); it != emptyCells.end(); ++it) { + if (it->first == row && it->second == col) { + xsh->clearCells(row, col); + found = true; + } + } + + if (!found) + DrawingSubtitutionUndo::changeDrawing(-m_direction, row, col); + n++; + } } + TApp::instance()->getCurrentXsheet()->notifyXsheetChanged(); TApp::instance()->getCurrentScene()->setDirtyFlag(true); } void redo() const override { - int n = 1; - DrawingSubtitutionUndo::changeDrawing(m_direction, m_row, m_col); - while (n < m_count) { - DrawingSubtitutionUndo::changeDrawing(m_direction, m_row + n, m_col); - n++; + FramesMap::const_iterator ct; + for (ct = m_frameRanges.begin(); ct != m_frameRanges.end(); ++ct) { + int n = 0; + while (n < ct->second) { + int row = ct->first.first + n; + int col = ct->first.second; + DrawingSubtitutionUndo::changeDrawing(m_direction, row, col); + n++; + } } TApp::instance()->getCurrentXsheet()->notifyXsheetChanged(); TApp::instance()->getCurrentScene()->setDirtyFlag(true); @@ -885,15 +914,19 @@ static void drawingSubstituion(int dir) { } static void drawingSubstituionGroup(int dir) { + TCellSelection *selection = dynamic_cast( + TTool::getApplication()->getCurrentSelection()->getSelection()); + TCellSelection::Range range; + bool selected = false; + if (selection) { + range = selection->getSelectedCells(); + if (!(range.isEmpty())) selected = true; + } int row = TTool::getApplication()->getCurrentFrame()->getFrame(); int col = TTool::getApplication()->getCurrentColumn()->getColumnIndex(); - TXshCell cell = - TApp::instance()->getCurrentScene()->getScene()->getXsheet()->getCell( - row, col); - bool isEmpty = cell.isEmpty(); - if (isEmpty) return; + DrawingSubtitutionGroupUndo *undo = - new DrawingSubtitutionGroupUndo(dir, row, col); + new DrawingSubtitutionGroupUndo(dir, row, col, selected, range); TUndoManager::manager()->add(undo); undo->redo(); } diff --git a/toonz/sources/toonz/xsheetdragtool.cpp b/toonz/sources/toonz/xsheetdragtool.cpp index f8e3ce6..3e1a135 100644 --- a/toonz/sources/toonz/xsheetdragtool.cpp +++ b/toonz/sources/toonz/xsheetdragtool.cpp @@ -325,15 +325,17 @@ class LevelExtenderUndo final : public TUndo { int m_col, m_row, m_deltaRow; std::vector m_cells; // righe x colonne + bool m_insert; bool m_invert; // upper-directional public: - LevelExtenderUndo(bool invert = false) + LevelExtenderUndo(bool insert = true, bool invert = false) : m_colCount(0) , m_rowCount(0) , m_col(0) , m_row(0) , m_deltaRow(0) + , m_insert(insert) , m_invert(invert) {} void setCells(TXsheet *xsh, int row, int col, int rowCount, int colCount) { @@ -388,6 +390,7 @@ public: } // for upper-directional smart tab + // also used for non-insert(overwriting) extension void clearCells() const { assert(m_deltaRow != 0); TXsheet *xsh = TApp::instance()->getCurrentXsheet()->getXsheet(); @@ -395,21 +398,33 @@ public: for (int c = m_col; c < m_col + m_colCount; c++) { TXshColumn *column = xsh->getColumn(c); if (column && column->getSoundColumn()) continue; - xsh->clearCells(m_row, c, count); + if (m_invert) + xsh->clearCells(m_row, c, count); + else + xsh->clearCells(m_row + m_rowCount - count, c, count); } } // for upper-directional smart tab + // also used for non-insert(overwriting) extension void setCells() const { assert(m_deltaRow != 0); TXsheet *xsh = TApp::instance()->getCurrentXsheet()->getXsheet(); int count = abs(m_deltaRow); - int r1 = m_row + count - 1; + + int r0, r1; + if (m_invert) { + r0 = m_row; + r1 = m_row + count - 1; + } else { + r0 = m_row + m_rowCount - count - 1; + r1 = m_row + m_rowCount - 1; + } for (int c = 0; c < m_colCount; c++) { TXshColumn *column = xsh->getColumn(c); if (column && column->getSoundColumn()) continue; int col = m_col + c; - for (int r = m_row; r <= r1; r++) { + for (int r = r0; r <= r1; r++) { int k = (r - m_row) * m_colCount + c; xsh->setCell(r, col, m_cells[k]); } @@ -418,10 +433,10 @@ public: void undo() const override { // undo for shrinking operation -> revert cells - if (m_deltaRow < 0) (m_invert) ? setCells() : insertCells(); + if (m_deltaRow < 0) (m_insert) ? insertCells() : setCells(); // undo for stretching operation -> remove cells else if (m_deltaRow > 0) - (m_invert) ? clearCells() : removeCells(); + (m_insert) ? removeCells() : clearCells(); else { assert(0); } @@ -433,10 +448,10 @@ public: void redo() const override { // redo for shrinking operation -> remove cells - if (m_deltaRow < 0) (m_invert) ? clearCells() : removeCells(); + if (m_deltaRow < 0) (m_insert) ? removeCells() : clearCells(); // redo for stretching operation -> revert cells else if (m_deltaRow > 0) - (m_invert) ? setCells() : insertCells(); + (m_insert) ? insertCells() : setCells(); else { assert(0); } @@ -626,12 +641,15 @@ class LevelExtenderTool final : public XsheetGUI::DragTool { LevelExtenderUndo *m_undo; bool m_invert; // upper directional smart tab + bool m_insert; public: - LevelExtenderTool(XsheetViewer *viewer, bool invert = false) + LevelExtenderTool(XsheetViewer *viewer, bool insert = true, + bool invert = false) : XsheetGUI::DragTool(viewer) , m_colCount(0) , m_undo(0) + , m_insert(insert) , m_invert(invert) {} // called when the smart tab is clicked @@ -649,11 +667,26 @@ public: m_colCount = c1 - c0 + 1; m_rowCount = r1 - r0 + 1; if (m_colCount <= 0 || m_rowCount <= 0) return; + + // if m_insert is false but there are no empty rows under the tab, + // then switch m_insert to true so that the operation works anyway + if (!m_insert && !m_invert) { + TXsheet *xsh = getViewer()->getXsheet(); + for (int c = c0; c <= c1; c++) { + TXshColumn *column = xsh->getColumn(c); + if (!column || column->getSoundColumn()) continue; + if (!column->isCellEmpty(r1 + 1)) { + m_insert = true; // switch the behavior + break; + } + } + } + m_columns.reserve(m_colCount); TXsheet *xsh = getViewer()->getXsheet(); for (int c = c0; c <= c1; c++) m_columns.push_back(CellBuilder(xsh, r0, c, m_rowCount, m_invert)); - m_undo = new LevelExtenderUndo(m_invert); + m_undo = new LevelExtenderUndo(m_insert, m_invert); m_undo->setCells(xsh, r0, c0, m_rowCount, m_colCount); } @@ -680,16 +713,41 @@ public: // Se e' una colonna sound l'extender non deve fare nulla. TXshColumn *column = xsh->getColumn(m_c0 + c); if (column && column->getSoundColumn()) continue; - xsh->removeCells(row, m_c0 + c, -dr); + if (m_insert) + xsh->removeCells(row, m_c0 + c, -dr); + else { + for (int r = row; r <= m_r1; r++) + xsh->setCell(r, m_c0 + c, TXshCell()); + } } } // extend else { + // check how many vacant rows + if (!m_insert) { + int tmp_dr; + bool found = false; + for (tmp_dr = 1; tmp_dr <= dr; tmp_dr++) { + for (int c = 0; c < m_colCount; c++) { + TXshColumn *column = xsh->getColumn(m_c0 + c); + if (!column || column->getSoundColumn()) continue; + if (!column->isCellEmpty(m_r1 + tmp_dr)) { + found = true; + break; + } + } + if (found) break; + } + if (tmp_dr == 1) return; + dr = tmp_dr - 1; + r1 = m_r1 + dr; + } + for (int c = 0; c < m_colCount; c++) { // Se e' una colonna sound l'extender non deve fare nulla. TXshColumn *column = xsh->getColumn(m_c0 + c); if (column && column->getSoundColumn()) continue; - xsh->insertCells(m_r1 + 1, m_c0 + c, dr); + if (m_insert) xsh->insertCells(m_r1 + 1, m_c0 + c, dr); for (int r = m_r1 + 1; r <= r1; r++) xsh->setCell(r, m_c0 + c, m_columns[c].generate(r)); } @@ -776,8 +834,8 @@ public: //----------------------------------------------------------------------------- XsheetGUI::DragTool *XsheetGUI::DragTool::makeLevelExtenderTool( - XsheetViewer *viewer, bool invert) { - return new LevelExtenderTool(viewer, invert); + XsheetViewer *viewer, bool insert, bool invert) { + return new LevelExtenderTool(viewer, insert, invert); } //============================================================================= @@ -2085,8 +2143,8 @@ public: CellRange(CellPosition(rect.y0, rect.x0), CellPosition(rect.y1 + 1, rect.x1 + 1))); else { - int newY0 = qMax(rect.y0, rect.y1); - int newY1 = qMin(rect.y0, rect.y1); + int newY0 = std::max(rect.y0, rect.y1); + int newY1 = std::min(rect.y0, rect.y1); screenCell = getViewer()->rangeToXYRect(CellRange( CellPosition(rect.x0, newY0), CellPosition(rect.x1 + 1, newY1 - 1))); } diff --git a/toonz/sources/toonz/xsheetdragtool.h b/toonz/sources/toonz/xsheetdragtool.h index e01c892..3689461 100644 --- a/toonz/sources/toonz/xsheetdragtool.h +++ b/toonz/sources/toonz/xsheetdragtool.h @@ -48,6 +48,7 @@ public: static DragTool *makeSelectionTool(XsheetViewer *viewer); static DragTool *makeLevelMoverTool(XsheetViewer *viewer); static DragTool *makeLevelExtenderTool(XsheetViewer *viewer, + bool insert = true, bool invert = false); static DragTool *makeSoundLevelModifierTool(XsheetViewer *viewer); static DragTool *makeKeyframeMoverTool(XsheetViewer *viewer); diff --git a/toonz/sources/toonz/xsheetviewer.cpp b/toonz/sources/toonz/xsheetviewer.cpp index 37f8fbd..4f67295 100644 --- a/toonz/sources/toonz/xsheetviewer.cpp +++ b/toonz/sources/toonz/xsheetviewer.cpp @@ -32,6 +32,7 @@ #include "toonz/txshnoteset.h" #include "toonz/childstack.h" #include "toonz/txshlevelhandle.h" +#include "toonz/tproject.h" #include "tconvert.h" #include "tenv.h" @@ -649,7 +650,7 @@ void XsheetViewer::timerEvent(QTimerEvent *) { bool XsheetViewer::refreshContentSize(int dx, int dy) { QSize viewportSize = m_cellScrollArea->viewport()->size(); QPoint offset = m_cellArea->pos(); - offset = QPoint(qMin(0, offset.x() - dx), qMin(0, offset.y() - dy)); // what? + offset = QPoint(std::min(0, offset.x() - dx), std::min(0, offset.y() - dy)); // what? TXsheet *xsh = getXsheet(); int frameCount = xsh ? xsh->getFrameCount() : 0; @@ -744,7 +745,7 @@ int XsheetViewer::colToTimelineLayerAxis(int layer) const { int yBottom = o->colToLayerAxis(layer, fan) + (fan->isActive(layer) ? o->cellHeight() : o->foldedCellSize()) - 1; - int columnCount = qMax(1, xsh->getColumnCount()); + int columnCount = std::max(1, xsh->getColumnCount()); int layerHeightActual = m_columnArea->height() - 2; // o->colToLayerAxis(columnCount, fan) - 1; @@ -770,7 +771,7 @@ CellPosition XsheetViewer::xyToPosition(const QPoint &point) const { // For timeline mode, we need to base the Y axis on the bottom of the column // area // since the layers are flipped - int columnCount = qMax(1, xsh->getColumnCount()); + int columnCount = std::max(1, xsh->getColumnCount()); int colAreaHeight = o->colToLayerAxis(columnCount, fan); usePoint.setY(colAreaHeight - usePoint.y()); @@ -810,7 +811,7 @@ QPoint XsheetViewer::positionToXY(const CellPosition &pos) const { usePoint.setY(usePoint.y() + (fan->isActive(pos.layer()) ? o->cellHeight() : o->foldedCellSize())); - int columnCount = qMax(1, xsh->getColumnCount()); + int columnCount = std::max(1, xsh->getColumnCount()); int colsHeight = o->colToLayerAxis(columnCount, fan); if (colsHeight) @@ -1244,9 +1245,12 @@ void XsheetViewer::keyPressEvent(QKeyEvent *event) { if (orientation()->isVerticalTimeline()) locals.scrollVertTo((frameCount + 1) * orientation()->cellHeight(), visibleRect); - else - locals.scrollHorizTo((frameCount + 1) * orientation()->cellWidth(), - visibleRect); + else { + int x = (((frameCount + 1) * orientation()->cellWidth()) * + getFrameZoomFactor()) / + 100; + locals.scrollHorizTo(x, visibleRect); + } break; } break; @@ -1367,8 +1371,11 @@ void XsheetViewer::scrollToColumn(int col) { if (orientation()->isVerticalTimeline()) scrollToHorizontalRange(x0, x1); - else + else { + if (colNext == col) x1 += m_orientation->cellHeight(); + scrollToVerticalRange(x0, x1); + } } //----------------------------------------------------------------------------- @@ -1381,13 +1388,19 @@ void XsheetViewer::scrollToHorizontalRange(int x0, int x1) { if (visibleLeft > x0) { // If they are out of left visible region int deltaX = x0 - visibleLeft; - scroll(QPoint(deltaX, 0)); - return; + if (!TApp::instance()->getCurrentFrame()->isPlaying() || + Preferences::instance()->isXsheetAutopanEnabled()) { + scroll(QPoint(deltaX, 0)); + return; + } } if (visibleRight < x1) { // If they are out of right visible region int deltaX = x1 + 2 - visibleRight; - scroll(QPoint(deltaX, 0)); - return; + if (!TApp::instance()->getCurrentFrame()->isPlaying() || + Preferences::instance()->isXsheetAutopanEnabled()) { + scroll(QPoint(deltaX, 0)); + return; + } } if (orientation()->isVerticalTimeline()) updateCellColumnAree(); @@ -1591,13 +1604,16 @@ void XsheetViewer::changeWindowTitle() { TApp *app = TApp::instance(); ToonzScene *scene = app->getCurrentScene()->getScene(); if (!scene || !app->getCurrentFrame()->isEditingScene()) return; - QString sceneName = QString::fromStdWString(scene->getSceneName()); + TProject *project = scene->getProject(); + QString projectName = QString::fromStdString(project->getName().getName()); + QString sceneName = QString::fromStdWString(scene->getSceneName()); if (sceneName.isEmpty()) sceneName = tr("Untitled"); if (app->getCurrentScene()->getDirtyFlag()) sceneName += QString("*"); - QString name = tr("Scene: ") + sceneName; + QString name = + tr("Scene: ") + sceneName + tr(" :: Project: ") + projectName; int frameCount = scene->getFrameCount(); name = name + " :: " + tr(std::to_string(frameCount).c_str()) + - tr(" Frames"); + (frameCount == 1 ? tr(" Frame") : tr(" Frames")); // subXsheet or not ChildStack *childStack = scene->getChildStack(); @@ -1731,7 +1747,7 @@ int XsheetViewer::getFrameZoomAdjustment() { int adj = frameRect.width() - ((frameRect.width() * getFrameZoomFactor()) / 100) - 1; - return qMax(0, adj); + return std::max(0, adj); } void XsheetViewer::zoomOnFrame(int frame, int factor) { diff --git a/toonz/sources/toonzfarm/tfarm/tfarmtask.cpp b/toonz/sources/toonzfarm/tfarm/tfarmtask.cpp index f4c79a8..66ffc5f 100644 --- a/toonz/sources/toonzfarm/tfarm/tfarmtask.cpp +++ b/toonz/sources/toonzfarm/tfarm/tfarmtask.cpp @@ -19,7 +19,7 @@ // MACOSX includes #ifdef _WIN32 #include -#elif MACOSX +#elif defined(MACOSX) #include "tversion.h" using namespace TVER; #include // gethostbyname @@ -361,12 +361,12 @@ void TFarmTask::saveData(TOStream &os) { //------------------------------------------------------------------------------ namespace { -QString getExeName(bool isComposer) { +static QString getExeName(bool isComposer) { QString name = isComposer ? "tcomposer" : "tcleanup"; #ifdef _WIN32 return name + ".exe "; -#elif MACOSX +#elif defined(MACOSX) TVER::ToonzVersion tver; return "\"./" + QString::fromStdString(tver.getAppName()) + "_" + QString::fromStdString(tver.getAppVersionString()) + @@ -380,7 +380,7 @@ QString getExeName(bool isComposer) { QString toString(int value, int w, char c = ' ') { QString s = QString::number(value); - while (s.size() < w) s= c + s; + while (s.size() < w) s = c + s; return s; } @@ -642,7 +642,7 @@ TFarmTaskGroup::TFarmTaskGroup(const QString &id, const QString &name, threadsIndex, maxTileSizeIndex, Overwrite_Off, false) , m_imp(new Imp()) { int subCount = 0; - if (chunksize > 0) subCount= tceil((to - from + 1) / (double)chunksize); + if (chunksize > 0) subCount = tceil((to - from + 1) / (double)chunksize); int ra = from; if (subCount > 1) { diff --git a/toonz/sources/toonzfarm/tfarmserver/tfarmserver.cpp b/toonz/sources/toonzfarm/tfarmserver/tfarmserver.cpp index b9281ec..be839a3 100644 --- a/toonz/sources/toonzfarm/tfarmserver/tfarmserver.cpp +++ b/toonz/sources/toonzfarm/tfarmserver/tfarmserver.cpp @@ -378,12 +378,12 @@ private: }; //------------------------------------------------------------------- -QString getExeName(bool isComposer) { +static QString getExeName(bool isComposer) { QString name = isComposer ? "tcomposer" : "tcleanup"; #ifdef _WIN32 return name + ".exe "; -#elif MACOSX +#elif defined(MACOSX) TVER::ToonzVersion tver; return "\"./" + QString::fromStdString(tver.getAppName()) + "_" + QString::fromStdString(tver.getAppVersionString()) + @@ -433,7 +433,7 @@ void Task::run() { m_log->info(logMsg); -// =========== + // =========== #ifdef _WIN32 if (m_cmdline.contains("runcasm")) service.mountDisks(); @@ -994,8 +994,8 @@ void FarmServerService::onStop() { } catch (TException & /*e*/) { } -// i dischi vengono montati al primo task di tipo "runcasm" -// e smontati allo stop del servizio + // i dischi vengono montati al primo task di tipo "runcasm" + // e smontati allo stop del servizio #ifdef _WIN32 unmountDisks(); diff --git a/toonz/sources/toonzlib/CMakeLists.txt b/toonz/sources/toonzlib/CMakeLists.txt index 7648d6c..e09e470 100644 --- a/toonz/sources/toonzlib/CMakeLists.txt +++ b/toonz/sources/toonzlib/CMakeLists.txt @@ -1,14 +1,77 @@ -# moc の数が多いので全部食わせる set(MOC_HEADERS + ../include/toonz/fullcolorpalette.h + ../include/toonz/movierenderer.h + ../include/toonz/multimediarenderer.h + ../include/toonz/palettecontroller.h + ../include/toonz/preferences.h + ../include/toonz/scriptbinding.h + ../include/toonz/scriptbinding_centerline_vectorizer.h + ../include/toonz/scriptbinding_files.h + ../include/toonz/scriptbinding_image.h + ../include/toonz/scriptbinding_image_builder.h + ../include/toonz/scriptbinding_level.h + ../include/toonz/scriptbinding_outline_vectorizer.h + ../include/toonz/scriptbinding_rasterizer.h + ../include/toonz/scriptbinding_renderer.h + ../include/toonz/scriptbinding_scene.h + ../include/toonz/scriptbinding_toonz_raster_converter.h + ../include/toonz/scriptengine.h + ../include/toonz/stylemanager.h + ../include/toonz/tcenterlinevectorizer.h + ../include/toonz/tcolumnhandle.h + ../include/toonz/tframehandle.h + ../include/toonz/tfxhandle.h + ../include/toonz/tobjecthandle.h + ../include/toonz/tonionskinmaskhandle.h + ../include/toonz/tpalettehandle.h + ../include/toonz/tscenehandle.h + ../include/toonz/txsheethandle.h + ../include/toonz/txshlevel.h + ../include/toonz/txshlevelhandle.h + ../include/toonz/txshsimplelevel.h + ../include/toonz/txshsoundcolumn.h +) + +set(HEADERS + ${MOC_HEADERS} autoadjust.h - ../include/toonz/autoclose.h - ../include/convert2tlv.h autopos.h + cleanupcommon.h + cleanuppalette.h + imagebuilders.h + skeletonlut.h + tcenterlinevectP.h + texturemanager.h + xshhandlemanager.h + sandor_fxs/BlurMatrix.h + sandor_fxs/CIL.h + sandor_fxs/CallCircle.h + sandor_fxs/CallParam.h + sandor_fxs/EraseContour.h + sandor_fxs/InputParam.h + sandor_fxs/Params.h + sandor_fxs/Pattern.h + sandor_fxs/PatternMapParam.h + sandor_fxs/PatternPosition.h + sandor_fxs/SDef.h + sandor_fxs/SDirection.h + sandor_fxs/SError.h + sandor_fxs/STColSelPic.h + sandor_fxs/STPic.h + sandor_fxs/YOMBInputParam.h + sandor_fxs/YOMBParam.h + sandor_fxs/blend.h + sandor_fxs/calligraph.h + sandor_fxs/patternmap.h + sandor_fxs/toonz4_6staff.h + ../include/convert2tlv.h + ../include/orientation.h + ../include/toonz/Naa2TlvConverter.h + ../include/toonz/autoclose.h + ../include/toonz/boardsettings.h ../include/toonz/captureparameters.h ../include/toonz/childstack.h ../include/toonz/cleanupcolorstyles.h - cleanupcommon.h - cleanuppalette.h ../include/toonz/cleanupparameters.h ../include/toonz/columnfan.h ../include/toonz/controlpointobserver.h @@ -16,7 +79,6 @@ set(MOC_HEADERS ../include/toonz/doubleparamcmd.h ../include/toonz/dpiscale.h ../include/toonz/fill.h - ../include/toonz/fullcolorpalette.h ../include/toonz/fxcommand.h ../include/toonz/fxdag.h ../include/toonz/glrasterpainter.h @@ -33,39 +95,21 @@ set(MOC_HEADERS ../include/toonz/levelset.h ../include/toonz/levelupdater.h ../include/toonz/logger.h - ../include/toonz/movierenderer.h - ../include/toonz/multimediarenderer.h ../include/toonz/mypaint.h - ../include/toonz/mypainthelpers.hpp ../include/toonz/mypaintbrushstyle.h + ../include/toonz/mypainthelpers.hpp ../include/toonz/namebuilder.h - ../include/toonz/Naa2TlvConverter.h ../include/toonz/observer.h ../include/toonz/onionskinmask.h ../include/toonz/palettecmd.h - ../include/toonz/palettecontroller.h ../include/toonz/plasticdeformerfx.h - ../include/toonz/preferences.h ../include/toonz/rasterbrush.h ../include/toonz/rasterstrokegenerator.h ../include/toonz/scenefx.h ../include/toonz/sceneproperties.h ../include/toonz/sceneresources.h ../include/toonz/screensavermaker.h - ../include/toonz/scriptbinding.h - ../include/toonz/scriptbinding_centerline_vectorizer.h - ../include/toonz/scriptbinding_files.h - ../include/toonz/scriptbinding_image.h - ../include/toonz/scriptbinding_image_builder.h - ../include/toonz/scriptbinding_level.h - ../include/toonz/scriptbinding_outline_vectorizer.h - ../include/toonz/scriptbinding_rasterizer.h - ../include/toonz/scriptbinding_renderer.h - ../include/toonz/scriptbinding_scene.h - ../include/toonz/scriptbinding_toonz_raster_converter.h - ../include/toonz/scriptengine.h ../include/toonz/skeleton.h - skeletonlut.h ../include/toonz/stage.h ../include/toonz/stage2.h ../include/toonz/stageobjectutil.h @@ -73,30 +117,22 @@ set(MOC_HEADERS ../include/toonz/stagevisitor.h ../include/toonz/studiopalette.h ../include/toonz/studiopalettecmd.h - ../include/toonz/stylemanager.h ../include/toonz/tapplication.h ../include/toonz/targetcolors.h + ../include/toonz/tbinarizer.h ../include/toonz/tcamera.h - ../include/toonz/tcenterlinevectorizer.h - tcenterlinevectP.h ../include/toonz/tcleanupper.h ../include/toonz/tcolumnfx.h ../include/toonz/tcolumnfxset.h - ../include/toonz/tcolumnhandle.h ../include/toonz/tdistort.h - ../include/toonz/tframehandle.h - ../include/toonz/tfxhandle.h + ../include/toonz/textureutils.h ../include/toonz/tlog.h - ../include/toonz/tobjecthandle.h - ../include/toonz/tonionskinmaskhandle.h ../include/toonz/toonzfolders.h ../include/toonz/toonzimageutils.h ../include/toonz/toonzscene.h ../include/toonz/tpinnedrangeset.h - ../include/toonz/tpalettehandle.h ../include/toonz/tproject.h ../include/toonz/trasterimageutils.h - ../include/toonz/tscenehandle.h ../include/toonz/tstageobject.h ../include/toonz/tstageobjectcmd.h ../include/toonz/tstageobjectid.h @@ -111,56 +147,21 @@ set(MOC_HEADERS ../include/toonz/txshcolumn.h ../include/toonz/txsheet.h ../include/toonz/txsheetexpr.h - ../include/toonz/txsheethandle.h - ../include/toonz/txshlevel.h ../include/toonz/txshlevelcolumn.h - ../include/toonz/txshlevelhandle.h ../include/toonz/txshleveltypes.h + ../include/toonz/txshmeshcolumn.h ../include/toonz/txshnoteset.h ../include/toonz/txshpalettecolumn.h ../include/toonz/txshpalettelevel.h - ../include/toonz/txshsimplelevel.h - ../include/toonz/txshsoundcolumn.h ../include/toonz/txshsoundlevel.h ../include/toonz/txshsoundtextcolumn.h ../include/toonz/txshsoundtextlevel.h + ../include/toonz/txshzeraryfxcolumn.h ../include/toonz/txshzeraryfxlevel.h ../include/toonz/vectorizerparameters.h - ../include/toonz/txshzeraryfxcolumn.h - ../include/toonz/tbinarizer.h - ../include/toonz/txshmeshcolumn.h - ../include/toonz/textureutils.h ../include/toutputproperties.h - xshhandlemanager.h - sandor_fxs/blend.h - sandor_fxs/BlurMatrix.h - sandor_fxs/CallCircle.h - sandor_fxs/calligraph.h - sandor_fxs/CallParam.h - sandor_fxs/CIL.h - sandor_fxs/EraseContour.h - sandor_fxs/InputParam.h - sandor_fxs/Params.h - sandor_fxs/Pattern.h - sandor_fxs/patternmap.h - sandor_fxs/PatternMapParam.h - sandor_fxs/PatternPosition.h - sandor_fxs/SDef.h - sandor_fxs/SDirection.h - sandor_fxs/SError.h - sandor_fxs/STColSelPic.h - sandor_fxs/STPic.h - sandor_fxs/toonz4_6staff.h - sandor_fxs/YOMBInputParam.h - sandor_fxs/YOMBParam.h - texturemanager.h - imagebuilders.h - ../include/orientation.h - ../include/toonz/boardsettings.h ) -set(HEADERS ${MOC_HEADERS}) - set(SOURCES autoadjust.cpp autoclose.cpp diff --git a/toonz/sources/toonzlib/Naa2TlvConverter.cpp b/toonz/sources/toonzlib/Naa2TlvConverter.cpp index 7e610b1..a00d4a9 100644 --- a/toonz/sources/toonzlib/Naa2TlvConverter.cpp +++ b/toonz/sources/toonzlib/Naa2TlvConverter.cpp @@ -344,7 +344,7 @@ void Naa2TlvConverter::findBackgroundRegions() { for (int i = 0; i < m_colors.count(); i++) { TPixel color = m_colors.at(i); int v = color.r + color.g + color.b; - int a = qMin(color.r, qMin(color.g, color.b)); + int a = std::min({color.r, color.g, color.b}); if (a < 230) continue; if (v > maxV) { bgColorIndex = i; @@ -477,7 +477,7 @@ void Naa2TlvConverter::findMainInks() { double ap2 = 100000.0 * (double)region.pixelCount / pow((double)region.perimeter, 2); if (ap2 > 100) continue; - foreach (int c, region.links.keys()) { + for (int c : region.links.keys()) { if (c >= 0 && (m_regions[c].isBackground() || m_regions[c].type == RegionInfo::LargePaint)) { int strength = region.links[c]; @@ -567,7 +567,7 @@ void Naa2TlvConverter::findPaints() { for (int i = 0; i < m_regions.count(); i++) { RegionInfo ®ion = m_regions[i]; if (region.type != RegionInfo::Unknown) continue; - foreach (int c, m_regions[i].links.keys()) { + for (int c : m_regions[i].links.keys()) { if (c >= 0 && m_regions[c].isInk()) { m_regions[i].type = RegionInfo::Paint; break; @@ -630,7 +630,7 @@ void Naa2TlvConverter::findThinPaints() { if (inkBoundary * 100 > region.perimeter * 80) regions.append(i); } - foreach (int c, regions) + for (int c : regions) m_regions[c].type = RegionInfo::SmallPaint; } @@ -682,8 +682,8 @@ void Naa2TlvConverter::findSuspectInks() { if (region.isInk() && 10 <= region.pixelCount && region.pixelCount < 100) { int lx = region.x1 - region.x0 + 1; int ly = region.y1 - region.y0 + 1; - int d = qMax(lx, ly); - if (qMin(lx, ly) * 2 > qMax(lx, ly) && region.pixelCount > d * d / 2) { + int d = std::max(lx, ly); + if (std::min(lx, ly) * 2 > std::max(lx, ly) && region.pixelCount > d * d / 2) { region.type = RegionInfo::Paint; } } diff --git a/toonz/sources/toonzlib/avicodecrestrictions.cpp b/toonz/sources/toonzlib/avicodecrestrictions.cpp index 91d1af9..fb260d7 100644 --- a/toonz/sources/toonzlib/avicodecrestrictions.cpp +++ b/toonz/sources/toonzlib/avicodecrestrictions.cpp @@ -75,7 +75,7 @@ bool canWork(const HIC &hic, const TDimension &resolution, int bpp) { return ICERR_OK == ICCompressQuery(hic, &bi.bmiHeader, NULL); } -} +} // namespace //----------------------------------------------------------------------------- @@ -227,6 +227,9 @@ QMap AviCodecRestrictions::getUsableCodecs( sizeof(descr), 0, 0); WideCharToMultiByte(CP_ACP, 0, icinfo.szName, -1, name, sizeof(name), 0, 0); + // Give up to load codecs once the blackmagic codec is found - + // as it seems to cause crash for unknown reasons (issue #138) + if (strstr(descr, "Blackmagic") != 0) break; std::wstring compressorName; compressorName = diff --git a/toonz/sources/toonzlib/boardsettings.cpp b/toonz/sources/toonzlib/boardsettings.cpp index 16d4628..89acfff 100644 --- a/toonz/sources/toonzlib/boardsettings.cpp +++ b/toonz/sources/toonzlib/boardsettings.cpp @@ -200,7 +200,7 @@ void BoardItem::saveData(TOStream &os) { << m_rect.height(); if (m_type == Image) { - // if the path is in library folder, then save the realtive path + // if the path is in library folder, then save the relative path TFilePath libFp = ToonzFolder::getLibraryFolder(); if (libFp.isAncestorOf(m_imgPath)) os.child("imgPath") << 1 << m_imgPath - libFp; diff --git a/toonz/sources/toonzlib/cellpositionratio.cpp b/toonz/sources/toonzlib/cellpositionratio.cpp index 1b95b03..f3286ec 100644 --- a/toonz/sources/toonzlib/cellpositionratio.cpp +++ b/toonz/sources/toonzlib/cellpositionratio.cpp @@ -4,7 +4,7 @@ #include // Euclid's algorithm -int greatestCommonDivisor(int a, int b) { +static int greatestCommonDivisor(int a, int b) { a = std::abs(a); b = std::abs(b); int c = std::max(a, b); @@ -18,12 +18,14 @@ int greatestCommonDivisor(int a, int b) { return c; } +#if 0 /* UNUSED */ int leastCommonMultiple(int a, int b) { return a * b / greatestCommonDivisor(a, b); } +#endif void Ratio::normalize() { - int gcd = greatestCommonDivisor(m_num, m_denom); + int gcd = greatestCommonDivisor(m_num, m_denom); if (m_denom < 0) gcd = -gcd; m_num /= gcd; m_denom /= gcd; diff --git a/toonz/sources/toonzlib/cleanuppalette.cpp b/toonz/sources/toonzlib/cleanuppalette.cpp index 676ef86..2f49a2e 100644 --- a/toonz/sources/toonzlib/cleanuppalette.cpp +++ b/toonz/sources/toonzlib/cleanuppalette.cpp @@ -94,11 +94,11 @@ TPalette *createToonzPalette(TPalette *cleanupPalette, int colorParamIndex) { void TargetColors::update(TPalette *palette, bool noAntialias) { m_colors.clear(); - TargetColor tranparent(TPixel32(255, 255, 255, 0) /*TPixel32::Transparent*/, + TargetColor transparent(TPixel32(255, 255, 255, 0) /*TPixel32::Transparent*/, 0, // BackgroundStyle, 0, 0, 0, 0); - m_colors.push_back(tranparent); + m_colors.push_back(transparent); for (int i = 0; i < palette->getPage(0)->getStyleCount(); i++) { int styleId = palette->getPage(0)->getStyleId(i); diff --git a/toonz/sources/toonzlib/doubleparamcmd.cpp b/toonz/sources/toonzlib/doubleparamcmd.cpp index 2fa15db..7a9c78a 100644 --- a/toonz/sources/toonzlib/doubleparamcmd.cpp +++ b/toonz/sources/toonzlib/doubleparamcmd.cpp @@ -2,6 +2,7 @@ #include "toonz/doubleparamcmd.h" #include "toonz/preferences.h" +#include "toonz/tscenehandle.h" #include "tdoubleparam.h" #include "tdoublekeyframe.h" #include "tundo.h" @@ -332,7 +333,7 @@ void KeyframeSetter::moveKeyframes(int dFrame, double dValue) { int n = m_param->getKeyframeCount(); std::vector> keyframes( n); // (keyframe, index) - for (int i = 0; i < n; i++) + for (int i = 0; i < n; i++) keyframes[i] = std::make_pair(m_param->getKeyframe(i), i); // change frame and value of selected keyframes @@ -485,11 +486,11 @@ void KeyframeSetter::setType(int kIndex, TDoubleKeyframe::Type type) { case TDoubleKeyframe::Expression: keyframe.m_type = type; { - double value = m_param->getValue(keyframe.m_frame); - const TUnit *unit = 0; + double value = m_param->getValue(keyframe.m_frame); + const TUnit *unit = 0; if (m_param->getMeasure()) unit = m_param->getMeasure()->getCurrentUnit(); - if (unit) value = unit->convertTo(value); - keyframe.m_expressionText = QString::number(value).toStdString(); + if (unit) value = unit->convertTo(value); + keyframe.m_expressionText = QString::number(value).toStdString(); } m_param->setKeyframe(kIndex, keyframe); break; @@ -585,8 +586,8 @@ void KeyframeSetter::setSpeedIn(const TPointD &speedIn) { const double eps = 0.00001; assert(m_kIndex >= 0 && m_indices.size() == 1); assert(isSpeedInOut(m_kIndex - 1)); - m_changed = true; - m_keyframe.m_speedIn = speedIn; + m_changed = true; + m_keyframe.m_speedIn = speedIn; if (m_keyframe.m_speedIn.x > 0) m_keyframe.m_speedIn.x = 0; if (m_keyframe.m_linkedHandles && m_kIndex + 1 <= m_param->getKeyframeCount()) { @@ -616,8 +617,8 @@ void KeyframeSetter::setSpeedOut(const TPointD &speedOut) { const double eps = 0.00001; assert(m_kIndex >= 0 && m_indices.size() == 1); assert(isSpeedInOut(m_kIndex)); - m_changed = true; - m_keyframe.m_speedOut = speedOut; + m_changed = true; + m_keyframe.m_speedOut = speedOut; if (m_keyframe.m_speedOut.x < 0) m_keyframe.m_speedOut.x = 0; if (m_keyframe.m_linkedHandles && m_kIndex > 0) { double inNorm = getNorm(m_keyframe.m_speedIn); @@ -719,7 +720,7 @@ void KeyframeSetter::setAllParams( // set step if (step < 1) step = 1; - keyframe.m_step = step; + keyframe.m_step = step; // set type keyframe.m_type = comboType; @@ -731,7 +732,7 @@ void KeyframeSetter::setAllParams( keyframe.m_speedOut = speedOut; nextKeyframe.m_speedIn = speedIn; - if (keyframe.m_speedOut.x < 0) keyframe.m_speedOut.x = 0; + if (keyframe.m_speedOut.x < 0) keyframe.m_speedOut.x = 0; if (nextKeyframe.m_speedIn.x > 0) nextKeyframe.m_speedIn.x = 0; break; @@ -830,13 +831,23 @@ void KeyframeSetter::removeKeyframeAt(TDoubleParam *curve, double frame) { class EnableCycleUndo final : public TUndo { TDoubleParam *m_param; + TSceneHandle *m_sceneHandle; public: - EnableCycleUndo(TDoubleParam *param) : m_param(param) { m_param->addRef(); } + EnableCycleUndo(TDoubleParam *param, TSceneHandle *sceneHandle) + : m_param(param), m_sceneHandle(sceneHandle) { + m_param->addRef(); + } ~EnableCycleUndo() { m_param->release(); } void invertCycleEnabled() const { bool isEnabled = m_param->isCycleEnabled(); m_param->enableCycle(!isEnabled); + // for now the scene handle is only available when RMB click in function + // sheet + if (m_sceneHandle) { + m_sceneHandle->setDirtyFlag(true); + m_sceneHandle->notifySceneChanged(); + } } void undo() const override { invertCycleEnabled(); } void redo() const override { invertCycleEnabled(); } @@ -847,7 +858,9 @@ public: //============================================================================= -void KeyframeSetter::enableCycle(TDoubleParam *curve, bool enabled) { +void KeyframeSetter::enableCycle(TDoubleParam *curve, bool enabled, + TSceneHandle *sceneHandle) { curve->enableCycle(enabled); - TUndoManager::manager()->add(new EnableCycleUndo(curve)); + if (sceneHandle) sceneHandle->notifySceneChanged(); + TUndoManager::manager()->add(new EnableCycleUndo(curve, sceneHandle)); } diff --git a/toonz/sources/toonzlib/fill.cpp b/toonz/sources/toonzlib/fill.cpp index 902a853..7072667 100644 --- a/toonz/sources/toonzlib/fill.cpp +++ b/toonz/sources/toonzlib/fill.cpp @@ -170,7 +170,7 @@ void fillRow(const TRasterCM32P &r, const TPoint &p, int &xa, int &xb, //----------------------------------------------------------------------------- void findSegment(const TRaster32P &r, const TPoint &p, int &xa, int &xb, - const TPixel32 &color) { + const TPixel32 &color, const int fillDepth = 254) { int matte, oldmatte; TPixel32 *pix, *pix0, *limit, *tmp_limit; @@ -185,7 +185,7 @@ void findSegment(const TRaster32P &r, const TPoint &p, int &xa, int &xb, for (; pix <= limit; pix++) { if (*pix == color) break; matte = pix->m; - if (matte < oldmatte || matte == 255) break; + if (matte < oldmatte || matte > fillDepth) break; oldmatte = matte; } if (matte == 0) { @@ -206,7 +206,7 @@ void findSegment(const TRaster32P &r, const TPoint &p, int &xa, int &xb, for (; pix >= limit; pix--) { if (*pix == color) break; matte = pix->m; - if (matte < oldmatte || matte == 255) break; + if (matte < oldmatte || matte > fillDepth) break; oldmatte = matte; } if (matte == 0) { @@ -221,6 +221,77 @@ void findSegment(const TRaster32P &r, const TPoint &p, int &xa, int &xb, } //----------------------------------------------------------------------------- +// Used when the clicked pixel is solid or semi-transparent. +// Check if the fill is stemmed at the target pixel. +// Note that RGB values are used for checking the difference, not Alpha value. + +bool doesStemFill(const TPixel32 &clickColor, const TPixel32 *targetPix, + const int fillDepth2) { + // stop if the target pixel is transparent + if (targetPix->m == 0) return true; + // check difference of RGB values is larger than fillDepth + int dr = (int)clickColor.r - (int)targetPix->r; + int dg = (int)clickColor.g - (int)targetPix->g; + int db = (int)clickColor.b - (int)targetPix->b; + return (dr * dr + dg * dg + db * db) > + fillDepth2; // condition for "stem" the fill +} + +//----------------------------------------------------------------------------- + +void fullColorFindSegment(const TRaster32P &r, const TPoint &p, int &xa, + int &xb, const TPixel32 &color, + const TPixel32 &clickedPosColor, + const int fillDepth) { + if (clickedPosColor.m == 0) { + findSegment(r, p, xa, xb, color, fillDepth); + return; + } + + TPixel32 *pix, *pix0, *limit; + // check to the right + TPixel32 *line = r->pixels(p.y); + + pix0 = line + p.x; // seed pixel + pix = pix0; + limit = line + r->getBounds().x1; // right end + + TPixel32 oldPix = *pix; + + int fillDepth2 = fillDepth * fillDepth; + + for (; pix <= limit; pix++) { + // break if the target pixel is with the same as filling color + if (*pix == color) break; + // continue if the target pixel is the same as the previous one + if (*pix == oldPix) continue; + + if (doesStemFill(clickedPosColor, pix, fillDepth2)) break; + + // store pixel color in case if the next pixel is with the same color + oldPix = *pix; + } + xb = p.x + pix - pix0 - 1; + + // check to the left + pix = pix0; // seed pixel + limit = line + r->getBounds().x0; // left end + oldPix = *pix; + for (; pix >= limit; pix--) { + // break if the target pixel is with the same as filling color + if (*pix == color) break; + // continue if the target pixel is the same as the previous one + if (*pix == oldPix) continue; + + if (doesStemFill(clickedPosColor, pix, fillDepth2)) break; + + // store pixel color in case if the next pixel is with the same color + oldPix = *pix; + } + xa = p.x + pix - pix0 + 1; +} + +//----------------------------------------------------------------------------- class FillSeed { public: @@ -272,6 +343,23 @@ void insertSegment(std::vector> &segments, } //----------------------------------------------------------------------------- + +bool floodCheck(const TPixel32 &clickColor, const TPixel32 *targetPix, + const TPixel32 *oldPix, const int fillDepth) { + auto fullColorThreshMatte = [](int matte, int fillDepth) -> int { + return (matte <= fillDepth) ? matte : 255; + }; + + if (clickColor.m == 0) { + int oldMatte = fullColorThreshMatte(oldPix->m, fillDepth); + int matte = fullColorThreshMatte(targetPix->m, fillDepth); + return matte >= oldMatte && matte != 255; + } + int fillDepth2 = fillDepth * fillDepth; + return !doesStemFill(clickColor, targetPix, fillDepth2); +} + +//----------------------------------------------------------------------------- } // namespace //----------------------------------------------------------------------------- /*-- 戻り値はsaveBoxが更新されたかどうか --*/ @@ -588,3 +676,129 @@ void inkFill(const TRasterCM32P &r, const TPoint &pin, int ink, int searchRay, } r->unlock(); } + +//----------------------------------------------------------------------------- + +void fullColorFill(const TRaster32P &ras, const FillParameters ¶ms, + TTileSaverFullColor *saver) { + int oldy, xa, xb, xc, xd, dy, oldxd, oldxc; + TPixel32 *pix, *limit, *pix0, *oldpix; + int x = params.m_p.x, y = params.m_p.y; + + TRect bbbox = ras->getBounds(); + if (!bbbox.contains(params.m_p)) return; + + TPixel32 clickedPosColor = *(ras->pixels(y) + x); + + TPaletteP plt = params.m_palette; + TPixel32 color = plt->getStyle(params.m_styleId)->getMainColor(); + + if (clickedPosColor == color) return; + + int fillDepth = + params.m_shiftFill ? params.m_maxFillDepth : params.m_minFillDepth; + + assert(fillDepth >= 0 && fillDepth < 16); + TPointD m_firstPoint, m_clickPoint; + + // convert fillDepth range from [0 - 15] to [0 - 255] + fillDepth = (fillDepth << 4) | fillDepth; + + std::stack seeds; + std::map>> segments; + + fullColorFindSegment(ras, params.m_p, xa, xb, color, clickedPosColor, + fillDepth); + + segments[y].push_back(std::pair(xa, xb)); + seeds.push(FillSeed(xa, xb, y, 1)); + seeds.push(FillSeed(xa, xb, y, -1)); + + while (!seeds.empty()) { + FillSeed fs = seeds.top(); + seeds.pop(); + + xa = fs.m_xa; + xb = fs.m_xb; + oldy = fs.m_y; + dy = fs.m_dy; + y = oldy + dy; + // continue if the fill runs over image bounding + if (y > bbbox.y1 || y < bbbox.y0) continue; + // left end of the pixels to be filled + pix = pix0 = ras->pixels(y) + xa; + // right end of the pixels to be filled + limit = ras->pixels(y) + xb; + // left end of the fill seed pixels + oldpix = ras->pixels(oldy) + xa; + + x = xa; + oldxd = (std::numeric_limits::min)(); + oldxc = (std::numeric_limits::max)(); + + // check pixels to right + while (pix <= limit) { + bool test = false; + // check if the target is already in the range to be filled + if (segments.find(y) != segments.end()) + test = isPixelInSegment(segments[y], x); + + if (*pix != color && !test && + floodCheck(clickedPosColor, pix, oldpix, fillDepth)) { + // compute horizontal range to be filled + fullColorFindSegment(ras, TPoint(x, y), xc, xd, color, clickedPosColor, + fillDepth); + // insert segment to be filled + insertSegment(segments[y], std::pair(xc, xd)); + // create new fillSeed to invert direction, if needed + if (xc < xa) seeds.push(FillSeed(xc, xa - 1, y, -dy)); + if (xd > xb) seeds.push(FillSeed(xb + 1, xd, y, -dy)); + if (oldxd >= xc - 1) + oldxd = xd; + else { + if (oldxd >= 0) seeds.push(FillSeed(oldxc, oldxd, y, dy)); + oldxc = xc; + oldxd = xd; + } + // jump to the next pixel to the right end of the range + pix += xd - x + 1; + oldpix += xd - x + 1; + x += xd - x + 1; + } else { + pix++; + oldpix++, x++; + } + } + // insert filled range as new fill seed + if (oldxd > 0) seeds.push(FillSeed(oldxc, oldxd, y, dy)); + } + + // pixels are actually filled here + TPixel32 premultiColor = premultiply(color); + + std::map>>::iterator it; + for (it = segments.begin(); it != segments.end(); it++) { + TPixel32 *line = ras->pixels(it->first); + TPixel32 *refLine = 0; + std::vector> segmentVector = it->second; + for (int i = 0; i < (int)segmentVector.size(); i++) { + std::pair segment = segmentVector[i]; + if (segment.second >= segment.first) { + pix = line + segment.first; + if (saver) { + saver->save( + TRect(segment.first, it->first, segment.second, it->first)); + } + int n; + for (n = 0; n < segment.second - segment.first + 1; n++, pix++) { + if (clickedPosColor.m == 0) + *pix = pix->m == 0 ? color : overPix(color, *pix); + else if (color.m == 0 || color.m == 255) // used for erasing area + *pix = color; + else + *pix = overPix(*pix, premultiColor); + } + } + } + } +} diff --git a/toonz/sources/toonzlib/fxcommand.cpp b/toonz/sources/toonzlib/fxcommand.cpp index 0ea8a78..b046e03 100644 --- a/toonz/sources/toonzlib/fxcommand.cpp +++ b/toonz/sources/toonzlib/fxcommand.cpp @@ -36,7 +36,6 @@ #include "tcg/tcg_macros.h" #include "tcg/tcg_base.h" #include "tcg/tcg_function_types.h" -#include "tcg/tcg_iterator_ops.h" #include @@ -1164,7 +1163,7 @@ void ReplaceFxUndo::initialize() { m_repColumn = new TXshZeraryFxColumn(*zcfx->getColumn()); m_repColIdx = m_colIdx; - // Substitute the column's zerary fx with the subsitute one + // Substitute the column's zerary fx with the substitute one TZeraryColumnFx *repZcfx = static_cast(m_repColumn->getFx()); repZcfx->setZeraryFx(repFx); @@ -2241,7 +2240,7 @@ void DeleteFxOrColumnUndo::redo() const { ->getParams()); // However, params stored there are NOT cloned. } // This is fine since we're deleting the column... - // Peform operation + // Perform operation FxCommandUndo::removeFxOrColumn(xsh, m_fx.getPointer(), m_colIdx); m_xshHandle->notifyXsheetChanged(); // Add the rest... @@ -2366,12 +2365,10 @@ static void deleteColumns(const std::list &columns, // columns directly, and then their (updated) column index. TXsheet *xsh = xshHandle->getXsheet(); - typedef tcg::function - getColumn_fun; - tcg::binder1st getCol(getColumn_fun(), *xsh); - - std::vector cols(tcg::make_cast_it(columns.begin(), getCol), - tcg::make_cast_it(columns.end(), getCol)); + std::vector cols; + for (auto const &c : columns) { + cols.push_back(xsh->getColumn(c)); + } size_t c, cCount = cols.size(); for (c = 0; c != cCount; ++c) { @@ -3107,20 +3104,6 @@ private: //====================================================== void UndoDisconnectFxs::initialize() { - struct locals { - static QPair originalPos(const QPair &pair) { - return QPair(pair.first, - pair.first->getAttributes()->getDagNodePos()); - } - - static bool contains(const std::list &fxs, TFx *fx) { - tcg::function getPointer_fun; - - return (std::count(tcg::make_cast_it(fxs.begin(), getPointer_fun), - tcg::make_cast_it(fxs.end(), getPointer_fun), fx) > 0); - } - }; - TXsheet *xsh = m_xshHandle->getXsheet(); FxDag *fxDag = xsh->getFxDag(); @@ -3132,13 +3115,15 @@ void UndoDisconnectFxs::initialize() { if (m_fxs.empty()) return; // Build fxs data - tcg::binder1st &, TFx *)> contains_fun( - &locals::contains, m_fxs); + auto const contains = [this](TFx const *fx) -> bool { + return std::count_if(this->m_fxs.begin(), this->m_fxs.end(), + [fx](TFxP &f) { return f.getPointer() == fx; }) > 0; + }; - m_leftFx = FxCommandUndo::leftmostConnectedFx(m_fxs.front().getPointer(), - contains_fun); - m_rightFx = FxCommandUndo::rightmostConnectedFx(m_fxs.front().getPointer(), - contains_fun); + m_leftFx = + FxCommandUndo::leftmostConnectedFx(m_fxs.front().getPointer(), contains); + m_rightFx = + FxCommandUndo::rightmostConnectedFx(m_fxs.front().getPointer(), contains); // Store sensible original data for the undo m_undoLinksIn = FxCommandUndo::inputLinks(xsh, m_leftFx); @@ -3150,10 +3135,12 @@ void UndoDisconnectFxs::initialize() { m_undoTerminalLinks.push_back(TFxCommand::Link(lt->m_inputFx.getPointer(), fxDag->getXsheetFx(), -1)); - std::vector>( - tcg::make_cast_it(m_undoDagPos.begin(), &locals::originalPos), - tcg::make_cast_it(m_undoDagPos.end(), &locals::originalPos)) - .swap(m_redoDagPos); + std::vector> v; + for (auto const &e : m_undoDagPos) { + v.emplace_back(e.first, e.first->getAttributes()->getDagNodePos()); + } + m_redoDagPos = std::move(v); + m_redoDagPos.shrink_to_fit(); } //------------------------------------------------------ diff --git a/toonz/sources/toonzlib/ikjacobian.cpp b/toonz/sources/toonzlib/ikjacobian.cpp index 94f9bea..6151a7a 100644 --- a/toonz/sources/toonzlib/ikjacobian.cpp +++ b/toonz/sources/toonzlib/ikjacobian.cpp @@ -167,7 +167,7 @@ void MatrixRmn::SetSequence(const VectorRn &d, long startRow, long startCol, } // The matrix A is loaded, in into "this" matrix, based at (0,0). -// The size of "this" matrix must be large enough to accomodate A. +// The size of "this" matrix must be large enough to accommodate A. // The rest of "this" matrix is left unchanged. It is not filled with // zeroes! @@ -188,7 +188,7 @@ void MatrixRmn::LoadAsSubmatrix(const MatrixRmn &A) { // The matrix A is loaded, in transposed order into "this" matrix, based at // (0,0). -// The size of "this" matrix must be large enough to accomodate A. +// The size of "this" matrix must be large enough to accommodate A. // The rest of "this" matrix is left unchanged. It is not filled with // zeroes! void MatrixRmn::LoadAsSubmatrixTranspose(const MatrixRmn &A) { @@ -412,7 +412,7 @@ void MatrixRmn::Solve(const VectorRn &b, VectorRn *xVec) const { // The "NoFree" version operates on the assumption that no free variable will be // found. // Algorithm uses row operations and row pivoting (only). -// Augmented matrix is correctly accomodated. Only the first square part +// Augmented matrix is correctly accommodated. Only the first square part // participates // in the main work of row operations. void MatrixRmn::ConvertToRefNoFree() { @@ -1546,7 +1546,7 @@ void Jacobian::CalcDeltaThetasSDLS() { double gamma = MaxAngleSDLS; if (N < M) { - gamma *= N / M; // Scale back maximum permissable joint angle + gamma *= N / M; // Scale back maximum permissible joint angle } // Calculate the dTheta from pure pseudoinverse considerations diff --git a/toonz/sources/toonzlib/imagepainter.cpp b/toonz/sources/toonzlib/imagepainter.cpp index 77badcf..ba8c4fa 100644 --- a/toonz/sources/toonzlib/imagepainter.cpp +++ b/toonz/sources/toonzlib/imagepainter.cpp @@ -394,26 +394,22 @@ void Painter::doFlushRasterImages(const TRasterP &rin, int bg, bool showChannelsOnMatte = (chan != TRop::MChan && chan != 0 && !m_vSettings.m_greytones); - if ((!showChannelsOnMatte && !m_vSettings.m_useTexture && chan != 0) || - (!showChannelsOnMatte && m_vSettings.m_useTexture && - (chan == TRop::MChan || m_vSettings.m_greytones))) { - TRasterP app = _rin->create(_rin->getLx(), _rin->getLy()); - try { - TRop::setChannel(_rin, app, chan, m_vSettings.m_greytones); - if (!m_vSettings.m_useTexture) - _rin = app; - else - ras = app; - } catch (...) { - } - } if (m_vSettings.m_useTexture) { TRaster32P checkBoardRas = buildCheckboard(bg, _rin->getSize()); GLRasterPainter::drawRaster(aff, checkBoardRas->getRawData(), checkBoardRas->getWrap(), 4, checkBoardRas->getSize(), true); - if (showChannelsOnMatte) ras = keepChannels(_rin, m_palette, chan); + if (showChannelsOnMatte) + ras = keepChannels(_rin, m_palette, chan); + else if (chan == TRop::MChan || m_vSettings.m_greytones) { + TRasterP app = ras->create(ras->getLx(), ras->getLy()); + try { + TRop::setChannel(ras, app, chan, m_vSettings.m_greytones); + ras = app; + } catch (...) { + } + } GLRasterPainter::drawRaster(aff, ras->getRawData(), ras->getWrap(), 4, ras->getSize(), true); ras->unlock(); @@ -437,9 +433,19 @@ void Painter::doFlushRasterImages(const TRasterP &rin, int bg, quickput(ras, keepChannels(_rin, m_palette, chan), m_palette, m_vSettings.m_useTexture ? TAffine() : aff * TTranslation(offs), m_vSettings.m_useChecks); - else + else if (chan != 0) { + TRasterP app = ras->create(_rin->getLx(), _rin->getLy()); + quickput(app, _rin, m_palette, TAffine(), m_vSettings.m_useChecks); + try { + TRop::setChannel(app, app, chan, m_vSettings.m_greytones); + } catch (...) { + } + quickput(ras, app, m_palette, aff * TTranslation(offs), + m_vSettings.m_useChecks); + } else { quickput(ras, _rin, m_palette, aff * TTranslation(offs), m_vSettings.m_useChecks); + } glDisable(GL_BLEND); diff --git a/toonz/sources/toonzlib/levelupdater.cpp b/toonz/sources/toonzlib/levelupdater.cpp index bc86051..adba494 100644 --- a/toonz/sources/toonzlib/levelupdater.cpp +++ b/toonz/sources/toonzlib/levelupdater.cpp @@ -246,7 +246,7 @@ void LevelUpdater::open(const TFilePath &fp, TPropertyGroup *pg) { m_lwPath = fp; } } catch (...) { - // In this case, TLevelWriterP(..) failed, that object was never contructed, + // In this case, TLevelWriterP(..) failed, that object was never constructed, // the assignment m_lw never took place. And m_lw == 0. // Reset state and rethrow diff --git a/toonz/sources/toonzlib/movierenderer.cpp b/toonz/sources/toonzlib/movierenderer.cpp index 1d8b306..30d4d6a 100644 --- a/toonz/sources/toonzlib/movierenderer.cpp +++ b/toonz/sources/toonzlib/movierenderer.cpp @@ -151,7 +151,7 @@ public: // Helper methods void prepareForStart(); - void addSoundtrack(int r0, int r1, double fps); + void addSoundtrack(int r0, int r1, double fps, int boardDuration = 0); void postProcessImage(const TRasterImageP &img, bool has64bitOutputSupport, const TRasterP &mark, int frame); @@ -162,7 +162,8 @@ public: const std::pair &rasters); std::string getRenderCacheId(); - void addBoard(); + // returns board duration in frame + int addBoard(); }; //--------------------------------------------------------- @@ -300,7 +301,8 @@ void MovieRenderer::Imp::prepareForStart() { //--------------------------------------------------------- -void MovieRenderer::Imp::addSoundtrack(int r0, int r1, double fps) { +void MovieRenderer::Imp::addSoundtrack(int r0, int r1, double fps, + int boardDuration) { TCG_ASSERT(r0 <= r1, return ); TXsheet::SoundProperties *prop = @@ -335,6 +337,10 @@ void MovieRenderer::Imp::addSoundtrack(int r0, int r1, double fps) { m_st = TSop::insertBlank(m_st, fromSample, numSample + m_whiteSample); m_st->copy(snd1, TINT32(fromSample + m_whiteSample)); + // insert blank sound for clapperboard + if (boardDuration > 0) + m_st = TSop::insertBlank(m_st, 0, TINT32(boardDuration * samplePerFrame)); + m_whiteSample = 0; } @@ -398,7 +404,7 @@ std::pair MovieRenderer::Imp::saveFrame( has64bitOutputSupport = writerA->is64bitOutputSupported(); // NOTE: If the writer could not be retrieved, the updater will throw. - // Failure will be catched then. + // Failure will be caught then. } // Prepare the images to be flushed @@ -467,6 +473,8 @@ void MovieRenderer::Imp::doRenderRasterCompleted(const RenderData &renderData) { // Build soundtrack at the first time a frame is completed - and the filetype // is that of a movie. if (m_firstCompletedRaster && m_movieType && !m_st) { + int boardDuration = addBoard(); + int from, to; getRange(m_scene, false, from, to); @@ -478,15 +486,14 @@ void MovieRenderer::Imp::doRenderRasterCompleted(const RenderData &renderData) { addSoundtrack( from, to, - m_scene->getProperties()->getOutputProperties()->getFrameRate()); + m_scene->getProperties()->getOutputProperties()->getFrameRate(), + boardDuration); if (m_st) { m_levelUpdaterA->getLevelWriter()->saveSoundTrack(m_st.getPointer()); if (m_levelUpdaterB.get()) m_levelUpdaterB->getLevelWriter()->saveSoundTrack(m_st.getPointer()); } - - addBoard(); } // Output frames must be *cloned*, since the supplied rasters will be @@ -747,12 +754,12 @@ void MovieRenderer::Imp::onRenderFinished(bool isCanceled) { //--------------------------------------------------------- -void MovieRenderer::Imp::addBoard() { +int MovieRenderer::Imp::addBoard() { BoardSettings *boardSettings = m_scene->getProperties()->getOutputProperties()->getBoardSettings(); - if (!boardSettings->isActive()) return; + if (!boardSettings->isActive()) return 0; int duration = boardSettings->getDuration(); - if (duration == 0) return; + if (duration == 0) return 0; // Get the image size int shrinkX = m_renderSettings.m_shrinkX, shrinkY = m_renderSettings.m_shrinkY; @@ -777,6 +784,7 @@ void MovieRenderer::Imp::addBoard() { // Failure is reported. } } + return duration; } //====================================================================================== @@ -868,7 +876,7 @@ TRenderer *MovieRenderer::getTRenderer() { // MovieRenderer instance. // Since a TRenderer is already smart-pointer-like, we could just return a // copy - however, it really - // shouln't be that way. Maybe one day we'll revert that and actually use a + // shouldn't be that way. Maybe one day we'll revert that and actually use a // smart pointer class. // For now, no use of this function seems to access the returned pointer diff --git a/toonz/sources/toonzlib/palettecmd.cpp b/toonz/sources/toonzlib/palettecmd.cpp index a133a47..48e4693 100644 --- a/toonz/sources/toonzlib/palettecmd.cpp +++ b/toonz/sources/toonzlib/palettecmd.cpp @@ -921,7 +921,7 @@ int loadRefImage(TPaletteHandle *paletteHandle, // values std::set colors; if (config.rasterPickType == PaletteCmd::PickEveryColors) { - // different colors will become sparate styles + // different colors will become separate styles TColorUtils::buildPrecisePalette(colors, raster, availableColorCount); } else { // config.rasterPickType == diff --git a/toonz/sources/toonzlib/preferences.cpp b/toonz/sources/toonzlib/preferences.cpp index 4bf9c69..d1d5cf8 100644 --- a/toonz/sources/toonzlib/preferences.cpp +++ b/toonz/sources/toonzlib/preferences.cpp @@ -286,7 +286,7 @@ Preferences::Preferences() , m_automaticSVNFolderRefreshEnabled(true) , m_SVNEnabled(false) , m_minimizeSaveboxAfterEditing(true) - , m_levelsBackupEnabled(false) + , m_backupEnabled(true) , m_sceneNumberingEnabled(false) , m_animationSheetEnabled(false) , m_inksOnly(false) @@ -348,6 +348,7 @@ Preferences::Preferences() , m_enableWinInk(false) , m_useOnionColorsForShiftAndTraceGhosts(false) , m_rasterBackgroundColor(TPixel::White) + , m_backupKeepCount(1) , m_levelBasedToolsDisplay(0) { TCamera camera; m_defLevelType = PLI_XSHLEVEL; @@ -391,7 +392,8 @@ Preferences::Preferences() getValue(*m_settings, "SVNEnabled", m_SVNEnabled); getValue(*m_settings, "minimizeSaveboxAfterEditing", m_minimizeSaveboxAfterEditing); - getValue(*m_settings, "levelsBackupEnabled", m_levelsBackupEnabled); + getValue(*m_settings, "backupEnabled", m_backupEnabled); + getValue(*m_settings, "backupKeepCount", m_backupKeepCount); getValue(*m_settings, "sceneNumberingEnabled", m_sceneNumberingEnabled); getValue(*m_settings, "animationSheetEnabled", m_animationSheetEnabled); getValue(*m_settings, "autosaveEnabled", m_autosaveEnabled); @@ -1436,9 +1438,16 @@ void Preferences::setDownArrowLevelStripNewFrame(bool on) { //----------------------------------------------------------------- -void Preferences::enableLevelsBackup(bool enabled) { - m_levelsBackupEnabled = enabled; - m_settings->setValue("levelsBackupEnabled", enabled ? "1" : "0"); +void Preferences::enableBackup(bool enabled) { + m_backupEnabled = enabled; + m_settings->setValue("backupEnabled", enabled ? "1" : "0"); +} + +//----------------------------------------------------------------- + +void Preferences::setBackupKeepCount(int count) { + m_backupKeepCount = count; + m_settings->setValue("backupKeepCount", count); } //----------------------------------------------------------------- diff --git a/toonz/sources/toonzlib/sandor_fxs/CallCircle.cpp b/toonz/sources/toonzlib/sandor_fxs/CallCircle.cpp index 4f53721..bce69ad 100644 --- a/toonz/sources/toonzlib/sandor_fxs/CallCircle.cpp +++ b/toonz/sources/toonzlib/sandor_fxs/CallCircle.cpp @@ -70,7 +70,7 @@ void CCallCircle::print() { void CCallCircle::draw(UCHAR *drawB, const int lX, const int lY, const int xx, const int yy, const double r) { - double aa = 2.0 * r / 3.0; // Size of antialising + double aa = 2.0 * r / 3.0; // Size of antialiasing for (int i = 0; i < m_nb && m_c[i].w <= r; i++) { double w = m_c[i].w; diff --git a/toonz/sources/toonzlib/sandor_fxs/STPic.h b/toonz/sources/toonzlib/sandor_fxs/STPic.h index a9fa2ac..d6135e7 100644 --- a/toonz/sources/toonzlib/sandor_fxs/STPic.h +++ b/toonz/sources/toonzlib/sandor_fxs/STPic.h @@ -37,7 +37,7 @@ m_ras - stores the pointer to the original RASTER picture #define ISINPIC(x, y) (m_pic && x >= 0 && x < m_lX && y >= 0 && y < m_lY) typedef enum { - ST_NIL, // EMTY + ST_NIL, // EMPTY ST_RGBM, // UC_PIXEL ST_RGBM64 // US_PIXEL } ST_TYPE; diff --git a/toonz/sources/toonzlib/sandor_fxs/blend.cpp b/toonz/sources/toonzlib/sandor_fxs/blend.cpp index 6939ee5..f061b56 100644 --- a/toonz/sources/toonzlib/sandor_fxs/blend.cpp +++ b/toonz/sources/toonzlib/sandor_fxs/blend.cpp @@ -121,7 +121,7 @@ public: //================================================================================= -// Bitmap used to store blend color selections and pure color informations. +// Bitmap used to store blend color selections and pure color information. class SelectionRaster { SelectionArrayPtr m_selection; diff --git a/toonz/sources/toonzlib/scriptbinding_centerline_vectorizer.cpp b/toonz/sources/toonzlib/scriptbinding_centerline_vectorizer.cpp index 4750fbc..8ad805b 100644 --- a/toonz/sources/toonzlib/scriptbinding_centerline_vectorizer.cpp +++ b/toonz/sources/toonzlib/scriptbinding_centerline_vectorizer.cpp @@ -90,7 +90,7 @@ QScriptValue CenterlineVectorizer::vectorize(QScriptValue arg) { QScriptValue newLevel = create(engine(), new Level()); QList fids; level->getFrameIds(fids); - foreach (TFrameId fid, fids) { + for (const TFrameId &fid : fids) { TImageP srcImg = level->getImg(fid); if (srcImg && (srcImg->getType() == TImage::RASTER || srcImg->getType() == TImage::TOONZ_RASTER)) { diff --git a/toonz/sources/toonzlib/scriptbinding_level.cpp b/toonz/sources/toonzlib/scriptbinding_level.cpp index 4185bbb..20e8bab 100644 --- a/toonz/sources/toonzlib/scriptbinding_level.cpp +++ b/toonz/sources/toonzlib/scriptbinding_level.cpp @@ -342,7 +342,7 @@ QScriptValue Level::getFrameIds() { getFrameIds(fids); QScriptValue result = engine()->newArray(); quint32 index = 0; - foreach (TFrameId fid, fids) { + for (const TFrameId &fid : fids) { QString fidStr = QString::fromStdString(fid.expand()); result.setProperty(index++, fidStr); } diff --git a/toonz/sources/toonzlib/scriptbinding_outline_vectorizer.cpp b/toonz/sources/toonzlib/scriptbinding_outline_vectorizer.cpp index 9dfb454..a470b10 100644 --- a/toonz/sources/toonzlib/scriptbinding_outline_vectorizer.cpp +++ b/toonz/sources/toonzlib/scriptbinding_outline_vectorizer.cpp @@ -84,7 +84,7 @@ QScriptValue OutlineVectorizer::vectorize(QScriptValue arg) { QScriptValue newLevel = create(engine(), new Level()); QList fids; level->getFrameIds(fids); - foreach (TFrameId fid, fids) { + for (const TFrameId &fid : fids) { TImageP srcImg = level->getImg(fid); if (srcImg && (srcImg->getType() == TImage::RASTER || srcImg->getType() == TImage::TOONZ_RASTER)) { diff --git a/toonz/sources/toonzlib/scriptbinding_renderer.cpp b/toonz/sources/toonzlib/scriptbinding_renderer.cpp index db9b640..72d6eff 100644 --- a/toonz/sources/toonzlib/scriptbinding_renderer.cpp +++ b/toonz/sources/toonzlib/scriptbinding_renderer.cpp @@ -80,7 +80,7 @@ public: oldStatus.append(xsh->getColumn(i)->isPreviewVisible()); newStatus.append(false); } - foreach (int i, m_columnList) { + for (int i : m_columnList) { if (0 <= i && i < xsh->getColumnCount()) newStatus[i] = true; } for (int i = 0; i < newStatus.length(); i++) { diff --git a/toonz/sources/toonzlib/stage.cpp b/toonz/sources/toonzlib/stage.cpp index 987771e..622bb34 100644 --- a/toonz/sources/toonzlib/stage.cpp +++ b/toonz/sources/toonzlib/stage.cpp @@ -111,7 +111,7 @@ bool descending(int i, int j) { return (i > j); } } //============================================================================= -/*! The ZPlacement class preserve camera position informations. +/*! The ZPlacement class preserve camera position information. */ //============================================================================= @@ -207,11 +207,11 @@ public: StageBuilder(); virtual ~StageBuilder(); - /*! Add in \b players vector informations about specify cell. + /*! Add in \b players vector information about specify cell. \n Analyze cell in row \b row and column \b col of xsheet \b xsh. If level containing this cell is a simple level, \b TXshSimpleLevel, create a Pleyer - object with informations of the cell. Else if level is a child + object with information of the cell. Else if level is a child level, \b TXshChildLevel, recall \b addFrame(). */ @@ -232,7 +232,7 @@ public: void addFrame(PlayerSet &players, ToonzScene *scene, TXsheet *xsh, int row, int level, bool includeUnvisible, bool checkPreviewVisibility); - /*! Add in \b players vector informations about \b level cell with \b TFrameId + /*! Add in \b players vector information about \b level cell with \b TFrameId \b fid. \n Compute information for all cell with active onion-skin, if onion-skin is not active diff --git a/toonz/sources/toonzlib/stagevisitor.cpp b/toonz/sources/toonzlib/stagevisitor.cpp index 58784ee..e62ff4b 100644 --- a/toonz/sources/toonzlib/stagevisitor.cpp +++ b/toonz/sources/toonzlib/stagevisitor.cpp @@ -1176,7 +1176,7 @@ void OpenGlPainter::onRasterImage(TRasterImage *ri, bool premultiplied = tlvFlag; // xD static std::vector - matteChan; // Wtf this is criminal. Altough probably this + matteChan; // Wtf this is criminal. Although probably this // stuff is used only in the main thread... hmmm.... TRaster32P r = (TRaster32P)ri->getRaster(); r->lock(); diff --git a/toonz/sources/toonzlib/studiopalette.cpp b/toonz/sources/toonzlib/studiopalette.cpp index 20b0729..36ac67d 100644 --- a/toonz/sources/toonzlib/studiopalette.cpp +++ b/toonz/sources/toonzlib/studiopalette.cpp @@ -579,6 +579,13 @@ void StudioPalette::setStylesGlobalNames(TPalette *palette) { //------------------------------------------------------------------- void StudioPalette::save(const TFilePath &path, TPalette *palette) { + TFileStatus fs(path); + if (fs.doesExist() && !fs.isWritable()) { + throw TSystemException(path, + "The studio palette cannot be saved: it is a read " + "only studio palette."); + } + TOStream os(path); std::map attr; attr["name"] = ::to_string(palette->getGlobalName()); diff --git a/toonz/sources/toonzlib/stylemanager.cpp b/toonz/sources/toonzlib/stylemanager.cpp index 35781c3..6bb014e 100644 --- a/toonz/sources/toonzlib/stylemanager.cpp +++ b/toonz/sources/toonzlib/stylemanager.cpp @@ -8,10 +8,16 @@ #include "tropcm.h" #include "tvectorrenderdata.h" #include "tsystem.h" +#include "tvectorgl.h" // Qt includes #include #include +#include +#include +#include +#include +#include #include "toonz/stylemanager.h" @@ -50,6 +56,7 @@ class CustomStyleManager::StyleLoaderTask final : public TThread::Runnable { CustomStyleManager *m_manager; TFilePath m_fp; PatternData m_data; + std::shared_ptr m_offScreenSurface; public: StyleLoaderTask(CustomStyleManager *manager, const TFilePath &fp); @@ -66,6 +73,12 @@ CustomStyleManager::StyleLoaderTask::StyleLoaderTask( : m_manager(manager), m_fp(fp) { connect(this, SIGNAL(finished(TThread::RunnableP)), this, SLOT(onFinished(TThread::RunnableP))); + + if (QThread::currentThread() == qGuiApp->thread()) { + m_offScreenSurface.reset(new QOffscreenSurface()); + m_offScreenSurface->setFormat(QSurfaceFormat::defaultFormat()); + m_offScreenSurface->create(); + } } //----------------------------------------------------------------------------- @@ -90,16 +103,39 @@ void CustomStyleManager::StyleLoaderTask::run() { TRasterImageP rimg = img; TRaster32P ras; + + QImage *image = nullptr; + if (vimg) { assert(level->getPalette()); TPalette *vPalette = level->getPalette(); assert(vPalette); vimg->setPalette(vPalette); - TOfflineGL *glContext = 0; - glContext = TOfflineGL::getStock(chipSize); + QOpenGLContext *glContext = new QOpenGLContext(); + if (QOpenGLContext::currentContext()) + glContext->setShareContext(QOpenGLContext::currentContext()); + glContext->setFormat(QSurfaceFormat::defaultFormat()); + glContext->create(); + glContext->makeCurrent(m_offScreenSurface.get()); + // attaching stencil buffer here as some styles use it + QOpenGLFramebufferObject fb( + chipSize.lx, chipSize.ly, + QOpenGLFramebufferObject::CombinedDepthStencil); + + fb.bind(); + // Draw + glViewport(0, 0, chipSize.lx, chipSize.ly); + glClearColor(1.0, 1.0, 1.0, 1.0); // clear with white color + glClear(GL_COLOR_BUFFER_BIT); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluOrtho2D(0, chipSize.lx, 0, chipSize.ly); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); - glContext->clear(TPixel32::White); TRectD bbox = img->getBBox(); double scx = 0.8 * chipSize.lx / bbox.getLx(); double scy = 0.8 * chipSize.ly / bbox.getLy(); @@ -112,11 +148,14 @@ void CustomStyleManager::StyleLoaderTask::run() { TTranslation(-0.5 * (bbox.x0 + bbox.x1), -0.5 * (bbox.y0 + bbox.y1)); TVectorRenderData rd(aff, chipSize, vPalette, 0, true); - glContext->draw(img, rd); + tglDraw(rd, vimg.getPointer()); + + image = new QImage(fb.toImage().scaled(QSize(chipSize.lx, chipSize.ly), + Qt::IgnoreAspectRatio, + Qt::SmoothTransformation)); + fb.release(); + glContext->deleteLater(); - // No need to clone! The received raster already is a copy of the - // context's buffer - ras = glContext->getRaster(); //->clone(); } else if (rimg) { TDimension size = rimg->getRaster()->getSize(); if (size == chipSize) @@ -131,12 +170,11 @@ void CustomStyleManager::StyleLoaderTask::run() { TRop::addBackground(rout, TPixel::White); ras = rout; } + image = new QImage(chipSize.lx, chipSize.ly, QImage::Format_RGB32); + convertRaster32ToImage(ras, image); } else assert(!"unsupported type for custom styles!"); - QImage *image = new QImage(chipSize.lx, chipSize.ly, QImage::Format_RGB32); - convertRaster32ToImage(ras, image); - m_data.m_patternName = m_fp.getName(); m_data.m_isVector = (m_fp.getType() == "pli" || m_fp.getType() == "svg"); m_data.m_image = image; diff --git a/toonz/sources/toonzlib/tbinarizer.cpp b/toonz/sources/toonzlib/tbinarizer.cpp index 49ee49f..782ed75 100644 --- a/toonz/sources/toonzlib/tbinarizer.cpp +++ b/toonz/sources/toonzlib/tbinarizer.cpp @@ -53,7 +53,7 @@ else color=6; // ritorna true se i primi pixel del buffer non sono tutti opachi bool hasAlpha(const TPixel32 *buffer, int w, int h) { - int n = qMin(500, w * h); + int n = std::min(500, w * h); for (int i = 0; i < n; i++) if (buffer[i].m < 255) return true; return false; @@ -129,10 +129,10 @@ void TBinarizer::process(const TRaster32P &ras) { // conto i quadrati che hanno un "buon" background for (int y1 = 0; y1 < h1; y1++) { int ya = y1 * bsize; - int yb = qMin(h, ya + bsize) - 1; + int yb = std::min(h, ya + bsize) - 1; for (int x1 = 0; x1 < w1; x1++) { int xa = x1 * bsize; - int xb = qMin(w, xa + bsize) - 1; + int xb = std::min(w, xa + bsize) - 1; int tot = 0; std::vector histo(32, 0); @@ -140,7 +140,7 @@ void TBinarizer::process(const TRaster32P &ras) { for (int x = xa; x <= xb; x++) { int k = y * w + x; TPixel32 pix = buffer[k]; - int v = qMin(qMin(pix.r, pix.g), pix.b); + int v = std::min({pix.r, pix.g, pix.b}); vBuffer[k] = v; histo[v >> 3] += 1; tot += 1; @@ -196,16 +196,16 @@ void TBinarizer::process(const TRaster32P &ras) { // cerco i pixel sicuramente colorati e i sicuramente neri for (int y1 = 0; y1 < h1; y1++) { - int ya = qMax(1, y1 * bsize); - int yb = qMin(h - 1, ya + bsize) - 1; + int ya = std::max(1, y1 * bsize); + int yb = std::min(h - 1, ya + bsize) - 1; for (int x1 = 0; x1 < w1; x1++) { int k1 = y1 * w1 + x1; // salto i quadrati completamente bianchi if (qBuffer[k1] >= thrBuffer[k1] - thrDelta) continue; for (int y = ya + 1; y <= yb; y++) { - int xa = qMax(1, x1 * bsize); - int xb = qMin(w - 1, xa + bsize) - 1; + int xa = std::max(1, x1 * bsize); + int xb = std::min(w - 1, xa + bsize) - 1; for (int x = xa + 1; x <= xb; x++) { int k = y * w + x; diff --git a/toonz/sources/toonzlib/tcenterlineadjustments.cpp b/toonz/sources/toonzlib/tcenterlineadjustments.cpp index 45a96ee..9489fd4 100644 --- a/toonz/sources/toonzlib/tcenterlineadjustments.cpp +++ b/toonz/sources/toonzlib/tcenterlineadjustments.cpp @@ -28,7 +28,7 @@ ContourFamily *currContourFamily; //-------------------------------------- // EXPLANATION: The raw skeleton data obtained from StraightSkeletonizer -// class need to be grouped in joints and sequences before proceding with +// class need to be grouped in joints and sequences before proceeding with // conversion in quadratics - which works on single sequences. // NOTE: Due to maxHeight, we have to assume that a single SkeletonGraph can diff --git a/toonz/sources/toonzlib/tcenterlinecolors.cpp b/toonz/sources/toonzlib/tcenterlinecolors.cpp index cc08b42..57a94d9 100644 --- a/toonz/sources/toonzlib/tcenterlinecolors.cpp +++ b/toonz/sources/toonzlib/tcenterlinecolors.cpp @@ -123,10 +123,9 @@ static void sampleColor(const TRasterCM32P &ras, int threshold, Sequence &seq, std::vector params; // Meanwhile, ensure each point belong to ras. Otherwise, typically an error - // occured - // in the thinning process and it's better avoid sampling procedure. Only - // exception, when - // a point has x==ras->getLx() || y==ras->getLy(); that is accepted. + // occurred in the thinning process and it's better avoid sampling procedure. + // Only exception, when a point has + // x==ras->getLx() || y==ras->getLy(); that is accepted. { const T3DPointD &headPos = *currGraph->getNode(seq.m_head); @@ -154,8 +153,11 @@ static void sampleColor(const TRasterCM32P &ras, int threshold, Sequence &seq, return; } - params.push_back(params.back() + tdistance(*currGraph->getNode(next), - *currGraph->getNode(curr))); + double distance = + tdistance(*currGraph->getNode(next), *currGraph->getNode(curr)); + if (distance == 0.0) continue; + + params.push_back(params.back() + distance); nodes.push_back(next); meanThickness += currGraph->getNode(next)->z; @@ -174,8 +176,8 @@ static void sampleColor(const TRasterCM32P &ras, int threshold, Sequence &seq, // Prepare sampling procedure int paramCount = params.size(), paramMax = paramCount - 1; - int sampleMax = std::max(params.back() / std::max(meanThickness, 1.0), - 3.0), // Number of color samples depends on + int sampleMax = std::max(params.back() / std::max(meanThickness, 1.0), + 3.0), // Number of color samples depends on sampleCount = sampleMax + 1; // the ratio params.back() / meanThickness std::vector sampleParams(sampleCount); // Sampling lengths @@ -207,9 +209,8 @@ static void sampleColor(const TRasterCM32P &ras, int threshold, Sequence &seq, } // NOTE: Extremities of a sequence are considered unreliable: they typically - // happen - // to be junction points shared between possibly different-colored - // strokes. + // happen to be junction points shared between possibly different-colored + // strokes. // Find first and last extremity-free sampled points T3DPointD first(*currGraph->getNode(seq.m_head)); @@ -254,8 +255,9 @@ static void sampleColor(const TRasterCM32P &ras, int threshold, Sequence &seq, } } - if (i >= k) goto _getOut; // No admissible segment found for splitting - // check. + if (i >= k) + goto _getOut; // No admissible segment found for splitting + // check. // Find color changes between sampled colors for (l = i; l < k; ++l) { const TPixelCM32 @@ -381,8 +383,7 @@ void calculateSequenceColors(const TRasterP &ras, VectorizerCoreGlobals &g) { if (cm && g.currConfig->m_maxThickness > 0.0) { // singleSequence is traversed back-to-front because new, possibly splitted - // sequences - // are inserted at back - and don't have to be re-sampled. + // sequences are inserted at back - and don't have to be re-sampled. for (l = singleSequences.size() - 1; l >= 0; --l) { Sequence rear; sampleColor(ras, threshold, singleSequences[l], rear, singleSequences); diff --git a/toonz/sources/toonzlib/tcenterlinepolygonizer.cpp b/toonz/sources/toonzlib/tcenterlinepolygonizer.cpp index 00d877f..d829435 100644 --- a/toonz/sources/toonzlib/tcenterlinepolygonizer.cpp +++ b/toonz/sources/toonzlib/tcenterlinepolygonizer.cpp @@ -257,7 +257,7 @@ void Signaturemap::readRasterData(const TRasterPT &ras, int threshold) { //-------------------------------------------------------------------------- -// Minority check for amiguous turning directions +// Minority check for ambiguous turning directions inline bool getMinorityCheck(const Signaturemap &ras, int x, int y) { // Assumes (x,y) is ambiguous case: 2 immediate surrounding pixels are white // and 2 black diff --git a/toonz/sources/toonzlib/tcenterlineskeletonizer.cpp b/toonz/sources/toonzlib/tcenterlineskeletonizer.cpp index 0705e75..5fdadc4 100644 --- a/toonz/sources/toonzlib/tcenterlineskeletonizer.cpp +++ b/toonz/sources/toonzlib/tcenterlineskeletonizer.cpp @@ -109,7 +109,7 @@ public: typedef std::list IndexColumn; std::vector - m_columns; //!< Countours set by 'column identifier'. + m_columns; //!< Contours set by 'column identifier'. std::vector m_identifiers; //!< Column identifiers by original contour index. @@ -1385,7 +1385,7 @@ inline void Event::processSplitEvent() { m_generator->m_next->m_prev = newLeftNode; newLeftNode->m_next = m_generator->m_next; - // Assign and calculate the new nodes' informations + // Assign and calculate the new nodes' information newLeftNode->m_edge = m_generator->m_edge; newRightNode->m_edge = m_coGenerator->m_edge; @@ -1491,7 +1491,7 @@ inline void Event::processVertexEvent() { m_generator->m_next->m_prev = newLeftNode; newLeftNode->m_next = m_generator->m_next; - // Assign and calculate the new nodes' informations + // Assign and calculate the new nodes' information newLeftNode->m_edge = m_generator->m_edge; newRightNode->m_edge = m_coGenerator->m_edge; diff --git a/toonz/sources/toonzlib/tcenterlinetostrokes.cpp b/toonz/sources/toonzlib/tcenterlinetostrokes.cpp index 9b70d2f..300b38c 100644 --- a/toonz/sources/toonzlib/tcenterlinetostrokes.cpp +++ b/toonz/sources/toonzlib/tcenterlinetostrokes.cpp @@ -371,7 +371,7 @@ void SequenceConverter::lengthOfTriplet(unsigned int i, Length &len) { T3DPointD B = middleAddedSequence[i + 1]; T3DPointD C = middleAddedSequence[i + 2]; - // We assume that this convertion is faithful, avoiding length penalty + // We assume that this conversion is faithful, avoiding length penalty len.l = 0; double d = tdistance(B, C - A, A); if (d <= 2) { @@ -684,7 +684,7 @@ bool SequenceConverter::penalty(unsigned int a, unsigned int b, Length &len) { //-------------------------------------------------------------------------- //----------------------------- -// Convertion Mains +// Conversion Mains //----------------------------- inline TStroke *convert(const Sequence &s, double penalty) { diff --git a/toonz/sources/toonzlib/tcenterlinevectP.h b/toonz/sources/toonzlib/tcenterlinevectP.h index 8a8324f..1defda0 100644 --- a/toonz/sources/toonzlib/tcenterlinevectP.h +++ b/toonz/sources/toonzlib/tcenterlinevectP.h @@ -87,7 +87,7 @@ inline bool angleLess(const TPointD &a, const TPointD &b, const TPointD &ref) { // Container append (needs reverse iterators) // NOTE: Merge could be used... but it requires operator< and we don't... -//! warning: must be I == T::Reverse_iterator; explicited because on Mac it was +//! warning: must be I == T::Reverse_iterator; explicitly because on Mac it was //! not compiling! template void append(T &cont1, T &cont2) { @@ -288,7 +288,7 @@ public: // Further node properties bool m_concave; //!< Whether the node represents a concave angle. unsigned int m_attributes, //!< Bitwise signatures of this node - m_updateTime, //!< \a Algoritmic time in which the node was updated. + m_updateTime, //!< \a Algorithmic time in which the node was updated. m_ancestor, //!< Index of the original node from which this one evolved. m_ancestorContour; //!< Contour index of the original node from which //! this one evolved. @@ -403,7 +403,7 @@ public: Sequence() : m_graphHolder(0) {} ~Sequence() {} - // Impose a property dependant only on the extremity we consider first + // Impose a property dependent only on the extremity we consider first // - so that the same sequence is not considered twice when head and tail // are exchanged bool isForward() const { @@ -467,7 +467,7 @@ typedef std::vector PointList; //! "tcenterline*.cpp" // sources. Instead than passing each variable repeatedly, it is easier to // define a Global -// class passed to each file, which gets immediatly pointed in an anonymous +// class passed to each file, which gets immediately pointed in an anonymous // namespace. class VectorizerCoreGlobals { diff --git a/toonz/sources/toonzlib/tcleanupper.cpp b/toonz/sources/toonzlib/tcleanupper.cpp index f4cd7ac..15abeaf 100644 --- a/toonz/sources/toonzlib/tcleanupper.cpp +++ b/toonz/sources/toonzlib/tcleanupper.cpp @@ -45,7 +45,7 @@ centered Post-processing include despeckling (ie removal or recoloration of little blots with - uniform color), and tones' brigthness/contrast manipulation. + uniform color), and tones' brightness/contrast manipulation. (*) The image is first overed on top of a white background @@ -501,7 +501,7 @@ bool TCleanupper::getResampleValues(const TRasterImageP &image, TAffine &aff, //------------------------------------------------------------------------------------ // this one incorporate the preprocessColors and the finalize function; used for -// swatch.(tipically on very small rasters) +// swatch.(typically on very small rasters) TRasterP TCleanupper::processColors(const TRasterP &rin) { if (m_parameters->m_lineProcessingMode == lpNone) return rin; diff --git a/toonz/sources/toonzlib/tcolumnfx.cpp b/toonz/sources/toonzlib/tcolumnfx.cpp index 4d39bf7..f865c3e 100644 --- a/toonz/sources/toonzlib/tcolumnfx.cpp +++ b/toonz/sources/toonzlib/tcolumnfx.cpp @@ -376,7 +376,7 @@ static std::vector getAllBut(std::vector &colorIds) { //! Image //! will be destroyed at the most appropriate time. You should definitely *COPY* //! all -//! necessary informations before calling it - however, since the intent was +//! necessary information before calling it - however, since the intent was //! that of //! optimizing memory usage, please avoid copying the entire image buffer... @@ -1423,7 +1423,7 @@ bool TLevelColumnFx::doGetBBox(double frame, TRectD &bBox, bBox = img->getBBox(); } - // Add the enlargement of the bbox due to Tzp render datas + // Add the enlargement of the bbox due to Tzp render data if (info.m_data.size()) { TRectD imageBBox(bBox); for (unsigned int i = 0; i < info.m_data.size(); ++i) { diff --git a/toonz/sources/toonzlib/tdistort.cpp b/toonz/sources/toonzlib/tdistort.cpp index eabe26a..c208fc3 100644 --- a/toonz/sources/toonzlib/tdistort.cpp +++ b/toonz/sources/toonzlib/tdistort.cpp @@ -315,12 +315,10 @@ PIXEL filterPixel(double a, double b, double c, double d, // Deal the magnification case, assuming that intervals have at least length // 1. This actually stands for: - // 1. Their midpoint is bilinear filtered whenever their former length wass - // less than 1 (see fractionary - // parts computing above). + // 1. Their midpoint is bilinear filtered whenever their former length was + // less than 1 (see fractionary parts computing above). // 2. This behaviour is continuous with respect to interval lengths - that - // is, we pass from supersampling to - // subsampling in a smooth manner. + // is, we pass from supersampling to subsampling in a smooth manner. if (b - a < 1) { double v = 0.5 * (a + b); a = v - 0.5; diff --git a/toonz/sources/toonzlib/toonzscene.cpp b/toonz/sources/toonzlib/toonzscene.cpp index b0e43ac..5da6ea5 100644 --- a/toonz/sources/toonzlib/toonzscene.cpp +++ b/toonz/sources/toonzlib/toonzscene.cpp @@ -169,71 +169,33 @@ void deleteUntitledScene(const TFilePath &fp) { } //----------------------------------------------------------------------------- -/*-- TODO: オプション化して復活させるか、検討のこと --*/ -/* -void saveBackup(const TFilePath &fp) -{ - if(!TFileStatus(fp).doesExist()) return; - wstring sceneName = fp.getWideName(); - TFilePath bckDir = fp.getParentDir() + "backups" + sceneName; - if(!TFileStatus(bckDir).doesExist()) - { - try {TSystem::mkDir(bckDir);} - catch(...) {return;} - } - - std::map oldBackups; - TFilePathSet lst = TSystem::readDirectory(bckDir); - for(TFilePathSet::iterator it = lst.begin(); it != lst.end(); ++it) - { - TFilePath fp2 = *it; - if(fp2.getType() != "tnz" && fp2.getType() != "tab") continue; - wstring name = fp2.getWideName(); - if(name.find_first_of(L"0123456789") == wstring::npos) continue; - int i = name.find(sceneName); - if(i != wstring::npos) - name = name.substr(sceneName.size()+1); - if(name == L"" || name.find_first_not_of(L"0123456789") != wstring::npos) - continue; - int index = toInt(name); - assert(0m) - { - std::map::iterator it = oldBackups.begin(); - for(int i=0;i+m<(int)oldBackups.size();i++) - { - assert(it != oldBackups.end()); - TFilePath toKill = it->second; - try {TSystem::deleteFile(toKill); } catch(...) {} - ++it; +static void saveBackup(TFilePath path) { + int totalBackups = Preferences::instance()->getBackupKeepCount(); + totalBackups -= 1; + TFilePath backup = path.withType(path.getType() + ".bak"); + TFilePath prevBackup = + path.withType(path.getType() + ".bak" + std::to_string(totalBackups)); + while (--totalBackups >= 0) { + std::string bakExt = + ".bak" + (totalBackups > 0 ? std::to_string(totalBackups) : ""); + backup = path.withType(path.getType() + bakExt); + if (TSystem::doesExistFileOrLevel(backup)) { + try { + TSystem::copyFileOrLevel_throw(prevBackup, backup); + } catch (...) { + } } + prevBackup = backup; } - TFilePath bckFp; - if(oldBackups.empty()) - { - if(fp.getType() == "tnz") - bckFp = bckDir + TFilePath(sceneName + L"_1.tnz"); - else if(fp.getType() == "tab") - bckFp = bckDir + TFilePath(sceneName + L"_1.tab"); - } - else - { - int id = oldBackups.rbegin()->first + 1; - if(fp.getType() == "tnz") - bckFp = bckDir + TFilePath(sceneName + L"_" + ::to_wstring(id) + L".tnz"); - else if(fp.getType() == "tab") - bckFp = bckDir + TFilePath(sceneName + L"_" + ::to_wstring(id) + L".tab"); + try { + if (TSystem::doesExistFileOrLevel(backup)) + TSystem::removeFileOrLevel_throw(backup); + TSystem::copyFileOrLevel_throw(backup, path); + } catch (...) { } - - TSystem::renameFile(bckFp, fp); } -*/ //----------------------------------------------------------------------------- @@ -635,7 +597,9 @@ void ToonzScene::save(const TFilePath &fp, TXsheet *subxsh) { TFilePath scenePathTemp(scenePath.getWideString() + QString(".tmp").toStdWString()); - // if(TFileStatus(scenePath).doesExist()) saveBackup(scenePath); + if (Preferences::instance()->isBackupEnabled() && + oldScenePath == newScenePath && TFileStatus(scenePath).doesExist()) + saveBackup(scenePath); if (TFileStatus(scenePathTemp).doesExist()) TSystem::removeFileOrLevel(scenePathTemp); diff --git a/toonz/sources/toonzlib/tpalettehandle.cpp b/toonz/sources/toonzlib/tpalettehandle.cpp index 8937b21..a653b5b 100644 --- a/toonz/sources/toonzlib/tpalettehandle.cpp +++ b/toonz/sources/toonzlib/tpalettehandle.cpp @@ -130,6 +130,17 @@ bool TPaletteHandle::disconnectBroadcasts(const QObject *receiver) { //----------------------------------------------------------------------------- void TPaletteHandle::setPalette(TPalette *palette, int styleIndex) { + if (palette) { + if (styleIndex < 0) { + styleIndex = palette->getCurrentStyleId(); + if (!palette->getStylePage(styleIndex)) { // in case the style is deleted + styleIndex = 1; + palette->setCurrentStyleId(styleIndex); + } + } else + palette->setCurrentStyleId(styleIndex); + } + if (m_palette == palette) setStyleIndex(styleIndex); else { @@ -142,9 +153,13 @@ void TPaletteHandle::setPalette(TPalette *palette, int styleIndex) { } //----------------------------------------------------------------------------- +// forceEmit flag is used in PageViewer and StylePicker tool. +// See the function PageViewer::setCurrentStyleIndex() in paletteviewergui.cpp +// Also see the function StylePickerTool::pick() in stylepickertool.cpp -void TPaletteHandle::setStyleIndex(int index) { - if (m_styleIndex != index || m_styleParamIndex != 0) { +void TPaletteHandle::setStyleIndex(int index, bool forceEmit) { + if (m_styleIndex != index || m_styleParamIndex != 0 || forceEmit) { + if (m_palette) m_palette->setCurrentStyleId(index); m_styleIndex = index; m_styleParamIndex = 0; emit broadcastColorStyleSwitched(); diff --git a/toonz/sources/toonzlib/tproject.cpp b/toonz/sources/toonzlib/tproject.cpp index 4c270d4..bddbc91 100644 --- a/toonz/sources/toonzlib/tproject.cpp +++ b/toonz/sources/toonzlib/tproject.cpp @@ -160,7 +160,15 @@ TFilePath searchProjectPath(TFilePath folder) { bool isFolderUnderVersionControl(const TFilePath &folderPath) { QDir dir(QString::fromStdWString(folderPath.getWideString())); - return dir.entryList(QDir::AllDirs | QDir::Hidden).contains(".svn"); + if (dir.entryList(QDir::AllDirs | QDir::Hidden).contains(".svn")) return true; + // For SVN 1.7 and greater, check parent directories to see if it's under + // version control + while (dir.cdUp()) { + if (dir.entryList(QDir::AllDirs | QDir::Hidden).contains(".svn")) + return true; + } + + return false; } //=================================================================== @@ -197,7 +205,7 @@ void hideOlderProjectFiles(const TFilePath &folderPath) { and Outputs. Each of this folders can be renamed using the setFolder(string name, TFilePath path) method. - Usually, the \b name parameter is choosen from inputs, drawings, scenes, + Usually, the \b name parameter is chosen from inputs, drawings, scenes, extras and outputs; the \b path parameter contains the folder that can have a different name from them. @@ -206,7 +214,7 @@ void hideOlderProjectFiles(const TFilePath &folderPath) { folder is used by every scene created in the project to save or load data. A scene dependent folder is used only by the scene - from wich the folder depends. A scene dependent folder contains the + from which the folder depends. A scene dependent folder contains the string "$scene" in its path. \code @@ -217,7 +225,7 @@ void hideOlderProjectFiles(const TFilePath &folderPath) { Drawings folder path: "...\\prodA\\episode1\\SceneA\\drawings" \endcode \n\n - By default, from the toonz installation, exist allways a toonz project + By default, from the toonz installation, exist always a toonz project called "sandbox". \see TProjectManager, TSceneProperties. */ @@ -250,7 +258,7 @@ void hideOlderProjectFiles(const TFilePath &folderPath) { /*! \fn void TProject::save() Saves the project. - Is equvalent to save(getProjectPath()). + Is equivalent to save(getProjectPath()). The project is saved as a xml file.\n Uses TProjectManager and TOStream. \note Exceptions can be thrown. @@ -268,7 +276,7 @@ TProject::~TProject() { delete m_sprop; } \code e.g. setFolder(TProject::Drawings, TFilePath("C:\\temp\\drawings")) \endcode - Usually, the \b name parameter is choosen from inputs, drawings, scenes, + Usually, the \b name parameter is chosen from inputs, drawings, scenes, extras and outputs; the \b path contains the folder that can have a different name from them. @@ -697,15 +705,15 @@ public: and folders. It is possible to handle more than one project root. - The class mantains a container this purpose. All the projects roots must - be setted by hand in the windows + The class maintains a container this purpose. All the projects roots must + be set by hand in the windows registery. By default, only one project root is created when toonz is installed.\n The project root container can be updated using addProjectsRoot(const TFilePath &root), addDefaultProjectsRoot() methods. - The class mantains also information about the current project. The class + The class maintains also information about the current project. The class provides all needed method to retrieve the current project path, name and folder. \see TProject @@ -806,7 +814,7 @@ TFilePath TProjectManager::projectPathToProjectName( //------------------------------------------------------------------- /*! Returns an absolute path of the specified \b projectName.\n - \note The returned project path is allways computed used the first + \note The returned project path is always computed used the first project root in the container.*/ TFilePath TProjectManager::projectNameToProjectPath( const TFilePath &projectName) { @@ -832,7 +840,7 @@ TFilePath TProjectManager::projectFolderToProjectPath( /*! Returns the absolute path of the specified \b projectName only if the project already exist.\n Returns TFilePath() if a project with the specified \b projectName - doesn't exsist.\n + doesn't exist.\n \note \b projectName must be a relative path.*/ TFilePath TProjectManager::getProjectPathByName(const TFilePath &projectName) { assert(!TProject::isAProjectPath(projectName)); @@ -885,8 +893,7 @@ void TProjectManager::getFolderNames(std::vector &names) { const std::string stdNames[] = {TProject::Inputs, TProject::Drawings, TProject::Scenes, TProject::Extras, TProject::Outputs, TProject::Scripts}; - for (int i = 0; i < (int)tArrayCount(stdNames); i++) { - string name = stdNames[i]; + for (auto const &name : stdNames) { // se il nome non e' gia' stato inserito lo aggiungo if (std::find(names.begin(), names.end(), name) == names.end()) names.push_back(name); @@ -905,9 +912,9 @@ void TProjectManager::setCurrentProjectPath(const TFilePath &fp) { //------------------------------------------------------------------- /*! Returns the current project path.\n - The project path, usually, is setted in key registry. If a current - project path isn't setted, - TProject::SandboxProjectName is setted as current project. + The project path, usually, is set in key registry. If a current + project path isn't set, + TProject::SandboxProjectName is set as current project. */ TFilePath TProjectManager::getCurrentProjectPath() { TFilePath fp(currentProjectPath); @@ -919,7 +926,7 @@ TFilePath TProjectManager::getCurrentProjectPath() { } fp = searchProjectPath(fp.getParentDir()); if (!TFileStatus(fp).doesExist()) - fp = projectNameToProjectPath(TProject::SandboxProjectName); + fp = projectNameToProjectPath(TProject::SandboxProjectName); fp = getLatestVersionProjectPath(fp); string s = ::to_string(fp); if (s != (string)currentProjectPath) currentProjectPath = s; @@ -1027,13 +1034,13 @@ void TProjectManager::notifyProjectChanged() { } //------------------------------------------------------------------- -/*! Adds \b listener to the listners container.*/ +/*! Adds \b listener to the listeners container.*/ void TProjectManager::addListener(Listener *listener) { m_listeners.insert(listener); } //------------------------------------------------------------------- -/*! Removes \b listener from the listners container.*/ +/*! Removes \b listener from the listeners container.*/ void TProjectManager::removeListener(Listener *listener) { m_listeners.erase(listener); } diff --git a/toonz/sources/toonzlib/tstageobject.cpp b/toonz/sources/toonzlib/tstageobject.cpp index e51026c..5ff449d 100644 --- a/toonz/sources/toonzlib/tstageobject.cpp +++ b/toonz/sources/toonzlib/tstageobject.cpp @@ -513,7 +513,7 @@ void TStageObject::onChange(const class TParamChange &c) { // one of its parameters. This means this function gets called A LOT. // Thus, we're just SCHEDULING for a data refresh. The actual refresh happens - // whenever the scheduled datas are accessed. + // whenever the scheduled data is accessed. if (c.m_keyframeChanged) m_lazyData.invalidate(); // Both invalidate placement AND keyframes diff --git a/toonz/sources/toonzlib/ttileset.cpp b/toonz/sources/toonzlib/ttileset.cpp index c12288d..fa5e135 100644 --- a/toonz/sources/toonzlib/ttileset.cpp +++ b/toonz/sources/toonzlib/ttileset.cpp @@ -197,6 +197,16 @@ const TTileSetFullColor::Tile *TTileSetFullColor::getTile(int index) const { //------------------------------------------------------------------------------------------ +TTileSetFullColor::Tile *TTileSetFullColor::editTile(int index) const { + assert(0 <= index && index < getTileCount()); + TTileSetFullColor::Tile *tile = + dynamic_cast(m_tiles[index]); + assert(tile); + return tile; +} + +//------------------------------------------------------------------------------------------ + TTileSetFullColor *TTileSetFullColor::clone() const { TTileSetFullColor *tileSet = new TTileSetFullColor(m_srcImageSize); Tiles::const_iterator it = m_tiles.begin(); diff --git a/toonz/sources/toonzlib/txshcolumn.cpp b/toonz/sources/toonzlib/txshcolumn.cpp index fb8d5ea..2f4f6c7 100644 --- a/toonz/sources/toonzlib/txshcolumn.cpp +++ b/toonz/sources/toonzlib/txshcolumn.cpp @@ -469,7 +469,7 @@ TXshColumn::ColumnType TXshColumn::toColumnType(int levelType) { else if (levelType == MESH_XSHLEVEL) colType = TXshColumn::eMeshType; else - assert(!"Unkown level type!"); + assert(!"Unknown level type!"); return colType; } diff --git a/toonz/sources/toonzlib/txsheet.cpp b/toonz/sources/toonzlib/txsheet.cpp index 849cea3..72efe2d 100644 --- a/toonz/sources/toonzlib/txsheet.cpp +++ b/toonz/sources/toonzlib/txsheet.cpp @@ -772,7 +772,7 @@ void TXsheet::increaseStepCells(int r0, int c0, int &r1, int c1) { // controllo se devo cambiare la selezione bool allIncreaseIsEqual = true; for (c = 0; c < ends.size() - 1 && allIncreaseIsEqual; c++) - allIncreaseIsEqual = allIncreaseIsEqual && ends[c] == ends[c + 1]; + allIncreaseIsEqual = allIncreaseIsEqual && ends[c] == ends[c + 1]; if (allIncreaseIsEqual) r1 = ends[0]; } @@ -806,7 +806,7 @@ void TXsheet::decreaseStepCells(int r0, int c0, int &r1, int c1) { // controllo se devo cambiare la selezione bool allDecreaseIsEqual = true; for (c = 0; c < ends.size() - 1 && allDecreaseIsEqual; c++) - allDecreaseIsEqual = allDecreaseIsEqual && ends[c] == ends[c + 1]; + allDecreaseIsEqual = allDecreaseIsEqual && ends[c] == ends[c + 1]; if (allDecreaseIsEqual) r1 = ends[0]; } @@ -940,7 +940,7 @@ void TXsheet::resetStepCells(int r0, int c0, int r1, int c1) { //----------------------------------------------------------------------------- /*! Roll first cells of rect r0,c0,r1,c1. Move cells contained in first row to * last row. -*/ + */ void TXsheet::rollupCells(int r0, int c0, int r1, int c1) { int nc = c1 - c0 + 1; int size = 1 * nc; @@ -963,7 +963,7 @@ void TXsheet::rollupCells(int r0, int c0, int r1, int c1) { //----------------------------------------------------------------------------- /*! Roll last cells of rect r0,c0,r1,c1. Move cells contained in last row to * first row. -*/ + */ void TXsheet::rolldownCells(int r0, int c0, int r1, int c1) { int nc = c1 - c0 + 1; int size = 1 * nc; @@ -985,7 +985,7 @@ void TXsheet::rolldownCells(int r0, int c0, int r1, int c1) { //----------------------------------------------------------------------------- /*! Stretch cells contained in rect r0,c0,r1,c1, from r1-r0+1 to nr. - If nr>r1-r0+1 add cells, overwise remove cells. */ + If nr>r1-r0+1 add cells, otherwise remove cells. */ void TXsheet::timeStretch(int r0, int c0, int r1, int c1, int nr) { int oldNr = r1 - r0 + 1; if (nr > oldNr) /* ingrandisce */ @@ -1417,8 +1417,9 @@ void searchAudioColumn(TXsheet *xsh, std::vector &sounds, TXshColumn *column = xsh->getColumn(i); if (column) { TXshSoundColumn *soundCol = column->getSoundColumn(); - if (soundCol && ((isPreview && soundCol->isCamstandVisible()) || - (!isPreview && soundCol->isPreviewVisible()))) { + if (soundCol && !soundCol->isEmpty() && + ((isPreview && soundCol->isCamstandVisible()) || + (!isPreview && soundCol->isPreviewVisible()))) { sounds.push_back(soundCol); continue; } diff --git a/toonz/sources/toonzlib/txsheetexpr.cpp b/toonz/sources/toonzlib/txsheetexpr.cpp index 66a0f27..8dd475c 100644 --- a/toonz/sources/toonzlib/txsheetexpr.cpp +++ b/toonz/sources/toonzlib/txsheetexpr.cpp @@ -82,7 +82,7 @@ public: TMeasure *measure = m_param->getMeasure(); if (measure) { const TUnit *unit = measure->getCurrentUnit(); - if (unit) value = unit->convertTo(value); + if (unit) value = unit->convertTo(value); } return value; } @@ -256,9 +256,8 @@ public: void getAcceptableKeywords( std::vector &keywords) const override { - const std::string ks[] = {"table", "tab", "col", "cam", - "camera", "peg", "pegbar"}; - for (int i = 0; i < tArrayCount(ks); i++) keywords.push_back(ks[i]); + keywords.insert(keywords.end(), + {"table", "tab", "col", "cam", "camera", "peg", "pegbar"}); } void createNode(Calculator *calc, std::vector &stack, @@ -543,9 +542,8 @@ public: const QString &vertexName = QString::fromStdString(tokens[VERTEX_NAME].getText()); if (SkVD *skvd = skdp->vertexDeformation(vertexName)) { - const Component *componentsEnd = - m_components + - sizeof(m_components) / sizeof(Component), + const Component *componentsEnd = m_components + sizeof(m_components) / + sizeof(Component), *component = std::find(m_components, componentsEnd, tokens[COMPONENT].getText()); diff --git a/toonz/sources/toonzlib/txshlevelcolumn.cpp b/toonz/sources/toonzlib/txshlevelcolumn.cpp index 0e1efd8..1bc1aae 100644 --- a/toonz/sources/toonzlib/txshlevelcolumn.cpp +++ b/toonz/sources/toonzlib/txshlevelcolumn.cpp @@ -238,7 +238,7 @@ bool TXshLevelColumn::setNumbers(int row, int rowCount, // Find a level to input. // If the first target cell is empty, search the upper cells, and lower cells - // and use a level of firsty-found ocupied neighbor cell. + // and use a level of firsty-found occupied neighbor cell. TXshLevelP currentLevel; int tmpIndex = std::min(row - m_first, (int)m_cells.size() - 1); // search upper cells diff --git a/toonz/sources/toonzlib/txshpalettelevel.cpp b/toonz/sources/toonzlib/txshpalettelevel.cpp index e24db02..13da70f 100644 --- a/toonz/sources/toonzlib/txshpalettelevel.cpp +++ b/toonz/sources/toonzlib/txshpalettelevel.cpp @@ -101,6 +101,11 @@ void TXshPaletteLevel::load() { void TXshPaletteLevel::save() { TFilePath path = getScene()->decodeFilePath(m_path); if (TSystem::doesExistFileOrLevel(path) && m_palette) { + TFileStatus fs(path); + if (!fs.isWritable()) { + throw TSystemException( + path, "The palette cannot be saved: it is a read only palette."); + } TOStream os(path); os << m_palette; } diff --git a/toonz/sources/toonzlib/txshsimplelevel.cpp b/toonz/sources/toonzlib/txshsimplelevel.cpp index b22ae35..6876476 100644 --- a/toonz/sources/toonzlib/txshsimplelevel.cpp +++ b/toonz/sources/toonzlib/txshsimplelevel.cpp @@ -119,6 +119,7 @@ bool isAreadOnlyLevel(const TFilePath &path) { if (path.getDots() == "." || (path.getDots() == ".." && (path.getType() == "tlv" || path.getType() == "tpl"))) { + if (path.getType() == "psd") return true; if (!TSystem::doesExistFileOrLevel(path)) return false; TFileStatus fs(path); return !fs.isWritable(); @@ -177,7 +178,7 @@ void getIndexesRangefromFids(TXshSimpleLevel *level, } // namespace //****************************************************************************************** -// TXshSimpleLevel impementation +// TXshSimpleLevel implementation //****************************************************************************************** bool TXshSimpleLevel::m_rasterizePli = false; @@ -1138,7 +1139,7 @@ void TXshSimpleLevel::load() { if (info && info->m_samplePerPixel >= 5) { QString msg = QString( "Failed to open %1.\nSamples per pixel is more than " - "4. It may containt more than one alpha channel.") + "4. It may contain more than one alpha channel.") .arg(QString::fromStdWString(m_path.getWideString())); QMessageBox::warning(0, "Image format not supported", msg); return; @@ -1374,8 +1375,38 @@ void TXshSimpleLevel::save() { //----------------------------------------------------------------------------- static void saveBackup(TFilePath path) { + // The additional .bak extension keeps it from being detected as a sequence. + // If the original path is a sequence, find the individual files and back it + // up individually + if (path.isLevelName()) { + TFilePathSet files = + TSystem::readDirectory(path.getParentDir(), false, true); + for (TFilePathSet::iterator file = files.begin(); file != files.end(); + file++) { + if (file->getLevelName() == path.getLevelName()) saveBackup(*file); + } + return; + } + + int totalBackups = Preferences::instance()->getBackupKeepCount(); + totalBackups -= 1; + TFilePath backup = path.withType(path.getType() + ".bak"); + TFilePath prevBackup = + path.withType(path.getType() + ".bak" + std::to_string(totalBackups)); + while (--totalBackups >= 0) { + std::string bakExt = + ".bak" + (totalBackups > 0 ? std::to_string(totalBackups) : ""); + backup = path.withType(path.getType() + bakExt); + if (TSystem::doesExistFileOrLevel(backup)) { + try { + TSystem::copyFileOrLevel_throw(prevBackup, backup); + } catch (...) { + } + } + prevBackup = backup; + } + try { - TFilePath backup = path.withName(path.getName() + "_backup"); if (TSystem::doesExistFileOrLevel(backup)) TSystem::removeFileOrLevel_throw(backup); TSystem::copyFileOrLevel_throw(backup, path); @@ -1397,13 +1428,13 @@ void TXshSimpleLevel::save(const TFilePath &fp, const TFilePath &oldFp, "The level cannot be saved: failed to access the target folder."); // backup - if (Preferences::instance()->isLevelsBackupEnabled() && - dOldPath == dDstPath && TSystem::doesExistFileOrLevel(dDstPath)) + if (Preferences::instance()->isBackupEnabled() && dOldPath == dDstPath && + TSystem::doesExistFileOrLevel(dDstPath)) saveBackup(dDstPath); if (isAreadOnlyLevel(dDstPath)) { if (m_editableRange.empty() && - !m_temporaryHookMerged) // file interaly locked + !m_temporaryHookMerged) // file internally locked throw TSystemException( dDstPath, "The level cannot be saved: it is a read only level."); else if (getType() != OVL_XSHLEVEL) { @@ -1430,8 +1461,11 @@ void TXshSimpleLevel::save(const TFilePath &fp, const TFilePath &oldFp, sl->setPalette(getPalette()); sl->setPath(getScene()->codeFilePath(app)); sl->setType(getType()); + sl->setDirtyFlag(getDirtyFlag()); + sl->addRef(); // Needed so levelUpdater doesn't destroy it right away + // when its done writing - std::set::iterator eft, efEnd; + std::set::iterator eft, efEnd = m_editableRange.end(); for (eft = m_editableRange.begin(); eft != efEnd; ++eft) { const TFrameId &fid = *eft; sl->setFrame(fid, getFrame(fid, false)); @@ -1449,6 +1483,8 @@ void TXshSimpleLevel::save(const TFilePath &fp, const TFilePath &oldFp, hookSet->eraseFrame(fid); } + sl->setRenumberTable(); + // Copy mesh level sl->save(app); @@ -1638,7 +1674,7 @@ void TXshSimpleLevel::saveSimpleLevel(const TFilePath &decodedFp, lw = TLevelWriterP(); // TLevelWriterP's destructor saves the palette } else if (isPaletteModified && overwritePalette) { TFilePath palettePath = decodedFp.withNoFrame().withType("tpl"); - if (Preferences::instance()->isLevelsBackupEnabled() && + if (Preferences::instance()->isBackupEnabled() && TSystem::doesExistFileOrLevel(palettePath)) saveBackup(palettePath); TOStream os(palettePath); @@ -2199,9 +2235,8 @@ TFilePath TXshSimpleLevel::getExistingHookFile( } assert(h >= 0); - return (h < 0) ? TFilePath() - : decodedLevelPath.getParentDir() + - TFilePath(hookFiles[h].toStdWString()); + return (h < 0) ? TFilePath() : decodedLevelPath.getParentDir() + + TFilePath(hookFiles[h].toStdWString()); } //----------------------------------------------------------------------------- @@ -2248,3 +2283,24 @@ TRectD TXshSimpleLevel::getBBox(const TFrameId &fid) const { // Get the frame's dpi and traduce the bbox to inch coordinates return TScale(1.0 / dpiX, 1.0 / dpiY) * bbox; } + +bool TXshSimpleLevel::isFrameReadOnly(TFrameId fid) { + // For Raster and mesh files, check to see if files are marked as read-only at + // the OS level + if (getType() == OVL_XSHLEVEL || getType() == TZI_XSHLEVEL || + getType() == MESH_XSHLEVEL) { + TFilePath fullPath = getScene()->decodeFilePath(m_path); + TFilePath path = + fullPath.getDots() == ".." ? fullPath.withFrame(fid) : fullPath; + if (!TSystem::doesExistFileOrLevel(path)) return false; + TFileStatus fs(path); + return !fs.isWritable(); + } + + // If Level is marked read only, check for editable frames + if (m_isReadOnly && !m_editableRange.empty() && + m_editableRange.count(fid) != 0) + return false; + + return m_isReadOnly; +} diff --git a/toonz/sources/toonzlib/txshsoundtextcolumn.cpp b/toonz/sources/toonzlib/txshsoundtextcolumn.cpp index b10f583..163fec3 100644 --- a/toonz/sources/toonzlib/txshsoundtextcolumn.cpp +++ b/toonz/sources/toonzlib/txshsoundtextcolumn.cpp @@ -46,7 +46,7 @@ void TXshSoundTextColumn::createSoundTextLevel(int row, //----------------------------------------------------------------------------- bool TXshSoundTextColumn::canSetCell(const TXshCell &cell) const { - return true; + return cell.isEmpty() || cell.m_level->getSoundTextLevel() != 0; } //----------------------------------------------------------------------------- diff --git a/toonz/sources/toonzqt/CMakeLists.txt b/toonz/sources/toonzqt/CMakeLists.txt index 5027e86..c86d517 100644 --- a/toonz/sources/toonzqt/CMakeLists.txt +++ b/toonz/sources/toonzqt/CMakeLists.txt @@ -1,19 +1,23 @@ set(MOC_HEADERS + palettesscanpopup.h + pluginhost.h + stageobjectselection.h + tdockwindows.h ../include/toonzqt/addfxcontextmenu.h + ../include/toonzqt/camerasettingswidget.h ../include/toonzqt/checkbox.h + ../include/toonzqt/cleanupcamerasettingswidget.h ../include/toonzqt/colorfield.h - docklayout.h + ../include/toonzqt/combohistogram.h ../include/toonzqt/doublefield.h ../include/toonzqt/doublepairfield.h ../include/toonzqt/dvdialog.h - ../include/toonzqt/dvmimedata.h ../include/toonzqt/dvscrollwidget.h ../include/toonzqt/dvtextedit.h ../include/toonzqt/expressionfield.h ../include/toonzqt/filefield.h ../include/toonzqt/flipconsole.h ../include/toonzqt/framenavigator.h - ../include/toonzqt/freelayout.h ../include/toonzqt/functionkeyframenavigator.h ../include/toonzqt/functionpanel.h ../include/toonzqt/functionsegmentviewer.h @@ -22,13 +26,11 @@ set(MOC_HEADERS ../include/toonzqt/functiontoolbar.h ../include/toonzqt/functiontreeviewer.h ../include/toonzqt/functionviewer.h - fxdata.h ../include/toonzqt/fxhistogramrender.h ../include/toonzqt/fxschematicnode.h ../include/toonzqt/fxschematicscene.h ../include/toonzqt/fxselection.h ../include/toonzqt/fxsettings.h - ../include/toonzqt/fxtypes.h ../include/toonzqt/gutil.h ../include/toonzqt/histogram.h ../include/toonzqt/icongenerator.h @@ -38,68 +40,66 @@ set(MOC_HEADERS ../include/toonzqt/intpairfield.h ../include/toonzqt/keyframenavigator.h ../include/toonzqt/lineedit.h + ../include/toonzqt/marksbar.h ../include/toonzqt/menubarcommand.h - ../include/toonzqt/multipleselection.h - palettedata.h - palettesscanpopup.h ../include/toonzqt/paletteviewer.h ../include/toonzqt/paletteviewergui.h ../include/toonzqt/paramfield.h ../include/toonzqt/planeviewer.h ../include/toonzqt/popupbutton.h - ../include/toonzqt/rasterimagedata.h - ../include/toonzqt/schematicnode.h ../include/toonzqt/schematicgroupeditor.h + ../include/toonzqt/schematicnode.h ../include/toonzqt/schematicviewer.h + ../include/toonzqt/screenboard.h ../include/toonzqt/scriptconsole.h - ../include/toonzqt/selectioncommandids.h - ../include/toonzqt/selection.h - stageobjectselection.h - ../include/toonzqt/stageobjectsdata.h ../include/toonzqt/spectrumfield.h ../include/toonzqt/spreadsheetviewer.h ../include/toonzqt/stageschematicnode.h ../include/toonzqt/stageschematicscene.h - ../include/toonzqt/strokesdata.h ../include/toonzqt/studiopaletteviewer.h - styledata.h ../include/toonzqt/styleeditor.h ../include/toonzqt/styleindexlineedit.h - ../include/toonzqt/styleselection.h + ../include/toonzqt/stylenameeditor.h ../include/toonzqt/swatchviewer.h ../include/toonzqt/tabbar.h - tdockwindows.h + ../include/toonzqt/tmessageviewer.h ../include/toonzqt/tonecurvefield.h ../include/toonzqt/treemodel.h ../include/toonzqt/tselectionhandle.h ../include/toonzqt/updatechecker.h ../include/toonzqt/validatedchoicedialog.h - ../include/toonzqt/viewcommandids.h - ../include/toonzqt/trepetitionguard.h - ../include/toonzqt/camerasettingswidget.h - ../include/toonzqt/cleanupcamerasettingswidget.h - ../include/toonzqt/pickrgbutils.h - ../include/toonzqt/screenboard.h - ../include/toonzqt/marksbar.h - ../include/toonzqt/tmessageviewer.h - ../include/toonzqt/stylenameeditor.h - ../include/historytypes.h - ../include/toonzqt/flipconsoleowner.h - ../include/toonzqt/combohistogram.h - ../include/toonzqt/fxiconmanager.h - ../include/toonzqt/glwidget_for_highdpi.h - ../include/toonzqt/lutcalibrator.h - pluginhost.h ) set(HEADERS ${MOC_HEADERS} + docklayout.h functionpaneltools.h + fxdata.h + palettedata.h + plugin_fxnode_interface.h + plugin_port_interface.h + plugin_tile_interface.h + styledata.h toonz_hostif.h toonz_plugin.h - plugin_tile_interface.h - plugin_port_interface.h - plugin_fxnode_interface.h + ../include/historytypes.h + ../include/toonzqt/dvmimedata.h + ../include/toonzqt/flipconsoleowner.h + ../include/toonzqt/freelayout.h + ../include/toonzqt/fxiconmanager.h + ../include/toonzqt/fxtypes.h + ../include/toonzqt/glwidget_for_highdpi.h + ../include/toonzqt/lutcalibrator.h + ../include/toonzqt/multipleselection.h + ../include/toonzqt/pickrgbutils.h + ../include/toonzqt/rasterimagedata.h + ../include/toonzqt/selection.h + ../include/toonzqt/selectioncommandids.h + ../include/toonzqt/stageobjectsdata.h + ../include/toonzqt/strokesdata.h + ../include/toonzqt/styleselection.h + ../include/toonzqt/trepetitionguard.h + ../include/toonzqt/viewcommandids.h ) set(SOURCES diff --git a/toonz/sources/toonzqt/combohistogram.cpp b/toonz/sources/toonzqt/combohistogram.cpp index 7e9fa13..11400a0 100644 --- a/toonz/sources/toonzqt/combohistogram.cpp +++ b/toonz/sources/toonzqt/combohistogram.cpp @@ -40,7 +40,7 @@ void ChannelHistoGraph::setValues() { // normalize with the maximum value int maxValue = 1; for (i = 0; i < COMBOHIST_RESOLUTION_W; i++) { - int count = m_channelValuePtr[i]; + int count = m_channelValuePtr[i]; if (maxValue < count) maxValue = count; } @@ -284,7 +284,7 @@ ChannelHisto::ChannelHisto(int channelIndex, int *channelValue, //----------------------------------------------------------------------------- /*! update the picked color's channel value -*/ + */ void ChannelHisto::showCurrentChannelValue(int val) { m_histogramGraph->showCurrentChannelValue(val); } @@ -321,7 +321,6 @@ void ComboHistoRGBLabel::paintEvent(QPaintEvent *pe) { p.drawRect(bgRect); return; } - if (LutManager::instance()->isValid()) { QColor convertedColor(m_color); LutManager::instance()->convert(convertedColor); @@ -339,10 +338,11 @@ void ComboHistoRGBLabel::paintEvent(QPaintEvent *pe) { p.setPen(Qt::black); p.setBrush(Qt::NoBrush); - p.drawText(rect(), Qt::AlignCenter, tr("R:%1 G:%2 B:%3") - .arg(m_color.red()) - .arg(m_color.green()) - .arg(m_color.blue())); + p.drawText(rect(), Qt::AlignCenter, + tr("R:%1 G:%2 B:%3") + .arg(m_color.red()) + .arg(m_color.green()) + .arg(m_color.blue())); } //============================================================================= @@ -351,9 +351,9 @@ void ComboHistoRGBLabel::paintEvent(QPaintEvent *pe) { ComboHistogram::ComboHistogram(QWidget *parent) : QWidget(parent), m_raster(0), m_palette(0) { - for (int chan = 0; chan < 4; chan++) + for (int chan = 0; chan < 4; chan++) m_histograms[chan] = new ChannelHisto(chan, &m_channelValue[chan][0], this); - m_histograms[4] = new ChannelHisto(4, &m_channelValue[0][0], this); + m_histograms[4] = new ChannelHisto(4, &m_channelValue[0][0], this); // RGB label m_rgbLabel = new ComboHistoRGBLabel(QColor(128, 128, 128), this); @@ -416,7 +416,7 @@ ComboHistogram::~ComboHistogram() { void ComboHistogram::setRaster(const TRasterP &raster, const TPaletteP &palette) { if (palette.getPointer()) m_palette = palette; - m_raster = raster; + m_raster = raster; computeChannelsValue(); for (int i = 0; i < 5; i++) m_histograms[i]->refleshValue(); diff --git a/toonz/sources/toonzqt/docklayout.cpp b/toonz/sources/toonzqt/docklayout.cpp index ffb0b69..b5d7c2a 100644 --- a/toonz/sources/toonzqt/docklayout.cpp +++ b/toonz/sources/toonzqt/docklayout.cpp @@ -423,10 +423,26 @@ void DockLayout::applyTransform(const QTransform &transform) { //------------------------------------------------------ void DockLayout::redistribute() { + std::vector widgets; if (!m_regions.empty()) { // Recompute extremal region sizes // NOTA: Sarebbe da fare solo se un certo flag lo richiede; altrimenti tipo // per resize events e' inutile... + + // let's force the width of the film strip not to change + + for (int i = 0; i < m_items.size(); i++) { + if (m_items.at(i)->widget() != 0) { + QWidget *widget = m_items.at(i)->widget(); + if (widget) { + std::string name = widget->objectName().toStdString(); + if (widget->objectName() == "FilmStrip") { + widgets.push_back(widget); + widget->setFixedWidth(widget->width()); + } + } + } + } m_regions.front()->calculateExtremalSizes(); int parentWidth = contentsRect().width(); @@ -447,6 +463,10 @@ void DockLayout::redistribute() { // Finally, apply Region geometries found applyGeometry(); + for (QWidget *widget : widgets) { + widget->setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); + widget->setMinimumSize(0, 0); + } } //====================================================================== diff --git a/toonz/sources/toonzqt/dvdialog.cpp b/toonz/sources/toonzqt/dvdialog.cpp index caead58..aab5a1b 100644 --- a/toonz/sources/toonzqt/dvdialog.cpp +++ b/toonz/sources/toonzqt/dvdialog.cpp @@ -33,7 +33,7 @@ using namespace DVGui; -QString DialogTitle = QObject::tr("OpenToonz 1.3"); +QString DialogTitle = "OpenToonz 1.3"; //============================================================================= namespace { @@ -210,7 +210,10 @@ clearButtonBar(). You can also setButtonBarSpacing() functions. */ //----------------------------------------------------------------------------- -QSettings *Dialog::m_settings = 0; + +namespace { +QString settingsPath; +}; Dialog::Dialog(QWidget *parent, bool hasButton, bool hasFixedSize, const QString &name) @@ -274,17 +277,17 @@ Dialog::Dialog(QWidget *parent, bool hasButton, bool hasFixedSize, setWindowFlags(Qt::Tool); #endif - if (!m_settings) { - TFilePath layoutDir = ToonzFolder::getMyModuleDir(); - TFilePath savePath = layoutDir + TFilePath("popups.ini"); - m_settings = - new QSettings(QString::fromStdWString(savePath.getWideString()), - QSettings::IniFormat); + if (settingsPath.isEmpty()) { + TFilePath savePath = + ToonzFolder::getMyModuleDir() + TFilePath("popups.ini"); + settingsPath = QString::fromStdWString(savePath.getWideString()); } + QSettings settings(settingsPath, QSettings::IniFormat); + if (name == QString()) return; m_name = name + "DialogGeometry"; - QString geo = m_settings->value(m_name).toString(); + QString geo = settings.value(m_name).toString(); if (geo != QString()) { QStringList values = geo.split(" "); assert(values.size() == 4); @@ -312,31 +315,28 @@ Dialog::Dialog(QWidget *parent, bool hasButton, bool hasFixedSize, // on another monitor by default, but this is better than // a user thinking the program is broken because they didn't notice // the popup on another monitor - if (x > screen.right() - 50) x = screen.right() - 50; - if (x < screen.left()) x = screen.left(); + if (x > screen.right() - 50) x = screen.right() - 50; + if (x < screen.left()) x = screen.left(); if (y > screen.bottom() - 90) y = screen.bottom() - 90; - if (y < screen.top()) y = screen.top(); + if (y < screen.top()) y = screen.top(); setGeometry(x, y, values.at(2).toInt(), values.at(3).toInt()); - m_settings->setValue(m_name, - QString::number(x) + " " + QString::number(y) + " " + - QString::number(values.at(2).toInt()) + " " + - QString::number(values.at(3).toInt())); + settings.setValue(m_name, QString::number(x) + " " + QString::number(y) + + " " + QString::number(values.at(2).toInt()) + + " " + QString::number(values.at(3).toInt())); } } //----------------------------------------------------------------------------- -Dialog::~Dialog() {} -//----------------------------------------------------------------------------- - -void Dialog::moveEvent(QMoveEvent *e) { +Dialog::~Dialog() { if (m_name == QString()) return; QRect r = geometry(); - m_settings->setValue(m_name, QString::number(r.left()) + " " + - QString::number(r.top()) + " " + - QString::number(r.width()) + " " + - QString::number(r.height())); + QSettings settings(settingsPath, QSettings::IniFormat); + settings.setValue(m_name, QString::number(r.left()) + " " + + QString::number(r.top()) + " " + + QString::number(r.width()) + " " + + QString::number(r.height())); } //--------------------------------------------------------------------------------- @@ -344,18 +344,8 @@ void Dialog::moveEvent(QMoveEvent *e) { void Dialog::resizeEvent(QResizeEvent *e) { if (Preferences::instance()->getCurrentLanguage() != "English") { QSize t = this->size(); - QLabel *s; - foreach (s, m_labelList) - s->setFixedWidth(t.width() * .35); + for (QLabel *s : m_labelList) s->setFixedWidth(t.width() * .35); } - - if (m_name == QString()) return; - - QRect r = geometry(); - m_settings->setValue(m_name, QString::number(r.left()) + " " + - QString::number(r.top()) + " " + - QString::number(r.width()) + " " + - QString::number(r.height())); } //----------------------------------------------------------------------------- @@ -381,23 +371,24 @@ void Dialog::hideEvent(QHideEvent *event) { } QRect screen = QApplication::desktop()->availableGeometry(currentScreen); - if (x > screen.right() - 50) x = screen.right() - 50; - if (x < screen.left()) x = screen.left(); + if (x > screen.right() - 50) x = screen.right() - 50; + if (x < screen.left()) x = screen.left(); if (y > screen.bottom() - 90) y = screen.bottom() - 90; - if (y < screen.top()) y = screen.top(); + if (y < screen.top()) y = screen.top(); move(QPoint(x, y)); resize(size()); QRect r = geometry(); - m_settings->setValue(m_name, QString::number(r.left()) + " " + - QString::number(r.top()) + " " + - QString::number(r.width()) + " " + - QString::number(r.height())); + QSettings settings(settingsPath, QSettings::IniFormat); + settings.setValue(m_name, QString::number(r.left()) + " " + + QString::number(r.top()) + " " + + QString::number(r.width()) + " " + + QString::number(r.height())); emit dialogClosed(); } //----------------------------------------------------------------------------- /*! Create the new layouts (2 Vertical) for main part of dialog. -*/ + */ void Dialog::beginVLayout() { m_isMainVLayout = true; @@ -436,7 +427,7 @@ void Dialog::endVLayout() { //----------------------------------------------------------------------------- /*! Create a new Horizontal Layout for main part of dialog. -*/ + */ void Dialog::beginHLayout() { m_isMainHLayout = true; m_mainHLayout = new QHBoxLayout; @@ -446,7 +437,7 @@ void Dialog::beginHLayout() { //----------------------------------------------------------------------------- /*! Add to main part of dialog the Horizontal Layout and set it to 0. -*/ + */ void Dialog::endHLayout() { m_isMainHLayout = false; if (!m_mainHLayout) return; @@ -648,7 +639,7 @@ void Dialog::addLayouts(QLayout *firstL, QLayout *secondL) { //----------------------------------------------------------------------------- /*! Add spacing \b spacing to main part of dialog. -*/ + */ void Dialog::addSpacing(int spacing) { if (m_isMainVLayout) { assert(m_leftVLayout && m_rightVLayout); @@ -687,14 +678,14 @@ void Dialog::addSeparator(QString name) { //----------------------------------------------------------------------------- /*! Set the alignement of the main layout -*/ + */ void Dialog::setAlignment(Qt::Alignment alignment) { m_mainFrame->layout()->setAlignment(alignment); } //----------------------------------------------------------------------------- /*! Set to \b spacing spacing of main part of dialog. -*/ + */ void Dialog::setTopSpacing(int spacing) { m_layoutSpacing = spacing; m_topLayout->setSpacing(spacing); @@ -719,26 +710,26 @@ int Dialog::getLayoutInsertedSpacing() { return m_layoutSpacing; } //----------------------------------------------------------------------------- /*! Set to \b margin margin of main part of dialog. -*/ + */ void Dialog::setTopMargin(int margin) { m_topLayout->setMargin(margin); } //----------------------------------------------------------------------------- /*! Set to \b margin margin of button part of dialog. -*/ + */ void Dialog::setButtonBarMargin(int margin) { m_buttonLayout->setMargin(margin); } //----------------------------------------------------------------------------- /*! Set to \b spacing spacing of button part of dialog. -*/ + */ void Dialog::setButtonBarSpacing(int spacing) { m_buttonLayout->setSpacing(spacing); } //----------------------------------------------------------------------------- /*! Add a widget to the button part of dialog. -*/ + */ void Dialog::addButtonBarWidget(QWidget *widget) { widget->setMinimumSize(65, 25); assert(m_hasButton); @@ -750,7 +741,7 @@ void Dialog::addButtonBarWidget(QWidget *widget) { //----------------------------------------------------------------------------- /*! Remove all widget from the button part of dialog. -*/ + */ void Dialog::clearButtonBar() { for (int i = 0; i < (int)m_buttonBarWidgets.size(); i++) { m_buttonLayout->removeWidget(m_buttonBarWidgets[i]); @@ -760,7 +751,7 @@ void Dialog::clearButtonBar() { //----------------------------------------------------------------------------- /*! Add two widget to the button part of dialog. -*/ + */ void Dialog::addButtonBarWidget(QWidget *first, QWidget *second) { first->setMinimumSize(65, 25); second->setMinimumSize(65, 25); @@ -773,7 +764,7 @@ void Dialog::addButtonBarWidget(QWidget *first, QWidget *second) { //----------------------------------------------------------------------------- /*! Add three widget to the button part of dialog. -*/ + */ void Dialog::addButtonBarWidget(QWidget *first, QWidget *second, QWidget *third) { first->setMinimumSize(65, 25); @@ -789,7 +780,7 @@ void Dialog::addButtonBarWidget(QWidget *first, QWidget *second, //----------------------------------------------------------------------------- /*! Add four widget to the button part of dialog. -*/ + */ void Dialog::addButtonBarWidget(QWidget *first, QWidget *second, QWidget *third, QWidget *fourth) { first->setMinimumSize(65, 25); @@ -1349,15 +1340,15 @@ QString DVGui::getText(const QString &title, const QString &labelText, LineEdit *nameFld = new LineEdit(text, &dialog); layout->addWidget(nameFld); - QPushButton *okBtn = new QPushButton(dialog.tr("OK"), &dialog); + QPushButton *okBtn = new QPushButton(QObject::tr("OK"), &dialog); okBtn->setDefault(true); - QPushButton *cancelBtn = new QPushButton(dialog.tr("Cancel"), &dialog); + QPushButton *cancelBtn = new QPushButton(QObject::tr("Cancel"), &dialog); QObject::connect(okBtn, SIGNAL(clicked()), &dialog, SLOT(accept())); QObject::connect(cancelBtn, SIGNAL(clicked()), &dialog, SLOT(reject())); dialog.addButtonBarWidget(okBtn, cancelBtn); - int ret = dialog.exec(); + int ret = dialog.exec(); if (ok) *ok = (ret == QDialog::Accepted); return nameFld->text(); @@ -1378,7 +1369,7 @@ bool isStyleIdInPalette(int styleId, const TPalette *palette) { } return false; } -} +} // namespace //----------------------------------------------------------------------------- diff --git a/toonz/sources/toonzqt/dvtextedit.cpp b/toonz/sources/toonzqt/dvtextedit.cpp index 14d8c0e..60173f7 100644 --- a/toonz/sources/toonzqt/dvtextedit.cpp +++ b/toonz/sources/toonzqt/dvtextedit.cpp @@ -38,10 +38,10 @@ qreal distanceBetweenPointandRect(const QRect &rect, const QPoint &point) { sqrt(pow((double)(point.x() - rect.bottomRight().x()), 2) + pow((double)(point.y() - rect.bottomRight().y()), 2)); - qreal topMax = qMin(topLeftDistance, topRightDistance); - qreal bottomMax = qMin(bottomLeftDistance, bottomRightDistance); + qreal topMax = std::min(topLeftDistance, topRightDistance); + qreal bottomMax = std::min(bottomLeftDistance, bottomRightDistance); - return qMin(topMax, bottomMax); + return std::min(topMax, bottomMax); } } @@ -208,7 +208,7 @@ void DvTextEdit::createMiniToolBar() { m_sizeComboBox->setMinimumWidth(44); QFontDatabase db; - foreach (int size, db.standardSizes()) + for (int size : db.standardSizes()) m_sizeComboBox->addItem(QString::number(size)); connect(m_sizeComboBox, SIGNAL(activated(const QString &)), this, diff --git a/toonz/sources/toonzqt/expressionfield.cpp b/toonz/sources/toonzqt/expressionfield.cpp index 1c47341..88cba01 100644 --- a/toonz/sources/toonzqt/expressionfield.cpp +++ b/toonz/sources/toonzqt/expressionfield.cpp @@ -351,7 +351,7 @@ bool ExpressionField::updateCompleterPopup() { int w = m_completerPopup->sizeHintForColumn(0) + m_completerPopup->verticalScrollBar()->sizeHint().width() + 5; int h = - (m_completerPopup->sizeHintForRow(0) * qMin(7, model->rowCount()) + 3) + + (m_completerPopup->sizeHintForRow(0) * std::min(7, model->rowCount()) + 3) + 3; QSize size(w, h); diff --git a/toonz/sources/toonzqt/flipconsole.cpp b/toonz/sources/toonzqt/flipconsole.cpp index fbfcbb1..7e1c25e 100644 --- a/toonz/sources/toonzqt/flipconsole.cpp +++ b/toonz/sources/toonzqt/flipconsole.cpp @@ -73,7 +73,7 @@ QColor PBBaseColor = QColor(235, 235, 235); QColor PBNotStartedColor = QColor(210, 40, 40); QColor PBStartedColor = QColor(220, 160, 160); QColor PBFinishedColor = QColor(235, 235, 235); -} +} // namespace //----------------------------------------------------------------------------- @@ -172,11 +172,11 @@ void PlaybackExecutor::run() { TUINT32 loadedInstant, nextSampleInstant = timeResolution; TUINT32 sampleTotalLoadingTime = 0; - TUINT32 lastFrameCounts[4] = {0, 0, 0, + TUINT32 lastFrameCounts[4] = {0, 0, 0, 0}; // Keep the last 4 'played frames' counts. TUINT32 lastSampleInstants[4] = {0, 0, 0, 0}; // Same for the last sampling instants - TUINT32 lastLoadingTimes[4] = {0, 0, 0, + TUINT32 lastLoadingTimes[4] = {0, 0, 0, 0}; // Same for total sample loading times double targetFrameTime = @@ -320,15 +320,17 @@ void FlipSlider::paintEvent(QPaintEvent *ev) { p.drawImage(QRect(0, 0, PBColorMarginLeft, height()), PBOverlay, QRect(0, 0, PBColorMarginLeft, PBOverlay.height())); - p.drawImage(QRect(PBColorMarginLeft, 0, - sliderRect.width() - PBColorMarginLeft - PBColorMarginRight, - height()), - PBOverlay, QRect(PBColorMarginLeft, 0, overlayInnerWidth, - PBOverlay.height())); + p.drawImage( + QRect(PBColorMarginLeft, 0, + sliderRect.width() - PBColorMarginLeft - PBColorMarginRight, + height()), + PBOverlay, + QRect(PBColorMarginLeft, 0, overlayInnerWidth, PBOverlay.height())); p.drawImage( QRect(width() - PBColorMarginRight, 0, PBColorMarginRight, height()), - PBOverlay, QRect(PBOverlay.width() - PBColorMarginRight, 0, - PBColorMarginRight, PBOverlay.height())); + PBOverlay, + QRect(PBOverlay.width() - PBColorMarginRight, 0, PBColorMarginRight, + PBOverlay.height())); // Draw the position marker currPos = sliderPositionFromValue(minimum(), maxValuePlusStep, value(), @@ -481,7 +483,7 @@ FlipConsole::FlipConsole(QVBoxLayout *mainLayout, UINT gadgetsMask, , m_fpsLabel(0) , m_consoleOwner(consoleOwner) , m_enableBlankFrameButton(0) { - QString s = QSettings().value(m_customizeId).toString(); + QString s = QSettings().value(m_customizeId).toString(); if (s != "") m_customizeMask = s.toUInt(); if (m_gadgetsMask == 0) return; @@ -672,7 +674,6 @@ protected: //----------------------------------------------------------------------------- void FlipConsole::enableButton(UINT button, bool enable, bool doShowHide) { - if (!m_playToolBar) return; QList list = m_playToolBar->actions(); @@ -756,9 +757,8 @@ bool FlipConsole::drawBlanks(int from, int to) { if (m_blanksToDraw > 1 || (m_blanksToDraw == 0 && ((m_reverse && m_currentFrame - m_step < from) || - (!m_reverse && - m_currentFrame + m_step > - to)))) // we are on the last frame of the loop + (!m_reverse && m_currentFrame + m_step > + to)))) // we are on the last frame of the loop { m_blanksToDraw = (m_blanksToDraw == 0 ? m_blanksCount : m_blanksToDraw - 1); m_settings.m_blankColor = m_blankColor; @@ -861,7 +861,7 @@ void FlipConsole::setCurrentFPS(int val) { if (m_fps == val) return; if (val == 0) val = 1; - m_fps = val; + m_fps = val; m_fpsField->setValue(m_fps); if (m_playbackExecutor.isRunning() || m_isLinkedPlaying) @@ -1278,7 +1278,7 @@ void FlipConsole::enableBlanks(bool state) { //----------------------------------------------------------------------------- /*! call consoleOwner->onDrawFrame() intead of emitting drawFrame signal -*/ + */ void FlipConsole::showCurrentFrame() { m_consoleOwner->onDrawFrame(m_currentFrame, m_settings); } @@ -1364,19 +1364,17 @@ void FlipConsole::onButtonPressed(int button) { //----------------------------------------------------------------------------- void FlipConsole::pressButton(EGadget buttonId) { + FlipConsole *console = this; if (m_visibleConsoles.indexOf(this) < 0 && m_visibleConsoles.size() > 0) { - FlipConsole *console = m_visibleConsoles.at(0); + console = m_visibleConsoles.at(0); console->makeCurrent(); - if (console->m_buttons.contains(buttonId)) { - console->m_buttons[buttonId]->click(); - } else if (console->m_actions.contains(buttonId)) - console->m_actions[buttonId]->trigger(); - } else { - if (m_buttons.contains(buttonId)) { - m_buttons[buttonId]->click(); - } else if (m_actions.contains(buttonId)) - m_actions[buttonId]->trigger(); } + if (console->m_buttons.contains(buttonId) && + console->m_buttons[buttonId]->isEnabled()) + console->m_buttons[buttonId]->click(); + else if (console->m_actions.contains(buttonId) && + console->m_actions[buttonId]->isEnabled()) + console->m_actions[buttonId]->trigger(); } //----------------------------------------------------------------------------- @@ -1474,7 +1472,7 @@ void FlipConsole::doButtonPressed(UINT button) { if (m_currentFrame <= from || m_currentFrame >= to) // the first frame of the playback is drawn right now - m_currentFrame = m_reverse ? to : from; + m_currentFrame = m_reverse ? to : from; m_settings.m_recomputeIfNeeded = true; m_consoleOwner->onDrawFrame(m_currentFrame, m_settings); } @@ -1549,7 +1547,7 @@ void FlipConsole::doButtonPressed(UINT button) { if (isChecked(eGreen) || isChecked(eGGreen)) colorMask = colorMask | TRop::GChan; if (isChecked(eBlue) || isChecked(eGBlue)) - colorMask = colorMask | TRop::BChan; + colorMask = colorMask | TRop::BChan; if (isChecked(eMatte)) colorMask = colorMask | TRop::MChan; if (colorMask == (TRop::RChan | TRop::GChan | TRop::BChan) || diff --git a/toonz/sources/toonzqt/freelayout.cpp b/toonz/sources/toonzqt/freelayout.cpp index b04bb84..720b769 100644 --- a/toonz/sources/toonzqt/freelayout.cpp +++ b/toonz/sources/toonzqt/freelayout.cpp @@ -2,8 +2,7 @@ #include "toonzqt/freelayout.h" -// tcg includes -#include "tcg/tcg_deleter_types.h" +#include //************************************************************************************ // DummyLayout implementation @@ -14,7 +13,7 @@ DummyLayout::DummyLayout() { setSizeConstraint(QLayout::SetNoConstraint); } //--------------------------------------------------------------------------- DummyLayout::~DummyLayout() { - std::for_each(m_items.begin(), m_items.end(), tcg::deleter()); + std::for_each(m_items.begin(), m_items.end(), std::default_delete()); } //--------------------------------------------------------------------------- diff --git a/toonz/sources/toonzqt/functionpanel.cpp b/toonz/sources/toonzqt/functionpanel.cpp index 85535d5..bd7ed8c 100644 --- a/toonz/sources/toonzqt/functionpanel.cpp +++ b/toonz/sources/toonzqt/functionpanel.cpp @@ -1466,8 +1466,8 @@ void FunctionPanel::fitGraphToWindow(bool currentCurveOnly) { f0 = fa; f1 = fb; } else { - f0 = qMin(f0, fa); - f1 = qMax(f1, fb); + f0 = std::min(f0, fa); + f1 = std::max(f1, fb); } double v = curve->getValue(fa); if (unit) v = unit->convertTo(v); @@ -1477,8 +1477,8 @@ void FunctionPanel::fitGraphToWindow(bool currentCurveOnly) { double t = (double)j / (double)(m - 1); double v = curve->getValue((1 - t) * fa + t * fb); if (unit) v = unit->convertTo(v); - v0 = qMin(v0, v); - v1 = qMax(v1, v); + v0 = std::min(v0, v); + v1 = std::max(v1, v); } } } diff --git a/toonz/sources/toonzqt/functionsegmentviewer.cpp b/toonz/sources/toonzqt/functionsegmentviewer.cpp index ba8d158..ccf09cb 100644 --- a/toonz/sources/toonzqt/functionsegmentviewer.cpp +++ b/toonz/sources/toonzqt/functionsegmentviewer.cpp @@ -116,9 +116,9 @@ SpeedInOutSegmentPage::SpeedInOutSegmentPage(FunctionSegmentViewer *parent) bool ret = connect(m_speed0xFld, SIGNAL(editingFinished()), this, SLOT(onFirstHandleXChanged())); - ret = ret && connect(m_speed0yFld, SIGNAL(editingFinished()), this, + ret = ret && connect(m_speed0yFld, SIGNAL(editingFinished()), this, SLOT(onFirstHandleYChanged())); - ret = ret && connect(m_firstSpeedFld, SIGNAL(editingFinished()), this, + ret = ret && connect(m_firstSpeedFld, SIGNAL(editingFinished()), this, SLOT(onFirstSpeedChanged())); ret = ret && connect(m_speed1xFld, SIGNAL(editingFinished()), this, @@ -556,11 +556,11 @@ void FunctionExpressionSegmentPage::init(int segmentLength) { /*--- すでにあるカーブをExpressionに切り替えた場合 ---*/ if (kIndex >= 0) { - TDoubleKeyframe keyFrame = curve->getKeyframe(kIndex); - double value = curve->getValue(keyFrame.m_frame); - const TUnit *unit = 0; + TDoubleKeyframe keyFrame = curve->getKeyframe(kIndex); + double value = curve->getValue(keyFrame.m_frame); + const TUnit *unit = 0; if (curve->getMeasure()) unit = curve->getMeasure()->getCurrentUnit(); - if (unit) value = unit->convertTo(value); + if (unit) value = unit->convertTo(value); m_expressionFld->setExpression(QString::number(value).toStdString()); /*--- unitがある場合だけUnitを表示 ---*/ if (unit) @@ -630,7 +630,7 @@ m_unitFld->setText(""); //----------------------------------------------------------------------------- /*! return false if a circular reference is occured -*/ + */ bool FunctionExpressionSegmentPage::getGuiValues(std::string &expressionText, std::string &unitName) { expressionText = m_expressionFld->getExpression(); @@ -703,20 +703,20 @@ FileSegmentPage::FileSegmentPage(FunctionSegmentViewer *parent) void FileSegmentPage::refresh() { TDoubleKeyframe kf; TDoubleParam *curve = getCurve(); - if (curve) kf = curve->getKeyframeAt(getR0()); + if (curve) kf = curve->getKeyframeAt(getR0()); if (curve && kf.m_isKeyframe) { TFilePath path; int fieldIndex = 0; std::string unitName = ""; if (kf.m_type == TDoubleKeyframe::File) { - path = kf.m_fileParams.m_path; - fieldIndex = kf.m_fileParams.m_fieldIndex; + path = kf.m_fileParams.m_path; + fieldIndex = kf.m_fileParams.m_fieldIndex; if (fieldIndex < 0) fieldIndex = 0; - unitName = kf.m_unitName; + unitName = kf.m_unitName; if (unitName == "") { TMeasure *measure = curve->getMeasure(); if (measure) { - const TUnit *unit = measure->getCurrentUnit(); + const TUnit *unit = measure->getCurrentUnit(); if (unit) unitName = ::to_string(unit->getDefaultExtension()); } } @@ -734,7 +734,7 @@ void FileSegmentPage::init(int segmentLength) { TMeasure *measure = curve->getMeasure(); std::string unitName = ""; if (measure) { - const TUnit *unit = measure->getCurrentUnit(); + const TUnit *unit = measure->getCurrentUnit(); if (unit) unitName = ::to_string(unit->getDefaultExtension()); } m_measureFld->setText(QString::fromStdString(unitName)); @@ -756,7 +756,7 @@ void FileSegmentPage::apply() { TDoubleKeyframe::FileParams fileParams; fileParams.m_path = TFilePath(stringPath.toStdWString()); - fileParams.m_fieldIndex = qMax(0, m_fieldIndexFld->text().toInt() - 1); + fileParams.m_fieldIndex = std::max(0, m_fieldIndexFld->text().toInt() - 1); std::string unitName = m_measureFld->text().toStdString(); KeyframeSetter setter(curve, kIndex); @@ -769,7 +769,7 @@ void FileSegmentPage::getGuiValues(TDoubleKeyframe::FileParams &fileParam, QString stringPath = m_fileFld->getPath(); stringPath.replace("\\", "\\\\"); fileParam.m_path = TFilePath(stringPath.toStdWString()); - fileParam.m_fieldIndex = qMax(0, m_fieldIndexFld->text().toInt() - 1); + fileParam.m_fieldIndex = std::max(0, m_fieldIndexFld->text().toInt() - 1); unitName = m_measureFld->text().toStdString(); } @@ -929,8 +929,7 @@ FunctionSegmentViewer::FunctionSegmentViewer(QWidget *parent, m_parametersPanel = new QStackedWidget; m_parametersPanel->setObjectName("FunctionParametersPanel"); - for (int i = 0; i < tArrayCount(m_pages); i++) - m_parametersPanel->addWidget(m_pages[i]); + for (auto const &page : m_pages) m_parametersPanel->addWidget(page); m_parametersPanel->setCurrentIndex(0); // buttons @@ -1035,17 +1034,17 @@ FunctionSegmentViewer::FunctionSegmentViewer(QWidget *parent, bool ret = true; ret = ret && connect(m_typeCombo, SIGNAL(currentIndexChanged(int)), m_parametersPanel, SLOT(setCurrentIndex(int))); - ret = ret && connect(m_typeCombo, SIGNAL(activated(int)), this, + ret = ret && connect(m_typeCombo, SIGNAL(activated(int)), this, SLOT(onSegmentTypeChanged(int))); - ret = ret && connect(applyButton, SIGNAL(clicked()), this, + ret = ret && connect(applyButton, SIGNAL(clicked()), this, SLOT(onApplyButtonPressed())); - ret = ret && connect(m_prevCurveButton, SIGNAL(clicked()), this, + ret = ret && connect(m_prevCurveButton, SIGNAL(clicked()), this, SLOT(onPrevCurveButtonPressed())); - ret = ret && connect(m_nextCurveButton, SIGNAL(clicked()), this, + ret = ret && connect(m_nextCurveButton, SIGNAL(clicked()), this, SLOT(onNextCurveButtonPressed())); - ret = ret && connect(m_prevLinkButton, SIGNAL(clicked()), this, + ret = ret && connect(m_prevLinkButton, SIGNAL(clicked()), this, SLOT(onPrevLinkButtonPressed())); - ret = ret && connect(m_nextLinkButton, SIGNAL(clicked()), this, + ret = ret && connect(m_nextLinkButton, SIGNAL(clicked()), this, SLOT(onNextLinkButtonPressed())); assert(ret); @@ -1097,7 +1096,7 @@ void FunctionSegmentViewer::setSegmentByFrame(TDoubleParam *curve, int frame) { if (k1 >= 1) segmentIndex = k1 - 1; else { - int k0 = m_curve->getPrevKeyframe(frame); + int k0 = m_curve->getPrevKeyframe(frame); if (k0 >= 0) segmentIndex = k0; } } else { @@ -1149,7 +1148,7 @@ void FunctionSegmentViewer::refresh() { int pageIndex = typeToIndex(kf.m_type); m_typeCombo->setEnabled(true); m_typeCombo->setCurrentIndex(pageIndex); - if (0 <= pageIndex && pageIndex < tArrayCount(m_pages)) { + if (0 <= pageIndex && pageIndex < m_pages.size()) { m_parametersPanel->setCurrentIndex(pageIndex); m_pages[pageIndex]->refresh(); } @@ -1262,22 +1261,22 @@ Segmentが選ばれていない場合 void FunctionSegmentViewer::onCurveChanged() { int pageIndex = m_typeCombo->currentIndex(); - if (0 <= pageIndex && pageIndex < tArrayCount(m_pages)) + if (0 <= pageIndex && pageIndex < m_pages.size()) m_pages[pageIndex]->refresh(); update(); } void FunctionSegmentViewer::onStepFieldChanged(const QString &text) { if (!segmentIsValid()) return; - int step = 1; + int step = 1; if (text != "") step = text.toInt(); - if (step < 1) step = 1; + if (step < 1) step = 1; KeyframeSetter setter(m_curve, m_segmentIndex); setter.setStep(step); } int FunctionSegmentViewer::typeToIndex(int typeId) const { - for (int i = 0; i < tArrayCount(m_typeId); i++) + for (int i = 0; i < m_typeId.size(); ++i) if (m_typeId[i] == typeId) return i; return -1; } @@ -1376,8 +1375,8 @@ void FunctionSegmentViewer::onApplyButtonPressed() { /*--- from - * toに合わせてキーフレームを作成しようと試みる。すでに有る場合はスキップ * ---*/ - if (fromFrame < 0) fromFrame = 0; - if (toFrame < 0) toFrame = 0; + if (fromFrame < 0) fromFrame = 0; + if (toFrame < 0) toFrame = 0; if (fromFrame >= toFrame) fromFrame = toFrame + 1; if (!m_curve->isKeyframe(fromFrame)) @@ -1400,7 +1399,7 @@ void FunctionSegmentViewer::onApplyButtonPressed() { // for displaying the types of neighbor segments QString FunctionSegmentViewer::typeToString(int typeId) const { int i; - for (i = 0; i < tArrayCount(m_typeId); i++) + for (i = 0; i < m_typeId.size(); ++i) if (m_typeId[i] == typeId) break; switch (i) { @@ -1523,7 +1522,7 @@ bool FunctionSegmentViewer::anyWidgetHasFocus() { } /*! in order to avoid FunctionViewer to get focus while editing the expression -*/ + */ bool FunctionSegmentViewer::isExpressionPageActive() { return (m_typeCombo->currentIndex() == 5); } diff --git a/toonz/sources/toonzqt/functionselection.cpp b/toonz/sources/toonzqt/functionselection.cpp index da5bf8e..b53c3a7 100644 --- a/toonz/sources/toonzqt/functionselection.cpp +++ b/toonz/sources/toonzqt/functionselection.cpp @@ -444,6 +444,11 @@ void FunctionSelection::enableCommands() { enableCommand(this, "MI_Cut", &FunctionSelection::doCut); enableCommand(this, "MI_Clear", &FunctionSelection::doDelete); enableCommand(this, "MI_Insert", &FunctionSelection::insertCells); + + enableCommand(this, "MI_ResetStep", &FunctionSelection::setStep1); + enableCommand(this, "MI_Step2", &FunctionSelection::setStep2); + enableCommand(this, "MI_Step3", &FunctionSelection::setStep3); + enableCommand(this, "MI_Step4", &FunctionSelection::setStep4); } void FunctionSelection::doCopy() { if (isEmpty()) return; @@ -516,12 +521,12 @@ void FunctionSelection::doCut() { KeyframesMoveUndo *moveUndo = new KeyframesMoveUndo(); for (int i = 0; i < m_selectedKeyframes.size(); i++) { - TDoubleParam *curve = m_selectedKeyframes[i].first; - QSet &kk = m_selectedKeyframes[i].second; - double delta = 0; + TDoubleParam *curve = m_selectedKeyframes[i].first; + QSet &kk = m_selectedKeyframes[i].second; + double delta = 0; if (cellsSelection) delta = -m_selectedCells.height(); - int n = curve ? curve->getKeyframeCount() : 0; - int j = 0; + int n = curve ? curve->getKeyframeCount() : 0; + int j = 0; for (int i = 0; i < n; i++) { if (kk.contains(i)) { if (i + 1 < n && kk.contains(i + 1) && !cellsSelection) @@ -585,6 +590,125 @@ void FunctionSelection::insertCells() { TUndoManager::manager()->add(undo); } +void FunctionSelection::setStep(int step, bool inclusive) { + if (isEmpty()) return; + TUndoManager::manager()->beginBlock(); + + int row = getSelectedCells().top(); + for (const auto &col : m_selectedKeyframes) { + TDoubleParam *curve = col.first; + // need to have at least one segment + if (!curve || curve->getKeyframeCount() <= 1) continue; + + // consider the keyframe just before the top row of the selected cells + if (inclusive) { + int topIndex = curve->getPrevKeyframe(row); + if (topIndex != -1 && topIndex != curve->getKeyframeCount() - 1 && + !col.second.contains(topIndex)) + KeyframeSetter(curve, topIndex).setStep(step); + } + + for (const int &kIndex : col.second) { + // ignore the last key + if (kIndex == curve->getKeyframeCount() - 1) continue; + KeyframeSetter(curve, kIndex).setStep(step); + } + } + + TUndoManager::manager()->endBlock(); +} + +int FunctionSelection::getCommonStep(bool inclusive) { + if (isEmpty()) return -1; + + int step = -1; + int row = getSelectedCells().top(); + for (const auto &col : m_selectedKeyframes) { + TDoubleParam *curve = col.first; + // need to have at least one segment + if (!curve || curve->getKeyframeCount() <= 1) continue; + + // consider the keyframe just before the top row of the selected cells + if (inclusive) { + int topIndex = curve->getPrevKeyframe(row); + if (topIndex != -1 && topIndex != curve->getKeyframeCount() - 1 && + !col.second.contains(topIndex)) + step = curve->getKeyframe(topIndex).m_step; + } + + for (const int &kIndex : col.second) { + // ignore the last key + if (kIndex == curve->getKeyframeCount() - 1) continue; + int tmpStep = curve->getKeyframe(kIndex).m_step; + if (step == -1) + step = tmpStep; + else if (step != tmpStep) + return 0; + } + } + return step; +} + +void FunctionSelection::setSegmentType(TDoubleKeyframe::Type type, + bool inclusive) { + if (isEmpty()) return; + TUndoManager::manager()->beginBlock(); + + int row = getSelectedCells().top(); + for (const auto &col : m_selectedKeyframes) { + TDoubleParam *curve = col.first; + // need to have at least one segment + if (!curve || curve->getKeyframeCount() <= 1) continue; + + // consider the keyframe just before the top row of the selected cells + if (inclusive) { + int topIndex = curve->getPrevKeyframe(row); + if (topIndex != -1 && topIndex != curve->getKeyframeCount() - 1 && + !col.second.contains(topIndex)) + KeyframeSetter(curve, topIndex).setType(type); + } + + for (const int &kIndex : col.second) { + // ignore the last key + if (kIndex == curve->getKeyframeCount() - 1) continue; + KeyframeSetter(curve, kIndex).setType(type); + } + } + + TUndoManager::manager()->endBlock(); +} + +int FunctionSelection::getCommonSegmentType(bool inclusive) { + if (isEmpty()) return -1; + + int type = -1; + int row = getSelectedCells().top(); + for (const auto &col : m_selectedKeyframes) { + TDoubleParam *curve = col.first; + // need to have at least one segment + if (!curve || curve->getKeyframeCount() <= 1) continue; + + // consider the keyframe just before the top row of the selected cells + if (inclusive) { + int topIndex = curve->getPrevKeyframe(row); + if (topIndex != -1 && topIndex != curve->getKeyframeCount() - 1 && + !col.second.contains(topIndex)) + type = (int)(curve->getKeyframe(topIndex).m_type); + } + + for (const int &kIndex : col.second) { + // ignore the last key + if (kIndex == curve->getKeyframeCount() - 1) continue; + int tmpType = (int)(curve->getKeyframe(kIndex).m_type); + if (type == -1) + type = tmpType; + else if (type != tmpType) + return 0; + } + } + return type; +} + //============================================================================= // // FunctionKeyframesData @@ -645,7 +769,7 @@ int FunctionKeyframesData::getRowCount() const { for (int c = 0; c < (int)m_keyframes.size(); c++) { const Keyframes &keyframes = m_keyframes[c]; if (!keyframes.empty()) { - int row = (int)(keyframes.rbegin()->m_frame); + int row = (int)(keyframes.rbegin()->m_frame); if (row + 1 > rowCount) rowCount = row + 1; } } diff --git a/toonz/sources/toonzqt/functionsheet.cpp b/toonz/sources/toonzqt/functionsheet.cpp index 3b50a52..f505977 100644 --- a/toonz/sources/toonzqt/functionsheet.cpp +++ b/toonz/sources/toonzqt/functionsheet.cpp @@ -11,6 +11,7 @@ #include "toonz/doubleparamcmd.h" #include "toonz/preferences.h" #include "toonz/toonzfolders.h" +#include "toonz/tstageobject.h" // TnzBase includes #include "tunit.h" @@ -108,8 +109,8 @@ public: } void drag(int row, int col, QMouseEvent *e) override { - int d = row - m_oldRow; - m_oldRow = row; + int d = row - m_oldRow; + m_oldRow = row; if (d + m_firstKeyframeRow < 0) d = -m_firstKeyframeRow; m_firstKeyframeRow += d; for (int i = 0; i < (int)m_setters.size(); i++) @@ -165,10 +166,10 @@ public: void drag(int row, int col, QMouseEvent *e) override { if (row < 0) row = 0; if (col < 0) col = 0; - int r0 = qMin(row, m_firstRow); - int r1 = qMax(row, m_firstRow); - int c0 = qMin(col, m_firstCol); - int c1 = qMax(col, m_firstCol); + int r0 = std::min(row, m_firstRow); + int r1 = std::max(row, m_firstRow); + int c0 = std::min(col, m_firstCol); + int c1 = std::max(col, m_firstCol); QRect selectedCells(c0, r0, c1 - c0 + 1, r1 - r0 + 1); m_sheet->selectCells(selectedCells); } @@ -366,7 +367,7 @@ void FunctionSheetColumnHeadViewer::paintEvent(QPaintEvent *e) { //----------------------------------------------------------------------------- /*! update tooltips -*/ + */ void FunctionSheetColumnHeadViewer::mouseMoveEvent(QMouseEvent *e) { if ((e->buttons() & Qt::MidButton) && m_draggingChannel && (e->pos() - m_dragStartPosition).manhattanLength() >= @@ -380,7 +381,6 @@ void FunctionSheetColumnHeadViewer::mouseMoveEvent(QMouseEvent *e) { Qt::DropAction dropAction = drag->exec(); return; } - // get the column under the cursor int col = getViewer()->xyToPosition(e->pos()).layer(); FunctionTreeModel::Channel *channel = m_sheet->getChannel(col); @@ -388,41 +388,80 @@ void FunctionSheetColumnHeadViewer::mouseMoveEvent(QMouseEvent *e) { setToolTip(QString("")); } else setToolTip(channel->getExprRefName()); + + // modify selected channel by left dragging + if (m_clickedColumn >= 0 && channel && e->buttons() & Qt::LeftButton) { + int fromC = std::min(m_clickedColumn, col); + int toC = std::max(m_clickedColumn, col); + int lastKeyPos = 0; + for (int c = fromC; c <= toC; c++) { + FunctionTreeModel::Channel *tmpChan = m_sheet->getChannel(c); + if (!tmpChan) continue; + std::set frames; + tmpChan->getParam()->getKeyframes(frames); + if (!frames.empty()) + lastKeyPos = std::max(lastKeyPos, (int)*frames.rbegin()); + } + QRect rect(std::min(m_clickedColumn, col), 0, + std::abs(col - m_clickedColumn) + 1, lastKeyPos + 1); + getViewer()->selectCells(rect); + } } //----------------------------------------------------------------------------- void FunctionSheetColumnHeadViewer::mousePressEvent(QMouseEvent *e) { - QPoint pos = e->pos(); - int currentC = getViewer()->xyToPosition(pos).layer(); - FunctionTreeModel::Channel *channel; - for (int c = 0; c <= m_sheet->getChannelCount(); c++) { - channel = m_sheet->getChannel(c); - if (!channel || c != currentC) continue; - break; + QPoint pos = e->pos(); + int currentC = getViewer()->xyToPosition(pos).layer(); + FunctionTreeModel::Channel *channel = m_sheet->getChannel(currentC); + if (!channel) { + m_clickedColumn = -1; + return; } - if (channel && e->button() == Qt::MidButton) { + + if (e->button() == Qt::MidButton) { m_draggingChannel = channel; m_dragStartPosition = e->pos(); return; - } else if (channel) + } else channel->setIsCurrent(true); m_draggingChannel = 0; - if (!channel) return; - - // Open folder - FunctionTreeModel::ChannelGroup *channelGroup = channel->getChannelGroup(); - if (!channelGroup->isOpen()) - channelGroup->getModel()->setExpandedItem(channelGroup->createIndex(), - true); - // Select all segment - std::set frames; - channel->getParam()->getKeyframes(frames); - QRect rect(0, 0, 0, 0); - if (!frames.empty()) rect = QRect(currentC, 0, 1, (*frames.rbegin()) + 1); + if (e->button() == Qt::LeftButton) { + int lastKeyPos = 0; + // if the current selection does not contain the first cell in m_firstColumn + // then we assume that the selection has been modified and treat shift+click + // as normal click. + if (getViewer()->getSelectedCells().contains(m_clickedColumn, 0) && + (e->modifiers() & Qt::ShiftModifier)) { + int fromC = std::min(m_clickedColumn, currentC); + int toC = std::max(m_clickedColumn, currentC); + for (int c = fromC; c <= toC; c++) { + FunctionTreeModel::Channel *tmpChan = m_sheet->getChannel(c); + if (!tmpChan) continue; + std::set frames; + tmpChan->getParam()->getKeyframes(frames); + if (!frames.empty()) + lastKeyPos = std::max(lastKeyPos, (int)*frames.rbegin()); + } + } else { + // Open folder + FunctionTreeModel::ChannelGroup *channelGroup = + channel->getChannelGroup(); + if (!channelGroup->isOpen()) + channelGroup->getModel()->setExpandedItem(channelGroup->createIndex(), + true); + // Select all segment + std::set frames; + channel->getParam()->getKeyframes(frames); + if (!frames.empty()) lastKeyPos = (int)*frames.rbegin(); + m_clickedColumn = currentC; + } + QRect rect(std::min(m_clickedColumn, currentC), 0, + std::abs(currentC - m_clickedColumn) + 1, lastKeyPos + 1); - getViewer()->selectCells(rect); + getViewer()->selectCells(rect); + } } //----------------------------------------------------------------------------- @@ -502,7 +541,7 @@ FunctionSheetCellViewer::FunctionSheetCellViewer(FunctionSheet *parent) m_lineEdit->hide(); bool ret = connect(m_lineEdit, SIGNAL(editingFinished()), this, SLOT(onCellEditorEditingFinished())); - ret = ret && connect(m_lineEdit, SIGNAL(mouseMoved(QMouseEvent *)), this, + ret = ret && connect(m_lineEdit, SIGNAL(mouseMoved(QMouseEvent *)), this, SLOT(onMouseMovedInLineEdit(QMouseEvent *))); assert(ret); setMouseTracking(true); @@ -512,7 +551,7 @@ FunctionSheetCellViewer::FunctionSheetCellViewer(FunctionSheet *parent) //----------------------------------------------------------------------------- /*! Called when the cell panel is left/right-clicked -*/ + */ Spreadsheet::DragTool *FunctionSheetCellViewer::createDragTool(QMouseEvent *e) { CellPosition cellPosition = getViewer()->xyToPosition(e->pos()); int row = cellPosition.frame(); @@ -579,6 +618,13 @@ void FunctionSheetCellViewer::drawCells(QPainter &painter, int r0, int c0, TMeasure *measure = curve->getMeasure(); const TUnit *unit = measure ? measure->getCurrentUnit() : 0; + bool isStageObjectCycled = false; + TStageObject *obj = m_sheet->getStageObject(c); + if (obj && obj->isCycleEnabled()) isStageObjectCycled = true; + + bool isParamCycled = curve->isCycleEnabled(); + int rowCount = getViewer()->getRowCount(); + // draw each cell for (int row = r0; row <= r1; row++) { int ya = m_sheet->rowToY(row); @@ -586,8 +632,11 @@ void FunctionSheetCellViewer::drawCells(QPainter &painter, int r0, int c0, bool isSelected = getViewer()->isSelectedCell(row, c); - double value = curve->getValue(row); + double value = (isStageObjectCycled) + ? curve->getValue(obj->paramsTime((double)row)) + : curve->getValue(row); if (unit) value = unit->convertTo(value); + enum { None, Key, Inbetween, CycleRange } drawValue = None; QRect cellRect(x0, ya, x1 - x0 + 1, yb - ya + 1); QRect borderRect(x0, ya, 7, yb - ya + 1); @@ -601,6 +650,16 @@ void FunctionSheetCellViewer::drawCells(QPainter &painter, int r0, int c0, } else { cellColor = (isSelected) ? SelectedInBetweenColor : InBetweenColor; borderColor = InBetweenBorderColor; + + // when the inbetween values are hidden, change the cell colors to + // semi-transparent if the frame is in middle of the value step + if (!m_sheet->isIbtwnValueVisible()) { + TDoubleKeyframe kf = + curve->getKeyframe(curve->getPrevKeyframe(row)); + int step = kf.m_step; + if (step > 1 && (row - (int)std::floor(kf.m_frame)) % step != 0) + cellColor.setAlpha(128); + } } painter.setPen(Qt::NoPen); painter.fillRect(cellRect, cellColor); @@ -622,8 +681,44 @@ void FunctionSheetCellViewer::drawCells(QPainter &painter, int r0, int c0, } } + drawValue = (curve->isKeyframe(row)) + ? Key + : (m_sheet->isIbtwnValueVisible()) ? Inbetween : None; + + } + // empty cells + else { + // show values for cycled parameter. + // cycle option can be set in two ways; one is as TStageObject, + // the other is as TDoubleParam. + // - TStageObject cycle literally cycles values with no offset. + // Applied to all transformation parameters of the cycled object. + // - TDoubleParam cycle includes value offset so that the curve + // connects smoothly. + // - TStageObject cycle option has a priority to TDoubleParam one. + // (see TStageObject::paramsTime() in tstageobject.cpp) + if (kCount > 0 && row > kr1 && (isStageObjectCycled || isParamCycled) && + (row < rowCount)) { + drawValue = CycleRange; + } + // empty and selected cell + if (isSelected) { + cellColor = (row >= rowCount) ? SelectedEmptyColor + : SelectedSceneRangeEmptyColor; + painter.setPen(Qt::NoPen); + painter.fillRect(cellRect, cellColor); + } + } + + if (drawValue != None) { // draw cell value - painter.setPen(getViewer()->getTextColor()); + if (drawValue == Key || drawValue == Inbetween) + painter.setPen(getViewer()->getTextColor()); + else { + QColor semiTranspTextColor = getViewer()->getTextColor(); + semiTranspTextColor.setAlpha(128); + painter.setPen(semiTranspTextColor); + } /*--- 整数から小数点以下3桁以内の場合はそれ以降の0000を描かない ---*/ QString text; @@ -653,19 +748,31 @@ void FunctionSheetCellViewer::drawCells(QPainter &painter, int r0, int c0, fontName = "Helvetica"; #endif } - static QFont font(fontName, -1, QFont::Bold); + static QFont font(fontName, -1); + font.setBold(drawValue == Key); font.setPixelSize(12); painter.setFont(font); painter.drawText(cellRect.adjusted(10, 0, 0, 0), Qt::AlignVCenter | Qt::AlignLeft, text); } - // empty and selected cell - else if (isSelected) { - int rowCount = getViewer()->getRowCount(); - cellColor = (row >= rowCount) ? SelectedEmptyColor - : SelectedSceneRangeEmptyColor; - painter.setPen(Qt::NoPen); - painter.fillRect(cellRect, cellColor); + } + + if (kCount > 0 && (isStageObjectCycled || isParamCycled)) { + // draw the row zigzag + int ymax = m_sheet->rowToY(r1 + 1); + int qx = x0 + 4; + int qy = m_sheet->rowToY(kr1 + 1); + int zig = 2; + QColor zigzagColor = (isStageObjectCycled) ? getViewer()->getTextColor() + : KeyFrameBorderColor; + painter.setPen(zigzagColor); + painter.drawLine(QPoint(qx, qy), QPoint(qx - zig, qy + zig)); + qy += zig; + while (qy < ymax) { + painter.drawLine(QPoint(qx - zig, qy), QPoint(qx + zig, qy + 2 * zig)); + painter.drawLine(QPoint(qx + zig, qy + 2 * zig), + QPoint(qx - zig, qy + 4 * zig)); + qy += 4 * zig; } } } @@ -691,8 +798,8 @@ void FunctionSheetCellViewer::mouseDoubleClickEvent(QMouseEvent *e) { double v = curve->getValue(row); TMeasure *measure = curve->getMeasure(); const TUnit *unit = measure ? measure->getCurrentUnit() : 0; - if (unit) v = unit->convertTo(v); - m_currentValue = v; + if (unit) v = unit->convertTo(v); + m_currentValue = v; m_lineEdit->setText(QString::number(v, 'f', 4)); // in order to put the cursor to the left end m_lineEdit->setSelection(m_lineEdit->text().length(), @@ -729,7 +836,7 @@ void FunctionSheetCellViewer::onCellEditorEditingFinished() { if (curve) { TMeasure *measure = curve->getMeasure(); const TUnit *unit = measure ? measure->getCurrentUnit() : 0; - if (unit) value = unit->convertFrom(value); + if (unit) value = unit->convertFrom(value); KeyframeSetter::setValue(curve, m_editRow, value); } } @@ -811,30 +918,21 @@ void FunctionSheetCellViewer::onMouseMovedInLineEdit(QMouseEvent *event) { // TODO: refactor: cfr functionpanel.cpp void FunctionSheetCellViewer::openContextMenu(QMouseEvent *e) { - struct locals { - static void sheet__setSegmentType(FunctionSelection *selection, - TDoubleParam *curve, int segmentIndex, - TDoubleKeyframe::Type type) { - selection->selectSegment(curve, segmentIndex); - KeyframeSetter setter(curve, segmentIndex); - setter.setType(type); - } - }; // locals - QAction deleteKeyframeAction(tr("Delete Key"), 0); QAction insertKeyframeAction(tr("Set Key"), 0); - QAction setLinearAction(tr("Linear Interpolation"), 0); - QAction setSpeedInOutAction(tr("Speed In / Speed Out Interpolation"), 0); - QAction setEaseInOutAction(tr("Ease In / Ease Out Interpolation"), 0); - QAction setEaseInOut2Action(tr("Ease In / Ease Out (%) Interpolation"), 0); - QAction setExponentialAction(tr("Exponential Interpolation"), 0); - QAction setExpressionAction(tr("Expression Interpolation"), 0); - QAction setFileAction(tr("File Interpolation"), 0); - QAction setConstantAction(tr("Constant Interpolation"), 0); - QAction setStep1Action(tr("Step 1"), 0); - QAction setStep2Action(tr("Step 2"), 0); - QAction setStep3Action(tr("Step 3"), 0); - QAction setStep4Action(tr("Step 4"), 0); + + QStringList interpNames; + interpNames << tr("Constant Interpolation") << tr("Linear Interpolation") + << tr("Speed In / Speed Out Interpolation") + << tr("Ease In / Ease Out Interpolation") + << tr("Ease In / Ease Out (%) Interpolation") + << tr("Exponential Interpolation") + << tr("Expression Interpolation") << tr("File Interpolation") + << tr("Similar Shape Interpolation"); + QAction activateCycleAction(tr("Activate Cycle"), 0); + QAction deactivateCycleAction(tr("Deactivate Cycle"), 0); + QAction showIbtwnAction(tr("Show Inbetween Values"), 0); + QAction hideIbtwnAction(tr("Hide Inbetween Values"), 0); CellPosition cellPosition = getViewer()->xyToPosition(e->pos()); int row = cellPosition.frame(); @@ -856,38 +954,58 @@ void FunctionSheetCellViewer::openContextMenu(QMouseEvent *e) { } int kIndex = curve->getPrevKeyframe(row); + // if the FunctionSelection is not current or when clicking outside of the + // selection, then select the clicked cell. + FunctionSelection *selection = m_sheet->getSelection(); + if (!selection->getSelectedCells().contains(col, row)) { + selection->makeCurrent(); + selection->selectCells(QRect(col, row, 1, 1)); + } + CommandManager *cmdManager = CommandManager::instance(); + // build menu QMenu menu(0); + + // on clicking after last keyframe + if (kCount > 0 && isEmpty && kIndex == kCount - 1) { + if (curve->isCycleEnabled()) + menu.addAction(&deactivateCycleAction); + else + menu.addAction(&activateCycleAction); + } + if (!isKeyframe) // menu.addAction(&deleteKeyframeAction); else menu.addAction(&insertKeyframeAction); - if (!isEmpty && !isKeyframe && kIndex >= 0) { + // change interpolation commands + QList interpActions; + int interp = selection->getCommonSegmentType(); + if (interp != -1) { menu.addSeparator(); - TDoubleKeyframe kf = curve->getKeyframe(kIndex); - if (kf.m_type != TDoubleKeyframe::Linear) menu.addAction(&setLinearAction); - if (kf.m_type != TDoubleKeyframe::SpeedInOut) - menu.addAction(&setSpeedInOutAction); - if (kf.m_type != TDoubleKeyframe::EaseInOut) - menu.addAction(&setEaseInOutAction); - if (kf.m_type != TDoubleKeyframe::EaseInOutPercentage) - menu.addAction(&setEaseInOut2Action); - if (kf.m_type != TDoubleKeyframe::Exponential) - menu.addAction(&setExponentialAction); - if (kf.m_type != TDoubleKeyframe::Expression) - menu.addAction(&setExpressionAction); - if (kf.m_type != TDoubleKeyframe::File) menu.addAction(&setFileAction); - if (kf.m_type != TDoubleKeyframe::Constant) - menu.addAction(&setConstantAction); - menu.addSeparator(); - if (kf.m_step != 1) menu.addAction(&setStep1Action); - if (kf.m_step != 2) menu.addAction(&setStep2Action); - if (kf.m_step != 3) menu.addAction(&setStep3Action); - if (kf.m_step != 4) menu.addAction(&setStep4Action); + QMenu *interpMenu = menu.addMenu(tr("Change Interpolation")); + for (int i = (int)TDoubleKeyframe::Constant; + i <= (int)TDoubleKeyframe::SimilarShape; i++) { + if (interp != i) { + QAction *interpAction = new QAction(interpNames[i - 1], 0); + interpAction->setData(i); + interpActions.append(interpAction); + interpMenu->addAction(interpAction); + } + } + } + + // change step commands + int step = selection->getCommonStep(); + if (step != -1) { + QMenu *stepMenu = menu.addMenu(tr("Change Step")); + if (step != 1) stepMenu->addAction(cmdManager->getAction("MI_ResetStep")); + if (step != 2) stepMenu->addAction(cmdManager->getAction("MI_Step2")); + if (step != 3) stepMenu->addAction(cmdManager->getAction("MI_Step3")); + if (step != 4) stepMenu->addAction(cmdManager->getAction("MI_Step4")); } menu.addSeparator(); - CommandManager *cmdManager = CommandManager::instance(); menu.addAction(cmdManager->getAction("MI_Cut")); menu.addAction(cmdManager->getAction("MI_Copy")); menu.addAction(cmdManager->getAction("MI_Paste")); @@ -895,46 +1013,31 @@ void FunctionSheetCellViewer::openContextMenu(QMouseEvent *e) { menu.addAction(cmdManager->getAction("MI_Insert")); - FunctionSelection *selection = m_sheet->getSelection(); + if (!isEmpty && kIndex >= 0) { + menu.addSeparator(); + if (m_sheet->isIbtwnValueVisible()) + menu.addAction(&hideIbtwnAction); + else + menu.addAction(&showIbtwnAction); + } + TSceneHandle *sceneHandle = m_sheet->getViewer()->getSceneHandle(); // execute menu QAction *action = menu.exec(e->globalPos()); // QCursor::pos()); if (action == &deleteKeyframeAction) { KeyframeSetter::removeKeyframeAt(curve, row); } else if (action == &insertKeyframeAction) { KeyframeSetter(curve).createKeyframe(row); - } else if (action == &setLinearAction) - locals::sheet__setSegmentType(selection, curve, kIndex, - TDoubleKeyframe::Linear); - else if (action == &setSpeedInOutAction) - locals::sheet__setSegmentType(selection, curve, kIndex, - TDoubleKeyframe::SpeedInOut); - else if (action == &setEaseInOutAction) - locals::sheet__setSegmentType(selection, curve, kIndex, - TDoubleKeyframe::EaseInOut); - else if (action == &setEaseInOut2Action) - locals::sheet__setSegmentType(selection, curve, kIndex, - TDoubleKeyframe::EaseInOutPercentage); - else if (action == &setExponentialAction) - locals::sheet__setSegmentType(selection, curve, kIndex, - TDoubleKeyframe::Exponential); - else if (action == &setExpressionAction) - locals::sheet__setSegmentType(selection, curve, kIndex, - TDoubleKeyframe::Expression); - else if (action == &setFileAction) - locals::sheet__setSegmentType(selection, curve, kIndex, - TDoubleKeyframe::File); - else if (action == &setConstantAction) - locals::sheet__setSegmentType(selection, curve, kIndex, - TDoubleKeyframe::Constant); - else if (action == &setStep1Action) - KeyframeSetter(curve, kIndex).setStep(1); - else if (action == &setStep2Action) - KeyframeSetter(curve, kIndex).setStep(2); - else if (action == &setStep3Action) - KeyframeSetter(curve, kIndex).setStep(3); - else if (action == &setStep4Action) - KeyframeSetter(curve, kIndex).setStep(4); + } else if (interpActions.contains(action)) { + selection->setSegmentType((TDoubleKeyframe::Type)action->data().toInt()); + } else if (action == &activateCycleAction) + KeyframeSetter::enableCycle(curve, true, sceneHandle); + else if (action == &deactivateCycleAction) + KeyframeSetter::enableCycle(curve, false, sceneHandle); + else if (action == &hideIbtwnAction) + m_sheet->setIbtwnValueVisible(false); + else if (action == &showIbtwnAction) + m_sheet->setIbtwnValueVisible(true); update(); } @@ -1098,7 +1201,7 @@ void FunctionSheet::selectCells(const QRect &selectedCells) { if (getSelection()) { QList curves; for (int c = selectedCells.left(); c <= selectedCells.right(); c++) { - TDoubleParam *param = 0; + TDoubleParam *param = 0; if (c < getChannelCount()) param = getChannel(c)->getParam(); curves.push_back(param); } @@ -1123,7 +1226,7 @@ void FunctionSheet::updateAll() { //----------------------------------------------------------------------------- /*! Display expression name of the current segment -*/ + */ QString FunctionSheet::getSelectedParamName() { if (m_functionTreeModel->getCurrentChannel()) return m_functionTreeModel->getCurrentChannel()->getExprRefName(); @@ -1139,7 +1242,7 @@ int FunctionSheet::getColumnIndexByCurve(TDoubleParam *param) const { //----------------------------------------------------------------------------- /*! scroll column to show the current one -*/ + */ void FunctionSheet::onCurrentChannelChanged( FunctionTreeModel::Channel *channel) { if (!channel) return; @@ -1152,3 +1255,22 @@ void FunctionSheet::onCurrentChannelChanged( } } } + +//----------------------------------------------------------------------------- +/*! Obtains a pointer to the stage object containing the parameter of specified + * column + */ +TStageObject *FunctionSheet::getStageObject(int column) { + FunctionTreeModel::Channel *channel = getChannel(column); + if (!channel) return nullptr; + + FunctionTreeModel::ChannelGroup *channelGroup = channel->getChannelGroup(); + if (!channelGroup) return nullptr; + + // returns nullptr if the channel is a fx parameter + StageObjectChannelGroup *stageItem = + dynamic_cast(channelGroup); + if (!stageItem) return nullptr; + + return stageItem->getStageObject(); +} \ No newline at end of file diff --git a/toonz/sources/toonzqt/functiontreeviewer.cpp b/toonz/sources/toonzqt/functiontreeviewer.cpp index 4fca61b..eeeb822 100644 --- a/toonz/sources/toonzqt/functiontreeviewer.cpp +++ b/toonz/sources/toonzqt/functiontreeviewer.cpp @@ -64,31 +64,6 @@ public: //============================================================================= -class StageObjectChannelGroup final : public FunctionTreeModel::ChannelGroup { -public: - TStageObject *m_stageObject; //!< (not owned) Referenced stage object - FunctionTreeModel::ChannelGroup - *m_plasticGroup; //!< (not owned) Eventual plastic channels group - -public: - StageObjectChannelGroup(TStageObject *pegbar); - ~StageObjectChannelGroup(); - - QString getShortName() const override; - QString getLongName() const override; - - QString getIdName() const override; - - void *getInternalPointer() const override { - return static_cast(m_stageObject); - } - - TStageObject *getStageObject() const { return m_stageObject; } - QVariant data(int role) const override; -}; - -//============================================================================= - class SkVDChannelGroup final : public FunctionTreeModel::ChannelGroup { public: StageObjectChannelGroup *m_stageObjectGroup; //!< Parent stage object group diff --git a/toonz/sources/toonzqt/functionviewer.cpp b/toonz/sources/toonzqt/functionviewer.cpp index 4148a6c..e2771a3 100644 --- a/toonz/sources/toonzqt/functionviewer.cpp +++ b/toonz/sources/toonzqt/functionviewer.cpp @@ -172,11 +172,11 @@ FunctionViewer::FunctionViewer(QWidget *parent, Qt::WFlags flags) bool ret = true; ret = ret && connect(m_toolbar, SIGNAL(numericalColumnToggled()), this, SLOT(toggleMode())); - ret = ret && connect(ftModel, SIGNAL(activeChannelsChanged()), + ret = ret && connect(ftModel, SIGNAL(activeChannelsChanged()), m_functionGraph, SLOT(update())); - ret = ret && connect(ftModel, SIGNAL(activeChannelsChanged()), + ret = ret && connect(ftModel, SIGNAL(activeChannelsChanged()), m_numericalColumns, SLOT(updateAll())); - ret = ret && connect(ftModel, SIGNAL(curveChanged(bool)), m_treeView, + ret = ret && connect(ftModel, SIGNAL(curveChanged(bool)), m_treeView, SLOT(update())); ret = ret && connect(ftModel, SIGNAL(curveChanged(bool)), m_functionGraph, SLOT(update())); @@ -582,7 +582,10 @@ void FunctionViewer::onStageObjectChanged(bool isDragging) { static_cast(m_treeView->model()) ->setCurrentStageObject(obj); - if (!isDragging) m_treeView->updateAll(); + if (!isDragging) { + m_treeView->updateAll(); + m_numericalColumns->updateAll(); + } m_functionGraph->update(); } @@ -592,7 +595,7 @@ void FunctionViewer::onStageObjectChanged(bool isDragging) { void FunctionViewer::onFxSwitched() { TFx *fx = m_fxHandle->getFx(); TZeraryColumnFx *zfx = dynamic_cast(fx); - if (zfx) fx = zfx->getZeraryFx(); + if (zfx) fx = zfx->getZeraryFx(); static_cast(m_treeView->model())->setCurrentFx(fx); m_treeView->updateAll(); m_functionGraph->update(); @@ -712,6 +715,8 @@ bool FunctionViewer::isExpressionPageActive() { void FunctionViewer::save(QSettings &settings) const { settings.setValue("toggleStatus", m_toggleStatus); + settings.setValue("showIbtwnValuesInSheet", + m_numericalColumns->isIbtwnValueVisible()); } //---------------------------------------------------------------------------- @@ -721,4 +726,10 @@ void FunctionViewer::load(QSettings &settings) { if (toggleStatus.canConvert(QVariant::Int)) { m_toggleStatus = toggleStatus.toInt(); } + + bool ibtwnVisible = settings + .value("showIbtwnValuesInSheet", + m_numericalColumns->isIbtwnValueVisible()) + .toBool(); + m_numericalColumns->setIbtwnValueVisible(ibtwnVisible); } diff --git a/toonz/sources/toonzqt/fxschematicnode.cpp b/toonz/sources/toonzqt/fxschematicnode.cpp index 8b21ec0..5affb29 100644 --- a/toonz/sources/toonzqt/fxschematicnode.cpp +++ b/toonz/sources/toonzqt/fxschematicnode.cpp @@ -46,6 +46,8 @@ // TnzCore includes #include "tconst.h" +#include "../toonz/menubarcommandids.h" + // Qt includes #include #include @@ -690,7 +692,7 @@ void FxPainter::contextMenuEvent(QGraphicsSceneContextMenuEvent *cme) { QMenu *addMenu = fxScene->getAddFxMenu(); QAction *fxEditorPopup = - CommandManager::instance()->getAction("MI_FxParamEditor"); + CommandManager::instance()->getAction(MI_FxParamEditor); QAction *copy = CommandManager::instance()->getAction("MI_Copy"); QAction *cut = CommandManager::instance()->getAction("MI_Cut"); QAction *group = CommandManager::instance()->getAction("MI_Group"); @@ -1579,7 +1581,7 @@ void FxSchematicPort::contextMenuEvent(QGraphicsSceneContextMenuEvent *cme) { SLOT(onConnectToXSheet())); QAction *fxEditorPopup = - CommandManager::instance()->getAction("MI_FxParamEditor"); + CommandManager::instance()->getAction(MI_FxParamEditor); menu.addMenu(fxScene->getAddFxMenu()); menu.addAction(fxEditorPopup); @@ -1755,7 +1757,8 @@ assert(linkedFx);*/ TUndoManager::manager()->endBlock(); emit sceneChanged(); emit xsheetChanged(); - } + } else + SchematicPort::mouseReleaseEvent(me); } else SchematicPort::mouseReleaseEvent(me); } @@ -2237,6 +2240,15 @@ void FxSchematicOutputNode::mouseDoubleClickEvent( outputSettingsPopup->trigger(); } +void FxSchematicOutputNode::mousePressEvent(QGraphicsSceneMouseEvent *me) { + FxSchematicNode::mousePressEvent(me); + + QAction *fxEditorPopup = + CommandManager::instance()->getAction(MI_FxParamEditor); + // this signal cause the update the contents of the FxSettings + if (fxEditorPopup->isVisible()) emit fxNodeDoubleClicked(); +} + //***************************************************** // // FxSchematicXSheetNode @@ -2305,6 +2317,15 @@ void FxSchematicXSheetNode::mouseDoubleClickEvent( sceneSettingsPopup->trigger(); } +void FxSchematicXSheetNode::mousePressEvent(QGraphicsSceneMouseEvent *me) { + FxSchematicNode::mousePressEvent(me); + + QAction *fxEditorPopup = + CommandManager::instance()->getAction(MI_FxParamEditor); + // this signal cause the update the contents of the FxSettings + if (fxEditorPopup->isVisible()) emit fxNodeDoubleClicked(); +} + //***************************************************** // // FxSchematicNormalFxNode @@ -2619,9 +2640,9 @@ void FxSchematicNormalFxNode::mouseDoubleClickEvent( m_nameItem->setFocus(); setFlag(QGraphicsItem::ItemIsSelectable, false); } else { - QAction *fxEitorPopup = - CommandManager::instance()->getAction("MI_FxParamEditor"); - fxEitorPopup->trigger(); + QAction *fxEditorPopup = + CommandManager::instance()->getAction(MI_FxParamEditor); + fxEditorPopup->trigger(); // this signal cause the update the contents of the FxSettings emit fxNodeDoubleClicked(); } @@ -2629,6 +2650,17 @@ void FxSchematicNormalFxNode::mouseDoubleClickEvent( //----------------------------------------------------- +void FxSchematicNormalFxNode::mousePressEvent(QGraphicsSceneMouseEvent *me) { + FxSchematicNode::mousePressEvent(me); + + QAction *fxEditorPopup = + CommandManager::instance()->getAction(MI_FxParamEditor); + // this signal cause the update the contents of the FxSettings + if (fxEditorPopup->isVisible()) emit fxNodeDoubleClicked(); +} + +//----------------------------------------------------- + void FxSchematicNormalFxNode::resize(bool maximized) {} //***************************************************** @@ -2855,7 +2887,7 @@ void FxSchematicZeraryNode::mouseDoubleClickEvent( setFlag(QGraphicsItem::ItemIsSelectable, false); } else { QAction *fxEditorPopup = - CommandManager::instance()->getAction("MI_FxParamEditor"); + CommandManager::instance()->getAction(MI_FxParamEditor); fxEditorPopup->trigger(); // this signal cause the update the contents of the FxSettings @@ -2865,6 +2897,17 @@ void FxSchematicZeraryNode::mouseDoubleClickEvent( //----------------------------------------------------- +void FxSchematicZeraryNode::mousePressEvent(QGraphicsSceneMouseEvent *me) { + FxSchematicNode::mousePressEvent(me); + + QAction *fxEditorPopup = + CommandManager::instance()->getAction(MI_FxParamEditor); + // this signal cause the update the contents of the FxSettings + if (fxEditorPopup->isVisible()) emit fxNodeDoubleClicked(); +} + +//----------------------------------------------------- + void FxSchematicZeraryNode::onNameChanged() { m_nameItem->hide(); m_name = m_nameItem->toPlainText(); @@ -3163,11 +3206,28 @@ void FxSchematicColumnNode::mouseDoubleClickEvent( m_nameItem->show(); m_nameItem->setFocus(); setFlag(QGraphicsItem::ItemIsSelectable, false); + } else { + QAction *fxEditorPopup = + CommandManager::instance()->getAction(MI_FxParamEditor); + fxEditorPopup->trigger(); + // this signal cause the update the contents of the FxSettings + emit fxNodeDoubleClicked(); } } //----------------------------------------------------- +void FxSchematicColumnNode::mousePressEvent(QGraphicsSceneMouseEvent *me) { + FxSchematicNode::mousePressEvent(me); + + QAction *fxEditorPopup = + CommandManager::instance()->getAction(MI_FxParamEditor); + // this signal cause the update the contents of the FxSettings + if (fxEditorPopup->isVisible()) emit fxNodeDoubleClicked(); +} + +//----------------------------------------------------- + void FxSchematicColumnNode::renameObject(const TStageObjectId &id, std::string name) { FxSchematicScene *fxScene = dynamic_cast(scene()); @@ -3334,14 +3394,25 @@ void FxSchematicPaletteNode::mouseDoubleClickEvent( m_nameItem->setFocus(); setFlag(QGraphicsItem::ItemIsSelectable, false); } else { - QAction *fxEitorPopup = - CommandManager::instance()->getAction("MI_FxParamEditor"); - fxEitorPopup->trigger(); + QAction *fxEditorPopup = + CommandManager::instance()->getAction(MI_FxParamEditor); + fxEditorPopup->trigger(); } } //----------------------------------------------------- +void FxSchematicPaletteNode::mousePressEvent(QGraphicsSceneMouseEvent *me) { + FxSchematicNode::mousePressEvent(me); + + QAction *fxEditorPopup = + CommandManager::instance()->getAction(MI_FxParamEditor); + // this signal cause the update the contents of the FxSettings + if (fxEditorPopup->isVisible()) emit fxNodeDoubleClicked(); +} + +//----------------------------------------------------- + void FxSchematicPaletteNode::renameObject(const TStageObjectId &id, std::string name) { FxSchematicScene *fxScene = dynamic_cast(scene()); @@ -3493,6 +3564,15 @@ void FxGroupNode::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *me) { } } +void FxGroupNode::mousePressEvent(QGraphicsSceneMouseEvent *me) { + FxSchematicNode::mousePressEvent(me); + + QAction *fxEditorPopup = + CommandManager::instance()->getAction(MI_FxParamEditor); + // this signal cause the update the contents of the FxSettings + if (fxEditorPopup->isVisible()) emit fxNodeDoubleClicked(); +} + //----------------------------------------------------- QPointF FxGroupNode::computePos() const { diff --git a/toonz/sources/toonzqt/fxschematicscene.cpp b/toonz/sources/toonzqt/fxschematicscene.cpp index e16c8ab..2ada469 100644 --- a/toonz/sources/toonzqt/fxschematicscene.cpp +++ b/toonz/sources/toonzqt/fxschematicscene.cpp @@ -578,6 +578,8 @@ FxSchematicNode *FxSchematicScene::addGroupedFxSchematicNode( SLOT(onSwitchCurrentFx(TFx *))); connect(node, SIGNAL(currentColumnChanged(int)), this, SLOT(onCurrentColumnChanged(int))); + connect(node, SIGNAL(fxNodeDoubleClicked()), this, + SLOT(onFxNodeDoubleClicked())); m_groupedTable[groupId] = node; return node; } @@ -727,7 +729,14 @@ void FxSchematicScene::placeNode(FxSchematicNode *node) { maxY = std::max(fx->getAttributes()->getDagNodePos().y, maxY); } if (QPointF(minX, minY) == QPointF(TConst::nowhere.x, TConst::nowhere.y)) { - pos = sceneRect().center(); + TFx *inputFx = node->getFx()->getInputPort(0)->getFx(); + if (inputFx && + inputFx->getAttributes()->getDagNodePos() != TConst::nowhere) { + TPointD dagPos = + inputFx->getAttributes()->getDagNodePos() + TPointD(150, 0); + pos = QPointF(dagPos.x, dagPos.y); + } else + pos = sceneRect().center(); nodeRect.moveTopLeft(pos); while (!isAnEmptyZone(nodeRect)) nodeRect.translate(0, -step); pos = nodeRect.topLeft(); diff --git a/toonz/sources/toonzqt/fxselection.cpp b/toonz/sources/toonzqt/fxselection.cpp index b93da1e..20e03ef 100644 --- a/toonz/sources/toonzqt/fxselection.cpp +++ b/toonz/sources/toonzqt/fxselection.cpp @@ -417,6 +417,7 @@ Link FxSelection::getBoundingFxs(SchematicLink *link) { Link FxSelection::getBoundingFxs(SchematicPort *inputPort, SchematicPort *outputPort) { Link boundingFxs; + if (!inputPort || !outputPort) return boundingFxs; FxSchematicNode *inputNode = dynamic_cast(outputPort->getNode()); FxSchematicNode *outputNode = diff --git a/toonz/sources/toonzqt/fxsettings.cpp b/toonz/sources/toonzqt/fxsettings.cpp index 20f35ab..2c2da56 100644 --- a/toonz/sources/toonzqt/fxsettings.cpp +++ b/toonz/sources/toonzqt/fxsettings.cpp @@ -16,6 +16,7 @@ #include "pluginhost.h" #include "tenv.h" #include "tsystem.h" +#include "docklayout.h" #include "toonz/tcamera.h" #include "toonz/toonzfolders.h" @@ -38,7 +39,6 @@ #include #include #include -#include #include #include @@ -1016,9 +1016,12 @@ void ParamViewer::setFx(const TFxP ¤tFx, const TFxP &actualFx, int frame, if (m_fx != currentFx) { getCurrentPageSet()->setFx(currentFx, actualFx, frame); - QSize pageViewerPreferedSize = - getCurrentPageSet()->getPreferedSize() + QSize(2, 20); - emit preferedSizeChanged(pageViewerPreferedSize); + if (m_actualFx != actualFx) { + m_actualFx = actualFx; + QSize pageViewerPreferedSize = + getCurrentPageSet()->getPreferedSize() + QSize(2, 50); + emit preferedSizeChanged(pageViewerPreferedSize); + } } } @@ -1086,7 +1089,8 @@ FxSettings::FxSettings(QWidget *parent, const TPixel32 &checkCol1, , m_checkCol1(checkCol1) , m_checkCol2(checkCol2) , m_isCameraModeView(false) - , m_container_height(177) { + , m_container_height(184) + , m_container_width(390) { // param viewer m_paramViewer = new ParamViewer(this); // swatch @@ -1306,7 +1310,7 @@ void FxSettings::setCurrentFrame() { //----------------------------------------------------------------------------- void FxSettings::changeTitleBar(TFx *fx) { - QDialog *popup = dynamic_cast(parentWidget()); + DockWidget *popup = dynamic_cast(parentWidget()); if (!popup) return; QString titleText(tr("Fx Settings")); @@ -1512,12 +1516,19 @@ void FxSettings::onViewModeChanged(QAction *triggeredAct) { void FxSettings::onPreferedSizeChanged(QSize pvBestSize) { QSize popupBestSize = pvBestSize; + + // Set minimum size, just in case + popupBestSize.setHeight(std::max(popupBestSize.height(), 85)); + popupBestSize.setWidth(std::max(popupBestSize.width(), 390)); + if (m_toolBar->isVisible()) { - popupBestSize += QSize(0, m_viewer->height() + m_toolBar->height()); + popupBestSize += QSize(0, m_viewer->height() + m_toolBar->height() + 4); + popupBestSize.setWidth( + std::max(popupBestSize.width(), m_viewer->width() + 13)); } - QDialog *popup = dynamic_cast(parentWidget()); - if (popup) { + DockWidget *popup = dynamic_cast(parentWidget()); + if (popup && popup->isFloating()) { QRect geom = popup->geometry(); geom.setSize(popupBestSize); popup->setGeometry(geom); @@ -1530,19 +1541,24 @@ void FxSettings::onPreferedSizeChanged(QSize pvBestSize) { void FxSettings::onShowSwatchButtonToggled(bool on) { QWidget *bottomContainer = widget(1); - if (!on) + if (!on) { m_container_height = bottomContainer->height() + handleWidth() /* ハンドル幅 */; - + m_container_width = m_viewer->width() + 13; + } bottomContainer->setVisible(on); - QDialog *popup = dynamic_cast(parentWidget()); - if (popup) { + DockWidget *popup = dynamic_cast(parentWidget()); + if (popup && popup->isFloating()) { QRect geom = popup->geometry(); int height_change = (on) ? m_container_height : -m_container_height; + int width_change = 0; + + if (on && m_container_width > geom.width()) + width_change = m_container_width - geom.width(); - geom.setSize(geom.size() + QSize(0, height_change)); + geom.setSize(geom.size() + QSize(width_change, height_change)); popup->setGeometry(geom); popup->update(); } diff --git a/toonz/sources/toonzqt/gutil.cpp b/toonz/sources/toonzqt/gutil.cpp index 8c5e4c9..6e32a86 100644 --- a/toonz/sources/toonzqt/gutil.cpp +++ b/toonz/sources/toonzqt/gutil.cpp @@ -387,7 +387,7 @@ bool isResourceOrFolder(const QUrl &url) { bool acceptResourceDrop(const QList &urls) { int count = 0; - foreach (const QUrl &url, urls) { + for (const QUrl &url : urls) { if (isResource(url)) ++count; else @@ -401,7 +401,7 @@ bool acceptResourceDrop(const QList &urls) { bool acceptResourceOrFolderDrop(const QList &urls) { int count = 0; - foreach (const QUrl &url, urls) { + for (const QUrl &url : urls) { if (isResourceOrFolder(url)) ++count; else diff --git a/toonz/sources/toonzqt/imageutils.cpp b/toonz/sources/toonzqt/imageutils.cpp index 4fb2c16..34fecdb 100644 --- a/toonz/sources/toonzqt/imageutils.cpp +++ b/toonz/sources/toonzqt/imageutils.cpp @@ -215,7 +215,7 @@ void premultiply(const TFilePath &levelPath) { /* if (!isMovie && lr->getImageInfo()->m_samplePerPixel!=4) { -QMessageBox::information(0, QString("ERROR"), QString("Only rgbm images can be +QMessageBox::information(0, QString("ERROR"), QString("Only rgba images can be premultiplied!")); return; } @@ -801,16 +801,17 @@ double getQuantizedZoomFactor(double zf, bool forward) { namespace { -void getViewerShortcuts(int &zoomIn, int &zoomOut, int &zoomReset, int &zoomFit, +void getViewerShortcuts(int &zoomIn, int &zoomOut, int &viewReset, int &zoomFit, int &showHideFullScreen, int &actualPixelSize, - int &flipX, int &flipY) { + int &flipX, int &flipY, int &zoomReset, + int &rotateReset, int &positionReset) { CommandManager *cManager = CommandManager::instance(); zoomIn = cManager->getKeyFromShortcut(cManager->getShortcutFromId(V_ZoomIn)); zoomOut = cManager->getKeyFromShortcut(cManager->getShortcutFromId(V_ZoomOut)); - zoomReset = - cManager->getKeyFromShortcut(cManager->getShortcutFromId(V_ZoomReset)); + viewReset = + cManager->getKeyFromShortcut(cManager->getShortcutFromId(V_ViewReset)); zoomFit = cManager->getKeyFromShortcut(cManager->getShortcutFromId(V_ZoomFit)); showHideFullScreen = cManager->getKeyFromShortcut( @@ -819,6 +820,12 @@ void getViewerShortcuts(int &zoomIn, int &zoomOut, int &zoomReset, int &zoomFit, cManager->getShortcutFromId(V_ActualPixelSize)); flipX = cManager->getKeyFromShortcut(cManager->getShortcutFromId(V_FlipX)); flipY = cManager->getKeyFromShortcut(cManager->getShortcutFromId(V_FlipY)); + zoomReset = + cManager->getKeyFromShortcut(cManager->getShortcutFromId(V_ZoomReset)); + rotateReset = + cManager->getKeyFromShortcut(cManager->getShortcutFromId(V_RotateReset)); + positionReset = cManager->getKeyFromShortcut( + cManager->getShortcutFromId(V_PositionReset)); } } // namespace @@ -833,10 +840,11 @@ ShortcutZoomer::ShortcutZoomer(QWidget *zoomingWidget) //-------------------------------------------------------------------------- bool ShortcutZoomer::exec(QKeyEvent *event) { - int zoomInKey, zoomOutKey, zoomResetKey, zoomFitKey, showHideFullScreenKey, - actualPixelSize, flipX, flipY; - getViewerShortcuts(zoomInKey, zoomOutKey, zoomResetKey, zoomFitKey, - showHideFullScreenKey, actualPixelSize, flipX, flipY); + int zoomInKey, zoomOutKey, viewResetKey, zoomFitKey, showHideFullScreenKey, + actualPixelSize, flipX, flipY, zoomReset, rotateReset, positionReset; + getViewerShortcuts(zoomInKey, zoomOutKey, viewResetKey, zoomFitKey, + showHideFullScreenKey, actualPixelSize, flipX, flipY, + zoomReset, rotateReset, positionReset); int key = event->key(); if (key == Qt::Key_Control || key == Qt::Key_Shift || key == Qt::Key_Alt) @@ -855,13 +863,22 @@ bool ShortcutZoomer::exec(QKeyEvent *event) { : (key == zoomFitKey) ? fit() : (key == zoomInKey || key == zoomOutKey || - key == zoomResetKey) + key == viewResetKey) ? zoom(key == zoomInKey, - key == zoomResetKey) + key == viewResetKey) : (key == flipX) ? setFlipX() - : (key == flipY) ? setFlipY() - : false; + : (key == flipY) + ? setFlipY() + : (key == zoomReset) + ? resetZoom() + : (key == rotateReset) + ? resetRotation() + : (key == + positionReset) + ? resetPosition() + : false; + ; } //********************************************************************************************* diff --git a/toonz/sources/toonzqt/infoviewer.cpp b/toonz/sources/toonzqt/infoviewer.cpp index a51e96a..feff475 100644 --- a/toonz/sources/toonzqt/infoviewer.cpp +++ b/toonz/sources/toonzqt/infoviewer.cpp @@ -157,7 +157,7 @@ void InfoViewerImp::onSliderChanged() { namespace { void setLabelStyle(QLabel *l) { l->setObjectName("TitleTxtLabel"); } -} +} // namespace //---------------------------------------------------------------- @@ -171,10 +171,10 @@ void InfoViewerImp::create(int index, QString str) { InfoViewerImp::InfoViewerImp() : m_palette(0) - , m_framesLabel("Current Frame: ") + , m_framesLabel(QObject::tr("Current Frame: ")) , m_framesSlider() , m_history() - , m_historyLabel("File History") { + , m_historyLabel(QObject::tr("File History")) { setLabelStyle(&m_framesLabel); TLevelReader::getSupportedFormats(m_formats); @@ -370,7 +370,7 @@ void InfoViewerImp::setImageInfo() { m_separator1.hide(); const TContentHistory *ch = 0; - if (lr) ch = lr->getContentHistory(); + if (lr) ch = lr->getContentHistory(); if (ch) { QString str = ch->serialize(); diff --git a/toonz/sources/toonzqt/lutcalibrator.cpp b/toonz/sources/toonzqt/lutcalibrator.cpp index 3eed8b4..acbc173 100644 --- a/toonz/sources/toonzqt/lutcalibrator.cpp +++ b/toonz/sources/toonzqt/lutcalibrator.cpp @@ -20,7 +20,7 @@ inline bool execWarning(const QString& s) { DVGui::MsgBox(DVGui::WARNING, s); return false; } -}; +}; // namespace #ifdef WIN32 @@ -161,13 +161,14 @@ QStringList getMonitorNames() { return nameList; } -}; +}; // namespace #endif //----------------------------------------------------------------------------- void LutCalibrator::initialize() { initializeOpenGLFunctions(); + m_isInitialized = true; if (!LutManager::instance()->isValid()) return; @@ -191,6 +192,7 @@ void LutCalibrator::initialize() { //----------------------------------------------------------------------------- void LutCalibrator::cleanup() { + m_isInitialized = false; if (!isValid()) return; // release shader if (m_shader.program) { @@ -213,6 +215,7 @@ void LutCalibrator::cleanup() { delete m_lutTex; m_lutTex = NULL; } + m_isValid = false; } //----------------------------------------------------------------------------- @@ -321,10 +324,10 @@ void LutCalibrator::onEndDraw(QOpenGLFramebufferObject* fbo) { GLuint textureId = fbo->texture(); glEnable(GL_TEXTURE_2D); - glActiveTexture(GL_TEXTURE4); + glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, textureId); - glActiveTexture(GL_TEXTURE5); + glActiveTexture(GL_TEXTURE2); m_lutTex->bind(); glPushMatrix(); @@ -332,9 +335,9 @@ void LutCalibrator::onEndDraw(QOpenGLFramebufferObject* fbo) { m_shader.program->bind(); m_shader.program->setUniformValue(m_shader.texUniform, - 4); // use texture unit 4 + 1); // use texture unit 1 m_shader.program->setUniformValue(m_shader.lutUniform, - 5); // use texture unit 5 + 2); // use texture unit 2 GLfloat size = (GLfloat)LutManager::instance()->meshSize(); m_shader.program->setUniformValue(m_shader.lutSizeUniform, size, size, size); @@ -355,6 +358,8 @@ void LutCalibrator::onEndDraw(QOpenGLFramebufferObject* fbo) { m_shader.program->release(); glPopMatrix(); + + glActiveTexture(GL_TEXTURE0); // reset the active texture unit to 0 glDisable(GL_TEXTURE_2D); assert((glGetError()) == GL_NO_ERROR); @@ -558,7 +563,7 @@ void LutManager::convert(float& r, float& g, float& b) { for (int bb = 0; bb < 2; bb++) { float* val = &m_lut.data[locals::getCoord( index[0][rr], index[1][gg], index[2][bb], m_lut.meshSize)]; - for (int chan = 0; chan < 3; chan++, val++) + for (int chan = 0; chan < 3; chan++, val++) vertex_color[rr][gg][bb][chan] = *val; } float result[3]; diff --git a/toonz/sources/toonzqt/paletteviewer.cpp b/toonz/sources/toonzqt/paletteviewer.cpp index ddb8ace..70ea76a 100644 --- a/toonz/sources/toonzqt/paletteviewer.cpp +++ b/toonz/sources/toonzqt/paletteviewer.cpp @@ -22,6 +22,7 @@ // TnzCore includes #include "tconvert.h" +#include "tsystem.h" // Qt includes #include @@ -39,40 +40,40 @@ using namespace PaletteViewerGUI; //============================================================================= /*! \class PaletteViewer - \brief The PaletteViewer class provides an object to view and - manage palette view. - - Inherits \b QWidget. - - This object allows to show and manage palette; it's possible - distinguish three - view type, class can show: current level palette, current studio - palette or - current cleanup palette, using setPalette() to set palette - viewer. - The object is composed of a vertical layout with three widget: - \li a tab bar \b PaletteViewerGUI::TabBar in which are displayed - palette page - \b createTabBar(); - \li a central frame \b PaletteViewerGUI::PageViewer in which are - displayed - all style of current page in palette - \li a button bar, \b createToolBar(), \b createPaletteToolBar() - and \b createSavePaletteToolBar(); - - A collection of method allows you to manage this object and its - interaction - with palette. - */ +\brief The PaletteViewer class provides an object to view and +manage palette view. + +Inherits \b QWidget. + +This object allows to show and manage palette; it's possible +distinguish three +view type, class can show: current level palette, current studio +palette or +current cleanup palette, using setPalette() to set palette +viewer. +The object is composed of a vertical layout with three widget: +\li a tab bar \b PaletteViewerGUI::TabBar in which are displayed +palette page +\b createTabBar(); +\li a central frame \b PaletteViewerGUI::PageViewer in which are +displayed +all style of current page in palette +\li a button bar, \b createToolBar(), \b createPaletteToolBar() +and \b createSavePaletteToolBar(); + +A collection of method allows you to manage this object and its +interaction +with palette. +*/ /*! \fn const TPaletteP PaletteViewer::&getPalette() const - Return current viewer palette. - */ +Return current viewer palette. +*/ /*! \fn void PaletteViewer::createToolBar() - Create down button bar. - */ +Create down button bar. +*/ /*! \fn void PaletteViewer::updateToolBar() - Update button bar. - */ +Update button bar. +*/ PaletteViewer::PaletteViewer(QWidget *parent, PaletteViewType viewType, bool hasSaveToolBar, bool hasPageCommand, bool hasPasteColors) @@ -115,7 +116,7 @@ PaletteViewer::PaletteViewer(QWidget *parent, PaletteViewType viewType, toolbarScrollWidget->setObjectName( "ToolBarContainer"); // Toonz's qss files are instructed to leave a - // 1px grey margin on top for scroll buttons + // 1px grey margin on top for scroll buttons QWidget *toolBarWidget = new QWidget; // children of this parent name. toolbarScrollWidget->setWidget(toolBarWidget); toolBarWidget->setSizePolicy(QSizePolicy::MinimumExpanding, @@ -169,6 +170,8 @@ PaletteViewer::PaletteViewer(QWidget *parent, PaletteViewType viewType, SLOT(movePage(int, int))); connect(m_pageViewer, SIGNAL(changeWindowTitleSignal()), this, SLOT(changeWindowTitle())); + connect(m_pageViewer, SIGNAL(switchToPage(int)), this, + SLOT(onSwitchToPage(int))); changeWindowTitle(); @@ -235,7 +238,7 @@ void PaletteViewer::setXsheetHandle(TXsheetHandle *xsheetHandle) { //----------------------------------------------------------------------------- /*!for clearing level cache after "paste style" command called from style - * selection +* selection */ void PaletteViewer::setLevelHandle(TXshLevelHandle *levelHandle) { m_pageViewer->setLevelHandle(levelHandle); @@ -437,8 +440,8 @@ void PaletteViewer::createPaletteToolBar() { //----------------------------------------------------------------------------- /*! Create left part of button bar; insert different actions in according to - current viewer palette type. - */ +current viewer palette type. +*/ void PaletteViewer::createSavePaletteToolBar() { m_savePaletteToolBar->clear(); m_savePaletteToolBar->setMovable(false); @@ -515,7 +518,7 @@ void PaletteViewer::updateTabBar() { //----------------------------------------------------------------------------- /*! Update right button bar, enable its action if current viewer palette is - * empty. +* empty. */ void PaletteViewer::updatePaletteToolBar() { if (!m_paletteToolBar) return; @@ -541,7 +544,7 @@ void PaletteViewer::updatePaletteToolBar() { //----------------------------------------------------------------------------- /*! Update left button bar, enable its action if current viewer palette is - * empty. +* empty. */ void PaletteViewer::updateSavePaletteToolBar() { if (!m_savePaletteToolBar) return; @@ -669,8 +672,8 @@ void PaletteViewer::hideEvent(QHideEvent *) { //----------------------------------------------------------------------------- /*! If currente palette viewer exist verify event data, if is a PaletteData or - has urls accept event. - */ +has urls accept event. +*/ void PaletteViewer::dragEnterEvent(QDragEnterEvent *event) { TPalette *palette = getPalette(); if (!palette || m_viewType == CLEANUP_PALETTE) return; @@ -682,7 +685,7 @@ void PaletteViewer::dragEnterEvent(QDragEnterEvent *event) { // Sto "draggando" stili. if (paletteData->hasStyleIndeces()) { m_pageViewer->createDropPage(); - if (!palette) m_pagesBar->setCurrentIndex(palette->getPageCount() - 1); + if (!palette) onSwitchToPage(palette->getPageCount() - 1); } // Accetto l'evento event->acceptProposedAction(); @@ -735,8 +738,11 @@ void PaletteViewer::dropEvent(QDropEvent *event) { if (ret == 0) return; } StudioPaletteCmd::loadIntoCurrentPalette(m_paletteHandle, path); - } else + } else { + int nextPageIndex = m_paletteHandle->getPalette()->getPageCount(); StudioPaletteCmd::mergeIntoCurrentPalette(m_paletteHandle, path); + if (!i) onSwitchToPage(nextPageIndex); + } if (loadPalette) { TFilePath refImagePath = @@ -770,8 +776,11 @@ void PaletteViewer::dropEvent(QDropEvent *event) { if (ret == 0) return; } StudioPaletteCmd::loadIntoCurrentPalette(m_paletteHandle, palette); - } else + } else { + int nextPageIndex = m_paletteHandle->getPalette()->getPageCount(); StudioPaletteCmd::mergeIntoCurrentPalette(m_paletteHandle, palette); + onSwitchToPage(nextPageIndex); + } } } @@ -812,8 +821,8 @@ void PaletteViewer::setPageView(int currentIndexPage) { //----------------------------------------------------------------------------- /*! If current palette viewer is not empty create emit a signal to create new - palette page. - */ +palette page. +*/ void PaletteViewer::addNewPage() { TPalette *palette = getPalette(); if (palette) { @@ -821,14 +830,15 @@ void PaletteViewer::addNewPage() { updateTabBar(); PaletteCmd::addPage(m_paletteHandle); + onSwitchToPage(m_paletteHandle->getPalette()->getPageCount() - 1); } } //----------------------------------------------------------------------------- /*! Create a new style in current page view of current palette viewer emit a - signal - to create a new style. - */ +signal +to create a new style. +*/ void PaletteViewer::addNewColor() { if (!getPalette() || getPalette()->isLocked()) return; @@ -867,8 +877,8 @@ void PaletteViewer::deletePage() { //----------------------------------------------------------------------------- /*! If current palette view is studio palette and palette has a global name - save current viewer palette in studio palette. - */ +save current viewer palette in studio palette. +*/ void PaletteViewer::saveStudioPalette() { StudioPalette *sp = StudioPalette::instance(); TPalette *palette = getPalette(); @@ -894,8 +904,15 @@ void PaletteViewer::saveStudioPalette() { int ret = DVGui::MsgBox(question, QObject::tr("Overwrite"), QObject::tr("Don't Overwrite"), 0); if (ret == 2 || ret == 0) return; - StudioPalette::instance()->save(palettePath, palette); - palette->setDirtyFlag(false); + try { + StudioPalette::instance()->save(palettePath, palette); + palette->setDirtyFlag(false); + } catch (TSystemException se) { + QApplication::restoreOverrideCursor(); + DVGui::warning(QString::fromStdWString(se.getMessage())); + return; + } catch (...) { + } } } return; @@ -941,7 +958,7 @@ void PaletteViewer::onColorStyleSwitched() { if (indexInPage == -1) { if (!palette->getStylePage(styleIndex)) return; int pageIndex = palette->getStylePage(styleIndex)->getIndex(); - m_pagesBar->setCurrentIndex(pageIndex); + onSwitchToPage(pageIndex); indexInPage = m_pageViewer->getPage()->search(styleIndex); } @@ -959,7 +976,7 @@ void PaletteViewer::onColorStyleSwitched() { void PaletteViewer::onPaletteChanged() { int index = m_pagesBar->currentIndex(); updateTabBar(); - m_pagesBar->setCurrentIndex(index); + onSwitchToPage(index); m_pageViewer->update(); @@ -973,6 +990,17 @@ void PaletteViewer::onPaletteChanged() { void PaletteViewer::onPaletteSwitched() { updateView(); + int pageIndex = 0; + if (m_paletteHandle) { + TPalette *palette = m_paletteHandle->getPalette(); + if (palette) { + int currentStyleId = palette->getCurrentStyleId(); + TPalette::Page *page = palette->getStylePage(currentStyleId); + if (page) pageIndex = page->getIndex(); + } + } + onSwitchToPage(pageIndex); + // update GUI according to the "lock" property if (getPalette() && m_viewType != CLEANUP_PALETTE && (m_lockPaletteAction || m_lockPaletteToolButton)) { @@ -1031,8 +1059,8 @@ void PaletteViewer::onNameDisplayMode(QAction *action) { //----------------------------------------------------------------------------- /*! If current view type is LEVEL_PALETTE add to window title current level - name and current frame. - */ +name and current frame. +*/ void PaletteViewer::changeWindowTitle() { QString name = tr("Palette"); QWidget *titleOwner; @@ -1074,11 +1102,11 @@ void PaletteViewer::changeWindowTitle() { //----------------------------------------------------------------------------- /*! Move palette view page from \b srcIndex page index to \b dstIndex page - * index. +* index. */ void PaletteViewer::movePage(int srcIndex, int dstIndex) { PaletteCmd::movePalettePage(m_paletteHandle, srcIndex, dstIndex); - m_pagesBar->setCurrentIndex(dstIndex); + onSwitchToPage(dstIndex); } //----------------------------------------------------------------------------- @@ -1093,3 +1121,7 @@ void PaletteViewer::setIsLocked(bool lock) { // notify for updating the style editor m_paletteHandle->notifyPaletteLockChanged(); } + +void PaletteViewer::onSwitchToPage(int pageIndex) { + m_pagesBar->setCurrentIndex(pageIndex); +} diff --git a/toonz/sources/toonzqt/paletteviewergui.cpp b/toonz/sources/toonzqt/paletteviewergui.cpp index 2bb782a..c3450ed 100644 --- a/toonz/sources/toonzqt/paletteviewergui.cpp +++ b/toonz/sources/toonzqt/paletteviewergui.cpp @@ -212,7 +212,12 @@ TFrameHandle *PageViewer::getFrameHandle() const { return m_frameHandle; } //----------------------------------------------------------------------------- void PageViewer::setCurrentStyleIndex(int index) { - getPaletteHandle()->setStyleIndex(index); + // When clicking and switching between studio palette and level palette, the + // signal broadcastColorStyleSwitched is not emitted if the clicked style is + // previously selected one. + // Therefore here I introduced the "forceEmit" flag here in order to emit the + // signal whenever the style is clicked. + getPaletteHandle()->setStyleIndex(index, true); } //----------------------------------------------------------------------------- @@ -1042,7 +1047,10 @@ void PageViewer::addNewColor() { //----------------------------------------------------------------------------- void PageViewer::addNewPage() { - PaletteCmd::addPage(getPaletteHandle()); + TPaletteHandle *paletteHandle = getPaletteHandle(); + PaletteCmd::addPage(paletteHandle); + if (paletteHandle) + emit switchToPage(paletteHandle->getPalette()->getPageCount() - 1); update(); } diff --git a/toonz/sources/toonzqt/paramfield.cpp b/toonz/sources/toonzqt/paramfield.cpp index 3c1f114..1b746fb 100644 --- a/toonz/sources/toonzqt/paramfield.cpp +++ b/toonz/sources/toonzqt/paramfield.cpp @@ -1578,8 +1578,7 @@ void FontParamField::findStyles(const QFont &font) { QString currentItem = m_styleCombo->currentText(); m_styleCombo->clear(); - QString style; - foreach (style, fontDatabase.styles(font.family())) + for (const QString &style : fontDatabase.styles(font.family())) m_styleCombo->addItem(style); int styleIndex = m_styleCombo->findText(currentItem); diff --git a/toonz/sources/toonzqt/planeviewer.cpp b/toonz/sources/toonzqt/planeviewer.cpp index 2ec1559..11f247e 100644 --- a/toonz/sources/toonzqt/planeviewer.cpp +++ b/toonz/sources/toonzqt/planeviewer.cpp @@ -4,6 +4,10 @@ // TnzQt includes #include "toonzqt/imageutils.h" +#include "toonzqt/menubarcommand.h" +#include "toonzqt/viewcommandids.h" + +#include "../toonz/menubarcommandids.h" // TnzLib includes #include "toonz/stage.h" @@ -23,6 +27,7 @@ #include #include #include +#include //#define PRINT_AFF @@ -37,6 +42,7 @@ struct PlaneViewerZoomer final : public ImageUtils::ShortcutZoomer { private: bool zoom(bool zoomin, bool resetZoom) override; + bool fit() override; }; //======================================================================== @@ -44,12 +50,19 @@ private: bool PlaneViewerZoomer::zoom(bool zoomin, bool resetZoom) { PlaneViewer &planeViewer = static_cast(*getWidget()); - resetZoom ? planeViewer.resetView() - : zoomin ? planeViewer.zoomIn() : planeViewer.zoomOut(); + resetZoom ? planeViewer.resetView() : zoomin ? planeViewer.zoomIn() + : planeViewer.zoomOut(); return true; } +bool PlaneViewerZoomer::fit() { + PlaneViewer &planeViewer = static_cast(*getWidget()); + + planeViewer.fitView(); + + return true; +} } // namespace //========================================================================================= @@ -60,9 +73,17 @@ PlaneViewer::PlaneViewer(QWidget *parent) , m_xpos(0) , m_ypos(0) , m_aff() // initialized at the first resize - , m_chessSize(40.0) { + , m_chessSize(40.0) + , m_firstDraw(true) + , m_dpiX(0.0) + , m_dpiY(0.0) { m_zoomRange[0] = 1e-3, m_zoomRange[1] = 1024.0; setBgColor(TPixel32(235, 235, 235), TPixel32(235, 235, 235)); + + setAttribute(Qt::WA_AcceptTouchEvents); + grabGesture(Qt::SwipeGesture); + grabGesture(Qt::PanGesture); + grabGesture(Qt::PinchGesture); } //========================================================================================= @@ -162,6 +183,11 @@ void PlaneViewer::resizeGL(int width, int height) { //========================================================================================= void PlaneViewer::mouseMoveEvent(QMouseEvent *event) { + if (m_gestureActive && m_touchDevice == QTouchDevice::TouchScreen && + !m_stylusUsed) { + return; + } + QPoint curPos = event->pos() * getDevPixRatio(); if (event->buttons() & Qt::MidButton) moveView(curPos.x() - m_xpos, height() - curPos.y() - m_ypos); @@ -172,18 +198,84 @@ void PlaneViewer::mouseMoveEvent(QMouseEvent *event) { //------------------------------------------------------ void PlaneViewer::mousePressEvent(QMouseEvent *event) { + // qDebug() << "[mousePressEvent]"; + if (m_gestureActive && m_touchDevice == QTouchDevice::TouchScreen && + !m_stylusUsed) { + return; + } + m_xpos = event->x() * getDevPixRatio(); m_ypos = height() - event->y() * getDevPixRatio(); } //------------------------------------------------------ +void PlaneViewer::mouseDoubleClickEvent(QMouseEvent *event) { + // qDebug() << "[mouseDoubleClickEvent]"; + if (m_gestureActive && !m_stylusUsed) { + m_gestureActive = false; + fitView(); + return; + } +} + +//------------------------------------------------------ + +void PlaneViewer::mouseReleaseEvent(QMouseEvent *event) { + m_gestureActive = false; + m_zooming = false; + m_panning = false; + m_stylusUsed = false; +} + +//------------------------------------------------------ + void PlaneViewer::wheelEvent(QWheelEvent *event) { - TPointD pos(event->x() * getDevPixRatio(), - height() - event->y() * getDevPixRatio()); - double zoom_par = 1 + event->delta() * 0.001; + int delta = 0; + switch (event->source()) { + case Qt::MouseEventNotSynthesized: { + if (event->modifiers() & Qt::AltModifier) + delta = event->angleDelta().x(); + else + delta = event->angleDelta().y(); + break; + } + + case Qt::MouseEventSynthesizedBySystem: { + QPoint numPixels = event->pixelDelta(); + QPoint numDegrees = event->angleDelta() / 8; + if (!numPixels.isNull()) { + delta = event->pixelDelta().y(); + } else if (!numDegrees.isNull()) { + QPoint numSteps = numDegrees / 15; + delta = numSteps.y(); + } + break; + } + + default: // Qt::MouseEventSynthesizedByQt, + // Qt::MouseEventSynthesizedByApplication + { + std::cout << "not supported event: Qt::MouseEventSynthesizedByQt, " + "Qt::MouseEventSynthesizedByApplication" + << std::endl; + break; + } + + } // end switch + + if (abs(delta) > 0) { + if ((m_gestureActive == true && + m_touchDevice == QTouchDevice::TouchScreen) || + m_gestureActive == false) { + TPointD pos(event->x() * getDevPixRatio(), + height() - event->y() * getDevPixRatio()); + double zoom_par = 1 + event->delta() * 0.001; - zoomView(pos.x, pos.y, zoom_par); + zoomView(pos.x, pos.y, zoom_par); + } + } + event->accept(); } //------------------------------------------------------ @@ -199,6 +291,201 @@ void PlaneViewer::keyPressEvent(QKeyEvent *event) { //! Disposes of the auxiliary internal rasterBuffer(). void PlaneViewer::hideEvent(QHideEvent *event) { m_rasterBuffer = TRaster32P(); + m_dpiX = 0.0; // reset dpi + m_dpiY = 0.0; +} + +//------------------------------------------------------------------ + +void PlaneViewer::contextMenuEvent(QContextMenuEvent *event) { + QMenu *menu = new QMenu(this); + + QAction *reset = menu->addAction(tr("Reset View")); + reset->setShortcut( + QKeySequence(CommandManager::instance()->getKeyFromId(V_ZoomReset))); + connect(reset, SIGNAL(triggered()), SLOT(resetView())); + + QAction *fit = menu->addAction(tr("Fit To Window")); + fit->setShortcut( + QKeySequence(CommandManager::instance()->getKeyFromId(V_ZoomFit))); + connect(fit, SIGNAL(triggered()), SLOT(fitView())); + + menu->exec(event->globalPos()); + + delete menu; + update(); +} + +//------------------------------------------------------------------ + +void PlaneViewer::tabletEvent(QTabletEvent *e) { + // qDebug() << "[tabletEvent]"; + if (e->type() == QTabletEvent::TabletPress) { + m_stylusUsed = e->pointerType() ? true : false; + } else if (e->type() == QTabletEvent::TabletRelease) { + m_stylusUsed = false; + } + + e->accept(); +} + +//------------------------------------------------------------------ + +void PlaneViewer::gestureEvent(QGestureEvent *e) { + // qDebug() << "[gestureEvent]"; + m_gestureActive = false; + if (QGesture *swipe = e->gesture(Qt::SwipeGesture)) { + m_gestureActive = true; + } else if (QGesture *pan = e->gesture(Qt::PanGesture)) { + m_gestureActive = true; + } + if (QGesture *pinch = e->gesture(Qt::PinchGesture)) { + QPinchGesture *gesture = static_cast(pinch); + QPinchGesture::ChangeFlags changeFlags = gesture->changeFlags(); + QPoint firstCenter = gesture->centerPoint().toPoint(); + if (m_touchDevice == QTouchDevice::TouchScreen) + firstCenter = mapFromGlobal(firstCenter); + + if (gesture->state() == Qt::GestureStarted) { + m_gestureActive = true; + } else if (gesture->state() == Qt::GestureFinished) { + m_gestureActive = false; + m_zooming = false; + m_scaleFactor = 0.0; + } else { + if (changeFlags & QPinchGesture::ScaleFactorChanged) { + double scaleFactor = gesture->scaleFactor(); + // the scale factor makes for too sensitive scaling + // divide the change in half + if (scaleFactor > 1) { + double decimalValue = scaleFactor - 1; + decimalValue /= 1.5; + scaleFactor = 1 + decimalValue; + } else if (scaleFactor < 1) { + double decimalValue = 1 - scaleFactor; + decimalValue /= 1.5; + scaleFactor = 1 - decimalValue; + } + if (!m_zooming) { + double delta = scaleFactor - 1; + m_scaleFactor += delta; + if (m_scaleFactor > .2 || m_scaleFactor < -.2) { + m_zooming = true; + } + } + if (m_zooming) { + zoomView(firstCenter.x() * getDevPixRatio(), + firstCenter.y() * getDevPixRatio(), scaleFactor); + m_panning = false; + } + m_gestureActive = true; + } + + if (changeFlags & QPinchGesture::CenterPointChanged) { + QPointF centerDelta = (gesture->centerPoint() * getDevPixRatio()) - + (gesture->lastCenterPoint() * getDevPixRatio()); + if (centerDelta.manhattanLength() > 1) { + // panQt(centerDelta.toPoint()); + } + m_gestureActive = true; + } + } + } + e->accept(); +} + +void PlaneViewer::touchEvent(QTouchEvent *e, int type) { + // qDebug() << "[touchEvent]"; + if (type == QEvent::TouchBegin) { + m_touchActive = true; + m_firstPanPoint = e->touchPoints().at(0).pos(); + // obtain device type + m_touchDevice = e->device()->type(); + } else if (m_touchActive) { + // touchpads must have 2 finger panning for tools and navigation to be + // functional on other devices, 1 finger panning is preferred + if ((e->touchPoints().count() == 2 && + m_touchDevice == QTouchDevice::TouchPad) || + (e->touchPoints().count() == 1 && + m_touchDevice == QTouchDevice::TouchScreen)) { + QTouchEvent::TouchPoint panPoint = e->touchPoints().at(0); + if (!m_panning) { + QPointF deltaPoint = panPoint.pos() - m_firstPanPoint; + // minimize accidental and jerky zooming/rotating during 2 finger + // panning + if ((deltaPoint.manhattanLength() > 100) && !m_zooming) { + m_panning = true; + } + } + if (m_panning) { + QPoint curPos = panPoint.pos().toPoint() * getDevPixRatio(); + QPoint lastPos = panPoint.lastPos().toPoint() * getDevPixRatio(); + QPoint centerDelta = curPos - lastPos; + moveView(centerDelta.x(), -centerDelta.y()); + } + } + } + if (type == QEvent::TouchEnd || type == QEvent::TouchCancel) { + m_touchActive = false; + m_panning = false; + } + e->accept(); +} + +bool PlaneViewer::event(QEvent *e) { + /* + switch (e->type()) { + case QEvent::TabletPress: { + QTabletEvent *te = static_cast(e); + qDebug() << "[event] TabletPress: pointerType(" << te->pointerType() + << ") device(" << te->device() << ")"; + } break; + case QEvent::TabletRelease: + qDebug() << "[event] TabletRelease"; + break; + case QEvent::TouchBegin: + qDebug() << "[event] TouchBegin"; + break; + case QEvent::TouchEnd: + qDebug() << "[event] TouchEnd"; + break; + case QEvent::TouchCancel: + qDebug() << "[event] TouchCancel"; + break; + case QEvent::MouseButtonPress: + qDebug() << "[event] MouseButtonPress"; + break; + case QEvent::MouseButtonDblClick: + qDebug() << "[event] MouseButtonDblClick"; + break; + case QEvent::MouseButtonRelease: + qDebug() << "[event] MouseButtonRelease"; + break; + case QEvent::Gesture: + qDebug() << "[event] Gesture"; + break; + default: + break; + } + */ + + if (e->type() == QEvent::Gesture && + CommandManager::instance() + ->getAction(MI_TouchGestureControl) + ->isChecked()) { + gestureEvent(static_cast(e)); + return true; + } + if ((e->type() == QEvent::TouchBegin || e->type() == QEvent::TouchEnd || + e->type() == QEvent::TouchCancel || e->type() == QEvent::TouchUpdate) && + CommandManager::instance() + ->getAction(MI_TouchGestureControl) + ->isChecked()) { + touchEvent(static_cast(e), e->type()); + m_gestureActive = true; + return true; + } + return GLWidgetForHighDpi::event(e); } //========================================================================================= @@ -208,6 +495,22 @@ void PlaneViewer::resetView() { update(); } +void PlaneViewer::fitView() { + if (m_imageBounds.isEmpty()) return; + m_aff = TTranslation(0.5 * width(), 0.5 * height()); + + double imageScale = std::min(width() / (double)m_imageBounds.getLx(), + height() / (double)m_imageBounds.getLy()); + + m_aff = TScale(imageScale, imageScale); + if (m_dpiX != 0.0 && m_dpiY != 0.0) + m_aff *= TScale(m_dpiX / Stage::inch, m_dpiY / Stage::inch); + m_aff.a13 = 0.5 * width(); + m_aff.a23 = 0.5 * height(); + + update(); +} + //------------------------------------------------------ void PlaneViewer::setViewPos(double x, double y) { @@ -306,6 +609,16 @@ void PlaneViewer::draw(TRasterP ras, double dpiX, double dpiY, TPalette *pal) { TRaster32P aux(rasterBuffer()); + m_imageBounds = ras->getBounds(); + if (m_dpiX == 0.0 || m_dpiY == 0.0) { + m_dpiX = dpiX; + m_dpiY = dpiY; + } + if (m_firstDraw && !m_imageBounds.isEmpty()) { + m_firstDraw = false; + fitView(); + } + aux->lock(); ras->lock(); @@ -328,8 +641,8 @@ void PlaneViewer::draw(TRasterP ras, double dpiX, double dpiY, TPalette *pal) { } /*NOTE: - glRasterPos2d could be used, along glBitmap and glPixelZoom... - however, i've never been able to use them effectively... +glRasterPos2d could be used, along glBitmap and glPixelZoom... +however, i've never been able to use them effectively... */ //------------------------------------------------------ @@ -360,7 +673,15 @@ void PlaneViewer::draw(TVectorImageP vi) { TRectD bbox(vi->getBBox()); TRect bboxI(tfloor(bbox.x0), tfloor(bbox.y0), tceil(bbox.x1) - 1, tceil(bbox.y1) - 1); - + m_imageBounds = bboxI; + if (m_dpiX == 0.0 || m_dpiY == 0.0) { + m_dpiX = Stage::inch; + m_dpiY = Stage::inch; + } + if (m_firstDraw) { + m_firstDraw = false; + fitView(); + } TVectorRenderData rd(TAffine(), bboxI, vi->getPalette(), 0, true, true); tglDraw(rd, vi.getPointer()); } diff --git a/toonz/sources/toonzqt/plugin_param_traits.h b/toonz/sources/toonzqt/plugin_param_traits.h index beb1387..e59ed45 100644 --- a/toonz/sources/toonzqt/plugin_param_traits.h +++ b/toonz/sources/toonzqt/plugin_param_traits.h @@ -420,7 +420,7 @@ inline TSpectrumParam *param_factory_(const toonz_param_desc_t *desc) { keys[i].second = toPixel32( TPixelD(t.array[i].c0, t.array[i].c1, t.array[i].c2, t.array[i].m)); } - return new TSpectrumParam(t.points, keys.data()); + return new TSpectrumParam(keys); } else { return new TSpectrumParam(); /* use default constructor: デフォルトでは [black:white] の単純なものが設定される */ diff --git a/toonz/sources/toonzqt/schematicnode.cpp b/toonz/sources/toonzqt/schematicnode.cpp index b53c62f..20073bc 100644 --- a/toonz/sources/toonzqt/schematicnode.cpp +++ b/toonz/sources/toonzqt/schematicnode.cpp @@ -334,10 +334,9 @@ void SchematicToggle_SplineOptions::paint( if (m_state != 0) { QIcon &pix = (m_state == 2 && !m_imageOn2.isNull()) ? m_imageOn2 : m_imageOn; - QRect sourceRect = - scene()->views()[0]->matrix().mapRect(QRect(0, 0, 18, 17)); - QPixmap redPm = pix.pixmap(sourceRect.size()); - QRect newRect = QRect(0, 0, sourceRect.width() * getDevPixRatio(), + QRect sourceRect = scene()->views()[0]->matrix().mapRect(rect.toRect()); + QPixmap redPm = pix.pixmap(sourceRect.size()); + QRect newRect = QRect(0, 0, sourceRect.width() * getDevPixRatio(), sourceRect.height() * getDevPixRatio()); painter->drawPixmap(rect, redPm, newRect); } @@ -564,6 +563,12 @@ void SchematicLink::mousePressEvent(QGraphicsSceneMouseEvent *me) { QPointF pos = me->scenePos(); SchematicPort *startPort = getStartPort(); SchematicPort *endPort = getEndPort(); + + if (!startPort || !endPort) { + me->ignore(); + return; + } + if (startPort && endPort) { QRectF startRect = startPort->boundingRect(); startRect.moveTopLeft(startPort->scenePos()); diff --git a/toonz/sources/toonzqt/schematicviewer.cpp b/toonz/sources/toonzqt/schematicviewer.cpp index db61b92..080723e 100644 --- a/toonz/sources/toonzqt/schematicviewer.cpp +++ b/toonz/sources/toonzqt/schematicviewer.cpp @@ -52,8 +52,16 @@ class SchematicZoomer final : public ImageUtils::ShortcutZoomer { public: SchematicZoomer(QWidget *parent) : ShortcutZoomer(parent) {} - bool zoom(bool zoomin, bool resetZoom) override { - static_cast(getWidget())->zoomQt(zoomin, resetZoom); + bool zoom(bool zoomin, bool resetView) override { + static_cast(getWidget())->zoomQt(zoomin, resetView); + return true; + } + bool resetZoom() override { + static_cast(getWidget())->normalizeScene(); + return true; + } + bool fit() override { + static_cast(getWidget())->fitScene(); return true; } }; @@ -95,7 +103,7 @@ void SchematicScene::hideEvent(QHideEvent *se) { //------------------------------------------------------------------ /*! Removes and then deletes all item in the scene. -*/ + */ void SchematicScene::clearAllItems() { clearSelection(); @@ -143,7 +151,7 @@ void SchematicScene::clearAllItems() { //------------------------------------------------------------------ /*! check if any item exists in the rect -*/ + */ bool SchematicScene::isAnEmptyZone(const QRectF &rect) { QList allItems = items(); for (auto const level : allItems) { @@ -207,7 +215,7 @@ SchematicSceneViewer::~SchematicSceneViewer() {} //------------------------------------------------------------------ /*! Reimplemets the QGraphicsView::mousePressEvent() -*/ + */ void SchematicSceneViewer::mousePressEvent(QMouseEvent *me) { m_buttonState = me->button(); m_oldWinPos = me->pos(); @@ -233,7 +241,7 @@ void SchematicSceneViewer::mousePressEvent(QMouseEvent *me) { //------------------------------------------------------------------ /*! Reimplemets the QGraphicsView::mouseMoveEvent() -*/ + */ void SchematicSceneViewer::mouseMoveEvent(QMouseEvent *me) { QPoint currWinPos = me->pos(); QPointF currScenePos = mapToScene(currWinPos); @@ -257,7 +265,7 @@ void SchematicSceneViewer::mouseMoveEvent(QMouseEvent *me) { //------------------------------------------------------------------ /*! Reimplemets the QGraphicsView::mouseReleaseEvent() -*/ + */ void SchematicSceneViewer::mouseReleaseEvent(QMouseEvent *me) { m_buttonState = Qt::NoButton; QGraphicsView::mouseReleaseEvent(me); @@ -276,7 +284,7 @@ void SchematicSceneViewer::keyPressEvent(QKeyEvent *ke) { //------------------------------------------------------------------ /*! Reimplemets the QGraphicsView::wheelEvent() -*/ + */ void SchematicSceneViewer::wheelEvent(QWheelEvent *me) { me->accept(); double factor = exp(me->delta() * 0.001); @@ -285,33 +293,38 @@ void SchematicSceneViewer::wheelEvent(QWheelEvent *me) { //------------------------------------------------------------------ -void SchematicSceneViewer::zoomQt(bool zoomin, bool resetZoom) { +void SchematicSceneViewer::zoomQt(bool zoomin, bool resetView) { + if (resetView) { + resetMatrix(); + // reseting will set view to the center of items bounding + centerOn(scene()->itemsBoundingRect().center()); + return; + } + #if QT_VERSION >= 0x050000 double scale2 = matrix().determinant(); #else double scale2 = matrix().det(); #endif - if (resetZoom || - ((scale2 < 100000 || !zoomin) && (scale2 > 0.001 * 0.05 || zoomin))) { + if ((scale2 < 100000 || !zoomin) && (scale2 > 0.001 * 0.05 || zoomin)) { double oldZoomScale = sqrt(scale2); - double zoomScale = resetZoom ? 1 : ImageUtils::getQuantizedZoomFactor( - oldZoomScale, zoomin); + double zoomScale = + resetView ? 1 + : ImageUtils::getQuantizedZoomFactor(oldZoomScale, zoomin); QMatrix scale = QMatrix().scale(zoomScale / oldZoomScale, zoomScale / oldZoomScale); // See QGraphicsView::mapToScene()'s doc for details - QRect rect(0, 0, width(), height()); - QRectF sceneCenterRect( - mapToScene(QRect(rect.center(), QSize(2, 2))).boundingRect()); + QPointF sceneCenter(mapToScene(rect().center())); setMatrix(scale, true); - centerOn(sceneCenterRect.center()); + centerOn(sceneCenter); } } //------------------------------------------------------------------ /*! The view is scaled around the point \b winPos by \b scaleFactor; -*/ + */ void SchematicSceneViewer::changeScale(const QPoint &winPos, qreal scaleFactor) { QPointF startScenePos = mapToScene(winPos); @@ -350,14 +363,12 @@ void SchematicSceneViewer::reorderScene() { void SchematicSceneViewer::normalizeScene() { // See QGraphicsView::mapToScene()'s doc for details - QRect rect(0, 0, width(), height()); - QRectF sceneCenterRect( - mapToScene(QRect(rect.center(), QSize(2, 2))).boundingRect()); + QPointF sceneCenter(mapToScene(rect().center())); resetMatrix(); #if defined(MACOSX) scale(1.32, 1.32); #endif - centerOn(sceneCenterRect.center()); + centerOn(sceneCenter); } //------------------------------------------------------------------ @@ -587,10 +598,10 @@ void SchematicViewer::createActions() { QIcon nodeSizeIcon = createQIconOnOff( m_maximizedNode ? "minimizenodes" : "maximizenodes", false); - m_nodeSize = - new QAction(nodeSizeIcon, m_maximizedNode ? tr("&Minimize Nodes") - : tr("&Maximize Nodes"), - m_commonToolbar); + m_nodeSize = new QAction( + nodeSizeIcon, + m_maximizedNode ? tr("&Minimize Nodes") : tr("&Maximize Nodes"), + m_commonToolbar); connect(m_nodeSize, SIGNAL(triggered()), this, SLOT(changeNodeSize())); if (m_fullSchematic) { diff --git a/toonz/sources/toonzqt/spreadsheetviewer.cpp b/toonz/sources/toonzqt/spreadsheetviewer.cpp index bcfb895..40da220 100644 --- a/toonz/sources/toonzqt/spreadsheetviewer.cpp +++ b/toonz/sources/toonzqt/spreadsheetviewer.cpp @@ -171,10 +171,10 @@ void SelectionDragTool::click(int row, int col, QMouseEvent *e) { } void SelectionDragTool::drag(int row, int col, QMouseEvent *e) { - int r0 = qMin(row, m_firstRow); - int r1 = qMax(row, m_firstRow); - int c0 = qMin(col, m_firstCol); - int c1 = qMax(col, m_firstCol); + int r0 = std::min(row, m_firstRow); + int r1 = std::max(row, m_firstRow); + int c0 = std::min(col, m_firstCol); + int c1 = std::max(col, m_firstCol); QRect selectedCells(c0, r0, c1 - c0 + 1, r1 - r0 + 1); m_viewer->selectCells(selectedCells); } @@ -708,7 +708,7 @@ bool SpreadsheetViewer::refreshContentSize(int scrollDx, int scrollDy) { QSize viewportSize = m_cellScrollArea->viewport()->size(); QPoint offset = m_cellScrollArea->widget()->pos(); offset = - QPoint(qMin(0, offset.x() - scrollDx), qMin(0, offset.y() - scrollDy)); + QPoint(std::min(0, offset.x() - scrollDx), std::min(0, offset.y() - scrollDy)); QSize contentSize(columnToX(m_columnCount + 1), rowToY(m_rowCount + 1)); @@ -736,7 +736,7 @@ void SpreadsheetViewer::showEvent(QShowEvent *) { int viewportHeight = m_cellScrollArea->height(); int contentHeight = rowToY(m_rowCount * 0 + 50); QScrollBar *vSc = m_cellScrollArea->verticalScrollBar(); - int actualContentHeight = qMax(contentHeight, vSc->value() + viewportHeight); + int actualContentHeight = std::max(contentHeight, vSc->value() + viewportHeight); m_rowScrollArea->widget()->setFixedHeight(actualContentHeight); m_cellScrollArea->widget()->setFixedHeight(actualContentHeight); if (m_frameHandle) diff --git a/toonz/sources/toonzqt/stageschematicnode.cpp b/toonz/sources/toonzqt/stageschematicnode.cpp index 966543c..9a68c5c 100644 --- a/toonz/sources/toonzqt/stageschematicnode.cpp +++ b/toonz/sources/toonzqt/stageschematicnode.cpp @@ -1322,14 +1322,16 @@ StageSchematicNode::StageSchematicNode(StageSchematicScene *scene, m_splineDock->setPos(x, m_height); m_pathToggle = new SchematicToggle_SplineOptions( - this, QPixmap(":Resources/schematic_spline_aim_rhomb.svg"), - QPixmap(":Resources/schematic_spline_aim_square.svg"), 0); + this, QIcon(":Resources/schematic_spline_aim_rhomb.svg"), + QIcon(":Resources/schematic_spline_aim_square.svg"), 0); m_cpToggle = new SchematicToggle_SplineOptions( - this, QPixmap(":Resources/schematic_spline_cp.svg"), 0); + this, QIcon(":Resources/schematic_spline_cp.svg"), 0); m_pathToggle->setSize(7, 7); m_cpToggle->setSize(7, 7); m_cpToggle->setPos(m_splineDock->pos() - QPointF(7, 0)); m_pathToggle->setPos(m_cpToggle->pos() - QPointF(7, 0)); + m_pathToggle->setToolTip(tr("Toggle Autorotate Along Motion Path")); + m_cpToggle->setToolTip(tr("Toggle Link Motion Path to Control Points")); if (m_stageObject->isPathEnabled()) { if (m_stageObject->isAimEnabled()) diff --git a/toonz/sources/toonzqt/studiopaletteviewer.cpp b/toonz/sources/toonzqt/studiopaletteviewer.cpp index 25f1419..b5f5095 100644 --- a/toonz/sources/toonzqt/studiopaletteviewer.cpp +++ b/toonz/sources/toonzqt/studiopaletteviewer.cpp @@ -5,7 +5,6 @@ // TnzQt includes #include "toonzqt/menubarcommand.h" #include "toonzqt/paletteviewer.h" -#include "toonzqt/dvdialog.h" #include "toonzqt/trepetitionguard.h" #include "toonzqt/gutil.h" #include "toonzqt/icongenerator.h" @@ -51,7 +50,7 @@ using namespace DVGui; namespace { //----------------------------------------------------------------------------- /*! Return true if path is in folder \b rootPath of \b StudioPalette. -*/ + */ bool isInStudioPaletteFolder(TFilePath path, TFilePath rootPath) { if (path.getType() != "tpl") return false; StudioPalette *studioPalette = StudioPalette::instance(); @@ -69,7 +68,7 @@ bool isInStudioPaletteFolder(TFilePath path, TFilePath rootPath) { //----------------------------------------------------------------------------- /*! Return true if path is in a \b StudioPalette folder. -*/ + */ bool isInStudioPalette(TFilePath path) { if (path.getType() != "tpl") return false; StudioPalette *studioPalette = StudioPalette::instance(); @@ -133,7 +132,7 @@ StudioPaletteTreeViewer::StudioPaletteTreeViewer( bool ret = connect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)), SLOT(onItemChanged(QTreeWidgetItem *, int))); - ret = ret && connect(this, SIGNAL(itemClicked(QTreeWidgetItem *, int)), + ret = ret && connect(this, SIGNAL(itemClicked(QTreeWidgetItem *, int)), SLOT(onItemClicked(QTreeWidgetItem *, int))); ret = ret && @@ -330,7 +329,7 @@ void StudioPaletteTreeViewer::refresh() { //----------------------------------------------------------------------------- /*!When expand a tree, prepare the child items of it -*/ + */ void StudioPaletteTreeViewer::onTreeItemExpanded(QTreeWidgetItem *item) { if (!item) return; @@ -343,14 +342,14 @@ void StudioPaletteTreeViewer::onTreeItemExpanded(QTreeWidgetItem *item) { //----------------------------------------------------------------------------- /*! Refresh tree only when this widget has focus -*/ + */ void StudioPaletteTreeViewer::onRefreshTreeShortcutTriggered() { if (hasFocus()) refresh(); } //----------------------------------------------------------------------------- /*! Update the content of item -*/ + */ void StudioPaletteTreeViewer::refreshItem(QTreeWidgetItem *item) { struct Locals { @@ -473,7 +472,7 @@ void StudioPaletteTreeViewer::onItemChanged(QTreeWidgetItem *item, int column) { //----------------------------------------------------------------------------- /*! Called when the current palette is switched -*/ + */ void StudioPaletteTreeViewer::onCurrentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) { TFilePath oldPath = getItemPath(previous); @@ -485,13 +484,13 @@ void StudioPaletteTreeViewer::onCurrentItemChanged(QTreeWidgetItem *current, m_currentPalette->getGlobalName()); if (oldPath == newPath) return; wstring gname = m_currentPalette->getGlobalName(); - QString question; - question = "The current palette " + - QString::fromStdWString(oldPath.getWideString()) + - " \nin the studio palette has been modified. Do you want to " - "save your changes?"; - int ret = DVGui::MsgBox(question, QObject::tr("Save"), - QObject::tr("Discard"), QObject::tr("Cancel"), 0); + QString question = + tr("The current palette %1\nin the studio palette has been modified. " + "Do you want to " + "save your changes?") + .arg(QString::fromStdWString(oldPath.getWideString())); + int ret = + DVGui::MsgBox(question, tr("Save"), tr("Discard"), tr("Cancel"), 0); if (ret == 3) { setCurrentItem(getItem(oldPath)); return; @@ -556,7 +555,7 @@ void StudioPaletteTreeViewer::addNewFolder() { //----------------------------------------------------------------------------- /*! Convert level palette to studio palette. -*/ + */ void StudioPaletteTreeViewer::convertToStudioPalette() { TFilePath path = getItemPath(currentItem()); StudioPalette *studioPalette = StudioPalette::instance(); @@ -573,11 +572,10 @@ void StudioPaletteTreeViewer::convertToStudioPalette() { return; } - QString question; - question = QString::fromStdWString( - L"Convert " + path.getWideString() + - L" to Studio Palette and Overwrite. \nAre you sure ?"); - int ret = DVGui::MsgBox(question, QObject::tr("Yes"), QObject::tr("No")); + QString question = + tr("Convert %1 to Studio Palette and Overwrite. \nAre you sure ?") + .arg(QString::fromStdWString(path.getWideString())); + int ret = DVGui::MsgBox(question, tr("Convert"), tr("Cancel")); if (ret == 0 || ret == 2) return; // apply global name @@ -604,7 +602,7 @@ void StudioPaletteTreeViewer::deleteItem(QTreeWidgetItem *item) { if (item->childCount() > 0) { QString question; question = tr("This folder is not empty. Delete anyway?"); - int ret = DVGui::MsgBox(question, QObject::tr("Yes"), QObject::tr("No")); + int ret = DVGui::MsgBox(question, tr("Delete"), tr("Cancel")); if (ret == 0 || ret == 2) return; } @@ -685,35 +683,28 @@ public: //----------------------------------------------------------------------------- -class AdjustPaletteDialog final : public DVGui::Dialog { -private: - IntField *m_tolerance; +AdjustPaletteDialog::AdjustPaletteDialog() + : Dialog(0, true, true, "Adjust Current Level to This Palette") { + setWindowTitle(tr("Adjust Current Level to This Palette")); + + beginVLayout(); + m_tolerance = new IntField(this); + m_tolerance->setRange(0, 255); + m_tolerance->setValue(0); + addWidget(tr("Tolerance"), m_tolerance); + endVLayout(); + + QPushButton *okBtn = new QPushButton(tr("Apply"), this); + okBtn->setDefault(true); + QPushButton *cancelBtn = new QPushButton(tr("Cancel"), this); + bool ret = connect(okBtn, SIGNAL(clicked()), this, SLOT(accept())); + ret = ret && connect(cancelBtn, SIGNAL(clicked()), this, SLOT(reject())); + assert(ret); -public: - int getTolerance() { return m_tolerance->getValue(); } - - AdjustPaletteDialog() - : Dialog(0, true, true, "Adjust Current Level to This Palette") { - setWindowTitle(tr("Adjust Current Level to This Palette")); - - beginVLayout(); - m_tolerance = new IntField(this); - m_tolerance->setRange(0, 255); - m_tolerance->setValue(0); - addWidget(tr("Tolerance"), m_tolerance); - endVLayout(); - - QPushButton *okBtn = new QPushButton(tr("Apply"), this); - okBtn->setDefault(true); - QPushButton *cancelBtn = new QPushButton(tr("Cancel"), this); - bool ret = connect(okBtn, SIGNAL(clicked()), this, SLOT(accept())); - ret = ret && connect(cancelBtn, SIGNAL(clicked()), this, SLOT(reject())); - assert(ret); - - addButtonBarWidget(okBtn, cancelBtn); - } -}; + addButtonBarWidget(okBtn, cancelBtn); +} +int AdjustPaletteDialog::getTolerance() { return m_tolerance->getValue(); } //------------------------------------------------------------------------------------------------- void StudioPaletteTreeViewer::loadInCurrentPaletteAndAdaptLevel() { @@ -810,21 +801,20 @@ void StudioPaletteTreeViewer::replaceCurrentPalette() { QString label; if (count != 1) // replacing to multiple palettes - label = QString::fromStdWString( - L"Replacing all selected palettes with the palette \"" + - current->getPaletteName() + L"\". \nAre you sure ?"); + label = tr("Replacing all selected palettes with the palette \"%1\". \nAre " + "you sure ?") + .arg(QString::fromStdWString(current->getPaletteName())); else { TPalette *dstPalette = StudioPalette::instance()->getPalette(getItemPath(items[0])); if (!dstPalette) return; - label = QString::fromStdWString( - L"Replacing the palette \"" + dstPalette->getPaletteName() + - L"\" with the palette \"" + current->getPaletteName() + - L"\". \nAre you sure ?"); + label = tr("Replacing the palette \"%1\" with the palette \"%2\". \nAre " + "you sure ?") + .arg(QString::fromStdWString(dstPalette->getPaletteName())) + .arg(QString::fromStdWString(current->getPaletteName())); } - int ret = - DVGui::MsgBox(label, QObject::tr("Replace"), QObject::tr("Cancel"), 1); + int ret = DVGui::MsgBox(label, tr("Replace"), tr("Cancel"), 1); if (ret == 0 || ret == 2) return; TUndoManager::manager()->beginBlock(); @@ -940,8 +930,8 @@ void StudioPaletteTreeViewer::contextMenuEvent(QContextMenuEvent *event) { QTreeWidgetItem *item = items[i]; QRect rect = visualItemRect(item); if (QRect(0, rect.y(), width(), rect.height()).contains(event->pos())) - isClickInSelection = true; - TFilePath path = getItemPath(item); + isClickInSelection = true; + TFilePath path = getItemPath(item); if (studioPalette->isFolder(path)) areAllPalette = false; } if (!isClickInSelection) return; @@ -1122,7 +1112,7 @@ void StudioPaletteTreeViewer::dropEvent(QDropEvent *event) { pltName = tr("the palette \"%1\"") .arg(QString::fromStdWString(palettePaths[0].getWideName())); else - pltName = tr("the selected palettes"); + pltName = tr("the selected palettes"); QString dstName = QString::fromStdWString(newPath.getWideName()); QString question = @@ -1210,7 +1200,7 @@ StudioPaletteViewer::~StudioPaletteViewer() {} //----------------------------------------------------------------------------- /*! In order to save current palette from the tool button in the PageViewer. -*/ + */ TFilePath StudioPaletteViewer::getCurrentItemPath() { return m_studioPaletteTreeViewer->getCurrentItemPath(); } diff --git a/toonz/sources/toonzqt/styleeditor.cpp b/toonz/sources/toonzqt/styleeditor.cpp index fa4df3f..c1cd865 100644 --- a/toonz/sources/toonzqt/styleeditor.cpp +++ b/toonz/sources/toonzqt/styleeditor.cpp @@ -577,7 +577,7 @@ void HexagonalColorWheel::initializeGL() { initializeOpenGLFunctions(); // to be computed once through the software - if (m_lutCalibrator) { + if (m_lutCalibrator && !m_lutCalibrator->isInitialized()) { m_lutCalibrator->initialize(); connect(context(), SIGNAL(aboutToBeDestroyed()), this, SLOT(onContextAboutToBeDestroyed())); @@ -585,6 +585,15 @@ void HexagonalColorWheel::initializeGL() { QColor const color = getBGColor(); glClearColor(color.redF(), color.greenF(), color.blueF(), color.alphaF()); + + // Without the following lines, the wheel in a floating style editor + // dissapears on switching the room due to context switching. + if (m_firstInitialized) + m_firstInitialized = false; + else { + resizeGL(width(), height()); + update(); + } } //----------------------------------------------------------------------------- @@ -813,7 +822,7 @@ void HexagonalColorWheel::mouseReleaseEvent(QMouseEvent *event) { //----------------------------------------------------------------------------- /*! compute hue and saturation position. saturation value must be clamped -*/ + */ void HexagonalColorWheel::clickLeftWheel(const QPoint &pos) { QLineF p(m_wp[0] + m_wheelPosition, QPointF(pos)); QLineF horizontal(0, 0, 1, 0); @@ -824,7 +833,7 @@ void HexagonalColorWheel::clickLeftWheel(const QPoint &pos) { // d is a length from center to edge of the wheel when saturation = 100 float d = m_triHeight / cosf(phi / 180.0f * 3.1415f); - int h = (int)theta; + int h = (int)theta; if (h > 359) h = 359; // clamping int s = (int)(std::min(p.length() / d, 1.0) * 100.0f); @@ -1880,7 +1889,8 @@ else return false; void drawChip(QPainter &p, QRect rect, int index) override { assert(0 <= index && index < getChipCount()); CustomStyleManager::PatternData pattern = styleManager()->getPattern(index); - p.drawImage(rect, *pattern.m_image); + if (pattern.m_image && !pattern.m_image->isNull()) + p.drawImage(rect, *pattern.m_image); } void onSelect(int index) override; }; @@ -1991,7 +2001,9 @@ bool VectorBrushStyleChooserPage::event(QEvent *e) { QToolTip::showText(he->globalPos(), QString::fromStdString(pattern.m_patternName)); } else - QToolTip::showText(he->globalPos(), tr("Plain color")); + QToolTip::showText( + he->globalPos(), + QObject::tr("Plain color", "VectorBrushStyleChooserPage")); return true; } @@ -2165,8 +2177,11 @@ bool TextureStyleChooserPage::event(QEvent *e) { int index = posToIndex(pos); if (index >= 0 && index < (int)m_textures.size()) { toolTip = m_textures[index].m_name; - QToolTip::showText(helpEvent->globalPos(), - toolTip != QString() ? toolTip : "Custom Texture"); + QToolTip::showText( + helpEvent->globalPos(), + toolTip != QString() + ? toolTip + : QObject::tr("Custom Texture", "TextureStyleChooserPage")); } e->accept(); } @@ -2232,7 +2247,7 @@ public: QPoint pos = helpEvent->pos(); int index = posToIndex(pos); if (index == 0) { - toolTip = tr("Plain color"); + toolTip = QObject::tr("Plain color", "MyPaintBrushStyleChooserPage"); } else if (index > 0 && index <= (int)m_brushes.size()) { toolTip = m_brushes[index - 1].getPath().getQString(); } @@ -2325,7 +2340,7 @@ void SpecialStyleChooserPage::loadItems() { tagId == 2002 || // ?? tagId == 3000 || // vector brush tagId == 4001 // mypaint brush - ) + ) continue; TColorStyle *style = TColorStyle::create(tagId); @@ -2381,7 +2396,7 @@ bool SpecialStyleChooserPage::event(QEvent *e) { QPoint pos = helpEvent->pos(); int index = posToIndex(pos); if (index == 0) - toolTip = tr("Plain color"); + toolTip = QObject::tr("Plain color", "SpecialStyleChooserPage"); else { int j = index - 1; if (0 <= j && j < (int)m_customStyles.size()) { @@ -3127,7 +3142,7 @@ QFrame *StyleEditor::createBottomWidget() { bool ret = true; ret = ret && connect(m_applyButton, SIGNAL(clicked()), this, SLOT(applyButtonClicked())); - ret = ret && connect(m_autoButton, SIGNAL(toggled(bool)), this, + ret = ret && connect(m_autoButton, SIGNAL(toggled(bool)), this, SLOT(autoCheckChanged(bool))); ret = ret && connect(m_oldColor, SIGNAL(clicked(const TColorStyle &)), this, SLOT(onOldStyleClicked(const TColorStyle &))); @@ -3190,9 +3205,9 @@ QFrame *StyleEditor::createVectorPage() { bool ret = true; ret = ret && connect(specialButton, SIGNAL(toggled(bool)), this, SLOT(onSpecialButtonToggled(bool))); - ret = ret && connect(customButton, SIGNAL(toggled(bool)), this, + ret = ret && connect(customButton, SIGNAL(toggled(bool)), this, SLOT(onCustomButtonToggled(bool))); - ret = ret && connect(vectorBrushButton, SIGNAL(toggled(bool)), this, + ret = ret && connect(vectorBrushButton, SIGNAL(toggled(bool)), this, SLOT(onVectorBrushButtonToggled(bool))); assert(ret); return vectorOutsideFrame; @@ -3229,9 +3244,9 @@ void StyleEditor::showEvent(QShowEvent *) { bool ret = true; ret = ret && connect(m_paletteHandle, SIGNAL(colorStyleSwitched()), SLOT(onStyleSwitched())); - ret = ret && connect(m_paletteHandle, SIGNAL(colorStyleChanged(bool)), + ret = ret && connect(m_paletteHandle, SIGNAL(colorStyleChanged(bool)), SLOT(onStyleChanged(bool))); - ret = ret && connect(m_paletteHandle, SIGNAL(paletteSwitched()), this, + ret = ret && connect(m_paletteHandle, SIGNAL(paletteSwitched()), this, SLOT(onStyleSwitched())); if (m_cleanupPaletteHandle) ret = @@ -3380,10 +3395,9 @@ void StyleEditor::copyEditedStyleToPalette(bool isDragging) { m_editedStyle->setIsEditedFlag(true); } - palette->setStyle( - styleIndex, - m_editedStyle->clone()); // Must be done *before* setting the eventual - // palette keyframe + palette->setStyle(styleIndex, + m_editedStyle->clone()); // Must be done *before* setting + // the eventual palette keyframe if (!isDragging) { if (!(*m_oldStyle == *m_editedStyle)) { // do not register undo if the edited color is special one (e.g. changing diff --git a/toonz/sources/toonzqt/swatchviewer.cpp b/toonz/sources/toonzqt/swatchviewer.cpp index a58286e..0e89f69 100644 --- a/toonz/sources/toonzqt/swatchviewer.cpp +++ b/toonz/sources/toonzqt/swatchviewer.cpp @@ -2,9 +2,14 @@ #include "toonzqt/swatchviewer.h" #include "toonzqt/gutil.h" +#include "toonzqt/menubarcommand.h" +#include "toonzqt/viewcommandids.h" + +#include "../toonz/menubarcommandids.h" #include #include +#include #include #include "trasterfx.h" @@ -20,6 +25,8 @@ #include #include +#include + using namespace TFxUtil; //#define USE_SQLITE_HDPOOL @@ -255,7 +262,8 @@ SwatchViewer::SwatchViewer(QWidget *parent, Qt::WFlags flags) , m_firstPos(TPoint()) , m_oldContent() , m_curContent() - , m_executor() { + , m_executor() + , m_firstEnabled(true) { // setMinimumSize(150,150); setMinimumHeight(150); setFixedWidth(150); @@ -268,6 +276,11 @@ SwatchViewer::SwatchViewer(QWidget *parent, Qt::WFlags flags) m_executor.setMaxActiveTasks(1); m_renderer.enablePrecomputing(false); + + setAttribute(Qt::WA_AcceptTouchEvents); + grabGesture(Qt::SwipeGesture); + grabGesture(Qt::PanGesture); + grabGesture(Qt::PinchGesture); } //----------------------------------------------------------------------------- @@ -363,9 +376,13 @@ void SwatchViewer::updateFrame(int frame) { void SwatchViewer::setEnable(bool enabled) { if (m_enabled == enabled) return; m_enabled = enabled; - if (m_enabled) + if (m_enabled) { + if (m_firstEnabled) { + m_firstEnabled = false; + fitView(); + } computeContent(); - else + } else update(); } @@ -425,6 +442,26 @@ void SwatchViewer::zoom(const TPoint &pos, double factor) { //----------------------------------------------------------------------------- +void SwatchViewer::resetView() { setAff(TAffine()); } + +//----------------------------------------------------------------------------- + +void SwatchViewer::fitView() { + if (m_cameraRect.isEmpty()) return; + + double imageScale = std::min( + width() / ((double)getCameraSize().lx * (m_cameraMode ? 1 : 0.44)), + height() / ((double)getCameraSize().ly * (m_cameraMode ? 1 : 0.44))); + + TAffine fitAffine = TScale(imageScale, imageScale); + fitAffine.a13 = 0; + fitAffine.a23 = 0; + + setAff(fitAffine); +} + +//----------------------------------------------------------------------------- + void SwatchViewer::zoom(bool forward, bool reset) { double scale2 = m_aff.det(); if (reset || ((scale2 < 2000 || !forward) && (scale2 > 0.004 || forward))) { @@ -437,6 +474,11 @@ void SwatchViewer::zoom(bool forward, bool reset) { } } +void SwatchViewer::pan(const TPoint &delta) { + TPointD step = convert(delta); + setAff(TTranslation(step.x, -step.y) * m_aff); +} + //----------------------------------------------------------------------------- void SwatchViewer::computeContent() { @@ -447,7 +489,7 @@ void SwatchViewer::computeContent() { // Clear the swatch cache when the zoom scale has changed (cache results are // not compatible // between different scale levels) - if (m_aff.a11 != m_contentAff.a11) + if (m_aff.a11 != m_contentAff.a11 || m_panning) SwatchCacheManager::instance()->clearSwatchResults(); TRect rect(0, 0, width() - 1, height() - 1); @@ -593,6 +635,12 @@ void SwatchViewer::resizeEvent(QResizeEvent *re) { //----------------------------------------------------------------------------- void SwatchViewer::mousePressEvent(QMouseEvent *event) { + // qDebug() << "[mousePressEvent]"; + if (m_gestureActive && m_touchDevice == QTouchDevice::TouchScreen && + !m_stylusUsed) { + return; + } + TPoint pos = TPoint(event->pos().x(), event->pos().y()); m_mouseButton = event->button(); if (m_mouseButton == Qt::LeftButton) { @@ -651,6 +699,11 @@ void SwatchViewer::mousePressEvent(QMouseEvent *event) { //----------------------------------------------------------------------------- void SwatchViewer::mouseMoveEvent(QMouseEvent *event) { + if (m_gestureActive && m_touchDevice == QTouchDevice::TouchScreen && + !m_stylusUsed) { + return; + } + TPoint pos = TPoint(event->pos().x(), event->pos().y()); if (m_mouseButton == Qt::LeftButton) { if (m_selectedPoint < 0 || m_selectedPoint >= (int)m_points.size()) return; @@ -671,15 +724,8 @@ void SwatchViewer::mouseMoveEvent(QMouseEvent *event) { QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); } else if (m_mouseButton == Qt::MidButton) { - if (!m_oldContent || !m_curContent) return; - m_curContent->fill(TPixel32::Transparent); - TPointD step = convert(pos - m_pos); - // Devo aggiornare l'affine per riposizionare la camera. - m_aff = TTranslation(step.x, -step.y) * m_aff; - m_pos = pos; - TPoint p = pos - m_firstPos; - m_curContent->copy(m_oldContent, TPoint(p.x, -p.y)); - setContent(m_curContent, TTranslation(step.x, -step.y) * m_contentAff); + pan(pos - m_pos); + m_pos = pos; } } @@ -695,20 +741,78 @@ void SwatchViewer::mouseReleaseEvent(QMouseEvent *event) { setAff(TTranslation(p.x, -p.y) * m_aff); update(); } + m_gestureActive = false; + m_zooming = false; + m_panning = false; + m_stylusUsed = false; } //----------------------------------------------------------------------------- void SwatchViewer::wheelEvent(QWheelEvent *event) { - TPoint center(event->pos().x() - width() / 2, - -event->pos().y() + height() / 2); - zoom(center, exp(0.001 * event->delta())); + int delta = 0; + switch (event->source()) { + case Qt::MouseEventNotSynthesized: { + if (event->modifiers() & Qt::AltModifier) + delta = event->angleDelta().x(); + else + delta = event->angleDelta().y(); + break; + } + + case Qt::MouseEventSynthesizedBySystem: { + QPoint numPixels = event->pixelDelta(); + QPoint numDegrees = event->angleDelta() / 8; + if (!numPixels.isNull()) { + delta = event->pixelDelta().y(); + } else if (!numDegrees.isNull()) { + QPoint numSteps = numDegrees / 15; + delta = numSteps.y(); + } + break; + } + + default: // Qt::MouseEventSynthesizedByQt, + // Qt::MouseEventSynthesizedByApplication + { + std::cout << "not supported event: Qt::MouseEventSynthesizedByQt, " + "Qt::MouseEventSynthesizedByApplication" + << std::endl; + break; + } + + } // end switch + + if (abs(delta) > 0) { + if ((m_gestureActive == true && + m_touchDevice == QTouchDevice::TouchScreen) || + m_gestureActive == false) { + TPoint center(event->pos().x() - width() / 2, + -event->pos().y() + height() / 2); + zoom(center, exp(0.001 * event->delta())); + } + } + event->accept(); } //----------------------------------------------------------------------------- void SwatchViewer::keyPressEvent(QKeyEvent *event) { int key = event->key(); + std::string keyStr = + QKeySequence(key + event->modifiers()).toString().toStdString(); + QAction *action = CommandManager::instance()->getActionFromShortcut(keyStr); + if (action) { + std::string actionId = CommandManager::instance()->getIdFromAction(action); + if (actionId == V_ZoomFit) { + fitView(); + return; + } else if (actionId == V_ZoomReset) { + resetView(); + return; + } + } + if (key == '+' || key == '-' || key == '0') { zoom(key == '+', key == '0'); } @@ -721,6 +825,212 @@ void SwatchViewer::hideEvent(QHideEvent *event) { ::setFxForCaching(0); } +//------------------------------------------------------------------------------- + +void SwatchViewer::mouseDoubleClickEvent(QMouseEvent *event) { + // qDebug() << "[mouseDoubleClickEvent]"; + if (m_gestureActive && !m_stylusUsed) { + m_gestureActive = false; + fitView(); + return; + } +} + +//------------------------------------------------------------------ + +void SwatchViewer::contextMenuEvent(QContextMenuEvent *event) { + QMenu *menu = new QMenu(this); + + QAction *reset = menu->addAction(tr("Reset View")); + reset->setShortcut( + QKeySequence(CommandManager::instance()->getKeyFromId(V_ZoomReset))); + connect(reset, SIGNAL(triggered()), SLOT(resetView())); + + QAction *fit = menu->addAction(tr("Fit To Window")); + fit->setShortcut( + QKeySequence(CommandManager::instance()->getKeyFromId(V_ZoomFit))); + connect(fit, SIGNAL(triggered()), SLOT(fitView())); + + menu->exec(event->globalPos()); + + delete menu; + update(); +} + +//------------------------------------------------------------------ + +void SwatchViewer::tabletEvent(QTabletEvent *e) { + // qDebug() << "[tabletEvent]"; + if (e->type() == QTabletEvent::TabletPress) { + m_stylusUsed = e->pointerType() ? true : false; + } else if (e->type() == QTabletEvent::TabletRelease) { + m_stylusUsed = false; + } + + e->accept(); +} + +//------------------------------------------------------------------ + +void SwatchViewer::gestureEvent(QGestureEvent *e) { + // qDebug() << "[gestureEvent]"; + m_gestureActive = false; + if (QGesture *swipe = e->gesture(Qt::SwipeGesture)) { + m_gestureActive = true; + } else if (QGesture *pan = e->gesture(Qt::PanGesture)) { + m_gestureActive = true; + } + if (QGesture *pinch = e->gesture(Qt::PinchGesture)) { + QPinchGesture *gesture = static_cast(pinch); + QPinchGesture::ChangeFlags changeFlags = gesture->changeFlags(); + QPoint firstCenter = gesture->centerPoint().toPoint(); + if (m_touchDevice == QTouchDevice::TouchScreen) + firstCenter = mapFromGlobal(firstCenter); + + if (gesture->state() == Qt::GestureStarted) { + m_gestureActive = true; + } else if (gesture->state() == Qt::GestureFinished) { + m_gestureActive = false; + m_zooming = false; + m_scaleFactor = 0.0; + } else { + if (changeFlags & QPinchGesture::ScaleFactorChanged) { + double scaleFactor = gesture->scaleFactor(); + // the scale factor makes for too sensitive scaling + // divide the change in half + if (scaleFactor > 1) { + double decimalValue = scaleFactor - 1; + decimalValue /= 1.5; + scaleFactor = 1 + decimalValue; + } else if (scaleFactor < 1) { + double decimalValue = 1 - scaleFactor; + decimalValue /= 1.5; + scaleFactor = 1 - decimalValue; + } + if (!m_zooming) { + double delta = scaleFactor - 1; + m_scaleFactor += delta; + if (m_scaleFactor > .2 || m_scaleFactor < -.2) { + m_zooming = true; + } + } + if (m_zooming) { + TPoint center(firstCenter.x() - width() / 2, + -firstCenter.y() + height() / 2); + zoom(center, scaleFactor); + m_panning = false; + } + m_gestureActive = true; + } + + if (changeFlags & QPinchGesture::CenterPointChanged) { + QPointF centerDelta = + (gesture->centerPoint()) - (gesture->lastCenterPoint()); + if (centerDelta.manhattanLength() > 1) { + // panQt(centerDelta.toPoint()); + } + m_gestureActive = true; + } + } + } + e->accept(); +} + +void SwatchViewer::touchEvent(QTouchEvent *e, int type) { + // qDebug() << "[touchEvent]"; + if (type == QEvent::TouchBegin) { + m_touchActive = true; + m_firstPanPoint = e->touchPoints().at(0).pos(); + // obtain device type + m_touchDevice = e->device()->type(); + } else if (m_touchActive) { + // touchpads must have 2 finger panning for tools and navigation to be + // functional on other devices, 1 finger panning is preferred + if ((e->touchPoints().count() == 2 && + m_touchDevice == QTouchDevice::TouchPad) || + (e->touchPoints().count() == 1 && + m_touchDevice == QTouchDevice::TouchScreen)) { + QTouchEvent::TouchPoint panPoint = e->touchPoints().at(0); + if (!m_panning) { + QPointF deltaPoint = panPoint.pos() - m_firstPanPoint; + // minimize accidental and jerky zooming/rotating during 2 finger + // panning + if ((deltaPoint.manhattanLength() > 100) && !m_zooming) { + m_panning = true; + } + } + if (m_panning) { + QPoint curPos = panPoint.pos().toPoint(); + QPoint lastPos = panPoint.lastPos().toPoint(); + TPoint centerDelta = + TPoint(curPos.x(), curPos.y()) - TPoint(lastPos.x(), lastPos.y()); + pan(centerDelta); + } + } + } + if (type == QEvent::TouchEnd || type == QEvent::TouchCancel) { + m_touchActive = false; + m_panning = false; + } + e->accept(); +} + +bool SwatchViewer::event(QEvent *e) { + /* + switch (e->type()) { + case QEvent::TabletPress: { + QTabletEvent *te = static_cast(e); + qDebug() << "[event] TabletPress: pointerType(" << te->pointerType() + << ") device(" << te->device() << ")"; + } break; + case QEvent::TabletRelease: + qDebug() << "[event] TabletRelease"; + break; + case QEvent::TouchBegin: + qDebug() << "[event] TouchBegin"; + break; + case QEvent::TouchEnd: + qDebug() << "[event] TouchEnd"; + break; + case QEvent::TouchCancel: + qDebug() << "[event] TouchCancel"; + break; + case QEvent::MouseButtonPress: + qDebug() << "[event] MouseButtonPress"; + break; + case QEvent::MouseButtonDblClick: + qDebug() << "[event] MouseButtonDblClick"; + break; + case QEvent::MouseButtonRelease: + qDebug() << "[event] MouseButtonRelease"; + break; + case QEvent::Gesture: + qDebug() << "[event] Gesture"; + break; + default: + break; + } + */ + + if (e->type() == QEvent::Gesture && + CommandManager::instance() + ->getAction(MI_TouchGestureControl) + ->isChecked()) { + gestureEvent(static_cast(e)); + return true; + } + if ((e->type() == QEvent::TouchBegin || e->type() == QEvent::TouchEnd || + e->type() == QEvent::TouchCancel || e->type() == QEvent::TouchUpdate) && + CommandManager::instance() + ->getAction(MI_TouchGestureControl) + ->isChecked()) { + touchEvent(static_cast(e), e->type()); + m_gestureActive = true; + return true; + } + return QWidget::event(e); +} + //============================================================================= // SwatchViewer::ContentRender //----------------------------------------------------------------------------- diff --git a/toonz/sources/translations/chinese/tnztools.ts b/toonz/sources/translations/chinese/tnztools.ts index ee3e4ce..542ac10 100644 --- a/toonz/sources/translations/chinese/tnztools.ts +++ b/toonz/sources/translations/chinese/tnztools.ts @@ -642,6 +642,20 @@ + FullColorFillTool + + Fill Depth + 填充深度 + + + + HandToolOptionsBox + + Reset Position + + + + HookTool Snap @@ -1264,6 +1278,13 @@ Do you want to proceed? + RotateToolOptionsBox + + Reset Rotation + + + + RulerToolOptionsBox X: @@ -1662,4 +1683,11 @@ moved to the end of the first page of the palette. 矩形 + + ZoomToolOptionsBox + + Reset Zoom + + + diff --git a/toonz/sources/translations/chinese/toonz.ts b/toonz/sources/translations/chinese/toonz.ts index 9dffda3..c787ebb 100644 --- a/toonz/sources/translations/chinese/toonz.ts +++ b/toonz/sources/translations/chinese/toonz.ts @@ -110,11 +110,11 @@ ApplyMatchlinesCommand It is not possible to apply the match lines because no column was selected. - 无法应用适配线,因为没有列被选中。 + 无法应用适配线,因为没有列被选中。 It is not possible to apply the match lines because two columns have to be selected. - 无法应用适配线,因为有两列同时被选中。 + 无法应用适配线,因为有两列同时被选中。 @@ -1061,11 +1061,11 @@ What do you want to do? CloneLevelUndo::LevelNamePopup Clone Level - 克隆层级 + 克隆层级 Level Name: - 层级名称: + 层级名称: @@ -1242,6 +1242,10 @@ What do you want to do? (Flipped) (已翻转) + + :: Project: + + CommandBar @@ -1883,11 +1887,11 @@ contain the dpi information, then the current camera dpi will be used. ExportCurvePopup Export Curve - 导出曲线 + 导出曲线 Export - 导出 + 导出 @@ -2285,26 +2289,26 @@ contain the dpi information, then the current camera dpi will be used. FileData It is not possible to find the %1 level. - 找不到层级 %1。 + 找不到层级 %1。 There was an error copying %1 - 拷贝 %1 时发生了错误 + 拷贝 %1 时发生了错误 FileSelection Abort - 中断 + 中断 Collecting assets... - 正在收集素材... + 正在收集素材... Importing scenes... - 正在导入场景... + 正在导入场景... @@ -3209,6 +3213,10 @@ Please use the frame numbers for reference. Invalid data file. 无效的数据文件。 + + Drawing: + + LoadBoardPresetFilePopup @@ -3240,11 +3248,11 @@ Please use the frame numbers for reference. LoadCurvePopup Load Curve - 加载曲线 + 加载曲线 Load - 加载 + 加载 @@ -3394,15 +3402,15 @@ Please use the frame numbers for reference. LoadSettingsPopup Load Cleanup Settings - 加载清稿设置 + 加载清稿设置 Load - 加载 + 加载 %1 does not exist. - %1 不存在。 + %1 不存在。 @@ -3756,7 +3764,7 @@ Please use the frame numbers for reference. &Send Back - 置于底层(&S) + 置于底层(&S) &Send Backward @@ -5442,6 +5450,30 @@ Please use the frame numbers for reference. Flip Viewer Horizontally 水平翻转查看器 + + &Send to Back + + + + Reset Zoom + + + + Reset Rotation + + + + Reset Position + + + + Brush Tool - Eraser (Raster option) + + + + Brush Tool - Lock Alpha + + MatchlinesDialog @@ -5575,15 +5607,15 @@ N.B. Duplicated commands will be ignored. Only the last one will appear in the m MergeCmappedCommand It is not possible to merge tlv columns because no column was selected. - 无法合并 TLV 列,因为未选择任何列。 + 无法合并 TLV 列,因为未选择任何列。 It is not possible to merge tlv columns because at least two columns have to be selected. - 无法合并 TLV 列,因为最少要选定两个列。 + 无法合并 TLV 列,因为最少要选定两个列。 Merging Tlv Levels... - 正在合并 TLV 层级... + 正在合并 TLV 层级... @@ -5612,16 +5644,20 @@ N.B. Duplicated commands will be ignored. Only the last one will appear in the m Merge Tlv Levels 合并 TLV 层级 + + Level %1 already exists! Are you sure you want to overwrite it? + + MergeColumnsCommand It is not possible to execute the merge column command because no column was selected. - 无法执行合并列的命令,因为未选定任何列。 + 无法执行合并列的命令,因为未选定任何列。 It is not possible to execute the merge column command because only one columns is selected. - 无法执行合并列的命令,因为只选择了一个列。 + 无法执行合并列的命令,因为只选择了一个列。 @@ -5705,10 +5741,17 @@ What do you want to do? + MyVideoWidget + + Camera is not available + 摄影机不可用 + + + MyViewFinder Camera is not available - 摄影机不可用 + 摄影机不可用 @@ -6108,16 +6151,16 @@ What do you want to do? Overwrite - 覆盖 + 覆盖 Skip - 跳过 + 跳过 File "%1" already exists. Do you want to overwrite it? - 文件“%1”已经存在。 + 文件“%1”已经存在。 要覆盖它吗? @@ -6451,6 +6494,10 @@ WARNING : Image size mismatch. The saved image size is %1 x %2. in the scene with the name %2. 警告: 层级路径冲突。在名为 %2 的场景中,已经有个层级位于路径 %1 上。 + + Subcamera + + PencilTestSaveInFolderPopup @@ -7675,13 +7722,13 @@ in non alpha-enabled image format. Previewer The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | - 文件名不能为空也不能包含如下的任一字符: + 文件名不能为空也不能包含如下的任一字符: \ / : * ? " | File %1 already exists. Do you want to overwrite it? - 文件 %1 已经存在。 + 文件 %1 已经存在。 要覆盖它吗? @@ -7845,6 +7892,38 @@ Do you want to overwrite it? Level Name: 层级名: + + Single Image + + + + Frames + + + + Columns + + + + Flatten visible document layers into a single image. Layer styles are maintained. + + + + Load document layers as frames into a single xsheet column. + + + + Load document layers as xhseet columns. + + + + OK + 确定 + + + Cancel + 取消 + QApplication @@ -8783,11 +8862,11 @@ Do you want to overwrite it? Level - 层级 + 层级 already exists! Are you sure you want to overwrite it? - 已经存在!您确定要覆盖它吗? + 已经存在!您确定要覆盖它吗? It is not possible to merge tlv columns containing more than one level @@ -9610,6 +9689,240 @@ to use the duplicate command in the xsheet / timeline. Clear All Relative Onion Skin Markers 清理全部相关的洋葱皮标记器 + + Always Overwrite in This Scene + + + + + %1 more level(s) + + + + + Fx Settings + 特效设置 + + + Save Curve + 保存曲线 + + + Load Curve + 加载曲线 + + + Export Curve + 导出曲线 + + + Rendering frame %1 / %2 + RenderListener + + + + Precomputing %1 Frames + RenderListener + + + + of %1 + RenderListener + + + + Finalizing render, please wait. + RenderListener + 完成渲染最后阶段,请稍等。 + + + Aborting render... + RenderListener + + + + Building Schematic... + RenderCommand + + + + column + MultimediaProgressBar label (mode name) + + + + layer + MultimediaProgressBar label (mode name) + + + + Rendering %1%2, frame %3 / %4 + MultimediaProgressBar label + + + + Rendering %1 frames of %2 + MultimediaProgressBar + + + + %1 of %2 + MultimediaProgressBar - [totalframe] of [path] + + + + Aborting render... + MultimediaProgressBar + + + + It is not possible to write the output: the file + RenderCommand + + + + s are read only. + RenderCommand + + + + is read only. + RenderCommand + + + + Save Cleanup Settings + 保存清稿设置 + + + Load Cleanup Settings + 加载清稿设置 + + + It is not possible to find the %1 level. + FileData + 找不到层级 %1。 + + + There was an error copying %1 + FileData + 拷贝 %1 时发生了错误 + + + Clone Level + CloneLevelUndo::LevelNamePopup + 克隆层级 + + + Level Name: + CloneLevelUndo::LevelNamePopup + + + + Collecting assets... + 正在收集素材... + + + Abort + 中断 + + + Importing scenes... + 正在导入场景... + + + It is not possible to execute the merge column command because no column was selected. + 无法执行合并列的命令,因为未选定任何列。 + + + It is not possible to execute the merge column command because only one columns is selected. + + + + It is not possible to apply the match lines because no column was selected. + 无法应用适配线,因为没有列被选中。 + + + It is not possible to apply the match lines because two columns have to be selected. + 无法应用适配线,因为有两列同时被选中。 + + + It is not possible to merge tlv columns because no column was selected. + 无法合并 TLV 列,因为未选择任何列。 + + + It is not possible to merge tlv columns because at least two columns have to be selected. + 无法合并 TLV 列,因为最少要选定两个列。 + + + Merging Tlv Levels... + 正在合并 TLV 层级... + + + Save Previewed Images + 保存预览过的图像 + + + The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | + + + + Unsopporter raster format, cannot save + + + + Cannot create %1 : %2 + Previewer warning %1:path %2:message + + + + Cannot create %1 + Previewer warning %1:path + + + + Saved %1 frames out of %2 in %3 + Previewer %1:savedframes %2:framecount %3:filepath + 保存了 %2 中的 %1 帧到 %3 里 + + + Canceled! + Previewer + + + + No frame to save! + + + + Already saving! + + + + Warning! + OverwriteDialog + 警告! + + + Overwrite + OverwriteDialog + 覆盖 + + + Skip + OverwriteDialog + 跳过 + + + File "%1" already exists. +Do you want to overwrite it? + OverwriteDialog + 文件“%1”已经存在。 +要覆盖它吗? + + + %1 does not exist. + %1 不存在。 + ReframePopup @@ -9717,7 +10030,7 @@ The audio file will not be included in the rendered clip. RenderListener Finalizing render, please wait. - 完成渲染最后阶段,请稍等。 + 完成渲染最后阶段,请稍等。 @@ -10612,11 +10925,11 @@ Please commit or revert changes first. SaveCurvePopup Save Curve - 保存曲线 + 保存曲线 Save - 保存 + 保存 @@ -10691,11 +11004,11 @@ Please commit or revert changes first. SavePreviewedPopup Save Previewed Images - 保存预览过的图像 + 保存预览过的图像 Save - 保存 + 保存 @@ -10713,11 +11026,11 @@ Please commit or revert changes first. SaveSettingsPopup Save Cleanup Settings - 保存清稿设置 + 保存清稿设置 Save - 保存 + 保存 @@ -10950,6 +11263,14 @@ Please commit or revert changes first. Select %1 选择 %1 + + Flip View + + + + Reset View + 重置视图 + SceneViewerPanel @@ -11013,6 +11334,10 @@ Please commit or revert changes first. (Flipped) (已翻转) + + :: Project: + + SeparateColorsPopup @@ -11514,7 +11839,7 @@ Assign to '%3'? Choose Project - 选择项目 + 选择项目 Create a New Scene @@ -11522,7 +11847,7 @@ Assign to '%3'? Open Scene - 打开场景 + 打开场景 Scene Name: @@ -11680,6 +12005,18 @@ Possibly the preset file has been corrupted Minutes 分钟 + + Current Project + + + + Recent Scenes [Project] + + + + The selected scene project '%1' is not in the Current Project list and may not open automatically. + + StudioPaletteTreeViewer @@ -12845,5 +13182,13 @@ Hold F3 Key on the Viewer to Show This Frame Only Zoom in/out of timeline 放大/缩小时间轴 + + :: Project: + + + + Frame + + diff --git a/toonz/sources/translations/chinese/toonzqt.ts b/toonz/sources/translations/chinese/toonzqt.ts index 5266c5d..c718f14 100644 --- a/toonz/sources/translations/chinese/toonzqt.ts +++ b/toonz/sources/translations/chinese/toonzqt.ts @@ -295,11 +295,11 @@ Possibly the preset file has been corrupted DVGui OK - 确定 + 确定 Cancel - 取消 + 取消 @@ -1025,6 +1025,30 @@ Possibly the preset file has been corrupted Step 4 第 4 步 + + Activate Cycle + 启用循环 + + + Deactivate Cycle + 禁用循环 + + + Show Inbetween Values + + + + Hide Inbetween Values + + + + Change Interpolation + + + + Change Step + + FunctionToolbar @@ -1389,7 +1413,7 @@ Select FX nodes and related links before copying or cutting the selection you wa MyPaintBrushStyleChooserPage Plain color - 纯色 + 纯色 @@ -1640,6 +1664,17 @@ Select FX nodes and related links before copying or cutting the selection you wa + PlaneViewer + + Reset View + + + + Fit To Window + + + + PointParamField Y: @@ -1719,19 +1754,19 @@ Select FX nodes and related links before copying or cutting the selection you wa Save - 保存 + 保存 Discard - 放弃更改 + 放弃更改 Yes - + No - + Stage Schematic @@ -2053,7 +2088,7 @@ Are you sure? Replace - 替换 + 替换 Modify Fx Param : %1 @@ -2194,7 +2229,43 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< OpenToonz 1.2 - OpenToonz 1.2 + OpenToonz 1.2 + + + Custom Texture + TextureStyleChooserPage + + + + Current Frame: + + + + File History + + + + OpenToonz 1.3 + OpenToonz 1.3 + + + Plain color + VectorBrushStyleChooserPage + 纯色 + + + Plain color + MyPaintBrushStyleChooserPage + 纯色 + + + Plain color + SpecialStyleChooserPage + 纯色 + + + OK + 确定 @@ -2303,7 +2374,7 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< SpecialStyleChooserPage Plain color - 纯色 + 纯色 @@ -2437,6 +2508,50 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< Cancel 取消 + + The current palette %1 +in the studio palette has been modified. Do you want to save your changes? + + + + Save + 保存 + + + Discard + 放弃更改 + + + Convert %1 to Studio Palette and Overwrite. +Are you sure ? + + + + Yes + + + + No + + + + Replacing all selected palettes with the palette "%1". +Are you sure ? + + + + Replacing the palette "%1" with the palette "%2". +Are you sure ? + + + + Replace + 替换 + + + Convert + + StudioPaletteViewer @@ -2701,6 +2816,17 @@ Apply + SwatchViewer + + Reset View + + + + Fit To Window + + + + TMessageViewer Errors @@ -2749,7 +2875,7 @@ Apply VectorBrushStyleChooserPage Plain color - 纯色 + 纯色 diff --git a/toonz/sources/translations/czech/colorfx.ts b/toonz/sources/translations/czech/colorfx.ts new file mode 100644 index 0000000..cbc9b72 --- /dev/null +++ b/toonz/sources/translations/czech/colorfx.ts @@ -0,0 +1,875 @@ + + + + + ArtisticSolidColor + + + Horiz Offset + Vodorovný posun + + + + Vert Offset + Svislý posun + + + + Noise + Šum + + + + Irregular + Nepravidelnost + + + + MovingSolidColor + + + Horiz Offset + Vodorovný posun + + + + Vert Offset + Svislý posun + + + + Offset + Posun + + + + OutlineViewerStyle + + + Control Point + Ovládací bod + + + + Center Line + Středová čára + + + + Outline Mode + Obrysový režim + + + + Distance + Vzdálenost + + + + distance + Odstup + + + + OutlineViewer(OnlyDebug) + Prohlížeč obrysu (jen ladění) + + + + ShadowStyle + + + Angle + Úhel + + + + Density + Hustota + + + + Length + Délka + + + + Hatched Shading + Šrafování + + + + ShadowStyle2 + + + Angle + Úhel + + + + Size + Velikost + + + + Plain Shadow + Jednoduchý stín + + + + TAirbrushRasterStyle + + + Airbrush + Stříkací pistole + + + + Blur value + Stupeň měkkosti + + + + TBiColorStrokeStyle + + + Shade + Stínování + + + + TBlendRasterStyle + + + Blend + Výplň + + + + TBlendStrokeStyle2 + + + Border Fade + Stínidlo okraje + + + + Fade In + Postupně zesílit + + + + Fade Out + Postupně zeslabit + + + + Fade + Vyblednutí + + + + TBraidStrokeStyle + + + Twirl + Vír + + + + Plait + Spleteno + + + + TBubbleStrokeStyle + + + Bubbles + Fouknout + + + + TChainStrokeStyle + + + Chain + Řetězec + + + + TChalkFillStyle + + + Density + Hustota + + + + Dot Size + Velikost tečky + + + + Chalk + Křída + + + + TChalkStrokeStyle2 + + + Border Fade + Stínidlo okraje + + + + Density + Hustota + + + + Fade In + Postupně zesílit + + + + Fade Out + Postupně zeslabit + + + + Noise + Šum + + + + Chalk + Křída + + + + TCheckedFillStyle + + + Horiz Dist + Vodorovný odstup + + + + Horiz Angle + Vodorovný úhel + + + + Vert Dist + Svislý odstup + + + + Vert Angle + Svislý úhel + + + + Thickness + Tloušťka + + + + Square + Čtvercový + + + + TChessFillStyle + + + Horiz Size + Vodorovná velikost + + + + Vert Size + Svislá velikost + + + + Angle + Úhel + + + + Chessboard + Šachovnice + + + + TCircleStripeFillStyle + + + X Position + Poloha X + + + + Y Position + Poloha Y + + + + Distance + Vzdálenost + + + + Thickness + Tloušťka + + + + Concentric + Soustředný + + + + TCrystallizeStrokeStyle + + + Crease + Záhyb + + + + Opacity + Neprůhlednost + + + + Tulle + Tyl + + + + TDottedFillStyle + + + Dot Size + Velikost tečky + + + + Dot Distance + Vzdálenost tečky + + + + Polka Dots + Puntíkovaný + + + + TDottedLineStrokeStyle + + + Fade In + Postupně zesílit + + + + Dash + Čárka + + + + Fade Out + Postupně zeslabit + + + + Gap + Mezera + + + + Vanishing + Zředění + + + + TDualColorStrokeStyle2 + + + Distance + Vzdálenost + + + + Striped + Pruhovaný + + + + TFriezeStrokeStyle2 + + + Twirl + Vír + + + + Thickness + Tloušťka + + + + Curl + Kudrna + + + + TFurStrokeStyle + + + Angle + Úhel + + + + Size + Velikost + + + + Herringbone + Steh rybí kostry + + + + TGraphicPenStrokeStyle + + + Density + Hustota + + + + Dashes + Čárky + + + + TLinGradFillStyle + + + Angle + Úhel + + + + X Position + Poloha X + + + + Y Position + Poloha Y + + + + Smoothness + Hladkost + + + + Linear Gradient + Lineární přechod + + + + TLongBlendStrokeStyle2 + + + Distance + Vzdálenost + + + + Watercolor + Vodová barva + + + + TMatrioskaStrokeStyle + + + Stripes + Pruhy + + + + Toothpaste + Zubní pasta + + + + TMosaicFillStyle + + + Size + Velikost + + + + Distortion + Zkreslení + + + + Min Thick + Nejmenší tloušťka + + + + Max Thick + Největší tloušťka + + + + Stained Glass + Vitrážové sklo + + + + TMultiLineStrokeStyle2 + + + Density + Hustota + + + + Size + Velikost + + + + Thickness + Tloušťka + + + + Noise + Šum + + + + Gouache + Kvaš + + + + TNoColorRasterStyle + + + Markup + Značení + + + + TNormal2StrokeStyle + + + Light X Pos + Světlá poloha X + + + + Light Y Pos + Světlá poloha Y + + + + Shininess + Lesk + + + + Plastic + Tvárný + + + + + Bump + Boule + + + + TPatchFillStyle + + + Size + Velikost + + + + Distortion + Zkreslení + + + + Thickness + Tloušťka + + + + Beehive + Voštiny + + + + TPointShadowFillStyle + + + Angle + Úhel + + + + Density + Hustota + + + + Size + Velikost + + + + Point Size + Velikost tečky + + + + Sponge Shading + Houbovité stínování + + + + TRadGradFillStyle + + + X Position + Poloha X + + + + Y Position + Poloha Y + + + + Radius + Poloměr + + + + Smoothness + Hladkost + + + + Radial Gradient + Paprskovitý přechod + + + + TRopeStrokeStyle + + + Tilt + Naklonění + + + + Rope + Lano + + + + TRubberFillStyle + + + Intensity + Síla + + + + Blob + Skvrna + + + + TSawToothStrokeStyle + + + Distance + Vzdálenost + + + + Jagged + Zoubkovaný + + + + TSinStrokeStyle + + + Frequency + Četnost + + + + Wave + Vlna + + + + TSketchStrokeStyle + + + Density + Hustota + + + + Fuzz + Chmýří + + + + TSprayStrokeStyle + + + Border Fade + Stínidlo okraje + + + + Density + Hustota + + + + Size + Velikost + + + + Circlets + Kroužky + + + + TStripeFillStyle + + + Distance + Vzdálenost + + + + Angle + Úhel + + + + Thickness + Tloušťka + + + + Banded + Pruhovaný + + + + TTissueStrokeStyle + + + Density + Hustota + + + + Border Size + Velikost okraje + + + + Gauze + Gáza + + + + TTwirlStrokeStyle + + + Twirl + Vír + + + + Shade + Stínování + + + + Ribbon + Stuha + + + + TZigzTSinStrokeStyleagStrokeStyle + + + Thickness + Tloušťka + + + + TZigzagStrokeStyle + + + Min Distance + Nejmenší vzdálenost + + + + Max Distance + Největší vzdálenost + + + + Min Angle + Nejmenší úhel + + + + Max Angle + Největší úhel + + + + Thickness + Tloušťka + + + + Zigzag + Klikatá čára + + + diff --git a/toonz/sources/translations/czech/image.ts b/toonz/sources/translations/czech/image.ts new file mode 100644 index 0000000..b5fd579 --- /dev/null +++ b/toonz/sources/translations/czech/image.ts @@ -0,0 +1,353 @@ + + + + + AviWriterProperties + + + Codec + Kodek + + + + Uncompressed + Nezkomprimovaný (nezabalený) + + + + GifWriterProperties + + + Scale + Měřítko + + + + Looping + Smyčka + + + + Generate Palette + Vytvořit paletu + + + + Mp4WriterProperties + + + Quality + Jakost + + + + Scale + Měřítko + + + + PngWriterProperties + + + Alpha Channel + Alfa kanál + + + + QObject + + + FFmpeg timed out. +Please check the file for errors. +If the file doesn't play or is incomplete, +Please try raising the FFmpeg timeout in Preferences. + U FFmpeg došlo k překročení času. +Prověřte, prosím, soubor na chyby. +Pokud se soubor nepřehrává, nebo je neúplný, +zkuste, prosím, zvednout dobu pro vypršení pro FFmpeg v Nastavení. + + + + SgiWriterProperties + + + Bits Per Pixel + Bitů na obrazový bod (pixel) + + + + 24 bits + 24 bitů + + + + 32 bits + 32 bitů + + + + 48 bits + 48 bitů + + + + 64 bits + 64 bitů + + + + 8 bits (Greyscale) + 8 bitů (odstíny šedi) + + + + Endianess + Endian + + + + Big Endian + Velký Endian + + + + Little Endian + Malý Endian + + + + RLE-Compressed + Komprimace RLE + + + + SpriteWriterProperties + + + Top Padding + Vycpávka nahoře + + + + Bottom Padding + Vycpávka dole + + + + Left Padding + Vycpávka vlevo + + + + Right Padding + Vycpávka vpravo + + + + Scale + Měřítko + + + + Format + Formát + + + + Grid + Mřížka + + + + Vertical + Svisle + + + + Horizontal + Vodorovně + + + + Individual + Jednotlivě + + + + Trim Empty Space + Ořezat prázdné místo + + + + SvgWriterProperties + + + Stroke Mode + Režim tahu + + + + Outline Quality + Jakost obrysu + + + + Centerline + Středová čára + + + + Outline + Obrys + + + + High + Vysoká + + + + Medium + Střední + + + + Low + Nízká + + + + TgaWriterProperties + + + Bits Per Pixel + Bitů na obrazový bod (pixel) + + + + 16 bits + 16 bitů + + + + 24 bits + 24 bitů + + + + 32 bits + 32 bitů + + + + Compression + Komprese + + + + TifWriterProperties + + + Byte Ordering + Pořadí bytů + + + + Compression Type + Typ komprese + + + + Bits Per Pixel + Bitů na obrazový bod (pixel) + + + + 24(RGB) + 24 (RGB) + + + + 48(RGB) + 48 (RGB) + + + + 1(BW) + 1 (černá bílá) + + + + 8(GREYTONES) + 8 (odstíny šedi) + + + + 32(RGBM) + 32 (RGBM) + + + + 64(RGBM) + 64 (RGBM) + + + + Orientation + Natočení + + + + Top Left + Nahoře vlevo + + + + Top Right + Nahoře vpravo + + + + Bottom Right + Dole vpravo + + + + Bottom Left + Dole vlevo + + + + Left Top + Vlevo nahoře + + + + Left Bottom + Vlevo dole + + + + Right Top + Vpravo nahoře + + + + Right Bottom + Vpravo dole + + + + WebmWriterProperties + + + Quality + Jakost + + + + Scale + Měřítko + + + diff --git a/toonz/sources/translations/czech/tnzcore.ts b/toonz/sources/translations/czech/tnzcore.ts new file mode 100644 index 0000000..f4d42db --- /dev/null +++ b/toonz/sources/translations/czech/tnzcore.ts @@ -0,0 +1,97 @@ + + + + + BmpWriterProperties + + + Bits Per Pixel + Bitů na obrazový bod (pixel) + + + + 24 bits + 24 bitů + + + + 8 bits (Greyscale) + 8 bitů (odstíny šedi) + + + + JpgWriterProperties + + + Quality + Jakost + + + + Smoothing + Vyhlazování + + + + QObject + + + colors + barvy + + + + Skipping frame. + Přeskakuje se snímek. + + + + Malformed frame name + Poškozený název snímku + + + + Unidentified Action + Neznámá činnost + + + + TCenterLineStrokeStyle + + + Constant + Stálý + + + + Thickness + Tloušťka + + + + TRasterImagePatternStrokeStyle + + + Distance + Odstup + + + + Rotation + Otočení + + + + TVectorImagePatternStrokeStyle + + + Distance + Odstup + + + + Rotation + Otočení + + + diff --git a/toonz/sources/translations/czech/tnztools.ts b/toonz/sources/translations/czech/tnztools.ts new file mode 100644 index 0000000..b624c9a --- /dev/null +++ b/toonz/sources/translations/czech/tnztools.ts @@ -0,0 +1,2016 @@ + + + + + ArrowToolOptionsBox + + + Z: + Z: + + + + Position: + Poloha: + + + + + E/W: + V/Z: + + + + + N/S: + S/J: + + + + SO: + SO: + + + + Rotation: + Otočení: + + + + Global: + Celkové: + + + + + H: + V: + + + + + V: + S: + + + + Pick: + Vybrat předmět: + + + + Position + Poloha + + + + ( + ( + + + + ) + ) + + + + Rotation + Otočení + + + + Scale + Měřítko + + + + Maintain: + Zachovat: + + + + Shear + Stříhat + + + + Center Position + Střední poloha + + + + Table + Tabulka + + + + BrushTool + + + Size + Velikost + + + + Accuracy: + Přesnost: + + + + Smooth: + Vyhlazení: + + + + Preset: + Přednastavení: + + + + + <custom> + <vlastní> + + + + Break + Zlomit ostré úhly + + + + Pressure + Tlak + + + + Cap + Čepice + + + + Join + Spojit + + + + Miter: + Zkosení: + + + + Range: + Rozsah: + + + + Snap + Zapadnout + + + + Off + Vypnuto + + + + Linear + Lineární + + + + In + + + + + Out + + + + + In&Out + + + + + Low + Nízký + + + + Med + Střední + + + + High + Vysoký + + + + Butt cap + + + + + Round cap + + + + + Projecting cap + + + + + Miter join + + + + + Round join + + + + + Bevel join + + + + + BrushToolOptionsBox + + + Preset Name + + + + + OK + OK + + + + Cancel + Zrušit + + + + ControlPointEditorTool + + + Auto Select Drawing + Automatický výběr kreslení + + + + ControlPointSelection + + + Set Linear Control Point + Nastavit lineární ovládací bod + + + + Set Nonlinear Control Point + Nastavit nelineární ovládací bod + + + + DVGui::StyleIndexLineEdit + + + current + Nynější + + + + EditTool + + + Scale Constraint: + Omezení měřítka: + + + + + None + Žádné + + + + A/R + + + + + Mass + + + + + Auto Select Column + Automaticky vybrat sloupec + + + + Column + Sloupec + + + + Pegbar + Pruh na kolíky + + + + Global Key + Celkový klíč + + + + Lock Center E/W + Uzmknout střed [X] + + + + Lock Center N/S + Uzmknout střed [Y] + + + + Lock Position E/W + Uzmknout polohu [X] + + + + Lock Position N/S + Uzmknout polohu [Y] + + + + Lock Rotation + Uzmknout otočení + + + + Lock Shear H + Uzmknout střih vodorovně + + + + Lock Shear V + Uzmknout střih svisle + + + + Lock Scale H + Uzmknout měřítko vodorovně + + + + Lock Scale V + Uzmknout měřítko svisle + + + + Lock Global Scale + Uzmknout celkové měřítko + + + + E/W and N/S Positions + Polohy X a Y + + + + Z Position + Poloha Z + + + + SO + SO + + + + + Rotation + Otočení + + + + Global Scale + Celkové měřítko + + + + Horizontal and Vertical Scale + Vodorovné a svislé měřítko + + + + + Shear + Stříhat + + + + Center Position + Střední poloha + + + + Active Axis + Činná osa + + + + Position + Poloha + + + + Scale + Měřítko + + + + Center + Střed + + + + All + Vše + + + + EraserTool + + + + Size: + Velikost: + + + + + Selective + Výběrový + + + + + Invert + Obrátit + + + + + Frame Range + Rozsah snímku + + + + + Type: + Typ: + + + + + Normal + Normální + + + + + Rectangular + Obdélníkový + + + + + Freehand + Kreslení od ruky + + + + + Polyline + Lomená čára + + + + Hardness: + Tvrdost: + + + + Mode: + Režim: + + + + Lines + Čáry + + + + Areas + Plochy + + + + Lines & Areas + Čáry a plochy + + + + Pencil Mode + Režim tužky + + + + FillTool + + + Frame Range + Rozsah snímku + + + + Type: + Typ: + + + + Normal + Normální + + + + Rectangular + Obdélníkový + + + + Freehand + Kreslení od ruky + + + + Polyline + Lomená čára + + + + Selective + Výběrový + + + + Mode: + Režim: + + + + Lines + Čáry + + + + Areas + Plochy + + + + Lines & Areas + Čáry a plochy + + + + Onion Skin + Cibulový vzhled + + + + Fill Depth + Hloubka výplně + + + + Segment + Část + + + + Maximum Gap + Největší mezera + + + + Autopaint Lines + Automatické malování čar + + + + FingerTool + + + Size: + Velikost: + + + + Invert + Obrátit + + + + FullColorBrushTool + + + + Size + Velikost + + + + Pressure + Tlak + + + + + Opacity + Neprůhlednost + + + + Hardness: + Tvrdost: + + + + Preset: + Přednastavení: + + + + Eraser + Guma + + + + Lock Alpha + Zamknout alfu + + + + <custom> + <vlastní> + + + + FullColorEraserTool + + + Size: + Velikost: + + + + Opacity: + Neprůhlednost: + + + + Hardness: + Tvrdost: + + + + Type: + Typ: + + + + Normal + Normální + + + + Rectangular + Obdélníkový + + + + Freehand + Kreslení od ruky + + + + Polyline + Lomená čára + + + + Invert + Obrátit + + + + Frame Range + Rozsah snímku + + + + FullColorFillTool + + + Fill Depth + Hloubka výplně + + + + HandToolOptionsBox + + + Reset Position + + + + + HookTool + + + Snap + Zapadnout + + + + MagnetTool + + + Size: + Velikost: + + + + PaintBrushTool + + + Size: + Velikost: + + + + Mode: + Režim: + + + + Lines + Čáry + + + + Areas + Plochy + + + + Lines & Areas + Čáry a plochy + + + + Selective + Výběrový + + + + PinchTool + + + Size: + Velikost: + + + + Corner: + Roh: + + + + Manual + Ruční + + + + PlasticTool + + + Swap Edge + Vyměnit okraj + + + + Collapse Edge + Sbalit okraj + + + + Split Edge + Rozdělit okraj + + + + Cut Mesh + Vyjmout síť + + + + Delete Vertex + Smazat vrchol + + + + Set Key + Nastavit klávesu + + + + Set Rest Key + Nastavit klávesu pro klidovou polohu + + + + Set Global Key + Nastavit celkovou klávesu + + + + Set Global Rest Key + Nastavit celkovou klávesu pro klidovou polohu + + + + Mode: + Režim: + + + + Edit Mesh + Upravit síť + + + + Paint Rigid + Malovat neohebný + + + + Build Skeleton + Postavit kostru + + + + Animate + Animovat + + + + Vertex Name: + Název vrcholu: + + + + Allow Stretching + Povolit roztažení + + + + Snap To Mesh + Přichytávat k síti + + + + Thickness + Tloušťka + + + + Rigid + Tuhý + + + + Flex + Ohebný + + + + Global Key + Celková klávesa + + + + Keep Distance + Zachovat odstup + + + + Angle Bounds + Ohraničení úhlu + + + + A group of skeletons already exists for current column. Replacing it will also substitute any existing vertex animation. + +Do you want to continue? + V nynějším sloupci již existuje skupina koster. Její nahrazení rovněž nahradí všechny stávající animace vrcholu. + +Chcete pokračovat? + + + + Ok + OK + + + + Cancel + Zrušit + + + + Copy Skeleton + Kopírovat kostru + + + + Paste Skeleton + Vložit kostru + + + + Show Mesh + Ukázat síť + + + + Show Rigidity + Ukázat ztuhlost + + + + Show SO + Ukázat SO + + + + Show Skeleton Onion Skin + Ukáza cibulový vzhled kostry + + + + The previous vertex name will be discarded, and all associated keys will be lost. + +Do you want to proceed? + Předchozí název vrcholu bude zahozen a všechny přiřazené klávesy budou ztraceny. + +Chcete pokračovat? + + + + PlasticToolOptionsBox + + + Create Mesh + Vytvořit síť + + + + Skeleton: + Kostra: + + + + Distance + Odstup + + + + Angle + Úhel + + + + SO + SO + + + + PrimitiveParam + + + Shape: + Tvar: + + + + Rectangle + Obdélník + + + + Circle + Kruh + + + + Ellipse + Elipsa + + + + Line + Čára + + + + Polyline + Lomená čára + + + + Arc + Oblouk + + + + Polygon + Mnohoúhelník + + + + Size: + Velikost: + + + + Thickness: + Tloušťka: + + + + Opacity: + Neprůhlednost: + + + + Hardness: + Tvrdost: + + + + Polygon Sides: + Strany mnohoúhelníku: + + + + Auto Group + Automatické seskupení + + + + Auto Fill + Automatické vyplnění + + + + Selective + Výběrový + + + + Pencil Mode + Režim tužky + + + + Cap + Čepice + + + + Butt cap + + + + + Round cap + + + + + Projecting cap + + + + + Join + Spojit + + + + Miter join + + + + + Round join + + + + + Bevel join + + + + + Miter: + + + + + Snap + Zapadnout + + + + Low + Nízký + + + + Med + Střední + + + + High + Vysoký + + + + PumpTool + + + Size: + Velikost: + + + + Accuracy: + Přesnost: + + + + QObject + + + + Yes + Ano + + + + + No + Ne + + + + + The copied selection cannot be pasted in the current drawing. + Zkopírovaný výběr nelze vložit do nynější kresby. + + + + + Paste + Vložit + + + + + Min: + Nejméně: + + + + + Max: + Nejvíce: + + + + Set Save Box : (X%1,Y%2,W%3,H%4)->(X%5,Y%6,W%7,H%8) + Nastavit ukládací box: (X%1,Y%2,W%3,H%4)->(X%5,Y%6,W%7,H%8) + + + + Move Center + Posunout středovou polohu + + + + RGB Picker (R%1, G%2, B%3) + Volič RGB (R%1, G%2, B%3) + + + + Ok + OK + + + + Cancel + Zrušit + + + + Group + Seskupit + + + + Ungroup + Zrušit seskupení + + + + to Front + na přední stranu + + + + to Forward + do popředí + + + + to Back + na zadní stranu + + + + to Backward + do pozadí + + + + Move Group + Přesunout skupinu + + + + Modify Fx Gadget + Změnit udělátko efektu + + + + The current column is locked. + Nynější sloupec je uzamknut. + + + + The current column is hidden. + Nynější sloupec je skryt. + + + + It is not possible to edit the audio column. + Není možné upravit sloupec zvuku. + + + + Note columns can only be edited in the xsheet or timeline. + Sloupce s poznámkami mohou být upravovány jen v XSheet nebo časové ose. + + + + The current tool cannot be used on a Level column. + Nynější nástroj nelze použít na sloupec úroveň. + + + + The current tool cannot be used on a Mesh column. + Nynější nástroj nelze použít na sloupec síť. + + + + The current tool cannot be used in Level Strip mode. + Nynější nástroj nelze použít ve sloupci pruh úrovně. + + + + The current tool cannot be used to edit a motion path. + Nynější nástroj nelze použít na upravení cesty pohybu. + + + + + The current level is not editable. + Nynější úroveň není upravitelná. + + + + The current tool cannot be used on a Vector Level. + Nynější nástroj nelze použít na vektorovou úroveň. + + + + The current tool cannot be used on a Toonz Level. + Nynější nástroj nelze použít na úroveň Toonz. + + + + The current tool cannot be used on a Raster Level. + Nynější nástroj nelze použít na rastrovou úroveň. + + + + The current tool cannot be used on a Mesh Level. + Nynější nástroj nelze použít na úroveň síť. + + + + The current tool cannot be used on a mesh-deformed level + Nynější nástroj nelze použít na úroveň zdeformovaná (přetvořená) síť. + + + + The current frame is locked: any editing is forbidden. + Nynější snímek je uzamknut: jakékoli úpravy jsou zakázány. + + + + %1 Level : %2 Frame : %3 + %1 Úroveň: %2 Snímek: %3 + + + + + Modify Stroke Tool + Změnit nástroj na tah + + + + Modify Spline + Změnit křivku (spline) + + + + Deform Raster + Přetvořit rastr + + + + Transform Raster + Proměnit rastr + + + + RGBPickerTool + + + Type: + Typ: + + + + Normal + Normální + + + + Rectangular + Obdélníkový + + + + Freehand + Kreslení od ruky + + + + Polyline + Lomená čára + + + + Passive Pick + Pasivní volba + + + + RGBPickerToolOptionsBox + + + Pick Screen + Zvolit obrazovku + + + + RasterSelectionTool + + + Modify Savebox + Změnit ukládací box + + + + No Antialiasing + Žádné vyhlazování + + + + RasterTapeTool + + + Type: + Typ: + + + + Normal + Normální + + + + Rectangular + Obdélníkový + + + + Freehand + Kreslení od ruky + + + + Polyline + Lomená čára + + + + Distance: + Odstup: + + + + Style Index: + Číslo stylu: + + + + current + Nynější + + + + Opacity: + Neprůhlednost: + + + + Frame Range + Rozsah snímku + + + + Angle: + Úhel: + + + + RotateTool + + + Rotate On Camera Center + Otočit střed na kameře + + + + RotateToolOptionsBox + + + Reset Rotation + + + + + RulerToolOptionsBox + + + X: + ruler tool option + X: + + + + Y: + ruler tool option + Y: + + + + W: + ruler tool option + Š: + + + + H: + ruler tool option + V: + + + + A: + ruler tool option + A: + + + + L: + ruler tool option + D: + + + + SelectionTool + + + Type: + Typ: + + + + Rectangular + Obdélníkový + + + + Freehand + Kreslení od ruky + + + + Polyline + Lomená čára + + + + SelectionToolOptionsBox + + + H: + V: + + + + V: + S: + + + + Link + Stanovit poměr stran + + + + + Rotation + Otočení + + + + E/W: + X: + + + + N/S: + Y: + + + + Scale + Měřítko + + + + Position + Poloha + + + + Thickness + Tloušťka + + + + ShiftTraceToolOptionBox + + + Reset Previous + Nastavit znovu předchozí + + + + Reset Following + Nastavit znovu následující + + + + Previous Drawing + Předchozí kresba + + + + Following Drawing + Následující kresba + + + + SkeletonTool + + + Show Only Active Skeleton + Ukázat jen činnou kostru + + + + Global Key + Celková klávesa + + + + Mode: + Režim: + + + + Build Skeleton + Postavit kostru + + + + Animate + Animovat + + + + Inverse Kinematics + Obrácená kinematika + + + + Reset Pinned Center + Obnovit výchozí stanovený střed + + + + StylePickerTool + + + No current level. + Žádná nynější úroveň. + + + + Current level has no available palette. + Nynější úroveň nemá žádnou dostupnou paletu. + + + + Palette must have more than one palette to be organized. + Paleta musí mít více než jednu paletu, aby byla uspořádána. + + + + Mode: + Režim: + + + + Lines + Čáry + + + + Areas + Plochy + + + + Lines & Areas + Čáry a plochy + + + + Passive Pick + Pasivní volba + + + + Organize Palette + Uspořádat paletu + + + + StylePickerToolOptionsBox + + + With this option being activated, the picked style will be +moved to the end of the first page of the palette. + Se zapnutím této volby bude zvolený styl +přesunut na konec první strany palety. + + + + ToonzRasterBrushTool + + + + Size + Velikost + + + + Hardness: + Tvrdost: + + + + Smooth: + Vyhlazení: + + + + Draw Order: + Pořadí kresby: + + + + Over All + Nad vše + + + + Under All + Pod vše + + + + Palette Order + Pořadí palety + + + + Preset: + Přednastavení: + + + + + <custom> + <vlastní> + + + + Pencil + Tužka + + + + Pressure + Tlak + + + + TrackerTool + + + Width: + Šířka: + + + + Height: + Výška: + + + + X: + X: + + + + Y: + Y: + + + + TypeTool + + + Font: + Písmo: + + + + Style: + Styl: + + + + Vertical Orientation + Svislé natočení + + + + Size: + Velikost: + + + + VectorSelectionTool + + + Mode: + Režim: + + + + Standard + Standardní + + + + Selected Frames + Vybrané snímky + + + + Whole Level + Celá úroveň + + + + Same Style + Stejný styl + + + + Same Style on Selected Frames + Stejný styl na vybrané snímky + + + + Same Style on Whole Level + Stejný styl na celou úroveň + + + + Boundary Strokes + Hraniční tahy + + + + Boundaries on Selected Frames + Hraniční čáry na vybrané snímky + + + + Boundaries on Whole Level + Hraniční čáry na celou úroveň + + + + Preserve Thickness + Zachovat tloušťku + + + + Cap + Čepice + + + + Butt cap + + + + + Round cap + + + + + Projecting cap + + + + + Join + Spojit + + + + Miter join + + + + + Round join + + + + + Bevel join + + + + + Miter: + Zkosení + + + + VectorTapeTool + + + Smooth + Vyhladit + + + + Join Vectors + Spojit vektory + + + + Distance + Odstup + + + + Mode: + Režim: + + + + Endpoint to Endpoint + Koncový bod ke koncovému bodu + + + + Endpoint to Line + Koncový bod k čáře + + + + Line to Line + Čára k čáře + + + + Type: + Typ: + + + + Normal + Normální + + + + Rectangular + Obdélníkový + + + + ZoomToolOptionsBox + + + Reset Zoom + + + + diff --git a/toonz/sources/translations/czech/toonz.ts b/toonz/sources/translations/czech/toonz.ts new file mode 100644 index 0000000..bdc69b9 --- /dev/null +++ b/toonz/sources/translations/czech/toonz.ts @@ -0,0 +1,13133 @@ + + + + + AddFilmstripFramesPopup + + Add Frames + Přidat snímky + + + From Frame: + Od snímku: + + + To Frame: + Po snímek: + + + Step: + Krok: + + + Add + Přidat + + + Cancel + Zrušit + + + + AdjustLevelsPopup + + Adjust Levels + Přizpůsobit úrovně + + + Clamp + Svorka + + + Auto + Automaticky + + + Reset + Obnovit výchozí + + + Apply + Použít + + + + AdjustThicknessPopup + + Adjust Thickness + Přizpůsobit tloušťku + + + Mode: + Režim: + + + Scale Thickness + Změnit velikost tloušťky + + + Add Thickness + Přidat tloušťku + + + Constant Thickness + Stálá tloušťka + + + Start: + Začátek: + + + End: + Konec: + + + Apply + Použít + + + + AntialiasPopup + + Apply Antialias + Použít vyhlazování + + + Threshold: + Práh: + + + Softness: + Jemnost: + + + Apply + Použít + + + + ApplyMatchlinesCommand + + It is not possible to apply the match lines because no column was selected. + Není možné použít dělicí čáry, protože nebyl vybrán žádný sloupec. + + + It is not possible to apply the match lines because two columns have to be selected. + Je možné použít dělicí čáry, protože musí být vybrány dva sloupce. + + + + AudioRecordingPopup + + Audio Recording + Nahrávání zvuku + + + Save and Insert + Uložit a vložit + + + Sync with XSheet + Seřídit s XSheet + + + + + + + The microphone is not available: +Please select a different device or check the microphone. + Mikrofon není dostupný: +Vyberte, prosím, jiné zařízení nebo prověřte mikrofon. + + + + AutoInputCellNumberPopup + + Auto Input Cell Number + Automaticky vložit číslo buňky + + + Overwrite + Přepsat + + + Insert + Vložit + + + Cancel + Zrušit + + + Setting this value 0 will automatically +pick up all frames in the selected level. + Nastavení této hodnoty na 0 automaticky +sebere všechny snímky ve vybrané úrovni. + + + From frame + Od snímku + + + + from frame + + + + with + s + + + frames increment + přírůstkem snímků + + + To frame + Po snímek + + + + to frame + + + + inserting + vložením + + + empty cell intervals + prázdných intervalů buněk + + + cell steps + + + + Repeat + Opakovat + + + times + krát + + + No available cells or columns are selected. + Nejsou vybrány žádné dostupné buňky nebo sloupce. + + + Selected level has no frames between From and To. + Vybraná úroveň nemá žádné snímky mezi Od a Do. + + + + AutocenterPopup + + Autocenter + Automatické vystředění + + + Pegbar Holes: + Díry pruhu na kolíky: + + + Field Guide: + Praktický úvod: + + + + BatchServersViewer + + Process with: + Zpracovat s: + + + Local + Místní + + + Render Farm + Zpracovatelský statek + + + Name: + Název: + + + IP Address: + Adresa IP: + + + Port Number: + Číslo přípojky: + + + Tasks: + Úkoly: + + + State: + Stav: + + + Number of CPU: + Počet CPU: + + + Physical Memory: + Fyzická paměť: + + + Farm Global Root: + Celkový root statku: + + + In order to use the render farm you have to define the Farm Global Root first. + Pro použití zpracovatelského statku, musíte nejprve stanovit celkový kořen statku. + + + The Farm Global Root folder doesn't exist +Please create this folder before using the render farm. + Celkový kořen statku neexistuje. Vytvořte, prosím, tuto složku, předtím než zpracovatelský statek použijete. + + + Unable to connect to the ToonzFarm Controller + The Controller should run on %1 at port %2 + Please start the Controller before using the ToonzFarm + Nelze se spojit s ovladačem ToonzFarm. Ovladač by měl běžet na %1 na přípojce (port) %2. Spusťte, prosím, ovladač, předtím než ToonzFarm použijete + + + + BatchesController + + Tasks + Úkoly + + + The Task List is empty! + Seznam úkolů je prázdný! + + + The current task list has been modified. +Do you want to save your changes? + Seznam nynějších úloh byl změněn. +Chcete uložit své změny? + + + Save + Uložit + + + Discard + Zahodit + + + Cancel + Zrušit + + + The %1 task is currently active. +Stop it or wait for its completion before removing it. + Úloha %1 je nyní činná. +Zastavte ji nebo počkejte na její dokončení, předtím než ji odstraníte. + + + + BinarizePopup + + Binarize + Převést na binární + + + Alpha + Alfa kanál + + + Preview + Náhled + + + Apply + Použít + + + No raster frames selected + Nebyly vybrány žádné rastrové obrázky + + + Binarizing images + Převést obrázky na binární + + + Cancel + Zrušit + + + + BoardSettingsPopup + + Clapperboard Settings + Nastavení filmové klapky + + + Load Preset + Nahrát přednastavení + + + Save as Preset + Uložit jako přednastavení + + + Close + Zavřít + + + Duration (frames): + Doba trvání (snímků): + + + Text + Text + + + Project name + Název projektu + + + Scene name + Název záběru + + + Duration : Frame + Doba trvání: Snímek + + + Duration : Sec + Frame + Doba trvání: sekundy + snímek + + + Duration : HH:MM:SS:FF + Doba trvání: HH:MM:SS:FF + + + Current date + Nynější datum + + + Current date and time + Nynější datum a čas + + + User name + Uživatelský název + + + Scene location : Aliased path + Umístění záběru: Zástupná cesta + + + Scene location : Full path + Umístění záběru: Úplná cesta + + + Output location : Aliased path + Umístění výstupu: Zástupná cesta + + + Output location : Full path + Umístění výstupu: Úplná cesta + + + Image + Obrázek + + + + BoardView + + Please set the duration more than 0 frame first, or the clapperboard settings will not be saved in the scene at all! + Nastavte, prosím, nejprve dobu trvání na více než 0, nebo nebude nastavení filmové klapky v záběru vůbec uloženo! + + + + BrightnessAndContrastPopup + + Brightness and Contrast + Jas a kontrast + + + Brightness: + Jas: + + + Contrast: + Kontrast: + + + Apply + Použít + + + + BrowserPopup + + Choose + Vybrat + + + Path %1 doesn't exists. + Cesta %1 neexistuje. + + + + CameraCaptureLevelControl + + Black Point Value + Hodnota černého bodu + + + White Point Value + Hodnota bílého bodu + + + Threshold Value + Hodnota prahu + + + Gamma Value + Hodnota gamy + + + + CameraCaptureLevelHistogram + + Click to Update Histogram + Klepnout pro obnovení histogramu + + + Drag to Move White Point + Táhnout pro posunutí bílého bodu + + + Drag to Move Gamma + Táhnout pro posunutí gamy + + + Drag to Move Black Point + Táhnout pro posunutí černého bodu + + + Drag to Move Threshold Point + Táhnout pro posunutí bodu prahu + + + + CameraSettingsPopup + + Name: + Název: + + + Camera#%1 Settings + Kamera#%1-nastavení + + + Current Camera Settings + Nastavení nynější kamery + + + + CanvasSizePopup + + Canvas Size + Velikost pracovní plochy + + + Current Size + Nynější velikost + + + Width: + Šířka: + + + Height: + Výška: + + + New Size + Nová velikost + + + Unit: + Jednotka: + + + Relative + Poměrná + + + Anchor + Ukotvení + + + Cancel + Zrušit + + + Resize + Změnit velikost + + + The new canvas size is smaller than the current one. +Do you want to crop the canvas? + Nová pracovní plocha (plátno) je menší než nynější. +Chcete pracovní plochu oříznout? + + + Crop + Oříznout + + + pixel + obrazový bod (pixel) + + + mm + mm + + + cm + cm + + + field + Pole + + + inch + palec + + + + CaptureSettingsPopup + + Define Device + Stanovit zařízení + + + V Resolution + Svislé rozlišení + + + H Resolution + Vodorovné rozlišení + + + White Calibration + Vyrovnání bílé + + + Capture + Zachytávání + + + Brightness: + Jas: + + + Contrast: + Kontrast: + + + Upside-down + Obráceně + + + A Device is Connected. + Zařízení je připojeno. + + + No cameras found. + Nenalezeny žádné kamery. + + + Device Disconnected. + Zařízení je odpojeno. + + + No Device Defined. + Nestanoveno žádné zařízení. + + + + CastBrowser + + It is not possible to edit the selected file. + Není možné upravit vybraný soubor. + + + It is not possible to edit more than one file at once. + Není možné upravit najednou více než jeden soubor. + + + It is not possible to show the folder containing the selected file, as the file has not been saved yet. + Není možné ukázat složku obsahující vybraný soubor, jelikož soubor ještě nebyl uložen. + + + It is not possible to view the selected file, as the file has not been saved yet. + Není možné ukázat vybraný soubor, jelikož soubor ještě nebyl uložen. + + + It is not possible to show the info of the selected file, as the file has not been saved yet. + Není možné ukázat informace o vybraném souboru, jelikož soubor ještě nebyl uložen. + + + + CastTreeViewer + + Delete folder + Smazat složku + + + Yes + Ano + + + No + Ne + + + + ChooseCameraDialog + + Ok + OK + + + Cancel + Zrušit + + + + CleanupPopup + + Do you want to cleanup this frame? + Chcete vyčistit tento snímek? + + + Cleanup + Vyčistit + + + Cleanup in progress + Probíhá čištění + + + Skip + Přeskočit + + + Cleanup All + Vyčistit vše + + + Cancel + Zrušit + + + Cleanup in progress: + Probíhá čištění: + + + It is not possible to cleanup: the cleanup list is empty. + Nelze vyčistit: Seznam k vyčištění je prázdný. + + + The resulting resolution of level "%1" +does not match with that of previously cleaned up level drawings. + +Please set the right camera resolution and closest field, or choose to delete +the existing level and create a new one when running the cleanup process. + Die entstehende Auflösung von Ebene "%1" entspricht nicht der Auflösung der vorher gesäuberten Ebene. + +Bitte stellen Sie die richtige Kamera-Auflösung und das nächste Feld ein, oder wählen Sie die bestehende Ebene zu löschen aus und erstellen eine Neue beim Ausführen des Säuberungsprozesses. + + + Selected drawings will overwrite the original files after the cleanup process. +Do you want to continue? + Vybrané kresby přepíší po proběhnutí čištění původní soubory. +Chcete pokračovat? + + + Ok + OK + + + There were errors opening the existing level "%1". + +Please choose to delete the existing level and create a new one +when running the cleanup process. + Es traten Fehler beim öffnen der vorhandenen Ebene "%1" auf. + +Bitte löschen Sie die vorhandene Ebene und erstellen eine Neue wenn Sie den Säuberungsprozess durchführen. + + + Couldn't create directory "%1" + Nepodařila se vytvořit adresář "%1" + + + Couldn't open "%1" for write + Nepodařila se otevřít "%1" pro zápis + + + Couldn't remove file "%1" + Nepodařila se odstranit soubor "%1" + + + View + Pohled + + + : Cleanup in progress + : Probíhá čištění + + + + CleanupPopup::OverwriteDialog + + Warning! + Varování! + + + Cleanup all selected drawings overwriting those previously cleaned up. + Vyčistit všechny vybrané kresby a ty vyčištěné předtím přepsat. + + + Cleanup only non-cleaned up drawings and keep those previously cleaned up. + Vyčistit jen nevyčištěné kresby a ty vyčištěné předtím zachovat. + + + Delete existing level and create a new level with selected drawings only. + Smazat stávající úroveň a vytvořit novou úroveň, jen s vybranými kresbami. + + + Rename the new level adding the suffix + Přejmenovat novou úroveň a přidat příponu + + + File "%1" already exists. +What do you want to do? + Soubor "%1" již existuje. +Co chcete dělat? + + + Cleanup all selected drawings overwriting those previously cleaned up.* + Vyčistit všechny vybrané kresby a ty vyčištěné předtím přepsat.* + + + Cleanup only non-cleaned up drawings and keep those previously cleaned up.* + Vyčistit jen nevyčištěné kresby a ty vyčištěné předtím zachovat.* + + + This is Re-Cleanup. Overwrite only to the no-paint files. + Toto je opětovné vyčištění. Přepsat jen po soubory ne-malba. + + + * Palette will not be changed. + * Paleta se nezmění. + + + + CleanupSettings + + Cleanup + Vyčistit + + + Processing + Zpracování + + + Camera + Kamera + + + Toggle Swatch Preview + Přepnout náhled na vzorek + + + Toggle Opacity Check + Přepnout ověření neprůhlednosti + + + Save Settings + Uložit nastavení + + + Load Settings + Nahrát nastavení + + + Reset Settings + Obnovit výchozí nastavení + + + Cleanup Settings + Nastavení vyčištění + + + Cleanup Settings: %1 + Nastavení vyčištění: %1 + + + + CleanupSettingsPane + + Horizontal + Vodorovně + + + Vertical + Svisle + + + MLAA Intensity: + Síla MLAA: + + + Save + Uložit + + + Load + Nahrát + + + Reset + Obnovit výchozí + + + Standard + Standardní + + + None + Žádný + + + Morphological + MLAA + + + Greyscale + Odstíny šedi + + + Color + Barva + + + Rotate + Otočit + + + Flip + Obrátit + + + Line Processing: + Zpracování řádku: + + + Antialias: + Vyhlazování okrajů: + + + Sharpness: + Ostrost: + + + Despeckling: + Odstranění poruch: + + + Save In + Uložit v + + + Please fill the Save In field. + Vyplňte, prosím, pole pro uložení. + + + Cleanup Settings (Global) + Nastavení vyčištění (celkové) + + + Cleanup Settings: + Nastavení vyčištění: + + + Cleanup Settings + Nastavení vyčištění + + + Cleanup Settings: %1 + Nastavení vyčištění: %1 + + + Autocenter + Automatické vystředění + + + Pegbar Holes + + + + Field Guide + Praktický úvod + + + Bottom + Dole + + + Top + Nahoře + + + Left + Vlevo + + + Right + Vpravo + + + + CleanupTab + + Autocenter + Automatické vystředění + + + Pegbar Holes: + Díry pruhu na kolíky: + + + Field Guide: + Praktický úvod: + + + Rotate: + Otočit: + + + Flip: + Obrátit: + + + Horizontal + Vodorovně + + + Vertical + Svisle + + + Save in: + Uložit v: + + + + ClipListViewer + + Load Scene + Nahrát záběr + + + + CloneLevelUndo:: LevelNamePopup + + Clone Level + Zdvojit úroveň + + + Level Name: + Název úrovně: + + + + CloneLevelUndo::LevelNamePopup + + Clone Level + Zdvojit úroveň + + + Level Name: + Název úrovně: + + + + ColorModelBehaviorPopup + + Select the Palette Operation + Vybrat operaci palety + + + Overwrite the destination palette. + Přepsat cílovou paletu. + + + Keep the destination palette and apply it to the color model. + Zachovat cílovou paletu a použít ji na barevný model. + + + The color model palette is different from the destination palette. +What do you want to do? + Paleta s barevným modelem se liší od cílové palety. +Co chcete dělat? + + + Add color model's palette to the destination palette. + Přidat paletu s barevným modelem do cílové palety. + + + Picking Colors from Raster Image + Berou se barvy z rastrového obrázku + + + Pick Every Colors as Different Styles + Sebrat každou barvu jako jednotlivý styl + + + Integrate Similar Colors as One Style + Zvolit podobné barvy jako jeden styl + + + Pick Colors in Color Chip Grid + + + + Horizontal - Top to bottom + Vodorovně - shora dolů + + + Horizontal - Bottom to top + Vodorovně - zdola nahoru + + + Vertical - Left to right + Svisle - zleva doprava + + + Pick Type: + + + + Grid Line Color: + Barva čáry mřížky: + + + Grid Line Width: + Šířka čáry mřížky: + + + Chip Order: + Pořadí kousku: + + + + ColorModelViewer + + Color Model + Barevný model + + + Use Current Frame + Použít nynější snímek + + + Remove Color Model + Odstranit barevný model + + + It is not possible to retrieve the color model set for the current level. + Není možné získat barevný model pro nynější úroveň. + + + Reset View + Obnovit výchozí pohled + + + Fit to Window + Přizpůsobit oknu + + + Update Colors by Using Picked Positions + Obnovit barvy použitím vybraných poloh + + + + ComboViewerPanel + + Safe Area (Right Click to Select) + Bezpečná oblast (klepnutí pravým tlačítkem myši pro vybrání) + + + Field Guide + Praktický úvod + + + Camera Stand View + Pohled stanoviště kamery + + + 3D View + Trojrozměrný pohled + + + Camera View + Pohled kamery + + + Freeze + Pozastavit + + + GUI Show / Hide + Ukázat/Skrýt rozhraní + + + Toolbar + Nástrojový pruh + + + Tool Options Bar + Volby pro nástroj + + + Console + Konzole + + + Preview + Náhled + + + Sub-camera Preview + Náhled na podkameru + + + Untitled + Bez názvu + + + Scene: + Záběr: + + + :: Frame: + :: Snímek: + + + :: Level: + :: Úroveň: + + + Level: + Úroveň: + + + (Flipped) + (převráceno) + + + :: Project: + + + + + CommandBar + + Customize Command Bar + Přizpůsobit příkazový řádek + + + + CommandBarListTree + + ----Separator---- + ----Oddělovač---- + + + + CommandBarPopup + + XSheet Toolbar + Nástrojový pruh XSheet + + + Customize XSheet Toolbar + Přizpůsobit nástrojový pruh XSheet + + + Command Bar + Příkazový řádek + + + Customize Command Bar + Přizpůsobit příkazový řádek + + + OK + OK + + + Cancel + Zrušit + + + Toolbar Items + Položky v nástrojovém pruhu + + + Duplicated commands will be ignored. Only the last one will appear in the menu bar. + Zdvojené příkazy se budou přehlížet. Pouze poslední se objeví v pruhu s nabídkou. + + + + CommandBarTree + + Remove "%1" + Odstranit "%1" + + + + CommandListTree + + ----Separator---- + ----Oddělovač---- + + + + ConflictWidget + + Mine + Můj + + + Theirs + Jejich + + + + ConvertPopup + + Convert + Převést + + + Start: + Začátek: + + + Save in: + Uložit v: + + + Options + Volby + + + File Format: + Formát souboru: + + + Cancel + Zrušit + + + Converting %1 + Převádí se %1 + + + Convert... + Převést... + + + Bg Color: + Barva pozadí: + + + Skip Existing Files + Přeskočit stávající soubory + + + Convert 1 Level + Převést 1 úroveň + + + Convert %1 Levels + Převést %1 úrovní + + + Converting level %1 of %2: %3 + Převádí se úroveň %1 z %2: %3 + + + Unpainted File Folder: + Složka pro nenabarvené soubory: + + + Unpainted File Suffix: + Přípona pro nenabarvené soubory: + + + Apply Autoclose + Použít automatické zavření + + + Keep Original Antialiasing + Zachovat původní vyhlazování + + + Add Antialiasing with Intensity: + Přidat vyhlazování okrajů [síla]: + + + Remove Antialiasing using Threshold: + Odstranit vyhlazování okrajů s prahovou hodnotou: + + + Palette: +      Paleta: + + + Tolerance: + Tolerance: + + + End: + Konec: + + + File to convert: + Soubor k převedení: + + + Output Name: + Název výstupu: + + + Same as Painted + Stejné jako nabarvené + + + No unpainted suffix specified: cannot convert. + Nestanovena žádná přípona pro nenabarvené soubory: nelze převést. + + + Level + Úroveň + + + already exists; skipped + soubor již existuje. Byla přeskočena + + + Generating level + Vytváří se úroveň + + + converted to tlv. + převedeno do TLV. + + + Level %1 converted to TLV Format + Úroveň %1 byla převedena do formátu TLV + + + Warning: Level %1 NOT converted to TLV Format + Varování: Úroveň %1 NEBYLA převedena do formátu TLV + + + Converted %1 out of %2 Levels to TLV Format + %1 z %2 úrovní bylo převedeno do formátu TLV + + + No output filename specified: please choose a valid level name. + Pro soubor nestanoven žádný výstupní název: Zvolte, prosím, platný název pro úroveň. + + + Mode: + Režim: + + + Warning: Can't read palette '%1' + Varování: Paletu '%1' nelze přečíst + + + Level %1 already exists; skipped. + Úroveň %1 již existuje. Byla přeskočena. + + + Level %1 has no frame; skipped. + Úroveň %1 nemá žádný snímek. Byla přeskočena. + + + Unpainted tlv + Nenabarvené TLV + + + Painted tlv from two images + Nabarvené TLV ze dvou obrázků převedeno + + + Painted tlv from non AA source + Nabarvené TLV z neostrého zdroje převedeno + + + Convert completed with %1 error(s) and %2 level(s) skipped + Převod ukončen s %1 chybou(ami) a %2 úroveň(vně) přeskočena(y) + + + Convert completed with %1 error(s) + Převod ukončen. %1 chyba(y) + + + %1 level(s) skipped + %1 úroveň(vně) přeskočena(y) + + + Create new palette + Vytvořit novou paletu + + + StrOke Mode: + Převést z PLI na SVG: + + + Centerline + Středová čára + + + Outline + Obrys + + + Unpainted tlv from non AA source + Nenabarvené TLV z neostrého zdroje (ze zdroje ne AA) + + + Remove dot before frame number + Odstranit tečku z čísla snímku + + + End: + Konec: + + + File Name: + Název souboru: + + + Save Backup to "nopaint" Folder + Zálohu uložit ve složce "nopaint" + + + Antialias: + Vyhlazování okrajů: + + + Palette: + Paleta: + + + Stroke Mode: + + + + Append Default Palette + + + + When activated, styles of the default palette +($TOONZSTUDIOPALETTE\cleanup_default.tpl) will +be appended to the palette after conversion in +order to save the effort of creating styles +before color designing. + + + + Remove Unused Styles from Input Palette + + + + Image DPI + DPI obrázku + + + Current Camera DPI + DPI nynější kamery + + + Custom DPI + Vlastní DPI + + + Specify the policy for setting DPI of converted tlv. +If you select the "Image DPI" option and the source image does not +contain the dpi information, then the current camera dpi will be used. + + + + + Dpi: + DPI: + + + + DVGui::ProgressDialog + + Loading "%1"... + Nahrává se "%1"... + + + Importing "%1"... + Zavádí se "%1"... + + + + DateChooserWidget + + time ago. + hodin před. + + + days ago. + dnů před. + + + weeks ago. + týdnů před. + + + ( Custom date ) + (vlastní datum) + + + + DefineScannerPopup + + Define Scanner + Určit skener + + + Scanner Driver: + Ovladač skeneru: + + + Cancel + Zrušit + + + Ok + OK + + + OK + OK + + + + DeleteInkDialog + + Delete Lines + Smazat řádky + + + Delete + Smazat + + + Cancel + Zrušit + + + Style Index: + Číslo stylu: + + + Apply to Frames: + Použít na oblast snímků: + + + Style Index: + Číslo stylu: + + + Apply to Frames: + Použít na oblast snímků: + + + + DuplicatePopup + + Repeat + Opakovat + + + Times: + Častost: + + + Up to Frame: + Po snímek: + + + Cancel + Zrušit + + + Close + Zavřít + + + Apply + Použít + + + + DvDirTreeView + + Edit + Upravit + + + Get + Získat + + + Put... + Nahradit... + + + Delete + Smazat + + + Refresh + Obnovit + + + Cleanup + Vyčistit + + + Delete folder + Smazat složku + + + Yes + Ano + + + No + Ne + + + Refresh operation failed: + + Obnovení selhalo: + + + Purge + Odmítnout + + + It is not possible to delete the folder. + Složku nelze smazat. + + + Refreshing... + Obnovuje se... + + + There was an error copying %1 to %2 + Při kopírování z %1 do %2 se vyskytla chyba + + + The local path does not exist: + Místní cesta neexistuje: + + + + DvItemViewerButtonBar + + Up One Level + O jednu úroveň nahoru + + + New Folder + Nová složka + + + Thumbnails View + Zobrazení náhledů + + + List View + Zobrazení seznamu + + + Back + Zpět + + + Forward + Vpřed + + + Icons View + Zobrazení ikon + + + Export File List + Vyvést seznam souborů + + + Up + Nahoru + + + New + Nový + + + Icon + Ikona + + + List + Seznam + + + + DvItemViewerPanel + + Save File List + Uložit seznam souborů + + + File List (*.csv) + Seznam souborů (*.csv) + + + + DvTopBar + + File + Soubor + + + Edit + Upravit + + + Scan && Cleanup + Skenovat a vyčistit + + + Level + Úroveň + + + Xsheet + Xsheet + + + Cells + Buňky + + + View + Pohled + + + Windows + Okna + + + Scan + Skenovat + + + + ExportCurvePopup + + Export Curve + Vyvést křivku + + + Export + Vyvést + + + + ExportLevelPopup + + Export Level + Vyvést úroveň + + + Export + Vyvést + + + Format: + Formát: + + + Retas Compliant + V souladu s RETAS + + + Options + Volby + + + Export Options + Nastavení vyvedení + + + The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | + Název souboru nesmí být prázdný nebo obsahovat následující znaky: (nový řádek) \ / : * ? " | + + + File Browser + Prohlížeč souborů + + + + ExportLevelPopup:: ExportOptions + + Background Color: + Barva pozadí: + + + No Antialias + Žádné vyhlazování + + + Vectors Export Box + Nastavení vyvedení vektoru + + + Width: + Šířka: + + + Height: + Výška: + + + H Resolution: + Vodorovné rozlišení: + + + V Resolution: + Svislé rozlišení: + + + DPI: + DPI: + + + Vectors Thickness + Tloušťka vektorů + + + Mode: + Režim: + + + Scale Thickness + Změnit tloušťku čáry + + + Add Thickness + Přidat tloušťku čáry + + + Constant Thickness + Stálá tloušťka + + + Start: + Začátek: + + + End: + Konec: + + + Scale: + Změnit velikost: + + + + ExportLevelPopup::ExportOptions + + Background Color: + Barva pozadí: + + + No Antialias + Žádné vyhlazování + + + Vectors Export Box + Nastavení vyvedení vektoru + + + Width: + Breite: + + + Height: + Höhe: + + + H Resolution: + Vodorovné rozlišení: + + + V Resolution: + Svislé rozlišení: + + + Scale: + Změnit velikost: + + + Vectors Thickness + Tloušťka vektorů + + + Mode: + Režim: + + + Scale Thickness + Změnit tloušťku čáry + + + Add Thickness + Přidat tloušťku čáry + + + Constant Thickness + Stálá tloušťka + + + Start: + Začátek: + + + End: + Konec: + + + DPI: + DPI: + + + Width: + Šířka: + + + Height: + Výška: + + + + ExportPanel + + Export + Vyvést + + + Save in: + Uložit v: + + + File Name: + Název souboru: + + + File Format: + Formát souboru: + + + Use Markers + Použít značky + + + Options + Volby + + + + ExportScenePopup + + Export Scene + Vyvést záběr + + + Choose Existing Project + Vybrat stávající projekt + + + Create New Project + Vytvořit nový projekt + + + Name: + Název: + + + Export + Vyvést + + + Cancel + Zrušit + + + The folder you selected is not a project. + Vybraná složka není projekt. + + + There was an error exporting the scene. + Při vyvádění záběru se vyskytla chyba. + + + The project name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | + Název projektu nesmí být prázdný nebo obsahovat následující znaky: (nový řádek) \ / : * ? " | + + + The project name you specified is already used. + Zadaný název projektu se již používá. + + + + FarmServerListView + + Activate + Zapnout + + + Deactivate + Vypnout + + + + FileBrowser + + Folder: + Složka: + + + Can't change file extension + Příponu souboru nelze změnit + + + Can't set a drawing number + Nelze nastavit číslo kresby + + + Can't rename. File already exists: + Přejmenování není možné. Již existuje soubor: + + + Couldn't rename + Nepodařilo se přejmenovat + + + Preview Screensaver + Náhled na spořič obrazovky + + + Install Screensaver + Nainstalovat spořič obrazovky + + + Load As Sub-xsheet + Nahrát jako pod-Xsheet + + + Load + Nahrát + + + Rename + Přejmenovat + + + Convert to Painted TLV + Převést na nabarvené TLV + + + Convert to Unpainted TLV + Převést na nenabarvené TLV + + + Version Control + Správa verzí + + + Save Scene + Uložit záběr + + + Scene name: + Název záběru: + + + Yes + Ano + + + No + Ne + + + Warning: level %1 already exists; overwrite? + Varování: Úroveň %1 již existuje. Přepsat? + + + Done: 2 Levels converted to TLV Format + Hotovo: 2 úrovně byly převedeny do formátu TLV + + + Done: All Levels converted to TLV Format + Hotovo: Všechny úrovně byly převedeny do formátu TLV + + + Edit + Upravit + + + Edit Frame Range... + Upravit rozsah snímků... + + + Put... + Nahradit... + + + Revert + Vrátit + + + Get + Získat + + + Delete + Smazat + + + Get Revision... + Získat revizi... + + + Unlock + Odemknout + + + Edit Info + Upravit informace + + + Revision History... + Průběh změn... + + + Unlock Frame Range + Odemknout rozsah snímků + + + New Folder + Nová složka + + + There was an error copying %1 to %2 + Při kopírování z %1 do %2 se vyskytla chyba + + + It is not possible to create the %1 folder. + Složku %1 nelze vytvořit. + + + Some files that you want to edit are currently opened. Close them first. + Některé soubory, jež chcete vytvořit, jsou nyní otevřeny. Nejprve je, prosím, zavřete. + + + Some files that you want to unlock are currently opened. Close them first. + Některé soubory, jež chcete odemknout, jsou nyní otevřeny. Nejprve je, prosím, zavřete. + + + Convert To Unpainted Tlv + Převést na nenabarvené TLV + + + Convert To Painted Tlv + Převést na nabarvené TLV + + + Open folder failed + Složku se nepodařilo otevřít + + + The input folder path was invalid. + Cesta ke vstupní složce byla neplatná. + + + + FileBrowserPopup + + Invalid file + Neplatný soubor + + + Ok + OK + + + Cancel + Zrušit + + + File name: + Název souboru: + + + From: + Od: + + + To: + Do: + + + Apply + Použít + + + OK + OK + + + Folder name: + Název složky: + + + + FileData + + It is not possible to find the %1 level. + Úroveň %1 nelze najít. + + + There was an error copying %1 + Při kopírování %1 se vyskytla chyba + + + + FileSelection + + Abort + Zrušit + + + Collecting assets... + Sbírá se materiál... + + + Importing scenes... + Zavádí se záběry... + + + + FileSettingsPopup + + Save in: + Uložit v: + + + File Format: + Formát souboru: + + + + Filmstrip + + Level: + Úroveň: + + + Level Strip + Proužek úrovně + + + - No Current Level - + - Žádná nynější úroveň - + + + + FilmstripFrameHeadGadget + + Click to Toggle Fixed Onion Skin + Klepněte pro přepnutí pevného cibulového vzhledu + + + Click / Drag to Toggle Onion Skin + Klepněte/Táhněte pro přepnutí cibulového vzhledu + + + Drag to Extend Onion Skin, Double Click to Toggle All + Táhněte pro rozšíření cibulového vzhledu, dvakrát klepněte pro přepnutí všeho + + + Click to Reset Shift & Trace Markers to Neighbor Frames +Hold F2 Key on the Viewer to Show This Frame Only + + + + Click to Hide This Frame from Shift & Trace +Hold F1 Key on the Viewer to Show This Frame Only + + + + Click to Hide This Frame from Shift & Trace +Hold F3 Key on the Viewer to Show This Frame Only + + + + Click to Move Shift & Trace Marker + + + + + FilmstripFrames + + Linear + Lineární + + + no icon + Žádné ikony + + + + FlipBoOk + + FlipboOk + FlipboOk + + + Rendered Frames :: From %1 To %2 :: Step %3 + Zpracované snímky :: Od %1 do %2 :: Krok %3 + + + :: Shrink + :: Zmenšit + + + It is not possible to save FlipboOk content. + Obsah FlipboOk nelze uložit. + + + Saved %1 frames out of %2 in %3 + %1 snímků z %2 bylo uloženo v %3 + + + The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | + Název souboru nesmí být prázdný nebo obsahovat následující znaky: (nový řádek) \ / : * ? " | + + + It is not possible to save because the selected file format is not supported. + Nelze uložit, protože vybraný formát souboru není podporován. + + + There are no rendered images to save. + Nejsou žádné zpracované obrázky k uložení. + + + It is not possible to take or compare snapshots for Toonz vector levels. + Není možné vytvořit nebo porovnat ukázky vektorových úrovní Toonz. + + + File %1 already exists. +Do you want to overwrite it? + Soubor %1 již existuje. +Chcete jej přepsat? + + + + FlipBook + + Flipbook + FlipboOk + + + The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | + Název souboru nesmí být prázdný nebo obsahovat následující znaky: (nový řádek) \ / : * ? " | + + + It is not possible to save because the selected file format is not supported. + Nelze uložit, protože vybraný formát souboru není podporován. + + + File %1 already exists. +Do you want to overwrite it? + Soubor %1 již existuje. +Chcete jej přepsat? + + + It is not possible to save Flipbook content. + Není možné uložit obsah FlipboOk. + + + Saved %1 frames out of %2 in %3 + %1 snímků z %2 bylo uloženo v %3 + + + There are no rendered images to save. + Nejsou žádné zpracované obrázky k uložení. + + + It is not possible to take or compare snapshots for Toonz vector levels. + Není možné vytvořit nebo porovnat ukázky vektorových úrovní Toonz. + + + Rendered Frames :: From %1 To %2 :: Step %3 + Zpracované snímky :: Od %1 do %2 :: Krok %3 + + + :: Shrink + :: Zmenšit + + + + FlipbookPanel + + Safe Area (Right Click to Select) + Bezpečná oblast (klepnutí pravým tlačítkem myši pro vybrání) + + + Minimize + Zmenšit + + + + FormatSettingsPopup + + File Settings + Nastavení souboru + + + Configure Codec + Nastavit kodek + + + + FrameHeadGadget + + Current Frame + Nynější snímek + + + Relative Onion Skin Toggle + Přepnout relativní cibulový vzhled + + + Fixed Onion Skin Toggle + Přepnout pevný cibulový vzhled + + + + FxParamEditorPopup + + Fx Settings + Nastavení efektu + + + + ImageViewer + + FlipboOk Histogram + Histogram FlipboOk + + + Clone Preview + Klonovat náhled + + + Unfreeze Preview + Pokračovat v náhledu + + + Freeze Preview + Pozastavit náhled + + + Regenerate Preview + Obnovit náhled + + + Regenerate Frame Preview + Obnovit náhled snímku + + + Reset View + Obnovit výchozí pohled + + + Fit To Window + Přizpůsobit oknu + + + Exit Full Screen Mode + Ukončit režim celé obrazovky + + + Full Screen Mode + Režim celé obrazovky + + + Load Images + Nahrát obrázky + + + Append Images + Připojit obrázky + + + Save Images + Uložit obrázky + + + Show Histogram + Ukázat histogram + + + Swap Compared Images + Vyměnit porovnávané obrázky + + + :: Zoom : + :: Zvětšení: + + + Load / Append Images + Nahrát/Připojit obrázky + + + Flipbook Histogram + Histogram FlipboOk + + + + ImportMagpieFilePopup + + Import Magpie File + Zavést soubor MAGPIE + + + Load + Nahrát + + + %1 does not exist. + %1 neexistuje. + + + + InbetweenDialog + + Inbetween + Inbetween + + + Linear + Lineární + + + Ease In + Ease In + + + Ease Out + Ease Out + + + Ease In / Ease Out + Ease In/Ease Out + + + Interpolation: + Interpolace: + + + Cancel + Zrušit + + + + InsertFxPopup + + FX Browser + Nový efekt + + + Insert + Vložit + + + Add + Přidat + + + Replace + Nahradit + + + Macro + Makro + + + Remove Macro FX + Odstranit makro-efekt + + + Remove Preset + Odstranit přednastavení + + + Yes + Ano + + + No + Ne + + + Are you sure you want to delete %1? + Opravdu chcete smazat %1? + + + It is not possible to delete %1. + %1 nelze smazat. + + + + ItemInfoView + + Bold + Tučné + + + Italic + Kurzíva + + + Ignore + Přehlížet + + + Keep + Zachovat + + + Name: + Název: + + + Type: + Typ: + + + Path: + Cesta: + + + Aspect Ratio: + Poměr stran: + + + Font: + Písmo: + + + Max Size: + Největší velikost: + + + No item selected. + Nevybrána žádná položka. + + + Item + Položka + + + + ItemListView + + Add + Přidat + + + Remove + Odstranit + + + Move Up + Posunout nahoru + + + Move Down + Posunout dolů + + + + LayerFooterPanel + + Zoom in/out of timeline + Přiblížit/Oddálit časovou osu + + + Zoom in (Ctrl-click to zoom in all the way) + Přiblížit (Ctrl+klepnutí pro přiblížení) + + + Zoom out (Ctrl-click to zoom out all the way) + Oddálit (Ctrl+klepnutí pro oddálení) + + + + LayerHeaderPanel + + Preview Visbility Toggle All + Viditelnost náhledu Přepnout vše + + + Camera Stand Visibility Toggle All + Viditelnost stanoviště kamery Přepnout vše + + + Lock Toggle All + Zámek Přepnout vše + + + + LevelCreatePopup + + New Level + Nová úroveň + + + Name: + Název: + + + To: + Ke snímku: + + + From: + Od snímku: + + + Increment: + Přírůstek: + + + Step: + Krok: + + + Type: + Typ: + + + Save in: + Uložit v: + + + Width: + Šířka: + + + Height: + Výška: + + + Create + Vytvořit + + + Cancel + Zrušit + + + DPI: + DPI: + + + No level name specified: please choose a valid level name + Pro soubor nestanoven žádný název úrovně: Zvolte, prosím, platný název pro úroveň + + + Invalid frame range + Neplatný rozsah snímků + + + Invalid step value + Neplatná hodnota kroku + + + The level name specified is already used: please choose a different level name + Název úrovně se již používá: Zvolte, prosím, jiný název + + + Folder %1 doesn't exist. +Do you want to create it? + Složka %1 již existuje. +Chcete ji vytvořit? + + + Unable to create + Nelze vytvořit + + + Invalid increment value + Neplatná hodnota přírůstku + + + Ok + OK + + + Apply + Použít + + + Save In: + Uložit v: + + + OK + OK + + + Toonz Vector Level + Vektorová úroveň Toonz + + + Toonz Raster Level + Rastrová úroveň Toonz + + + Raster Level + Úroveň rastru + + + Scan Level + Úroveň skenu + + + + LevelSettingsPopup + + Level Settings + Nastavení úrovně + + + Name: + Název: + + + Path: + Cesta: + + + Scan Path: + Cesta ke zdigitalizovanému obrázku: + + + Forced Squared Pixel + Vynucený pravoúhlý pixel + + + Width: + Šířka: + + + Height: + Výška: + + + Use Camera DPI + Použít DPI kamery + + + Camera DPI: + DPI kamery: + + + Image DPI: + DPI obrázku: + + + Image Resolution: + Rozlišení obrázku: + + + Premultiply + Přednásobit [černý-pozadí] + + + White As Transparent + Bílá jako průhledná + + + Subsampling: + Podvzorkování: + + + DPI: + DPI: + + + The file %1 is not a sound level. + Soubor %1 není úrovní zvuku. + + + Add Antialiasing + Přidat vyhlazování + + + Antialias Softness: + Jemnost vyhlazování: + + + Subsampling: + Podvzorkování: + + + Name && Path + Název úrovně a cesta k souboru + + + DPI && Resolution + DPI a rozlišení + + + Resolution: + Rozlišení: + + + Resolution + Rozlišení + + + Image DPI + DPI obrázku + + + Custom DPI + Vlastní DPI + + + Scan level + Úroveň digitalizovaného obrázku + + + Raster level + Úroveň rastru + + + Mesh level + Úroveň sítě + + + Palette level + Úroveň palety + + + Sound Column + Sloupec zvuku + + + Toonz Vector level + Vektorová úroveň Toonz + + + Toonz Raster level + Rastrová úroveň Toonz + + + + LineTestCapturePane + + Name: + Název: + + + Frame: + Snímek: + + + Increment: + Přírůstek: + + + Step: + Krok: + + + Mode: + Režim: + + + New + Nový + + + Overwite + Přepsat + + + Insert + Vložit + + + Onion Skin + Cibulový vzhled + + + View Frame + Zobrazit snímek + + + Fade: + Prolínání: + + + Connection + Spojení + + + Capture + Zachytávání + + + Capture Settings + Nastavení zachytávání + + + File Settings + Nastavení souboru + + + Bad Selection. + Výběr je neplatný. + + + No Device Defined. + Nebylo nalezeno žádné zařízení. + + + Cannot connect Camera + Nelze spojit kameru + + + Device Disconnected. + Zařízení bylo odpojeno. + + + LineTest Capture + Čárová zkouška Zachycení + + + + LineTestPane + + Untitled + Bez názvu + + + Scene: + Záběr: + + + :: Frame: + :: Snímek: + + + :: Level: + :: Úroveň: + + + Level: + Úroveň: + + + Preview + Náhled + + + + LinesFadePopup + + Color Fade + Clona barvy + + + Fade: + Prolínání: + + + Intensity: + Síla: + + + Apply + Použít + + + + LipSyncPopup + + Apply Lip Sync Data + + + + Apply + Použít + + + A I Drawing + Kresba A I + + + O Drawing + Kresba O + + + E Drawing + Kresba E + + + U Drawing + Kresba U + + + L Drawing + Kresba L + + + W Q Drawing + Kresba W Q + + + M B P Drawing + Kresba M B P + + + F V Drawing + Kresba F V + + + Rest Drawing + + + + C D G K N R S Th Y Z + C D G K N R S Th Y Z + + + Extend Rest Drawing to End Marker + + + + Previous Drawing + Předchozí obraz + + + Next Drawing + Další obraz + + + Insert at Frame: + Vložit snímek: + + + Lip Sync Data File: + + + + Thumbnails are not available for sub-Xsheets. +Please use the frame numbers for reference. + + + + Unable to apply lip sync data to this column type + + + + SubXSheet Frame + Snímek pod-Xsheet + + + Unable to open the file: + + Nelze otevřít soubor: + + + Invalid data file. + Neplatný soubor s daty. + + + Drawing: + + + + + LoadBoardPresetFilePopup + + Load Clapperboard Settings Preset + Nahrát přednastavení nastavení filmové klapky + + + + LoadColorModelPopup + + Load Color Model + Nahrát barevný model + + + Load + Nahrát + + + Palette from Frame: + Paleta ze snímku: + + + Frames : + Snímky: + + + + LoadCurvePopup + + Load Curve + Nahrát křivku (parametr efektu) + + + Load + Nahrát + + + + LoadFolderPopup + + Load Folder + Nahrát složku + + + + LoadImagesPopup + + Load Images + Nahrát obrázky + + + Load + Nahrát + + + Append Images + Připojit obrázky + + + From: + Od snímku: + + + To: + Ke snímku: + + + Step: + Krok: + + + Shrink: + Zmenšit: + + + Append + Připojit + + + Load / Append Images + Nahrát/Připojit obrázky + + + + LoadLevelPopup + + On Demand + Při potřebě + + + All Icons + Nahrát všechny ikony + + + All Icons & Images + Všechny ikony a obrázky + + + Load Level + Nahrát úroveň + + + Load + Nahrát + + + %1 does not exist. + %1 neexistuje. + + + TLV Caching Behavior + Chování ukládání do vyrovnávací paměti TLV + + + Load Subsequence Level + Nahrát podsnímek + + + Arrangement in Xsheet + Seřazení v Xsheet + + + (FILE DOES NOT EXIST) + (Soubor neexistuje) + + + From: + Od: + + + To: + Do: + + + Step: + Krok: + + + Inc: + Přírůstek čísla obrázku: + + + Level Name: + Název úrovně: + + + Frames: + Snímky: + + + :: + :: + + + + LoadScenePopup + + Load Scene + Nahrát záběr + + + Load + Nahrát + + + is not a scene file. + není soubor s záběrem. + + + does not exist. + neexistuje. + + + + LoadSettingsPopup + + Load Cleanup Settings + Nahrát nastavení vyčištění + + + Load + Nahrát + + + %1 does not exist. + %1 neexistuje. + + + + LoadSubScenePopup + + Load Sub-Xsheet + Nahrát podzáběr + + + Load + Nahrát + + + is not a scene file. + není soubor s záběrem. + + + does not exist. + neexistuje. + + + + LoadTaskListPopup + + Load Task List + Nahrát seznam úloh + + + Load + Nahrát + + + does not exist. + neexistuje. + + + It is possible to load only TNZBAT files. + Je možné nahrát pouze souboryr TNZBAT. + + + + LoadTaskPopup + + Add + Přidat + + + does not exist. + neexistuje. + + + Add Render Task to Batch List + Přidat úlohu zpracování do seznamu dávkového zpracování + + + Add Cleanup Task to Batch List + Přidat úlohu vyčištění do seznamu dávkového zpracování + + + %1 is not a TNZ file. + %1 není soubor TNZ. + + + you can load only TNZ files for render task. + Pro úlohu zpracování můžete nahrát jen soubory TNZ. + + + you can load only TNZ or CLN files for cleanup task. + Pro úlohu vyčištění můžete nahrát jen soubory TNZ nebo CLN. + + + + LocatorPopup + + Locator + Hledač + + + + MagpieFileImportPopup + + Import Magpie File + Zavést soubor MAGPIE + + + Frame Range + Rozsah snímku + + + To: + Ke snímku: + + + From: + Od snímku: + + + Animation Level + Úroveň animace + + + Level: + Úroveň: + + + Phoneme + Foném + + + Import + Zavést + + + Cancel + Zrušit + + + The file path is missing. + Cesta k souboru je neznámá. + + + + MainWindow + + Cannot delete + Nelze smazat + + + Visit Web Site + Navštívit internetovou stránku + + + Cancel + Zrušit + + + &New Scene + &Nový záběr + + + &Load Scene... + &Nahrát záběr... + + + &Save Scene + &Uložit záběr + + + &Save Scene As... + &Uložit záběr jako... + + + &Revert Scene + &Vrátit záběr + + + &Open Recent Scene File + &Otevřít předchozí záběr + + + &Open Recent Level File + &Otevřít předchozí úroveň + + + &Clear Recent Scene File List + &Vyprázdnit seznam předchozích záběrů + + + &Clear Recent level File List + &Vyprázdnit seznam předchozích úrovní + + + &New Level... + &Nová úroveň... + + + &Load Level... + &Nahrát úroveň... + + + &Save Level + &Uložit úroveň + + + &Save Level As... + &Uložit úroveň jako... + + + &Export Level... + &Vyvést úroveň... + + + &Save Palette As... + &Uložit paletu jako... + + + &Save Palette + &Uložit paletu + + + &Load Color Model... + &Nahrát barevný model... + + + &Import Magpie File... + &Zavést soubor MAGPIE... + + + &New Project... + &Nový projekt... + + + &Project Settings... + Nastavení &projektu... + + + &Save Default Settings + &Uložit nastavení nynějšího záběru jako výchozí nastavení projektu + + + &Output Settings... + Nastavení výstupu... + + + &Preview Settings... + Nastavení &náhledu... + + + &Render + &Zpracování + + + &Preview + &Náhled + + + &Save Previewed Frames + &Uložit snímky s náhledem + + + &Regenerate Preview + &Obnovit náhled + + + &Regenerate Frame Preview + &Obnovit náhled snímku + + + &Clone Preview + &Klonovat náhled + + + &Freeze//Unfreeze Preview + &Pozastavit/Přehrávat náhled + + + Freeze Preview + Pozastavit náhled + + + Unfreeze Preview + Přehrávat náhled + + + &Save As Preset + &Uložit jako přednastavení + + + &Preferences... + &Nastavení... + + + &Configure Shortcuts... + &Nastavit klávesové zkratky... + + + &Print Xsheet + &Vytisknout Xsheet + + + &Print Current Frame... + &Vytisknout nynější snímek... + + + &Quit + &Ukončit + + + &Select All + Vybrat &vše + + + &Invert Selection + Obrátit &výběr + + + &Undo + &Zpět + + + &Redo + Z&novu + + + &Cut + &Vyjmout + + + &Copy + &Kopírovat + + + &Paste + &Vložit + + + &Merge + &Sloučit + + + &Paste Into + &Vložit do + + + Paste RGBA Values + Vložit hodnotu RGBA + + + &Delete + S&mazat + + + &Insert + &Vložit + + + &Group + &Seskupit + + + &Ungroup + &Zrušit seskupení + + + &Bring to Front + &Přinést do popředí + + + &Bring Forward + O jeden krok &dopředu + + + &Send Back + &Poslat zpět + + + &Send Backward + O jeden krok d&ozadu + + + &Enter Group + &Zapnout zpracování skupiny + + + &Exit Group + &Vypnout zpracování skupiny + + + &Remove Vector Overflow + &Odstranit vektorový přebytek + + + &Define Scanner... + &Určit skener... + + + &Scan Settings... + Nastavení &skenování... + + + &Scan + &Digitalizovat + + + &Set Cropbox + &Nastavit oblast znovuseřízení + + + &Reset Cropbox + &Nastavit znovu oblast znovuseřízení + + + &Cleanup Settings... + Nastavení &vyčištění... + + + &Preview Cleanup + &Náhled vyčištění + + + &Camera Test + Zkouška &kamery + + + &Cleanup + &Vyčistit + + + &Add Frames... + &Přidat snímky... + + + &Renumber... + &Přečíslovat... + + + &Replace Level... + &Nahradit úroveň... + + + &Revert to Cleaned Up + &Vrátit na vyčištěné + + + &Revert to Last Saved Version + &Vrátit na naposledy uloženou verzi + + + &Expose in Xsheet + &Uspořádat v Xsheet + + + &Display in Level Strip + &Zobrazit v pozorovateli úrovní + + + &Level Settings... + Nastavení ú&rovní... + + + &Brightness and Contrast... + &Jas a kontrast... + + + &Color Fade... + Clona &barvy... + + + &Capture + &Zachytávání + + + &Canvas Size... + &Velikost pracovní plochy... + + + &Info... + &Informace... + + + &View... + &Pohled... + + + &Remove All Unused Levels + &Odstranit všechny nepoužívané úrovně + + + &Scene Settings... + Nastavení &záběru... + + + &Camera Settings... + Nastavení &kamery... + + + &Open Sub-xsheet + &Otevřít pod-Xsheet + + + &Close Sub-xsheet + &Zavřít pod-Xsheet + + + Explode Sub-xsheet + Rozbalit pod-Xsheet + + + Collapse + Složit + + + &Save Sub-xsheet As... + &Uložit pod-Xsheet jako... + + + Resequence + Změnit pořadí snímků pod-Xsheet + + + Clone Sub-xsheet + Klonovat pod-Xsheet + + + &Apply Match Lines... + &Použít dělicí čáry... + + + &Delete Match Lines + &Smazat dělicí čáry + + + &Delete Lines... + &Smazat čáry... + + + &Merge Levels + &Sloučit úrovně + + + &New FX... + &Nový efekt... + + + &New Output + &Nový výstup + + + &Edit FX... + &Upravit efekt... + + + Insert Frame + Vložit snímek + + + Remove Frame + Odstranit snímek + + + Insert Multiple Keys + Vložit více klíčů + + + Remove Multiple Keys + Odstranit více klíčů + + + &Reverse + &Obrátit + + + &Swing + &Swing + + + &Random + &Náhodný + + + &Autoexpose + Ukázat &automaticky + + + &Repeat... + &Opakovat... + + + &Step 2 + &Krok 2 + + + &Step 3 + &Krok 3 + + + &Step 4 + &Krok 4 + + + &Each 2 + K&aždý 2. + + + &Each 3 + K&aždý 3. + + + &Each 4 + K&aždý 4. + + + &Roll Up + &Vyhrnout + + + &Roll Down + &Shrnout + + + &Time Stretch... + &Protáhnutí času... + + + &Duplicate Drawing + &Zdvojit kresbu + + + &Clone + &Klonovat + + + Drawing Substitution Forward + + + + Drawing Substitution Backward + + + + Similar Drawing Substitution Forward + + + + Similar Drawing Substitution Backward + + + + &Set Key + &Nastavit klíč + + + &Camera Box + Rámeček &kamery + + + &Table + &Tabulka + + + &Field Guide + &Praktický úvod + + + &Safe Area + &Bezpečná oblast + + + &Camera BG Color + Barva pozadí &kamery + + + &Transparency Check + Ověření &průhlednosti + + + &Ink Check + Ověření &inkoustu + + + &Paint Check + Ověření &barvy + + + &Fill Check + Ověření &výplně + + + &Black BG Check + Ověření č&erného pozadí + + + &Gap Check + Ověření &mezery + + + &Visualize Vector As Raster + &Znázornit vektorový obrázek jako rastr + + + &Histogram + &Histogram + + + Play + Přehrát + + + Loop + Smyčka + + + Pause + Pozastavit + + + First Frame + První snímek + + + Last Frame + Poslední snímek + + + Previous Frame + Předchozí snímek + + + Next Frame + Další snímek + + + Red Channel + Červený kanál + + + Green Channel + Zelený kanál + + + Blue Channel + Modrý kanál + + + Matte Channel + Alfa + + + Red Channel Greyscale + Červený kanál (odstíny šedi) + + + Green Channel Greyscale + Zelený kanál (odstíny šedi) + + + Blue Channel Greyscale + Modrý kanál (odstíny šedi) + + + &Lock Room Panes + &Uzamknout pracovní plochu + + + &File Browser + Prohlížeč &souborů + + + &FlipboOk + &Flipbook + + + &Function Editor + Editor &funkce + + + &Level Strip + Proužek ú&rovně + + + &Palette + &Paleta + + + &Palette Gizmo + Upravit &paletu + + + &Delete Unused Styles + &Smazat nepoužívané styly + + + &Tasks + Ú&koly + + + &Batch Servers + &Dávkové servery + + + &Color Model + &Barevný model + + + &Studio Palette + Paleta &studia + + + &Schematic + &Náčrtek + + + Toggle FX/Stage schematic + Přepnout efekt/náčrtek jeviště + + + &Scene Cast + Obsazení &záběru + + + &Style Editor + Editor &stylu + + + &Toolbar + &Nástrojový pruh + + + &Tool Option Bar + Volby pro &nástroj + + + &Viewer + &Prohlížečka + + + &LineTest Capture + Čá&rová zkouška Zachycení + + + &LineTest Viewer + Prohlížeč č&árové zkoušky + + + &Xsheet + &Xsheet + + + &Reset to Default Rooms + &Obnovit výchozí pracovní plochy + + + Onion Skin + Cibulová slupka + + + Duplicate + Zdvojit + + + Show Folder Contents + Ukázat obsah složky + + + Convert... + Převést soubor... + + + Collect Assets + Sebrat prvky záběru + + + Import Scene + Zavést záběr z jiného projektu + + + Export Scene... + Vyvést záběr... + + + Premultiply + Přednásobit [černá-pozadí] + + + Convert to Vectors... + Převést na vektory... + + + Tracking... + Nakreslit... + + + Remove Level + Odstranit úroveň + + + Add As Render Task + Přidat jako úlohu zpracování + + + Add As Cleanup Task + Přidat jako úlohu vyčištění + + + Select All Keys in this Frame + Vybrat všechny klíče v tomto snímku + + + Select All Keys in this Column + Vybrat všechny klíče v tomto sloupci + + + Select All Keys + Vybrat všechny klíče + + + Select All Following Keys + Vybrat všechny následující klíče + + + Select All Previous Keys + Vybrat všechny předchozí klíče + + + Select Previous Keys in this Column + Vybrat předchozí klíče v tomto sloupci + + + Select Following Keys in this Column + Vybrat následující klíče v tomto sloupci + + + Select Previous Keys in this Frame + Vybrat předchozí klíče v tomto snímku + + + Select Following Keys in this Frame + Vybrat následující klíče v tomto snímku + + + Invert Key Selection + Obrátit výběr klíče + + + Set Acceleration + Nastavit zrychlení + + + Set Deceleration + Nastavit zpomalení + + + Set Constant Speed + Nastavit stálou rychlost + + + Reset Interpolation + Obnovit výchozí interpolaci + + + Fold Column + Schovat sloupec + + + Activate this column only + Zapnout jen tento sloupec + + + Activate selected columns + Zapnout vybrané sloupce + + + Activate all columns + Zapnout všechny sloupce + + + Deactivate selected columns + Vypnout vybrané sloupce + + + Deactivate all columns + Vypnout všechny sloupce + + + Toggle columns activation + Zapnout pohled na sloupce + + + Enable this column only + Zapnout jen tento sloupec + + + Enable selected columns + Povolit vybrané sloupce + + + Enable all columns + Povolit všechny sloupce + + + Disable all columns + Zakázat všechny sloupce + + + Disable selected columns + Zakázat vybrané sloupce + + + Swap enabled columns + Vyměnit povolené sloupce + + + Lock this column only + Uzamknout jen tento sloupec + + + Lock selected columns + Uzamknout vybrané sloupce + + + Lock all columns + Uzamknout všechny sloupce + + + Unlock selected columns + Odemknout vybrané sloupce + + + Unlock all columns + Odemknout všechny sloupce + + + Swap locked columns + Vyměnit uzamknuté sloupce + + + Edit Tool + Nástroj na úpravy + + + Selection Tool + Nástroj pro výběr + + + Brush Tool + Nástroj štětec + + + Geometric Tool + Geometrický nástroj + + + Type Tool + Nástroj pro psaní + + + Fill Tool + Nástroj pro vyplňování + + + Fill Tool - Areas + Nástroj pro vyplňování - oblasti + + + Fill Tool - Lines + Nástroj pro vyplňování - čáry + + + Paint Brush Tool + Nástroj bárevný štětec + + + Eraser Tool + Nástroj guma + + + Tape Tool + Nástroj na spojování + + + Style Picker Tool + Nástroj pro výběr stylu + + + Style Picker Tool - Areas + Nástroj pro výběr stylu - oblasti + + + Style Picker Tool - Lines + Nástroj pro výběr stylu - čáry + + + RGB Picker Tool + Nástroj pro výběr stylu RGB + + + Control Point Editor Tool + Nástroj pro upravení cesty + + + Pinch Tool + Distorsions-Tool + + + Pump Tool + Aufblas-Tool + + + Magnet Tool + Nástroj magnet + + + Bender Tool + Nástroj na tváření + + + Iron Tool + Nástroj železo + + + Cutter Tool + Schneid-Tool + + + Skeleton Tool + Skelett-Tool + + + Tracker Tool + Tracker-Tool + + + HoOk Tool + Haken-Tool + + + Zoom Tool + Nástroj pro zvětšení + + + Rotate Tool + Nástroj pro otočení + + + Hand Tool + Nástroj ruka + + + Zoom In + Přiblížit + + + Zoom Out + Oddálit + + + Reset View + Obnovit výchozí zvětšení + + + Fit to Window + Přizpůsobit oknu + + + Actual Pixel Size + Skutečná velikost obrazového bodu + + + Show//Hide Full Screen + Ukázat/Skrýt celou obrazovku + + + Full Screen Mode + Režim celé obrazovky + + + Exit Full Screen Mode + Ukončit režim celé obrazovky + + + Global Key + Celkové klávesy + + + Increase brush hardness + Zvětšit tvrdost štětce + + + Decrease brush hardness + Zmenšit tvrdost štětce + + + Auto Group + Automatické seskupení + + + Break sharp angles + Rozdělit ostré úhly + + + Frame range + Rozsah snímku + + + Inverse kinematics + Obrácená kinematika + + + Invert + Obrátit + + + Manual + Ruční + + + Onion skin + Cibulová slupka + + + Orientation + Natočení + + + Pencil Mode + Režim tužky + + + Preserve Thickness + Zachovat tloušťku + + + Pressure sensibility + Tlaková citlivost + + + Segment Ink + Inkoust dělený na části + + + Selective + Získat barvu + + + Smooth + Vyhladit + + + Snap + Zapadnout + + + Auto Select Drawing + Automatický výběr kreslení + + + Auto Fill + Automatické vyplnění + + + Join Vectors + Spojit vektory + + + Show Only Active Skeleton + Ukázat jen činnou kostru + + + Brush Preset + Přednastavení pro štětec + + + Geometric Shape + Geometrický tvar + + + Geometric Edge + Geometrický okraj + + + Mode + Režim + + + Areas Mode + Režim oblasti + + + Lines Mode + Režim čáry + + + Lines & Areas Mode + Režim čáry a oblasti + + + Type + Typ + + + Normal Type + Standardní + + + Rectangular Type + Pravoúhlý + + + Freehand Type + Kreslení od ruky + + + Polyline Type + Lomená čára + + + TypeTool Font + Písmo pro nástroj na psaní + + + TypeTool Size + Velikost pro nástroj na psaní + + + TypeTool Style + Styl pro nástroj na psaní + + + Active Axis + Činná osa + + + Active Axis - Position + Činná osa - Poloha + + + Active Axis - Rotation + Činná osa - Otočení + + + Active Axis - Scale + Činná osa - Měřítko + + + Active Axis - Shear + Činná osa - Stříhání + + + Active Axis - Center + Činná osa - Střed + + + Build Skeleton Mode + Režim vytvoření kostry + + + Animate Mode + Režim animace + + + Inverse Kinematics Mode + Režim obrácená kinematika + + + None Pick Mode + Režim žádný výběr + + + Column Pick Mode + Režim sloupec + + + Pegbar Pick Mode + Režim upevňovací kolík + + + &Reset Step + &Vrátit krok + + + &Increase Step + &Zvětšit krok + + + &Decrease Step + Z&menšit krok + + + Drawing + Kreslení + + + Animation + Animace + + + Browser + Prohlížeč + + + Pltedit + Paleta + + + Farm + Zpracování + + + Reload qss + Nahrát znovu styl Xsheet + + + &Autocenter... + Automatické &vystředění... + + + &Field Guide in Capture Window + &Praktický úvod v okně pro zachycení + + + &Guide + P&omocná čára + + + &Ruler + P&ravítko + + + Next Drawing + Další obraz + + + Prev Drawing + Předchozí obraz + + + Toggle Autofill on Current Palette Color + Přepnout automatické vyplnění na nynější barvu v paletě + + + &Export + &Vyvést + + + &Autorenumber + Automatické &přečíslování + + + Shift and Trace + Stůl světel + + + Edit Shift + Upravit polohu posunu + + + No Shift + Žádný posun + + + Reset Shift + Obnovit výchozí posun + + + Increase max brush thickness + Zvětšit největší tloušťku štětce + + + Decrease max brush thickness + Zmenšit největší tloušťku štětce + + + Increase min brush thickness + Zvětšit nejmenší tloušťku štětce + + + Decrease min brush thickness + Zmenšit nejmenší tloušťku štětce + + + &Binarize... + Převést na &binární... + + + Pick Screen + Zvolit obrazovku + + + &Blend colors + &Míchání barev + + + Linetest + Čárová zkouška + + + &Load As Sub-xsheet... + &Nahrát záběr jako pod-Xsheet... + + + &Convert File... + &Převést soubor... + + + Run Script... + Spustit skript... + + + Open Script Console... + Otevřít skriptovací konzoli... + + + &Antialias... + &Vyhlazování okrajů... + + + Adjust Levels... + Přizpůsobit úrovně... + + + &Raster Bounding Box + + + + Link FlipboOks + Propojit FlipboOk + + + &Message Center + Středisko &zpráv + + + &Cleanup Settings + Nastavení &vyčištění + + + Plastic Tool + Plastický nástroj + + + Create Mesh + Vytvořit síť + + + &Merge Tlv Levels... + &Sloučit úrovně TLV... + + + Adjust Thickness... + Přizpůsobit tloušťku... + + + Toggle &Opacity Check + Přepnout ověření &neprůhlednosti + + + &Load Folder... + &Nahrát složku... + + + Inks &Only + Pohled &jen na čáry + + + Next Step + O jeden krok vpřed + + + Prev Step + O jeden krok zpět + + + Untitled + Bez názvu + + + Cleanup + Udělat pořádek + + + PltEdit + Upravit paletu + + + InknPaint + Obarvení + + + Xsheet + Nahrávání/Xsheet + + + &Load Recent Image Files + &Nahrát předchozí obrázek + + + &Clear Recent FlipboOk Image List + &Vyprázdnit předchozí seznam obrázků FlipboOk + + + Preview Fx + Náhled efektu + + + &Insert Paste + Přidat/&Vložit + + + &Paste Color && Name + &Vložit barvu a název + + + Paste Color + Vložit barvu + + + Paste Name + Vložit název + + + Get Color from Studio Palette + Získat barvu ze studiové palety + + + &Opacity Check + Ověření &neprůhlednosti + + + &Replace Parent Directory... + &Nahradit cestu k rodičovskému adresáři... + + + 1's + 1. snímek + + + 2's + 2. snímek + + + 3's + 3. snímek + + + 4's + 4. snímek + + + &Ink#1 Check + Ověření &inkoustu#1 + + + Compare to Snapshot + Porovnat se záběrem + + + Show This Only + Ukázat jen toto + + + Show Selected + Ukázat vybrané + + + Show All + Ukázat vše + + + Hide Selected + Skrýt vybrané + + + Hide All + Skrýt vše + + + Toggle Show/Hide + Přepnout pohled + + + ON This Only + Jen toto je zapnuto + + + ON Selected + Výběr je zapnut + + + ON All + Vše je zapnuto + + + OFF All + Vše je vypnuto + + + OFF Selected + Výběr je vypnut + + + Swap ON/OFF + Přepnout zapnuto/vypnuto + + + Lock This Only + Uzamknout jen toto + + + Lock Selected + Uzamknout vybrané + + + Lock All + Uzamknout vše + + + Unlock Selected + Odemknout vybrané + + + Unlock All + Odemknout vše + + + Swap Lock/Unlock + Přepnout zámek + + + Hide Upper Columns + Skrýt horní sloupce + + + Ruler Tool + Nástroj pravítko + + + Finger Tool + Nástroj prst + + + Brush size - Increase max + Velikost štětce - zvětšit maximum + + + Brush size - Decrease max + Velikost štětce - zmenšit maximum + + + Brush size - Increase min + Velikost štětce - zvětšit minimum + + + Brush size - Decrease min + Velikost štětce - zmenšit minimum + + + Brush hardness - Increase + Tvrdost štětce - zvětšit + + + Brush hardness - Decrease + Tvrdost štětce - zmenšit + + + Mode - Areas + Režim - oblasti + + + Mode - Lines + Režim - čáry + + + Mode - Lines & Areas + Režim - čáry a oblasti + + + Type - Normal + Typ - standardní + + + Type - Rectangular + Typ -pravoúhlý + + + Type - Freehand + Typ - kreslení od ruky + + + Type - Polyline + Typ - lomená čára + + + About OpenToonz + O programu OpenToonz + + + Close + Zavřít + + + &Abount OpenToonz... + &O programu OpenToonz... + + + &ComboViewer + &Prohlížečka + + + &History + &Průběh + + + &Save All + &Uložit vše + + + &Clear Recent Flipbook Image List + &Vyprázdnit předchozí seznam obrázků FlipboOk + + + Toggle Edit in Place + Přepnout úpravy v místě + + + Link Flipbooks + Propojit FlipboOk + + + &Flipbook + &FlipboOk + + + &About OpenToonz... + &O programu OpenToonz... + + + Hook Tool + Nástroj háček + + + &Save All Levels + &Uložit všechny úrovně + + + &Camera Capture... + Zachytávání &kamery... + + + Toggle Maximize Panel + Přepnout zvětšení panelu + + + Toggle Main Window's Full Screen Mode + Přepnout režim na celou obrazovku hlavního okna + + + Onion Skin Toggle + Přepnout cibulový vzhled + + + Zero Thick Lines + + + + Refresh Folder Tree + Obnovit obsah složky + + + Pressure Sensitivity + Citlivost tlaku + + + Toggle Link to Studio Palette + Přepnout odkaz na studiovou paletu + + + Remove Reference to Studio Palette + Odstranit odkaz na studiovou paletu + + + &Startup Popup... + + + + &New Vector Level + &Nová vektorová úroveň + + + New Vector Level + Nová vektorová úroveň + + + &New Toonz Raster Level + &Nová rastrová úroveň Toonz + + + New Toonz Raster Level + Nová rastrová úroveň Toonz + + + &New Raster Level + &Nová rastrová úroveň + + + New Raster Level + Nová rastrová úroveň + + + &Fast Render to MP4 + &Rychlé zpracování do MP4 + + + &Reload + Na&hrát znovu + + + &Toggle Edit In Place + &Přepnout úpravy v místě + + + New Note Level + Nová poznámková úroveň + + + &Apply Lip Sync Data to Column + + + + Toggle XSheet Toolbar + Přepnout nástrojový pruh XSheet + + + Reframe with Empty Inbetweens... + + + + Auto Input Cell Number... + Automaticky vložit číslo buňky... + + + &Paste Numbers + &Vložit čísla + + + Alpha Channel + Alfa kanál + + + &Command Bar + &Příkazový pruh + + + Record Audio + Nahrát zvuk + + + Toggle Current Time Indicator + Přepnout ukazatel nynějšího času + + + Vectors to Toonz Raster + Vektory na rastr Toonz + + + Replace Vectors with Simplified Vectors + Nahradit vektory zjednodušenými vektory + + + Flip Viewer Vertically + Převrátit prohlížeč svisle + + + Refresh + Obnovit + + + SnapSensitivity + Citlivost přichytávání + + + Fill Tool - Autopaint Lines + Nástroj pro vyplňování - automatické malování čar + + + &Export Soundtrack + &Vyvést zvukový doprovod + + + &Touch Gesture Control + Ovládání &dotykových gest + + + Remove Empty Columns + Odstranit prázdné sloupce + + + Animate Tool + Nástroj animace + + + &Paste Insert + &Vložit/Přidat + + + &Paste Insert Above/After + &Vložit/Přidat nad/po + + + &Insert Above/After + &Přidat nad/po + + + &Fill In Empty Cells + &Vyplnit prázdné buňky + + + Toggle Cursor Size Outline + Přepnout obrys velikosti ukazatele + + + Brush Tool - Draw Order + Nástroj štětec - pořadí kreslení + + + Active Axis - All + Činná osa - Vše + + + &Timeline + Č&asová osa + + + Linear Interpolation + Lineární interpolace + + + Speed In / Speed Out Interpolation + + + + Ease In / Ease Out Interpolation + + + + Ease In / Ease Out (%) Interpolation + + + + Exponential Interpolation + Exponenciální interpolace + + + Expression Interpolation + Výrazová interpolace + + + File Interpolation + Souborová interpolace + + + Constant Interpolation + Stálá interpolace + + + Separate Colors... + Samostatné barvy... + + + Flip Viewer Horizontally + Převrátit prohlížeč vodorovně + + + &Send to Back + + + + Reset Zoom + + + + Reset Rotation + + + + Reset Position + + + + Brush Tool - Eraser (Raster option) + + + + Brush Tool - Lock Alpha + + + + + MatchlinesDialog + + Apply Match Lines + Použít dělicí čáry + + + Add Match Line Styles + Přidat styl dělicí čáry + + + Use Style: + Použít styl: + + + Line Prevalence + Síla čáry + + + Apply + Použít + + + Cancel + Zrušit + + + Apply Match Lines + Použít dělicí čáry + + + Add Match Line Inks + Přidat inkoust pro dělicí čáry + + + Use Ink: + Použít inkoust: + + + Ink Usage + Použití inkoustu + + + Line Stacking Order + Pořadí vrstvy dělicích čar + + + L-Up R-Down + L-nahoru R-dolů + + + L-Down R-Up + L-dolů R-nahoru + + + Keep +Halftone + Zachovat +polotón + + + Fill +Gaps + Vyplnit +mezery + + + Merge Inks + Sloučit inkousty + + + Merge Inks : If the target level has the same style as the match line ink +(i.e. with the same index and the same color), the existing style will be used. +Otherwise, a new style will be added to "match lines" page. + + + + + MenuBarPopup + + Customize Menu Bar of Room "%1" + Přizpůsobit nabídkový pruh pracovní plochy "%1" + + + OK + OK + + + Cancel + Zrušit + + + %1 Menu Bar + %1 Pruh s nabídkou + + + Menu Items + Položky v nabídce + + + N.B. If you put unique title to submenu, it may not be translated to another language. +N.B. Duplicated commands will be ignored. Only the last one will appear in the menu bar. + + + + + MenuBarTree + + Insert Menu + Vložit nabídku + + + Insert Submenu + Vložit podnabídku + + + Remove "%1" + Odstranit "%1" + + + New Menu + Nová nabídka + + + + MergeCmappedCommand + + It is not possible to merge tlv columns because no column was selected. + Sloupce TLV nelze sloučit, protože nebyly vybrány žádné sloupce. + + + It is not possible to merge tlv columns because at least two columns have to be selected. + Sloupce TLV nelze sloučit, protože musí být vybrány alespoň dva sloupce. + + + Merging Tlv Levels... + Slučují se úrovně TLV... + + + + MergeCmappedDialog + + Save in: + Uložit v: + + + File Name: + Název souboru: + + + Apply + Použít + + + Cancel + Zrušit + + + Ok + OK + + + Merge Tlv Levels + Sloučit úrovně TLV + + + Level %1 already exists! Are you sure you want to overwrite it? + + + + + MergeColumnsCommand + + It is not possible to execute the merge column command because no column was selected. + Sloupce nelze sloučit, protože nebyly vybrány žádné sloupce. + + + It is not possible to execute the merge column command because only one columns is selected. + Sloupce nelze sloučit, protože byly vybrán jen jeden sloupec. + + + + MeshifyPopup + + A level with the preferred path "%1" already exists. +What do you want to do? + Již existuje úroveň s upřednostňovanou cestou "%1". +Co chcete dělat? + + + Delete the old level entirely + Starou úroveň úplně odstranit + + + Keep the old level and overwrite processed frames + Starou úroveň zachovat a zpracované snímky přepsat + + + Choose a different path (%1) + Vyberte jinou cestu (%1) + + + Create Mesh + Vytvořit síť + + + Mesh Edges Length: + Délka hran sítě: + + + Rasterization DPI: + DPI rasterizace: + + + Mesh Margin (pixels): + Odstup sítě (pixely): + + + Apply + Použít + + + Mesh Creation in progress... + Vytváří se síť... + + + Current selection contains mixed image and mesh level types + Nynější výběr obsahuje smíchané obrázkové a úrovňové typy + + + Current selection contains no image or mesh level types + Nynější výběr neobsahuje žádné obrázkové a úrovňové typy + + + + MyScannerListener + + Scanning in progress: + Probíhá skenování: + + + The scanning process is completed. + Postup skenování je dokončen. + + + There was an error during the scanning process. + Během skenování se vyskytla chyba. + + + Please, place the next paper drawing on the scanner flatbed, then select the relevant command in the TWAIN interface. + Položte, prosím, další kresbu na papíru na plochu skeneru, a v rozhraní TWIN zvolte odpovídající příkaz. + + + Please, place the next paper drawing on the scanner flatbed, then click the Scan button. + Položte, prosím, další kresbu na papíru na plochu skeneru, a potom stiskněte tlačítko pro skenování. + + + The pixel type is not supported. + Formát obrazového bodu (pixelu) není podporován. + + + + MyVideoWidget + + Camera is not available + Kamera není dostupná + + + + MyViewFinder + + Camera is not available + Kamera není dostupná + + + + OutputSettingsPopup + + Save in: + Uložit v: + + + File Name: + Název souboru: + + + File Format: + Formát souboru: + + + Output Camera: + Kamera výstupu: + + + To Frame: + Ke snímku: + + + From Frame: + Od snímku: + + + Shrink: + Zmenšit: + + + Step: + Krok: + + + None + Žádný + + + Fx Schematic Flows + Tok nákresu zvláštního efektu + + + Fx Schematic Terminal Nodes + Vrcholné uzly nákresu efektu + + + Multiple Rendering: + Vícenásobné zpracování: + + + Do stereoscopy + : + + + Standard + Standardní + + + Improved + Vylepšený + + + High + Vysoký + + + Resample Balance: + Metoda interpolace obrazu (vyvážení převzorkování): + + + Channel Width: + Šířka kanálu: + + + Gamma: + Gama: + + + Odd (NTSC) + Lichá (NTSC) + + + Even (PAL) + Sudá (PAL) + + + Dominant Field: + Zpracování pole (dominantní síťová struktura): + + + to FPS: + Posunutí k FPS: + + + Stretch from FPS: + Posunutí od FPS: + + + Single + Jeden + + + Half + Polovina + + + All + Vše + + + Dedicated CPUs: + Příslušné procesory (CPU): + + + Large + Velký + + + Medium + Střední + + + Small + Malý + + + Render Tile: + Dlaždice zpracování: + + + Options + Volby + + + Use Sub-Camera + Použít podkameru + + + Apply Shrink to Main Viewer + Použít zmenšení na hlavní prohlížeč + + + Preview Settings + Nastavení náhledu + + + Output Settings + Nastavení výstupu + + + 8 bits + 8-bitů + + + 16 bits + 16-bitů + + + Columns + Sloupce + + + Camera Shift: + Posunutí kamery: + + + Stereoscopic Render: + Stereoskopické zpracování: + + + Camera Settings + Nastavení kamery + + + File Settings + Nastavení souboru + + + Other Settings + Jiná nastavení + + + Add + Přidat + + + Remove + Odstranit + + + Triangle filter + Trojúhelníkový filtr + + + Mitchell-Netravali filter + Filtr Mitchell-Netravali + + + Cubic convolution, a = .5 + Kubická spirála, a = .5 + + + Cubic convolution, a = .75 + Kubická spirála, a = .75 + + + Cubic convolution, a = 1 + Kubická spirála, a = .1 + + + Hann window, rad = 2 + Hannovo okno, rad = 2 + + + Hann window, rad = 3 + Hannovo okno, rad = 3 + + + Hamming window, rad = 2 + Hammingovo okno, rad = 2 + + + Hamming window, rad = 3 + Hammingovo okno, rad = 3 + + + Lanczos window, rad = 2 + Lanczosovo okno, rad = 2 + + + Lanczos window, rad = 3 + Lanczosovo okno, rad = 3 + + + Gaussian convolution + Gaussova spirála + + + Closest Pixel (Nearest Neighbor) + Nejbližší pixel (nejbližší soused) + + + Bilinear + Bilineární + + + 8 bit + 8-bitů + + + 16 bit + 16-bitů + + + Presets: + Přednastavení: + + + Frame Start: + Od snímku: + + + End: + Ke snímku: + + + Name: + Název: + + + Frame Rate (linked to Scene Settings): + Snímkování (FPS, spojeno s nastavením záběru): + + + To: + Převod k: + + + Multiple Rendering: + Vícenásobné zpracování: + + + Add preset + Přidat přednastavení + + + Enter the name for the output settings preset. + Zadejte název pro přednastavení nastavení výstupu. + + + Add output settings preset + Přidat přednastavení pro nastavení výstupu + + + <custom> + <vlastní> + + + Remove preset + Odstranit přednastavení + + + Warning + Varování + + + Render + Zpracování + + + Add Clapperboard + Přidat filmovou klapku + + + Edit Clapperboard... + Upravit filmovou klapku... + + + Save current output settings. +The parameters to be saved are: +- Camera settings +- Project folder to be saved in +- File format +- File options +- Resample Balance +- Channel width + + + + + OverwriteDialog + + Warning! + Varování! + + + Keep existing file + Zachovat stávající soubor + + + Overwrite the existing file with the new one + Přepsat stávající soubor novým souborem + + + Rename the new file adding the suffix + Přejmenovat nový soubor a přidat příponu + + + Apply + Použít + + + Apply to All + Použít na vše + + + Cancel + Zrušit + + + File %1 already exists. +What do you want to do? + Soubor "%1" již existuje. +Co chcete dělat? + + + The suffix field is empty. Please specify a suffix. + Pole pro příponu je prázdné. Zadejte, prosím, příponu. + + + File %1 exists as well; please choose a different suffix. + Soubor %1 již existuje. +Vyberte, prosím, jinou příponu. + + + Level "%1" already exists. + +What do you want to do? + Úroveň "%1"již existuje. + +Co chcete dělat? + + + File "%1" already exists. +What do you want to do? + Soubor "%1" již existuje. +Co chcete dělat? + + + Overwrite + Přepsat + + + Skip + Přeskočit + + + File "%1" already exists. +Do you want to overwrite it? + Soubor %1 již existuje. +Chcete jej přepsat? + + + + PencilTestPopup + + Camera Capture + Zachytávání kamery + + + Refresh + Obnovit + + + File + Soubor + + + Options + Volby + + + Save images as they are captured + Uložit obrázky, když jsou zachyceny + + + Image adjust + Přizpůsobení obrázku + + + Upside down + Obráceně + + + Capture white BG + Zachytit bílé pozadí + + + Display + Zobrazit + + + Show onion skin + Ukázat cibulový vzhled + + + Interval timer + Časovač intervalu + + + Use interval timer + Použít časovač intervalu + + + Capture +[Return key] + Zachytávání +[klávesa Enter] + + + Close + Zavřít + + + Next Level + Další úroveň + + + Camera: + Kamera: + + + Resolution: + Rozlišení: + + + Name: + Název: + + + Frame: + Snímek: + + + File Type: + Typ souboru: + + + Save In: + Uložit v: + + + Color type: + Typ barvy: + + + Threshold: + Schwellenwert: + + + Contrast: + Kontrast: + + + BG reduction: + Zmenšení pozadí: + + + Opacity(%): + Neprůhlednost (%): + + + Interval(sec): + Interval (s): + + + No camera found + Nenalezena žádná kamera + + + - Select camera - + - Vybrat kameru - + + + Start Capturing +[Return key] + Spustit zachytávání +[klávesa Enter] + + + Stop Capturing +[Return key] + Zastavit zachytávání +[klávesa Enter] + + + No level name specified: please choose a valid level name + Pro soubor nestanoven žádný název úrovně: Zvolte, prosím, platný název pro úroveň + + + Folder %1 doesn't exist. +Do you want to create it? + Složka %1 neexistuje. +Chcete ji vytvořit? + + + Unable to create + Nelze vytvořit + + + The level name specified is already used: please choose a different level name. + Název úrovně se již používá: Zvolte, prosím, jiný název. + + + The save in path specified does not match with the existing level. + Zadaná cesta pro Uložit v neodpovídá existující úrovni. + + + The captured image size does not match with the existing level. + Velikost zachyceného obrázku neodpovídá existující úrovni. + + + File %1 does exist. +Do you want to overwrite it? + Soubor %1 již existuje. +Chcete jej přepsat? + + + Failed to load %1. + Nepodařilo se nahrát %1. + + + Video Capture Filter Settings... + Nastavení filtru pro zachytávání obrazu... + + + No + frame id + Ne + + + Load Selected Image + Nahrát vybraný obrázek + + + Subfolder + Podsložka + + + Previous Level + Předchozí úroveň + + + Color + Barva + + + Grayscale + Odstíny šedi + + + Black & White + Černá a bílá + + + No image selected. Please select an image in the Xsheet. + Nevybrán žádný obrázek. Vyberte, prosím, v Xsheet nějaký obrázek. + + + The selected image is not in a raster level. + Vybraný obrázek není v rastrové úrovni. + + + The selected image size does not match the current camera settings. + Vybraný obrázek neodpovídá nastavení nynější kamery. + + + UNDEFINED WARNING + NEURČENÉ VAROVÁNÍ + + + The level is not registered in the scene, but exists in the file system. + Úroveň není zaregistrována v záběru, ale existuje v souborovém systému. + + + +WARNING : Image size mismatch. The saved image size is %1 x %2. + VAROVÁNÍ: Nesoulad ve velikosti obrázku. Velikost uloženého obrázku je %1 x %2. + + + WARNING + VAROVÁNÍ + + + +Frame %1 exists. + +Snímek %1 existuje. + + + +Frames %1 exist. + +Snímky%1 existují. + + + OVERWRITE 1 of + PŘEPSÁNÍ 1 + + + ADD to + PŘIDAT do + + + %1 frame + %1 snímek + + + %1 frames + %1 snímky + + + The level will be newly created. + Úroveň bude nově vytvořena. + + + NEW + NOVÝ + + + The level is already registered in the scene. + Úroveň je již zaregistrována v záběru. + + + +NOTE : The level is not saved. + +POZNÁMKA: Úroveň není uložena. + + + +WARNING : Failed to get image size of the existing level %1. + +VAROVÁNÍ: Nepodařilo se získat velikost obrázku stávající úrovně %1. + + + +WARNING : Image size mismatch. The existing level size is %1 x %2. + VAROVÁNÍ: Nesoulad ve velikosti obrázku. Velikost stávající úrovně je %1 x %2. + + + WARNING : Level name conflicts. There already is a level %1 in the scene with the path + %2. + VAROVÁNÍ: Střety v názvu úrovně. V záběru již je úroveň %1 s cestou + %2. + + + +WARNING : Image size mismatch. The size of level with the same name is is %1 x %2. + +VAROVÁNÍ: Nesoulad ve velikosti obrázku. Velikost úrovně se stejným názvem je %1 x %2. + + + WARNING : Level path conflicts. There already is a level with the path %1 + in the scene with the name %2. + VAROVÁNÍ: Střety v cestě úrovně. V záběru již je úroveň %1 s cestou + %2. + + + +WARNING : Image size mismatch. The size of level with the same path is %1 x %2. + +VAROVÁNÍ: Nesoulad ve velikosti obrázku. Velikost úrovně se stejnou cestou je %1 x %2. + + + Subcamera + + + + + PencilTestSaveInFolderPopup + + Create the Destination Subfolder to Save + Vytvořit cílovou podsložku k uložení + + + Set As Default + Nastavit jako výchozí + + + Set the current "Save In" path as the default. + Nastavit nynější cestu "Uložit v" jako výchozí. + + + Create Subfolder + Vytvořit podsložku + + + Infomation + Informace + + + Subfolder Name + Název podsložky + + + Auto Format: + Automatický formát: + + + Show This on Launch of the Camera Capture + Ukázat toto při spuštění zachytávání kamery + + + Save Scene in Subfolder + Uložit záběr v podsložce + + + OK + OK + + + Cancel + Zrušit + + + C- + Sequence + Scene + C- + úryvek + záběr + + + Sequence + Scene + Úryvek + záběr + + + Episode + Sequence + Scene + Díl + úryvek + záběr + + + Project + Episode + Sequence + Scene + Projekt + díl + úryvek + záběr + + + Save the current scene in the subfolder. +Set the output folder path to the subfolder as well. + Uložit nynější záběr do podsložky. +Nastavit cestu k výstupní složce také na podsložku. + + + Save In: + Uložit v: + + + Project: + Projekt: + + + Episode: + Díl: + + + Sequence: + Úryvek: + + + Scene: + Záběr: + + + Subfolder Name: + Název podsložky: + + + Subfolder name should not be empty. + Název podsložky nesmí být prázdný. + + + Subfolder name should not contain following characters: * . " / \ [ ] : ; | = , + Název podsložky nesmí obsahovat následující znaky: * . " / \ [ ] : ; | = , + + + Folder %1 already exists. + Soubor %1 již existuje. + + + It is not possible to create the %1 folder. + Složku %1 nelze vytvořit. + + + + PltGizmoPopup + + Palette Gizmo + Upravit paletu + + + Luminance: + Svítivost: + + + Saturation: + Sytost: + + + Hue: + Odstín: + + + Transparency: + Průhlednost: + + + Fade to Color + Vyblednout k barvě + + + Color: + Barva: + + + Fade + Vyblednout + + + Blend + Výplň + + + Full Matte + Plné pozadí + + + Zero Matte + Žádné pozadí + + + Scale (%) + Škálování (%) + + + Shift (value) + Posunutí (hodnota) + + + Value + Hodnota + + + Saturation + Sytost + + + Hue + Odstín + + + Matte + Alfa + + + Color + Barva + + + Full Alpha + Plná alfa + + + Zero Alpha + Žádná alfa + + + Alpha + Alfa + + + + PreferencesPopup + + Preferences + Nastavení + + + General + Obecné + + + Use Default Viewer for Movie Formats + Použít výchozí prohlížeč pro filmové formáty + + + Minimize Raster Memory Fragmentation* + Zmenšit tříštění rastrové paměti* + + + Save Automatically Every Minutes + Uložit automaticky po stanoveném počtu minut + + + Backup Animation Levels when Saving + Při ukládání vytvořit zálohu úrovní animace + + + Cell-dragging Behaviour: + Chování při tažení buněk: + + + Interface + Rozhraní + + + Style: + Styl: + + + Open FlipboOk after Rendering + Po zpracování otevřít FlipboOk + + + Unit: + Jednotka: + + + Camera Unit: + Jednotka kamery: + + + FlipboOk Shrink: + Zmenšit FlipboOk: + + + Step: + Krok: + + + Height*: + Výška*: + + + Loading + Nahrávání + + + Expose Loaded Levels in Xsheet + Ukázat nahrané úrovně v Xsheet + + + Create Sub-folder when Importing Sub-xsheet + Při zavádění pod-Xsheets vytvořit podsložky + + + Drawing + Kreslení + + + Keep Original Cleaned Up Drawings As Backup + Vyčištěné kresby (TLV) uložit přímo jako zálohu + + + Animation + Animace + + + Default Interpolation: + Výchozí interpolace obrazu: + + + Linear + Lineární + + + Speed In / Speed Out + + + + Ease In / Ease Out + Ease In/Ease Out + + + Ease In / Ease Out % + + + + Animation Step: + Krok animace: + + + Preview + Náhled + + + Blank Frames: + Prázdné snímky: + + + Blank Frames Color: + Barva prázdných snímků: + + + Display in a New FlipboOk Window + Zobrazit v novém okně FlipboOk + + + Rewind after Playback + Po přehrání přetočit + + + Onion Skin + Cibulová slupka + + + Following Frames Correction: + Nastavení barvy následujících snímků: + + + Previous Frames Correction: + Nastavení barvy předcházejících snímků: + + + Display Lines Only + Zobrazit jen čáry + + + Version Control + Správa verzí + + + Automatically Refresh Folder Contents + Automaticky aktualizovat obsah složky + + + Cells Only + Jen buňky Xsheet + + + Cells and Column Data + Data sloupců a buněk + + + Language*: + Jazyk*: + + + Undo Memory Size (MB): + Velikost paměti (MB) pro návrat zpět: + + + Render Task Chunk Size: + Velikost kousku úlohy zpracování: + + + Show Info in Rendered Frames + Ukázat informace ve zpracovaných snímcích + + + *Changes will take effect the next time you run Toonz + *Změny se projeví při příštím spuštění Toonz + + + cm + cm + + + mm + mm + + + inch + palec + + + field + pole + + + Xsheet Autopan during Playback + Automaticky projíždět při přehrávání Xsheets + + + Level Strip Frames Width*: + Šířka proužku snímků úrovně*: + + + Capture + Zachytávání + + + Frame Rate: + Snímkování: + + + Scan File Format: + Formát souboru skenu: + + + Width: + Šířka: + + + Height: + Výška: + + + DPI: + DPI: + + + Minimize Savebox after Editing + Zmenšit ukládací okno po upravení obrazu + + + Use the TLV Savebox to Limit Filling Operations + Použít ukládací okno TLV k omezení vyplňovacích operací + + + Paper Thickness: + Tloušťka papíru: + + + Enable Version Control * + Povolit správu verzí * + + + Default Level Type: + Výchozí formát úrovní: + + + Toonz Vector Level + Vektorová úroveň Toonz + + + Toonz Raster Level + Rastrová úroveň Toonz + + + Raster Level + Rastrová úroveň + + + Autocreation: + Automatické vytvoření: + + + Transparency Check + Ověření průhlednosti + + + Ink Color on White Bg: +  Barva čar a vektorů na bílém pozadí: + + + Ink Color on Black Bg: +  Barva čar a vektorů na černém pozadí: + + + Paint Color: + Barva malby: + + + Fit to FlipboOk + Ukázat vše ve FlipboOk + + + New Level Format + Formát nové úrovně + + + Assign the new level format name: + Přiřadit název formátu nové úrovně: + + + New Format + Nový formát + + + Level Settings by File Format: + Nastavení úrovně podle souborového formátu: + + + Edit + Upravit + + + Xsheet + Xsheet + + + Visualization + Znázornění + + + Show Lines with Thickness 0 + Ukázat čáry s tloušťkou 0 + + + Next/Previous Step Frames: + Snímky dalšího/předchozího kroku: + + + Ignore Alpha Channel on Levels in Column 1 + Přehlížet alfa kanál na úrovních ve sloupci 1 + + + pixel + obrazový bod (pixel) + + + Minimize Raster Memory Fragmentation * + Zmenšit tříštění rastrové paměti * + + + Replace Level after SaveLevelAs command + Nahradit úroveň po příkazu Uložit úroveň jako + + + * Changes will take effect the next time you run Toonz + * Změny se projeví při příštím spuštění Toonz + + + Move Current Frame by Clicking on Xsheet / Numerical Columns Cell Area + Při klepnutí na Xsheet nebo editor funkcí bude nynější snímek posunut + + + Enable Actual Pixel View on Scene Editing Mode + V režimu úprav záběru ukázat skutečnou velikost obrazu pixelu + + + Display Level Name on Each Marker + Zobrazit název úrovně na každé značce + + + Show Raster Images Darken Blended in Camstand View + Zobrazit rastrové obrázky v pohledu na stav kamery (tmavě smícháno) + + + Show "ABC" to the Frame Number in Xsheet Cell + Ukázat dodatek "ABC" u čísla snímku v buňce Xsheet + + + Automatically Remove Scene Number from Loaded Level Name + Odstranit automaticky číslo záběru z názvu nahrané úrovně + + + Multi Layer Style Picker : Switch Levels by Picking + Volič stylu více úrovní : Změnit úrovně zvolením + + + Onion Skin ON + Použít cibulový vzhled + + + Enable Version Control* + Povolit správu verzí * + + + Category + Skupina + + + Undo Memory Size (MB) + Velikost paměti (MB) pro návrat zpět + + + Icon Size * + Velikost ikony * + + + X + X + + + Viewer Shrink + Zmenšit prohlížeč + + + Step + Krok + + + Viewer BG Color + Barva pozadí prohlížeče + + + Preview BG Color + Barva pozadí náhledu + + + ChessBoard Color 1 + Barva šachovnice 1 + + + Chessboard Color 2 + Barva šachovnice 2 + + + Viewer Zoom Center + Střed přiblížení prohlížeče + + + Language *: + Jazyk *: + + + Default TLV Caching Behavior + Výchozí chování ukládání do vyrovnávací paměti TLV + + + Column Icon + Ikona sloupce + + + Height: + Výška: + + + Default Interpolation: + Výchozí interpolace: + + + Following Frames Correction: + Barva následujících snímků: + + + Previous Frames Correction: + Barva předcházejících snímků: + + + Ink Color on White Bg: + Barva čáry na bílém pozadí: + + + Ink Color on Black Bg: + Barva čáry na černém pozadí: + + + Paint Color: + Barva malby: + + + On Demand + Při potřebě + + + All Icons + Nahrát všechny ikony + + + All Icons & Images + Nahrát všechny ikony a obrázky + + + At Once + Ukázat všechny při nahrání + + + Pick Every Colors as Different Styles + Zvolit každou barvu jako jednotlivý styl + + + Integrate Similar Colors as One Style + Zvolit podobné barvy jako jeden styl + + + Palette Type on Loading Raster Image as Color Model + Typ palety při nahrání rastrového obrázku jako barevný model + + + Mouse Cursor + Poloha ukazovátka myši + + + Viewer Center + Střed prohlížeče + + + Disabled + Zakázáno + + + Enabled + Povoleno + + + Use Xsheet as Animation Sheet + Použít Xsheet jako list animace + + + Replace Toonz Level after SaveLevelAs command + Nahradit úroveň Toonz po příkazu Uložit úroveň jako + + + Open Flipbook after Rendering + Otevřít po zpracování FlipBook + + + Show "ABC" Appendix to the Frame Number in Xsheet Cell + + + + Show Keyframes on Cell Area + Ukázat klíčové snímky na oblast buňky + + + Display in a New Flipbook Window + Zobrazit v novém okně FlipBooku + + + Fit to Flipbook + Přizpůsobit FlipBooku + + + Save Automatically + Uložit automaticky + + + Automatically Save the Scene File + Uložit automaticky soubor s záběrem + + + Automatically Save Non-Scene Files + Uložit automaticky nezáběrové soubory + + + My Documents/OpenToonz* + Moje dokumenty/OpenToonz* + + + Desktop/OpenToonz* + Plocha/OpenToonz* + + + Stuff Folder* + + + + Custom* + Vlastní* + + + Custom Project Path(s): + Cesta(y) k vlastnímu projektu: + + + Advanced: Multiple paths can be separated by ** (No Spaces) + Pokročilé: Více cest lze oddělit pomocí ** (žádné mezery) + + + All imported images will use the same DPI + Všechny zavedené obrázky použijí stejné rozlišení (DPI) + + + Import/Export + Zavést/Vyvést + + + Show Onion Skin During Playback + Ukázat během přehrávání cibulový vzhled + + + Interval(Minutes): + Interval (minuty): + + + Additional Project Locations + Dodatečná umístění projektu + + + Pixels Only: + Jen pixely: + + + Rooms*: + Pracovní plochy*: + + + Please provide the path where FFmpeg is located on your computer. + Poskytněte, prosím, cestu k umístění FFmpeg ve vašem počítači. + + + FFmpeg Path: + Cesta k FFmpeg: + + + Number of seconds to wait for FFmpeg to complete processing the output: + + + + Note: FFmpeg begins working once all images have been processed. + + + + FFmpeg Timeout: + + + + Show Startup Window when OpenToonz Starts + Při spuštění OpenToonz ukázat uvítací okno + + + Life is too short for Comic Sans + Život je pro Comic Sans příliš krátký + + + Good luck. You're on your own from here. + Hodně štěstí. Odteď se spoléhejte jen na sebe. + + + Numpad keys are assigned to the following commands. +Is it OK to release these shortcuts? + + + + OK + OK + + + Cancel + Zrušit + + + Watch File System and Update File Browser Automatically + + + + Use Camera DPI for All Imported Images + Použít rozlišení (DPI) kamery pro všechny zavedené obrázky + + + New Levels Default to the Current Camera Size + + + + Use Numpad and Tab keys for Switching Styles + + + + Keep fill when using "Replace Vectors" command + + + + Use higher DPI for calculations - Slower but more accurate + Použít vyšší rozlišení (DPI) na výpočty - pomalejší ale přesnější + + + Tools + Nástroje + + + Use Arrow Key to Shift Cell Selection + + + + Enable to Input Cells without Double Clicking + + + + Enable OpenToonz Commands' Shortcut Keys While Renaming Cell + + + + Show Toolbar in the XSheet + Ukázat v XSheet nástrojový panel + + + Show Column Numbers in Column Headers + + + + Sync Level Strip Drawing Number Changes with the Xsheet + + + + Show Current Time Indicator (Timeline Mode only) + + + + Project Folder Aliases (+drawings, +scenes, etc.) + + + + Scene Folder Alias ($scenefolder) + + + + Use Project Folder Aliases Only + + + + This option defines which alias to be used +if both are possible on coding file path. + + + + Always ask before loading or importing + + + + Always import the file to the current project + + + + Always load the file from the current location + + + + Strokes + Tahy + + + Guides + Pomocné čáry + + + All + Vše + + + Open the dropdown to display all options + + + + Cycle through the available options + + + + Arrow Markers + + + + Animated Guide + Animovaný průvodce + + + Path Alias Priority: + + + + Font *: + Písmo *: + + + Default File Import Behavior: + Výchozí chování pro zavedení souboru: + + + Default TLV Caching Behavior: + Výchozí chování pro ukládání do vyrovnávací paměti TLV:: + + + Column Icon: + Ikona sloupce: + + + Please indicate where you would like exports from Fast Render(MP4) to go. + + + + Fast Render Path: + Cesta pro rychlé zpracování: + + + Vector Snapping: + Přichytávání vektoru: + + + Replace Vectors with Simplified Vectors Command + Nahradit vektory příkazem pro zjednodušené vektory + + + Dropdown Shortcuts: + + + + Vector Guided Style: + + + + Show Raster Images Darken Blended + + + + Antialiased Region Boundaries + + + + Down Arrow at End of Level Strip Creates a New Frame + + + + Expand Function Editor Header to Match Xsheet Toolbar Height* + + + + Colors + Barvy + + + Theme: + Vzhled: + + + OpenToonz can use FFmpeg for additional file formats. + + + + + FFmpeg is not bundled with OpenToonz. + + + + + Column Header Layout*: + + + + Color Calibration using 3D Look-up Table * + + + + Enable auto-stretch frame + + + + Show Cursor Size Outlines + Ukázat obrysy velikosti ukazovátka + + + Check for the Latest Version of OpenToonz on Launch + + + + Choosing this option will set initial location of all file browsers to $scenefolder. +Also the initial output destination for new scenes will be set to $scenefolder as well. + + + + Graph Editor Opens in Popup + Grafický editor se otevře ve vyskakovacím okně + + + Spreadsheet Opens in Popup + Tabulka se otevře ve vyskakovacím okně + + + Toggle Between Graph Editor and Spreadsheet + Přepnout mezi grafickým editorem a tabulkou + + + Function Editor*: + Editor funkce*: + + + 3DLUT File for [%1] *: + Soubor 3DLUT pro [%1] *: + + + Cursor Options + Volby pro ukazovátko + + + Basic Cursor Type: + Základní typ ukazovátka: + + + Cursor Style: + Styl ukazovátka: + + + Small + Malé + + + Large + Velké + + + Crosshair + Nitkový kříž + + + Default + Výchozí + + + Left-Handed + Levoruké + + + Simple + Jednoduché + + + Classic + Klasické + + + Classic-revised + + + + Compact + Kompaktní + + + Saving + Ukládání + + + Use Onion Skin Colors for Reference Drawings of Shift and Trace + + + + Tablet Settings + Nastavení tabletu + + + Enable Windows Ink Support* (EXPERIMENTAL) + + + + Constant + Stálý + + + Exponential + Exponenciální + + + Expression + Výryz + + + File + Soubor + + + Style *: + Styl *: + + + Matte color is used for background when overwriting raster levels with transparent pixels +in non alpha-enabled image format. + + + + Matte color: + Barva pozadí: + + + Current Column Color: + Barva nynějšího sloupce: + + + + PreferencesPopup:: FormatProperties + + Level Settings by File Format + Nastavení úrovní podle souborového formátu + + + Name: + Název: + + + Regular Expression: + Formát souboru(regulární výrazy): + + + Priority + Přednost + + + + PreferencesPopup::FormatProperties + + Level Settings by File Format + Nastavení úrovní podle souborového formátu + + + Name: + Název: + + + Regular Expression: + Formát souboru(regulární výrazy): + + + Priority + Přednost + + + + Previewer + + The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | + Název souboru nesmí být prázdný nebo obsahovat následující znaky: (nový řádek) \ / : * ? " | + + + File %1 already exists. +Do you want to overwrite it? + Soubor %1 již existuje. +Chcete jej přepsat? + + + + ProcessingTab + + Line Processing: + Zpracování řádku: + + + None + Žádný + + + Greyscale + Odstíny šedi + + + Color + Barva + + + Antialias: + Vyhlazování okrajů: + + + Standard + Standardní + + + Morphological + MLAA + + + Autoadjust: + Automatické přizpůsobení: + + + Sharpness: + Ostrost: + + + Despeckling: + Odstranění poruch: + + + MLAA Intensity: + Síla MLAA: + + + + ProjectCreatePopup + + New Project + Nový projekt + + + Cancel + Zrušit + + + Ok + OK + + + It is not possible to create the %1 project. + Projekt %1 nelze vytvořit. + + + Project Name cannot be empty or contain any of the following characters: + \ / : * ? " < > | + Název projektu nesmí být prázdný nebo obsahovat následující znaky: + \ / : * ? " < > | + + + Bad project name: '%1' loOks like an absolute file path + Neplatný název projektu: '%1' vypadá, že je to absolutní cesta + + + Project '%1' already exists + Projekt %1 již existuje + + + OK + OK + + + Bad project name: '%1' looks like an absolute file path + Špatný název projektu: '%1' vypadá, že je to absolutní cesta + + + + ProjectPopup + + Project Name: + Název projektu: + + + Append $scenepath to +drawings + Přidat $scenepath k +drawings + + + Append $scenepath to +inputs + Přidat $scenepath k +inputs + + + Append $scenepath to +extras + Přidat $scenepath k +extras + + + Project: + Projekt: + + + + ProjectSettingsPopup + + Project Settings + Nastavení projektu + + + + PsdSettingsPopup + + Load PSD File + Nahrát soubor PSD + + + Name: + Název: + + + Path: + Cesta: + + + Expose in a Sub-xsheet + Uspořádat jako pod-Xsheet + + + Load As: + Nahrát jako: + + + Group Option + Volby pro skupinu + + + Ignore groups + Přehlížet skupiny + + + Expose layers in a group as columns in a sub-xsheet + Uspořádat úrovně ve skupinách jako sloupce v pod-Xsheet + + + Expose layers in a group as frames in a column + Uspořádat úrovně ve skupinách jako snímky ve sloupci + + + FileName#LayerName + Názevsouboru#Názevvrstvy + + + LayerName + Názevvrstvy + + + Level Name: + Název úrovně: + + + Single Image + + + + Frames + Snímky + + + Columns + Sloupce + + + Flatten visible document layers into a single image. Layer styles are maintained. + + + + Load document layers as frames into a single xsheet column. + + + + Load document layers as xhseet columns. + + + + OK + OK + + + Cancel + Zrušit + + + + QApplication + + Quit + Ukončit + + + New Scene + Nový záběr + + + Load Scene + Nahrát záběr + + + + QObject + + No data to paste. + Žádná data k vložení. + + + It is not possible to paste the cells: there is a circular reference. + Buňky nelze vložit: Je tu kruhový odkaz. + + + Overwrite + Přepsat + + + Don't Overwrite + Nepřepisovat + + + Save + Uložit + + + Discard + Zahodit + + + Cancel + Zrušit + + + The color model palette is different from the destination palette. +What do you want to do? + Paleta s barevným modelem se liší od cílové palety. +Co chcete dělat? + + + Overwrite the destination palette. + Přepsat cílovou paletu. + + + Keep the destination palette and apply it to the color model. + Ponechat cílovou paletu. a použít ji na barevný model. + + + It is not possible to paste the columns: there is a circular reference. + Sloupce nelze vložit: Je tu kruhový odkaz. + + + None + Žádný + + + Edited + Upraveno + + + Normal + Normální + + + To Update + Potřebuje aktualizaci + + + Modified + Změněno + + + Locked + Uzamknuto + + + Unversioned + Bez verze + + + Missing + Chybí + + + Duplicate + Zdvojit + + + Don't Duplicate + Nezdvojovat + + + Deleting %n files. Are you sure? + + %n soubor ke smazání. Jste si jistý? + %n soubory ke smazání. Jste si jistý? + %n souborů ke smazání. Jste si jistý? + + + + Delete + Smazat + + + You are going to premultiply selected files. +The operation cannot be undone: are you sure? + Přednásobení se použije na vybrané soubory. +Tento krok nelze vátit zpět: Jste si jistý? + + + Premultiply + Přednásobit [černá-pozadí] + + + %1 has an invalid extension format. + %1 má neplatný formát přípony. + + + File %1 doesn't belong to the current project. +Do you want to import it or load it from its original location? + Soubor %1 nepatří do nynějšího projektu. +Chcete jej zavést nebo nebo jej nahrát z jeho původního umístění? + + + Import + Zavést + + + Load + Nahrát + + + The camera settings of the scene you are loading as sub-xsheet are different from those of your current scene. What you want to do? + Nastavení kamery záběru, jejž nahráváte jako pod-Xsheet, se liší od těch pro nynější záběr. Co chcete dělat? + + + Keep the sub-xsheet original camera settings. + Zachovat původní nastavení kamery pod-Xsheet. + + + Apply the current scene camera settings to the sub-xsheet. + Použít nynější nastavení kamery záběru na pod-Xsheet. + + + %1 has an invalid file extension. + %1 má neplatnou příponu souboru. + + + %1 is an invalid path. + %1 je neplatná cesta. + + + Import Scene + Zavést záběr + + + Change Project + Změnit projekt + + + No cleaned up drawings available for the current selection. + Pro nynější výběr nejsou dostupné žádné vyčištěné obrázky (kresby). + + + No saved drawings available for the current selection. + Pro nynější výběr nejsou dostupné žádné uložené obrázky (kresby). + + + The current selection is invalid. + Nynější výběr je neplatný. + + + Yes + Ano + + + No + Ne + + + System date tampered. + Do sytémového data bylo zasáhnuto. + + + No more Undo operations available. + Nejsou dostupné žádné další kroky zpět. + + + No more Redo operations available. + Nejsou dostupné žádné další kroky znovu. + + + An update is available for this software. +Visit the Web site for more information. + Pro tento program je dostupná aktualizace. +Navštivte, prosím, internetové stránky pro více informací. + + + Quit + Ukončit + + + Scan + Skenovat + + + Don't Scan + Neskenovat + + + Select an empty cell or a sub-xsheet cell. + Vyberte prázdnou buňku nebo buňku pod-Xsheet. + + + Collapsing columns: what you want to do? + Sbalit sloupce: Co chcete dělat? + + + Include relevant pegbars in the sub-xsheet as well. + Zahrnout rozhodující pruhy na kolíky také do pod-Xsheet. + + + Include only selected columns in the sub-xsheet. + Zahrnout jen vybrané sloupce do pod-Xsheet. + + + Exploding Sub-xsheet: what you want to do? + Rozložit pod-Xsheet: Co chcete dělat? + + + Bring relevant pegbars in the main xsheet. + Dodat rozhodující pruhy na kolíky do hlavního Xsheet. + + + Bring only columns in the main xsheet. + Dodat jen sloupce do hlavního Xsheet. + + + Are you sure you want to override + Jste si jistý, že chcete nahradit + + + Override + Nahradit + + + It is not possible to track the level: +allocation error. + Nelze sledovat úroveň: +Chyba v přiřazení. + + + It is not possible to track the level: +no region defined. + Nelze sledovat úroveň: +Plochy nejsou stanoveny. + + + It is not possible to track specified regions: +more than 30 regions defined. + Nelze sledovat vymezené plochy: +Bylo stanoveno přes 30 ploch. + + + It is not possible to track specified regions: +defined regions are not valid. + Nelze sledovat vymezené plochy: +Stanovené plochy jsou neplatné. + + + It is not possible to track specified regions: +some regions are too wide. + Nelze sledovat vymezené plochy: +Některé plochy jsou příliš široké. + + + It is not possible to track specified regions: +some regions are too high. + Nelze sledovat vymezené plochy: +Některé plochy jsou příliš vysoké. + + + Frame Start Error + Chyba začátku snímku + + + Frame End Error + Chyba konce snímku + + + Threshold Distance Error + Chyba v prahové hodnotě vzdálenosti + + + Sensitivity Error + Chyba citlivosti + + + No Frame Found + Nenalezen žádný snímek + + + It is not possible to track specified regions: +the selected level is not valid. + Nelze sledovat vymezené plochy: +Vybraná úroveň je neplatná. + + + It is not possible to track the level: +no level selected. + Nelze sledovat vymezené plochy: +Nebyla vybrána žádná úroveň. + + + It is not possible to track specified regions: +the level has to be saved first. + Nelze sledovat vymezené plochy: +Úroveň je třeba nejprve uložit. + + + It is not possible to track the level: +undefinied error. + Nelze sledovat úroveň: +Neurčená chyba. + + + Invalid selection: each selected column must contain one single level with increasing frame numbering. + Neplatný výběr: Každý vybraný sloupec musí obsahovat jednu úroveň se stoupajícím číslováním snímků. + + + Viewer + Prohlížeč + + + Function Editor + Editor funkce + + + Scene Cast + Obsazení záběru + + + Color Model + Model barev + + + File Browser + Prohlížeč souborů + + + Level: + Úroveň: + + + Tasks + Úkoly + + + Schematic + Náčrtek + + + Palette + Paleta + + + Studio Palette + Studiová paleta + + + Style Editor + Editor stylu + + + Tool Options + Volby pro nástroje + + + LineTest Viewer + Prohlížeč čárové zkoušky + + + Xsheet + Xsheet + + + FlipBoOk + FlipBoOk + + + Deactivate Onion Skin + Vypnout cibulový vzhled + + + Limit Onion Skin To Level + Omezit cibulový vzhled na úroveň + + + Extend Onion Skin To Scene + Rozšířit cibulový vzhled na záběr + + + Activate Onion Skin + Zapnout cibulový vzhled + + + Are you sure you want to save the Default Settings? + Opravdu chcete přepsat výchozí nastavení? + + + Choose Folder + Vybrat složku + + + Revert: the current scene has been modified. +Are you sure you want to revert to previous version? + Vrátit záběr: nynější záběr byl změněn. +Jste si jistý, že se chcete vrátit k předchozí uložené verzi? + + + Revert + Vrátit + + + Deleting %1. Are you sure? + Maže se %1. Jste si jistý? + + + The %1 file has been generated + Soubor %1 byl vytvořen + + + %1: the current scene has been modified. +Do you want to save your changes? + %1: Nynější záběr byl změněn. +Chcete uložit změny? + + + The scene %1 already exists. +Do you want to overwrite it? + Záběr %1 již existuje. +Chcete jej přepsat? + + + The Scene '%1' belongs to project '%2'. +What do you want to do? + Záběr '%1' patří k projektu '%2'. +Co chcete dělat? + + + No unused levels + Žádné nepoužívané úrovně + + + Rendered Frames :: From %1 To %2 :: Step %3 + Zpracované snímky:: Od %1 do %2 :: Krok %3 + + + Preview FX :: %1 + Náhled efektu :: %1 + + + Batch Servers + Dávkové servery + + + Task added to the Batch Render List. + Úloha byla přidána do seznamu dávkového zpracování. + + + Task added to the Batch Cleanup List. + Úloha byla přidána do seznamu dávkového vyčištění. + + + There are no assets to collect + Nejsou žádné prvky k sebrání + + + One asset imported + Byl zaveden jeden prvek + + + %1 assets imported + %1 prvků bylo zavedeno + + + Converting %1 images to tlv format... + Převádí se %1 obrázků do formátu TLV... + + + No scene imported + Nebyl zaveden žádný záběr + + + One scene imported + Byl zaveden jeden záběr + + + %1 scenes imported + %1 záběrů bylo zavedeno + + + It is not possible to delete lines because no column, cell or level strip frame was selected. + Nelze smazat žádný řádek, protože nebyl vybrán žádný sloupec, buňka nebo snímek proužku úrovně. + + + The rooms will be reset the next time you run Toonz. + Pracovní plochy budou obnoveny ve výchozím stavu při příštím spuštění Toonz. + + + The license validation process was not able to confirm the right to use this software on this computer. + Please contact [ support@toonz.com ] for assistance. + Licenční schvalovací postup nebyl schopen potvrdit oprávnění k používání software na tomto počítači. +Spojte se, prosím, kvůli podpoře s support@toonz.com. + + + Saving previewed frames.... + Ukládají se snímky s náhledem... + + + The command cannot be executed because the scene is empty. + Příkaz se nepodařilo vykonat, protože záběr je prázdný. + + + Change project + Změnit projekt + + + It is not possible to delete the selection. + Nelze smazat vybranou oblast. + + + It is not possible to paste vectors in the current cell. + Vektory nelze přidat do nynější buňky. + + + It is not possible to paste data: there is nothing to paste. + Nelze vložit žádná data: Není nic k vložení. + + + The copied selection cannot be pasted in the current drawing. + Zkopírovaný výběr nelze vložit do nynější kresby. + + + A filename cannot be empty or contain any of the following characters: + \ / : * ? " < > | + Název souboru nesmí být prázdný nebo obsahovat následující znaky: + \ / : * ? " < > | + + + The palette %1 already exists. +Do you want to overwrite it? + Paleta %1 již existuje. +Chcete ji přepsat? + + + Cannot load Color Model in current palette. + barevný model nelze nahrát do nynější palety. + + + Image DPI + DPI obrázku + + + Custom DPI + Vlastní DPI + + + Create project + Vytvořit projekt + + + There are no frames to scan. + Nejsou žádné snímky ke skenování. + + + TWAIN is not available. + TWAIN není dostupný. + + + Couldn't save %1 + Nepodařilo se uložit %1 + + + No level selected! + Nevybrána žádná úroveň! + + + Exporting level of %1 frames in %2 + Vyvádí se úroveň %1 snímků v %2 + + + Warning: file %1 already exists. + Varování: Soubor %1 již existuje. + + + Continue Exporting + Pokračovat ve vyvádění + + + Stop Exporting + Zastavit vyvádění + + + The level %1 already exists. +Do you want to overwrite it? + Úroveň %1 již existuje. +Chcete ji přepsat? + + + The soundtrack %1 already exists. +Do you want to overwrite it? + Zvukový doprovod %1 již existuje. +Chcete jej přepsat? + + + File %1 doesn't loOk like a TOONZ Scene + Soubor %1 nevypadá jako záběr Toonz + + + It is not possible to load the scene %1 because it does not belong to any project. + Záběr %1 se nepodařilo zavést. Nepatří k žádnému projektu.. + + + There were problems loading the scene %1. + Some files may be missing. + Při nahrávání záběru %1 se vyskytly potíže. +Některé soubory nebyly nalezeny. + + + There were problems loading the scene %1. +Some levels have not been loaded because their version is not supported + Při nahrávání záběru %1 se vyskytly potíže. +Některé úrovně nebyly nahrány, protože jejich verze není podporována + + + It is not possible to load the level %1 + Úroveň %1 nelze nahrát + + + Save the scene first + Nejprve uložte záběr + + + It is not possible to load the %1 level. + Úroveň %1 nelze nahrát. + + + The scene %1 doesn't exist. + Záběr %1 neexistuje. + + + It is not possible to delete the used level %1. + Používanou úroveň %1 nelze smazat. + + + The Revert to Last Saved command is not supported for the current selection. + Příkaz "Vrátit se k naposledy uložené verzi" není pro nynější výběr podporován. + + + The selected column is empty. + Vybraný sloupec je prázdný. + + + Selected cells must be in the same column. + Vybrané buňky musí být ve stejném sloupci. + + + Match lines can be deleted from Toonz raster levels only + Dělicí čáry lze smazat jen z rastrových úrovní Toonz + + + Partially Edited + Částečně upraveno + + + Partially Locked + Částečně uzamknuto + + + Partially Modified + Částečně změněno + + + Name + Název + + + Path + Cesta + + + Date Created + Datum vytvoření + + + Date Modified + Datum poslední změny + + + Size + Velikost + + + Frames + Snímky + + + Version Control + Správa verzí + + + Warning: level %1 already exists; overwrite? + Varování: Úroveň %1 již existuje. Přepsat? + + + It is not possible to paste image on the current cell. + Obrázek nelze vložit do nynější buňky. + + + Are you sure you want to delete the selected cleanup color? + Jste si jistý, že chcete smazat vybranou barvu vyčištění? + + + Installing %1 again could fix the problem. + Znovunainstalování %1 by mohlo problém opravit. + + + It is not possible to apply match lines to a column containing more than one level. + Dělicí čáry nelze použít na sloupec s více než jednou úrovní. + + + It is not possible to use a match lines column containing more than one level. + Dělicí čáry nelze použít na sloupec s více než jednou úrovní. + + + Match lines can be applied to Toonz raster levels only. + Dělicí čáry lze použít jen na rastrové úrovně Toonz. + + + The style index you specified is not available in the palette of the destination level. + Vámi stanovené číslo stylu není pro paletu cílové úrovně dostupné. + + + The style index range you specified is not valid: please separate values with a comma (e.g. 1,2,5) or with a dash (e.g. 4-7 will refer to indexes 4, 5, 6 and 7). + Rozsah vámi stanovených čísel stylu je neplatný: Jednotlivé hodnoty, prosím, oddělte čárkou (např. 1,2,5) nebo spojovníkem (např. 4-7 odpovídá číslům 4,5,6,7). + + + The frame range you specified is not valid: please separate values with a comma (e.g. 1,2,5) or with a dash (e.g. 4-7 will refer to frames 4, 5, 6 and 7). + Stanovený rozsah snímku je neplatný: Jednotlivé hodnoty, prosím, oddělte čárkou (např. 1,2,5) nebo spojovníkem (např. 4-7 odpovídá číslům 4,5,6,7). + + + No drawing is available in the frame range you specified. + Ve stanoveném rozsahu snímku není dostupná žádná kresba. + + + It is not possible to perform a merging involving more than one level per column. + Sloupce s více než jednou úrovní na sloupec nelze sloučit. + + + Only raster levels can be merged to a raster level. + Jen rastrové úrovně lze sloučit do jedné rastrové úrovně. + + + Only vector levels can be merged to a vector level. + Jen vektorové úrovně lze sloučit do jedné vektorové úrovně. + + + It is possible to merge only Toonz vector levels or standard raster levels. + Je možné sloučit jen vektorové úrovně Toonz nebo standardní rastrové úrovně. + + + It is not possible to display the file %1: no player associated with its format + Soubor %1 nelze zobrazit: S tímto formátem není spojen žádný přehrávač + + + The specified name is already assigned to the %1 file. + Stanovený název je již přiřazen souboru %1. + + + It is not possible to rename the %1 file. + Soubor %1 nelze přejmenovat. + + + It is not possible to copy the %1 file. + Soubor %1 nelze kopírovat. + + + It is not possible to save the curve. + Křivku nelze uložit. + + + It is not possible to load the curve. + Křivku nelze nahrát. + + + It is not possible to export data. + Data nelze vyvést. + + + Export + Vyvést + + + LineTest Capture + Čárová zkouška Zachycení + + + It is not possible to save images in camera stand view. + V pohledu na stav kamery nelze uložit žádné obrázky. + + + The preview images are not ready yet. + Ještě nejsou připraveny žádné náhledové obrázky. + + + A convertion task is in progress! wait until it stops or cancel it + Probíhá úloha převedení! Počkejte, dokud se nedokončí, nebo ji zrušte + + + Error loading scene %1 :%2 + Chyba při nahrávání záběru %1: %2 + + + Error loading scene %1 + Chyba při nahrávání záběru %1 + + + There was an error saving the %1 scene. + Chyba při ukládání záběru %1. + + + It is not possible to export the scene %1 because it does not belong to any project. + Záběr %1 nelze vyvést. Nepatří k žádnému projektu. + + + Continue to All + Použít na vše + + + The selected paper format is not available for %1. + Vybráný formát papíru není dostupný pro %1. + + + No TWAIN scanner is available + Žádný skener TWAIN není dostupný + + + No scanner is available + Není dostupný žádný skener + + + The autocentering failed on the current drawing. + Automatické vystředění při nynější kresbě selhalo. + + + Some of the selected drawings were already scanned. Do you want to scan them again? + Některé z vybraných obrázků již byly skenovány. Chcete je skenovat znovu? + + + There was an error saving frames for the %1 level. + Při ukládání snímku pro úroveň %1 se vyskytla chyba. + + + It is not possible to create folder : %1 + Nelze vytvořit složku: %1 + + + It is not possible to create a folder. + Nelze vytvořit složku. + + + The resolution of the output camera does not fit with the options chosen for the output file format. + Rozlišení výstupní kamery neodpovídá volbám vybraným pro formát výstupního souboru. + + + It is not possible to complete the rendering. + Zpracování nelze dokončit. + + + Type + Typ + + + The cleanup settings file for the %1 level already exists. + Do you want to overwrite it? + Soubor s nastavením vyčištění pro úroveň %1 již existuje. +Chcete jej přepsat? + + + The merge command is not available for greytones images. + Příkaz ke sloučení není pro obrázky v odstínech šedi dostupný. + + + The cleanup settings for the current level have been modified... + +Do you want to save your changes? + Nastavení vyčištění pro nynější úroveň byla změněna... + +Chcete uložit změny? + + + Cleanup Settings + Nastavení vyčištění + + + The scene %1 was created with Toonz and cannot be loaded in LineTest. + Záběr %1 byl vytvořen s Toonz a nelze jej nahrát do čárové zkoušky. + + + File %1 already exists. +Do you want to overwrite it? + Soubor %1 již existuje. +Chcete jej přepsat? + + + The level you are using has not a valid palette. + Používaná úroveň nemá žádnou platnou paletu. + + + Message Center + Ůstředí zpráv + + + Script Console + Skriptovací konzole + + + Run script + Spustit skript + + + Level + Úroveň + + + already exists! Are you sure you want to overwrite it? + již existuje. Chcete ji přepsat? + + + It is not possible to merge tlv columns containing more than one level + Nelze sloučit sloupce TLV s více než jednou úrovní + + + Ok + OK + + + Selected folders don't belong to the current project. +Do you want to import them or load from their original location? + Vybrané složky nepatří k nynějšímu projektu. +Chcete je zavést nebo nahrát z jejich původního umístění? + + + Move Cleanup Camera + Posunout kameru vyčištění + + + Scale Cleanup Camera + Změnit velikost kamery vyčištění + + + Delete and Re-cleanup : The following files will be deleted. + + + Smazat a vyčistit znovu: Následující soubory budou smazány. + + + + + +Are you sure ? + +Jste si jistý? + + + Replace with copied palette + Nahradit zkopírovanou paletou + + + Keep original palette + Zachovat původní paletu + + + Insert Frame at Frame %1 + Vložit snímek při snímku %1 + + + Remove Frame at Frame %1 + Odstranit snímek při snímku %1 + + + Insert Multiple Keys at Frame %1 + Vložit více klíčů při snímku %1 + + + Remove Multiple Keys at Frame %1 + Odstranit více klíčů při snímku %1 + + + Set Keyframe : %1 + Nastavit klíčový snímek: %1 + + + Close SubXsheet + Zavřít pod-Xsheet + + + Select a sub-xsheet cell. + Vybrat buňku pod-Xsheet. + + + Collapse + Sbalit + + + Collapse (Fx) + Sbalit pod-Xsheet(náčrtek efektu) + + + Explode + Sbalit + + + Delete Level : %1 + Smazat úroveň: %1 + + + Revert To %1 : Level %2 + Vrátit k %1: Úroveň %2 + + + Load Level %1 + Nahrát úroveň %1 + + + Load and Replace Level %1 + Nahrát a nahradit úroveň %1 + + + Expose Level %1 + Ukázat úroveň %1 + + + Following file(s) are modified. + + + Následující soubor(y) jsou změněny. + + + + + +Are you sure to + +Jste si jistý + + + anyway ? + přesto? + + + Overwrite Palette + Přepsat paletu + + + Don't Overwrite Palette + Paletu nepřepisovat + + + No Current Level + Žádná nynější úroveň + + + Toonz cannot Save this Level + Tuto úroveň nelze uložit + + + No Current Scene + Žádný nynější záběr + + + Save level Failed + Úroveň se nepodařilo uložit + + + Paste : Level %1 : Frame + Vložit: Úroveň %1 : Snímek + + + Delete Frames : Level %1 : Frame + Smazat snímky: Úroveň %1 : Snímek + + + Cut Frames : Level %1 : Frame + Vystřihnout snímky: Úroveň %1 : Snímek + + + Add Frames : Level %1 : Frame + Přidat snímky: Úroveň %1 : Snímek + + + Renumber : Level %1 + Přečíslovat: Úroveň %1 + + + Insert : Level %1 + Vložit snímky: Úroveň %1 + + + Reverse : Level %1 + Obrátit pořadí: Úroveň %1 + + + Swing : Level %1 + Swing: Úroveň %1 + + + Step %1 : Level %2 + Krok %1: Úroveň %2 + + + Each %1 : Level %2 + Každý %1. krok: Úroveň %2 + + + Duplicate : Level %1 + Zdvojit: Úroveň %1 + + + Move Level to Scene : Level %1 + Posunout úroveň k záběru: Úroveň %1 + + + Inbeteween : Level %1, + Mezi to: Úroveň %1 + + + Paste Column : + Vložit sloupec: + + + Delete Column : + Smazat sloupec: + + + Insert Column : + Vložit sloupec: + + + Resequence : Col%1 + Vyrovnat znovu snímky pod-Xsheet: Col%1 + + + Clone Sub-xsheet : Col%1 + Klonovat pod-Xsheet: Col%1 + + + Clear Cells : Col%1 + Vyprázdnit buňky: Col%1 + + + Reverse + Obrátit + + + Swing + Swing + + + Autoexpose + Ukázat automaticky + + + Random + Náhodný + + + Step %1 + Krok %1 + + + Each %1 + Každý %1. krok + + + Reframe to %1's + Přesnímkovat na %1 + + + Roll Up + Vyhrnout + + + Roll Down + Shrnout + + + Clone Level : %1 > %2 + Zdvojit úroveň: %1 > %2 + + + Clone Levels : + Zdvojit úrovně: + + + Time Stretch + Protáhnutí času + + + Palette Gizmo + Palette bearbeiten + + + Create Level %1 at Column %2 + Vytvořit úroveň %1 při sloupci %2 + + + Do you want to expose the renamed level ? + Chcete ukázat přejmenovanou úroveň? + + + Expose + Ukázat + + + Don't expose + Neukazovat + + + Paste Key Frames + Vložit klíčové snímky + + + Delete Key Frames + Smazat klíčové snímky + + + Copy File + Kopírovat soubor + + + Paste File : + Vložit soubor: + + + Duplicate File : + Zdvojit soubor: + + + Paste Cells + Vložit buňky + + + Delete Cells + Smazat buňky + + + Cut Cells + Vyjmout buňky + + + Insert Cells + Vložit prázdnét buňky + + + Paste (StrOkes) + Vložit (tah) + + + Paste + Vložit + + + Paste (Raster) + Vložit (rastr) + + + Overwrite Paste Cells + Přepsat vložené buňky + + + Cannot paste data + Nothing to paste + Nelze vložit data +Ve schránce nejsou žádná data k vložení + + + Modify Play Range : %1 - %2 + Změnit rozsah přehrávání: %1 - %2 + + + Modify Play Range : %1 - %2 > %3 - %4 + Změnit rozsah přehrávání: %1 - %2 > %3 - %4 + + + Use Level Extender + Použít chytrou kartu + + + Modify Sound Level + Upravit zvukovou úroveň + + + Set Keyframe : %1 at Frame %2 + nastavit klíčový snímek: %1 snímek %2 + + + Move Columns + Posunout sloupce + + + Change Pegbar + Změnit pruh na kolíky + + + Rename Cell at Column %1 Frame %2 + Přejmenovat buňku při sloupci %1 snímek %2 + + + Move Level + Posunout úroveň + + + Combo Viewer + Prohlížečka + + + Cleeanup Settings + Nastavení vyčištění + + + Move Level to Cast Folder + Posunout úroveň do složky s obsazením (k položkám záběrů) + + + Merge Raster Levels + Sloučit rastrové úrovně + + + Delete Matchline : Level %1 + Smazat dělicí čáry: Úroveň %1 + + + Apply Matchline : Column%1 < Column%2 + Použít dělicí čáry: Sloupec %1 < Sloupec %2 + + + Palette Gizmo %1 + Upravit paletu %1 + + + Warning + Varování + + + Palette is locked. + Paleta je uzamknuta. + + + History + Historie + + + Move Keyframe + Posunout klíčový snímek + + + OK + OK + + + File %1 doesn't look like a TOONZ Scene + Soubor %1 nevypadá jako záběr Toonz + + + Inbetween : Level %1, + Mezi to: Úroveň %1, + + + FlipBook + FlipBoOk + + + It is not possible to track the level: +undefined error. + Nelze sledovat úroveň: +Neurčená chyba. + + + Paste (Strokes) + Vložit (tahy) + + + Move keyframe handle : %1 Handle of the keyframe %2 + Přesunout úchop klíčového snímku: %1 Úchop klíčového snímku %2 + + + Toggle cycle of %1 + Přepnout koloběh %1 + + + [Drag] to move position + [Táhnout] pro posunutí polohy + + + ----Separator---- + ----Oddělovač---- + + + [Drag] to move position, [Double Click] to edit title + [Táhnout] pro posunutí polohy, [Dvakrát klepnout] pro upravení názvu + + + Incorrect file + Nesprávný soubor + + + [Drag&Drop] to copy separator to menu bar + [Táhnout a upustit] pro kopírování oddělovače do pruhu s nabídkou + + + [Drag&Drop] to copy command to menu bar + [Táhnout a upustit] pro kopírování příkazu do pruhu s nabídkou + + + Cannot open menubar settings template file. Re-installing Toonz will solve this problem. + Nelze otevřít soubor předlohy s nastavením pruhu s nabídkou. Tuto potíž vyřeší přeinstalování Toonz. + + + Visit Web Site + Navštívit internetovou stránku + + + https://opentoonz.github.io/e/ + https://opentoonz.github.io/e/ + + + Change current drawing %1 + Změnit nynější kresbu %1 + + + %1: the current scene has been modified. +What would you like to do? + %1: Nynější záběr byl změněn. +Co chcete udělat? + + + Save All + Uložit vše + + + Save Scene Only + Uložit jen záběr + + + Discard Changes + Zahodit změny + + + The following file(s) have been modified. + + + Následující soubor(y) byly změněny. + + + + + +What would you like to do? + +Co chcete dělat? + + + Save Changes + Uložit změny + + + Anyway + Přesto + + + This scene is incompatible with pixels only mode of the current OpenToonz version. +What would you like to do? + Tento záběr je neslučitelný s režimem jen obrazové body (pixely) nynější verze OpenToonz. +Co chcete dělat? + + + Turn off pixels only mode + Vypnout režim jen obrazové body (pixely) + + + Keep pixels only mode on and resize the scene + Zachovat režim jen obrazové body (pixely) a změnit velikost záběru + + + Hide Zero Thickness Lines + Skrýt čáry o nulové tloušťce + + + Show Zero Thickness Lines + Ukázat čáry o nulové tloušťce + + + <custom> + <vlastní> + + + The file name already exists. +Do you want to overwrite it? + Název souboru již existuje. +Chcete jej přepsat? + + + Deleting "%1". +Are you sure? + Maže se "%1" +Jste si jistý? + + + Auto Input Cell Numbers : %1 + Automaticky vložit čísla buněk: %1 + + + Insert + Vložit + + + FFmpeg not found, please set the location in the Preferences and restart. + FFmpeg nenalezen. Nastavte, prosím, jeho umístění v Nastavení a program spusťte znovu. + + + New Note Level + Nová poznámková úroveň + + + Always do this action. + Vždy provést tuto činnost. + + + The following level(s) use path with $scenefolder alias. + + + Následující úroveň(vně) používají cestu se zástupnou $scenefolder. + + + + + +They will not be opened properly when you load the scene next time. +What do you want to do? + +Nebudou otevřeny řádně, až příště záběr nahrajete. +Co chcete dělat? + + + Copy the levels to correspondent paths + Kopírovat úrovně do odpovídajících cest + + + Decode all $scenefolder aliases + Dekódovat všechny zástupné $scenefolder + + + Save the scene only + Uložit jen záběr + + + Overwrite for All + Přepsat pro vše + + + Don't Overwrite for All + Nepřepsat pro vše + + + Failed to overwrite %1 + Nepodařilo se přepsat %1 + + + Reframe to %1's with %2 blanks + Přesnímkovat na %1 s %2 prázdnými + + + The selected scene could not be found. + Vybraný záběr se nepodařilo najít. + + + Apply Lip Sync Data + + + + Layer name + Název vrstvy + + + Paste Numbers + Vložit čísla + + + It is not possible to paste the cells: Some column is locked or column type is not match. + Nelze vložit buňky. Některý sloupec je uzamknut nebo neodpovídá typ sloupce. + + + This command only works on vector cells. + Tento příkaz pracuje jen na vektorové úrovně. + + + Please select only one column for this command. + Vyberte, prosím, pro tento příkaz jen jeden sloupec. + + + All selected cells must belong to the same level. + Všechny vybrané buňky musí patřit do stejné úrovně. + + + Simplify Vectors : Level %1 + Zjednodušit vektory: Úroveň %1 + + + Change Text at Column %1 Frame %2 + Změnit text při sloupci %1 snímek %2 + + + Stage Schematic + Náčrtek fáze + + + Fx Schematic + Náčrtek efektu + + + Command Bar + Příkazový řádek + + + Skipping frame. + Přeskakuje se snímek. + + + Cannot Read XML File + Nelze přečíst soubor XML + + + Apply + Použít + + + The scene is not yet saved and the output destination is set to $scenefolder. +Save the scene first. + Záběr ještě není uložen a výstupní cíl je nastaven na $scenefolder. +Nejprve záběr uložte. + + + A prior save of Scene '%1' was critically interupted. + +A partial save file was generated and changes may be manually salvaged from '%2'. + +Do you wish to continue loading the last good save or stop and try to salvage the prior save? + + + + Continue + Pokračovat + + + File '%1' will reload level '%2' as a duplicate column in the xsheet. + +Allow duplicate? + Soubor '%1' znovunahraje úroveň '%2' jako zdvojený sloupec v xsheet. + +Povolit kopii? + + + + Allow + Povolit + + + Allow All Dups + Povolit všechny kopie + + + No to All Dups + Ne všechny kopie + + + Hide cursor size outline + Skrýt obrys velikosti ukazovátka + + + Show cursor size outline + Ukázat obrys velikosti ukazovátka + + + Fill In Empty Cells + Vyplnit prázdné buňky + + + Check for the latest version on launch. + Při spuštění hledat poslední verzi. + + + Nothing to replace: no cells or columns selected. + Není nic k nahrazenín: Nebyly vybrány ani buňky ani sloupce. + + + Couldn't load %1 + Nepodařilo se nahrát %1 + + + Apply Antialias + Použít vyhlazování okrajů + + + The Reload command is not supported for the current selection. + Příkaz k znovunahrání není pro nynější výběr podporován. + + + Error + Chyba + + + No Palette loaded. + Nebyla nahrána žádná paleta. + + + A separation task is in progress! wait until it stops or cancel it + Probíhá úloha oddělení! Počkejte, dokud se nedokončí, nebo ji zrušte + + + Duplicate Frame in XSheet + Zdvojit snímek v XSheet + + + Please enable "Sync Level Strip Drawing Number Changes with the XSheet" preference option +to use the duplicate command in the xsheet / timeline. + + + + Please select only one layer to duplicate a frame. + Vyberte, prosím, jen jednu úroveň pro zdvojení snímku. + + + Please select only one frame to duplicate. + Vyberte, prosím, jen jeden snímek ke zdvojení. + + + Timeline + Časová osa + + + The qualifier %1 is not a valid key name. Skipping. + Kvalifikátor %1 není platným názvem klíče. Přeskakuje se. + + + Clear All Onion Skin Markers + Vyprázdnit všechny značky cibulového vzhledu + + + Clear All Fixed Onion Skin Markers + Vyprázdnit všechny pevné značky cibulového vzhledu + + + Clear All Relative Onion Skin Markers + Vyprázdnit všechny relativní značky cibulového vzhledu + + + Always Overwrite in This Scene + + + + + %1 more level(s) + + + + + Fx Settings + Nastavení efektu + + + Save Curve + Uložit křivku + + + Load Curve + Nahrát křivku (parametr efektu) + + + Export Curve + Vyvést křivku + + + Rendering frame %1 / %2 + RenderListener + + + + Precomputing %1 Frames + RenderListener + + + + of %1 + RenderListener + + + + Finalizing render, please wait. + RenderListener + Dokončuje se zpracování. Počkejte, prosím. + + + Aborting render... + RenderListener + + + + Building Schematic... + RenderCommand + + + + column + MultimediaProgressBar label (mode name) + + + + layer + MultimediaProgressBar label (mode name) + + + + Rendering %1%2, frame %3 / %4 + MultimediaProgressBar label + + + + Rendering %1 frames of %2 + MultimediaProgressBar + + + + %1 of %2 + MultimediaProgressBar - [totalframe] of [path] + + + + Aborting render... + MultimediaProgressBar + + + + It is not possible to write the output: the file + RenderCommand + + + + s are read only. + RenderCommand + + + + is read only. + RenderCommand + + + + Save Cleanup Settings + Uložit nastavení vyčištění + + + Load Cleanup Settings + Nahrát nastavení vyčištění + + + It is not possible to find the %1 level. + FileData + Úroveň %1 nelze najít. + + + There was an error copying %1 + FileData + Při kopírování %1 se vyskytla chyba + + + Clone Level + CloneLevelUndo::LevelNamePopup + Zdvojit úroveň + + + Level Name: + CloneLevelUndo::LevelNamePopup + Název úrovně: + + + Collecting assets... + Sbírá se materiál... + + + Abort + Zrušit + + + Importing scenes... + Zavádí se záběry... + + + It is not possible to execute the merge column command because no column was selected. + Sloupce nelze sloučit, protože nebyly vybrány žádné sloupce. + + + It is not possible to execute the merge column command because only one columns is selected. + + + + It is not possible to apply the match lines because no column was selected. + Není možné použít dělicí čáry, protože nebyl vybrán žádný sloupec. + + + It is not possible to apply the match lines because two columns have to be selected. + Je možné použít dělicí čáry, protože musí být vybrány dva sloupce. + + + It is not possible to merge tlv columns because no column was selected. + Sloupce TLV nelze sloučit, protože nebyly vybrány žádné sloupce. + + + It is not possible to merge tlv columns because at least two columns have to be selected. + Sloupce TLV nelze sloučit, protože musí být vybrány alespoň dva sloupce. + + + Merging Tlv Levels... + Slučují se úrovně TLV... + + + Save Previewed Images + Uložit snímky s náhledem + + + The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | + Název souboru nesmí být prázdný nebo obsahovat následující znaky: (nový řádek) \ / : * ? " | + + + Unsopporter raster format, cannot save + + + + Cannot create %1 : %2 + Previewer warning %1:path %2:message + + + + Cannot create %1 + Previewer warning %1:path + + + + Saved %1 frames out of %2 in %3 + Previewer %1:savedframes %2:framecount %3:filepath + %1 snímků z %2 bylo uloženo v %3 + + + Canceled! + Previewer + + + + No frame to save! + + + + Already saving! + + + + Warning! + OverwriteDialog + Varování! + + + Overwrite + OverwriteDialog + Přepsat + + + Skip + OverwriteDialog + Přeskočit + + + File "%1" already exists. +Do you want to overwrite it? + OverwriteDialog + Soubor %1 již existuje. +Chcete jej přepsat? + + + %1 does not exist. + %1 neexistuje. + + + + ReframePopup + + Reframe with Empty Inbetweens + + + + OK + OK + + + Cancel + Zrušit + + + steps + kroky + + + with + s + + + empty inbetweens + + + + ( + ( + + + blank cells will be inserted.) + prázdné buňky budou vloženy.) + + + + RenameAsToonzPopup + + Delete Original Files + Smazat původní soubor + + + Level Name: + Název úrovně: + + + Rename + Přejmenovat + + + Cancel + Zrušit + + + Renaming File + Přejmenovává se soubor + + + Creating an animation level of %1 frames + Vytváří se úroveň animace s %1 snímky + + + The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | + Název souboru nesmí být prázdný nebo obsahovat následující znaky: (nový řádek) \ / : * ? " | + + + + RenderController + + Continue + Pokračovat + + + Cancel + Zrušit + + + Exporting ... + Vyvádí se... + + + Abort + Zrušit + + + Exporting + Vyvádí se + + + The %1 scene contains an audio file with different characteristics from the one used in the first exported scene. +The audio file will not be included in the rendered clip. + Záběr %1 obsahuje zvukový soubor s jinými vlastnostmi, než jaké měl nejprve vyvedený záběr. +Zvukový soubor nebude zahrnut do zpracovaného záznamu. + + + The %1 scene has a different resolution from the %2 scene. + The output result may differ from what you expect. What do you want to do? + Záběr %1 má jiné rozlišení než záběr %2. +Výsledek výstupu se může lišit od toho, který byl očekáván. Co chcete dělat? + + + + RenderListener + + Finalizing render, please wait. + Dokončuje se zpracování. Počkejte, prosím. + + + + RenumberPopup + + Renumber + Přečíslovat + + + Start: + Začátek: + + + Step: + Krok: + + + Cancel + Zrušit + + + + ReplaceLevelPopup + + Replace Level + Nahradit úroveň + + + Replace + Nahradit + + + Nothing to replace: no cells selected. + Není nic k nahrazenín: Nebyly vybrány žádné buňky. + + + File not found + + Soubor nenalezen + + + + + ReplaceParentDirectoryPopup + + Replace Parent Directory + Nahradit rodičovský adresář + + + Replace + Nahradit + + + Nothing to replace: no cells or columns selected. + Není nic k nahrazenín: Nebyly vybrány ani buňky ani sloupce. + + + + RoomTabWidget + + New Room + Nová pracovní plocha + + + Delete Room + Smazat pracovní plochu + + + Room + Pracovní plocha + + + Are you sure you want to remove room %1 + Opravdu chcete smazat pracovní plochu %1 + + + Delete Room "%1" + Smazat pracovní plochu "%1" + + + Customize Menu Bar of Room "%1" + Přizpůsobit nabídkový pruh pracovní plochy "%1" + + + + Ruler + + Click to create an horizontal guide + Klepnout pro vytvoření vodorovné pomocné čáry + + + Click to create a vertical guide + Klepnout pro vytvoření svislé pomocné čáry + + + Click and drag to move guide + Klepnout a táhnout pro posunutí pomocné čáry + + + + SVNCleanupDialog + + Version Control: Cleanup + Správa verzí: Vyčištění + + + Cleaning up %1... + Čistí se %1... + + + Close + Zavřít + + + Cleanup done. + Vyčištění dokončeno. + + + + SVNCommitDialog + + Version Control: Put changes + Správa verzí: Zapsání změn + + + Select / Deselect All + Vybrat vše/Zrušit výběr u všeho + + + 0 Selected / 0 Total + 0 vybráno / 0 celkem + + + Getting repository status... + Získává se stav úložiště... + + + Comment: + Poznámka: + + + Put Scene Contents + Zapsat obsah záběru + + + Put + Zapsat + + + Cancel + Zrušit + + + Adding %1 items... + Přidává se %1 položek... + + + Set needs-lock property... + Nastavit vlastnost "Zámek nutný"... + + + Committing %1 items... + Odesílá se %1 položek... + + + Put done successfully. + Zapsání dokončeno. + + + Putting %1 items... + Zapisuje se %1 položek... + + + No items to put. + Žádné položky k zapsání. + + + %1 items to put. + %1 položek k zapsání. + + + %1 Selected / %2 Total + %1 vybráno / %2 celkem + + + Close + Zavřít + + + + SVNCommitFrameRangeDialog + + Version Control: Put + Správa verzí: Zapsání + + + Note: the file will be updated too. + Poznámka: Soubor bude aktualizován také. + + + Comment: + Poznámka: + + + Put + Zapsat + + + Cancel + Zrušit + + + Put done successfully. + Zapsání dokončeno. + + + Locking file... + Soubor se uzamyká... + + + Getting frame range edit information... + Získávají se údaje o upravení rozsahu snímku... + + + No frame range edited. + Žádný rozsah snímku nebyl upraven. + + + Updating frame range edit information... + Aktualizuje se údaj o upravení rozsahu snímku... + + + Putting changes... + Zapisují se změny... + + + Updating file... + Aktualizuje se soubor... + + + Adding hoOk file to repository... + Soubor háčku se přidává do úložiště... + + + Setting the needs-lock property to hoOk file... + Vlastnost "Zámek nutný" se nastavuje v souboru háčku... + + + Adding hook file to repository... + Soubor háčku se přidává do úložiště... + + + Setting the needs-lock property to hook file... + Vlastnost "Zámek nutný" se nastavuje v souboru háčku... + + + + SVNDeleteDialog + + Version Control: Delete + Správa verzí: Smazání + + + Delete folder that contains %1 items. + Smazat složku, která obsahuje %1 položek. + + + Delete empty folder. + Smazat prázdnou složku. + + + Delete %1 items. + Smazat %1 položek. + + + Comment: + Poznámka: + + + Delete Scene Contents + Smazat obsah záběru + + + Keep Local Copy + Zachovat místní kopii + + + Delete Local Copy + Smazat místní kopii + + + Delete on Server + Smazat soubor na serveru + + + Cancel + Zrušit + + + Deleting %1 items... + Maže se %1 položek... + + + Delete + Smazat + + + You are deleting items also on repository. Are you sure ? + Budou smazány také položky v úložišti. Jste si jistý? + + + + SVNFrameRangeLockInfoDialog + + Version Control: Edit Info + Správa verzí: Informace o upravení + + + Getting repository status... + Získává se stav úložiště... + + + Close + Zavřít + + + No frame range edited. + Žádný rozsah snímku nebyl upraven. + + + %1 on %2 is editing frames from %3 to %4. + %1 na %2 upravuje snímky od %3 do %4. + + + + SVNLockDialog + + Version Control: Edit + Správa verzí: Upravení + + + Version Control: Unlock + Správa verzí: Odemknutí + + + Getting repository status... + Získává se stav úložiště... + + + Comment: + Poznámka: + + + Edit Scene Contents + Upravit obsah záběru + + + Unlock Scene Contents + Odemknout obsah záběru + + + Edit + Upravit + + + Unlock + Odemknout + + + Cancel + Zrušit + + + No items to edit. + Žádné položky k upravení. + + + No items to unlock. + Žádné položky k odemknutí. + + + %1 items to edit. + %1 položek k upravení. + + + %1 items to unlock. + Je %1 položek k odemknutí. + + + Editing %1 items... + Upravuje se %1 položek... + + + Unlocking %1 items... + Odemyká se %1 položek... + + + + SVNLockFrameRangeDialog + + Version Control: Edit Frame Range + Správa verzí: Upravení rozsahu snímku + + + Temporary Lock file... + Dočasné uzamknutí souboru... + + + From: + Od snímku: + + + To: + Ke snímku: + + + Comment: + Poznámka: + + + Edit + Upravit + + + Cancel + Zrušit + + + No frame range edited. + Žádný rozsah snímku nebyl upraven. + + + Getting frame range edit information... + Získávají se údaje o upravení rozsahu snímku... + + + %1 on %2 is editing frames from %3 to %4. + %1 na %2 upravuje snímky od %3 do %4. + + + + SVNLockInfoDialog + + Version Control: Edit Info + Správa verzí: Informace o upravení + + + <b>Edited By:</b> + <b>Upraveno:</b> + + + <b>Host:</b> + <b>Host:</b> + + + <b>Comment:</b> + <b>Poznámka:</b> + + + <b>Date:</b> + <b>Datum:</b> + + + Close + Zavřít + + + + SVNLockMultiFrameRangeDialog + + Version Control: Edit Frame Range + Správa verzí: Upravení rozsahu snímku + + + Getting repository status... + Získává se stav úložiště... + + + From: + Od snímku: + + + To: + Ke snímku: + + + Comment: + Poznámka: + + + Edit + Upravit + + + Cancel + Zrušit + + + No frame range edited. + Žádný rozsah snímku nebyl upraven. + + + Editing %1 items... + Upravuje se %1 položek... + + + %1 is editing frames from %2 to %3 + %1 upravuje snímky od %2 do %3 + + + + SVNMultiFrameRangeLockInfoDialog + + Version Control: Edit Info + Správa verzí: Informace o upravení + + + Getting repository status... + Získává se stav úložiště... + + + Close + Zavřít + + + No frame range edited. + Žádný rozsah snímku nebyl upraven. + + + %1 is editing frames from %2 to %3 + %1 upravuje snímky od %2 do %3 + + + + SVNPurgeDialog + + Version Control: Purge + Versionskontrolle: Zahození + + + Note: the file will be updated too. + Poznámka: Soubor bude aktualizován také. + + + Getting repository status... + Získává se stav úložiště... + + + Purge + Zahodit + + + Cancel + Zrušit + + + No items to purge. + Žádné položky k zahození. + + + %1 items to purge. + Je %1 položek k zahození. + + + Purging files... + Soubory jsou zahazovány... + + + + SVNRevertDialog + + Version Control: Revert changes + Správa verzí: Vrácení změn + + + Getting repository status... + Získává se stav úložiště... + + + Revert Scene Contents + Vrátit obsah záběru + + + Revert + Vrátit + + + Cancel + Zrušit + + + No items to revert. + Žádné položky k vrácení. + + + %1 items to revert. + %1 položek k vrácení. + + + Reverting %1 items... + Vrací se %1 položek... + + + Revert done successfully. + Vrácení dokončeno. + + + + SVNRevertFrameRangeDialog + + Version Control: Revert Frame Range changes + Správa verzí: Vrácení změn rozsahu snímku + + + 1 item to revert. + Je jedna položka k vrácení. + + + Revert + Vrátit + + + Cancel + Zrušit + + + Reverting 1 item... + Vrací se jedna položka... + + + Revert done successfully. + Vrácení dokončeno. + + + Reverting %1 items... + Vrací se %1 položek... + + + It is not possible to revert the file. + Soubor nelze vrátit. + + + + SVNTimeline + + Version Control: Timeline + Správa verzí: Časová osa + + + Getting file history... + Získat minulost souboru... + + + Get Scene Contents + Získat obsah záběru + + + Get Last Revision + Získat poslední změnu + + + Get Selected Revision + Získat vybranou změnu + + + Close + Zavřít + + + Getting repository status... + Získává se stav úložiště... + + + Date + Datum + + + Author + Autor + + + Comment + Poznámka + + + Revision + Změna + + + Getting the status for %1... + Získává se stav pro %1... + + + Getting %1 to revision %2... + Získává se %1 pro změnu %2... + + + Getting %1 items to revision %2... + Získává se %1 položek pro změnu %2... + + + Getting %1... + Získává se %1... + + + Getting %1 items... + Získává se %1 položek... + + + + SVNUnlockFrameRangeDialog + + Version Control: Unlock Frame Range + Správa verzí: Odemknutí rozsahu snímku + + + Note: the file will be updated too. Are you sure ? + Poznámka: Soubor bude aktualizován také. Jste si jistý? + + + Unlock + Odemknout + + + Cancel + Zrušit + + + Unlock done successfully. + Odemknutí dokončeno. + + + Locking file... + Soubor se uzamyká... + + + Getting frame range edit information... + Získávají se údaje o upravení rozsahu snímku... + + + No frame range edited. + Žádný rozsah snímku nebyl upraven. + + + Updating frame range edit information... + Aktualizuje se údaj o upravení rozsahu snímku... + + + Putting changes... + Zapisují se změny... + + + Updating file... + Aktualizuje se soubor... + + + Close + Zavřít + + + + SVNUnlockMultiFrameRangeDialog + + Version Control: Unlock Frame Range + Správa verzí: Odemknutí rozsahu snímku + + + Getting repository status... + Získává se stav úložiště... + + + Unlock + Odemknout + + + Cancel + Zrušit + + + Unlocking %1 items... + Odemyká se %1 položek... + + + No items to unlock. + Žádné položky k odemknutí. + + + %1 items to unlock. + Je %1 položek k odemknutí. + + + + SVNUpdateAndLockDialog + + Version Control: Edit + Správa verzí: Upravení + + + Comment: + Poznámka: + + + Edit Scene Contents + Upravit obsah záběru + + + Get And Edit + Získat a upravit + + + Edit + Upravit + + + Cancel + Zrušit + + + No items to edit. + Žádné položky k upravení. + + + %1 items to edit. + %1 položek k upravení. + + + Updating %1 items... + Aktualizuje se %1 položek... + + + Editing %1 items... + Upravuje se %1 položek... + + + + SVNUpdateDialog + + Version Control: Update + Správa verzí: Aktualizace + + + Getting repository status... + Získává se stav úložiště... + + + Get Scene Contents + Získat obsah záběru + + + Update + Obnovit + + + Close + Zavřít + + + Cancel + Zrušit + + + %1 items to update. + Je %1 položek k aktualizaci. + + + Update to: + Aktualizovat k: + + + Some conflict found. Select.. + Byl nalezen střet. Vyberte... + + + No items to update. + Žádné položky k aktualizaci. + + + Some items are currently modified in your working copy. +Please commit or revert changes first. + Ve vaší pracovní kopii byly změněny některé položky. +Nejprve, prosím, změny odešlete, nebo je vraťte zpět. + + + Updating items... + Aktualizují se položky... + + + Updating to their items... + Aktualizuje se k jejich položkám... + + + + SaveBoardPresetFilePopup + + Save Clapperboard Settings As Preset + Uložit nastavení filmové klapky jako přednastavení + + + + SaveCurvePopup + + Save Curve + Uložit křivku + + + Save + Uložit + + + + SaveImagesPopup + + Save FlipboOk Images + Uložit obrázky FlipboOk + + + Save + Uložit + + + Save Flipbook Images + Uložit obrázky FlipboOk + + + + SaveLevelAsPopup + + Save Level + Uložit úroveň + + + Save + Uložit + + + + SavePaletteAsPopup + + Save Palette + Uložit paletu + + + Save + Uložit + + + + SavePresetPopup + + Save Preset + Uložit přednastavení + + + Preset Name: + Název přednastavení: + + + Save + Uložit + + + Cancel + Zrušit + + + It is not possible to create the preset folder %1. + Nelze vytvořit složku s přednastavením %1. + + + Do you want to overwrite? + Chcete ji přepsat? + + + Yes + Ano + + + No + Ne + + + + SavePreviewedPopup + + Save Previewed Images + Uložit snímky s náhledem + + + Save + Uložit + + + + SaveSceneAsPopup + + Save Scene + Uložit záběr + + + Save + Uložit + + + + SaveSettingsPopup + + Save Cleanup Settings + Uložit nastavení vyčištění + + + Save + Uložit + + + + SaveSubSceneAsPopup + + Save + Uložit + + + Sub-xsheet + Pod-Xsheet + + + + SaveTaskListPopup + + Save Task List + Uložit seznam úloh + + + Save + Uložit + + + + ScanSettingsPopup + + Scan Settings + Nastavení skenu + + + [no scanner] + [žádný skener] + + + Paper Format: + Formát papíru: + + + Reverse Order + Obrátit pořadí + + + Paper Feeder + Podavač papíru + + + Mode: + Režim: + + + Dpi: + DPI: + + + Brightness: + Jas: + + + Threshold: + Prahová hodnota: + + + + SceneSettingsPopup + + Scene Settings + Nastavení záběru + + + Frame Rate: + Snímkování: + + + Camera BG Color: + Barva pozadí kamery: + + + Viewer BG Color: + Barva pozadí prohlížeče: + + + Preview BG Color: + Barva pozadí náhledu: + + + Checkerboard Color 1: + Barva šachovnice 1: + + + Checkerboard Color 2: + Barva šachovnice 2: + + + Image Subsampling: + Podvzorkování obrázku: + + + Marker Interval: + Interval značky: + + + A/R: + Obsah stran: + + + Safe Area Box 2: + Rámeček bezpečné oblasti 2: + + + Safe Area Box 1: + Rámeček bezpečné oblasti 1: + + + TLV Subsampling: + Podvzorkování TLV: + + + Start Frame: + Začáteční snímek: + + + Level And Column Icon: + Ikona úrovní a sloupců: + + + Field Guide Size: + Velikost praktického úvodu: + + + Frame Rate: + Snímkování: + + + Marker Interval: + Interval značky: + + + Start Frame: + Začáteční snímek: + + + Enable Column Color Filter and Transparency for Rendering + Povolit filtr barvy sloupce a průhlednost pro zpracování + + + + SceneViewerContextMenu + + Swap Compared Images + Vyměnit porovnávané obrázky + + + Save Previewed Frames + Uložit snímky s náhledem + + + Regenerate Preview + Obnovit náhled + + + Regenerate Frame Preview + Obnovit náhled snímku + + + Show / Hide + Ukázat/Skrýt + + + Reset Subcamera + Obnovit výchozí podkameru + + + Select Camera + Vybrat kameru + + + Select Pegbar + Vybrat pruh na kolíky + + + Select Column + Vybrat sloupec + + + Vector Guided Drawing + Vedené kreslení vektoru + + + Off + Vypnuto + + + Closest Drawing + Nejbližší Kreslení + + + Farthest Drawing + Nejvzdálenější kreslení + + + All Drawings + Všechna kreslení + + + Show %1 + Ukázat %1 + + + Hide %1 + Skrýt %1 + + + Table + Tabulka + + + Select %1 + Vybrat %1 + + + Flip View + + + + Reset View + + + + + SceneViewerPanel + + Preview + Náhled + + + Sub-camera Preview + Náhled na podkameru + + + Untitled + Bez názvu + + + Scene: + Záběr: + + + :: Frame: + :: Snímek: + + + :: Level: + :: Úroveň: + + + Level: + Úroveň: + + + Freeze + Pozastavit + + + Camera Stand View + Pohled na stav kamery + + + 3D View + Trojrozměrný pohled + + + Camera View + Pohled kamery + + + :: Zoom : + :: Zvětšení: + + + Safe Area (Right Click to Select) + Bezpečná oblast (klepnutí pravým tlačítkem myši pro vybrání) + + + Field Guide + Praktický úvod + + + (Flipped) + (převráceno) + + + :: Project: + + + + + SeparateColorsPopup + + Auto + Automaticky + + + Preview + Náhled + + + Separate + Rozdělit + + + Close + Zavřít + + + Sub Color 3: + Podbarva 3: + + + Alpha Matting + + + + Main + Hlavní + + + Sub1 + Pod1 + + + Sub2 + Pod2 + + + Sub3 + Pod3 + + + Pick Color + Vybrat barvu + + + Show Mask + Ukázat masku + + + Show Alpha + Ukázat alfu + + + Preview Frame: + Náhled snímku: + + + Paper Color: + Barva papíru: + + + Main Color: + Hlavní barva: + + + Sub Color 1: + Podbarva 1: + + + Sub Color 2: + Podbarva 2: + + + Sub Adjust: + + + + Border Smooth: + Vyhlazení okrajů: + + + Mask Threshold: + Prahová hodnota masky: + + + Mask Radius: + Poloměr masky: + + + Start: + Začátek: + + + End: + Konec: + + + Format: + Formát: + + + Save in: + Uložit v: + + + File Suffix: + Přípona souboru: + + + Cancel + Zrušit + + + Separate by colors ... + Rozdělit podle barev... + + + Separate 1 Level + Rozdělit 1 úroveň + + + Separate %1 Levels + Rozdělit %1 úrovně + + + Critical + Važné + + + Failed to access the destination folder! + Nepodařilo se přistoupit k cílové složce! + + + Separating %1 + Rozděluje se %1 + + + Converting level %1 of %2: %3 + Převádí se úrověň %1 z %2: %3 + + + + SeparateSwatch + + Sub Color 3 + Podbarva 3 + + + Original + Původní + + + Main Color + Hlavní barva + + + Sub Color 1 + Podbarva 1 + + + Sub Color 2 + Podbarva 2 + + + + ShortcutPopup + + Configure Shortcuts + Nastavit klávesové zkratky + + + Remove + Odstranit + + + Couldn't find any matching command. + Nepodařila se najít jakýkoli odpovídající příkaz. + + + Export Current Shortcuts + Vyvést nynější klávesové zkratky + + + Delete Current Preset + Smazat nynější přednastavení + + + Save Current Shortcuts as New Preset + Uložit nynější klávesové zkratky do nového přednastavení + + + Apply + Anwenden + + + Use selected preset as shortcuts + Použít vybrané přednastavení jako klávesové zkratky + + + Clear All Shortcuts + Vyprázdnit všechny klávesové zkratky + + + This will erase ALL shortcuts. Continue? + Toto vymaže VŠECHNY klávesové zkratky. Pokračovat? + + + This will overwrite all current shortcuts. Continue? + Toto přepíše všechny klávesové zkratky. Pokračovat? + + + A file named + Soubor s názvem + + + already exists. Do you want to replace it? + již existuje. +Chcete jej nahradit? + + + OpenToonz - Setting Shortcuts + OpenToonz - nastavení klávesových zkratek + + + Included presets cannot be deleted. + Zahrnutá přednastavení nelze smazat. + + + Are you sure you want to delete the preset: + Opravdu chcete smazat přednastavení: + + + ? + ? + + + Load from file... + Nahrát ze souboru... + + + Load + Nahrát + + + Shortcut Presets + Přednastavení pro klávesové zkratky + + + Delete + Smazat + + + Save As + Uložit jako + + + Search: + Hledat: + + + Preset: + Přednastavení: + + + Saving Shortcuts + Ukládají se klávesové zkratky + + + Setting Shortcuts + Nastavují se klávesové zkratky + + + Enter Preset Name + Zadejte název přednastavení + + + Preset Name: + Název přednastavení: + + + + ShortcutTree + + Menu Commands + Příkazy v nabídce + + + File + Soubor + + + Edit + Upravit + + + Scan & Cleanup + Skenovat a vyčistit + + + Level + Úroveň + + + Xsheet + Xsheet + + + Cells + Buňky + + + View + Pohled + + + Windows + Okno + + + Right-click Menu Commands + Příkazy v nabídce vyvolané klepnutím pravým tlačítkem myši + + + Tools + Nástroje + + + Tool Modifiers + Volby pro nástroje + + + Visualization + Znázornění + + + Playback Controls + Ovládání přehrávání + + + RGBA Channels + Kanály RGBA + + + Fill + Vyplnit plochy + + + Misc + Různé + + + Playback + Přehrávání + + + + ShortcutViewer + + %1 is already assigned to '%2' +Assign to '%3'? + %1 je již přiřazen k '%2'. +Přiřadit k '%3'? + + + Yes + Ano + + + No + Ne + + + + StackedMenuBar + + Files + Soubory + + + Scan + Sken + + + Settings + Nastavení + + + Processing + Zpracování + + + Edit + Upravit + + + Windows + Okna + + + Other Windows + Jiná okna + + + Customize + Přizpůsobit + + + View + Pohled + + + Tools + Nástroje + + + More Tools + Jiné nástroje + + + Checks + Ověření + + + Render + Zpracování + + + Draw + Kreslení + + + Xsheet + Xsheet + + + Subxsheet + Pod-Xsheet + + + Levels + Úrovně + + + Cells + Buňky + + + Reframe + Obnovit snímek + + + Step + Krok + + + Each + Jednotlivé buňky + + + File + Soubor + + + Scan && Cleanup + Skenovat a vyčistit + + + Level + Úroveň + + + Help + Nápověda + + + Failed to load menu %1 + Nepodařilo se nahrát nabídku %1 + + + Failed to add command %1 + Nepodařilo se přidat příkaz %1 + + + Cannot open menubar settings file %1 + Nepodařilo se otevřít soubor s nastavení pruhu s nabídkou %1 + + + Failed to create menubar + Nepodařilo se vytvořit pruh s nabídkou + + + + StartupPopup + + OpenToonz Startup + Spuštění OpenToonz + + + Choose Project + Vybrat projekt + + + Create a New Scene + Vytvořit nový záběr + + + Open Scene + Otevřít záběr + + + Scene Name: + Název záběru: + + + Width: + Šířka: + + + Height: + Výška: + + + DPI: + DPI: + + + X + X + + + Resolution: + Rozlišení: + + + Frame Rate: + Snímkování: + + + Add + Přidat + + + Remove + Odstranit + + + Show this at startup + Ukázat toto při spuštění + + + Create Scene + Vytvořit záběr + + + New Project... + Nový projekt... + + + Open Another Scene... + Otevřít další záběr... + + + pixel + obrazový bod (pixel) + + + cm + cm + + + mm + mm + + + inch + palec + + + field + pole + + + Save In: + Uložit v: + + + Camera Size: + Velikost kamery: + + + Units: + Jednotky: + + + No Recent Scenes + Žádné nedávné záběry + + + The name cannot be empty. + Název nemůže být prázdný. + + + The chosen file path is not valid. + Vybraná souborová cesta je neplatná. + + + The frame rate must be 1 or more. + Rychlost snímkování musí být 1 nebo více. + + + Preset name + Název přednastavení + + + Enter the name for %1 + Zadejte název pro %1 + + + Error : Preset Name is Invalid + Chyba: Název přednastavení je neplatný + + + The preset name must not use ','(comma). + Název přednastavení nesmí používat','(čárku). + + + Bad camera preset + Špatné přednastavení kamery + + + '%1' doesn't seem to be a well formed camera preset. +Possibly the preset file has been corrupted + Zdá se, že '%1' není dobře utvořené přednastavení kamery. +Možná byl soubor s přednastavením poškozen + + + Automatically Save Every + Uložit automaticky každých + + + Minutes + minut + + + The width must be greater than zero. + Šířka musí být větší než nula. + + + The height must be greater than zero. + Výška musí být větší než nula. + + + Current Project + + + + Recent Scenes [Project] + + + + The selected scene project '%1' is not in the Current Project list and may not open automatically. + + + + + SubSheetBar + + Sub-scene controls: +Click the arrow button to create a new sub-xsheet + Ovládání podzáběru: +Klepněte na tlačítko pro vytvoření nového pod-Xsheet + + + Disable Edit in Place + Zakázat úpravy v místě + + + Enable Edit in Place + Povolit úpravy v místě + + + Exit Sub-xsheet (1 Level Up) + Zavřít pod-xsheet (1 úroveň nahoru) + + + Exit Sub-xsheet (2 Levels Up) + Zavřít pod-xsheet (2 úrovně nahoru) + + + Exit Sub-xsheet (3 or More Levels Up) + Zavřít pod-xsheet (3 úrovně nahoru) + + + Enter Sub-xsheet + Upravit pod-xsheet + + + Current Scene + Nynější záběr + + + + T + + Nothing to replace: no cells or columns selected. + Es gibt nichts zum ersetzen: Es wurden weder Cells noch Spalten gewählt. + + + + TApp + + Error allocating memory: not enough memory. + Chyba při přidělování paměti: Není dost paměti. + + + It is not possible to save automatically an untitled scene. + Nelze uložit nepojmenovaný záběr. + + + + TaskSheet + + Name: + Název: + + + Status: + Stav: + + + Command Line: + Příkazový řádek: + + + Server: + Server: + + + Submitted By: + Odesílatel: + + + Submitted On: + Posláno: + + + Submission Date: + Datum odeslání: + + + Start Date: + Datum spuštění: + + + Completion Date: + Datum dokončení: + + + Duration: + Doba trvání: + + + Step Count: + Počet kroků: + + + Failed Steps: + Počet selhavších kroků: + + + Successfull Steps: + Počet úspěšných kroků: + + + Priority: + Přednost: + + + Output: + Výstup: + + + Frames per Chunk: + Snímků na kousek: + + + From: + Od snímku: + + + To: + Ke snímku: + + + Step: + Krok: + + + Shrink: + Zmenšit: + + + Multiple Rendering: + Vícenásobné zpracování: + + + None + Žádné + + + Fx Schematic Flows + Tok nákresu zvláštního efektu + + + Fx Schematic Terminal Nodes + Vrcholné uzly nákresu efektu + + + Dedicated CPUs: + Příslušné procesory (CPU): + + + Single + Jeden + + + Half + Polovina + + + All + Vše + + + Render Tile: + Dlaždice zpracování: + + + Large + Velká + + + Medium + Střední + + + Small + Malá + + + Visible Only + Jen viditelné + + + Overwrite + Přepsat + + + Dependencies: + Závislosti: + + + Remove -> + Odstranit -> + + + <- Add + <- Přidat + + + Multimedia: + Zpracovat více: + + + NoPaint + Přepsat jen NoPaint + + + Off + Vypnuto + + + Remove >> + Odstranit >> + + + << Add + << Přidat + + + Successful Steps: + Úspěšné kroky: + + + Suspended + Pozastaveno + + + Waiting + Čeká se + + + Running + Běží + + + Completed + Dokončeno + + + Failed + Selhalo + + + TaskUnknown + ÚlohaNeznámá + + + + TaskTreeModel + + Are you sure you want to remove ALL tasks? + Opravdu chcete smazat všechny úlohy? + + + Remove All + Odstranit vše + + + Cancel + Zrušit + + + + TaskTreeView + + Start + Spustit + + + Stop + Zastavit + + + Remove + Odstranit + + + + TasksViewer + + &Start + &Spustit + + + &Stop + &Zastavit + + + &Add Render Task + &Přidat úlohu zpracování + + + &Add Cleanup Task + &Přidat úlohu vyčištění + + + &Save Task List + &Uložit seznam úloh + + + &Save Task List As + &Uložit seznam úloh jako + + + &Load Task List + &Nahrát seznam úloh + + + &Remove + &Odstranit + + + Start + Spustit + + + Stop + Zastavit + + + Add Render + Přidat úlohu zpracování + + + Add Cleanup + Přidat úlohu vyčištění + + + Save + Uložit + + + Save As + Uložit jako + + + Load + Nahrát + + + Remove + Odstranit + + + + TestPanel + + Left: + Levý: + + + Right: + Pravý: + + + + TimeStretchPopup + + Time Stretch + Protáhnutí času + + + Selected Cells + Vybrané buňky + + + Selected Frame Range + Vybraný rozsah snímku + + + Whole Xsheet + Celý Xsheet + + + Stretch: + Protáhnutí: + + + Old Range: + Předchozí rozsah: + + + Stretch + Protáhnutí + + + Cancel + Zrušit + + + New Range: + Nový rozsah: + + + + TimelineWidget + + Recent Version + Nynější verze + + + Older Version + Stará verze + + + + TopBar + + Lock Rooms Tab + Uzamknout kartu prostoru + + + + TrackerPopup + + Tracking Settings + Nastavení sledování + + + Threshold: + Prahová hodnota: + + + Sensitivity: + Citlivost: + + + Variable Region Size + Proměnlivá velikost oblasti + + + Include Background + Zahrnout pozadí + + + Processing... + Zpracovává se... + + + Cancel + Zrušit + + + Track + Stopa + + + + VectorizerPopup + + Convert-to-Vector Settings + Nastavení převedení na vektory + + + The current selection is invalid. + Nynější výběr je neplatný. + + + Cannot convert to vector the current selection. + Vybranou oblast nelze převést na vektory. + + + Centerline + Středová čára + + + Outline + Obrys + + + Preserve Painted Areas + Zachovat vyplněné plochy + + + TLV Levels + Úrovně TLV + + + Convert + Převést + + + Add Border + Přidat okraj + + + Conversion in progress: + Probíhá převod: + + + Raster Levels + Úrovně rastru + + + Toggle Swatch Preview + Přepnout náhled na vzorek + + + Toggle Centerlines Check + Přepnout ověření středové čáry + + + Corners + Rohy + + + Start: + Začátek: + + + End: + Konec: + + + Full color non-AA images + Plná barva ne-AA obrázky + + + Enhanced ink recognition + Rozpoznání vylepšeného inkoustu + + + Save Settings + Uložit nastavení + + + Load Settings + Nahrát nastavení + + + Reset Settings + Obnovit výchozí nastavení + + + File could not be opened for read + Soubor se nepodařilo otevřít pro čtení + + + File could not be opened for write + Soubor se nepodařilo otevřít pro zápis + + + Save Vectorizer Parameters + Uložit parametry převodu na vektory + + + Load Vectorizer Parameters + Nahrát parametry převodu na vektory + + + Mode + Režim + + + Threshold + Práh + + + Accuracy + Přesnost + + + Despeckling + Odstranění poruch + + + Max Thickness + Největší tloušťka + + + Thickness Calibration + Porovnávání tloušťky + + + Adherence + Udržování + + + Angle + Úhel + + + Curve Radius + Poloměr křivky + + + Max Colors + Nejvíce barev + + + Transparent Color + Barva průhlednosti + + + Tone Threshold + Prahová hodnota barevného tónu + + + + VersionControl + + The version control configuration file is empty or wrongly defined. +Please refer to the user guide for details. + + + + The version control client application specified on the configuration file cannot be found. +Please refer to the user guide for details. + + + + The version control client application is not installed on your computer. +Subversion 1.5 or later is required. +Please refer to the user guide for details. + + + + The version control client application installed on your computer needs to be updated, otherwise some features may not be available. +Subversion 1.5 or later is required. +Please refer to the user guide for details. + + + + + ViewerHistogramPopup + + Viewer Histogram + Prohlížeč histogramu + + + + XsheetGUI::CellArea + + Click to select keyframe, drag to move it + Klepnout pro vybrání klíčového snímku, táhnout pro posunutí klíčového snímku + + + Click and drag to set the acceleration range + Klepnout a táhnout pro nastavení rozsahu zrychlení + + + Click and drag to set the deceleration range + Klepnout a táhnout pro nastavení rozsahu zpomalení + + + Set the cycle of previous keyframes + Nastavit cyklus předchozích klíčových snímků + + + Click and drag to move the selection + Klepnout a táhnout pro posunutí vybrané oblasti + + + Click and drag to play + Klepnout a táhnout pro přehrávání vybrané oblasti + + + Click and drag to repeat selected cells + Klepnout a táhnout pro opakování rvybraných buněk + + + Open Memo + Otevřít memo + + + Delete Memo + Smazat memo + + + Reframe + Obnovit snímek + + + Step + Krok + + + Each + Jednotlivé buňky + + + Replace + Nahradit + + + Edit Cell Numbers + Upravit čísla buněk + + + Replace Level + Nahradit úroveň + + + Replace with + Nahradit s + + + Paste Special + Vložit zvláštní + + + Edit Image + Upravit obrázek + + + + XsheetGUI::ColumnArea + + Click to select camera + Klepnout pro vybrání kamery + + + Camera Stand Toggle + Přepnout stav kamery + + + Render Toggle + Přepnout pohled na zpracování + + + Lock Toggle + Přepnout zámek + + + Click to play the soundtrack back + Klepnout pro přehrání zvukového doprovodu + + + Set the volume of the soundtrack + Nastavit hlasitost zvukového doprovodu + + + Click to select the type of motion path + Klepnout pro vybrání typu cesty pohybu + + + Click to select column, drag to move it + Klepnout pro vybrání sloupce, táhnout pro posunutí sloupce + + + Click to unlink column + Klepnout pro odpojení sloupce + + + Click and drag to link column + Klepnout a táhnout pro spojení sloupce + + + Master column of linked columns + Hlavní sloupec spojených sloupců + + + &Subsampling 1 + &Podvzorkování 1 + + + &Subsampling 2 + &Podvzorkování 2 + + + &Subsampling 3 + &Podvzorkování 3 + + + &Subsampling 4 + &Podvzorkování 4 + + + Preview Visibility Toggle + Přepnout viditelnost náhledu + + + Camera Stand Visibility Toggle + Přepnout viditelnost stavu kamery + + + Alt + Click to Toggle Thumbnail + Alt+klepnutí pro přepnutí náhledu + + + Reframe + Obnovit snímek + + + Subsampling + Podvzorkování + + + Click to select column + Klepnout pro vybrání sloupce + + + Click to select column, drag to move it, double-click to edit + Klepnout pro vybrání sloupce, táhnout pro jeho posunutí, dvojité klepnutí pro upravení + + + Click to select column, double-click to edit + Klepnout pro vybrání sloupce, dvojité klepnutí pro upravení + + + Additional column settings + Dodatečná nastavení sloupce + + + &Insert Before + &Vložit před + + + &Insert After + &Vložit po + + + &Paste Insert Before + &Vložit/Přidat před + + + &Paste Insert After + &Vložit/Přidat po + + + &Insert Below + &Vložit pod + + + &Insert Above + &Vložit nad + + + &Paste Insert Below + &Vložit/Přidat pod + + + &Paste Insert Above + &Vložit/Přidat nad + + + + XsheetGUI::ColumnTransparencyPopup + + Filter: + Filtr: + + + Opacity: + Neprůhlednost: + + + + XsheetGUI::NoteArea + + Frame + Snímek + + + Sec Frame + Sekundy-buňky + + + 6sec Sheet + 6 sekund Xsheet + + + 3sec Sheet + 3 sekund Xsheet + + + Toggle Xsheet/Timeline + Přepnout XSheet/Časová osa + + + Add New Memo + Přidat nové memo + + + Previous Memo + Předchozí memo + + + Next Memo + Další memo + + + + XsheetGUI::NotePopup + + Memo + Memo + + + Post + Poslat + + + Discard + Zahodit + + + + XsheetGUI::RowArea + + Onion Skin Toggle + Přepnout cibulový vzhled + + + Current Frame + Nynější snímek + + + Relative Onion Skin Toggle + Přepnout relativní cibulový vzhled + + + Fixed Onion Skin Toggle + Přepnout pevný cibulový vzhled + + + Playback Start Marker + Přehrát značku pro spuštění + + + Playback End Marker + Přehrát značku pro zastavení + + + Set Start Marker + Nastavit značku pro spuštění + + + Set Stop Marker + Nastavit značku pro zastavení + + + Remove Markers + Odstranit značky + + + Curren Frame + Nynější snímek + + + Preview This + Jen náhled na tento snímek + + + Double Click to Toggle Onion Skin + Dvakrát klepnout pro přepnutí cibulového vzhledu + + + Pinned Center : Col%1%2 + + + + Set Auto Markers + Nastavit automatické značky + + + Click to Reset Shift & Trace Markers to Neighbor Frames +Hold F2 Key on the Viewer to Show This Frame Only + + + + Click to Hide This Frame from Shift & Trace +Hold F1 Key on the Viewer to Show This Frame Only + + + + Click to Hide This Frame from Shift & Trace +Hold F3 Key on the Viewer to Show This Frame Only + + + + Click to Move Shift & Trace Marker + + + + + XsheetGUI::SoundColumnPopup + + Volume: + Hlasitost: + + + + XsheetGUI::XSheetToolbar + + Customize XSheet Toolbar + Přizpůsobit nástrojový pruh XSheet + + + + XsheetViewer + + Untitled + Bez názvu + + + Scene: + Záběr: + + + Frames + Snímky + + + (Sub) + (Sub-) + + + Level: + Úroveň: + + + Selected: + Vybráno: + + + frame : + snímek: + + + frames * + snímky * + + + column + sloupec + + + columns + sloupce + + + :: Project: + + + + Frame + + + + diff --git a/toonz/sources/translations/czech/toonzlib.ts b/toonz/sources/translations/czech/toonzlib.ts new file mode 100644 index 0000000..655d87c --- /dev/null +++ b/toonz/sources/translations/czech/toonzlib.ts @@ -0,0 +1,894 @@ + + + + + Preferences + + + Retas Level Format + Formát úrovně RETAS + + + + Adobe Photoshop + Adobe Photoshop + + + + PNG + PNG + + + + QObject + + + No restrictions for uncompressed avi video + Žádná omezení pro nezabalený obrazový záznam AVI + + + + It is not possible to communicate with the codec. + Probably the codec cannot work correctly. + Není možné komunikovat s kodekem. +Pravděpodobně kodek nemůže pracovat řádně. + + + + video width must be a multiple of %1 + Šířka obrazu musí být násobkem %1 + + + + video length must be a multiple of %1 + Délka obrazu musí být násobkem %1 + + + + No restrictions for this codec + Žádná omezení pro tento kodek + + + + Resolution restrictions: + Omezení pro rozlišení: + + + + New Camera %1 + Nová kamera %1 + + + + New Pegbar %1 + Nový pruh na kolíky %1 + + + + Set Active Camera %1 > %2 + Nastavit činnou kameru %1 > %2 + + + + Remove Spline %1 + Odstranit křivku (spline) %1 + + + + New Motion Path %1 + Nová cesta pohybu %1 + + + + Link Motion Path %1 > %2 + Spojit cestu pohybu %1 > %2 + + + + Remove Object %1 + Odstranit předmět %1 + + + + Remove Column + Odstranit sloupec + + + + Load into Current Palette > %1 + Nahrát do nynější palety > %1 + + + + Replace with Current Palette > %1 + Nahradit nynější paletou > %1 + + + + Delete Studio Palette : %1 + Smazat studiovou paletu: %1 + + + + Create Studio Palette : %1 + Vytvořit studiovou paletu: %1 + + + + Delete Studio Palette Folder : %1 + Smazat složku se studiovou paletou: %1 + + + + Create Studio Palette Folder : %1 + Vytvořit složku se studiovou paletou: %1 + + + + Can't undo rename palette + Přejmenování palety nelze vrátit zpět + + + + Can't undo move palette + Přesunutí palety nelze vrátit zpět + + + + Can't redo rename palette + Nelze zopakovat přejmenování palety + + + + Can't redo move palette + Nelze zopakovat přesunutí palety + + + + Rename Studio Palette : %1 > %2 + Přejmenovat studiovou paletu: %1 > %2 + + + + Move Studio Palette Folder : %1 : %2 > %3 + Přesunout složku se studiovou paletou: %1 : %2 > %3 + + + + Arrange Styles in Palette %1 + Uspořádat styly v paletě: %1 + + + + Create Style#%1 in Palette %2 + Vytvořit styl #%1 v paletě %2 + + + + Add Style to Palette %1 + Přidat styl do palety %1 + + + + Add Page %1 to Palette %2 + Přidat stranu %1 do palety %2 + + + + Delete Page %1 from Palette %2 + Smazat stranu %1 z palety %2 + + + + Load Color Model %1 to Palette %2 + Nahrát barevný model %1 do palety %2 + + + + color model + Barevný model + + + + Move Page + Přesunout stranu + + + + Rename Page %1 > %2 + Přejmenovat stranu %1 > %2 + + + + Rename Style#%1 in Palette%2 : %3 > %4 + Přejmenovat styl #%1 v paletě %2 : %3 > %4 + + + + Set Picked Position of Style#%1 in Palette%2 : %3,%4 + Nastavit zvolenou polohu stylu #%1 v paletě %2 : %3,%4 + + + + Update Colors by Using Picked Positions in Palette %1 + Obnovit barvy použitím vybraných poloh v paletě %1 + + + + Add Fx : + Přidat efekt: + + + + Insert Fx : + Vložit efekt: + + + + + Create Linked Fx : %1 + Vytvořit propojený efekt: %1 + + + + Replace Fx : + Nahradit efekt: %1 + + + + Unlink Fx : %1 - - %2 + Zrušit propojení efektu: %1 - - %2 + + + + Make Macro Fx : %1 + Vytvořit makro efekt: %1 + + + + Explode Macro Fx : %1 + Rozbalit makro efekt: %1 + + + + Create Output Fx + Vytvořit výstupní efekt + + + + Connect to Xsheet : + Spojit s Xsheet: + + + + Disconnect from Xsheet : + Odpojit od Xsheet: + + + + Delete Link + Smazat spojení + + + + Delete Fx Node : %1 + Smazat uzel efektu: %1 + + + + Paste Fx : + Vložit efekt: + + + + Disconnect Fx + Odpojit od efekt + + + + Connect Fx : %1 - %2 + Spojit efekt: %1 - %2 + + + + Rename Fx : %1 > %2 + Přejmenovat efekt: %1 - %2 + + + + Group Fx + Seskupit efekt + + + + Ungroup Fx + Zrušit seskupení efektu + + + + Rename Group : %1 > %2 + Přejmenovat skupinu: %1 > %2 + + + + Set Keyframe + Nastavit klíčový snímek + + + + Remove Keyframe + Odstranit klíčový snímek + + + + Cycle + Koloběh + + + + Toggle Autopaint Option Palette : %1 Style#%2 + Přepnout volbu pro automatické malování Paleta: %1 Styl #%2 + + + + + None + Žádný + + + + Red + Červená + + + + Green + Zelená + + + + Blue + Modrá + + + + DarkYellow + Tmavá žlutá + + + + DarkCyan + Tmavá modrozelená + + + + DarkMagenta + Tmavá červenorudá + + + + The autocentering failed on the current drawing. + Automatické vystředění při nynější kresbě selhalo. + + + + + Move + Přesunout + + + + Edit Rotation + Upravit otočení + + + + Move E/W + Posunout V/Z + + + + Move N/S + Posunout S/J + + + + Move Z + Posunout Z + + + + Edit Stack Order + Upravit pořadí zásobníku + + + + Edit Scale W + Změnit velikost šířky + + + + Edit Scale H + Změnit velikost výšky + + + + Edit Scale + Upravit měřítko + + + + Edit PosPath + Upravit cestu polohy + + + + Edit Shear X + Upravit střih X + + + + Edit Shear Y + Upravit střih Y + + + + %1 %2 Frame : %3 + %1 %2 Snímek: %3 + + + + First argument must be a scene : %1 + První argument musí být záběr: %1 + + + + Can't render empty scene + Nelze zpracovat prázdný záběr + + + + + Vectorization failed + Vektorizace selhala + + + + Argument '%1' does not look like a FrameId + Argument '%1' nevypadá jako ID snímku + + + + Bad argument (%1): should be an Image (not empty) + Špatný argument (%1): měl by to být obrázek (ne prázdný) + + + + Argument doesn't look like a file path : %1 + Argument nevypadá jako souborová cesta: %1 + + + + %1-%2 + %1-%2 + + + + %1 + %1 + + + + Expected %1 argument(s) in %2, got %3 + Očekáván(o) %1 argument(ů) v %2, obdrženo %3 + + + + %1 is not a valid color (valid color names are 'red', 'transparent', '#FF8800', ecc.) + + + + + Can't save + Nelze uložit + + + + Xsheet + Xsheet + + + + Timeline + Časová osa + + + + Brightness + Jas + + + + Contrast + Kontrast + + + + HRange + Vodorovný rozsah + + + + Line Width + Tloušťka čáry + + + + ColorThres + Prahová hodnota barvy + + + + WhiteThres + Prahová hodnota bílé + + + + Set Keyframe %1 at frame %2 + Nastavit klíčový snímek: %1 snímek %2 + + + + Remove Keyframe %1 at frame %2 + Odstranit klíčový snímek: %1 snímek %2 + + + + Move Center %1 Frame %2 + Přesunout střed %1 snímek %2 + + + + TScriptBinding::CenterlineVectorizer + + + Can't vectorize a %1 level + Nelze vektorizovat úroveň %1 + + + + Can't vectorize a level with no frames + Nelze vektorizovat úroveň bez snímků + + + + Can't vectorize a %1 image + Nelze vektorizovat obrázek %1 + + + + Bad argument (%1): should be an Image or a Level + Špatný argument (%1): měl by to být obrázek nebo úroveň + + + + TScriptBinding::FilePath + + + "%1" + "%1" + + + + can't concatenate an absolute path : %1 + nemůže zřetězit absolutní cestu: %1 + + + + %1 is not a directory + %1 není adresář + + + + can't read directory %1 + Nelze přečíst adresář %1 + + + + TScriptBinding::Image + + + File %1 doesn't exist + Soubor %1 neexistuje + + + + Loaded first frame of %1 + Nahrán první snímek z %1 + + + + Unexpected error while reading image + Neočekávaná chyba při nahrávání obrázku + + + + Unrecognized file type : + Nerozpoznaný typ souboru: + + + + Can't save a %1 image to this file type : %2 + Nelze uložit %1 obrázek do tohoto typu souboru: %2 + + + + Unexpected error while writing image + Neočekávaná chyba při zapisování obrázku + + + + TScriptBinding::ImageBuilder + + + Bad argument (%1): should be 'Raster' or ToonzRaster' + Špatný argument (%1): má to být rastr nebo ToonzRaster + + + + ImageBuilder(%1 image) + ImageBuilder (%1 obrázek) + + + + + %1 : %2 + %1: %2 + + + + Bad argument (%1): should be a Transformation + Špatný argument (%1): má to být proměna + + + + TScriptBinding::Level + + + %1 frames + %1 snímků + + + + Bad argument (%1). It should be FilePath or string + Špatný argument (%1): má to být souborová cesta nebo řetězec + + + + Exception loading level (%1) + Výjimka při nahrávání úrovně (%1) + + + + File %1 doesn't exist + Soubor %1 neexistuje + + + + File %1 is unsupported + Soubor %1 není podporován + + + + Exception reading %1 + Výjimka při čtení %1 + + + + Can't save an empty level + Nelze uložit prázdnou úroveň + + + + Unrecognized file type : + Nerozpoznaný typ souboru: + + + + Can't save a %1 level to this file type : %2 + Nelze uložit %1 úroveň do tohoto typu souboru: %2 + + + + Exception writing %1 + Výjimka při zápisu %1 + + + + frame index (%1) must be a number + Číslo snímku (%1) musí být číslo + + + + frame index (%1) is out of range (0-%2) + Číslo snímku (%1) je mimo rozsah (0-%2) + + + + second argument (%1) is not an image + druhýý argument (%1) není obrázkem + + + + can not insert a %1 image into a level + nelze vložit %1 obrázek do úrovně + + + + can not insert a %1 image to a %2 level + nelze vložit %1 obrázek do %2 úrovně + + + + TScriptBinding::OutlineVectorizer + + + Can't vectorize a %1 level + Nelze vektorizovat úroveň %1 + + + + Can't vectorize a level with no frames + Nelze vektorizovat úroveň bez snímků + + + + Can't vectorize a %1 image + Nelze vektorizovat obrázek %1 + + + + Bad argument (%1): should be an Image or a Level + Špatný argument (%1): měl by to být obrázek nebo úroveň + + + + Invalid color : + Neplatná barva: + + + + TScriptBinding::Rasterizer + + + Expected a vector image: %1 + Očekáván vektorový obrázek: %1 + + + + Expected a vector level: %1 + Očekávána vektorová úroveň: %1 + + + + Argument must be a vector level or image : + Argument musí být vektorová úroveň nebo obrázek: + + + + %1 has no palette + %1 nemá žádnou paletu + + + + TScriptBinding::Scene + + + File %1 doesn't exist + Soubor %1 neexistuje + + + + Exception reading %1 + Výjimka při čtení %1 + + + + Exception writing %1 + Výjimka při zápisu %1 + + + + Bad level type (%1): must be Vector,Raster or ToonzRaster + Špatný argument (%1): musí to být vektor, rastr nebo ToonzRaster + + + + + Can't add the level: name(%1) is already used + Nelze přidat úroveň: název (%1) se již používá + + + + Can't load this kind of file as a level : %1 + Nelze nahrát tento druh souboru jako úroveň: %1 + + + + Could not load level %1 + Nepodařilo se nahrát úroveň %1 + + + + Level is not included in the scene : %1 + Úroveň není zahrnuta v záběru: %1 + + + + %1 : Expected a Level instance or a level name + %1: Očekávána instance úrovně nebo název úrovně + + + + Level '%1' is not included in the scene + Úroveň '%1' není zahrnuta v záběru + + + + TScriptBinding::ToonzRasterConverter + + + Can't convert a %1 level + Nelze převést úroveň %1 + + + + Can't convert a level with no frames + Nelze převést úroveň bez snímků + + + + Can't convert a %1 image + Nelze převést obrázek %1 + + + + Bad argument (%1): should be a raster Level or a raster Image + Špatný argument (%1): má to být rastrová úroveň nebo rastrový obrázek + + + + TScriptBinding::Transform + + + Identity + Matice totožnosti + + + + + Translation(%1,%2) + Překlad (%1,%2) + + + + Rotation(%1) + Otočení (%1) + + + + Scale(%1%) + Měřítko (%1%) + + + + Scale(%1%, %2%) + Měřítko (%1%, %2%) + + + + Transform(%1, %2, %3; %4, %5, %6) + Proměna (%1, %2, %3; %4, %5, %6) + + + diff --git a/toonz/sources/translations/czech/toonzqt.ts b/toonz/sources/translations/czech/toonzqt.ts new file mode 100644 index 0000000..fcc217f --- /dev/null +++ b/toonz/sources/translations/czech/toonzqt.ts @@ -0,0 +1,3109 @@ + + + + + AddFxContextMenu + + + Insert FX + Vložit efekt + + + + Add FX + Přidat efekt + + + + Replace FX + Nahradit efekt + + + + Insert + Vložit + + + + Add + Přidat + + + + Replace + Nahradit + + + + AddWordButton + + + New + Nový + + + + + Character + Znak + + + + + Part + Část + + + + + Suffix + Přípona + + + + Add New Word for %1 + Přidat nové slovo pro %1 + + + + AdjustPaletteDialog + + + Adjust Current Level to This Palette + Přizpůsobit nynější úroveň této paletě + + + + Tolerance + Tolerance + + + + Apply + Použít + + + + Cancel + Zrušit + + + + CameraPainter + + + &Reset Center + &Obnovit výchozí střed + + + + &Activate + &Zapnout + + + + CameraSettingsWidget + + + + + Pixels + Pixely + + + + DPI + DPI + + + + x + x + + + + Use Current Level Settings + Použít nastavení nynější úrovně + + + + Add + Přidat + + + + Remove + Odstranit + + + + Force Squared Pixel + Vynutit čtvercové obrazové body + + + + A/R + + + + + + <custom> + <vlastní> + + + + Bad camera preset + Špatné přednastavení kamery + + + + '%1' doesn't seem a well formed camera preset. +Possibly the preset file has been corrupted + Zdá se, že '%1' není dobře udělané přednastavení kamery. +Možná byl soubor s přednastavením poškozen + + + + Preset name + Název přednastavení + + + + Enter the name for %1 + Zadejte název pro %1 + + + + Error : Preset Name is Invalid + Chyba: Název přednastavení je neplatný + + + + The preset name must not use ','(comma). + Název přednastavení nesmí používat','(čárku). + + + + ChannelHisto + + + Red + Červená + + + + Green + Zelená + + + + Blue + Modrá + + + + Alpha + Alfa + + + + RGBA + RGBA + + + + CleanupCameraSettingsWidget + + + N/S + S/J + + + + E/W + V/Z + + + + ColumnPainter + + + &Reset Center + &Obnovit výchozí střed + + + + ComboHistoRGBLabel + + + R:%1 G:%2 B:%3 + Č:%1 Z:%2 M:%3 + + + + ComboHistogram + + + Picked Color + Sebraná barva + + + + Average Color (Ctrl + Drag) + Průměrná barva (Ctrl+tažení) + + + + X: + X: + + + + Y: + Y: + + + + DVGui + + OK + OK + + + Cancel + Zrušit + + + + DVGui::CleanupColorField + + + Brightness: + Jas: + + + + Contrast: + Kontrast: + + + + Color Thres + Prahová hodnota barvy + + + + White Thres + Prahová hodnota světlosti + + + + H Range + Oblast barevného odstínu + + + + Line Width + Tloušťka čáry + + + + DVGui::ColorField + + + R: + Č: + + + + G: + Z: + + + + B: + M: + + + + A: + A: + + + + DVGui::DvTextEdit + + + Bold + Tučné + + + + Italic + Kurzíva + + + + Underline + Podtržení + + + + Align Left + Zarovnat vlevo + + + + Align Center + Zarovnat na střed + + + + Align Right + Zarovnat vpravo + + + + DVGui::FileField + + + ... + ... + + + + DVGui::LineEdit + + + A file name cannot contains any of the following chracters: /\:*?"<>|. + Název souboru nesmí obsahovat následující znaky: /\:*?"<>|. + + + + + DVGui::ProgressDialog + + + OpenToonz + OpenToonz + + + + DVGui::RadioButtonDialog + + + OpenToonz + OpenToonz + + + + DVGui::StyleIndexLineEdit + + + + current + Nynější + + + + DVGui::ToneCurveField + + + Channel: + Kanál: + + + + DVGui::ValidatedChoiceDialog + + + Apply + Použít + + + + Apply to All + Použít na vše + + + + Cancel + Zrušit + + + + EaseInOutSegmentPage + + + Ease In: + + + + + Ease Out: + + + + + EasyInputArea + + + Warning + Varování + + + + %1 is already registered + %1 je již zaregistrován + + + + FileSegmentPage + + + File Path: + Cesta k souboru: + + + + Column: + Sloupec: + + + + Unit: + Jednotka: + + + + FlipConsole + + + + + + FPS + FPS + + + + Save + Uložit + + + + Snapshot + Snímek obrazovky + + + + Define Sub-camera + Určit podkameru + + + + Define Loading Box + Určit nahrávací box + + + + Use Loading Box + Použít nahrávací box + + + + Background Colors + Barvy pozadí + + + + Framerate + Počet snímků + + + + Playback Controls + Ovládání přehrávání + + + + Color Channels + Barevné kanály + + + + Set Key + Nastavit klíčový snímek + + + + Histogram + Histogram + + + + Display Areas as Filled + Zobrazit plochy jako vyplněné + + + + &Save Images + &Uložit obrázky + + + + &Snapshot + &Snímek obrazovky + + + + &Compare to Snapshot + &Porovnat se snímkem obrazovky + + + + &Define Sub-camera + &Určit podkameru + + + + &Define Loading Box + &Určit nahrávací box + + + + &Use Loading Box + &Použít nahrávací box + + + + &White Background + &Bílé pozadí + + + + &Black Background + Č&erné pozadí + + + + &Checkered Background + Ša&chovnicové pozadí + + + + &First Frame + &První snímek + + + + &Previous Frame + &Předchozí snímek + + + + Pause + Pozastavit + + + + Play + Přehrát + + + + Loop + Smyčka + + + + &Next frame + &Další snímek + + + + &Last Frame + &Poslední snímek + + + + + Red Channel + Červený kanál + + + + Red Channel in Grayscale + Červený kanál v odstínech šedi + + + + + Green Channel + Zelený kanál + + + + Green Channel in Grayscale + Zelený kanál v odstínech šedi + + + + + Blue Channel + Modrý kanál + + + + Blue Channel in Grayscale + Modrý kanál v odstínech šedi + + + + Alpha Channel + Alfa kanál + + + + &Soundtrack + &Zvukový doprovod + + + + &Histogram + &Histogram + + + + &Locator + + + + + &Display Areas as Filled + &Zobrazit plochy jako vyplněné + + + + FPS + FPS + + + + Set the current frame + Nastavit nynější snímek + + + + Drag to play the animation + Táhnout pro přehrání animace + + + + Set the playback frame rate + Nastavit snímkování přehrávání + + + + FontParamField + + + Style: + Styl: + + + + Size: + Velikost: + + + + FrameNavigator + + + Previous Frame + Předchozí snímek + + + + Next Frame + Další snímek + + + + FunctionExpressionSegmentPage + + + Unit: + Jednotka: + + + + Expression: + Výraz: + + + + + There is a circular reference in the definition of the interpolation. + Ve vymezení interpolace je kruhový odkaz. + + + + FunctionPanel + + + Function Curves + Křivky funkce + + + + Link Handles + Propojit úchopy + + + + Unlink Handles + Zrušit propojení úchopů + + + + Reset Handles + Obnovit výchozí úchopy + + + + Delete + Smazat + + + + Set Key + Nastavit klíčový snímek + + + + Activate Cycle + Zapnout koloběh + + + + Deactivate Cycle + Vypnout koloběh + + + + Linear Interpolation + Lineární interpolace + + + + Speed In / Speed Out Interpolation + + + + + Ease In / Ease Out Interpolation + + + + + Ease In / Ease Out (%) Interpolation + + + + + Exponential Interpolation + Exponenciální interpolace + + + + Expression Interpolation + Výrazová interpolace + + + + File Interpolation + Souborová interpolace + + + + Constant Interpolation + Stálá interpolace + + + + Similar Shape Interpolation + Interpolace skrze podobné tvary + + + + Fit Selection + Přizpůsobit výběr + + + + Fit + Přizpůsobit + + + + Step 1 + Krok 1 + + + + Step 2 + Krok 2 + + + + Step 3 + Krok 3 + + + + Step 4 + Krok 4 + + + + Smooth + Vyhladit + + + + Frame Based + Založeno na snímku + + + + Curve Shape + Tvar křivky + + + + FunctionSegmentViewer + + + + Linear + Lineární + + + + Speed In / Speed Out + + + + + Ease In / Ease Out + Ease In/Ease Out + + + + Ease In / Ease Out % + + + + + Exponential + Exponenciální + + + + Expression + Výraz + + + + + File + Soubor + + + + Constant + Stálý + + + + Similar Shape + Podobný tvar + + + + Interpolation: + Interpolace: + + + + Apply + Použít + + + + From + Od + + + + To + Do + + + + Step + Krok + + + + + < + < + + + + + > + > + + + + Speed + Rychlost + + + + Ease + + + + + Ease% + + + + + Expo + Expo + + + + Expr + Výraz + + + + Const + Stálý + + + + Similar + Podobný + + + + ???? + ???? + + + + FunctionSelection + + + There is a circular reference in the definition of the interpolation. + Ve vymezení interpolace je kruhový odkaz. + + + + FunctionSheet + + + Function Editor + Editor funkce + + + + FunctionSheetCellViewer + + + Delete Key + Smazat klíčový snímek + + + + Set Key + Nastavit klíčový snímek + + + + Linear Interpolation + Lineární interpolace + + + + Speed In / Speed Out Interpolation + + + + + Ease In / Ease Out Interpolation + + + + + Ease In / Ease Out (%) Interpolation + + + + + Exponential Interpolation + Exponenciální interpolace + + + + Expression Interpolation + Výrazová interpolace + + + + File Interpolation + Souborová interpolace + + + + Constant Interpolation + Stálá interpolace + + + + Step 1 + Krok 1 + + + + Step 2 + Krok 2 + + + + Step 3 + Krok 3 + + + + Step 4 + Krok 4 + + + + Activate Cycle + Zapnout koloběh + + + + Deactivate Cycle + Vypnout koloběh + + + + Show Inbetween Values + + + + + Hide Inbetween Values + + + + + Change Interpolation + + + + + Change Step + + + + + FunctionToolbar + + + Value + Hodnota + + + + &Open Function Curve Editor + &Otevřít editor funkce křivky + + + + FunctionTreeModel + + + Stage + Fáze + + + + FX + Efekt + + + + Plastic Skeleton + Tvárná kostra + + + + FunctionTreeView + + + Table + Tabulka + + + + Save Curve + Uložit křivku + + + + Load Curve + Nahrát křivku (parametr efektu) + + + + Export Data + Vyvést data + + + + + Show Animated Only + Ukázat jen kreslené + + + + + Show All + Ukázat vše + + + + FxColumnPainter + + + &Disconnect from Xsheet + &Odpojit od Xsheet + + + + &Connect to Xsheet + &Spojit s Xsheet + + + + &Paste Add + &Vložit/Přidat + + + + &Preview + &Náhled + + + + &Uncache Fx + &Smazat efekt z vyrovnávací paměti + + + + &Cache FX + &Vytvořit vyrovnávací paměť pro efekt + + + + FxOutputPainter + + + Output + Výstup + + + + &Delete + S&mazat + + + + &Activate + &Zapnout + + + + FxPainter + + + &Open Group + &Otevřít skupinu + + + + &Paste Replace + &Vložit/Nahradit + + + + &Paste Add + &Vložit/Přidat + + + + &Delete + S&mazat + + + + &Disconnect from Xsheet + &Odpojit od Xsheet + + + + &Connect to Xsheet + &Spojit s Xsheet + + + + &Create Linked FX + &Vytvořit propojený efekt + + + + &Unlink + &Zrušit propojení + + + + &Make Macro FX + &Vytvořit makro efekt + + + + &Explode Macro FX + &Rozbalit makro efekt + + + + &Open Macro FX + &Otevřít makro efekt + + + + &Save As Preset... + &Uložit jako přednastavení + + + + &Preview + &Náhled + + + + &Uncache FX + &Smazat efekt z vyrovnávací paměti + + + + &Cache FX + &Vytvořit vyrovnávací paměť pro efekt + + + + FxPalettePainter + + + &Disconnect from Xsheet + &Odpojit od Xsheet + + + + &Connect to Xsheet + &Spojit s Xsheet + + + + &Preview + &Náhled + + + + FxSchematicLink + + + &Delete + S&mazat + + + + &Paste Insert + &Vložit/Přidat + + + + FxSchematicOutputNode + + + Output + Výstup + + + + FxSchematicPort + + + &Disconnect from Xsheet + &Odpojit od Xsheet + + + + &Connect to Xsheet + &Spojit s Xsheet + + + + FxSchematicScene + + + Cannot Paste Insert a selection of unconnected FX nodes. +Select FX nodes and related links before copying or cutting the selection you want to paste. + Nelze vložit/přidat výběr nespojených efektových uzlů. +Vyberte uzly efektů a příbuzné odkazy, jež chcete vložit, před kopírováním nebo vyjmutím výběru. + + + + Cannot Paste Add a selection of unconnected FX nodes. +Select FX nodes and related links before copying or cutting the selection you want to paste. + Nelze vložit/přidat výběr nespojených efektových uzlů. +Vyberte uzly efektů a příbuzné odkazy, jež chcete vložit, před kopírováním nebo vyjmutím výběru. + + + + Cannot Paste Replace a selection of unconnected FX nodes. +Select FX nodes and related links before copying or cutting the selection you want to paste. + Nelze vložit/nahradit výběr nespojených efektových uzlů. +Vyberte uzly efektů a příbuzné odkazy, jež chcete vložit, před kopírováním nebo vyjmutím výběru. + + + + FxSchematicXSheetNode + + + XSheet + XSheet + + + + FxSettings + + + &Camera Preview + &Náhled kamery + + + + &Preview + &Náhled + + + + &White Background + &Bílé pozadí + + + + &Black Background + Č&erné pozadí + + + + &Checkered Background + Ša&chovnicové pozadí + + + + Fx Settings + Nastavení efektu + + + + : + : + + + + FxXSheetPainter + + + XSheet + Xsheet + + + + &Paste Add + &Vložit/Přidat + + + + &Preview + &Náhled + + + + GroupPainter + + + &Open Group + &Otevřít skupinu + + + + Histogram + + + Logarithmic Scale + Logaritmická stupnice + + + + Value + Hodnota + + + + RGB + RGB + + + + Red + Červená + + + + Green + Zelená + + + + Blue + Modrá + + + + Alpha + Alfa + + + + InfoViewer + + + File Info + Informace o souboru + + + + KeyframeNavigator + + + Previous Key + Předchozí klíčový snímek + + + + + + Set Key + Nastavit klíčový snímek + + + + Next Key + Další klíčový snímek + + + + MyPaintBrushStyleChooserPage + + Plain color + Normální barva + + + + NewWordDialog + + + OK + OK + + + + Cancel + Zrušit + + + + Enter new word + Zadat nové slovo + + + + PaletteViewer + + + + + &Save Palette As + &Uložit paletu jako + + + + + + &Save Palette + &Uložit paletu + + + + + Lock Palette + Uzamknout paletu + + + + &Lock Palette + &Uzamknout paletu + + + + Options + Volby + + + + &Small Thumbnails View + &Malé náhledy + + + + &Medium Thumbnails View + &Střední náhledy + + + + &Large Thumbnails View + &Velké náhledy + + + + &List View + &Pohled se seznamem + + + + Style Name + Název stylu + + + + StudioPalette Name + Název studiové palety + + + + Both Names + Oba názvy + + + + &New Page + &Nová strana + + + + + &New Style + &Nový styl + + + + + &Move Palette + &Posunout paletu + + + + &Palette Gizmo + Upravit &paletu + + + + New Page + Nová strana + + + + Delete Page + Smazat stranu + + + + Overwrite + Přepsat + + + + Don't Overwrite + Nepřepisovat + + + + Palette + Paleta + + + + Level Palette: + Paleta úrovně: + + + + Cleanup Palette + Vyčistit paletu + + + + Studio Palette + Studiová paleta + + + + (Color Model: + (Barevný model: + + + + ) + ) + + + + PaletteViewerGUI::PageViewer + + + - No Styles - + - Žádné styly - + + + + Name Editor + Editor názvu stylu + + + + New Style + Nový styl + + + + New Page + Nová strana + + + + PalettesScanPopup + + + Search for Palettes + Hledat palety + + + + Ok + OK + + + + Cancel + Zrušit + + + + <files> + <soubory> + + + + ParamViewer + + + Swatch Viewer + Pohled na vzor + + + + ParamsPageSet + + + Fx Help + Nápověda + + + + PegbarPainter + + + &Reset Center + &Obnovit výchozí střed + + + + PlaneViewer + + + Reset View + + + + + Fit To Window + + + + + PointParamField + + + X: + X: + + + + Y: + Y: + + + + QObject + + + Failed to compile m_textureShader.vert. + gl + Nepodařilo se přeložit m_textureShader.vert. + + + + Failed to compile m_shader.frag. + gl + Nepodařilo se přeložit m_shader.frag. + + + + Failed to add m_shader.vert. + gl + Nepodařilo se přidat m_shader.vert. + + + + Failed to add m_shader.frag. + gl + Nepodařilo se přidat m_shader.frag. + + + + Failed to link simple shader: %1 + gl + Nepodařilo se spojit jednoduchý stínovač: %1 + + + + + Failed to get attribute location of %1 + gl + Nepodařilo se získat umístění vlastnosti %1 + + + + + + Failed to get uniform location of %1 + gl + Nepodařilo se získat jednotné umístění %1 + + + + Failed to Open 3DLUT File. + Nepodařilo se otevřít soubor 3DLUT. + + + + Failed to Load 3DLUT File. +It should start with "3DMESH" keyword. + Nepodařilo se nahrát soubor 3DLUT. +Měl by začít s klíčovým slovem "3DMESH". + + + + Failed to Load 3DLUT File. +The second line should be "Mesh [Input bit depth] [Output bit depth]" + Nepodařilo se nahrát soubor 3DLUT. +Druhý řádek by měl být "Mesh [Input bit depth] [Output bit depth]" + + + + + Failed to Load 3DLUT File. + Nepodařilo se nahrát soubor 3DLUT. + + + + Deleting "%1". +Are you sure? + Maže se "%1" +Jste si jistý? + + + + + Delete + Smazat + + + + + + + + + Cancel + Zrušit + + + + It is not possible to delete the style # + Není možné smazat styl # + + + + Paste Style in Palette : %1 + Vložit styl do palety: %1 + + + + Delete Style from Palette : %1 + Smazat styl z palety: %1 + + + + Cut Style from Palette : %1 + Vyjmout styl z palety: %1 + + + + + It is not possible to delete styles #0 and #1. + Není možné smazat styly #0 a #1. + + + + Can't paste styles there + Nelze vložit styl + + + + to Palette : %1 + do palety: %1 + + + + Paste Color && Name%1 + Vložit barvu a název %1 + + + + Paste Name%1 + Vložit název %1 + + + + Paste Color%1 + Vložit barvu %1 + + + + Paste%1 + Vložit %1 + + + + Can't modify color #0 + Nelze změnit barvu #0 + + + + There are more cut/copied styles than selected. Paste anyway (adding styles)? + Je tu více vyjmutých/zkopírovaných stylů, než je vybráno. Přesto vložit (přidání stylů)? + + + + Paste + Vložit + + + + Blend Colors in Palette : %1 + Smíchat barvy v paletě: %1 + + + + Toggle Link in Palette : %1 + Přepnout spojení v paletě: %1 + + + + Remove Reference in Palette : %1 + Odstranit odkaz v paletě: %1 + + + + Get Color from Studio Palette + Získat barvu ze studiové palety + + + + Paste Object + Vložit předmět + + + + Copy Keyframe + Kopírovat klíčový snímek + + + + Paste Keyframe at Frame : %1 + Vložit klíčový snímek na snímku: %1 + + + + Delete Keyframe + Smazat klíčový snímek + + + + Move Keyframe + Posunout klíčový snímek + + + + Save Motion Path + Nová cestu pohybu + + + + + Motion Path files (*.mpath) + Soubory s cestami pohybu (*.mpath) + + + + It is not possible to save the motion path. + Není možné uložit cestu pohybu. + + + + Load Motion Path + Nahrát cestu pohybu + + + + It is not possible to load the motion path. + Není možné nahrát cestu pohybu. + + + + Stage Schematic + Náčrtek jeviště + + + + FX Schematic + Náčrtek efektu + + + + Change Style Palette : %1 Style#%2 [R%3 G%4 B%5] -> [R%6 G%7 B%8] + Změnit styl Paleta: %1 Styl #%2 [R%3 G%4 B%5] -> [R%6 G%7 B%8] + + + + Plain color + VectorBrushStyleChooserPage + Normální barva + + + + Custom Texture + TextureStyleChooserPage + + + + + Plain color + MyPaintBrushStyleChooserPage + Normální barva + + + + Plain color + SpecialStyleChooserPage + Normální barva + + + Save + Uložit + + + Discard + Zahodit + + + Yes + Ano + + + No + Ne + + + Replace + Nahradit + + + + + Modify Fx Param : %1 + Upravit parametr efektu: %1 + + + + + + Modify Fx Param : %1 : %2 -> %3 + Upravit parametr efektu: %1 : %2 -> %3 + + + + + Modify Fx Param : + Upravit parametr efektu: + + + + ON : %1 + ZAPNUTO: %1 + + + + OFF : %1 + VYPNUTO: %1 + + + + Modify Fx Param : %1 : %2 Key + Upravit parametr efektu: %1 : %2 klíč + + + + + Add + Přidat + + + + + Remove + Odstranit + + + + Modify Fx Param : %1 : %2 Point + Upravit parametr efektu: %1 : %2 bod + + + + %1 : Linear ON + %1: Lineární ZAPNUTO + + + + %1 : Linear OFF + %1: Lineární VYPNUTO + + + + Palette + Paleta + + + + Overwrite + Přepsat + + + + Don't Overwrite + Nepřepisovat + + + + It is not possible to assign a shortcut with modifiers to the visualization commands. + Není možné přiřadit klávesovou zkratku s modifikátory k příkazům pro znázornění. + + + + Current Frame: + + + + + File History + + + + + Fullpath: + Plná cesta: + + + + File Type: + Typ souboru: + + + + Frames: + Snímky: + + + + Owner: + Vlastník: + + + + Size: + Velikost: + + + + Created: + Vytvořeno: + + + + Modified: + Změněno: + + + + Last Access: + Poslední přístup: + + + + Image Size: + Velikost obrázku: + + + + SaveBox: + Ukládací box: + + + + Bits/Sample: + Bity/Vzorek: + + + + Sample/Pixel: + Vzorek/Pixel: + + + + Dpi: + DPI: + + + + Orientation: + Natočení: + + + + Compression: + Komprese: + + + + Quality: + Jakost: + + + + Smoothing: + Vyhlazování: + + + + Codec: + Kodek: + + + + Alpha Channel: + Alfa kanál: + + + + Byte Ordering: + Pořadí bytů: + + + + H Pos: + Vodorovná poloha: + + + + Palette Pages: + Strany palety: + + + + Palette Styles: + Styly palety: + + + + Camera Size: + Velikost kamery: + + + + Camera Dpi: + DPI kamery: + + + + Number of Frames: + Počet snímků: + + + + Number of Levels: + Počet úrovní: + + + + Output Path: + Výstupní cesta: + + + + Endianess: + Endian: + + + + Length: + Délka: + + + + Channels: + Kanály: + + + + Sample Rate: + Vzorkovací kmitočet: + + + + Sample Size: + Velikost vzorku: + + + + The file %1 does not exist. + Soubor %1 neexistuje. + + + + It is not possible to find the %1 level. + Úroveň %1 nelze najít. + + + + There was an error copying %1 + Při kopírování %1 se vyskytla chyba + + + + It is not possible to find the level %1 + Není možné najít úroveň %1 + + + + + + Cannot premultiply the selected file. + Nelze přednásobit vybraný soubor. + + + + Cannot premultiply a vector-based level. + Nelze přednásobit na vektorech založenou úroveň. + + + + Level %1 premultiplied. + Úroveň %1 přednásobena. + + + + + Frame %1 : conversion failed! + Snímek %1: převod selhal! + + + + + + The source image seems not suitable for this kind of conversion + Zdá se, že zdrojový obrázek není vhodný pro tento druh převodu + + + + The file name cannot be empty or contain any of the following characters: (new line) \ / : * ? " | + Název souboru nesmí být prázdný nebo obsahovat následující znaky: (nový řádek) \ / : * ? " | + + + OpenToonz 1.3 + OpenToonz 1.3 + + + + Information + Informace + + + + Warning + Varování + + + + Critical + Važné + + + + Question + Otázka + + + + Apply + Použít + + + + OK + OK + + + + Styles you are going to delete are used to paint lines and areas in the animation level. + + Styly, jež se chystáte smazat, se používají k malování čar a ploch v animační úrovni. + + + + + How do you want to proceed? + Jak chcete pokračovat? + + + + Delete Styles Only + Smazat jen styly + + + + Delete Styles, Lines and Areas + Smazat styly, čáry a plochy + + + + Ok + OK + + + + Deletion of Lines and Areas from raster-based levels is not undoable. +Are you sure? + Smazání čar a ploch z na rastrech založených úrovní se nedá vrátit zpět. +Jste si jistý? + + + + Modify Fx Param : %1 Key : %2 Frame %3 + Upravit parametr efektu: %1 klíč: %2 snímek %3 + + + + Set + Nastavit + + + + QPushButton + + + OK + OK + + + + SchematicViewer + + + &Fit to Window + &Přizpůsobit oknu + + + + &Focus on Current + &Zaměřit na nynější předmět + + + + &Reorder Nodes + &Přeuspořádat uzly + + + + &Reset Size + &Obnovit výchozí velikost + + + + + + &Minimize Nodes + &Zmenšit uzly + + + + + + &Maximize Nodes + &Zvětšit uzly + + + + &New Pegbar + &Nový pruh na kolíky + + + + &New Camera + &Nová kamera + + + + &New Motion Path + &Nová cesta pohybu + + + + &Swtich output port display mode + &Přepnout režim zobrazení výstupní přípojky (port) + + + + &Toggle node icons + &Přepnout ikony uzlů + + + + SchematicWindowEditor + + + &Close Editor + &Zavřít editor + + + + SimilarShapeSegmentPage + + + Reference Curve: + Srovnávací křivka: + + + + Frame Offset: + Posun snímku: + + + + There is a syntax error in the definition of the interpolation. + Ve vymezení interpolace je chyba ve skladbě (syntax). + + + + There is a circular reference in the definition of the interpolation. + Ve vymezení interpolace je kruhový odkaz. + + + + SpecialStyleChooserPage + + Plain color + Normální barva + + + + SpeedInOutSegmentPage + + + First Speed: + Rychlost prvního: + + + + + Handle: + Úchop: + + + + + / + / + + + + Last Speed: + Rychlost posledního: + + + + + + + + + --- + --- + + + + SplinePainter + + + &Delete + S&mazat + + + + &Save Motion Path... + &Uložit cestu pohybu... + + + + &Load Motion Path... + &Nahrát cestu pohybu... + + + + StageSchematicScene + + + &New Pegbar + &Nový pruh na kolíky + + + + &New Motion Path + &Nová cesta pohybu + + + + &New Camera + &Nová kamera + + + + StudioPaletteTreeViewer + + + The current palette %1 +in the studio palette has been modified. Do you want to save your changes? + + + + + Save + Uložit + + + + Discard + Zahodit + + + + Convert %1 to Studio Palette and Overwrite. +Are you sure ? + + + + Yes + Ano + + + No + Ne + + + + This folder is not empty. Delete anyway? + Tato složka je prázdná. Přesto smazat? + + + + Convert + + + + + Replacing all selected palettes with the palette "%1". +Are you sure ? + + + + + Replacing the palette "%1" with the palette "%2". +Are you sure ? + + + + + Replace + Nahradit + + + + New Palette + Nová paleta + + + + New Folder + Nová složka + + + + Delete Folder + Smazat složku + + + + + Load into Current Palette + Nahrát do nynější palety + + + + Adjust Current Level to This Palette + Přizpůsobit nynější úroveň této paletě + + + + + Merge to Current Palette + Sloučit do nynější palety + + + + + Replace with Current Palette + Nahradit nynější paletou + + + + Delete Palette + Smazat paletu + + + + Convert to Studio Palette and Overwrite + Převést do studiové palety a přepsat + + + + Search for Palettes + Hledat palety + + + + + Delete + Smazat + + + + the palette "%1" + paleta "%1" + + + + the selected palettes + vybraná paleta + + + + Move %1 to "%2". Are you sure ? + Přesunout %1 do "%2". Jste si jistý? + + + + Move + Přesunout + + + + + + + + Cancel + Zrušit + + + + StyleEditor + + + Wheel + Barevné kolo + + + + HSV + HSV + + + + Alpha + Alfa + + + + RGB + RGB + + + + Show or hide parts of the Color Page. + Ukázat nebo skrýt části barevné strany. + + + + Toggle orientation of the Color Page. + Přepnout natočeníi barevné strany. + + + + Auto + Automaticky + + + + Apply + Použít + + + + Apply changes to current style + Použít změny na nynější styl + + + + Automatically update style changes + Automaticky aktualizovat změny stylu + + + + Return To Previous Style + Vrátit se k předchozímu stylu + + + + Current Style + Nynější styl + + + + Generated + Vytvořeno + + + + Trail + Stopa + + + + Vector Brush + Vektorový štětec + + + + + + Color + Barva + + + + Texture + Textura (povrch) + + + + Vector + Vektor + + + + Raster + Rastr + + + + + Settings + Nastavení + + + + No Style Selected + Nevybrán žádný styl + + + + [CLEANUP] + [VYČIŠTĚNÍ] + + + + [STUDIO] + [STUDIO] + + + + [LEVEL] + [ÚROVEŇ] + + + + Palette + Paleta + + + + Style Editor - No Valid Style Selected + Editor stylu - Nevybrán žádný platný styl + + + + StyleEditorGUI::ColorChannelControl + + + R + Č + + + + G + Z + + + + B + M + + + + A + A + + + + H + O + + + + S + S + + + + V + V + + + + StyleEditorGUI::SettingsPage + + + Autopaint for Lines + Automatické malování pro čáry + + + + Reset to default + Vrátit na výchozí + + + + StyleNameEditor + + + Name Editor + Editor názvu + + + + OK + OK + + + + Cancel + Zrušit + + + + Apply and Next + Použít a + + + + Style Name + Název stylu + + + + Easy Inputs + Snadné vstupy + + + + Name Editor: # %1 + Upravení názvu: # %1 + + + + SwatchViewer + + + Reset View + + + + + Fit To Window + + + + + TMessageViewer + + + Display: + Zobrazení: + + + + Errors + Chyby + + + + Warnings + Varování + + + + Info + Informace + + + + Clear + Vyprázdnit + + + + TablePainter + + + Table + Tabulka + + + + &Reset Center + &Obnovit výchozí střed + + + + VectorBrushStyleChooserPage + + Plain color + Normální barva + + + + WordButton + + + Remove %1 + Odstranit %1 + + + diff --git a/toonz/sources/translations/french/tnztools.ts b/toonz/sources/translations/french/tnztools.ts index e6ae44b..8999628 100644 --- a/toonz/sources/translations/french/tnztools.ts +++ b/toonz/sources/translations/french/tnztools.ts @@ -618,6 +618,20 @@ + FullColorFillTool + + Fill Depth + Profondeur de Remplissage + + + + HandToolOptionsBox + + Reset Position + + + + HookTool Snap @@ -1241,6 +1255,13 @@ Voulez-vous continuer? + RotateToolOptionsBox + + Reset Rotation + + + + RulerToolOptionsBox X: @@ -1639,4 +1660,11 @@ moved to the end of the first page of the palette. + + ZoomToolOptionsBox + + Reset Zoom + + + diff --git a/toonz/sources/translations/french/toonz.ts b/toonz/sources/translations/french/toonz.ts index 80c517d..b44bec7 100644 --- a/toonz/sources/translations/french/toonz.ts +++ b/toonz/sources/translations/french/toonz.ts @@ -109,11 +109,11 @@ ApplyMatchlinesCommand It is not possible to apply the match lines because no column was selected. - Il n'est pas possible d'appliquer les lignes de correspondance, car aucune colonne a été sélectionné. + Il n'est pas possible d'appliquer les lignes de correspondance, car aucune colonne a été sélectionné. It is not possible to apply the match lines because two columns have to be selected. - Il n'est pas possible d'appliquer les lignes de match parce que les deux colonnes doivent être sélectionnés. + Il n'est pas possible d'appliquer les lignes de match parce que les deux colonnes doivent être sélectionnés. @@ -1054,11 +1054,11 @@ Que voulez-vous faire? CloneLevelUndo::LevelNamePopup Clone Level - Cloner Niveau + Cloner Niveau Level Name: - Nom du Niveau: + Nom du Niveau: @@ -1235,6 +1235,10 @@ Que voulez-vous faire? (Flipped) + + :: Project: + + CommandBar @@ -1848,11 +1852,11 @@ contain the dpi information, then the current camera dpi will be used. ExportCurvePopup Export Curve - Exporter la Courbe + Exporter la Courbe Export - Exporter + Exporter @@ -2249,26 +2253,26 @@ contain the dpi information, then the current camera dpi will be used. FileData It is not possible to find the %1 level. - Il n'est pas possible de trouver le niveau %1. + Il n'est pas possible de trouver le niveau %1. There was an error copying %1 - Il y avait une erreur de copie de %1 + Il y avait une erreur de copie de %1 FileSelection Abort - Avorter + Avorter Collecting assets... - Recueil des éléments en cours. + Recueil des éléments en cours. Importing scenes... - Importation des scenes en cours. + Importation des scenes en cours. @@ -3161,6 +3165,10 @@ Please use the frame numbers for reference. Invalid data file. + + Drawing: + + LoadBoardPresetFilePopup @@ -3192,11 +3200,11 @@ Please use the frame numbers for reference. LoadCurvePopup Load Curve - Charger une Courbe + Charger une Courbe Load - Charger + Charger @@ -3339,15 +3347,15 @@ Please use the frame numbers for reference. LoadSettingsPopup Load Cleanup Settings - Charger les Paramètres de Nettoyage + Charger les Paramètres de Nettoyage Load - Charger + Charger %1 does not exist. - %1 n'existe pas. + %1 n'existe pas. @@ -3701,7 +3709,7 @@ Please use the frame numbers for reference. &Send Back - &Arrière-plan + &Arrière-plan &Send Backward @@ -5375,6 +5383,30 @@ Please use the frame numbers for reference. Flip Viewer Horizontally + + &Send to Back + + + + Reset Zoom + + + + Reset Rotation + + + + Reset Position + + + + Brush Tool - Eraser (Raster option) + + + + Brush Tool - Lock Alpha + + MatchlinesDialog @@ -5502,15 +5534,15 @@ N.B. Duplicated commands will be ignored. Only the last one will appear in the m MergeCmappedCommand It is not possible to merge tlv columns because no column was selected. - Il n'est pas possible de fusionner les colonnes tlv car aucune colonne a été sélectionné. + Il n'est pas possible de fusionner les colonnes tlv car aucune colonne a été sélectionné. It is not possible to merge tlv columns because at least two columns have to be selected. - Il n'est pas possible de fusionner les colonnes tlv parce qu'au moins deux colonnes doivent être sélectionnés. + Il n'est pas possible de fusionner les colonnes tlv parce qu'au moins deux colonnes doivent être sélectionnés. Merging Tlv Levels... - Fusion des niveaux TLV en cours... + Fusion des niveaux TLV en cours... @@ -5539,16 +5571,20 @@ N.B. Duplicated commands will be ignored. Only the last one will appear in the m Apply Appliquer + + Level %1 already exists! Are you sure you want to overwrite it? + + MergeColumnsCommand It is not possible to execute the merge column command because no column was selected. - Il n'est pas possible d'exécuter le commande de fusion de niveaux parce que pas de colonnes ont été sélectionné. + Il n'est pas possible d'exécuter le commande de fusion de niveaux parce que pas de colonnes ont été sélectionné. It is not possible to execute the merge column command because only one columns is selected. - Il n'est pas possible d'exécuter le commande de fusion de niveaux parce que seulement une colonnes a été sélectionné. + Il n'est pas possible d'exécuter le commande de fusion de niveaux parce que seulement une colonnes a été sélectionné. @@ -5632,7 +5668,7 @@ Que voulez-vous faire? - MyViewFinder + MyVideoWidget Camera is not available @@ -6024,16 +6060,16 @@ Que voulez-vous faire? Overwrite - Remplacer + Remplacer Skip - Sauter + Sauter File "%1" already exists. Do you want to overwrite it? - Le fichier "%1" existe déjà. + Le fichier "%1" existe déjà. Que voulez-vous faire? @@ -6346,6 +6382,10 @@ WARNING : Image size mismatch. The size of level with the same name is is %1 x % WARNING : Image size mismatch. The size of level with the same path is %1 x %2. + + Subcamera + + PencilTestSaveInFolderPopup @@ -7490,13 +7530,13 @@ in non alpha-enabled image format. Previewer The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | - Le nom du fichier ne peut pas être vide ou contenir aucun des caractères suivants: + Le nom du fichier ne peut pas être vide ou contenir aucun des caractères suivants: \ /: *? "| File %1 already exists. Do you want to overwrite it? - Le fichier %1 existe déjà. + Le fichier %1 existe déjà. Voulez-vous le remplacer? @@ -7660,6 +7700,38 @@ Voulez-vous le remplacer? Level Name: Nom du Niveau: + + Single Image + + + + Frames + Images + + + Columns + Colonnes + + + Flatten visible document layers into a single image. Layer styles are maintained. + + + + Load document layers as frames into a single xsheet column. + + + + Load document layers as xhseet columns. + + + + OK + OK + + + Cancel + Annuler + QApplication @@ -8596,11 +8668,11 @@ Voulez-vous l'écraser? Level - Niveau + Niveau already exists! Are you sure you want to overwrite it? - existe déjà! Êtes-vous sûr de vouloir l'écraser? + existe déjà! Êtes-vous sûr de vouloir l'écraser? It is not possible to merge tlv columns containing more than one level @@ -9363,6 +9435,240 @@ to use the duplicate command in the xsheet / timeline. Clear All Relative Onion Skin Markers + + Always Overwrite in This Scene + + + + + %1 more level(s) + + + + + Fx Settings + Paramètres de l'Effet Spécial + + + Save Curve + Enregistrer la Courbe + + + Load Curve + Charger une Courbe + + + Export Curve + Exporter la Courbe + + + Rendering frame %1 / %2 + RenderListener + + + + Precomputing %1 Frames + RenderListener + + + + of %1 + RenderListener + + + + Finalizing render, please wait. + RenderListener + + + + Aborting render... + RenderListener + + + + Building Schematic... + RenderCommand + + + + column + MultimediaProgressBar label (mode name) + + + + layer + MultimediaProgressBar label (mode name) + + + + Rendering %1%2, frame %3 / %4 + MultimediaProgressBar label + + + + Rendering %1 frames of %2 + MultimediaProgressBar + + + + %1 of %2 + MultimediaProgressBar - [totalframe] of [path] + + + + Aborting render... + MultimediaProgressBar + + + + It is not possible to write the output: the file + RenderCommand + + + + s are read only. + RenderCommand + + + + is read only. + RenderCommand + + + + Save Cleanup Settings + Enregistrer les Paramètres de Nettoyage + + + Load Cleanup Settings + Charger les Paramètres de Nettoyage + + + It is not possible to find the %1 level. + FileData + Il n'est pas possible de trouver le niveau %1. + + + There was an error copying %1 + FileData + Il y avait une erreur de copie de %1 + + + Clone Level + CloneLevelUndo::LevelNamePopup + Cloner Niveau + + + Level Name: + CloneLevelUndo::LevelNamePopup + Nom du Niveau: + + + Collecting assets... + Recueil des éléments en cours. + + + Abort + Avorter + + + Importing scenes... + Importation des scenes en cours. + + + It is not possible to execute the merge column command because no column was selected. + Il n'est pas possible d'exécuter le commande de fusion de niveaux parce que pas de colonnes ont été sélectionné. + + + It is not possible to execute the merge column command because only one columns is selected. + + + + It is not possible to apply the match lines because no column was selected. + Il n'est pas possible d'appliquer les lignes de correspondance, car aucune colonne a été sélectionné. + + + It is not possible to apply the match lines because two columns have to be selected. + Il n'est pas possible d'appliquer les lignes de match parce que les deux colonnes doivent être sélectionnés. + + + It is not possible to merge tlv columns because no column was selected. + Il n'est pas possible de fusionner les colonnes tlv car aucune colonne a été sélectionné. + + + It is not possible to merge tlv columns because at least two columns have to be selected. + Il n'est pas possible de fusionner les colonnes tlv parce qu'au moins deux colonnes doivent être sélectionnés. + + + Merging Tlv Levels... + Fusion des niveaux TLV en cours... + + + Save Previewed Images + Enregistrer les Images de Preview + + + The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | + + + + Unsopporter raster format, cannot save + + + + Cannot create %1 : %2 + Previewer warning %1:path %2:message + + + + Cannot create %1 + Previewer warning %1:path + + + + Saved %1 frames out of %2 in %3 + Previewer %1:savedframes %2:framecount %3:filepath + Enregistré %1 images sur %2 dans %3 + + + Canceled! + Previewer + + + + No frame to save! + + + + Already saving! + + + + Warning! + OverwriteDialog + Alerte! + + + Overwrite + OverwriteDialog + Remplacer + + + Skip + OverwriteDialog + Sauter + + + File "%1" already exists. +Do you want to overwrite it? + OverwriteDialog + Le fichier "%1" existe déjà. +Que voulez-vous faire? + + + %1 does not exist. + + ReframePopup @@ -9467,13 +9773,6 @@ Les fichiers audio ne seront pas inclus dans le clip rendu. - RenderListener - - Finalizing render, please wait. - - - - RenumberPopup Renumber @@ -10360,11 +10659,11 @@ S'il vous plaît commettre ou annuler les modifications avant.SaveCurvePopup Save Curve - Enregistrer la Courbe + Enregistrer la Courbe Save - Enregistrer + Enregistrer @@ -10439,11 +10738,11 @@ S'il vous plaît commettre ou annuler les modifications avant.SavePreviewedPopup Save Previewed Images - Enregistrer les Images de Preview + Enregistrer les Images de Preview Save - Enregistrer + Enregistrer @@ -10461,11 +10760,11 @@ S'il vous plaît commettre ou annuler les modifications avant.SaveSettingsPopup Save Cleanup Settings - Enregistrer les Paramètres de Nettoyage + Enregistrer les Paramètres de Nettoyage Save - Enregistrer + Enregistrer @@ -10686,6 +10985,14 @@ S'il vous plaît commettre ou annuler les modifications avant.Select %1 + + Flip View + + + + Reset View + Réinitialiser l'Affichage + SceneViewerPanel @@ -10749,6 +11056,10 @@ S'il vous plaît commettre ou annuler les modifications avant. (Flipped) + + :: Project: + + SeparateColorsPopup @@ -11249,18 +11560,10 @@ Attribuer à '3%'? - Choose Project - - - Create a New Scene - Open Scene - - - Scene Name: @@ -11401,6 +11704,18 @@ Possibly the preset file has been corrupted The height must be greater than zero. + + Current Project + + + + Recent Scenes [Project] + + + + The selected scene project '%1' is not in the Current Project list and may not open automatically. + + SubSheetBar @@ -12431,5 +12746,13 @@ Hold F3 Key on the Viewer to Show This Frame Only columns + + :: Project: + + + + Frame + + diff --git a/toonz/sources/translations/french/toonzqt.ts b/toonz/sources/translations/french/toonzqt.ts index 87b0f8e..6a7b250 100644 --- a/toonz/sources/translations/french/toonzqt.ts +++ b/toonz/sources/translations/french/toonzqt.ts @@ -289,11 +289,11 @@ Possibly the preset file has been corrupted DVGui OK - OK + OK Cancel - Annuler + Annuler @@ -1019,6 +1019,30 @@ Possibly the preset file has been corrupted Step 4 Pas 4 + + Activate Cycle + Activer le Cycle + + + Deactivate Cycle + Deactiver le Cycle + + + Show Inbetween Values + + + + Hide Inbetween Values + + + + Change Interpolation + + + + Change Step + + FunctionToolbar @@ -1372,13 +1396,6 @@ Sélectionnez les nœuds FX et les liens connexes avant de copier ou couper la s - MyPaintBrushStyleChooserPage - - Plain color - - - - NewWordDialog OK @@ -1587,6 +1604,17 @@ Sélectionnez les nœuds FX et les liens connexes avant de copier ou couper la s + PlaneViewer + + Reset View + + + + Fit To Window + + + + PointParamField Y: @@ -1666,19 +1694,19 @@ Sélectionnez les nœuds FX et les liens connexes avant de copier ou couper la s Save - Enregistrer + Enregistrer Discard - Jeter + Jeter Yes - Oui + Oui No - Non + Non Stage Schematic @@ -2000,10 +2028,6 @@ Are you sure? - Replace - - - Modify Fx Param : %1 @@ -2125,9 +2149,37 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< - OpenToonz 1.2 + Custom Texture + TextureStyleChooserPage + + + + Current Frame: + + + + File History + + + + Plain color + VectorBrushStyleChooserPage + + + + Plain color + MyPaintBrushStyleChooserPage + + + + Plain color + SpecialStyleChooserPage + + OK + OK + QPushButton @@ -2224,7 +2276,7 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< SpecialStyleChooserPage Plain color - Couleur plan + Couleur plan @@ -2358,6 +2410,50 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< Cancel Annuler + + The current palette %1 +in the studio palette has been modified. Do you want to save your changes? + + + + Save + Enregistrer + + + Discard + Jeter + + + Convert %1 to Studio Palette and Overwrite. +Are you sure ? + + + + Yes + Oui + + + No + Non + + + Replacing all selected palettes with the palette "%1". +Are you sure ? + + + + Replacing the palette "%1" with the palette "%2". +Are you sure ? + + + + Replace + + + + Convert + + StudioPaletteViewer @@ -2575,6 +2671,17 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< + SwatchViewer + + Reset View + + + + Fit To Window + + + + TMessageViewer Errors @@ -2623,7 +2730,7 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< VectorBrushStyleChooserPage Plain color - Il est impossible de supprimer %1. + Il est impossible de supprimer %1. diff --git a/toonz/sources/translations/german/tnztools.ts b/toonz/sources/translations/german/tnztools.ts index a770247..0ac451d 100644 --- a/toonz/sources/translations/german/tnztools.ts +++ b/toonz/sources/translations/german/tnztools.ts @@ -622,6 +622,20 @@ + FullColorFillTool + + Fill Depth + Fülltiefe + + + + HandToolOptionsBox + + Reset Position + + + + HookTool Snap @@ -1244,6 +1258,13 @@ Möchten Sie fortfahren? + RotateToolOptionsBox + + Reset Rotation + + + + RulerToolOptionsBox X: @@ -1642,4 +1663,11 @@ moved to the end of the first page of the palette. + + ZoomToolOptionsBox + + Reset Zoom + + + diff --git a/toonz/sources/translations/german/toonz.ts b/toonz/sources/translations/german/toonz.ts index f829f7b..3806b31 100644 --- a/toonz/sources/translations/german/toonz.ts +++ b/toonz/sources/translations/german/toonz.ts @@ -109,11 +109,11 @@ ApplyMatchlinesCommand It is not possible to apply the match lines because no column was selected. - Es ist nicht möglich die Anpassungslinien anzuweden, da keine Spalte gewählt wurde. + Es ist nicht möglich die Anpassungslinien anzuweden, da keine Spalte gewählt wurde. It is not possible to apply the match lines because two columns have to be selected. - Es ist nicht möglich die Anpassungslinien anzuwenden, da zwei Spalten gewählt sein müssen. + Es ist nicht möglich die Anpassungslinien anzuwenden, da zwei Spalten gewählt sein müssen. @@ -1058,11 +1058,11 @@ What do you want to do? CloneLevelUndo::LevelNamePopup Clone Level - Ebene duplizieren + Ebene duplizieren Level Name: - Name der Ebene: + Name der Ebene: @@ -1239,6 +1239,10 @@ Was möchten Sie tun? (Flipped) + + :: Project: + + CommandBar @@ -1860,11 +1864,11 @@ contain the dpi information, then the current camera dpi will be used. ExportCurvePopup Export Curve - Kurve exportieren + Kurve exportieren Export - Exportieren + Exportieren @@ -2331,26 +2335,26 @@ contain the dpi information, then the current camera dpi will be used. FileData It is not possible to find the %1 level. - Ebene %1 kann nicht gefunden werden. + Ebene %1 kann nicht gefunden werden. There was an error copying %1 - Beim kopieren von %1 trat ein Fehler ein. + Beim kopieren von %1 trat ein Fehler ein. FileSelection Abort - Unterbrechen + Unterbrechen Collecting assets... - Sammle Material... + Sammle Material... Importing scenes... - Importiere Szenen... + Importiere Szenen... @@ -3294,6 +3298,10 @@ Please use the frame numbers for reference. Invalid data file. + + Drawing: + + LoadBoardPresetFilePopup @@ -3325,11 +3333,11 @@ Please use the frame numbers for reference. LoadCurvePopup Load Curve - Effekt-Parameter importieren + Effekt-Parameter importieren Load - Laden + Laden @@ -3472,15 +3480,15 @@ Please use the frame numbers for reference. LoadSettingsPopup Load Cleanup Settings - Säuberungs-Einstellungen laden + Säuberungs-Einstellungen laden Load - Laden + Laden %1 does not exist. - %1 existiert nicht. + %1 existiert nicht. @@ -3834,7 +3842,7 @@ Please use the frame numbers for reference. &Send Back - Nach Hinten schicken (&S) + Nach Hinten schicken (&S) &Send Backward @@ -5532,6 +5540,30 @@ Please use the frame numbers for reference. Flip Viewer Horizontally + + &Send to Back + + + + Reset Zoom + + + + Reset Rotation + + + + Reset Position + + + + Brush Tool - Eraser (Raster option) + + + + Brush Tool - Lock Alpha + + MatchlinesDialog @@ -5661,15 +5693,15 @@ N.B. Duplicated commands will be ignored. Only the last one will appear in the m MergeCmappedCommand It is not possible to merge tlv columns because no column was selected. - TLV-Spalten können nicht vereint werden, da keine Spalten gewählt wurden. + TLV-Spalten können nicht vereint werden, da keine Spalten gewählt wurden. It is not possible to merge tlv columns because at least two columns have to be selected. - TLV-Spalten können nicht vereint werden, da mindestens zwei Spalten gewählt werden müssen. + TLV-Spalten können nicht vereint werden, da mindestens zwei Spalten gewählt werden müssen. Merging Tlv Levels... - TLV-Ebenen weden vereint... + TLV-Ebenen weden vereint... @@ -5698,16 +5730,20 @@ N.B. Duplicated commands will be ignored. Only the last one will appear in the m Merge Tlv Levels TLV-Ebenen vereinen + + Level %1 already exists! Are you sure you want to overwrite it? + + MergeColumnsCommand It is not possible to execute the merge column command because no column was selected. - Es können keine Spalten vereint werden, da keine Spalten gewählt wurden. + Es können keine Spalten vereint werden, da keine Spalten gewählt wurden. It is not possible to execute the merge column command because only one columns is selected. - Es können keine Spalten vereint werden, da nur eine Spalte gewählt wurde. + Es können keine Spalten vereint werden, da nur eine Spalte gewählt wurde. @@ -5792,7 +5828,7 @@ Was möchten Sie tun? - MyViewFinder + MyVideoWidget Camera is not available @@ -6189,16 +6225,16 @@ Was möchten Sie tun? Overwrite - Überschreiben + Überschreiben Skip - Überspringen + Überspringen File "%1" already exists. Do you want to overwrite it? - Datei "%1"existiert bereits. + Datei "%1"existiert bereits. Überschreiben? @@ -6501,6 +6537,10 @@ WARNING : Image size mismatch. The size of level with the same name is is %1 x % WARNING : Image size mismatch. The size of level with the same path is %1 x %2. + + Subcamera + + PencilTestSaveInFolderPopup @@ -7716,12 +7756,12 @@ in non alpha-enabled image format. Previewer The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | - Der Dateiname darf nicht leer sein oder folgende Zeichen enthalten: (new line) \ / : * ? " | + Der Dateiname darf nicht leer sein oder folgende Zeichen enthalten: (new line) \ / : * ? " | File %1 already exists. Do you want to overwrite it? - Datei %1 existiert bereits. + Datei %1 existiert bereits. Möchte Sie sie überschreiben? @@ -7892,6 +7932,38 @@ Möchte Sie sie überschreiben? Level Name: Name der Ebene: + + Single Image + + + + Frames + Frame + + + Columns + Spalten + + + Flatten visible document layers into a single image. Layer styles are maintained. + + + + Load document layers as frames into a single xsheet column. + + + + Load document layers as xhseet columns. + + + + OK + + + + Cancel + Abbrechen + QApplication @@ -8834,11 +8906,11 @@ Möchten Sie sie überschreiben? Level - Ebene + Ebene already exists! Are you sure you want to overwrite it? - existiert bereits! Sind Sie sich sicher, dass Sie überschreiben möchten? + existiert bereits! Sind Sie sich sicher, dass Sie überschreiben möchten? It is not possible to merge tlv columns containing more than one level @@ -9652,6 +9724,240 @@ to use the duplicate command in the xsheet / timeline. Clear All Relative Onion Skin Markers + + Always Overwrite in This Scene + + + + + %1 more level(s) + + + + + Fx Settings + Effekt-Einstellungen + + + Save Curve + Die Kurve speichern + + + Load Curve + Effekt-Parameter importieren + + + Export Curve + Kurve exportieren + + + Rendering frame %1 / %2 + RenderListener + + + + Precomputing %1 Frames + RenderListener + + + + of %1 + RenderListener + + + + Finalizing render, please wait. + RenderListener + + + + Aborting render... + RenderListener + + + + Building Schematic... + RenderCommand + + + + column + MultimediaProgressBar label (mode name) + + + + layer + MultimediaProgressBar label (mode name) + + + + Rendering %1%2, frame %3 / %4 + MultimediaProgressBar label + + + + Rendering %1 frames of %2 + MultimediaProgressBar + + + + %1 of %2 + MultimediaProgressBar - [totalframe] of [path] + + + + Aborting render... + MultimediaProgressBar + + + + It is not possible to write the output: the file + RenderCommand + + + + s are read only. + RenderCommand + + + + is read only. + RenderCommand + + + + Save Cleanup Settings + Säuberungs-Einstellungen speichern + + + Load Cleanup Settings + Säuberungs-Einstellungen laden + + + It is not possible to find the %1 level. + FileData + Ebene %1 kann nicht gefunden werden. + + + There was an error copying %1 + FileData + Beim kopieren von %1 trat ein Fehler ein. + + + Clone Level + CloneLevelUndo::LevelNamePopup + Ebene duplizieren + + + Level Name: + CloneLevelUndo::LevelNamePopup + Name der Ebene: + + + Collecting assets... + Sammle Material... + + + Abort + Unterbrechen + + + Importing scenes... + Importiere Szenen... + + + It is not possible to execute the merge column command because no column was selected. + Es können keine Spalten vereint werden, da keine Spalten gewählt wurden. + + + It is not possible to execute the merge column command because only one columns is selected. + + + + It is not possible to apply the match lines because no column was selected. + Es ist nicht möglich die Anpassungslinien anzuweden, da keine Spalte gewählt wurde. + + + It is not possible to apply the match lines because two columns have to be selected. + Es ist nicht möglich die Anpassungslinien anzuwenden, da zwei Spalten gewählt sein müssen. + + + It is not possible to merge tlv columns because no column was selected. + TLV-Spalten können nicht vereint werden, da keine Spalten gewählt wurden. + + + It is not possible to merge tlv columns because at least two columns have to be selected. + TLV-Spalten können nicht vereint werden, da mindestens zwei Spalten gewählt werden müssen. + + + Merging Tlv Levels... + TLV-Ebenen weden vereint... + + + Save Previewed Images + Vorgeschaute Bilder speichern + + + The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | + + + + Unsopporter raster format, cannot save + + + + Cannot create %1 : %2 + Previewer warning %1:path %2:message + + + + Cannot create %1 + Previewer warning %1:path + + + + Saved %1 frames out of %2 in %3 + Previewer %1:savedframes %2:framecount %3:filepath + %1 Frames von %2 wurden in %3 gespeichert + + + Canceled! + Previewer + + + + No frame to save! + + + + Already saving! + + + + Warning! + OverwriteDialog + + + + Overwrite + OverwriteDialog + Überschreiben + + + Skip + OverwriteDialog + Überspringen + + + File "%1" already exists. +Do you want to overwrite it? + OverwriteDialog + Datei "%1"existiert bereits. +Überschreiben? + + + %1 does not exist. + %1 existiert nicht. + ReframePopup @@ -9756,13 +10062,6 @@ Das Ergebnis des Outputs könnte anders sein als erwartet. Was möchten Sie tun? - RenderListener - - Finalizing render, please wait. - - - - RenumberPopup Renumber @@ -10662,11 +10961,11 @@ Bitte tragen Sie die Änderungen ein oder setzen sie zurück. SaveCurvePopup Save Curve - Die Kurve speichern + Die Kurve speichern Save - Speichern + Speichern @@ -10745,11 +11044,11 @@ Bitte tragen Sie die Änderungen ein oder setzen sie zurück. SavePreviewedPopup Save Previewed Images - Vorgeschaute Bilder speichern + Vorgeschaute Bilder speichern Save - Speichern + Speichern @@ -10767,11 +11066,11 @@ Bitte tragen Sie die Änderungen ein oder setzen sie zurück. SaveSettingsPopup Save Cleanup Settings - Säuberungs-Einstellungen speichern + Säuberungs-Einstellungen speichern Save - Speichern + Speichern @@ -10992,6 +11291,14 @@ Bitte tragen Sie die Änderungen ein oder setzen sie zurück. Select %1 + + Flip View + + + + Reset View + + SceneViewerPanel @@ -11055,6 +11362,10 @@ Bitte tragen Sie die Änderungen ein oder setzen sie zurück. (Flipped) + + :: Project: + + SeparateColorsPopup @@ -11555,18 +11866,10 @@ Zu '%3' zuweisen? - Choose Project - - - Create a New Scene - Open Scene - - - Scene Name: @@ -11707,6 +12010,18 @@ Possibly the preset file has been corrupted The height must be greater than zero. + + Current Project + + + + Recent Scenes [Project] + + + + The selected scene project '%1' is not in the Current Project list and may not open automatically. + + SubSheetBar @@ -12751,5 +13066,13 @@ Hold F3 Key on the Viewer to Show This Frame Only columns Spalte + + :: Project: + + + + Frame + + diff --git a/toonz/sources/translations/german/toonzqt.ts b/toonz/sources/translations/german/toonzqt.ts index 8023f9d..c92b163 100644 --- a/toonz/sources/translations/german/toonzqt.ts +++ b/toonz/sources/translations/german/toonzqt.ts @@ -296,11 +296,7 @@ Possibly the preset file has been corrupted Cancel - Abbrechen - - - OK - + Abbrechen @@ -1026,6 +1022,30 @@ Possibly the preset file has been corrupted Step 4 Schritt 4 + + Activate Cycle + Zyklus aktivieren + + + Deactivate Cycle + Zyklus deaktivieren + + + Show Inbetween Values + + + + Hide Inbetween Values + + + + Change Interpolation + + + + Change Step + + FunctionToolbar @@ -1390,7 +1410,7 @@ Wählen Sie Effekt-Nodes und verwandte Links, die Sie einfügen möchten, bevor MyPaintBrushStyleChooserPage Plain color - Normale Farbe + Normale Farbe @@ -1614,6 +1634,17 @@ Wählen Sie Effekt-Nodes und verwandte Links, die Sie einfügen möchten, bevor + PlaneViewer + + Reset View + + + + Fit To Window + + + + PointParamField Y: @@ -1689,19 +1720,19 @@ Wählen Sie Effekt-Nodes und verwandte Links, die Sie einfügen möchten, bevor Save - Speichern + Speichern Discard - Änderungen verwerfen + Änderungen verwerfen Yes - Ja + Ja No - Nein + Nein Stage Schematic @@ -2030,7 +2061,7 @@ Sind Sie sicher? Replace - Ersetzen + Ersetzen Modify Fx Param : %1 @@ -2168,7 +2199,35 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< - OpenToonz 1.2 + Custom Texture + TextureStyleChooserPage + + + + Current Frame: + + + + File History + + + + Plain color + VectorBrushStyleChooserPage + Normale Farbe + + + Plain color + MyPaintBrushStyleChooserPage + Normale Farbe + + + Plain color + SpecialStyleChooserPage + Normale Farbe + + + OK @@ -2271,7 +2330,7 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< SpecialStyleChooserPage Plain color - Normale Farbe + Normale Farbe @@ -2405,6 +2464,50 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< Cancel Abbrechen + + The current palette %1 +in the studio palette has been modified. Do you want to save your changes? + + + + Save + Speichern + + + Discard + Änderungen verwerfen + + + Convert %1 to Studio Palette and Overwrite. +Are you sure ? + + + + Yes + Ja + + + No + Nein + + + Replacing all selected palettes with the palette "%1". +Are you sure ? + + + + Replacing the palette "%1" with the palette "%2". +Are you sure ? + + + + Replace + Ersetzen + + + Convert + + StudioPaletteViewer @@ -2655,6 +2758,17 @@ anwenden + SwatchViewer + + Reset View + + + + Fit To Window + + + + TMessageViewer Errors @@ -2703,7 +2817,7 @@ anwenden VectorBrushStyleChooserPage Plain color - Normale Farbe + Normale Farbe diff --git a/toonz/sources/translations/italian/tnztools.ts b/toonz/sources/translations/italian/tnztools.ts index 5bb2860..9be3feb 100644 --- a/toonz/sources/translations/italian/tnztools.ts +++ b/toonz/sources/translations/italian/tnztools.ts @@ -618,6 +618,20 @@ + FullColorFillTool + + Fill Depth + Profondità di Riempimento + + + + HandToolOptionsBox + + Reset Position + + + + HookTool Snap @@ -1239,6 +1253,13 @@ Procedere? + RotateToolOptionsBox + + Reset Rotation + + + + RulerToolOptionsBox X: @@ -1637,4 +1658,11 @@ moved to the end of the first page of the palette. + + ZoomToolOptionsBox + + Reset Zoom + + + diff --git a/toonz/sources/translations/italian/toonz.ts b/toonz/sources/translations/italian/toonz.ts index 42484d6..531523c 100644 --- a/toonz/sources/translations/italian/toonz.ts +++ b/toonz/sources/translations/italian/toonz.ts @@ -109,11 +109,11 @@ ApplyMatchlinesCommand It is not possible to apply the match lines because no column was selected. - Impossibile applicare le match lines poichè non è stata selezionata nessuna colonna. + Impossibile applicare le match lines poichè non è stata selezionata nessuna colonna. It is not possible to apply the match lines because two columns have to be selected. - Impossibile applicare le match lines poichè devono essere selezionate due colonne. + Impossibile applicare le match lines poichè devono essere selezionate due colonne. @@ -1053,11 +1053,11 @@ Cosa vuoi fare? CloneLevelUndo::LevelNamePopup Clone Level - Clona Livello + Clona Livello Level Name: - Nome del Livello: + Nome del Livello: @@ -1234,6 +1234,10 @@ Cosa vuoi fare? (Flipped) + + :: Project: + + CommandBar @@ -1849,11 +1853,11 @@ contain the dpi information, then the current camera dpi will be used. ExportCurvePopup Export Curve - Esporta la Curva + Esporta la Curva Export - Esporta + Esporta @@ -2251,26 +2255,26 @@ contain the dpi information, then the current camera dpi will be used. FileData It is not possible to find the %1 level. - Impossibile trovare il livello %1. + Impossibile trovare il livello %1. There was an error copying %1 - Errore durante la copia di %1 + Errore durante la copia di %1 FileSelection Abort - Interrompi + Interrompi Collecting assets... - Recupero componenti in corso + Recupero componenti in corso Importing scenes... - Importazione delle scene in corso + Importazione delle scene in corso @@ -3163,6 +3167,10 @@ Please use the frame numbers for reference. Invalid data file. + + Drawing: + + LoadBoardPresetFilePopup @@ -3194,11 +3202,11 @@ Please use the frame numbers for reference. LoadCurvePopup Load Curve - Carica Curva + Carica Curva Load - Carica + Carica @@ -3341,15 +3349,15 @@ Please use the frame numbers for reference. LoadSettingsPopup Load Cleanup Settings - Carica le Impostazioni per il Cleanup + Carica le Impostazioni per il Cleanup Load - Carica + Carica %1 does not exist. - %1 non esiste. + %1 non esiste. @@ -3703,7 +3711,7 @@ Please use the frame numbers for reference. &Send Back - &Porta Sotto + &Porta Sotto &Send Backward @@ -5378,6 +5386,30 @@ Decrementa lo spessore minimo del pennello Flip Viewer Horizontally + + &Send to Back + + + + Reset Zoom + + + + Reset Rotation + + + + Reset Position + + + + Brush Tool - Eraser (Raster option) + + + + Brush Tool - Lock Alpha + + MatchlinesDialog @@ -5505,15 +5537,15 @@ N.B. Duplicated commands will be ignored. Only the last one will appear in the m MergeCmappedCommand It is not possible to merge tlv columns because no column was selected. - Non è possibile fondere le colonne perchè non ci sono colonne selezionate. + Non è possibile fondere le colonne perchè non ci sono colonne selezionate. It is not possible to merge tlv columns because at least two columns have to be selected. - Non è possibile fondere le colonne perchè devono essere selezionate due colonne. + Non è possibile fondere le colonne perchè devono essere selezionate due colonne. Merging Tlv Levels... - Fusiome livelli Tlv in corso... + Fusiome livelli Tlv in corso... @@ -5542,16 +5574,20 @@ N.B. Duplicated commands will be ignored. Only the last one will appear in the m Apply Applica + + Level %1 already exists! Are you sure you want to overwrite it? + + MergeColumnsCommand It is not possible to execute the merge column command because no column was selected. - Impossibile eseguire il comando unisci colonne poichè nessuna colonna è stata selezionata. + Impossibile eseguire il comando unisci colonne poichè nessuna colonna è stata selezionata. It is not possible to execute the merge column command because only one columns is selected. - Impossibile eseguire il comando unisci colonne poichè è stata selezionata una sola colonna. + Impossibile eseguire il comando unisci colonne poichè è stata selezionata una sola colonna. @@ -5635,7 +5671,7 @@ Cosa vuoi fare? - MyViewFinder + MyVideoWidget Camera is not available @@ -6025,16 +6061,16 @@ Cosa vuoi fare? Overwrite - Sovrascrivi + Sovrascrivi Skip - Salta + Salta File "%1" already exists. Do you want to overwrite it? - Il file "%1" esiste già. + Il file "%1" esiste già. Lo vuoi sovrascrivere? @@ -6347,6 +6383,10 @@ WARNING : Image size mismatch. The size of level with the same name is is %1 x % WARNING : Image size mismatch. The size of level with the same path is %1 x %2. + + Subcamera + + PencilTestSaveInFolderPopup @@ -7491,13 +7531,13 @@ in non alpha-enabled image format. Previewer The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | - Il nome del file non può essere vuoto o contenere i seguenti caratteri: + Il nome del file non può essere vuoto o contenere i seguenti caratteri: \ / : * ? " | File %1 already exists. Do you want to overwrite it? - Il file %1 esiste già. + Il file %1 esiste già. Vuoi sovrascriverlo? @@ -7661,6 +7701,38 @@ Vuoi sovrascriverlo? Level Name: Nome del Livello: + + Single Image + + + + Frames + Fotogrammi + + + Columns + Colonne + + + Flatten visible document layers into a single image. Layer styles are maintained. + + + + Load document layers as frames into a single xsheet column. + + + + Load document layers as xhseet columns. + + + + OK + OK + + + Cancel + Annullare + QApplication @@ -8600,11 +8672,11 @@ Vuoi sovrascriverlo? Level - Livello + Livello already exists! Are you sure you want to overwrite it? - esiste già; lo vuoi sovrascrivere? + esiste già; lo vuoi sovrascrivere? It is not possible to merge tlv columns containing more than one level @@ -9364,6 +9436,240 @@ to use the duplicate command in the xsheet / timeline. Clear All Relative Onion Skin Markers + + Always Overwrite in This Scene + + + + + %1 more level(s) + + + + + Fx Settings + Impostazioni dell'Effetto + + + Save Curve + Salva la Curva + + + Load Curve + Carica Curva + + + Export Curve + Esporta la Curva + + + Rendering frame %1 / %2 + RenderListener + + + + Precomputing %1 Frames + RenderListener + + + + of %1 + RenderListener + + + + Finalizing render, please wait. + RenderListener + + + + Aborting render... + RenderListener + + + + Building Schematic... + RenderCommand + + + + column + MultimediaProgressBar label (mode name) + + + + layer + MultimediaProgressBar label (mode name) + + + + Rendering %1%2, frame %3 / %4 + MultimediaProgressBar label + + + + Rendering %1 frames of %2 + MultimediaProgressBar + + + + %1 of %2 + MultimediaProgressBar - [totalframe] of [path] + + + + Aborting render... + MultimediaProgressBar + + + + It is not possible to write the output: the file + RenderCommand + + + + s are read only. + RenderCommand + + + + is read only. + RenderCommand + + + + Save Cleanup Settings + Salve i Parametri di Cleanup + + + Load Cleanup Settings + Carica le Impostazioni per il Cleanup + + + It is not possible to find the %1 level. + FileData + Impossibile trovare il livello %1. + + + There was an error copying %1 + FileData + Errore durante la copia di %1 + + + Clone Level + CloneLevelUndo::LevelNamePopup + Clona Livello + + + Level Name: + CloneLevelUndo::LevelNamePopup + Nome del Livello: + + + Collecting assets... + Recupero componenti in corso + + + Abort + + + + Importing scenes... + Importazione delle scene in corso + + + It is not possible to execute the merge column command because no column was selected. + Impossibile eseguire il comando unisci colonne poichè nessuna colonna è stata selezionata. + + + It is not possible to execute the merge column command because only one columns is selected. + + + + It is not possible to apply the match lines because no column was selected. + Impossibile applicare le match lines poichè non è stata selezionata nessuna colonna. + + + It is not possible to apply the match lines because two columns have to be selected. + Impossibile applicare le match lines poichè devono essere selezionate due colonne. + + + It is not possible to merge tlv columns because no column was selected. + Non è possibile fondere le colonne perchè non ci sono colonne selezionate. + + + It is not possible to merge tlv columns because at least two columns have to be selected. + Non è possibile fondere le colonne perchè devono essere selezionate due colonne. + + + Merging Tlv Levels... + Fusiome livelli Tlv in corso... + + + Save Previewed Images + Salva l'Anteprima + + + The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | + + + + Unsopporter raster format, cannot save + + + + Cannot create %1 : %2 + Previewer warning %1:path %2:message + + + + Cannot create %1 + Previewer warning %1:path + + + + Saved %1 frames out of %2 in %3 + Previewer %1:savedframes %2:framecount %3:filepath + Sono stati salvati %1 fotogrammi su %2 in %3 + + + Canceled! + Previewer + + + + No frame to save! + + + + Already saving! + + + + Warning! + OverwriteDialog + Attenzione! + + + Overwrite + OverwriteDialog + Sovrascrivi + + + Skip + OverwriteDialog + Salta + + + File "%1" already exists. +Do you want to overwrite it? + OverwriteDialog + Il file "%1" esiste già. +Lo vuoi sovrascrivere? + + + %1 does not exist. + %1 non esiste. + ReframePopup @@ -9468,13 +9774,6 @@ Il risultato del render può essere diverso dal previsto. Cosa vuoi fare? - RenderListener - - Finalizing render, please wait. - - - - RenumberPopup Renumber @@ -10361,11 +10660,11 @@ Per favore sottometti o ripristina i cambiamenti prima di proseguire.SaveCurvePopup Save Curve - Salva la Curva + Salva la Curva Save - Salva + Salva @@ -10440,11 +10739,11 @@ Per favore sottometti o ripristina i cambiamenti prima di proseguire.SavePreviewedPopup Save Previewed Images - Salva l'Anteprima + Salva l'Anteprima Save - Salva + Salva @@ -10462,11 +10761,11 @@ Per favore sottometti o ripristina i cambiamenti prima di proseguire.SaveSettingsPopup Save Cleanup Settings - Salve i Parametri di Cleanup + Salve i Parametri di Cleanup Save - Salva + Salva @@ -10687,6 +10986,14 @@ Per favore sottometti o ripristina i cambiamenti prima di proseguire.Select %1 + + Flip View + + + + Reset View + + SceneViewerPanel @@ -10750,6 +11057,10 @@ Per favore sottometti o ripristina i cambiamenti prima di proseguire. (Flipped) + + :: Project: + + SeparateColorsPopup @@ -11250,18 +11561,10 @@ Lo assegno a %3? - Choose Project - - - Create a New Scene - Open Scene - - - Scene Name: @@ -11402,6 +11705,18 @@ Possibly the preset file has been corrupted The height must be greater than zero. + + Current Project + + + + Recent Scenes [Project] + + + + The selected scene project '%1' is not in the Current Project list and may not open automatically. + + SubSheetBar @@ -12432,5 +12747,13 @@ Hold F3 Key on the Viewer to Show This Frame Only columns + + :: Project: + + + + Frame + + diff --git a/toonz/sources/translations/italian/toonzqt.ts b/toonz/sources/translations/italian/toonzqt.ts index eba0a53..cfe3267 100644 --- a/toonz/sources/translations/italian/toonzqt.ts +++ b/toonz/sources/translations/italian/toonzqt.ts @@ -289,11 +289,11 @@ E' possibile che il file sia corrotto. DVGui OK - OK + OK Cancel - Annulla + Annulla @@ -1019,6 +1019,30 @@ E' possibile che il file sia corrotto. Step 4 Passo 4 + + Activate Cycle + Attiva il Ciclo + + + Deactivate Cycle + Disattiva il Ciclo + + + Show Inbetween Values + + + + Hide Inbetween Values + + + + Change Interpolation + + + + Change Step + + FunctionToolbar @@ -1375,7 +1399,7 @@ Seleziona i nodi Effetto ed i relativi collegamenti prima di copiare o tagliare MyPaintBrushStyleChooserPage Plain color - Colore Piatto + Colore Piatto @@ -1587,6 +1611,17 @@ Seleziona i nodi Effetto ed i relativi collegamenti prima di copiare o tagliare + PlaneViewer + + Reset View + + + + Fit To Window + + + + PointParamField Y: @@ -1665,19 +1700,19 @@ Seleziona i nodi Effetto ed i relativi collegamenti prima di copiare o tagliare Save - Salva + Salva Discard - Scarta + Scarta Yes - + No - No + No Stage Schematic @@ -1999,10 +2034,6 @@ Are you sure? - Replace - - - Modify Fx Param : %1 @@ -2124,9 +2155,37 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< - OpenToonz 1.2 + Custom Texture + TextureStyleChooserPage + + + + Current Frame: + + + + File History + + Plain color + VectorBrushStyleChooserPage + Colore Piatto + + + Plain color + MyPaintBrushStyleChooserPage + Colore Piatto + + + Plain color + SpecialStyleChooserPage + Colore Piatto + + + OK + OK + QPushButton @@ -2223,7 +2282,7 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< SpecialStyleChooserPage Plain color - Colore Piatto + Colore Piatto @@ -2357,6 +2416,50 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< Cancel Annulla + + The current palette %1 +in the studio palette has been modified. Do you want to save your changes? + + + + Save + Salva + + + Discard + Scarta + + + Convert %1 to Studio Palette and Overwrite. +Are you sure ? + + + + Yes + + + + No + No + + + Replacing all selected palettes with the palette "%1". +Are you sure ? + + + + Replacing the palette "%1" with the palette "%2". +Are you sure ? + + + + Replace + + + + Convert + + StudioPaletteViewer @@ -2574,6 +2677,17 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< + SwatchViewer + + Reset View + + + + Fit To Window + + + + TMessageViewer Errors @@ -2622,7 +2736,7 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< VectorBrushStyleChooserPage Plain color - Colore Piatto + Colore Piatto diff --git a/toonz/sources/translations/japanese/tnztools.ts b/toonz/sources/translations/japanese/tnztools.ts index 8681364..2262f87 100644 --- a/toonz/sources/translations/japanese/tnztools.ts +++ b/toonz/sources/translations/japanese/tnztools.ts @@ -638,6 +638,20 @@ + FullColorFillTool + + Fill Depth + 塗りの浸透度 + + + + HandToolOptionsBox + + Reset Position + 表示位置をリセット + + + HookTool Snap @@ -1260,6 +1274,13 @@ Do you want to proceed? + RotateToolOptionsBox + + Reset Rotation + 回転をリセット + + + RulerToolOptionsBox X: @@ -1659,4 +1680,11 @@ moved to the end of the first page of the palette. 長方形 + + ZoomToolOptionsBox + + Reset Zoom + ズームをリセット + + diff --git a/toonz/sources/translations/japanese/toonz.ts b/toonz/sources/translations/japanese/toonz.ts index 0731fbc..e873c01 100644 --- a/toonz/sources/translations/japanese/toonz.ts +++ b/toonz/sources/translations/japanese/toonz.ts @@ -109,11 +109,11 @@ ApplyMatchlinesCommand It is not possible to apply the match lines because no column was selected. - 列が選択されていないので、マッチラインを合成できません。 + 列が選択されていないので、マッチラインを合成できません。 It is not possible to apply the match lines because two columns have to be selected. - 二つの列が選択されていないので、マッチラインを合成できません。 + 二つの列が選択されていないので、マッチラインを合成できません。 @@ -1052,11 +1052,11 @@ What do you want to do? CloneLevelUndo::LevelNamePopup Clone Level - レベルのクローンを作る + レベルのクローンを作る Level Name: - レベル名: + レベル名: @@ -1233,6 +1233,10 @@ What do you want to do? (Flipped) (反転表示) + + :: Project: + :: プロジェクト: + CommandBar @@ -1850,11 +1854,11 @@ contain the dpi information, then the current camera dpi will be used. ExportCurvePopup Export Curve - パラメータの書き出し + パラメータの書き出し Export - 書き出し + 書き出し @@ -2250,26 +2254,26 @@ contain the dpi information, then the current camera dpi will be used. FileData It is not possible to find the %1 level. - レベル %1 を見つけることができません。 + レベル %1 を見つけることができません。 There was an error copying %1 - %1 をコピーする時、エラーが発生しました + %1 をコピーする時、エラーが発生しました FileSelection Abort - 中断 + 中断 Collecting assets... - 素材を集めています... + 素材を集めています... Importing scenes... - シーンを読み込み中... + シーンを読み込み中... @@ -3170,6 +3174,10 @@ Please use the frame numbers for reference. Invalid data file. 無効なデータファイルです。 + + Drawing: + 画像: + LoadBoardPresetFilePopup @@ -3201,11 +3209,11 @@ Please use the frame numbers for reference. LoadCurvePopup Load Curve - エフェクトパラメータを読み込み + エフェクトパラメータを読み込み Load - 読み込み + 読み込み @@ -3348,15 +3356,15 @@ Please use the frame numbers for reference. LoadSettingsPopup Load Cleanup Settings - トレース設定の読み込み + トレース設定の読み込み Load - 読み込み + 読み込み %1 does not exist. - %1 は存在しません。 + %1 は存在しません。 @@ -3710,7 +3718,7 @@ Please use the frame numbers for reference. &Send Back - 最背面へ移動 (&S) + 最背面へ移動 (&S) &Send Backward @@ -4494,7 +4502,7 @@ Please use the frame numbers for reference. Reset View - ズームをリセット + 表示をリセット Fit to Window @@ -5396,6 +5404,30 @@ Please use the frame numbers for reference. Flip Viewer Horizontally ビューアを水平方向に反転 + + &Send to Back + 最背面へ移動 (&S) + + + Reset Zoom + ズームをリセット + + + Reset Rotation + 回転をリセット + + + Reset Position + 表示位置をリセット + + + Brush Tool - Eraser (Raster option) + ブラシツール(ラスターMyPaintブラシ) - 消しゴムモード + + + Brush Tool - Lock Alpha + ブラシツール(ラスターMyPaintブラシ) - 透明部分の保護 + MatchlinesDialog @@ -5528,15 +5560,15 @@ N.B. Duplicated commands will be ignored. Only the last one will appear in the m MergeCmappedCommand It is not possible to merge tlv columns because no column was selected. - 列が選択されていないため、TLVレベル列を結合できません。 + 列が選択されていないため、TLVレベル列を結合できません。 It is not possible to merge tlv columns because at least two columns have to be selected. - 少なくとも2列以上を選択しなくてはいけません。TLVレベル列を結合できません。 + 少なくとも2列以上を選択しなくてはいけません。TLVレベル列を結合できません。 Merging Tlv Levels... - TLVレベルを結合中... + TLVレベルを結合中... @@ -5565,16 +5597,20 @@ N.B. Duplicated commands will be ignored. Only the last one will appear in the m Merge Tlv Levels TLVレベルを結合 + + Level %1 already exists! Are you sure you want to overwrite it? + レベル %1 は既に存在します。上書きしてもよろしいですか? + MergeColumnsCommand It is not possible to execute the merge column command because no column was selected. - 列が選択されていないので、列を結合できません。 + 列が選択されていないので、列を結合できません。 It is not possible to execute the merge column command because only one columns is selected. - 2つの列が選択されていないので、列を結合できません。 + 2つの列が選択されていないので、列を結合できません。 @@ -5659,13 +5695,20 @@ What do you want to do? - MyViewFinder + MyVideoWidget Camera is not available 使用できるカメラがありません + MyViewFinder + + Camera is not available + 使用できるカメラがありません + + + OutputSettingsPopup Save in: @@ -6063,16 +6106,16 @@ What do you want to do? Overwrite - 上書き + 上書き Skip - 飛ばす + 飛ばす File "%1" already exists. Do you want to overwrite it? - ファイル"%1"は既に存在します。 + ファイル"%1"は既に存在します。 上書きしますか? @@ -6405,6 +6448,10 @@ WARNING : Image size mismatch. The saved image size is %1 x %2. Black & White 白黒二値 + + Subcamera + サブカメラ + PencilTestSaveInFolderPopup @@ -7638,12 +7685,12 @@ in non alpha-enabled image format. Previewer The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | - ファイル名は空であることができません。また、次の記号のどれかを含むことができません: \ / : * ? " | + ファイル名は空であることができません。また、次の記号のどれかを含むことができません: \ / : * ? " | File %1 already exists. Do you want to overwrite it? - ファイル %1 は、既に存在します。 + ファイル %1 は、既に存在します。 上書きしてもよろしいですか? @@ -7807,6 +7854,38 @@ Do you want to overwrite it? Level Name: レベル名: + + Single Image + 1枚の画像にまとめる + + + Frames + フレームに分ける + + + Columns + 列に分ける + + + Flatten visible document layers into a single image. Layer styles are maintained. + レイヤーを1枚の画像に統合します。レイヤーのスタイルは維持されます。 + + + Load document layers as frames into a single xsheet column. + 各レイヤーをフレームに分けてタイムシートの1つの列に読み込みます。 + + + Load document layers as xhseet columns. + 各レイヤーをタイムシートの列に分けて読み込みます。 + + + OK + OK + + + Cancel + キャンセル + QApplication @@ -8744,11 +8823,11 @@ Do you want to overwrite it? Level - レベル + レベル already exists! Are you sure you want to overwrite it? - は既に存在します! 上書きしてもよろしいですか? + は既に存在します! 上書きしてもよろしいですか? It is not possible to merge tlv columns containing more than one level @@ -9560,6 +9639,241 @@ to use the duplicate command in the xsheet / timeline. Clear All Relative Onion Skin Markers 全ての連結オニオンスキンをクリア + + Always Overwrite in This Scene + このシーンでは常に上書き + + + + %1 more level(s) + + + %1 個のレベル + + + + Fx Settings + エフェクト設定 + + + Save Curve + パラメータを保存 + + + Load Curve + パラメータを読み込み + + + Export Curve + パラメータの書き出し + + + Rendering frame %1 / %2 + RenderListener + レンダリング中: フレーム %1 / %2 + + + Precomputing %1 Frames + RenderListener + 前計算中: %1 フレーム + + + of %1 + RenderListener + / %1 + + + Finalizing render, please wait. + RenderListener + ファイナライズ中です。お待ちください。 + + + Aborting render... + RenderListener + レンダリングを中断しています... + + + Building Schematic... + RenderCommand + スキマティックを構築しています... + + + column + MultimediaProgressBar label (mode name) + + + + layer + MultimediaProgressBar label (mode name) + レイヤー + + + Rendering %1%2, frame %3 / %4 + MultimediaProgressBar label + レンダリング中: %1%2, フレーム %3 /%4 + + + Rendering %1 frames of %2 + MultimediaProgressBar + レンダリング中: フレーム %1 / %2 + + + %1 of %2 + MultimediaProgressBar - [totalframe] of [path] + %1 [出力先] %2 + + + Aborting render... + MultimediaProgressBar + レンダリングを中断しています... + + + It is not possible to write the output: the file + RenderCommand + 出力ファイルを保存できません。:ファイル + + + s are read only. + RenderCommand + は読み取り専用です。 + + + is read only. + RenderCommand + は読み取り専用です。 + + + Save Cleanup Settings + トレース設定を保存 + + + Load Cleanup Settings + トレース設定の読み込み + + + It is not possible to find the %1 level. + FileData + レベル %1 を見つけることができません。 + + + There was an error copying %1 + FileData + %1 をコピーする時、エラーが発生しました + + + Clone Level + CloneLevelUndo::LevelNamePopup + レベルのクローンを作る + + + Level Name: + CloneLevelUndo::LevelNamePopup + レベル名: + + + Collecting assets... + 素材を集めています... + + + Abort + 中断 + + + Importing scenes... + シーンをインポート中... + + + It is not possible to execute the merge column command because no column was selected. + 列が選択されていないため、列を結合できません。 + + + It is not possible to execute the merge column command because only one columns is selected. + 1つの列しか選択されていないため、列を結合できません。 + + + It is not possible to apply the match lines because no column was selected. + 列が選択されていないため、マッチラインを合成できません。 + + + It is not possible to apply the match lines because two columns have to be selected. + 2つの列が選択されていないため、マッチラインを合成できません。 + + + It is not possible to merge tlv columns because no column was selected. + 列が選択されていないため、TLVレベル列を結合できません。 + + + It is not possible to merge tlv columns because at least two columns have to be selected. + 少なくとも2列以上を選択しなくてはいけません。TLVレベル列を結合できません。 + + + Merging Tlv Levels... + TLVレベルを結合中... + + + Save Previewed Images + プレビュー画像を保存 + + + The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | + ファイル名は空であることができません。また、次の記号のどれかを含むことができません: :(new line) \ / : * ? " | + + + Unsopporter raster format, cannot save + サポートされていないラスター形式です。保存できません + + + Cannot create %1 : %2 + Previewer warning %1:path %2:message + %1を作成できません: %2 + + + Cannot create %1 + Previewer warning %1:path + %1 を作成できません + + + Saved %1 frames out of %2 in %3 + Previewer %1:savedframes %2:framecount %3:filepath + %2 フレーム中 %1 フレームが %3 に保存されました + + + Canceled! + Previewer + キャンセルされました。 + + + No frame to save! + 保存するフレームがありません! + + + Already saving! + すでに保存中です! + + + Warning! + OverwriteDialog + 警告! + + + Overwrite + OverwriteDialog + 上書き + + + Skip + OverwriteDialog + スキップ + + + File "%1" already exists. +Do you want to overwrite it? + OverwriteDialog + ファイル"%1"は既に存在します。 +上書きしますか? + + + %1 does not exist. + %1 は存在しません。 + ReframePopup @@ -9667,7 +9981,7 @@ The audio file will not be included in the rendered clip. RenderListener Finalizing render, please wait. - ファイナライズ中です。お待ちください。 + ファイナライズ中です。お待ちください。 @@ -10562,11 +10876,11 @@ Please commit or revert changes first. SaveCurvePopup Save Curve - パラメータを保存 + パラメータを保存 Save - 保存 + 保存 @@ -10641,11 +10955,11 @@ Please commit or revert changes first. SavePreviewedPopup Save Previewed Images - プレビュー画像を保存 + プレビュー画像を保存 Save - 保存 + 保存 @@ -10663,11 +10977,11 @@ Please commit or revert changes first. SaveSettingsPopup Save Cleanup Settings - トレース設定を保存 + トレース設定を保存 Save - 保存 + 保存 @@ -10900,6 +11214,14 @@ Please commit or revert changes first. Select %1 %1 を選択 + + Flip View + 表示を反転 + + + Reset View + 表示をリセット + SceneViewerPanel @@ -10963,6 +11285,10 @@ Please commit or revert changes first. (Flipped) (反転表示) + + :: Project: + :: プロジェクト: + SeparateColorsPopup @@ -11464,7 +11790,7 @@ Assign to '%3'? Choose Project - プロジェクトを選択 + プロジェクトを選択 Create a New Scene @@ -11472,7 +11798,7 @@ Assign to '%3'? Open Scene - シーンを開く + シーンを開く Scene Name: @@ -11624,6 +11950,18 @@ Possibly the preset file has been corrupted Minutes 分間隔 + + Current Project + 現在のプロジェクト + + + Recent Scenes [Project] + 最近開いたシーン [プロジェクト] + + + The selected scene project '%1' is not in the Current Project list and may not open automatically. + 選択したシーンのプロジェクト '%1' は現在のプロジェクトリストにはありません。自動的に開かない場合があります。 + SubSheetBar @@ -12722,5 +13060,13 @@ Hold F3 Key on the Viewer to Show This Frame Only Zoom in/out of timeline タイムラインの拡大/縮小 + + :: Project: + :: プロジェクト: + + + Frame + フレーム + diff --git a/toonz/sources/translations/japanese/toonzqt.ts b/toonz/sources/translations/japanese/toonzqt.ts index fe5bb06..6e253f2 100644 --- a/toonz/sources/translations/japanese/toonzqt.ts +++ b/toonz/sources/translations/japanese/toonzqt.ts @@ -289,11 +289,11 @@ Possibly the preset file has been corrupted DVGui OK - OK + OK Cancel - キャンセル + キャンセル @@ -1019,6 +1019,30 @@ Possibly the preset file has been corrupted Step 4 ステップ4 + + Activate Cycle + サイクルを有効化 + + + Deactivate Cycle + サイクルを無効化 + + + Show Inbetween Values + キー以外の値を表示する + + + Hide Inbetween Values + キー以外の値を隠す + + + Change Interpolation + 補間形式を変更 + + + Change Step + ステップを変更 + FunctionToolbar @@ -1383,7 +1407,7 @@ Select FX nodes and related links before copying or cutting the selection you wa MyPaintBrushStyleChooserPage Plain color - 通常の色 + 単色 @@ -1607,6 +1631,17 @@ Select FX nodes and related links before copying or cutting the selection you wa + PlaneViewer + + Reset View + 表示をリセット + + + Fit To Window + ウィンドウに全体を表示 + + + PointParamField Y: @@ -1682,19 +1717,19 @@ Select FX nodes and related links before copying or cutting the selection you wa Save - 保存 + 保存 Discard - 変更を破棄 + 変更を破棄 Yes - はい + はい No - いいえ + いいえ Stage Schematic @@ -2018,7 +2053,7 @@ Are you sure? Replace - 置き換え + 置き換え Modify Fx Param : %1 @@ -2154,8 +2189,36 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< 3DLUTファイルの読み込みに失敗しました。 - OpenToonz 1.2 - + Custom Texture + TextureStyleChooserPage + カスタムテクスチャ + + + Current Frame: + 現在のフレーム: + + + File History + 更新履歴 + + + Plain color + VectorBrushStyleChooserPage + 単色 + + + Plain color + MyPaintBrushStyleChooserPage + 単色 + + + Plain color + SpecialStyleChooserPage + 単色 + + + OK + OK @@ -2253,7 +2316,7 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< SpecialStyleChooserPage Plain color - 通常の色 + 単色 @@ -2387,6 +2450,54 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< Cancel キャンセル + + The current palette %1 +in the studio palette has been modified. Do you want to save your changes? + スタジオパレット内のパレット %1 は変更されました。 +変更を保存しますか? + + + Save + 保存 + + + Discard + 変更を破棄 + + + Convert %1 to Studio Palette and Overwrite. +Are you sure ? + %1 をスタジオパレットに変換して上書き保存します。 +よろしいですか? + + + Yes + はい + + + No + いいえ + + + Replacing all selected palettes with the palette "%1". +Are you sure ? + 選択中の全てのパレットをパレット "%1" と置き換えます。 +よろしいですか? + + + Replacing the palette "%1" with the palette "%2". +Are you sure ? + パレット "%1" をパレット "%2" に置き換えます。 +よろしいですか? + + + Replace + 置き換える + + + Convert + 変換する + StudioPaletteViewer @@ -2645,6 +2756,17 @@ Apply + SwatchViewer + + Reset View + 表示をリセット + + + Fit To Window + ウィンドウに全体を表示 + + + TMessageViewer Errors @@ -2693,7 +2815,7 @@ Apply VectorBrushStyleChooserPage Plain color - 通常の色 + 通常の色 diff --git a/toonz/sources/translations/korean/tnzcore.ts b/toonz/sources/translations/korean/tnzcore.ts index 71d5612..4630e79 100644 --- a/toonz/sources/translations/korean/tnzcore.ts +++ b/toonz/sources/translations/korean/tnzcore.ts @@ -35,7 +35,7 @@ QObject - + colors diff --git a/toonz/sources/translations/korean/tnztools.ts b/toonz/sources/translations/korean/tnztools.ts index 1e0921f..8089f61 100644 --- a/toonz/sources/translations/korean/tnztools.ts +++ b/toonz/sources/translations/korean/tnztools.ts @@ -4,101 +4,101 @@ ArrowToolOptionsBox - + Z: - + Position: - - + + E/W: - - + + N/S: - + SO: - + Rotation: - + Global: - - + + H: - - + + V: - + Position - + ( - + ) - + Rotation - + Scale - + Maintain: - + Shear - + Center Position - + Table - + Pick: @@ -240,17 +240,17 @@ BrushToolOptionsBox - + Preset Name - + OK - + Cancel @@ -279,7 +279,7 @@ DVGui::StyleIndexLineEdit - + current @@ -631,44 +631,44 @@ FullColorBrushTool - - + + Size - + Pressure - - + + Opacity - + Hardness: - + Preset: - + Eraser - + Lock Alpha - + <custom> @@ -727,6 +727,22 @@ + FullColorFillTool + + + Fill Depth + + + + + HandToolOptionsBox + + + Reset Position + + + + HookTool @@ -796,27 +812,27 @@ PlasticTool - + Swap Edge - + Collapse Edge - + Split Edge - + Cut Mesh - + Delete Vertex @@ -1174,14 +1190,14 @@ Do you want to proceed? - - + + Min: - - + + Max: @@ -1263,78 +1279,78 @@ Do you want to proceed? - + The current column is locked. - + The current column is hidden. - + It is not possible to edit the audio column. - + Note columns can only be edited in the xsheet or timeline. - + The current tool cannot be used on a Level column. - + The current tool cannot be used on a Mesh column. - + The current tool cannot be used in Level Strip mode. - + The current tool cannot be used to edit a motion path. - - + + The current level is not editable. - + The current tool cannot be used on a Vector Level. - + The current tool cannot be used on a Toonz Level. - + The current tool cannot be used on a Raster Level. - + The current tool cannot be used on a Mesh Level. - + The current tool cannot be used on a mesh-deformed level - + The current frame is locked: any editing is forbidden. @@ -1401,7 +1417,7 @@ Do you want to proceed? RGBPickerToolOptionsBox - + Pick Screen @@ -1486,39 +1502,47 @@ Do you want to proceed? + RotateToolOptionsBox + + + Reset Rotation + + + + RulerToolOptionsBox - + X: ruler tool option - + Y: ruler tool option - + W: ruler tool option - + H: ruler tool option - + A: ruler tool option - + L: ruler tool option @@ -1550,48 +1574,48 @@ Do you want to proceed? SelectionToolOptionsBox - + H: - + V: - + Link - - + + Rotation - + E/W: - + N/S: - + Scale - + Position - + Thickness @@ -1599,22 +1623,22 @@ Do you want to proceed? ShiftTraceToolOptionBox - + Reset Previous - + Reset Following - + Previous Drawing - + Following Drawing @@ -1660,47 +1684,47 @@ Do you want to proceed? StylePickerTool - + No current level. - + Current level has no available palette. - + Palette must have more than one palette to be organized. - + Mode: - + Lines - + Areas - + Lines & Areas - + Passive Pick - + Organize Palette @@ -1708,7 +1732,7 @@ Do you want to proceed? StylePickerToolOptionsBox - + With this option being activated, the picked style will be moved to the end of the first page of the palette. @@ -1759,7 +1783,7 @@ moved to the end of the first page of the palette. - + <custom> @@ -1976,4 +2000,12 @@ moved to the end of the first page of the palette. + + ZoomToolOptionsBox + + + Reset Zoom + + + diff --git a/toonz/sources/translations/korean/toonz.ts b/toonz/sources/translations/korean/toonz.ts index 51bb25f..36854a8 100644 --- a/toonz/sources/translations/korean/toonz.ts +++ b/toonz/sources/translations/korean/toonz.ts @@ -65,42 +65,42 @@ AdjustThicknessPopup - + Adjust Thickness - + Mode: - + Scale Thickness - + Add Thickness - + Constant Thickness - + Start: - + End: - + Apply @@ -129,19 +129,6 @@ - ApplyMatchlinesCommand - - - It is not possible to apply the match lines because no column was selected. - - - - - It is not possible to apply the match lines because two columns have to be selected. - - - - AudioRecordingPopup @@ -577,12 +564,12 @@ Do you want to save your changes? BrowserPopup - + Choose - + Path %1 doesn't exists. @@ -1273,19 +1260,6 @@ What do you want to do? - CloneLevelUndo::LevelNamePopup - - - Clone Level - - - - - Level Name: - - - - ColorModelBehaviorPopup @@ -1410,94 +1384,99 @@ What do you want to do? ComboViewerPanel - + GUI Show / Hide - + Toolbar - + Tool Options Bar - + Console - + Safe Area (Right Click to Select) - + Field Guide - + Camera Stand View - + 3D View - + Camera View - + Freeze - + Preview - + Sub-camera Preview - + Untitled - + Scene: + :: Project: + + + + :: Frame: - - - + + + (Flipped) - + :: Level: - + Level: @@ -1907,12 +1886,12 @@ contain the dpi information, then the current camera dpi will be used. DVGui::ProgressDialog - + Loading "%1"... - + Importing "%1"... @@ -2173,19 +2152,6 @@ contain the dpi information, then the current camera dpi will be used. - ExportCurvePopup - - - Export Curve - - - - - Export - - - - ExportLevelPopup @@ -2619,12 +2585,12 @@ contain the dpi information, then the current camera dpi will be used. - + New Folder - + It is not possible to create the %1 folder. @@ -2665,38 +2631,6 @@ contain the dpi information, then the current camera dpi will be used. - FileData - - - It is not possible to find the %1 level. - - - - - There was an error copying %1 - - - - - FileSelection - - - Collecting assets... - - - - - - Abort - - - - - Importing scenes... - - - - FileSettingsPopup @@ -2843,12 +2777,12 @@ Do you want to overwrite it? FlipbookPanel - + Safe Area (Right Click to Select) - + Minimize @@ -2890,80 +2824,80 @@ Do you want to overwrite it? ImageViewer - - - + + + Flipbook Histogram - + Clone Preview - + Unfreeze Preview - + Freeze Preview - + Regenerate Preview - + Regenerate Frame Preview - + Load / Append Images - + Save Images - + Reset View - + Fit To Window - + Exit Full Screen Mode - + Full Screen Mode - + Show Histogram - + Swap Compared Images - - + + :: Zoom : @@ -2971,17 +2905,17 @@ Do you want to overwrite it? ImportMagpieFilePopup - + Import Magpie File - + Load - + %1 does not exist. @@ -3757,6 +3691,11 @@ Please use the frame numbers for reference. + + Drawing: + + + Unable to open the file: @@ -3779,30 +3718,17 @@ Please use the frame numbers for reference. LoadColorModelPopup - + Load Color Model - + Frames : - - Load - - - - - LoadCurvePopup - - - Load Curve - - - - + Load @@ -3861,84 +3787,84 @@ Please use the frame numbers for reference. LoadLevelPopup - + Load Level - + Load - + TLV Caching Behavior - + Load Subsequence Level - + Arrangement in Xsheet - + (FILE DOES NOT EXIST) - + On Demand - + All Icons - + All Icons & Images - - + + From: - - + + To: - + Step: - + Inc: - + Level Name: - + Frames: - + :: @@ -3946,63 +3872,45 @@ Please use the frame numbers for reference. LoadScenePopup - + Load Scene - + Load - + is not a scene file. - + does not exist. - LoadSettingsPopup - - - Load Cleanup Settings - - - - - Load - - - - - %1 does not exist. - - - - LoadSubScenePopup - + Load Sub-Xsheet - + Load - + is not a scene file. - + does not exist. @@ -4129,2143 +4037,2176 @@ Please use the frame numbers for reference. MainWindow - + Untitled - + Cleanup - + PltEdit - + InknPaint - + Xsheet - + About OpenToonz - + Close - + Cannot delete - + &New Scene - + &Load Scene... - + &Save Scene - + &Save Scene As... - + &Save All - + &Revert Scene - + &Load Folder... - + &Load As Sub-xsheet... - + &Open Recent Scene File - + &Open Recent Level File - + &Clear Recent Scene File List - + &Clear Recent level File List - + &New Level... - + &New Vector Level - + New Vector Level - + &New Toonz Raster Level - + New Toonz Raster Level - + &New Raster Level - + New Raster Level - + &Load Level... - + &Save Level - + &Save All Levels - + &Save Level As... - + &Export Level... - + &Convert File... - + &Save Palette As... - + &Save Palette - + &Load Color Model... - + &Import Magpie File... - + &New Project... - + &Project Settings... - + &Save Default Settings - + &Output Settings... - + &Preview Settings... - + &Render - + &Fast Render to MP4 - + &Preview - + &Export Soundtrack - + &Save Previewed Frames - + &Regenerate Preview - + &Regenerate Frame Preview - + &Clone Preview - + &Freeze//Unfreeze Preview - + Freeze Preview - + Unfreeze Preview - + &Save As Preset - + &Preferences... - + &Configure Shortcuts... - + &Print Xsheet - + Run Script... - + Open Script Console... - + &Print Current Frame... - + &Quit - + Reload qss - + &Load Recent Image Files - + &Clear Recent Flipbook Image List - + Preview Fx - + &Select All - + &Invert Selection - + &Undo - + &Redo - + &Cut - + &Copy - + &Paste Insert - + &Paste Insert Above/After - + &Merge - + &Paste Into - + &Paste Color && Name - + Paste Color - + Paste Name - + Get Color from Studio Palette - + Toggle Link to Studio Palette - + Remove Reference to Studio Palette - + &Delete - + &Insert - + &Insert Above/After - + &Group - + &Ungroup - + &Bring to Front - + &Bring Forward - - &Send Back + + &Send to Back - + &Send Backward - + &Enter Group - + &Exit Group - + &Remove Vector Overflow - + &Touch Gesture Control - + &Define Scanner... - + &Scan Settings... - + &Scan - + &Autocenter... - + &Set Cropbox - + &Reset Cropbox - + &Cleanup Settings... - + &Preview Cleanup - + &Camera Test - + &Opacity Check - + &Cleanup - + &Camera Capture... - + &Add Frames... - + &Renumber... - + &Replace Level... - + &Revert to Cleaned Up - + &Reload - + &Expose in Xsheet - + &Display in Level Strip - + &Level Settings... - + Adjust Levels... - + Adjust Thickness... - + &Antialias... - + &Binarize... - + &Brightness and Contrast... - + &Color Fade... - + &Capture - + &Canvas Size... - + &Info... - + &View... - + &Remove All Unused Levels - + &Replace Parent Directory... - + &Scene Settings... - - + + &Camera Settings... - + &Open Sub-xsheet - + &Close Sub-xsheet - + Explode Sub-xsheet - + Collapse - + &Toggle Edit In Place - + Toggle Edit in Place - + &Save Sub-xsheet As... - + Resequence - + Clone Sub-xsheet - + &Apply Match Lines... - + &Merge Tlv Levels... - + &Delete Match Lines - + &Delete Lines... - + &Merge Levels - + &New FX... - + &New Output - + &Edit FX... - + Insert Frame - + Remove Frame - + Insert Multiple Keys - + Remove Multiple Keys - + New Note Level - + Remove Empty Columns - + &Apply Lip Sync Data to Column - + Toggle XSheet Toolbar - + &Reverse - + &Swing - + &Random - + &Autoexpose - + &Repeat... - + &Reset Step - + &Increase Step - + &Decrease Step - + &Step 2 - + &Step 3 - + &Step 4 - + &Each 2 - + &Each 3 - + &Each 4 - + &Roll Up - + &Roll Down - + &Time Stretch... - + &Duplicate Drawing - + &Autorenumber - + &Clone - + Drawing Substitution Forward - + Drawing Substitution Backward - + Similar Drawing Substitution Forward - + Similar Drawing Substitution Backward - + 1's - + 2's - + 3's - + 4's - + Reframe with Empty Inbetweens... - + Auto Input Cell Number... - + &Fill In Empty Cells - + &Set Key - + &Paste Numbers - + &Camera Box - + &Table - + &Field Guide - + &Raster Bounding Box - + &Field Guide in Capture Window - + &Safe Area - + &Camera BG Color - + &Guide - + &Ruler - + &Transparency Check - + &Ink Check - + &Ink#1 Check - + &Paint Check - + Inks &Only - + &Fill Check - + &Black BG Check - + &Gap Check - + Shift and Trace - + Edit Shift - + No Shift - + Reset Shift - + &Visualize Vector As Raster - + &Histogram - + Link Flipbooks - + Play - + Loop - + Pause - + First Frame - + Last Frame - + Previous Frame - + Next Frame - + Next Drawing - + Prev Drawing - + Next Step - + Prev Step - + Red Channel - + Green Channel - + Blue Channel - + Alpha Channel - + Red Channel Greyscale - + Green Channel Greyscale - + Blue Channel Greyscale - + Compare to Snapshot - + Toggle Autofill on Current Palette Color - + &Lock Room Panes - + &Export - + &File Browser - + &Flipbook - + &Function Editor - + &Level Strip - + &Palette - + &Palette Gizmo - + &Delete Unused Styles - + &Tasks - + &Batch Servers - + &Message Center - + &Color Model - + &Studio Palette - + &Schematic - + &Cleanup Settings - + &Scene Cast - + &Style Editor - + &Toolbar - + &Tool Option Bar - + &Command Bar - + &Viewer - + &LineTest Capture - + &LineTest Viewer - + &Xsheet - + &Timeline - + &ComboViewer - + &History - + Record Audio - + &Reset to Default Rooms - + Toggle Maximize Panel - + Toggle Main Window's Full Screen Mode - + &About OpenToonz... - + &Startup Popup... - + &Blend colors - + Onion Skin Toggle - + Zero Thick Lines - + Toggle Cursor Size Outline - + Toggle Current Time Indicator - + Duplicate - + Show Folder Contents - + Convert... - + Collect Assets - + Import Scene - + Export Scene... - + Convert to Vectors... - + Vectors to Toonz Raster - + Replace Vectors with Simplified Vectors - + Tracking... - + Remove Level - + Add As Render Task - + Add As Cleanup Task - + Select All Keys in this Frame - + Select All Keys in this Column - + Select All Keys - + Select All Following Keys - + Select All Previous Keys - + Select Previous Keys in this Column - + Select Following Keys in this Column - + Select Previous Keys in this Frame - + Select Following Keys in this Frame - + Invert Key Selection - + Set Acceleration - + Set Deceleration - + Set Constant Speed - + Reset Interpolation - + Linear Interpolation - + Speed In / Speed Out Interpolation - + Ease In / Ease Out Interpolation - + Ease In / Ease Out (%) Interpolation - + Exponential Interpolation - + Expression Interpolation - + File Interpolation - + Constant Interpolation - + Fold Column - + Show This Only - + Show Selected - + Show All - + Hide Selected - + Hide All - + Toggle Show/Hide - + ON This Only - + ON Selected - + ON All - + OFF All - + OFF Selected - + Swap ON/OFF - + Lock This Only - + Lock Selected - + Lock All - + Unlock Selected - + Unlock All - + Swap Lock/Unlock - + Hide Upper Columns - + Separate Colors... - + Animate Tool - + Selection Tool - + Brush Tool - + Geometric Tool - + Type Tool - + Fill Tool - + Paint Brush Tool - + Eraser Tool - + Tape Tool - + Style Picker Tool - + RGB Picker Tool - + Control Point Editor Tool - + Pinch Tool - + Pump Tool - + Magnet Tool - + Bender Tool - + Iron Tool - + Cutter Tool - + Skeleton Tool - + Tracker Tool - + Hook Tool - + Zoom Tool - + Rotate Tool - + Hand Tool - + Plastic Tool - + Ruler Tool - + Finger Tool - + Zoom In - + Zoom Out - + + Reset View - + + Fit to Window - + + + Reset Zoom + + + + + + Reset Rotation + + + + + + Reset Position + + + + + Actual Pixel Size - + + Flip Viewer Horizontally - + + Flip Viewer Vertically - + Show//Hide Full Screen - + Full Screen Mode - + Exit Full Screen Mode - + Refresh Folder Tree - + Refresh - + Global Key - + Brush size - Increase max - + Brush size - Decrease max - + Brush size - Increase min - + Brush size - Decrease min - + Brush hardness - Increase - + Brush hardness - Decrease - + SnapSensitivity - + Auto Group - + Break sharp angles - + Frame range - + Inverse kinematics - + Invert - + Manual - + Onion skin - + Orientation - + Pencil Mode - + Preserve Thickness - + Pressure Sensitivity - + Segment Ink - + Selective - + Brush Tool - Draw Order - + Smooth - + Snap - + Auto Select Drawing - + Auto Fill - + Join Vectors - + Show Only Active Skeleton - + + Brush Tool - Eraser (Raster option) + + + + + Brush Tool - Lock Alpha + + + + Brush Preset - + Geometric Shape - + Geometric Edge - + Mode - + Mode - Areas - + Mode - Lines - + Mode - Lines & Areas - + Type - + Type - Normal - + Type - Rectangular - + Type - Freehand - + Type - Polyline - + TypeTool Font - + TypeTool Size - + TypeTool Style - + Active Axis - + Active Axis - Position - + Active Axis - Rotation - + Active Axis - Scale - + Active Axis - Shear - + Active Axis - Center - + Active Axis - All - + Build Skeleton Mode - + Animate Mode - + Inverse Kinematics Mode - + None Pick Mode - + Column Pick Mode - + Pegbar Pick Mode - + Pick Screen - + Create Mesh - + Fill Tool - Autopaint Lines - + Fill Tool - Areas - + Fill Tool - Lines - + Style Picker Tool - Areas - + Style Picker Tool - Lines - + Toggle FX/Stage schematic @@ -6405,72 +6346,45 @@ N.B. Duplicated commands will be ignored. Only the last one will appear in the m - MergeCmappedCommand - - - It is not possible to merge tlv columns because no column was selected. - - - - - It is not possible to merge tlv columns because at least two columns have to be selected. - - + MergeCmappedDialog - - - Merging Tlv Levels... + + Level %1 already exists! Are you sure you want to overwrite it? - - - MergeCmappedDialog - + Ok - - + + Cancel - + Merge Tlv Levels - + Save in: - + File Name: - + Apply - MergeColumnsCommand - - - It is not possible to execute the merge column command because no column was selected. - - - - - It is not possible to execute the merge column command because only one columns is selected. - - - - MeshifyPopup @@ -6569,9 +6483,9 @@ What do you want to do? - MyViewFinder + MyVideoWidget - + Camera is not available @@ -6639,87 +6553,87 @@ What do you want to do? - + Standard - + Improved - + High - + Triangle filter - + Mitchell-Netravali filter - + Cubic convolution, a = .5 - + Cubic convolution, a = .75 - + Cubic convolution, a = 1 - + Hann window, rad = 2 - + Hann window, rad = 3 - + Hamming window, rad = 2 - + Hamming window, rad = 3 - + Lanczos window, rad = 2 - + Lanczos window, rad = 3 - + Gaussian convolution - + Closest Pixel (Nearest Neighbor) - + Bilinear @@ -6908,34 +6822,34 @@ The parameters to be saved are: - + Add preset - + Enter the name for the output settings preset. - + Add output settings preset - + <custom> - + Remove preset - - - + + + Warning @@ -6943,7 +6857,7 @@ The parameters to be saved are: OverwriteDialog - + Level "%1" already exists. What do you want to do? @@ -6957,7 +6871,6 @@ What do you want to do? - Warning! @@ -7007,395 +6920,384 @@ What do you want to do? File %1 exists as well; please choose a different suffix. - - - Overwrite - - - - - Skip - - - - - File "%1" already exists. -Do you want to overwrite it? - - PencilTestPopup - + No frame id - + Camera Capture - + Refresh - + File - + Options - + Save images as they are captured - + Image adjust - + Upside down - + Capture white BG - + Display - + Show onion skin - + Load Selected Image - + Interval timer - + Use interval timer - - + + Capture [Return key] - + Close - + Subfolder - + + Subcamera + + + + Next Level - + Previous Level - + Color - + Grayscale - + Black & White - + Video Capture Filter Settings... - + Camera: - + Resolution: - + Save In: - + Name: - + Frame: - + File Type: - + Color type: - + BG reduction: - + Opacity(%): - + Interval(sec): - + No camera found - + - Select camera - - - + + No image selected. Please select an image in the Xsheet. - + The selected image is not in a raster level. - + The selected image size does not match the current camera settings. - - + + Start Capturing [Return key] - + Stop Capturing [Return key] - + No level name specified: please choose a valid level name - + Folder %1 doesn't exist. Do you want to create it? - + Unable to create - + The level name specified is already used: please choose a different level name. - + The save in path specified does not match with the existing level. - - + + The captured image size does not match with the existing level. - - + + File %1 does exist. Do you want to overwrite it? - + Failed to load %1. - - - - - + + + + + UNDEFINED WARNING - + The level is not registered in the scene, but exists in the file system. - + WARNING : Image size mismatch. The saved image size is %1 x %2. - - - - + + + + WARNING - - + + Frame %1 exists. - - + + Frames %1 exist. - - + + OVERWRITE 1 of - - + + ADD to - - + + %1 frame - - + + %1 frames - + The level will be newly created. - + NEW - + The level is already registered in the scene. - + NOTE : The level is not saved. - + WARNING : Failed to get image size of the existing level %1. - + WARNING : Image size mismatch. The existing level size is %1 x %2. - + WARNING : Level name conflicts. There already is a level %1 in the scene with the path %2. - + WARNING : Image size mismatch. The size of level with the same name is is %1 x %2. - + WARNING : Level path conflicts. There already is a level with the path %1 in the scene with the name %2. - + WARNING : Image size mismatch. The size of level with the same path is %1 x %2. @@ -7404,133 +7306,133 @@ WARNING : Image size mismatch. The size of level with the same path is %1 x %2.< PencilTestSaveInFolderPopup - + Create the Destination Subfolder to Save - + Set As Default - + Set the current "Save In" path as the default. - + Create Subfolder - + Infomation - + Subfolder Name - + Auto Format: - + Show This on Launch of the Camera Capture - + Save Scene in Subfolder - + OK - + Cancel - + C- + Sequence + Scene - + Sequence + Scene - + Episode + Sequence + Scene - + Project + Episode + Sequence + Scene - + Save the current scene in the subfolder. Set the output folder path to the subfolder as well. - + Save In: - + Project: - + Episode: - + Sequence: - + Scene: - + Subfolder Name: - + Subfolder name should not be empty. - + Subfolder name should not contain following characters: * . " / \ [ ] : ; | = , - + Folder %1 already exists. - + It is not possible to create the %1 folder. @@ -8700,20 +8602,6 @@ in non alpha-enabled image format. - Previewer - - - The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | - - - - - File %1 already exists. -Do you want to overwrite it? - - - - ProcessingTab @@ -8775,38 +8663,38 @@ Do you want to overwrite it? ProjectCreatePopup - + New Project - + OK - + Cancel - + Project Name cannot be empty or contain any of the following characters: \ / : * ? " < > | - + Bad project name: '%1' looks like an absolute file path - + Project '%1' already exists - + It is not possible to create the %1 project. @@ -8824,17 +8712,17 @@ Do you want to overwrite it? - + Append $scenepath to +drawings - + Append $scenepath to +inputs - + Append $scenepath to +extras @@ -8842,7 +8730,7 @@ Do you want to overwrite it? ProjectSettingsPopup - + Project Settings @@ -8850,65 +8738,105 @@ Do you want to overwrite it? PsdSettingsPopup - + Load PSD File - + Name: - + Path: - + + Single Image + + + + + Frames + + + + + Columns + + + + Expose in a Sub-xsheet - + FileName#LayerName - + LayerName - + Load As: - + Level Name: - + Group Option - + Ignore groups - + Expose layers in a group as columns in a sub-xsheet - + Expose layers in a group as frames in a column + + + OK + + + + + Cancel + + + + + Flatten visible document layers into a single image. Layer styles are maintained. + + + + + Load document layers as frames into a single xsheet column. + + + + + Load document layers as xhseet columns. + + QApplication @@ -8918,12 +8846,12 @@ Do you want to overwrite it? - + Load Scene - + Quit @@ -8937,19 +8865,19 @@ Do you want to overwrite it? - - + + - - - - + + + + - - - + + + Overwrite @@ -8959,8 +8887,8 @@ Do you want to overwrite it? - - + + @@ -8971,9 +8899,9 @@ Do you want to overwrite it? - - - + + + @@ -8984,15 +8912,23 @@ Do you want to overwrite it? + + + Always Overwrite in This Scene + + + Apply - - + + + + @@ -9005,33 +8941,33 @@ Do you want to overwrite it? - - - - - - - - - - - + + + + + + + + + + + - - + + - - - + + + - + Cancel @@ -9044,7 +8980,7 @@ Do you want to overwrite it? - + @@ -9063,17 +8999,32 @@ Do you want to overwrite it? + + Save Curve + + + It is not possible to save the curve. + + Load Curve + + + It is not possible to load the curve. - + + Export Curve + + + + It is not possible to export data. @@ -9094,35 +9045,126 @@ Do you want to overwrite it? - - The scene is not yet saved and the output destination is set to $scenefolder. -Save the scene first. + + The scene is not yet saved and the output destination is set to $scenefolder. +Save the scene first. + + + + + It is not possible to create folder : %1 + + + + + It is not possible to create a folder. + + + + + Rendering frame %1 / %2 + RenderListener + + + + + Precomputing %1 Frames + RenderListener + + + + + + of %1 + RenderListener + + + + + Finalizing render, please wait. + RenderListener + + + + + Aborting render... + RenderListener + + + + + + + The resolution of the output camera does not fit with the options chosen for the output file format. + + + + + Building Schematic... + RenderCommand + + + + + column + MultimediaProgressBar label (mode name) + + + + + layer + MultimediaProgressBar label (mode name) + + + + + Rendering %1%2, frame %3 / %4 + MultimediaProgressBar label + + + + + Rendering %1 frames of %2 + MultimediaProgressBar + + + + + %1 of %2 + MultimediaProgressBar - [totalframe] of [path] + + + + + Aborting render... + MultimediaProgressBar - - It is not possible to create folder : %1 + + FFmpeg not found, please set the location in the Preferences and restart. - - It is not possible to create a folder. + + It is not possible to write the output: the file + RenderCommand - - - - The resolution of the output camera does not fit with the options chosen for the output file format. + + s are read only. + RenderCommand - - FFmpeg not found, please set the location in the Preferences and restart. + + is read only. + RenderCommand - + It is not possible to complete the rendering. @@ -9162,11 +9204,16 @@ Save the scene first. - + Cleanup Settings + + Save Cleanup Settings + + + The cleanup settings file for the %1 level already exists. Do you want to overwrite it? @@ -9174,12 +9221,22 @@ Save the scene first. - - + + Don't Overwrite + + Load Cleanup Settings + + + + + %1 does not exist. + + + @@ -9195,9 +9252,12 @@ Do you want to save your changes? + + - + + Save @@ -9232,7 +9292,7 @@ Are you sure ? - + Delete @@ -9279,7 +9339,7 @@ Are you sure ? - + Saving previewed frames.... @@ -9548,13 +9608,15 @@ Do you want to import it or load it from its original location? - + Import + + - + Load @@ -9660,41 +9722,41 @@ Do you want to overwrite it? - - - + + + Couldn't save %1 - + The level %1 already exists. Do you want to overwrite it? - + Overwrite Palette - + Don't Overwrite Palette - + The soundtrack %1 already exists. Do you want to overwrite it? - + File %1 doesn't look like a TOONZ Scene - + A prior save of Scene '%1' was critically interupted. A partial save file was generated and changes may be manually salvaged from '%2'. @@ -9703,33 +9765,33 @@ Do you wish to continue loading the last good save or stop and try to salvage th - + Continue - + It is not possible to load the scene %1 because it does not belong to any project. - + The Scene '%1' belongs to project '%2'. What do you want to do? - + Import Scene - + Change Project - + There were problems loading the scene %1. @@ -9737,232 +9799,239 @@ What do you want to do? - + There were problems loading the scene %1. Some levels have not been loaded because their version is not supported - + This scene is incompatible with pixels only mode of the current OpenToonz version. What would you like to do? - + Turn off pixels only mode - + Keep pixels only mode on and resize the scene - + File '%1' will reload level '%2' as a duplicate column in the xsheet. Allow duplicate? - + Allow - + Allow All Dups - + No to All Dups - - + + It is not possible to load the level %1 - + + + %1 more level(s) + + + + + The following level(s) use path with $scenefolder alias. - + They will not be opened properly when you load the scene next time. What do you want to do? - + Copy the levels to correspondent paths - + Decode all $scenefolder aliases - + Save the scene only - - + + + File %1 already exists. Do you want to overwrite it? - + Overwrite for All - + Don't Overwrite for All - - + + Failed to overwrite %1 - - + + No Current Level - - + + No Current Scene - + Save the scene first - + Save level Failed - + Are you sure you want to save the Default Settings? - + It is not possible to load the %1 level. - + The scene %1 doesn't exist. - + Revert: the current scene has been modified. Are you sure you want to revert to previous version? - + Revert - + OK - + The copied selection cannot be pasted in the current drawing. - - - + + + Paste : Level %1 : Frame - + Delete Frames : Level %1 : Frame - + Cut Frames : Level %1 : Frame - + Add Frames : Level %1 : Frame - + Renumber : Level %1 - + Insert : Level %1 - + Reverse : Level %1 - + Swing : Level %1 - + Step %1 : Level %2 - + Each %1 : Level %2 - + Duplicate : Level %1 - + Move Level to Scene : Level %1 - + Inbetween : Level %1, @@ -10057,24 +10126,36 @@ Are you sure you want to revert to previous version? - + Clone Level : %1 > %2 - + Clone Levels : - + + Clone Level + CloneLevelUndo::LevelNamePopup + + + + + Level Name: + CloneLevelUndo::LevelNamePopup + + + + Ok - + FlipBook @@ -10174,45 +10255,45 @@ undefined error. - + The file name already exists. Do you want to overwrite it? - + Deleting "%1". Are you sure? - + The selected scene could not be found. - + Script Console - + Hide Zero Thickness Lines - + Show Zero Thickness Lines - + Hide cursor size outline - + Show cursor size outline @@ -10264,7 +10345,7 @@ Are you sure? - + Create project @@ -10326,46 +10407,46 @@ Are you sure? - + Do you want to expose the renamed level ? - + Expose - + Don't expose - + Nothing to replace: no cells or columns selected. - + The palette %1 already exists. Do you want to overwrite it? - + Cannot load Color Model in current palette. - + Choose Folder - - - + + + File Browser @@ -10439,6 +10520,17 @@ The operation cannot be undone: are you sure? + + Collecting assets... + + + + + + Abort + + + There are no assets to collect @@ -10476,6 +10568,11 @@ The operation cannot be undone: are you sure? + + Importing scenes... + + + No scene imported @@ -10553,7 +10650,7 @@ The operation cannot be undone: are you sure? - + Rename Cell at Column %1 Frame %2 @@ -10647,12 +10744,12 @@ to use the duplicate command in the xsheet / timeline. - + Xsheet - + Timeline @@ -10667,198 +10764,231 @@ to use the duplicate command in the xsheet / timeline. - + Use Level Extender - + Modify Sound Level - + Move keyframe handle : %1 Handle of the keyframe %2 - + Move Columns - + Change Pegbar - + Change Text at Column %1 Frame %2 - + Toggle cycle of %1 - + Move Level - - + + Schematic - + Stage Schematic - + Fx Schematic - + Palette - - + + Studio Palette - - + + Style Editor - - + + Viewer - + Command Bar - + Tool Options - + Tasks - + Batch Servers - + Scene Cast - - + + + Export - - + + Function Editor - - + + Message Center - + LineTest Viewer - + LineTest Capture - - + + Combo Viewer - - + + History - - Level + + + Fx Settings + + + + + It is not possible to execute the merge column command because no column was selected. + + + + + It is not possible to execute the merge column command because only one columns is selected. + + + + + It is not possible to apply the match lines because no column was selected. - - already exists! Are you sure you want to overwrite it? + + It is not possible to apply the match lines because two columns have to be selected. - + Match lines can be applied to Toonz raster levels only. - + It is not possible to merge tlv columns containing more than one level - + The level you are using has not a valid palette. - - + + It is not possible to merge tlv columns because no column was selected. + + + + + It is not possible to merge tlv columns because at least two columns have to be selected. + + + + + + Merging Tlv Levels... + + + + + It is not possible to delete lines because no column, cell or level strip frame was selected. - + The selected column is empty. - + Selected cells must be in the same column. - + Match lines can be deleted from Toonz raster levels only @@ -11040,43 +11170,43 @@ to use the duplicate command in the xsheet / timeline. - + Cannot open menubar settings template file. Re-installing Toonz will solve this problem. - + No more Undo operations available. - + No more Redo operations available. - + The rooms will be reset the next time you run Toonz. - + Visit Web Site - + An update is available for this software. Visit the Web site for more information. - + Check for the latest version on launch. - + https://opentoonz.github.io/e/ @@ -11091,7 +11221,32 @@ Visit the Web site for more information. - + + Warning! + OverwriteDialog + + + + + Overwrite + OverwriteDialog + + + + + Skip + OverwriteDialog + + + + + File "%1" already exists. +Do you want to overwrite it? + OverwriteDialog + + + + Selected folders don't belong to the current project. Do you want to import them or load from their original location? @@ -11101,6 +11256,67 @@ Do you want to import them or load from their original location? Cannot Read XML File + + + It is not possible to find the %1 level. + FileData + + + + + There was an error copying %1 + FileData + + + + + Save Previewed Images + + + + + The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | + + + + + Unsopporter raster format, cannot save + + + + + Cannot create %1 : %2 + Previewer warning %1:path %2:message + + + + + Cannot create %1 + Previewer warning %1:path + + + + + Saved %1 frames out of %2 in %3 + Previewer %1:savedframes %2:framecount %3:filepath + + + + + Canceled! + Previewer + + + + + No frame to save! + + + + + Already saving! + + ReframePopup @@ -11225,14 +11441,6 @@ The audio file will not be included in the rendered clip. - RenderListener - - - Finalizing render, please wait. - - - - RenumberPopup @@ -11259,17 +11467,17 @@ The audio file will not be included in the rendered clip. ReplaceLevelPopup - + Replace Level - + Replace - + File not found @@ -11278,12 +11486,12 @@ The audio file will not be included in the rendered clip. ReplaceParentDirectoryPopup - + Replace Parent Directory - + Replace @@ -12335,19 +12543,6 @@ Please commit or revert changes first. - SaveCurvePopup - - - Save Curve - - - - - Save - - - - SaveImagesPopup @@ -12363,12 +12558,12 @@ Please commit or revert changes first. SaveLevelAsPopup - + Save Level - + Save @@ -12376,12 +12571,12 @@ Please commit or revert changes first. SavePaletteAsPopup - + Save Palette - + Save @@ -12430,40 +12625,14 @@ Please commit or revert changes first. - SavePreviewedPopup - - - Save Previewed Images - - - - - Save - - - - SaveSceneAsPopup - + Save Scene - - Save - - - - - SaveSettingsPopup - - - Save Cleanup Settings - - - - + Save @@ -12471,12 +12640,12 @@ Please commit or revert changes first. SaveSubSceneAsPopup - + Sub-xsheet - + Save @@ -12608,82 +12777,92 @@ Please commit or revert changes first. - + + Flip View + + + + + Reset View + + + + Vector Guided Drawing - + Off - + Closest Drawing - + Farthest Drawing - + All Drawings - + Save Previewed Frames - + Regenerate Preview - + Regenerate Frame Preview - + Show %1 - + Hide %1 - + Table - + Select %1 - + Show / Hide - + Select Camera - + Select Pegbar - + Select Column @@ -12691,79 +12870,84 @@ Please commit or revert changes first. SceneViewerPanel - + Safe Area (Right Click to Select) - + Field Guide - + Camera Stand View - + 3D View - + Camera View - + Freeze - + Preview - + Sub-camera Preview - + Untitled - + Scene: - :: Frame: + :: Project: - - - :: Zoom : + + :: Frame: + :: Zoom : + + + + + (Flipped) - + :: Level: - + Level: @@ -13447,18 +13631,18 @@ Assign to '%3'? - - Choose Project + + Create a New Scene - - Create a New Scene + + Current Project - Open Scene + Recent Scenes [Project] @@ -13533,115 +13717,120 @@ Assign to '%3'? - + pixel - + cm - + mm - + inch - + field - + Save In: - + Camera Size: - + Units: - + Minutes - + No Recent Scenes - + The name cannot be empty. - + The chosen file path is not valid. - + The width must be greater than zero. - + The height must be greater than zero. - + The frame rate must be 1 or more. - + Preset name - + Enter the name for %1 - + Error : Preset Name is Invalid - + The preset name must not use ','(comma). - + Bad camera preset - + '%1' doesn't seem to be a well formed camera preset. Possibly the preset file has been corrupted + + + The selected scene project '%1' is not in the Current Project list and may not open automatically. + + TApp @@ -14373,87 +14562,87 @@ Please refer to the user guide for details. XsheetGUI::CellArea - + Click to select keyframe, drag to move it - + Click and drag to set the acceleration range - + Click and drag to set the deceleration range - + Set the cycle of previous keyframes - + Click and drag to move the selection - + Click and drag to play - + Click and drag to repeat selected cells - + Reframe - + Step - + Each - + Edit Cell Numbers - + Replace Level - + Replace with - + Paste Special - + Edit Image - + Open Memo - + Delete Memo @@ -14773,52 +14962,62 @@ Hold F3 Key on the Viewer to Show This Frame Only XsheetViewer - + Untitled - + Scene: - + + :: Project: + + + + Frames - + + Frame + + + + (Sub) - + Level: - + Selected: - + frame : - + frames * - + column - + columns diff --git a/toonz/sources/translations/korean/toonzlib.ts b/toonz/sources/translations/korean/toonzlib.ts index 48a3131..13db990 100644 --- a/toonz/sources/translations/korean/toonzlib.ts +++ b/toonz/sources/translations/korean/toonzlib.ts @@ -213,113 +213,113 @@ - + Add Fx : - + Insert Fx : - - + + Create Linked Fx : %1 - + Replace Fx : - + Unlink Fx : %1 - - %2 - + Make Macro Fx : %1 - + Explode Macro Fx : %1 - + Create Output Fx - + Connect to Xsheet : - + Disconnect from Xsheet : - + Delete Link - + Delete Fx Node : %1 - + Paste Fx : - + Disconnect Fx - + Connect Fx : %1 - %2 - + Rename Fx : %1 > %2 - + Group Fx - + Ungroup Fx - + Rename Group : %1 > %2 - + Set Keyframe - + Remove Keyframe - + Cycle diff --git a/toonz/sources/translations/korean/toonzqt.ts b/toonz/sources/translations/korean/toonzqt.ts index 4c5867e..cf54816 100644 --- a/toonz/sources/translations/korean/toonzqt.ts +++ b/toonz/sources/translations/korean/toonzqt.ts @@ -68,22 +68,22 @@ AdjustPaletteDialog - + Adjust Current Level to This Palette - + Tolerance - + Apply - + Cancel @@ -264,19 +264,6 @@ Possibly the preset file has been corrupted - DVGui - - - OK - - - - - Cancel - - - - DVGui::CleanupColorField @@ -384,7 +371,7 @@ Possibly the preset file has been corrupted DVGui::ProgressDialog - + OpenToonz @@ -392,7 +379,7 @@ Possibly the preset file has been corrupted DVGui::RadioButtonDialog - + OpenToonz @@ -887,7 +874,7 @@ Possibly the preset file has been corrupted FunctionSegmentViewer - + Linear @@ -918,7 +905,7 @@ Possibly the preset file has been corrupted - + File @@ -938,74 +925,74 @@ Possibly the preset file has been corrupted - + Apply - + From - + To - + Step - - + + < - - + + > - + Speed - + Ease - + Ease% - + Expo - + Expr - + Const - + Similar - + ???? @@ -1021,7 +1008,7 @@ Possibly the preset file has been corrupted FunctionSheet - + Function Editor @@ -1029,75 +1016,105 @@ Possibly the preset file has been corrupted FunctionSheetCellViewer - + Delete Key - + Set Key - + Linear Interpolation - + Speed In / Speed Out Interpolation - + Ease In / Ease Out Interpolation - + Ease In / Ease Out (%) Interpolation - + Exponential Interpolation - + Expression Interpolation - + File Interpolation - + Constant Interpolation - + Step 1 - + Step 2 - + Step 3 - + Step 4 + + + Activate Cycle + + + + + Deactivate Cycle + + + + + Show Inbetween Values + + + + + Hide Inbetween Values + + + + + Change Interpolation + + + + + Change Step + + FunctionToolbar @@ -1115,17 +1132,17 @@ Possibly the preset file has been corrupted FunctionTreeModel - + Stage - + FX - + Plastic Skeleton @@ -1133,34 +1150,34 @@ Possibly the preset file has been corrupted FunctionTreeView - + Table - + Save Curve - + Load Curve - + Export Data - - + + Show Animated Only - - + + Show All @@ -1168,32 +1185,32 @@ Possibly the preset file has been corrupted FxColumnPainter - + &Disconnect from Xsheet - + &Connect to Xsheet - + &Paste Add - + &Preview - + &Uncache Fx - + &Cache FX @@ -1201,17 +1218,17 @@ Possibly the preset file has been corrupted FxOutputPainter - + Output - + &Delete - + &Activate @@ -1219,77 +1236,77 @@ Possibly the preset file has been corrupted FxPainter - + &Open Group - + &Paste Replace - + &Paste Add - + &Delete - + &Disconnect from Xsheet - + &Connect to Xsheet - + &Create Linked FX - + &Unlink - + &Make Macro FX - + &Explode Macro FX - + &Open Macro FX - + &Save As Preset... - + &Preview - + &Uncache FX - + &Cache FX @@ -1297,17 +1314,17 @@ Possibly the preset file has been corrupted FxPalettePainter - + &Disconnect from Xsheet - + &Connect to Xsheet - + &Preview @@ -1315,12 +1332,12 @@ Possibly the preset file has been corrupted FxSchematicLink - + &Delete - + &Paste Insert @@ -1328,7 +1345,7 @@ Possibly the preset file has been corrupted FxSchematicOutputNode - + Output @@ -1336,12 +1353,12 @@ Possibly the preset file has been corrupted FxSchematicPort - + &Disconnect from Xsheet - + &Connect to Xsheet @@ -1349,19 +1366,19 @@ Possibly the preset file has been corrupted FxSchematicScene - + Cannot Paste Insert a selection of unconnected FX nodes. Select FX nodes and related links before copying or cutting the selection you want to paste. - + Cannot Paste Add a selection of unconnected FX nodes. Select FX nodes and related links before copying or cutting the selection you want to paste. - + Cannot Paste Replace a selection of unconnected FX nodes. Select FX nodes and related links before copying or cutting the selection you want to paste. @@ -1370,7 +1387,7 @@ Select FX nodes and related links before copying or cutting the selection you wa FxSchematicXSheetNode - + XSheet @@ -1378,37 +1395,37 @@ Select FX nodes and related links before copying or cutting the selection you wa FxSettings - + &Camera Preview - + &Preview - + &White Background - + &Black Background - + &Checkered Background - + Fx Settings - + : @@ -1416,17 +1433,17 @@ Select FX nodes and related links before copying or cutting the selection you wa FxXSheetPainter - + XSheet - + &Paste Add - + &Preview @@ -1506,14 +1523,6 @@ Select FX nodes and related links before copying or cutting the selection you wa - MyPaintBrushStyleChooserPage - - - Plain color - - - - NewWordDialog @@ -1534,139 +1543,139 @@ Select FX nodes and related links before copying or cutting the selection you wa PaletteViewer - - - + + + &Save Palette As - - - + + + &Save Palette - - + + Lock Palette - + &Lock Palette - + Options - + &Small Thumbnails View - + &Medium Thumbnails View - + &Large Thumbnails View - + &List View - + Style Name - + StudioPalette Name - + Both Names - + &New Page - - + + &New Style - - + + &Move Palette - + &Palette Gizmo - + New Page - + Delete Page - + Overwrite - + Don't Overwrite - + Palette - + Level Palette: - + Cleanup Palette - + Studio Palette - + (Color Model: - + ) @@ -1674,22 +1683,22 @@ Select FX nodes and related links before copying or cutting the selection you wa PaletteViewerGUI::PageViewer - + - No Styles - - + Name Editor - + New Style - + New Page @@ -1742,6 +1751,19 @@ Select FX nodes and related links before copying or cutting the selection you wa + PlaneViewer + + + Reset View + + + + + Fit To Window + + + + PointParamField @@ -1771,11 +1793,10 @@ Are you sure? - - - - - + + + + Cancel @@ -1922,12 +1943,12 @@ Are you sure? - + Stage Schematic - + FX Schematic @@ -1937,30 +1958,27 @@ Are you sure? - - Save - - - - - Discard + + Plain color + VectorBrushStyleChooserPage - - - Yes + + Custom Texture + TextureStyleChooserPage - - - No + + Plain color + MyPaintBrushStyleChooserPage - - Replace + + Plain color + SpecialStyleChooserPage @@ -2025,17 +2043,17 @@ Are you sure? - + Palette - + Overwrite - + Don't Overwrite @@ -2045,6 +2063,16 @@ Are you sure? + + Current Frame: + + + + + File History + + + Fullpath: @@ -2265,11 +2293,6 @@ Are you sure? - - OpenToonz 1.2 - - - Information @@ -2290,38 +2313,43 @@ Are you sure? - + Apply - + + OK + + + + Styles you are going to delete are used to paint lines and areas in the animation level. - + How do you want to proceed? - + Delete Styles Only - + Delete Styles, Lines and Areas - + Ok - + Deletion of Lines and Areas from raster-based levels is not undoable. Are you sure? @@ -2337,70 +2365,70 @@ Are you sure? - + Failed to compile m_textureShader.vert. gl - + Failed to compile m_shader.frag. gl - + Failed to add m_shader.vert. gl - + Failed to add m_shader.frag. gl - + Failed to link simple shader: %1 gl - - + + Failed to get attribute location of %1 gl - - + + Failed to get uniform location of %1 gl - + Failed to Open 3DLUT File. - + Failed to Load 3DLUT File. It should start with "3DMESH" keyword. - + Failed to Load 3DLUT File. The second line should be "Mesh [Input bit depth] [Output bit depth]" - - + + Failed to Load 3DLUT File. @@ -2408,7 +2436,7 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< QPushButton - + OK @@ -2416,61 +2444,61 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< SchematicViewer - + &Fit to Window - + &Focus on Current - + &Reorder Nodes - + &Reset Size - - - + + + &Minimize Nodes - - - + + + &Maximize Nodes - + &New Pegbar - + &New Camera - + &New Motion Path - + &Swtich output port display mode - + &Toggle node icons @@ -2507,14 +2535,6 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< - SpecialStyleChooserPage - - - Plain color - - - - SpeedInOutSegmentPage @@ -2588,90 +2608,139 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< StudioPaletteTreeViewer - + + The current palette %1 +in the studio palette has been modified. Do you want to save your changes? + + + + + Save + + + + + Discard + + + + + Convert %1 to Studio Palette and Overwrite. +Are you sure ? + + + + This folder is not empty. Delete anyway? - + + Convert + + + + + Replacing all selected palettes with the palette "%1". +Are you sure ? + + + + + Replacing the palette "%1" with the palette "%2". +Are you sure ? + + + + + Replace + + + + New Palette - + New Folder - + Delete Folder - - + + Load into Current Palette - + Adjust Current Level to This Palette - - + + Merge to Current Palette - - + + Replace with Current Palette - + Delete Palette - + Convert to Studio Palette and Overwrite - + Search for Palettes - + + Delete - + the palette "%1" - + the selected palettes - + Move %1 to "%2". Are you sure ? - + Move - + + + + + Cancel @@ -2679,135 +2748,135 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< StyleEditor - + Generated - + Trail - + Vector Brush - + Show or hide parts of the Color Page. - + Wheel - + HSV - + Alpha - + RGB - + Toggle orientation of the Color Page. - + Auto - + Apply - + Apply changes to current style - + Automatically update style changes - + Return To Previous Style - + Current Style - - - + + + Color - + Texture - + Vector - + Raster - - + + Settings - + No Style Selected - + Palette - + Style Editor - No Valid Style Selected - + [CLEANUP] - + [STUDIO] - + [LEVEL] @@ -2815,37 +2884,37 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< StyleEditorGUI::ColorChannelControl - + R - + G - + B - + A - + H - + S - + V @@ -2853,12 +2922,12 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< StyleEditorGUI::SettingsPage - + Autopaint for Lines - + Reset to default @@ -2902,6 +2971,19 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< + SwatchViewer + + + Reset View + + + + + Fit To Window + + + + TMessageViewer @@ -2943,14 +3025,6 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< - VectorBrushStyleChooserPage - - - Plain color - - - - WordButton diff --git a/toonz/sources/translations/russian/tnzcore.ts b/toonz/sources/translations/russian/tnzcore.ts index 5fcd24d..c9ce570 100644 --- a/toonz/sources/translations/russian/tnzcore.ts +++ b/toonz/sources/translations/russian/tnzcore.ts @@ -35,7 +35,7 @@ QObject - + colors цвета diff --git a/toonz/sources/translations/russian/tnztools.ts b/toonz/sources/translations/russian/tnztools.ts index 4cfca50..bfc4278 100644 --- a/toonz/sources/translations/russian/tnztools.ts +++ b/toonz/sources/translations/russian/tnztools.ts @@ -4,107 +4,107 @@ ArrowToolOptionsBox - - + + E/W: запад/восток E/W: - - + + N/S: север/юг N/S: - + SO: порядок размещения: Порядок: - + Position Положение - + Z: глубина Z: - + ( ( - + ) ) - + Rotation Вращение - + Scale Масштаб - + Global: Глобальный: - + Position: Положение: - + Rotation: Вращение: - - + + H: горизонтально H: - - + + V: вертикально V: - + Maintain: Поддерживать: - + Shear Скос - + Center Position Центральное положение - + Table Стол - + Pick: Выбрать: @@ -277,17 +277,17 @@ BrushToolOptionsBox - + Preset Name Имя предустановки - + OK OK - + Cancel Отмена @@ -316,7 +316,7 @@ DVGui::StyleIndexLineEdit - + current текущий @@ -669,44 +669,44 @@ FullColorBrushTool - - + + Size Размер - + Pressure Нажим - - + + Opacity Непрозрачность - + Hardness: Жесткость: - + Preset: Предустановка: - + Eraser Ластик - + Lock Alpha Заблокировать альфа канал - + <custom> <пользовательская> @@ -765,6 +765,22 @@ + FullColorFillTool + + + Fill Depth + Глубина заливки + + + + HandToolOptionsBox + + + Reset Position + + + + HookTool @@ -834,27 +850,27 @@ PlasticTool - + Swap Edge Переставить ребро (изменить топологию) - + Collapse Edge Убрать ребро - + Split Edge Разделить ребро - + Cut Mesh Резать полисетку - + Delete Vertex Удалить вершину @@ -1218,14 +1234,14 @@ Do you want to proceed? Вставить - - + + Min: Мин: - - + + Max: Макс: @@ -1307,17 +1323,17 @@ Do you want to proceed? Изменить Fx-гаджет - + The current column is locked. Текущий столбец на замке. - + The current column is hidden. Текущий столбец скрыт. - + It is not possible to edit the audio column. Невозможно редактировать столбец аудио. @@ -1326,63 +1342,63 @@ Do you want to proceed? Редактировать столбец Magpie невозможно. - + Note columns can only be edited in the xsheet or timeline. Столбцы заметок можно редактировать только в Xsheet или на временной шкале. - + The current tool cannot be used on a Level column. Текущий инструмент нельзя использовать в столбце уровня. - + The current tool cannot be used on a Mesh column. Текущий инструмент нельзя использовать в столбце полисетки. - + The current tool cannot be used in Level Strip mode. Текущий инструмент нельзя использовать в режиме "Полоса уровней". - + The current tool cannot be used to edit a motion path. Текущий инструмент не может использоваться для редактирования траектории. - - + + The current level is not editable. Текущий уровень не редактируется. - + The current tool cannot be used on a Vector Level. Текущий инструмент нельзя использовать в векторном уровне. - + The current tool cannot be used on a Toonz Level. Текущий инструмент нельзя использовать в Toonz уровне. - + The current tool cannot be used on a Raster Level. Текущий инструмент нельзя использовать в растровом уровне. - + The current tool cannot be used on a Mesh Level. Текущий инструмент нельзя использовать в уровне полисетки. - + The current tool cannot be used on a mesh-deformed level Текущий инструмент нельзя использовать в уровне деформации полисетки - + The current frame is locked: any editing is forbidden. Текущий кадр заблокирован: любое редактирование запрещено. @@ -1449,7 +1465,7 @@ Do you want to proceed? RGBPickerToolOptionsBox - + Pick Screen Экранный выбор @@ -1534,39 +1550,47 @@ Do you want to proceed? + RotateToolOptionsBox + + + Reset Rotation + + + + RulerToolOptionsBox - + X: ruler tool option X: - + Y: ruler tool option Y: - + W: ruler tool option Ш: - + H: ruler tool option В: - + A: ruler tool option У: - + L: ruler tool option Д: @@ -1598,48 +1622,48 @@ Do you want to proceed? SelectionToolOptionsBox - + H: H: - + V: V: - + Link Связать - - + + Rotation Вращение - + E/W: E/W: - + N/S: N/S: - + Scale Масштаб - + Position Положение - + Thickness Толщина @@ -1647,22 +1671,22 @@ Do you want to proceed? ShiftTraceToolOptionBox - + Reset Previous Сбросить изменения - + Reset Following Сбросить изменения - + Previous Drawing Предыдущий рисунок - + Following Drawing Следующий рисунок @@ -1708,47 +1732,47 @@ Do you want to proceed? StylePickerTool - + No current level. Нет текущего уровня. - + Current level has no available palette. У текущего уровеня нет доступной палитры. - + Palette must have more than one palette to be organized. Для упорядочивания палитры требуется более одной страницы. - + Mode: Режим: - + Lines Линии - + Areas Области - + Lines & Areas Линии и области - + Passive Pick Пассивная пипетка - + Organize Palette Упорядочить палитру @@ -1756,7 +1780,7 @@ Do you want to proceed? StylePickerToolOptionsBox - + With this option being activated, the picked style will be moved to the end of the first page of the palette. При активации этого параметра, выбранный стиль будет перемещен в конец первой страницы палитры. @@ -1807,7 +1831,7 @@ moved to the end of the first page of the palette. - + <custom> <пользовательская> @@ -2024,4 +2048,12 @@ moved to the end of the first page of the palette. Прямоугольный + + ZoomToolOptionsBox + + + Reset Zoom + + + diff --git a/toonz/sources/translations/russian/toonz.ts b/toonz/sources/translations/russian/toonz.ts index 6bf7471..8a12738 100644 --- a/toonz/sources/translations/russian/toonz.ts +++ b/toonz/sources/translations/russian/toonz.ts @@ -65,42 +65,42 @@ AdjustThicknessPopup - + Adjust Thickness Отрегулировать толщину - + Mode: Режим: - + Scale Thickness Масштаб толщины - + Add Thickness Добавить толщину - + Constant Thickness Постоянная толщина - + Start: Начало: - + End: Конец: - + Apply Применить @@ -131,14 +131,12 @@ ApplyMatchlinesCommand - It is not possible to apply the match lines because no column was selected. - Невозможно применить разделительные линии, потому что не был выбран столбец. + Невозможно применить разделительные линии, потому что не был выбран столбец. - It is not possible to apply the match lines because two columns have to be selected. - Невозможно применить разделительные линии, потому что нужно выбрать два столбца. + Невозможно применить разделительные линии, потому что нужно выбрать два столбца. @@ -584,12 +582,12 @@ Do you want to save your changes? BrowserPopup - + Choose Выбрать - + Path %1 doesn't exists. Пути %1 не существует. @@ -1293,14 +1291,12 @@ What do you want to do? CloneLevelUndo::LevelNamePopup - Clone Level - Клонировать уровень + Клонировать уровень - Level Name: - Имя уровня: + Имя уровня: @@ -1429,94 +1425,99 @@ What do you want to do? ComboViewerPanel - + GUI Show / Hide Показать / скрыть GUI - + Toolbar Панель инструментов - + Tool Options Bar Панель настройки инструментов - + Console Консоль - + Safe Area (Right Click to Select) Безопасная зона (Щелкните правой кнопкой мыши, чтобы выбрать) - + Field Guide Направляющая сетка - + Camera Stand View Стандартный вид с камеры - + 3D View 3D-просмотр - + Camera View Вид с камеры - + Freeze Заморозить - + Preview Предпросмотр - + Sub-camera Preview Предпросмотр суб-камеры - + Untitled Безымянный - + Scene: Сцена: + :: Project: + + + + :: Frame: :: Кадр: - - - + + + (Flipped) (Перевёрнутый) - + :: Level: :: Уровень: - + Level: Уровень: @@ -1932,12 +1933,12 @@ contain the dpi information, then the current camera dpi will be used. DVGui::ProgressDialog - + Loading "%1"... Загрузка "%1"... - + Importing "%1"... Импорт "%1"... @@ -2201,14 +2202,12 @@ contain the dpi information, then the current camera dpi will be used. ExportCurvePopup - Export Curve - Экспорт кривой + Экспорт кривой - Export - Экспорт + Экспорт @@ -2645,12 +2644,12 @@ contain the dpi information, then the current camera dpi will be used. Выполнено: 2 уровня, конвертированы в формат TLV - + New Folder Новая папка - + It is not possible to create the %1 folder. Не удалось создать папку %1. @@ -2693,33 +2692,27 @@ contain the dpi information, then the current camera dpi will be used. FileData - It is not possible to find the %1 level. - Не удается найти уровень %1. + Не удается найти уровень %1. - There was an error copying %1 - Произошла ошибка при копировании %1 + Произошла ошибка при копировании %1 FileSelection - Collecting assets... - Сбор материалов... + Сбор материалов... - - Abort - Прервать + Прервать - Importing scenes... - Импорт сцен... + Импорт сцен... @@ -2873,12 +2866,12 @@ Do you want to overwrite it? FlipbookPanel - + Safe Area (Right Click to Select) Безопасная зона (Щелкните правой кнопкой мыши, чтобы выбрать) - + Minimize Уменьшить @@ -2920,80 +2913,80 @@ Do you want to overwrite it? ImageViewer - - - + + + Flipbook Histogram Гистограмма Flipbook - + Clone Preview Клонировать предпросмотр - + Unfreeze Preview Разморозить предпросмотр - + Freeze Preview Заморозить предпросмотр - + Regenerate Preview Регенерировать предпросмотр - + Regenerate Frame Preview Регенерировать предпросмотр кадра - + Load / Append Images Загрузка / Добавление изображений - + Save Images Сохранить изображения - + Reset View Вид по умолчанию - + Fit To Window По размеру окна - + Exit Full Screen Mode Выход из полноэкранного режима - + Full Screen Mode Полноэкранный режим - + Show Histogram Показать гистограмму - + Swap Compared Images Поменять сравниваемые изображения - - + + :: Zoom : :: Зум : @@ -3001,17 +2994,17 @@ Do you want to overwrite it? ImportMagpieFilePopup - + Import Magpie File Импортировать файл Magpie - + Load Загрузить - + %1 does not exist. %1 не существует. @@ -3791,6 +3784,11 @@ Please use the frame numbers for reference. Кадр Sub-xsheet + + Drawing: + + + Unable to open the file: @@ -3814,17 +3812,17 @@ Please use the frame numbers for reference. LoadColorModelPopup - + Load Color Model Загрузить цветовую модель - + Frames : Кадры: - + Load Загрузить @@ -3832,14 +3830,12 @@ Please use the frame numbers for reference. LoadCurvePopup - Load Curve - Загрузить кривую + Загрузить кривую - Load - Загрузить + Загрузить @@ -3896,85 +3892,85 @@ Please use the frame numbers for reference. LoadLevelPopup - + Load Level Загрузить уровень - + Load Загрузить - + TLV Caching Behavior Кэширование данных изображения TLV - + Load Subsequence Level Загрузить субсеквенционный уровень - + Arrangement in Xsheet Расположение в Xsheet - + (FILE DOES NOT EXIST) (ФАЙЛ НЕ СУЩЕСТВУЕТ) - + On Demand По требованию - + All Icons Все иконки - + All Icons & Images Все иконки и изображения - - + + From: От: - - + + To: До: - + Step: Шаг: - + Inc: ? Прирост: - + Level Name: Имя уровня: - + Frames: Кадры: - + :: :: @@ -3982,22 +3978,22 @@ Please use the frame numbers for reference. LoadScenePopup - + Load Scene Загрузить сцену - + Load Загрузить - + is not a scene file. не является файлом сцены. - + does not exist. не существует. @@ -4005,40 +4001,37 @@ Please use the frame numbers for reference. LoadSettingsPopup - Load Cleanup Settings - Загрузить настройки очистки + Загрузить настройки очистки - Load - Загрузить + Загрузить - %1 does not exist. - %1 не существует. + %1 не существует. LoadSubScenePopup - + Load Sub-Xsheet Загрузить Sub-Xsheet - + Load Загрузить - + is not a scene file. не является файлом сцены. - + does not exist. не существует. @@ -4165,357 +4158,357 @@ Please use the frame numbers for reference. MainWindow - + Untitled Безымянный - + Cleanup Очистка - + PltEdit Палитра - + InknPaint InknPaint - + Xsheet Xsheet - + About OpenToonz О программе - + Close Закрыть - + Cannot delete Не удается удалить - + &New Scene &Новая сцена - + &Load Scene... &Загрузить сцену... - + &Save Scene &Сохранить сцену - + &Save Scene As... &Сохранить сцену как... - + &Save All &Сохранить все - + &Revert Scene &Откатить сцену - + &Load Folder... &Загрузить папку ... - + &Load As Sub-xsheet... &Загрузить как Sub-xsheet... - + &Open Recent Scene File &Открыть предыдущую сцену - + &Open Recent Level File &Открыть предыдущий уровень - + &Clear Recent Scene File List &Очистить список предыдущих сцен - + &Clear Recent level File List &Очистить список предыдущих уровней - + &New Level... &Новый уровень... - + &New Vector Level &Новый векторный уровень - + New Vector Level Новый векторный уровень - + &New Toonz Raster Level &Новый растровый уровень Toonz - + New Toonz Raster Level Новый растровый уровень Toonz - + &New Raster Level &Новый растровый уровень - + New Raster Level Новый растровый уровень - + &Load Level... &Загрузить уровень... - + &Save Level &Сохранить уровень - + &Save All Levels &Сохранить все уровни - + &Save Level As... &Сохранить уровень как... - + &Export Level... &Экспортировать уровень... - + &Convert File... &Конвертировать файл... - + &Save Palette As... &Сохранить палитру как... - + &Save Palette &Сохранить палитру - + &Load Color Model... &Загрузить цветовую модель... - + &Import Magpie File... &Импортировать файл Magpie... - + &New Project... &Новый проект... - + &Project Settings... &Настройки проекта... - + &Save Default Settings &Сохранить настройки по умолчанию - + &Output Settings... &Настройки вывода ... - + &Preview Settings... &Настройки предпросмотра... - + &Render &Рендер - + &Fast Render to MP4 &Рендер в MP4 - + &Preview &Предпросмотр - + &Export Soundtrack &Экспортировать звуковую дорожку - + &Save Previewed Frames &Сохранить кадры предпросмотра - + &Regenerate Preview &Регенерировать предпросмотр - + &Regenerate Frame Preview &Регенерировать предпросмотр кадра - + &Clone Preview &Клонировать предпросмотр - + &Freeze//Unfreeze Preview &Заморозить//разморозить предпросмотр - + Freeze Preview Заморозить предпросмотр - + Unfreeze Preview Разморозить предпросмотр - + &Save As Preset &Сохранить как предустановку - + &Preferences... &Настройки программы... - + &Configure Shortcuts... &Настройка горячих клавиш... - + &Print Xsheet &Экспортировать Xsheet в HTML - + Run Script... Запустить скрипт... - + Open Script Console... Открыть командную строку ... - + &Print Current Frame... &Распечатать текущий кадр... - + &Quit &Выйти - + Reload qss Обновить qss - + &Load Recent Image Files &Загрузить предыдущие файлы изображений - + &Clear Recent Flipbook Image List &Очистить список предыдущих изображений Flipbook - + Preview Fx Предпросмотр Fx - + &Select All &Выбрать все - + &Invert Selection &Обратить выделенное - + &Undo &Отменить - + &Redo &Повторить - + &Cut &Вырезать - + &Copy &Копировать @@ -4524,192 +4517,191 @@ Please use the frame numbers for reference. &Вставить - + &Merge &Слить - + &Paste Into &Поместить в - + &Paste Color && Name &Вставить цвет и имя - + Paste Color Вставить цвет - + Paste Name Вставить имя - + Get Color from Studio Palette Взять цвет из Studio Palette - + Toggle Link to Studio Palette Переключить линк на Studio Palette - + Remove Reference to Studio Palette Удалить референс на Studio Palette - + &Delete &Удалить - + &Insert &Вставить - + &Group &Сгруппировать - + &Ungroup &Разгруппировать - + &Bring to Front &На передний план - + &Bring Forward &На порядок выше - &Send Back - &На порядок ниже + &На порядок ниже - + &Send Backward &На задний план - + &Enter Group &Войти в группу - + &Exit Group &Выйти из группы - + &Remove Vector Overflow &Удалить векторные излишки - + &Touch Gesture Control &Управление сенсорными жестами - + &Define Scanner... &Определить сканер... - + &Scan Settings... &Настройки сканера... - + &Scan &Сканирование - + &Autocenter... &Автоцентр... - + &Set Cropbox &Установить область обрезки - + &Reset Cropbox &Сбросить область обрезки - + &Cleanup Settings... &Настройки очистки... - + &Preview Cleanup &Просмотр очистки - + &Camera Test &Тестирование камеры - + &Opacity Check &Opacity Check - + &Cleanup &Очистка - + &Camera Capture... &Захват камеры... - + &Add Frames... &Добавить кадры... - + &Renumber... &Пересчитать... - + &Replace Level... &Заменить уровень ... - + &Revert to Cleaned Up &Возврат к очистке - + Separate Colors... Разделить цвета... - + Animate Tool Инструмент анимирования @@ -4718,554 +4710,578 @@ Please use the frame numbers for reference. &Возврат к последней сохраненной версии - + &Paste Insert &Вставить вставку - + &Paste Insert Above/After &Вставить копию спереди/сзади - + &Insert Above/After &Вставить пробел cпереди/сзади - + + &Send to Back + + + + &Expose in Xsheet &Экспонировать в Xsheet - + &Display in Level Strip &Отобразить в Level Strip - + &Level Settings... &Настройки уровня... - + Adjust Levels... Коррекция цветовых уровней... - + Adjust Thickness... Отрегулировать толщину... - + &Antialias... &Сглаживание... - + &Binarize... &Бинаризация... - + &Brightness and Contrast... &Яркость и контрастность... - + &Color Fade... &Спад цвета... - + &Capture &Захват - + &Canvas Size... &Размер холста... - + &Info... &Инфо... - + &View... &Вид... - + &Remove All Unused Levels &Удалить все неиспользуемые в сцене уровни - + &Replace Parent Directory... &Заменить родительский каталог ... - + &Scene Settings... &Настройки сцены... - - + + &Camera Settings... &Настройки камеры... - + &Open Sub-xsheet &Открыть Sub-xsheet - + &Close Sub-xsheet &Закрыть Sub-xsheet - + Explode Sub-xsheet Разбить Sub-xsheet - + Collapse Коллапс - + Toggle Edit in Place Переключить Редактировать на месте - + &Save Sub-xsheet As... &Сохранить Sub-xsheet как... - + Resequence Пересчитать секвенцию - + Clone Sub-xsheet Клонировать Sub-xsheet - + &Apply Match Lines... &Применить разделительные линии... - + &Merge Tlv Levels... &Объединить уровни Tlv ... - + &Delete Match Lines &Удалить разделительные линии - + &Delete Lines... &Удалить линии... - + &Merge Levels &Объединить уровни - + &New FX... &Новый FX... - + &New Output &Новый вывод - + &Edit FX... &Редактировать FX... - + Insert Frame Вставить кадр - + Remove Frame Удалить кадр - + Insert Multiple Keys Вставить несколько ключей - + Remove Multiple Keys Удаление нескольких ключей - + Remove Empty Columns Удалить пустые столбцы - + &Reverse &Обратить - + &Swing &Добавить в обратном порядке - + &Random &Случайно - + &Autoexpose &Автоэкспонирование - + &Repeat... &Повторение... - + &Reset Step &Сбросить шаг - + &Increase Step &Увеличить шаг - + &Decrease Step &Уменьшить шаг - + &Step 2 &Шаг 2 - + &Step 3 &Шаг 3 - + &Step 4 &Шаг 4 - + &Each 2 &Каждые 2 - + &Each 3 &Каждые 3 - + &Each 4 &Каждые 4 - + &Roll Up думаю, так будет понятнее, чем "все кадры кроме первого наверх" &Первый вниз - + &Roll Down &Последний наверх - + &Time Stretch... &Растяжение времени... - + &Duplicate Drawing &Дублировать рисунок - + &Autorenumber &Автопересчет - + &Clone &Клонировать - + Drawing Substitution Forward Заправка чертежа вперед - + Drawing Substitution Backward Заправка чертежа назад - + Similar Drawing Substitution Forward Заправка аналогичных чертежей вперед - + Similar Drawing Substitution Backward Заправка аналогичных чертежей назад - + 1's по 1 - + 2's по 2 - + 3's по 3 - + 4's по 4 - + &Fill In Empty Cells &Заполнить пустые ячейки - + &Set Key &Установить ключ - + &Camera Box &Граница камеры - + &Table &Таблица - + &Field Guide &Направляющая сетка - + &Raster Bounding Box &Растровая граница - + &Field Guide in Capture Window &Направляющая сетка в окне захвата - + &Safe Area &Безопасная зона - + &Camera BG Color &Цвет фона камеры - + &Guide &Ориентир - + &Ruler &Линейка - + &Transparency Check &Проверка прозрачности - + &Ink Check &Проверка штриха - + &Ink#1 Check &Проверка штриха#1 - + &Paint Check &Проверка цвета - + Inks &Only Только &линии - + &Fill Check &Проверка заполнения - + &Black BG Check &На чёрном фоне - + &Gap Check &Проверка замкнутости - + Shift and Trace Сдвинуть и калькировать (Shift and Trace) - + Edit Shift Редактировать сдвиг - + No Shift Без сдвига - + Reset Shift Сбросить сдвиг - + &Visualize Vector As Raster &Отображать вектор как растр - + &Histogram &Гистограмма - + Link Flipbooks Link Flipbooks - + Play Воспроизведение - + Loop По кругу - + Pause Пауза - + First Frame Первый кадр - + Last Frame Последний кадр - + Previous Frame Предыдущий кадр - + Next Frame Следующий кадр - + Next Drawing Следующий рисунок - + Prev Drawing Предыдущий рисунок - + Next Step Следующий шаг - + Prev Step Предыдущий шаг - + Red Channel Красный канал - + Green Channel Зеленый канал - + Blue Channel Голубой канал - + + + Reset Zoom + + + + + + Reset Rotation + + + + + + Reset Position + + + + + Flip Viewer Horizontally Отзеркалить горизонтально @@ -5274,267 +5290,267 @@ Please use the frame numbers for reference. Матовый канал - + Red Channel Greyscale Красный канал в оттенках серого - + Green Channel Greyscale Зеленый канал в оттенках серого - + Blue Channel Greyscale Голубой канал в оттенках серого - + Compare to Snapshot Сравнить с Snapshot - + Toggle Autofill on Current Palette Color Переключить автозаливку на текущий цвет палитры - + &Lock Room Panes &Заблокировать Room Panes - + &Export &Экспортировать - + &File Browser &Браузер файлов - + &Flipbook &Flipbook - + &Function Editor &Редактор функций - + &Level Strip &Level Strip - + &Palette &Палитра - + &Palette Gizmo &Палитра Gizmo - + &Delete Unused Styles &Удалить неиспользуемые стили - + &Tasks &Задания - + &Batch Servers &Пакетные серверы - + &Message Center &Центр сообщений - + &Color Model &Цветовая модель - + &Studio Palette &Палитра Studio - + &Schematic &Схема - + &Cleanup Settings &Настройки очистки - + &Scene Cast &Состав сцены - + &Style Editor &Редактор стилей - + &Toolbar &Панель инструментов - + &Tool Option Bar &Панель настройки инструментов - + &Viewer &Просмотрщик - + &LineTest Capture &LineTest захват - + &LineTest Viewer &LineTest просмотрщик - + &Xsheet &Xsheet - + &Timeline &Таймлайн - + &ComboViewer &ComboViewer - + &History &История - + Record Audio Запись аудио - + &Reset to Default Rooms &Сбросить вкладки по умолчанию - + Toggle Maximize Panel Переключить максимизацию панелей - + Toggle Main Window's Full Screen Mode Переключить главное окно в полноэкранный режим - + &About OpenToonz... &О программе... - + &Startup Popup... &Стартовое окно... - + &Blend colors &Смешивание цветов - + Onion Skin Toggle Переключение видимости кальки - + Zero Thick Lines Линии нулевой толщины - + Toggle Cursor Size Outline Переключить размер контура курсора - + Duplicate Дублировать - + Show Folder Contents Показать содержимое папки - + Convert... Конвертировать... - + Collect Assets Сбор активов - + Import Scene Импортировать сцену - + Export Scene... Экспортировать сцену... - + Convert to Vectors... Конвертировать в вектор... - + Tracking... Трекинг... - + Remove Level Удалить уровень - + Add As Render Task Добавить как задачу рендеринга - + Add As Cleanup Task Добавить как задачу очистки @@ -5543,32 +5559,32 @@ Please use the frame numbers for reference. Выделить все ключи в этом ряду - + Select All Keys in this Column Выделить все ключи в этом столбце - + Select All Keys Выделить все ключи - + Select All Following Keys Выделить все следующие ключи - + Select All Previous Keys Выделить все предыдущие ключи - + Select Previous Keys in this Column Выделить предыдущие ключи в этом столбце - + Select Following Keys in this Column Выделить все следующие ключи в этом столбце @@ -5581,247 +5597,247 @@ Please use the frame numbers for reference. Выделить все следующие ключи в этом ряду - + &Reload &Перезагрузить - + &Toggle Edit In Place &Редактировать на месте - + New Note Level Новый уровень заметок - + &Apply Lip Sync Data to Column &Применить данные липсинга к столбцу - + Toggle XSheet Toolbar Показать/скрыть панель Xsheet - + Reframe with Empty Inbetweens... Перекадрировать с пустыми промежутками... - + Auto Input Cell Number... Автоматический ввод номера ячейки... - + &Paste Numbers &Вставлять номер видео - + Alpha Channel Альфа-канал - + &Command Bar &Панель команд - + Toggle Current Time Indicator Скрыть/показать индикатор кадра - + Vectors to Toonz Raster Конвертировать вектор в Toonz растр - + Replace Vectors with Simplified Vectors Заменить вектора упрощенными векторами - + Select All Keys in this Frame Выделить все ключи в этом кадре - + Select Previous Keys in this Frame Выделить все предыдущие ключи перед кадром - + Select Following Keys in this Frame Выделить все последующие ключи после кадра - + Invert Key Selection Инвертировать выбор ключей - + Set Acceleration Установка ускорения - + Set Deceleration Установка замедления - + Set Constant Speed Установить постоянную скорость - + Reset Interpolation Сбросить интерполяцию - + Linear Interpolation Линейная интерполяция - + Speed In / Speed Out Interpolation Интерполяция ускорения в начале/в конце - + Ease In / Ease Out Interpolation Интерполяция замедления в начале/в конце - + Ease In / Ease Out (%) Interpolation Интерполяция замедления в начале/в конце (%) - + Exponential Interpolation Экспоненциальная интерполяция - + Expression Interpolation Интерполяция выражений - + File Interpolation Интерполяция из файла - + Constant Interpolation Постоянная интерполяция - + Fold Column Свернуть столбцы - + Show This Only Показать только это - + Show Selected Показать выбранные - + Show All Показать все - + Hide Selected Скрыть выбранные - + Hide All Скрыть все - + Toggle Show/Hide Переключить: Показать/Спрятать - + ON This Only ВКЛ только это - + ON Selected ВКЛ выбранные - + ON All ВКЛ все - + OFF All ВЫКЛ все - + OFF Selected ВЫКЛ выбранные - + Swap ON/OFF Переключить ВКЛ/ВЫКЛ - + Lock This Only Заблокировать это только - + Lock Selected Заблокировать выбранные - + Lock All Заблокировать все - + Unlock Selected Разблокировать выбранные - + Unlock All Разблокировать все - + Swap Lock/Unlock Переключатель Блокировать/Разблокировать - + Hide Upper Columns Скрыть верхние столбцы @@ -5830,157 +5846,160 @@ Please use the frame numbers for reference. Инструмент редактирования - + Selection Tool Инструмент выделения - + Brush Tool Кисть - + Geometric Tool Геометрический инструмент - + Type Tool Инструмент шрифта - + Fill Tool Заливка - + Paint Brush Tool Инструмент покраски - + Eraser Tool Ластик - + Tape Tool Скотч - + Style Picker Tool Пипетка - + RGB Picker Tool Инструмент RGB пипетка - + Control Point Editor Tool Редактор контрольных точек - + Pinch Tool Щипок - + Pump Tool Насос - + Magnet Tool Магнит - + Bender Tool Клещи - + Iron Tool Утюг - + Cutter Tool Нож - + Skeleton Tool Скелет - + Tracker Tool Трекер - + Hook Tool Крюк - + Zoom Tool Лупа - + Rotate Tool Поворот - + Hand Tool Рука - + Plastic Tool Plastic Tool - + Ruler Tool Рулетка - + Finger Tool Палец - + Zoom In Приблизить - + Zoom Out Отдалить - + + Reset View Вид по умолчанию - + + Fit to Window По размеру окна - + + Actual Pixel Size Фактический пиксельный размер @@ -5989,352 +6008,363 @@ Please use the frame numbers for reference. Повернуть просмотр горизонтально - + + Flip Viewer Vertically Повернуть просмотр вертикально - + Show//Hide Full Screen Показать // Скрыть полный экран - + Full Screen Mode Полноэкранный режим - + Exit Full Screen Mode Выход из полноэкранного режима - + Refresh Folder Tree Обновить дерево папок - + Refresh Обновить - + Global Key Глобальный ключ - + Brush size - Increase max Размер кисти - Увеличить макс - + Brush size - Decrease max Размер кисти - Уменьшение макс - + Brush size - Increase min Размер кисти - Увеличить мин - + Brush size - Decrease min Размер кисти - Уменьшение мин - + Brush hardness - Increase Жесткость кисти - увеличение - + Brush hardness - Decrease Жесткость кисти - уменьшение - + SnapSensitivity Чувствительность - + Auto Group Автогруппа - + Break sharp angles Разрыв острых углов - + Frame range Диапазон кадров - + Inverse kinematics Инверсная кинематика - + Invert Инвертировать - + Manual Вручную - + Onion skin Калька - + Orientation Ориентация - + Pencil Mode Режим карандаша - + Preserve Thickness Сохранять толщину - + Pressure Sensitivity Чувствительность к давлению - + Segment Ink Сегмент Ink - + Selective Избирательно - + Brush Tool - Draw Order Кисть - порядок рисования - + Smooth Гладкий - + Snap Привязка - + Auto Select Drawing Автоматический выбор рисунка - + Auto Fill Автозаливка - + Join Vectors Объединить векторы - + Show Only Active Skeleton Показать только активный скелет - + + Brush Tool - Eraser (Raster option) + + + + + Brush Tool - Lock Alpha + + + + Brush Preset Предустановка кисти - + Geometric Shape Геометрическая форма - + Geometric Edge Геометрический край - + Mode Режим - + Mode - Areas Режим - Области - + Mode - Lines Режим - Линии - + Mode - Lines & Areas Режим - Линии и Области - + Type Тип - + Type - Normal Тип - обычный - + Type - Rectangular Тип - Прямоугольный - + Type - Freehand Тип - От руки - + Type - Polyline Тип - Полилиния - + TypeTool Font Шрифт - + TypeTool Size Размер шрифта - + TypeTool Style Стиль шрифта - + Active Axis Активная ось - + Active Axis - Position Активная ось - расположение - + Active Axis - Rotation Активная ось - вращение - + Active Axis - Scale Активная ось - масштаб - + Active Axis - Shear Активная ось - сдвиг - + Active Axis - Center Активная ось - центр - + Active Axis - All Активные оси - все - + Build Skeleton Mode Режим создания скелета - + Animate Mode Режим анимации - + Inverse Kinematics Mode Режим инверсной кинематики - + None Pick Mode Объектов выделения - нет - + Column Pick Mode Режим выбора столбца - + Pegbar Pick Mode Режим выбора Pegbar - + Pick Screen Кликнуть по экрану - + Create Mesh Создать полисетку - + Fill Tool - Autopaint Lines Заливка - авторисовка линий - + Fill Tool - Areas Заливка - Области - + Fill Tool - Lines Заливка - Линиии - + Style Picker Tool - Areas Инструмент выбора стиля - Области - + Style Picker Tool - Lines Инструмент выбора стиля - Линии - + Toggle FX/Stage schematic Переключение Схемы Fx @@ -6481,52 +6511,53 @@ N.B. Duplicated commands will be ignored. Only the last one will appear in the m MergeCmappedCommand - It is not possible to merge tlv columns because no column was selected. - Невозможно объединить столбцы tlv, потому что не выбран столбец. + Невозможно объединить столбцы tlv, потому что не выбран столбец. - It is not possible to merge tlv columns because at least two columns have to be selected. - Невозможно объединить столбцы tlv, потому что нужно выбрать как минимум два столбца. + Невозможно объединить столбцы tlv, потому что нужно выбрать как минимум два столбца. - - Merging Tlv Levels... - Слияние уровней Tlv ... + Слияние уровней Tlv ... MergeCmappedDialog - + + Level %1 already exists! Are you sure you want to overwrite it? + + + + Ok OK - - + + Cancel Отмена - + Merge Tlv Levels Объединить уровни Tlv - + Save in: Сохранить в: - + File Name: Имя файла: - + Apply Применить @@ -6534,14 +6565,12 @@ N.B. Duplicated commands will be ignored. Only the last one will appear in the m MergeColumnsCommand - It is not possible to execute the merge column command because no column was selected. - Невозможно выполнить команду слияния столбцов, потому что не выбран столбец. + Невозможно выполнить команду слияния столбцов, потому что не выбран столбец. - It is not possible to execute the merge column command because only one columns is selected. - Невозможно выполнить команду слияния столбцов, потому что выбран только один столбец. + Невозможно выполнить команду слияния столбцов, потому что выбран только один столбец. @@ -6644,11 +6673,18 @@ What do you want to do? + MyVideoWidget + + + Camera is not available + Камера недоступна + + + MyViewFinder - Camera is not available - Камера недоступна + Камера недоступна @@ -6715,88 +6751,88 @@ What do you want to do? Сделать стереоскопию - + Standard Простое - + Improved Улучшенный - + High Высокий - + Triangle filter Треугольный фильтр - + Mitchell-Netravali filter Фильтр Митчелла-Нетравали - + Cubic convolution, a = .5 Кубическая свертка, a = .5 - + Cubic convolution, a = .75 Кубическая свертка, a = .75 - + Cubic convolution, a = 1 Кубическая свертка, a = 1 - + Hann window, rad = 2 ? Hann window, rad = 2 - + Hann window, rad = 3 Hann window, rad = 3 - + Hamming window, rad = 2 Hamming window, rad = 2 - + Hamming window, rad = 3 Hamming window, rad = 3 - + Lanczos window, rad = 2 Lanczos window, rad = 2 - + Lanczos window, rad = 3 Lanczos window, rad = 3 - + Gaussian convolution Гауссова свертка - + Closest Pixel (Nearest Neighbor) Ближайший пиксель (ближайший соседний) - + Bilinear Билинейный @@ -6992,34 +7028,34 @@ The parameters to be saved are: Сдвиг камеры: - + Add preset Добавить предустановку - + Enter the name for the output settings preset. Введите имя для заданных параметров вывода. - + Add output settings preset Добавить предустановку настроек вывода - + <custom> <пользовательский> - + Remove preset Удалить пресет - - - + + + Warning Предупреждение @@ -7027,7 +7063,7 @@ The parameters to be saved are: OverwriteDialog - + Level "%1" already exists. What do you want to do? @@ -7044,7 +7080,6 @@ What do you want to do? - Warning! Внимание! @@ -7096,305 +7131,307 @@ What do you want to do? Файл %1 уже существует; Выберите другой суффикс. - Overwrite - Перезаписать + Перезаписать - Skip - Пропустить + Пропустить - File "%1" already exists. Do you want to overwrite it? - Файл «%1» уже существует. + Файл «%1» уже существует. Хотите перезаписать его? PencilTestPopup - + No frame id Нет - + Camera Capture Захват камеры - + Refresh Обновить - + File Файл - + Options Опции - + Save images as they are captured Сохранение изображений при их захвате - + Image adjust Настройка изображения - + Upside down Вверх ногами - + Capture white BG Захват белого фона - + Display Отображение - + Show onion skin Показать кальку - + Load Selected Image Загрузить выбранное изображение - + Interval timer Интервальный таймер - + Use interval timer Использовать интервальный таймер - - + + Capture [Return key] Захват [Return/Enter] - + Close Закрыть - + Subfolder Подпапка - + + Subcamera + + + + Next Level Следующий уровень - + Previous Level Предыдущий уровень - + Color Цвет - + Grayscale Оттенки серого - + Black & White Черно-белый - + Video Capture Filter Settings... Настройки фильтра видеозахвата... - + Camera: Камера: - + Resolution: Разрешение: - + Save In: Сохранить в: - + Name: Имя: - + Frame: Кадр: - + File Type: Тип файла: - + Color type: Тип цвета: - - - - - + + + + + UNDEFINED WARNING НЕОПРЕДЕЛЕННОЕ ПРЕДУПРЕЖДЕНИЕ - + The level is not registered in the scene, but exists in the file system. Уровень не загружен в текущую сцену, но файл существует. - + WARNING : Image size mismatch. The saved image size is %1 x %2. Предупреждение: несоответствие размера изображения. Размер сохраненного изображения%1 x %2. - - - - + + + + WARNING Предупреждение - - + + Frame %1 exists. Кадр %1 существует. - - + + Frames %1 exist. Кадры %1 существуют. - - + + OVERWRITE 1 of ПЕРЕЗАПИСАТЬ 1 из - - + + ADD to ДОБАВИТЬ - - + + %1 frame %1 кадр - - + + %1 frames %1 кадров - + The level will be newly created. Уровень будет вновь создан. - + NEW НОВЫЙ - + The level is already registered in the scene. Этот уровень уже загружев в сцену. - + NOTE : The level is not saved. ПРИМЕЧАНИЕ : уровень не сохранен. - + WARNING : Failed to get image size of the existing level %1. ВНИМАНИЕ : получить размер изображения уровня %1 не удалось. - + WARNING : Image size mismatch. The existing level size is %1 x %2. ВНИМАНИЕ: несоответствие размера изображения. Существующий размер уровня %1 x %2. - + WARNING : Level name conflicts. There already is a level %1 in the scene with the path %2. ВНИМАНИЕ: конфликт имен уровней. В сцене уже есть уровень %1. Существующий путь к файлу уровня %2. - + WARNING : Image size mismatch. The size of level with the same name is is %1 x %2. ВНИМАНИЕ: несоответствие размера изображения. Размер уровня с тем же именем — %1 x %2. - + WARNING : Level path conflicts. There already is a level with the path %1 in the scene with the name %2. ВНИМАНИЕ : повторяющийся путь к файлу. В сцене уже есть уровень из %1 под именем %2. - + WARNING : Image size mismatch. The size of level with the same path is %1 x %2. @@ -7413,104 +7450,104 @@ WARNING : Image size mismatch. The size of level with the same path is %1 x %2.< Яркость: - + BG reduction: Редукция фона: - + Opacity(%): Непрозрачность (%): - + Interval(sec): Интервал(сек): - + No camera found Камера не найдена - + - Select camera - - Выбрать камеру - - - + + No image selected. Please select an image in the Xsheet. Изображения не выбраны. Выберите изображение в Xsheet. - + The selected image is not in a raster level. Выбранное изображение не находится на уровне растра. - + The selected image size does not match the current camera settings. Выбранный размер изображения не соответствует текущим настройкам камеры. - - + + Start Capturing [Return key] Запуск захвата [Ключ возврата] - + Stop Capturing [Return key] Остановить захват [Ключ возврата] - + No level name specified: please choose a valid level name Имя уровня не определено: выберите допустимое имя уровня - + Folder %1 doesn't exist. Do you want to create it? Папки %1 не существует. Вы хотите создать ее? - + Unable to create Не удалось создать - + The level name specified is already used: please choose a different level name. Указанное имя уровня уже используется: выберите другое имя уровня. - + The save in path specified does not match with the existing level. Указанный путь сохранения не соответствует существующему уровню. - - + + The captured image size does not match with the existing level. Размер захваченного изображения не соответствует существующему уровню. - - + + File %1 does exist. Do you want to overwrite it? Файл «%1» уже существует. Хотите перезаписать его? - + Failed to load %1. Не удалось загрузить %1. @@ -7518,135 +7555,135 @@ Do you want to overwrite it? PencilTestSaveInFolderPopup - + Create the Destination Subfolder to Save Создать папку назначения для сохранения - + Set As Default Установить по умолчанию - + Set the current "Save In" path as the default. Сделать текущий путь расположения по умолчанию. - + Create Subfolder Создать подпапку - + Infomation точно не "Info R mation" ? Информация - + Subfolder Name Имя подпапки - + Auto Format: Автоформат: - + Show This on Launch of the Camera Capture Показывать это окно при запуске захвата камеры - + Save Scene in Subfolder Сохранить сцену в подпапке - + OK OK - + Cancel Отмена - + C- + Sequence + Scene C- + Секвенция + Сцена - + Sequence + Scene Секвенция + Сцена - + Episode + Sequence + Scene Эпизод + Секвенция + Сцена - + Project + Episode + Sequence + Scene Проект + Эпизод + Секвенция + Сцена - + Save the current scene in the subfolder. Set the output folder path to the subfolder as well. Сохранить текущую сцену во вложенной папке. Также задайте путь к папке вывода на вложенную папку. - + Save In: Сохранить в: - + Project: Проект: - + Episode: Эпизод: - + Sequence: Секвенция: - + Scene: Сцена: - + Subfolder Name: Имя подпапки: - + Subfolder name should not be empty. Имя подпапки не должно быть пустым. - + Subfolder name should not contain following characters: * . " / \ [ ] : ; | = , Имя подпапки не должно содержать следующих символов: *. "/ \ []:; | =, - + Folder %1 already exists. Папка %1 уже существует. - + It is not possible to create the %1 folder. Не удалось создать папку %1. @@ -8894,15 +8931,13 @@ in non alpha-enabled image format. Previewer - The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | - Имя файла не может быть пустым или содержать любой из следующих символов: (новая строка) \ /: *? "| + Имя файла не может быть пустым или содержать любой из следующих символов: (новая строка) \ /: *? "| - File %1 already exists. Do you want to overwrite it? - Файл «%1» уже существует. + Файл «%1» уже существует. Хотите перезаписать его? @@ -8969,39 +9004,39 @@ Do you want to overwrite it? ProjectCreatePopup - + New Project Новый проект - + OK OK - + Cancel Отмена - + Project Name cannot be empty or contain any of the following characters: \ / : * ? " < > | Имя проекта не может быть пустым или содержать любой из следующих символов: \ /: *? "<> | - + Bad project name: '%1' looks like an absolute file path Плохое имя проекта: «%1» выглядит как абсолютный путь к файлу - + Project '%1' already exists Проект «%1» уже существует - + It is not possible to create the %1 project. Не удалось создать проект %1. @@ -9019,17 +9054,17 @@ Do you want to overwrite it? Название проекта: - + Append $scenepath to +drawings Добавить путь к папке +drawings - + Append $scenepath to +inputs Добавить путь к папке +inputs - + Append $scenepath to +extras Добавить путь к папке+extras @@ -9037,7 +9072,7 @@ Do you want to overwrite it? ProjectSettingsPopup - + Project Settings Настройки проекта @@ -9045,65 +9080,105 @@ Do you want to overwrite it? PsdSettingsPopup - + Load PSD File Загрузить файл PSD - - Name: - Имя: + + Name: + Имя: + + + + Path: + Путь: + + + + Single Image + + + + + Frames + Кадры - - Path: - Путь: + + Columns + - + Expose in a Sub-xsheet Экспонировать в Sub-xsheet - + FileName#LayerName ИмяФайла#ИмяСлоя - + LayerName ИмяСлоя - + Load As: Загрузить как: - + Level Name: Имя уровня: - + Group Option Опции группы - + Ignore groups Игнорировать группы - + Expose layers in a group as columns in a sub-xsheet Выставлять слои в группе в виде столбцов в sub-xsheet - + Expose layers in a group as frames in a column Выставлять слои в группе в виде кадров в столбце + + + OK + OK + + + + Cancel + Отмена + + + + Flatten visible document layers into a single image. Layer styles are maintained. + + + + + Load document layers as frames into a single xsheet column. + + + + + Load document layers as xhseet columns. + + QApplication @@ -9113,12 +9188,12 @@ Do you want to overwrite it? Новая сцена - + Load Scene Загрузить сцену - + Quit Выйти @@ -9126,8 +9201,8 @@ Do you want to overwrite it? QObject - - + + @@ -9138,9 +9213,9 @@ Do you want to overwrite it? Да - - - + + + @@ -9151,25 +9226,31 @@ Do you want to overwrite it? Нет + + + Always Overwrite in This Scene + + + Auto Input Cell Numbers : %1 Автоматический ввод номера ячейки : %1 - - + + - - - - + + + + - - - + + + Overwrite Перезаписать @@ -9185,9 +9266,11 @@ Do you want to overwrite it? - - + + + + @@ -9200,33 +9283,33 @@ Do you want to overwrite it? - - - - - - - - - - - + + + + + + + + + + + - - + + - - - + + + - + Cancel Отмена @@ -9239,7 +9322,7 @@ Do you want to overwrite it? - + @@ -9258,17 +9341,32 @@ Do you want to overwrite it? Переопределение + + Save Curve + Сохранить кривую + + It is not possible to save the curve. Сохранение кривой невозможно. + + Load Curve + Загрузить кривую + + It is not possible to load the curve. Невозможно загрузить кривую. - + + Export Curve + Экспорт кривой + + + It is not possible to export data. Экспорт данных невозможен. @@ -9306,19 +9404,110 @@ Save the scene first. Невозможно создать папку. - - + + Rendering frame %1 / %2 + RenderListener + + + + + Precomputing %1 Frames + RenderListener + + + + + + of %1 + RenderListener + + + + + Finalizing render, please wait. + RenderListener + Завершается рендеринг, подождите. + + + + Aborting render... + RenderListener + + + + + The resolution of the output camera does not fit with the options chosen for the output file format. Разрешение выходной камеры не соответствует параметрам, выбранным для формата выходного файла. - + + Building Schematic... + RenderCommand + + + + + column + MultimediaProgressBar label (mode name) + + + + + layer + MultimediaProgressBar label (mode name) + + + + + Rendering %1%2, frame %3 / %4 + MultimediaProgressBar label + + + + + Rendering %1 frames of %2 + MultimediaProgressBar + + + + + %1 of %2 + MultimediaProgressBar - [totalframe] of [path] + + + + + Aborting render... + MultimediaProgressBar + + + + FFmpeg not found, please set the location in the Preferences and restart. FFmpeg не найден, укажите местоположение в настройках и перезапустите. - + + It is not possible to write the output: the file + RenderCommand + + + + + s are read only. + RenderCommand + + + + + is read only. + RenderCommand + + + + It is not possible to complete the rendering. Выполнение рендеринга невозможно. @@ -9358,11 +9547,16 @@ Save the scene first. - + Cleanup Settings Настройки очистки + + Save Cleanup Settings + Сохранить настройки очистки + + The cleanup settings file for the %1 level already exists. Do you want to overwrite it? @@ -9371,12 +9565,22 @@ Save the scene first. - - + + Don't Overwrite Не перезаписывать + + Load Cleanup Settings + Загрузить настройки очистки + + + + %1 does not exist. + %1 не существует. + + @@ -9394,9 +9598,12 @@ Do you want to save your changes? Вы хотите сохранить свои изменения? + + - + + Save Сохранить @@ -9434,7 +9641,7 @@ Are you sure ? - + Delete Удалить @@ -9481,7 +9688,7 @@ Are you sure ? - + Saving previewed frames.... Сохранение кадров предпросмотра .... @@ -9750,13 +9957,15 @@ Do you want to import it or load it from its original location? - + Import Импорт + + - + Load Загрузить @@ -9844,7 +10053,7 @@ What would you like to do? В любом случае - + OK @@ -9879,43 +10088,43 @@ Do you want to overwrite it? - - - + + + Couldn't save %1 Не удалось сохранить %1 - + The level %1 already exists. Do you want to overwrite it? Уровень %1 уже существует. Вы хотите переписать его? - + Overwrite Palette Переписать палитру - + Don't Overwrite Palette Не перезаписывать палитру - + The soundtrack %1 already exists. Do you want to overwrite it? Саундтрек %1 уже существует. Вы хотите переписать его? - + File %1 doesn't look like a TOONZ Scene Файл %1 не похож на сцену TOONZ - + A prior save of Scene '%1' was critically interupted. A partial save file was generated and changes may be manually salvaged from '%2'. @@ -9927,34 +10136,34 @@ Do you wish to continue loading the last good save or stop and try to salvage th Хотите продолжить загрузку последнего сохраненного файла или приостановить загрузку, чтобы попытаться восстановить его из временного файла сохранения? - + Continue Продолжить - + It is not possible to load the scene %1 because it does not belong to any project. Невозможно загрузить сцену %1, потому что она не принадлежит ни одному проекту. - + The Scene '%1' belongs to project '%2'. What do you want to do? Сцена «%1» относится к проекту «%2». Что вы хотите сделать? - + Import Scene Импорт сцены - + Change Project Сменить проект - + There were problems loading the scene %1. @@ -9963,31 +10172,31 @@ What do you want to do? Некоторые файлы могут отсутствовать. - + There were problems loading the scene %1. Some levels have not been loaded because their version is not supported Возникли проблемы с загрузкой сцены %1. Некоторые уровни не загружены, потому что их версия не поддерживается - + This scene is incompatible with pixels only mode of the current OpenToonz version. What would you like to do? Эта сцена несовместима с режимом "только пиксели" текущей версии OpenToonz. Чтовы хотите делать? - + Turn off pixels only mode Отключить режим "только пиксели" - + Keep pixels only mode on and resize the scene Оставить режим "только пиксели" и изменить размер сцены - + File '%1' will reload level '%2' as a duplicate column in the xsheet. Allow duplicate? @@ -9996,28 +10205,34 @@ Allow duplicate? Разрешить дубликаты? - + Allow Позволить - + Allow All Dups Разрешить все дупликаты - + No to All Dups Не разрешать дублирование - - + + It is not possible to load the level %1 Невозможно загрузить уровень %1 - + + + %1 more level(s) + + + + + The following level(s) use path with $scenefolder alias. @@ -10026,7 +10241,7 @@ Allow duplicate? - + They will not be opened properly when you load the scene next time. What do you want to do? @@ -10035,155 +10250,155 @@ What do you want to do? Что Вы хотите делать? - + Copy the levels to correspondent paths Копировать уровни в соответствующие пути - + Decode all $scenefolder aliases Декодировать все псевдонимы $scenefolder - + Save the scene only Сохранить только сцену - + Overwrite for All Перезаписать для всех - + Don't Overwrite for All Не перезаписывать для всех - - + + Failed to overwrite %1 Не удалось перезаписать %1 - - + + No Current Level Нет текущего уровня - - + + No Current Scene Нет текущей сцены - + Save the scene first Сначала сохранить сцену - + Save level Failed Ошибка сохранения уровня - + Are you sure you want to save the Default Settings? Вы действительно хотите сохранить настройки по умолчанию? - + It is not possible to load the %1 level. Невозможно загрузить уровень %1. - + The scene %1 doesn't exist. Сцены %1 не существует. - + Revert: the current scene has been modified. Are you sure you want to revert to previous version? Revert: текущая сцена была изменена. Вы действительно хотите вернуться к предыдущей версии? - + Revert Возвратиться - + The copied selection cannot be pasted in the current drawing. Скопированный выбор не может быть вставлен в текущий рисунок. - - - + + + Paste : Level %1 : Frame Вставить: Уровень %1: Кадр - + Delete Frames : Level %1 : Frame Удалить кадры: Уровень %1 : Кадр - + Cut Frames : Level %1 : Frame Вырезать кадры : Уровень %1 : Кадр - + Add Frames : Level %1 : Frame Добавить кадры: Уровень %1: Кадр - + Renumber : Level %1 Пересчитать : Уровень %1 - + Insert : Level %1 Вставить: Уровень %1 - + Reverse : Level %1 Обратить: Уровень %1 - + Swing : Level %1 Свинг : Уровень %1 - + Step %1 : Level %2 Шаг %1 : Уровень %2 - + Each %1 : Level %2 Каждый %1 : Уровень %2 - + Duplicate : Level %1 Дублировать : Уровень %1 - + Move Level to Scene : Level %1 Переместить уровень в сцену : Уровень %1 - + Inbetween : Level %1, Промежуточные кадры : Уровень %1 @@ -10278,24 +10493,36 @@ Are you sure you want to revert to previous version? Последний наверх - + Clone Level : %1 > %2 Клонировать уровень : %1 > %2 - + Clone Levels : Клонировать уровни : - + + Clone Level + CloneLevelUndo::LevelNamePopup + Клонировать уровень + + + + Level Name: + CloneLevelUndo::LevelNamePopup + Имя уровня: + + + Ok Ок - + FlipBook Flipbook @@ -10405,47 +10632,47 @@ undefined error. <пользовательский> - + The file name already exists. Do you want to overwrite it? Имя файла уже существует. Вы хотите переписать его? - + Deleting "%1". Are you sure? Удаление «%1». Вы уверены? - + The selected scene could not be found. Не удалось найти выбранную сцену. - + Script Console Консоль скриптов - + Hide Zero Thickness Lines Скрыть линии нулевой толщины - + Show Zero Thickness Lines Показать линии нулевой толщины - + Hide cursor size outline Скрыть форму кисти - + Show cursor size outline Показать форму кисти @@ -10497,7 +10724,7 @@ Are you sure? Запустить скрипт - + Create project Создать проект @@ -10550,42 +10777,43 @@ Are you sure? \ /: *? "<> | - - + + + File %1 already exists. Do you want to overwrite it? Файл «%1» уже существует. Хотите перезаписать его? - + Do you want to expose the renamed level ? Вы хотите экспонировать переименованный уровень? - + Expose Экспонировать - + Don't expose Не экспонировать - + Nothing to replace: no cells or columns selected. Нечего заменить: не выбраны ни ячейки, ни столбцы. - + The palette %1 already exists. Do you want to overwrite it? Палитра %1 уже существует. Вы хотите переписать её? - + Cannot load Color Model in current palette. Невозможно загрузить цветовую модель в текущей палитре. @@ -10609,14 +10837,14 @@ What do you want to do? Добавить цветовую палитру модели в палитру назначения. - + Choose Folder Выберите папку - - - + + + File Browser Браузер файлов @@ -10694,6 +10922,17 @@ The operation cannot be undone: are you sure? Premultiply + + Collecting assets... + Сбор материалов... + + + + + Abort + Прервать + + There are no assets to collect Нет активов для сбора @@ -10731,6 +10970,11 @@ The operation cannot be undone: are you sure? Ошибка с сохранением сцены %1. + + Importing scenes... + Импорт сцен... + + No scene imported Нет импортированной сцены @@ -10808,7 +11052,7 @@ The operation cannot be undone: are you sure? - + Rename Cell at Column %1 Frame %2 Переименовать ячейку в столбце %1 Кадр %2 @@ -10904,12 +11148,12 @@ to use the duplicate command in the xsheet / timeline. Изображения предварительного просмотра еще не готовы. - + Xsheet Xsheet - + Timeline Таймлайн @@ -10924,198 +11168,239 @@ to use the duplicate command in the xsheet / timeline. Изменить диапазон воспроизведения : %1 - %2 > %3 - %4 - + Use Level Extender Использовать удлинитель уровня - + Modify Sound Level Изменить уровень звука - + Move keyframe handle : %1 Handle of the keyframe %2 Переместить ушко ключевого кадра : %1 Ушко ключевого кадра %2 - + Move Columns Переместить столбцы - + Change Pegbar Изменить Pegbar - + Change Text at Column %1 Frame %2 Изменить текст в столбце %1 кадре %2 - + Toggle cycle of %1 Переключить цикл %1 - + Move Level Переместить уровень - - + + Schematic Схема - + Stage Schematic Схема сцены - + Fx Schematic Fx Схема - + Palette Палитра - - + + Studio Palette Палитра Studio - - + + Style Editor Редактор стилей - - + + Viewer Просмотрщик - + Command Bar Панель команд - + Tool Options Настройки инструмента - + Tasks Задания - + Batch Servers Пакетные серверы - + Scene Cast Состав сцены - - + + + Export Экспортировать - - + + Function Editor Редактор функций - - + + Message Center Центр сообщений - + LineTest Viewer LineTest просмотрщик - + LineTest Capture LineTest захват - - + + Combo Viewer ComboViewer - - + + History История - + + + Fx Settings + Настройки Fx + + Level - Уровень + Уровень - already exists! Are you sure you want to overwrite it? - уже существует! Вы действительно хотите перезаписать? + уже существует! Вы действительно хотите перезаписать? + + + + It is not possible to execute the merge column command because no column was selected. + Невозможно выполнить команду слияния столбцов, потому что не выбран столбец. + + + + It is not possible to execute the merge column command because only one columns is selected. + + + + + It is not possible to apply the match lines because no column was selected. + Невозможно применить разделительные линии, потому что не был выбран столбец. + + + + It is not possible to apply the match lines because two columns have to be selected. + Невозможно применить разделительные линии, потому что нужно выбрать два столбца. - + Match lines can be applied to Toonz raster levels only. Разделительные линии могут применяться только к растровым уровням Toonz. - + It is not possible to merge tlv columns containing more than one level Невозможно объединить столбцы tlv, содержащие более одного уровня - + The level you are using has not a valid palette. Уровень, который вы используете, не имеет допустимой палитры. - - + + It is not possible to merge tlv columns because no column was selected. + Невозможно объединить столбцы tlv, потому что не выбран столбец. + + + + It is not possible to merge tlv columns because at least two columns have to be selected. + Невозможно объединить столбцы tlv, потому что нужно выбрать как минимум два столбца. + + + + + Merging Tlv Levels... + Слияние уровней Tlv ... + + + + It is not possible to delete lines because no column, cell or level strip frame was selected. Невозможно удалить строки, потому что не выбран ни один столбец, ячейка или кадр Level Strip. - + The selected column is empty. Выбранный столбец пуст. - + Selected cells must be in the same column. Выбранные ячейки должны находиться в одном столбце. - + Match lines can be deleted from Toonz raster levels only Разделительные линии могут быть удалены только из растровых уровней Toonz @@ -11299,44 +11584,44 @@ to use the duplicate command in the xsheet / timeline. В указанном диапазоне кадров нет рисунка. - + Cannot open menubar settings template file. Re-installing Toonz will solve this problem. Не удается открыть файл шаблонов настроек меню. Повторная установка Toonz решит эту проблему. - + No more Undo operations available. Больше нет операций Undo. - + No more Redo operations available. Больше нет операций Redo. - + The rooms will be reset the next time you run Toonz. Вкладки будут восстановлены при следующем запуске OpenToonz. - + Visit Web Site Посетить сайт - + An update is available for this software. Visit the Web site for more information. Доступно обновление программного обеспечения. Подробную информацию можно найти на веб-сайте. - + Check for the latest version on launch. Проверять наличие обновлений при запуске. - + https://opentoonz.github.io/e/ https://opentoonz.github.io/e/ @@ -11351,7 +11636,33 @@ Visit the Web site for more information. Квалификатор%1 не является допустимым именем ключа. Пропуск. - + + Warning! + OverwriteDialog + Внимание! + + + + Overwrite + OverwriteDialog + Перезаписать + + + + Skip + OverwriteDialog + Пропустить + + + + File "%1" already exists. +Do you want to overwrite it? + OverwriteDialog + Файл «%1» уже существует. +Хотите перезаписать его? + + + Selected folders don't belong to the current project. Do you want to import them or load from their original location? Выбранные папки не относятся к текущему проекту. @@ -11372,6 +11683,67 @@ Do you want to import them or load from their original location? Cannot Read XML File Не удается загрузить XML-файл + + + It is not possible to find the %1 level. + FileData + Не удается найти уровень %1. + + + + There was an error copying %1 + FileData + Произошла ошибка при копировании %1 + + + + Save Previewed Images + Сохранить просмотренные изображения + + + + The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | + Имя файла не может быть пустым или содержать любой из следующих символов: (новая строка) \ /: *? "| + + + + Unsopporter raster format, cannot save + + + + + Cannot create %1 : %2 + Previewer warning %1:path %2:message + + + + + Cannot create %1 + Previewer warning %1:path + + + + + Saved %1 frames out of %2 in %3 + Previewer %1:savedframes %2:framecount %3:filepath + Сохранено %1 кадр из %2 в %3 + + + + Canceled! + Previewer + + + + + No frame to save! + + + + + Already saving! + + ReframePopup @@ -11500,9 +11872,8 @@ The audio file will not be included in the rendered clip. RenderListener - Finalizing render, please wait. - Завершается рендеринг, подождите. + Завершается рендеринг, подождите. @@ -11532,12 +11903,12 @@ The audio file will not be included in the rendered clip. ReplaceLevelPopup - + Replace Level Заменить уровень - + Replace Заменить @@ -11546,7 +11917,7 @@ The audio file will not be included in the rendered clip. Нечего заменить: ячейки не выбраны. - + File not found Файл не найден @@ -11556,12 +11927,12 @@ The audio file will not be included in the rendered clip. ReplaceParentDirectoryPopup - + Replace Parent Directory Заменить родительский каталог - + Replace Заменить @@ -12621,14 +12992,12 @@ Please commit or revert changes first. SaveCurvePopup - Save Curve - Сохранить кривую + Сохранить кривую - Save - Сохранить + Сохранить @@ -12647,12 +13016,12 @@ Please commit or revert changes first. SaveLevelAsPopup - + Save Level Сохранить уровень - + Save Сохранить @@ -12660,12 +13029,12 @@ Please commit or revert changes first. SavePaletteAsPopup - + Save Palette Сохранить палитру - + Save Сохранить @@ -12716,25 +13085,23 @@ Please commit or revert changes first. SavePreviewedPopup - Save Previewed Images - Сохранить просмотренные изображения + Сохранить просмотренные изображения - Save - Сохранить + Сохранить SaveSceneAsPopup - + Save Scene Сохранить сцену - + Save Сохранить @@ -12742,25 +13109,23 @@ Please commit or revert changes first. SaveSettingsPopup - Save Cleanup Settings - Сохранить настройки очистки + Сохранить настройки очистки - Save - Сохранить + Сохранить SaveSubSceneAsPopup - + Sub-xsheet Sub-xsheet - + Save Сохранить @@ -12892,62 +13257,72 @@ Please commit or revert changes first. Поменять сравниваемые изображения - + + Flip View + + + + + Reset View + Вид по умолчанию + + + Vector Guided Drawing Векторный гид - + Off Выкл - + Closest Drawing Ближайший рисунок - + Farthest Drawing Дальний рисунок - + All Drawings Все рисунки - + Save Previewed Frames Сохранить кадры предпросмотра - + Regenerate Preview Регенерировать предпросмотр - + Regenerate Frame Preview Регенерировать предпросмотр кадра - + Show %1 Показать %1 - + Hide %1 Скрыть %1 - + Table Таблица - + Select %1 Выбрать %1 @@ -12964,22 +13339,22 @@ Please commit or revert changes first. Выбрать - + Show / Hide Показать / скрыть - + Select Camera Выбрать камеру - + Select Pegbar Выбрать Pegbar - + Select Column Выбрать столбец @@ -12987,79 +13362,84 @@ Please commit or revert changes first. SceneViewerPanel - + Safe Area (Right Click to Select) Безопасная зона (Щелкните правой кнопкой мыши, чтобы выбрать) - + Field Guide Направляющая сетка - + Camera Stand View Стандартный вид с камеры - + 3D View 3D-просмотр - + Camera View Вид с камеры - + Freeze Заморозить - + Preview Предпросмотр - + Sub-camera Preview Предпросмотр суб-камеры - + Untitled Безымянный - + Scene: Сцена: + :: Project: + + + + :: Frame: :: Кадр: - - + + :: Zoom : :: Зум : - - + + (Flipped) (Перевёрнутый) - + :: Level: :: Уровень: - + Level: Уровень: @@ -13744,9 +14124,8 @@ Assign to '%3'? Стартовое окно - Choose Project - Выбрать проект + Выбрать проект @@ -13754,9 +14133,18 @@ Assign to '%3'? Создать новую сцену - Open Scene - Открыть сцену + Открыть сцену + + + + Current Project + + + + + Recent Scenes [Project] + @@ -13830,117 +14218,122 @@ Assign to '%3'? - + pixel пиксель - + cm см - + mm мм - + inch дюйм - + field поле - + Save In: Сохранить в: - + Camera Size: Размер камеры: - + Units: Единицы: - + Minutes Минут(ы) - + No Recent Scenes Нет недавних сцен - + The name cannot be empty. Имя не может быть пустым. - + The chosen file path is not valid. Выбранный путь к файлу недействителен. - + The width must be greater than zero. Ширина должна быть больше нуля. - + The height must be greater than zero. Высота должна быть больше нуля. - + The frame rate must be 1 or more. Частота кадров должна быть 1 или более. - + Preset name Имя предустановки - + Enter the name for %1 Введите имя для %1 - + Error : Preset Name is Invalid Ошибка: недопустимое имя предустановки - + The preset name must not use ','(comma). Имя файла предустановки не должно содержать "," (запятую). - + Bad camera preset савсэм плахой предустановк, слюшай Плохая предустановка камеры - + '%1' doesn't seem to be a well formed camera preset. Possibly the preset file has been corrupted «%1», похоже, не является предустановленной камерой. Возможно, файл предварительной настройки поврежден + + + The selected scene project '%1' is not in the Current Project list and may not open automatically. + + T @@ -14686,77 +15079,77 @@ Please refer to the user guide for details. XsheetGUI::CellArea - + Click to select keyframe, drag to move it Кликнуть для выделения кадра, потянуть для перемещения - + Click and drag to set the acceleration range Нажмите и перетащите, чтобы установить диапазон ускорения - + Click and drag to set the deceleration range Нажмите и перетащите, чтобы установить диапазон замедления - + Set the cycle of previous keyframes Установите цикл предыдущих ключевых кадров - + Click and drag to move the selection Кликнуть и потянуть для перемещения выделенного - + Click and drag to play Кликнуть и потянуть для воспроизведения - + Click and drag to repeat selected cells Нажмите и перетащите, чтобы повторить выбранные ячейки - + Reframe Перестроить - + Step Шаг - + Each Каждый - + Edit Cell Numbers Ввести номер кадра - + Replace Level Заменить уровень - + Replace with Заменить - + Paste Special Специальная вставка - + Edit Image Редактирование изображений @@ -14765,12 +15158,12 @@ Please refer to the user guide for details. Заменить - + Open Memo Открыть заметку - + Delete Memo Удалить заметку @@ -15130,52 +15523,62 @@ Hold F3 Key on the Viewer to Show This Frame Only XsheetViewer - + Untitled Безымянный - + Scene: Сцена: - + + :: Project: + + + + Frames Кадры - + + Frame + + + + (Sub) (Под) - + Level: Уровень: - + Selected: Выбранный: - + frame : кадр : - + frames * кадры * - + column столбец - + columns столбцы diff --git a/toonz/sources/translations/russian/toonzlib.ts b/toonz/sources/translations/russian/toonzlib.ts index 2389ff0..559d446 100644 --- a/toonz/sources/translations/russian/toonzlib.ts +++ b/toonz/sources/translations/russian/toonzlib.ts @@ -214,113 +214,113 @@ Обновление цветов с использованием выбранных расположений в палитре %1 - + Add Fx : Добавить эффект : - + Insert Fx : Вставить Fx : - - + + Create Linked Fx : %1 Создать связанный Fx : %1 - + Replace Fx : Заменить Fx : - + Unlink Fx : %1 - - %2 Разъединить Fx : %1 - - %2 - + Make Macro Fx : %1 Сделать Makro Fx : %1 - + Explode Macro Fx : %1 Разбить Macro Fx : %1 - + Create Output Fx Создать выход Fx - + Connect to Xsheet : Подключить к Xsheet : - + Disconnect from Xsheet : Отключить от Xsheet : - + Delete Link Удалить связь - + Delete Fx Node : %1 Удалить Fx-узел : %1 - + Paste Fx : Вставить Fx : - + Disconnect Fx Отключить Fx - + Connect Fx : %1 - %2 Подключить Fx : %1 - %2 - + Rename Fx : %1 > %2 Переименовать Fx : %1 - %2 - + Group Fx Сгруппировать Fx - + Ungroup Fx Разгруппировать Fx - + Rename Group : %1 > %2 Переименовать группу : %1 > %2 - + Set Keyframe Установить ключевой кадр - + Remove Keyframe Удалить ключевой кадр - + Cycle Цикл diff --git a/toonz/sources/translations/russian/toonzqt.ts b/toonz/sources/translations/russian/toonzqt.ts index 4471e2c..e402893 100644 --- a/toonz/sources/translations/russian/toonzqt.ts +++ b/toonz/sources/translations/russian/toonzqt.ts @@ -68,22 +68,22 @@ AdjustPaletteDialog - + Adjust Current Level to This Palette Отрегулируйте текущий уровень до этой палитры - + Tolerance Допуск - + Apply Применить - + Cancel Отмена @@ -271,14 +271,12 @@ Possibly the preset file has been corrupted DVGui - OK - OK + OK - Cancel - Отмена + Отмена @@ -389,7 +387,7 @@ Possibly the preset file has been corrupted DVGui::ProgressDialog - + OpenToonz OpenToonz @@ -401,7 +399,7 @@ Possibly the preset file has been corrupted Toonz - + OpenToonz OpenToonz @@ -896,7 +894,7 @@ Possibly the preset file has been corrupted FunctionSegmentViewer - + Linear Линейная @@ -927,7 +925,7 @@ Possibly the preset file has been corrupted - + File Файл @@ -947,74 +945,74 @@ Possibly the preset file has been corrupted Интерполяция: - + Apply Применить - + From От - + To До - + Step Шаг - - + + < < - - + + > > - + Speed Ускорение - + Ease Замедление - + Ease% Замедление % - + Expo Экспо - + Expr Выраж - + Const Const - + Similar Аналогичная - + ???? ???? @@ -1030,7 +1028,7 @@ Possibly the preset file has been corrupted FunctionSheet - + Function Editor Редактор функций @@ -1038,75 +1036,105 @@ Possibly the preset file has been corrupted FunctionSheetCellViewer - + Delete Key Удалить ключ - + Set Key Установить ключ - + Linear Interpolation Линейная интерполяция - + Speed In / Speed Out Interpolation Интерполяция ускорения в начале/в конце - + Ease In / Ease Out Interpolation Интерполяция замедления в нач./в конце - + Ease In / Ease Out (%) Interpolation Замедление в начале/в конце (%) Интерполяция - + Exponential Interpolation Экспоненциальная интерполяция - + Expression Interpolation Интерполяция выражений - + File Interpolation Интерполяция из файла - + Constant Interpolation Равномерная интерполяция - + Step 1 Шаг 1 - + Step 2 Шаг 2 - + Step 3 Шаг 3 - + Step 4 Шаг 4 + + + Activate Cycle + Активировать цикл + + + + Deactivate Cycle + Деактивировать цикл + + + + Show Inbetween Values + + + + + Hide Inbetween Values + + + + + Change Interpolation + + + + + Change Step + + FunctionToolbar @@ -1128,17 +1156,17 @@ Possibly the preset file has been corrupted FunctionTreeModel - + Stage Сцена - + FX FX - + Plastic Skeleton Plastic Skeleton @@ -1146,34 +1174,34 @@ Possibly the preset file has been corrupted FunctionTreeView - + Table Стол - + Save Curve Сохранить кривую - + Load Curve Загрузить кривую - + Export Data Экспорт данных - - + + Show Animated Only Показать только анимированные - - + + Show All Показать все @@ -1181,32 +1209,32 @@ Possibly the preset file has been corrupted FxColumnPainter - + &Disconnect from Xsheet &Отсоединить от Xsheet - + &Connect to Xsheet &Присоединить к Xsheet - + &Paste Add &Вставить Добавить - + &Preview &Предпросмотр - + &Uncache Fx &Очистить кэш Fx - + &Cache FX &Кэшировать FX @@ -1218,17 +1246,17 @@ Possibly the preset file has been corrupted FxOutputPainter - + Output Вывод - + &Delete &Удалить - + &Activate &Активировать @@ -1236,77 +1264,77 @@ Possibly the preset file has been corrupted FxPainter - + &Open Group &Открыть группу - + &Paste Replace &Вставить Заменить - + &Paste Add &Вставить Добавить - + &Delete &Удалить - + &Disconnect from Xsheet &Отсоединить от Xsheet - + &Connect to Xsheet &Присоединить к Xsheet - + &Create Linked FX &Создать связанный FX - + &Unlink &Разъединить - + &Make Macro FX &Сделать Macro FX - + &Explode Macro FX &Разбить Makro FX - + &Open Macro FX &Открыть Makro FX - + &Save As Preset... &Сохранить как пресет... - + &Preview &Предпросмотр - + &Uncache FX &Очистить кэш Fx - + &Cache FX &Кэшировать FX @@ -1314,17 +1342,17 @@ Possibly the preset file has been corrupted FxPalettePainter - + &Disconnect from Xsheet &Отсоединить от Xsheet - + &Connect to Xsheet &Присоединить к Xsheet - + &Preview &Предпросмотр @@ -1332,12 +1360,12 @@ Possibly the preset file has been corrupted FxSchematicLink - + &Delete &Удалить - + &Paste Insert &Вставить @@ -1345,7 +1373,7 @@ Possibly the preset file has been corrupted FxSchematicOutputNode - + Output Вывод @@ -1353,12 +1381,12 @@ Possibly the preset file has been corrupted FxSchematicPort - + &Disconnect from Xsheet &Отсоединить от Xsheet - + &Connect to Xsheet &Присоединить к Xsheet @@ -1366,21 +1394,21 @@ Possibly the preset file has been corrupted FxSchematicScene - + Cannot Paste Insert a selection of unconnected FX nodes. Select FX nodes and related links before copying or cutting the selection you want to paste. Невозможно вставить выбранные неподключенные узлы FX. Выберите FX-узлы и связи перед копированием или сокращением выбора, который вы хотите вставить. - + Cannot Paste Add a selection of unconnected FX nodes. Select FX nodes and related links before copying or cutting the selection you want to paste. Невозможно вставить (добавить) выбранные неподключенные узлы FX. Выберите FX-узлы и связи перед копированием или сокращением выбора, который вы хотите вставить. - + Cannot Paste Replace a selection of unconnected FX nodes. Select FX nodes and related links before copying or cutting the selection you want to paste. Невозможно вставить (заменить) выбранные неподключенные узлы FX. @@ -1390,7 +1418,7 @@ Select FX nodes and related links before copying or cutting the selection you wa FxSchematicXSheetNode - + XSheet Xsheet @@ -1398,37 +1426,37 @@ Select FX nodes and related links before copying or cutting the selection you wa FxSettings - + &Camera Preview &Предпросмотр камеры - + &Preview &Предпросмотр - + &White Background &Белый фон - + &Black Background &Черный фон - + &Checkered Background &Клетчатый фон - + Fx Settings Настройки эффектов - + : : @@ -1436,17 +1464,17 @@ Select FX nodes and related links before copying or cutting the selection you wa FxXSheetPainter - + XSheet Xsheet - + &Paste Add &Вставить Добавить - + &Preview &Предпросмотр @@ -1528,9 +1556,8 @@ Select FX nodes and related links before copying or cutting the selection you wa MyPaintBrushStyleChooserPage - Plain color - Простой цвет + Простой цвет @@ -1554,139 +1581,139 @@ Select FX nodes and related links before copying or cutting the selection you wa PaletteViewer - - - + + + &Save Palette As &Сохранить палитру как - - - + + + &Save Palette &Сохранить палитру - - + + Lock Palette Блокировать палитру - + &Lock Palette &Блокировать палитру - + Options Опции - + &Small Thumbnails View &Маленькие иконки - + &Medium Thumbnails View &Средние иконки - + &Large Thumbnails View &Большие иконки - + &List View &Посмотреть список - + Style Name Имя стиля - + StudioPalette Name StudioPalette Имя - + Both Names Оба имени - + &New Page &Новая страница - - + + &New Style &Новый стиль - - + + &Move Palette &Переместить палитру - + &Palette Gizmo &Палитра Gizmo - + New Page Новая страница - + Delete Page Удалить страницу - + Overwrite Перезаписать - + Don't Overwrite Не перезаписывать - + Palette Палитра - + Level Palette: Палитра уровней: - + Cleanup Palette Палитра очистки - + Studio Palette Studio Палитра - + (Color Model: (Цветовая модель: - + ) ) @@ -1694,22 +1721,22 @@ Select FX nodes and related links before copying or cutting the selection you wa PaletteViewerGUI::PageViewer - + - No Styles - - Нет стилей - - + Name Editor Редактор имен - + New Style Новый стиль - + New Page Новая страница @@ -1762,6 +1789,19 @@ Select FX nodes and related links before copying or cutting the selection you wa + PlaneViewer + + + Reset View + + + + + Fit To Window + + + + PointParamField @@ -1796,11 +1836,10 @@ Are you sure? - - - - - + + + + Cancel Отмена @@ -1947,12 +1986,12 @@ Are you sure? Невозможно загрузить траекторию движения. - + Stage Schematic Stage Schematic - + FX Schematic FX Schematic @@ -1962,31 +2001,48 @@ Are you sure? Изменить стиль Палитра : %1 Стиль#%2 [R%3 G%4 B%5] -> [R%6 G%7 B%8] - + + Plain color + VectorBrushStyleChooserPage + Простой цвет + + + + Custom Texture + TextureStyleChooserPage + + + + + Plain color + MyPaintBrushStyleChooserPage + Простой цвет + + + + Plain color + SpecialStyleChooserPage + Простой цвет + + Save - Сохранить + Сохранить - Discard - Сбросить + Сбросить - - Yes - Да + Да - - No - Нет + Нет - Replace - Заменить + Заменить @@ -2050,17 +2106,17 @@ Are you sure? %1 : линейный откл - + Palette Палитра - + Overwrite Перезаписать - + Don't Overwrite Не перезаписывать @@ -2070,6 +2126,16 @@ Are you sure? Невозможно назначить ярлык с модификаторами для команд визуализации. + + Current Frame: + + + + + File History + + + Fullpath: Полный путь: @@ -2294,9 +2360,12 @@ Are you sure? OpenToonz 1.1 - OpenToonz 1.2 - OpenToonz 1.2 + OpenToonz 1.2 + + + OpenToonz 1.3 + OpenToonz 1.3 @@ -2319,39 +2388,44 @@ Are you sure? Подтверждение - + Apply Применить - + + OK + OK + + + Styles you are going to delete are used to paint lines and areas in the animation level. Стили, которые вы собираетесь удалить, используются для рисования линий и областей на уровне анимации. - + How do you want to proceed? Как вы хотите поступить? - + Delete Styles Only Удалить только стили - + Delete Styles, Lines and Areas Удалить стили, линии и области - + Ok Ok - + Deletion of Lines and Areas from raster-based levels is not undoable. Are you sure? Удаление строк и областей из растровых уровней не отменяется. @@ -2368,72 +2442,72 @@ Are you sure? Установить - + Failed to compile m_textureShader.vert. gl Не удалось скомпилировать m_textureShader.vert. - + Failed to compile m_shader.frag. gl Не удалось скомпилировать m_shader.frag. - + Failed to add m_shader.vert. gl Не удалось добавить m_shader.vert. - + Failed to add m_shader.frag. gl Не удалось добавить m_shader.frag. - + Failed to link simple shader: %1 gl Не удалось связать простой шейдер: %1 - - + + Failed to get attribute location of %1 gl Не удалось получить расположение атрибута %1 - - + + Failed to get uniform location of %1 gl Не удалось получить одинаковое расположение %1 - + Failed to Open 3DLUT File. Не удалось открыть файл 3DLUT. - + Failed to Load 3DLUT File. It should start with "3DMESH" keyword. Не удалось загрузить 3DLUT файл. Он должен начинаться с дескриптора "3DMESH". - + Failed to Load 3DLUT File. The second line should be "Mesh [Input bit depth] [Output bit depth]" Не удалось загрузить файл 3DLUT. Вторая строка должна быть "Mesh [глубина цвета на входе] [глубина цвета на выходе]" - - + + Failed to Load 3DLUT File. Не удалось загрузить файл 3DLUT. @@ -2441,7 +2515,7 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< QPushButton - + OK OK @@ -2449,61 +2523,61 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< SchematicViewer - + &Fit to Window &По размеру окна - + &Focus on Current &Фокус на текущем - + &Reorder Nodes &Изменение порядка узлов - + &Reset Size &Сбросить размер - - - + + + &Minimize Nodes &Минимизировать узлы - - - + + + &Maximize Nodes &Максимизировать узлы - + &New Pegbar &Новый Pegbar - + &New Camera &Новая камера - + &New Motion Path &Новая траектория движения - + &Swtich output port display mode &Переключение отображения выходного порта - + &Toggle node icons &Переключить иконки узлов @@ -2542,9 +2616,8 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< SpecialStyleChooserPage - Plain color - Простой цвет + Простой цвет @@ -2621,90 +2694,147 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< StudioPaletteTreeViewer - + + The current palette %1 +in the studio palette has been modified. Do you want to save your changes? + + + + + Save + Сохранить + + + + Discard + Сбросить + + + + Convert %1 to Studio Palette and Overwrite. +Are you sure ? + + + + Yes + Да + + + No + Нет + + + This folder is not empty. Delete anyway? Эта папка не пуста. Удалить в любом случае? - + + Convert + + + + + Replacing all selected palettes with the palette "%1". +Are you sure ? + + + + + Replacing the palette "%1" with the palette "%2". +Are you sure ? + + + + + Replace + Заменить + + + New Palette Новая палитра - + New Folder Новая папка - + Delete Folder Удалить папку - - + + Load into Current Palette Загрузка в текущую палитру - + Adjust Current Level to This Palette Отрегулируйте текущий уровень до этой палитры - - + + Merge to Current Palette Слияние с текущей палитрой - - + + Replace with Current Palette Заменить текущую палитру - + Delete Palette Удалить палитру - + Convert to Studio Palette and Overwrite Конвертировать в Studio Palette и перезаписать - + Search for Palettes Поиск палитр - + + Delete Удалить - + the palette "%1" палитра "%1" - + the selected palettes выбранных палитр - + Move %1 to "%2". Are you sure ? Перемещение %1 в "%2", вы уверены? - + Move Переместить - + + + + + Cancel Отмена @@ -2712,12 +2842,12 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< StyleEditor - + Generated Сформирован - + Trail Хвост @@ -2728,92 +2858,92 @@ Apply применение - + Show or hide parts of the Color Page. Показать или скрыть части цветовой страницы. - + Toggle orientation of the Color Page. Переключить ориентацию цветовой страницы. - + Auto Автоматически - + Apply Применить - + Apply changes to current style Применить изменения к текущему стилю - + Automatically update style changes Автообновление изменений стиля - + Return To Previous Style Вернуться в предыдущий стиль - + Current Style Текущий стиль - + No Style Selected Стиль не выбран - + Palette Палитра - + Style Editor - No Valid Style Selected Редактор стилей - не выбран правильный стиль - + [CLEANUP] [ОЧИСТКА] - + Wheel Круг - + HSV HSV - + Alpha Альфа - + RGB RGB - + [STUDIO] [STUDIO] - + [LEVEL] [УРОВЕНЬ] @@ -2822,7 +2952,7 @@ Apply Простой - + Texture Текстура @@ -2835,30 +2965,30 @@ Apply Пользовательский - + Vector Brush Векторная кисть - - - + + + Color Цвет - + Vector Вектор - + Raster Растр - - + + Settings Настройки @@ -2866,37 +2996,37 @@ Apply StyleEditorGUI::ColorChannelControl - + R R - + G G - + B B - + A A - + H H - + S S - + V V @@ -2927,12 +3057,12 @@ Apply StyleEditorGUI::SettingsPage - + Autopaint for Lines Автозаливка линий - + Reset to default Сбросить по умолчанию @@ -2976,6 +3106,19 @@ Apply + SwatchViewer + + + Reset View + + + + + Fit To Window + + + + TMessageViewer @@ -3023,9 +3166,8 @@ Apply VectorBrushStyleChooserPage - Plain color - Простой цвет + Простой цвет diff --git a/toonz/sources/translations/spanish/tnztools.ts b/toonz/sources/translations/spanish/tnztools.ts index 3a8bbbe..365e1ef 100644 --- a/toonz/sources/translations/spanish/tnztools.ts +++ b/toonz/sources/translations/spanish/tnztools.ts @@ -638,6 +638,20 @@ + FullColorFillTool + + Fill Depth + Profundidad de relleno + + + + HandToolOptionsBox + + Reset Position + + + + HookTool Snap @@ -1260,6 +1274,13 @@ Do you want to proceed? + RotateToolOptionsBox + + Reset Rotation + + + + RulerToolOptionsBox X: @@ -1659,4 +1680,11 @@ movido hacia el final de la primera página de la paleta. Rectangular + + ZoomToolOptionsBox + + Reset Zoom + + + diff --git a/toonz/sources/translations/spanish/toonz.ts b/toonz/sources/translations/spanish/toonz.ts index 3a104ce..490c373 100644 --- a/toonz/sources/translations/spanish/toonz.ts +++ b/toonz/sources/translations/spanish/toonz.ts @@ -109,11 +109,11 @@ ApplyMatchlinesCommand It is not possible to apply the match lines because no column was selected. - No es posible aplicar las líneas de coincidencia porque no se ha seleccionado ninguna columna. + No es posible aplicar las líneas de coincidencia porque no se ha seleccionado ninguna columna. It is not possible to apply the match lines because two columns have to be selected. - No es posible aplicar las líneas de coincidencia porque se deben seleccionar dos columnas. + No es posible aplicar las líneas de coincidencia porque se deben seleccionar dos columnas. @@ -1055,11 +1055,11 @@ What do you want to do? CloneLevelUndo::LevelNamePopup Clone Level - Clonar nivel + Clonar nivel Level Name: - Nombre del nivel: + Nombre del nivel: @@ -1236,6 +1236,10 @@ What do you want to do? (Flipped) (Invertido) + + :: Project: + + CommandBar @@ -1857,11 +1861,11 @@ contuviera información de PPP, entonces se usarán los de la cámara actual. ExportCurvePopup Export Curve - Exportar curva + Exportar curva Export - Exportar + Exportar @@ -2257,26 +2261,26 @@ contuviera información de PPP, entonces se usarán los de la cámara actual. FileData It is not possible to find the %1 level. - No es posible encontrar el nivel %1. + No es posible encontrar el nivel %1. There was an error copying %1 - Se produjo un error al copiar %1 + Se produjo un error al copiar %1 FileSelection Abort - Abortar + Abortar Collecting assets... - Recolectando recursos... + Recolectando recursos... Importing scenes... - Importando escenas... + Importando escenas... @@ -3173,6 +3177,10 @@ Usar los números de fotograma como referencia. Invalid data file. Archivo de datos inválido. + + Drawing: + + LoadBoardPresetFilePopup @@ -3204,11 +3212,11 @@ Usar los números de fotograma como referencia. LoadCurvePopup Load Curve - Cargar curva + Cargar curva Load - Cargar + Cargar @@ -3351,15 +3359,15 @@ Usar los números de fotograma como referencia. LoadSettingsPopup Load Cleanup Settings - Cargar opciones de limpieza + Cargar opciones de limpieza Load - Cargar + Cargar %1 does not exist. - %1 no existe. + %1 no existe. @@ -3713,7 +3721,7 @@ Usar los números de fotograma como referencia. &Send Back - &Enviar al fondo + &Enviar al fondo &Send Backward @@ -5399,6 +5407,30 @@ Usar los números de fotograma como referencia. Flip Viewer Horizontally Invertir visor horizontalmente + + &Send to Back + + + + Reset Zoom + + + + Reset Rotation + + + + Reset Position + + + + Brush Tool - Eraser (Raster option) + + + + Brush Tool - Lock Alpha + + MatchlinesDialog @@ -5531,15 +5563,15 @@ Nota: Los comandos duplicados serán ignorados. Sólo el último aparecerá en l MergeCmappedCommand It is not possible to merge tlv columns because no column was selected. - No es posible fusionar columnas TLV porque no se ha seleccionado ninguna. + No es posible fusionar columnas TLV porque no se ha seleccionado ninguna. It is not possible to merge tlv columns because at least two columns have to be selected. - No es posible fusionar columnas TLV porque se deben seleccionar al menos dos de ellas. + No es posible fusionar columnas TLV porque se deben seleccionar al menos dos de ellas. Merging Tlv Levels... - Fusionando niveles TLV... + Fusionando niveles TLV... @@ -5568,16 +5600,20 @@ Nota: Los comandos duplicados serán ignorados. Sólo el último aparecerá en l Apply Aplicar + + Level %1 already exists! Are you sure you want to overwrite it? + + MergeColumnsCommand It is not possible to execute the merge column command because no column was selected. - No es posible ejecutar el comando de fusión de columnas porque no se seleccionó ninguna. + No es posible ejecutar el comando de fusión de columnas porque no se seleccionó ninguna. It is not possible to execute the merge column command because only one columns is selected. - No es posible ejecutar el comando de fusión de columnas porque sólo hay una seleccionada. + No es posible ejecutar el comando de fusión de columnas porque sólo hay una seleccionada. @@ -5661,10 +5697,17 @@ What do you want to do? + MyVideoWidget + + Camera is not available + La cámara no se encuentra disponible + + + MyViewFinder Camera is not available - La cámara no se encuentra disponible + La cámara no se encuentra disponible @@ -6058,16 +6101,16 @@ What do you want to do? Overwrite - Sobrescribir + Sobrescribir Skip - Omitir + Omitir File "%1" already exists. Do you want to overwrite it? - El archivo "%1" ya existe. + El archivo "%1" ya existe. ¿Se desea sobrescribirlo? @@ -6406,6 +6449,10 @@ ADVERTENCIA : Tamaño de imagen no coincidente. El tamaño de la imagen guardada Black & White Blanco y negro + + Subcamera + + PencilTestSaveInFolderPopup @@ -7647,12 +7694,12 @@ contengan píxeles transparentes en formatos de imagen sin soporte para canal al Previewer The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | - El nombre de archivo no puede estar vacío o contener ninguno de los siguientes caracteres:(nueva línea) \ / : * ? " | + El nombre de archivo no puede estar vacío o contener ninguno de los siguientes caracteres:(nueva línea) \ / : * ? " | File %1 already exists. Do you want to overwrite it? - El archivo %1 ya existe. + El archivo %1 ya existe. ¿Sobrescribirlo? @@ -7816,6 +7863,38 @@ Do you want to overwrite it? Level Name: Nombre de nivel: + + Single Image + + + + Frames + Fotog. + + + Columns + Columnas + + + Flatten visible document layers into a single image. Layer styles are maintained. + + + + Load document layers as frames into a single xsheet column. + + + + Load document layers as xhseet columns. + + + + OK + Aceptar + + + Cancel + + QApplication @@ -8745,11 +8824,11 @@ Do you want to overwrite it? Level - Nivel + Nivel already exists! Are you sure you want to overwrite it? - ya existe! ¿Sobrescribirlo? + ya existe! ¿Sobrescribirlo? It is not possible to merge tlv columns containing more than one level @@ -9565,6 +9644,240 @@ en las Preferencias, para poder usar esta opción en la planilla o línea de tie Clear All Relative Onion Skin Markers Limpiar todos los marcadores relativos de Piel de cebolla + + Always Overwrite in This Scene + + + + + %1 more level(s) + + + + + Fx Settings + Opciones de efectos + + + Save Curve + Guardar curva + + + Load Curve + Cargar curva + + + Export Curve + Exportar curva + + + Rendering frame %1 / %2 + RenderListener + + + + Precomputing %1 Frames + RenderListener + + + + of %1 + RenderListener + + + + Finalizing render, please wait. + RenderListener + Finalizando el procesamiento, por favor esperar. + + + Aborting render... + RenderListener + + + + Building Schematic... + RenderCommand + + + + column + MultimediaProgressBar label (mode name) + + + + layer + MultimediaProgressBar label (mode name) + + + + Rendering %1%2, frame %3 / %4 + MultimediaProgressBar label + + + + Rendering %1 frames of %2 + MultimediaProgressBar + + + + %1 of %2 + MultimediaProgressBar - [totalframe] of [path] + + + + Aborting render... + MultimediaProgressBar + + + + It is not possible to write the output: the file + RenderCommand + + + + s are read only. + RenderCommand + + + + is read only. + RenderCommand + + + + Save Cleanup Settings + Guardar opciones de limpieza + + + Load Cleanup Settings + Cargar opciones de limpieza + + + It is not possible to find the %1 level. + FileData + No es posible encontrar el nivel %1. + + + There was an error copying %1 + FileData + Se produjo un error al copiar %1 + + + Clone Level + CloneLevelUndo::LevelNamePopup + Clonar nivel + + + Level Name: + CloneLevelUndo::LevelNamePopup + + + + Collecting assets... + Recolectando recursos... + + + Abort + Abortar + + + Importing scenes... + Importando escenas... + + + It is not possible to execute the merge column command because no column was selected. + No es posible ejecutar el comando de fusión de columnas porque no se seleccionó ninguna. + + + It is not possible to execute the merge column command because only one columns is selected. + + + + It is not possible to apply the match lines because no column was selected. + No es posible aplicar las líneas de coincidencia porque no se ha seleccionado ninguna columna. + + + It is not possible to apply the match lines because two columns have to be selected. + No es posible aplicar las líneas de coincidencia porque se deben seleccionar dos columnas. + + + It is not possible to merge tlv columns because no column was selected. + No es posible fusionar columnas TLV porque no se ha seleccionado ninguna. + + + It is not possible to merge tlv columns because at least two columns have to be selected. + No es posible fusionar columnas TLV porque se deben seleccionar al menos dos de ellas. + + + Merging Tlv Levels... + Fusionando niveles TLV... + + + Save Previewed Images + Guardar imágenes de previsualización + + + The file name cannot be empty or contain any of the following characters:(new line) \ / : * ? " | + + + + Unsopporter raster format, cannot save + + + + Cannot create %1 : %2 + Previewer warning %1:path %2:message + + + + Cannot create %1 + Previewer warning %1:path + + + + Saved %1 frames out of %2 in %3 + Previewer %1:savedframes %2:framecount %3:filepath + Se guardaron %1 fotogramas de %2 en %3 + + + Canceled! + Previewer + + + + No frame to save! + + + + Already saving! + + + + Warning! + OverwriteDialog + ¡Advertencia! + + + Overwrite + OverwriteDialog + Sobrescribir + + + Skip + OverwriteDialog + Omitir + + + File "%1" already exists. +Do you want to overwrite it? + OverwriteDialog + El archivo "%1" ya existe. +¿Se desea sobrescribirlo? + + + %1 does not exist. + %1 no existe. + ReframePopup @@ -9671,7 +9984,7 @@ El archivo de sonido no será incluido en el clip procesado. RenderListener Finalizing render, please wait. - Finalizando el procesamiento, por favor esperar. + Finalizando el procesamiento, por favor esperar. @@ -10565,11 +10878,11 @@ Por favor enviar o revertir los cambios antes. SaveCurvePopup Save Curve - Guardar curva + Guardar curva Save - Guardar + Guardar @@ -10644,11 +10957,11 @@ Por favor enviar o revertir los cambios antes. SavePreviewedPopup Save Previewed Images - Guardar imágenes de previsualización + Guardar imágenes de previsualización Save - Guardar + Guardar @@ -10666,11 +10979,11 @@ Por favor enviar o revertir los cambios antes. SaveSettingsPopup Save Cleanup Settings - Guardar opciones de limpieza + Guardar opciones de limpieza Save - Guardar + Guardar @@ -10903,6 +11216,14 @@ Por favor enviar o revertir los cambios antes. Select %1 Seleccionar %1 + + Flip View + + + + Reset View + Restablecer vista + SceneViewerPanel @@ -10966,6 +11287,10 @@ Por favor enviar o revertir los cambios antes. (Flipped) (Invertido) + + :: Project: + + SeparateColorsPopup @@ -11467,7 +11792,7 @@ Assign to '%3'? Choose Project - Escoger un proyecto + Escoger un proyecto Create a New Scene @@ -11475,7 +11800,7 @@ Assign to '%3'? Open Scene - Abrir una escena + Abrir una escena Scene Name: @@ -11627,6 +11952,18 @@ Es posible que el archivo del ajuste esté corrupto Minutes minutos + + Current Project + + + + Recent Scenes [Project] + + + + The selected scene project '%1' is not in the Current Project list and may not open automatically. + + SubSheetBar @@ -12726,5 +13063,13 @@ Mantener presionada la tecla F3 para ver sólo este fotograma en el visorZoom in/out of timeline Ampliar/reducir el tiempo + + :: Project: + + + + Frame + + diff --git a/toonz/sources/translations/spanish/toonzqt.ts b/toonz/sources/translations/spanish/toonzqt.ts index 361210b..3fbf2a3 100644 --- a/toonz/sources/translations/spanish/toonzqt.ts +++ b/toonz/sources/translations/spanish/toonzqt.ts @@ -289,11 +289,11 @@ Es posible que el archivo de dicho ajuste se encuentre corrupto. DVGui OK - Aceptar + Aceptar Cancel - Cancelar + Cancelar @@ -1019,6 +1019,30 @@ Es posible que el archivo de dicho ajuste se encuentre corrupto. Step 4 Exposición x4 + + Activate Cycle + Activar ciclo + + + Deactivate Cycle + Desactivar ciclo + + + Show Inbetween Values + + + + Hide Inbetween Values + + + + Change Interpolation + + + + Change Step + + FunctionToolbar @@ -1383,7 +1407,7 @@ Seleccionar los nodos de efecto y sus vínculos relacionados antes de copiar o c MyPaintBrushStyleChooserPage Plain color - Color pleno + Color pleno @@ -1607,6 +1631,17 @@ Seleccionar los nodos de efecto y sus vínculos relacionados antes de copiar o c + PlaneViewer + + Reset View + + + + Fit To Window + + + + PointParamField Y: @@ -1685,19 +1720,19 @@ Seleccionar los nodos de efecto y sus vínculos relacionados antes de copiar o c Save - Guardar + Guardar Discard - Descartar + Descartar Yes - + No - No + No Stage Schematic @@ -2025,7 +2060,7 @@ Are you sure? Replace - Reemplazar + Reemplazar Modify Fx Param : %1 @@ -2156,7 +2191,43 @@ La segunda línea debería tener la forma "Mesh [profundidad de bits de ent OpenToonz 1.2 - OpenToonz 1.2 + OpenToonz 1.2 + + + Custom Texture + TextureStyleChooserPage + + + + Current Frame: + + + + File History + + + + OpenToonz 1.3 + OpenToonz 1.3 + + + Plain color + VectorBrushStyleChooserPage + Color pleno + + + Plain color + MyPaintBrushStyleChooserPage + Color pleno + + + Plain color + SpecialStyleChooserPage + Color pleno + + + OK + Aceptar @@ -2254,7 +2325,7 @@ La segunda línea debería tener la forma "Mesh [profundidad de bits de ent SpecialStyleChooserPage Plain color - Color pleno + Color pleno @@ -2388,6 +2459,50 @@ La segunda línea debería tener la forma "Mesh [profundidad de bits de ent Cancel Cancelar + + The current palette %1 +in the studio palette has been modified. Do you want to save your changes? + + + + Save + Guardar + + + Discard + Descartar + + + Convert %1 to Studio Palette and Overwrite. +Are you sure ? + + + + Yes + + + + No + No + + + Replacing all selected palettes with the palette "%1". +Are you sure ? + + + + Replacing the palette "%1" with the palette "%2". +Are you sure ? + + + + Replace + Reemplazar + + + Convert + + StudioPaletteViewer @@ -2646,6 +2761,17 @@ Autom + SwatchViewer + + Reset View + + + + Fit To Window + + + + TMessageViewer Errors @@ -2694,7 +2820,7 @@ Autom VectorBrushStyleChooserPage Plain color - Color pleno + Color pleno diff --git a/toonz/sources/translations_docs/english/AddIno.tex b/toonz/sources/translations_docs/english/AddIno.tex new file mode 100644 index 0000000..3374534 --- /dev/null +++ b/toonz/sources/translations_docs/english/AddIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Add Ino\medskip +\par +\normalsize +Simple addition of images\par +Images will become brighter using addition\par +Formula = Back + Fore\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\par +You can also specify larger values from 1 to 10.0\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is ON. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/BlurIno.tex b/toonz/sources/translations_docs/english/BlurIno.tex new file mode 100644 index 0000000..bafa0f2 --- /dev/null +++ b/toonz/sources/translations_docs/english/BlurIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Blur Ino\medskip +\par +\normalsize +Blurs the image.\\ +\par +We use a Gaussian distribution, for the blur method.\par +Therefore, there is no directional result in the image.\\ +\par +Alpha channel will be processed.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +\\ +Reference\par +Connect the reference image to put the strength of the effect into each Pixel.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Radius\par +Specifies the radius of the blur.\par +The unit is mm.\\ +\\ +Reference\par +Choose how Reference image values put the strength of the effect into each Pixel.\par +An image is connected to the \textquotedbl Reference\textquotedbl \ of the input,\par +Choose from Red/Green/Blue/Alpha/Luminance/Nothing.\par +Choose Nothing when you do not want this effect, it will turn off the connection.\par +The default setting is Red. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/ChannelSelectorIno.tex b/toonz/sources/translations_docs/english/ChannelSelectorIno.tex new file mode 100644 index 0000000..397e8cd --- /dev/null +++ b/toonz/sources/translations_docs/english/ChannelSelectorIno.tex @@ -0,0 +1,80 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Channel Selector Ino\medskip +\par +\normalsize +Selects each RGBA channel from multiple inputs (Source1,2,3,4).\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source1\\ +Source2\\ +Source3\\ +Source4\par +Any one or more images to connect and process.\par +You can connect up to a maximum of four images.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Red\par +\noindent \ \, Image\par +Specifies the input image to be used as the Red channel.\par +choose from among Source1/Source2/Source3/Source4.\par +You can type a value from 1 to 4 on the keyboard input.\par +The default value is 0.\\ +\par +\noindent \ \, Channel\par +The channel to be used as the Red channel,\par +choose from Red/Green/Blue/Alpha.\par +The default value is Red.\\ +\\ +Green\par +\noindent \ \, Image\par +Specifies the input image to be used as the Green channel.\par +Options are the same as the \textquotedbl Red Image\textquotedbl .\\ +\par +\noindent \ \, Channel\par +The channel to be used as the Green channel,\par +choose from Red/Green/Blue/Alpha.\par +The default value is Green.\\ +\\ +Blue\par +\noindent \ \, Image\par +Specifies the input image to be used as the Blue channel.\par +Options are the same as the \textquotedbl Red Image\textquotedbl .\\ +\par +\noindent \ \, Channel\par +The channel to be used as the Blue channel, + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +choose from Red/Green/Blue/Alpha.\par +The default value is Blue.\\ +\\ +Alpha\par +\noindent \ \, Image\par +Specifies the input image to be used as the Alpha channel.\par +Options are the same as the \textquotedbl Red Image\textquotedbl .\\ +\par +\noindent \ \, Channel\par +The channel to be used as the Alpha channel,\par +choose from Red/Green/Blue/Alpha.\par +The default value is Alpha. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/ColorBurnIno.tex b/toonz/sources/translations_docs/english/ColorBurnIno.tex new file mode 100644 index 0000000..13bf83d --- /dev/null +++ b/toonz/sources/translations_docs/english/ColorBurnIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Color Burn Ino\medskip +\par +\normalsize +Color Burn the image\par +Darkens, enhancing the contrast\par +Formula = 1 - (1 - Back) / Fore \ \ ※ When Fore is 0 the result value is 0\par +Formula shows the case of RGB values from 0 to 1.\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is ON. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/ColorDodgeIno.tex b/toonz/sources/translations_docs/english/ColorDodgeIno.tex new file mode 100644 index 0000000..da60398 --- /dev/null +++ b/toonz/sources/translations_docs/english/ColorDodgeIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Color Dodge Ino\medskip +\par +\normalsize +Color Dodge the image\par +Brightens, dropping the contrast\par +Formula = Back / (1 - Fore) \ \ ※ When Fore is 1 the result value is 1\par +Formula shows the case of RGB values from 0 to 1.\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is ON. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/CrossDissolveIno.tex b/toonz/sources/translations_docs/english/CrossDissolveIno.tex new file mode 100644 index 0000000..2cb2ee4 --- /dev/null +++ b/toonz/sources/translations_docs/english/CrossDissolveIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Cross Dissolve Ino\medskip +\par +\normalsize +Double exposure\par +Dissolve superimposed Fore and Back images, overlaps the Back and Fore images.\par +Formula = Back × (1 - Opacity) + Fore × Opacity\par +Formula shows the case of RGB values from 0 to 1.\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is OFF. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/DarkenIno.tex b/toonz/sources/translations_docs/english/DarkenIno.tex new file mode 100644 index 0000000..2b7320f --- /dev/null +++ b/toonz/sources/translations_docs/english/DarkenIno.tex @@ -0,0 +1,44 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Darken Ino\medskip +\par +\normalsize +Darkens the image\par +Makes the values smaller in the Fore and Back images (Seperate RGB)\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is OFF. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/DarkerColorIno.tex b/toonz/sources/translations_docs/english/DarkerColorIno.tex new file mode 100644 index 0000000..ecf4d7f --- /dev/null +++ b/toonz/sources/translations_docs/english/DarkerColorIno.tex @@ -0,0 +1,44 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Darker Color Ino\medskip +\par +\normalsize +Color comparison (Dark)\par +Smaller RGB luminance values\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is OFF. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/DensityIno.tex b/toonz/sources/translations_docs/english/DensityIno.tex new file mode 100644 index 0000000..8946b73 --- /dev/null +++ b/toonz/sources/translations_docs/english/DensityIno.tex @@ -0,0 +1,48 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Density Ino\medskip +\par +\normalsize +Adjusts the concentration of a semi-transparent image.\par +It was created in order to emphasize the streamlined touch effect for lines.\par +The Alpha channel requires semi-transparent values.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +Reference\par +Connect the reference image to put the strength of the effect into each Pixel.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Density\par +Specifies the concentration.\par +Concentration for the semi-transparent Pixel of the image will change.\par +Specify a value greater than or equal to 0. The maximum is 10.\par +When using a value greater than 1, the image will be darker.\par +It does not change at an equal concentration when above 1.\par +When using a value greater than 0 and smaller than 1, the image will be thinner.\par +When using a concentration value of 0 the image will disappear.\par +The default value is 1.\\ +\\ +Reference\par +Choose how Reference image values put the strength of the effect into each Pixel.\par +An image is connected to the \textquotedbl Reference\textquotedbl \ of the input,\par +Choose from Red/Green/Blue/Alpha/Luminance/Nothing.\par +Choose Nothing when you do not want this effect, it will turn off the connection.\par +The default setting is Red. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/DivideIno.tex b/toonz/sources/translations_docs/english/DivideIno.tex new file mode 100644 index 0000000..035e805 --- /dev/null +++ b/toonz/sources/translations_docs/english/DivideIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Divide Ino\medskip +\par +\normalsize +Division of images\par +Images will become brighter using division\par +Formula = Back / Fore\par +Formula shows the case of RGB values from 0 to 1.\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is ON. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/FogIno.tex b/toonz/sources/translations_docs/english/FogIno.tex new file mode 100644 index 0000000..312c7ad --- /dev/null +++ b/toonz/sources/translations_docs/english/FogIno.tex @@ -0,0 +1,103 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Fog Ino\medskip +\par +\normalsize +It scatters light.\\ +\par +Used for bath water, and mist, etc.,\par +A directional Light creates the appearance of the (Light Scattering) effect.\par +The optical filter, and fog, such as diffusion\par +can be aimed at by the effect, but it does not have to simulate the light.\\ +\par +Each pixel, is affected by the shining of a more bright surrounding pixel.\par +More strongly from nearby pixels, it will have a weaker impact from distant pixels.\\ +\par +First, \textquotedbl Alpha Rendering\textquotedbl \ processing starts if the Alpha channel is ON,\par +next, it handles the RGB pixels when the Alpha channel is not zero.\\ +\par +\textquotedbl Alpha Rendering\textquotedbl \ is not handled when the Alpha channel is OFF,\par +it does not Mask changes in the RGB image, so you will get jaggies on the mask edge.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Radius\par +The extent of which to scatter the light, specified by a circle radius.\par +The unit is millimeters.\par +Specify a value greater than or equal to 0. The maximum is 100.\par +When a Pixel is smaller than the width value, it is not affected, Fog will not be applied.\par +A larger Radius will take more time to process.\par +The default value is 1.\\ +\\ +Curve\par +The attenuation curve going towards the scattered light.\par +Specify a value of 0.01 or more. The maximum is 100.\par +The effect will be weaker on pixels further away,\par +it represents the change in the Gamma curve.\par +Brightness in the case of 1.0 is linear attenuated.\par +The smaller the value the lower the brightness becomes (impact is reduced abruptly),\par +a larger bulge will produce a higher brightness (impact is emphasized).\par +The default value is 1. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Power\par +Changes the strength to disperse the light.\par +Specify a value in the range 0 to 1.\par +You can specify values above 1.0 up to a maximum 2.0, it will emphasize the light.\par +The emphasis may be useful to emit light from a dark portion such as an ink line.\par +When the value is 0.0 pixels will not be affected by the light, Fog will not be applied.\par +You can specify values less than 0.0 down to a minimum of -2.0.\par +Processing with this is not the scattering of light, it will be the scattering of darkness.\par +The default value is 1.\\ +\\ +Threshold Min\\ +Threshold Max\par +Specify these values to get more brightness from the emitted Pixel light.\\ +\par +Affected by the brightness from a more bright Pixel, but in addition to that,\par +using the Pixel value (\textquotedbl Threshold Min\textquotedbl ) can get even more brightness,\par +to affect the current overall brightness.\par +Brightness, is determined from the RGB Pixel value (of HLS) from the L value.\\ +\par +The following range greater than or equal to 0.0 to 1.01 can be specified as values.\\ +\par +If both values are 1.01 Fog will not be applied.\\ +\par +If \textquotedbl Threshold Max\textquotedbl \ is greater than \textquotedbl Threshold Min\textquotedbl ,\par +it carries out smooth changes in fog by linear interpolation between Min and Max.\\ +\par +Reversing \textquotedbl Threshold Max\textquotedbl \ (which may be less than Min) but kept above 0,\par +will suddenly emit light from pixels with \textquotedbl Threshold Min\textquotedbl \ or more of brightness.\par +\textquotedbl Threshold Min\textquotedbl \ also produces full Fog if set to 0.\\ +\par +The default value is 0 for both.\\ +\\ +Alpha Rendering\par +Switch is only valid when there is an Alpha channel in the image.\par +When OFF it does not do anything.\par +When ON it will also process the Alpha channel.\par +The default setting is OFF. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/HLSAddIno.tex b/toonz/sources/translations_docs/english/HLSAddIno.tex new file mode 100644 index 0000000..0e58e53 --- /dev/null +++ b/toonz/sources/translations_docs/english/HLSAddIno.tex @@ -0,0 +1,101 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +HLS Add Ino\medskip +\par +\normalsize +Add atmosphere (Noise) using values of the specified channel from reference image.\par +Hue, Lightness, Saturation, and Alpha will change.\\ +\par +The cell image tone, Hue, Lightness, Saturation, and Alpha will have added noise,\par +use this to be able to adapt the background picture.\par +When painting with the same image, the noise of each dot will be a single tone.\par +Otherwise, the user can provide a reference image as noise,\par +for calculating the noise component of the image, to determine the atmosphere. +\\ +\par +Since the processing for a still image is only two-dimensional, if you have the need\par +for a three-dimensional video, another consideration, processing (?) Is required.\\ +\par +The Alpha channel will determine the strength of the effect. Thus,\par +masked edges of Alpha will retain their state if they are smooth.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +Noise\par +Connect the image for adding the noise by the HLS value for each Pixel.\\ +Reference\par +Connect the reference image to put the strength of the effect into each Pixel.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +From RGBA\par +Specify whether to use the channel for the (Noise) Reference image.\par +Choose from one of the \textquotedbl Red\textquotedbl \ \textquotedbl Green\textquotedbl \ \textquotedbl Blue\textquotedbl \ \textquotedbl Alpha\textquotedbl \ channels.\par +The default value is \textquotedbl Red\textquotedbl .\\ +\\ +Offset\par +The offset value for the Pixel value of the (Noise) Reference image.\par +Choose a Pixel value (8 or 16bits) as a value away from zero, you can specify a value\par +between -1.0 and 1.0.\par +Pixel values do not change when the same value is specified here.\par +Depending on the magnitude of the reference Pixel value, values will change.\par +The default value is 0.5.\\ +\\ +Hue\par +It specifies the intensity of the color (Hue) change.\par +The value will scale with the Offset value. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +You can use a value from -1.0 to 1.0.\par +The image will not change when the value is 0.\par +The default value is 0.0.\\ +\\ +Lightness\par +Specify the strength of the brightness (Lightness) change.\par +The default value is 0.25.\par +Other options are the same as \textquotedbl Hue\textquotedbl .\\ +\\ +Saturation\par +Specify the strength of the chroma (Saturation) change.\par +The default value is 0.0.\par +Other options are the same as \textquotedbl Hue\textquotedbl .\\ +\\ +Alpha\par +Specify the strength of the opacity (Alpha) change.\par +The default value is 0.0.\par +Other options are the same as \textquotedbl Hue\textquotedbl .\\ +\\ +Premultiplied\par +When ON, RGB is already set to Premultiply\par +(The value of Alpha channel is multiplied in advance RGB channels)\par +and processes as an image.\par +At that time, and added to the Alpha processing, you may not get the correct image.\par +The default setting is ON.\\ +\\ +Reference\par +Choose how Reference image values put the strength of the effect into each Pixel.\par +An image is connected to the \textquotedbl Reference\textquotedbl \ of the input,\par +Choose from Red/Green/Blue/Alpha/Luminance/Nothing.\par +Choose Nothing when you do not want this effect, it will turn off the connection.\par +The default setting is Red. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/HLSAdjustIno.tex b/toonz/sources/translations_docs/english/HLSAdjustIno.tex new file mode 100644 index 0000000..0923a5b --- /dev/null +++ b/toonz/sources/translations_docs/english/HLSAdjustIno.tex @@ -0,0 +1,98 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +HLS Adjust Ino\medskip +\par +\normalsize +Hue (H), Lightness (L), Saturation (S), is multiplied by the Scale, then Shifted.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +Reference\par +Connect the reference image to put the strength of the effect into each Pixel.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Pivot\par +\noindent \ \ \, Specify the central value of where to apply the Scale.\\ +\par +\noindent \ \ \, Hue\par +Specify the central value of the Scale for the color (Hue).\par +Minimum value is 0.0, maximum value is 360.0.\par +The default value is 0.0.\par +\noindent \ \ \, Lightness\par +Specify the central value of the Scale for the brightness (Lightness).\par +Minimum value is 0.0, maximum value is 1.0.\par +The default value is 0.0.\par +\noindent \ \ \, Saturation\par +Specify the central value of the Scale for the chroma (Saturation).\par +Minimum value is 0.0, maximum value is 1.0.\par +The default value is 0.0.\\ +\\ +Scale\par +\noindent \ \ \, Multiplies the Scale to enlarge or reduce the range of HLS around the Pivot value.\par +\noindent \ \ \, Hue value will be applied recursively around the top of the circle,\par +\noindent \ \ \, Lightness, Saturation value is greater than or equal to 0, and can go up to 1.\\ +\par +\noindent \ \ \, Hue\par +Multiplied by the Scale for the color (Hue).\par +The minimum value is 0.0.\par +The default value is 1.0.\par +\noindent \ \ \, Lightness\par +Multiplied by the Scale for the brightness (Lightness).\par +The minimum value is 0.0.\par +The default value is 1.0.\par +\noindent \ \ \, Saturation\par +Multiplied by the Scale for the chroma (Saturation). + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +The minimum value is 0.0.\par +The default value is 1.0.\\ +\\ +Shift\par +\noindent \ \ \, This will Shift the values of the HLS.\par +\noindent \ \ \, Hue value will be multiplied recursively around the top of the circle,\par +\noindent \ \ \, Lightness, Saturation value is greater than or equal to 0, and can go up to 1.\\ +\par +\noindent \ \ \, Hue\par +Shift for the color (Hue).\par +The default value is 0.0.\par +\noindent \ \ \, Lightness\par +Shift for the brightness (Lightness).\par +The default value is 0.0.\par +\noindent \ \ \, Saturation\par +Shift for the chroma (Saturation).\par +The default value is 0.0.\\ +\\ +Premultiplied\par +When ON, RGB is already set to Premultiply\par +(The value of Alpha channel is multiplied in advance RGB channels)\par +and processes as an image.\par +The default setting is ON.\\ +\\ +Reference\par +Choose how Reference image values put the strength of the effect into each Pixel.\par +An image is connected to the \textquotedbl Reference\textquotedbl \ of the input,\par +Choose from Red/Green/Blue/Alpha/Luminance/Nothing.\par +Choose Nothing when you do not want this effect, it will turn off the connection.\par +The default setting is Red. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/HLSNoiseIno.tex b/toonz/sources/translations_docs/english/HLSNoiseIno.tex new file mode 100644 index 0000000..20c0236 --- /dev/null +++ b/toonz/sources/translations_docs/english/HLSNoiseIno.tex @@ -0,0 +1,422 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\usepackage{eepic} +\usepackage{xcolor} + +\usepackage{graphicx} +\graphicspath{{images/}} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +HLS Noise Ino\medskip +\par +\normalsize +Add pixel noise to the Hue, Lightness, Saturation, and Alpha.\par +The addition of noise adjustment to the cell picture, has been developed\par +for the purpose of adapting the picture of the background.\\ +\par +The Alpha channel will determine the strength of the noise. Therefore,\par +smooth edges will remain smooth.\par +The strength of the Alpha channel itself will also affect noise, check the value.\\ +\par +When you check the results, please do not use the sub-camera.\par +This is because in the sub-camera the range of the input image is different,\par +the noise pattern will change.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +Reference\par +Connect the reference image to put the strength of the effect into each Pixel.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Hue\par +Specify the strength of the noise for the color (Hue).\par +Pixel value (8 or 16bits) specified as a value from 1 to 0.\par +Minimum value is 0, maximum value is 1.\par +It does not apply the noise to the color (Hue) when the value is 0.\par +The default value is 0.025.\\ +\\ +Lightness\par +Specify the strength of the noise for the brightness (Lightness).\par +Pixel value (8 or 16bits) specified as a value from 1 to 0.\par +Minimum value is 0, maximum value is 1.\par +It does not apply the noise to the brightness (Lightness) when the value is 0.\par +The default value is 0.035.\\ +\\ +Saturation\par +Specify the strength of the noise for the chroma (Saturation).\par +Pixel value (8 or 16bits) specified as a value from 1 to 0.\par +Minimum value is 0, maximum value is 1.\par +It does not apply the noise for the chroma (Saturation) when the value is 0.\par +The default value is 0.0. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Alpha\par +Specify the strength of the noise for the Alpha channel.\par +Pixel value (8 or 16bits) specified as a value from 1 to 0.\par +Minimum value is 0, maximum value is 1.\par +It does not apply the noise to the Alpha channel when the value is 0.\par +The default value is 0.0.\\ +\\ +Seed\par +The value of the order to determine the random noise pattern of the image.\par +Specify an integer value greater than or equal to 0.\par +If this value is the same, it will reproduce the same pattern.\par +It will be a different pattern If you add the noise with a different value.\par +The default value is 1.\\ +\\ +NBlur\par +It blurs the noise component, reduces the dot impression.\par +Minimum value is 0, maximum value is 1.\par +Because it is calculated only in pixels adjacent to the dot,\par +it will feel like a very light blur.\par +When the blur value is not 0, it will take the average of the pixels adjacent\par +to each other up to a value of 1.0.\par +The default value is 1.\\ +\\ +Limits\par +The brightness (Lightness), chroma (Saturation), opacity (Alpha),\par +adjustment to effect the end value (in the vicinity of 0 to 1).\par +Applying the noise at 0 or near 1, will appear below 1 or more than the value of 0,\par +so it can not be expressed, because the values are each truncated to 0 or 1.\par +It is effective to compensate for the truncation.\par +-{-}> \textquotedbl End value of Noise effect adjustment \ \ Figure 1 \ \ comparison\textquotedbl \ reference\par +-{-}> \textquotedbl End value of Noise effect adjustment \ \ Figure 2 \ \ description\textquotedbl \ reference\\ +\par +\noindent \ \ \, Effective\par +Determines the strength of this effect (Limits).\par +It has no effect if the value is 0. Effect a table using a value greater than 0\par +A value of 1 will have the strongest effect.\par +The default value is 0.\\ +\par +\noindent \ \ \, Center\par +Determines the center of the effect.\par +Noise range deviation, the effect of the reduction of the noise width, most strongly\par +at the portion of 0 to 1 of the end value, will have no effect in the center. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +Position the center value without this effect.\par +The value must be between 0 and 1.\par +If the value is 0, it will have no effect on a Pixel with a value of 0.\par +If the value is 1, it will have no effect on a Pixel with a value of 1.\par +The default Center value is 0.5.\\ +\par +\noindent \ \ \, Type\par +Select from the options of the Type of the effect.\par +If you select \textquotedbl Keep Noise\textquotedbl , it maintains the (overall) noise width shifting of the\par +noise range, the contrast of the entire image will shrink.\par +If you select \textquotedbl Keep Contrast\textquotedbl , it maintains the contrast to reduce the noise width\par +only at the end.\par +The default setting is \textquotedbl Keep Noise\textquotedbl .\\ +\\ +Premultiplied\par +When ON, RGB is already set to Premultiply\par +(The value of Alpha channel is multiplied in advance RGB channels)\par +and processes as an image.\par +At that time, and added to the Alpha processing, you may not get the correct image.\par +The default setting is ON.\\ +\\ +Reference\par +Choose how Reference image values put the strength of the effect into each Pixel.\par +An image is connected to the \textquotedbl Reference\textquotedbl \ of the input,\par +Choose from Red/Green/Blue/Alpha/Luminance/Nothing.\par +Choose Nothing when you do not want this effect, it will turn off the connection.\par +The default setting is Red. + +\newpage + +\thispagestyle{empty} + +\ \vspace{1.5em} +\par +\noindent \hskip 2.2em Figure 1 Noise effect comparison of the values\\[0.4em] +\par +\scriptsize +\noindent \hskip 3.4em Original\par +\noindent \hskip 3.4em Effective Zero\par +\noindent \hskip 3.4em Keep Noise\par +\noindent \hskip 3.4em Keep Contrast + +\large +\noindent \begin{picture}(0,0) +\put(55.5,-6.5){\includegraphics[width=29.6em, height=1em]{HLSNoiseInoNoiseEffectOriginal}} +\put(55.5,-22.5){\includegraphics[width=29.6em, height=1em]{HLSNoiseInoNoiseEffectEffectiveZero}} +\put(55.5,-38.5){\includegraphics[width=29.6em, height=1em]{HLSNoiseInoNoiseEffectKeepNoise}} +\put(55.5,-54.5){\includegraphics[width=29.6em, height=1em]{HLSNoiseInoNoiseEffectKeepContrast}} +\linethickness{0.01em} +\put(126,64){\line(-1,0){56}} +\put(126,53){\line(-1,0){14}} +\put(126,41){\line(-1,0){42}} +\put(126,29.5){\line(-1,0){28}} +\put(126,15){\line(-1,0){93}} +\put(126,64){\line(0,-1){49}} +\put(33,15){\line(0,-1){58}} +\put(33,0){\line(1,0){14}} +\put(47,0){\line(-3,2){6}} +\put(47,0){\line(-3,-2){6}} +\put(33,-14){\line(1,0){14}} +\put(47,-14){\line(-3,2){6}} +\put(47,-14){\line(-3,-2){6}} +\put(33,-28){\line(1,0){14}} +\put(47,-28){\line(-3,2){6}} +\put(47,-28){\line(-3,-2){6}} +\put(33,-43){\line(1,0){14}} +\put(47,-43){\line(-3,2){6}} +\put(47,-43){\line(-3,-2){6}} +\end{picture}\\[3.6em] + +\normalsize +\noindent \hskip 2.2em Figure 2 Noise range change illustration of the values\\[0.5em] +\par +\footnotesize +\noindent \hskip 2.65em Effective Zero \ \ The value of the noise is cut (default) + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(54.5,-37){\line(0,1){8}} +\put(54.5,-37){\line(-2,3){3}} +\put(54.5,-37){\line(2,3){3}} +\put(482,-37){\line(0,1){8}} +\put(482,-37){\line(-2,3){3}} +\put(482,-37){\line(2,3){3}} +\put(54.5,-58){\line(0,1){6}} +\put(482,-58){\line(0,1){6}} + +\put(27,-45.5){\line(1,0){56}} +\put(27,-45.5){\line(3,2){6}} +\put(27,-45.5){\line(3,-2){6}} +\put(83,-45.5){\line(-3,2){6}} +\put(83,-45.5){\line(-3,-2){6}} + +\put(255,-45.5){\line(1,0){56}} +\put(255,-45.5){\line(3,2){6}} +\put(255,-45.5){\line(3,-2){6}} +\put(311,-45.5){\line(-3,2){6}} +\put(311,-45.5){\line(-3,-2){6}} + +\put(455,-45.5){\line(1,0){56}} +\put(455,-45.5){\line(3,2){6}} +\put(455,-45.5){\line(3,-2){6}} +\put(511,-45.5){\line(-3,2){6}} +\put(511,-45.5){\line(-3,-2){6}} + +\put(61,-67){\line(1,0){15}} +\put(61,-67){\line(3,2){6}} +\put(61,-67){\line(3,-2){6}} +\put(52,-70){\scriptsize{0}} +\put(78,-74){\footnotesize{0 or less of the noise value is limited to 0}} + +\put(471,-67){\line(-1,0){15}} +\put(471,-67){\line(-3,2){6}} +\put(471,-67){\line(-3,-2){6}} +\put(476,-70){\scriptsize{1.0}} +\put(312,-74){\footnotesize{1 or more noise is limited to 1}} + +\linethickness{0.2em} +\put(54.5,-38){\line(1,0){428}} +\linethickness{2.8em} +\put(49,-1.5){\line(1,0){439}} +\linethickness{2.75em} +\color{lightgray} +\put(45.5,-1.5){\line(1,0){438}} +\put(51,-0.5){\includegraphics[width=29.55em, height=1em]{HLSNoiseInoNoiseEffectOriginal}} +\put(51,-16.5){\includegraphics[width=29.55em, height=1em]{HLSNoiseInoNoiseEffectEffectiveZero}} +\end{picture}\\[5.7em] + +\footnotesize +\noindent \hskip 2.65em Keep Noise \ \ Shift to maintain the noise. Contrast is reduced. It shifts the overall noise position + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(255,-45.5){\line(1,0){56}} +\put(255,-45.5){\line(3,2){6}} +\put(255,-45.5){\line(3,-2){6}} +\put(311,-45.5){\line(-3,2){6}} +\put(311,-45.5){\line(-3,-2){6}} + +\put(158,-60){\line(0,1){8}} +\put(158,-60){\line(-2,3){3}} +\put(158,-60){\line(2,3){3}} +\put(400,-60){\line(0,1){8}} +\put(400,-60){\line(-2,3){3}} +\put(400,-60){\line(2,3){3}} + +\put(144,-68.5){\line(1,0){56}} +\put(144,-68.5){\line(3,2){6}} +\put(144,-68.5){\line(3,-2){6}} +\put(200,-68.5){\line(-3,2){6}} +\put(200,-68.5){\line(-3,-2){6}} + +\put(357,-68.5){\line(1,0){56}} +\put(357,-68.5){\line(3,2){6}} +\put(357,-68.5){\line(3,-2){6}} +\put(413,-68.5){\line(-3,2){6}} +\put(413,-68.5){\line(-3,-2){6}} + +\put(107,-83){\line(0,1){8}} +\put(107,-83){\line(-2,3){3}} +\put(107,-83){\line(2,3){3}} +\put(442,-83){\line(0,1){8}} +\put(442,-83){\line(-2,3){3}} +\put(442,-83){\line(2,3){3}} + +\put(102,-91.5){\line(1,0){56}} +\put(102,-91.5){\line(3,2){6}} +\put(102,-91.5){\line(3,-2){6}} +\put(158,-91.5){\line(-3,2){6}} +\put(158,-91.5){\line(-3,-2){6}} + +\put(392,-91.5){\line(1,0){56}} +\put(392,-91.5){\line(3,2){6}} +\put(392,-91.5){\line(3,-2){6}} +\put(448,-91.5){\line(-3,2){6}} +\put(448,-91.5){\line(-3,-2){6}} + +\put(58,-106){\line(0,1){8}} +\put(58,-106){\line(-2,3){3}} +\put(58,-106){\line(2,3){3}} +\put(478.5,-106){\line(0,1){8}} +\put(478.5,-106){\line(-2,3){3}} +\put(478.5,-106){\line(2,3){3}} + +\put(55,-114.5){\line(1,0){56}} +\put(55,-114.5){\line(3,2){6}} +\put(55,-114.5){\line(3,-2){6}} +\put(111,-114.5){\line(-3,2){6}} +\put(111,-114.5){\line(-3,-2){6}} + +\put(427,-114.5){\line(1,0){56}} +\put(427,-114.5){\line(3,2){6}} +\put(427,-114.5){\line(3,-2){6}} +\put(483,-114.5){\line(-3,2){6}} +\put(483,-114.5){\line(-3,-2){6}} + +\put(283,-106){\line(0,1){54}} +\put(267,-123){\scriptsize{separate}} + +\linethickness{0.2em} +\put(54.5,-38){\line(1,0){428}} +\put(54.5,-61){\line(1,0){428}} +\put(54.5,-84){\line(1,0){428}} +\put(54.5,-107){\line(1,0){428}} +\linethickness{2.8em} +\put(49,-1.5){\line(1,0){439}} +\linethickness{2.75em} +\color{lightgray} +\put(45.5,-1.5){\line(1,0){438}} +\put(51,-0.5){\includegraphics[width=29.55em, height=1em]{HLSNoiseInoNoiseEffectOriginal}} +\put(51,-16.5){\includegraphics[width=29.55em, height=1em]{HLSNoiseInoNoiseEffectKeepNoise}} +\end{picture}\\[9.3em] + +\footnotesize +\noindent \hskip 2.65em Keep Contrast \ \ Reduce the noise width. Maintain the contrast. Noise width is reduced only at the end + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(255,-45.5){\line(1,0){56}} +\put(255,-45.5){\line(3,2){6}} +\put(255,-45.5){\line(3,-2){6}} +\put(311,-45.5){\line(-3,2){6}} +\put(311,-45.5){\line(-3,-2){6}} + +\put(86,-60){\line(0,1){8}} +\put(86,-60){\line(-2,3){3}} +\put(86,-60){\line(2,3){3}} +\put(450,-60){\line(0,1){8}} +\put(450,-60){\line(-2,3){3}} +\put(450,-60){\line(2,3){3}} + +\put(58,-68.5){\line(1,0){56}} +\put(58,-68.5){\line(3,2){6}} +\put(58,-68.5){\line(3,-2){6}} +\put(114,-68.5){\line(-3,2){6}} +\put(114,-68.5){\line(-3,-2){6}} + +\put(423,-68.5){\line(1,0){56}} +\put(423,-68.5){\line(3,2){6}} +\put(423,-68.5){\line(3,-2){6}} +\put(479,-68.5){\line(-3,2){6}} +\put(479,-68.5){\line(-3,-2){6}} + +\put(70,-83){\line(0,1){8}} +\put(70,-83){\line(-2,3){3}} +\put(70,-83){\line(2,3){3}} +\put(468,-83){\line(0,1){8}} +\put(468,-83){\line(-2,3){3}} +\put(468,-83){\line(2,3){3}} + +\put(55,-91.5){\line(1,0){28}} +\put(55,-91.5){\line(3,2){6}} +\put(55,-91.5){\line(3,-2){6}} +\put(83,-91.5){\line(-3,2){6}} +\put(83,-91.5){\line(-3,-2){6}} + +\put(454,-91.5){\line(1,0){28}} +\put(454,-91.5){\line(3,2){6}} +\put(454,-91.5){\line(3,-2){6}} +\put(482,-91.5){\line(-3,2){6}} +\put(482,-91.5){\line(-3,-2){6}} + +\put(61,-106){\line(0,1){8}} +\put(61,-106){\line(-2,3){3}} +\put(61,-106){\line(2,3){3}} +\put(476.5,-106){\line(0,1){8}} +\put(476.5,-106){\line(-2,3){3}} +\put(476.5,-106){\line(2,3){3}} + +\put(55,-114.5){\line(1,0){12}} +\put(55,-114.5){\line(3,2){6}} +\put(55,-114.5){\line(3,-2){6}} +\put(67,-114.5){\line(-3,2){6}} +\put(67,-114.5){\line(-3,-2){6}} + +\put(471,-114.5){\line(1,0){12}} +\put(471,-114.5){\line(3,2){6}} +\put(471,-114.5){\line(3,-2){6}} +\put(483,-114.5){\line(-3,2){6}} +\put(483,-114.5){\line(-3,-2){6}} + +\put(283,-106){\line(0,1){54}} +\put(267,-123){\scriptsize{separate}} + +\linethickness{0.2em} +\put(54.5,-38){\line(1,0){428}} +\put(54.5,-61){\line(1,0){428}} +\put(54.5,-84){\line(1,0){428}} +\put(54.5,-107){\line(1,0){428}} +\linethickness{2.8em} +\put(49,-1.5){\line(1,0){439}} +\linethickness{2.75em} +\color{lightgray} +\put(45.5,-1.5){\line(1,0){438}} +\put(51,-0.5){\includegraphics[width=29.55em, height=1em]{HLSNoiseInoNoiseEffectOriginal}} +\put(51,-16.5){\includegraphics[width=29.55em, height=1em]{HLSNoiseInoNoiseEffectKeepContrast}} +\end{picture} + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/HSVAddIno.tex b/toonz/sources/translations_docs/english/HSVAddIno.tex new file mode 100644 index 0000000..3cf42b6 --- /dev/null +++ b/toonz/sources/translations_docs/english/HSVAddIno.tex @@ -0,0 +1,101 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +HSV Add Ino\medskip +\par +\normalsize +Add atmosphere (Noise) using values of the specified channel from reference image.\par +Hue, Saturation, Brightness, and Alpha will change.\\ +\par +The cell image tone, Hue, Saturation, Brightness, and Alpha will have added noise,\par +use this to be able to adapt the background picture.\par +When painting with the same image, the noise of each dot will be a single tone.\par +Otherwise, the user can provide a reference image as noise,\par +for calculating the noise component of the image, to determine the atmosphere. +\\ +\par +Since the processing for a still image is only two-dimensional, if you have the need\par +for a three-dimensional video, another consideration, processing (?) Is required.\\ +\par +The Alpha channel will determine the strength of the effect. Thus,\par +masked edges of Alpha will retain their state if they are smooth.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +Noise\par +Connect the image for adding the noise by the HSV value for each Pixel.\\ +Reference\par +Connect the reference image to put the strength of the effect into each Pixel.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +From RGBA\par +Specify whether to use the channel for the (Noise) Reference image.\par +Choose from one of the \textquotedbl Red\textquotedbl \ \textquotedbl Green\textquotedbl \ \textquotedbl Blue\textquotedbl \ \textquotedbl Alpha\textquotedbl \ channels.\par +The default value is \textquotedbl Red\textquotedbl .\\ +\\ +Offset\par +The offset value for the Pixel value of the (Noise) Reference image.\par +Choose a Pixel value (8 or 16bits) as a value away from zero, you can specify a value\par +between -1.0 and 1.0.\par +Pixel values do not change when the same value is specified here.\par +Depending on the magnitude of the reference Pixel value, values will change.\par +The default value is 0.5.\\ +\\ +Hue\par +It specifies the intensity of the color (Hue) change.\par +The value will scale with the Offset value. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +You can use a value from -1.0 to 1.0.\par +The image will not change when the value is 0.\par +The default value is 0.0.\\ +\\ +Saturation\par +Specify the strength of the chroma (Saturation) change.\par +The default value is 0.0.\par +Other options are the same as \textquotedbl Hue\textquotedbl .\\ +\\ +Value\par +Specify the strength of the brightness (Value) change.\par +The default value is 0.25.\par +Other options are the same as \textquotedbl Hue\textquotedbl .\\ +\\ +Alpha\par +Specify the strength of the opacity (Alpha) change.\par +The default value is 0.0.\par +Other options are the same as \textquotedbl Hue\textquotedbl .\\ +\\ +Premultiply\par +When ON, RGB is already set to Premultiply\par +(The value of Alpha channel is multiplied in advance RGB channels)\par +and processes as an image.\par +At that time, and added to the Alpha processing, you may not get the correct image.\par +The default setting is ON.\\ +\\ +Reference\par +Choose how Reference image values put the strength of the effect into each Pixel.\par +An image is connected to the \textquotedbl Reference\textquotedbl \ of the input,\par +Choose from Red/Green/Blue/Alpha/Luminance/Nothing.\par +Choose Nothing when you do not want this effect, it will turn off the connection.\par +The default setting is Red. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/HSVAdjustIno.tex b/toonz/sources/translations_docs/english/HSVAdjustIno.tex new file mode 100644 index 0000000..54d0207 --- /dev/null +++ b/toonz/sources/translations_docs/english/HSVAdjustIno.tex @@ -0,0 +1,98 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +HSV Adjust Ino\medskip +\par +\normalsize +Hue (H), Saturation (S), Brightness (V), is multiplied by the Scale, then Shifted.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +Reference\par +Connect the reference image to put the strength of the effect into each Pixel.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Pivot\par +\noindent \ \ \, Specify the central value of where to apply the Scale.\\ +\par +\noindent \ \ \, Hue\par +Specify the central value of the Scale for the color (Hue).\par +Minimum value is 0.0, maximum value is 360.0.\par +The default value is 0.0.\par +\noindent \ \ \, Saturation\par +Specify the central value of the Scale for the chroma (Saturation).\par +Minimum value is 0.0, maximum value is 1.0.\par +The default value is 0.0.\par +\noindent \ \ \, Value\par +Specify the central value of the Scale for the brightness (Value).\par +Minimum value is 0.0, maximum value is 1.0.\par +The default value is 0.0.\\ +\\ +Scale\par +\noindent \ \ \, Multiplies the Scale to enlarge or reduce the range of HSV around the Pivot value.\par +\noindent \ \ \, Hue value will be applied recursively around the top of the circle,\par +\noindent \ \ \, Saturation, Value value is greater than or equal to 0, and can go up to 1.\\ +\par +\noindent \ \ \, Hue\par +Multiplied by the Scale for the color (Hue).\par +The minimum value is 0.0.\par +The default value is 1.0.\par +\noindent \ \ \, Saturation\par +Multiplied by the Scale for the chroma (Saturation).\par +The minimum value is 0.0.\par +The default value is 1.0.\\ +\noindent \ \ \, Value\par +Multiplied by the Scale for the brightness (Value). + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +The minimum value is 0.0.\par +The default value is 1.0.\\ +\\ +Shift\par +\noindent \ \ \, This will Shift the values of the HLS.\par +\noindent \ \ \, Hue value will be multiplied recursively around the top of the circle,\par +\noindent \ \ \, Saturation, Value value is greater than or equal to 0, and can go up to 1.\\ +\par +\noindent \ \ \, Hue\par +Shift for the color (Hue).\par +The default value is 0.0.\par +\noindent \ \ \, Saturation\par +Shift for the chroma (Saturation).\par +The default value is 0.0.\par +\noindent \ \ \, Value\par +Shift for the brightness (Value).\par +The default value is 0.0.\\ +\\ +Premultiplied\par +When ON, RGB is already set to Premultiply\par +(The value of Alpha channel is multiplied in advance RGB channels)\par +and processes as an image.\par +The default setting is ON.\\ +\\ +Reference\par +Choose how Reference image values put the strength of the effect into each Pixel.\par +An image is connected to the \textquotedbl Reference\textquotedbl \ of the input,\par +Choose from Red/Green/Blue/Alpha/Luminance/Nothing.\par +Choose Nothing when you do not want this effect, it will turn off the connection.\par +The default setting is Red. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/HSVNoiseIno.tex b/toonz/sources/translations_docs/english/HSVNoiseIno.tex new file mode 100644 index 0000000..23fb4c4 --- /dev/null +++ b/toonz/sources/translations_docs/english/HSVNoiseIno.tex @@ -0,0 +1,422 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\usepackage{eepic} +\usepackage{xcolor} + +\usepackage{graphicx} +\graphicspath{{images/}} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +HSV Noise Ino\medskip +\par +\normalsize +Add pixel noise to the Hue, Saturation, Brightness, and Alpha.\par +The addition of noise adjustment to the cell picture, has been developed\par +for the purpose of adapting the picture of the background.\\ +\par +The Alpha channel will determine the strength of the noise. Therefore,\par +smooth edges will remain smooth.\par +The strength of the Alpha channel itself will also affect noise, check the value.\\ +\par +When you check the results, please do not use the sub-camera.\par +This is because in the sub-camera the range of the input image is different,\par +the noise pattern will change.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +Reference\par +Connect the reference image to put the strength of the effect into each Pixel.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Hue\par +Specify the strength of the noise for the color (Hue).\par +Pixel value (8 or 16bits) specified as a value from 1 to 0.\par +Minimum value is 0, maximum value is 1.\par +It does not apply the noise to the color (Hue) when the value is 0.\par +The default value is 0.025.\\ +\\ +Saturation\par +Specify the strength of the noise for the chroma (Saturation).\par +Pixel value (8 or 16bits) specified as a value from 1 to 0.\par +Minimum value is 0, maximum value is 1.\par +It does not apply the noise for the chroma (Saturation) when the value is 0.\par +The default value is 0.0.\\ +\\ +Value\par +Specify the strength of the noise for the brightness (Value).\par +Pixel value (8 or 16bits) specified as a value from 1 to 0.\par +Minimum value is 0, maximum value is 1.\par +It does not apply the noise to the brightness (Lightness) when the value is 0.\par +The default value is 0.035. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Alpha\par +Specify the strength of the noise for the Alpha channel.\par +Pixel value (8 or 16bits) specified as a value from 1 to 0.\par +Minimum value is 0, maximum value is 1.\par +It does not apply the noise to the Alpha channel when the value is 0.\par +The default value is 0.0.\\ +\\ +Seed\par +The value of the order to determine the random noise pattern of the image.\par +Specify an integer value greater than or equal to 0.\par +If this value is the same, it will reproduce the same pattern.\par +It will be a different pattern If you add the noise with a different value.\par +The default value is 1.\\ +\\ +NBlur\par +It blurs the noise component, reduces the dot impression.\par +Minimum value is 0, maximum value is 1.\par +Because it is calculated only in pixels adjacent to the dot,\par +it will feel like a very light blur.\par +When the blur value is not 0, it will take the average of the pixels adjacent\par +to each other up to a value of 1.0.\par +The default value is 1.\\ +\\ +Limits\par +The chroma (Saturation), brightness (Value), opacity (Alpha),\par +adjustment to effect the end value (in the vicinity of 0 to 1).\par +Applying the noise at 0 or near 1, will appear below 1 or more than the value of 0,\par +so it can not be expressed, because the values are each truncated to 0 or 1.\par +It is effective to compensate for the truncation.\par +-{-}> \textquotedbl End value of Noise effect adjustment \ \ Figure 1 \ \ comparison\textquotedbl \ reference\par +-{-}> \textquotedbl End value of Noise effect adjustment \ \ Figure 2 \ \ description\textquotedbl \ reference\\ +\par +\noindent \ \ \, Effective\par +Determines the strength of this effect (Limits).\par +It has no effect if the value is 0. Effect a table using a value greater than 0\par +A value of 1 will have the strongest effect.\par +The default value is 0.\\ +\par +\noindent \ \ \, Center\par +Determines the center of the effect.\par +Noise range deviation, the effect of the reduction of the noise width, most strongly\par +at the portion of 0 to 1 of the end value, will have no effect in the center. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +Position the center value without this effect.\par +The value must be between 0 and 1.\par +If the value is 0, it will have no effect on a Pixel with a value of 0.\par +If the value is 1, it will have no effect on a Pixel with a value of 1.\par +The default Center value is 0.5.\\ +\par +\noindent \ \ \, Type\par +Select from the options of the Type of the effect.\par +If you select \textquotedbl Keep Noise\textquotedbl , it maintains the (overall) noise width shifting of the\par +noise range, the contrast of the entire image will shrink.\par +If you select \textquotedbl Keep Contrast\textquotedbl , it maintains the contrast to reduce the noise width\par +only at the end.\par +The default setting is \textquotedbl Keep Noise\textquotedbl .\\ +\\ +Premultiplied\par +When ON, RGB is already set to Premultiply\par +(The value of Alpha channel is multiplied in advance RGB channels)\par +and processes as an image.\par +At that time, and added to the Alpha processing, you may not get the correct image.\par +The default setting is ON.\\ +\\ +Reference\par +Choose how Reference image values put the strength of the effect into each Pixel.\par +An image is connected to the \textquotedbl Reference\textquotedbl \ of the input,\par +Choose from Red/Green/Blue/Alpha/Luminance/Nothing.\par +Choose Nothing when you do not want this effect, it will turn off the connection.\par +The default setting is Red. + +\newpage + +\thispagestyle{empty} + +\ \vspace{1.5em} +\par +\noindent \hskip 2.2em Figure 1 Noise effect comparison of the values\\[0.4em] +\par +\scriptsize +\noindent \hskip 3.4em Original\par +\noindent \hskip 3.4em Effective Zero\par +\noindent \hskip 3.4em Keep Noise\par +\noindent \hskip 3.4em Keep Contrast + +\large +\noindent \begin{picture}(0,0) +\put(55.5,-6.5){\includegraphics[width=29.6em, height=1em]{HSVNoiseInoNoiseEffectOriginal}} +\put(55.5,-22.5){\includegraphics[width=29.6em, height=1em]{HSVNoiseInoNoiseEffectEffectiveZero}} +\put(55.5,-38.5){\includegraphics[width=29.6em, height=1em]{HSVNoiseInoNoiseEffectKeepNoise}} +\put(55.5,-54.5){\includegraphics[width=29.6em, height=1em]{HSVNoiseInoNoiseEffectKeepContrast}} +\linethickness{0.01em} +\put(126,64){\line(-1,0){56}} +\put(126,53){\line(-1,0){14}} +\put(126,41){\line(-1,0){42}} +\put(126,29.5){\line(-1,0){28}} +\put(126,15){\line(-1,0){93}} +\put(126,64){\line(0,-1){49}} +\put(33,15){\line(0,-1){58}} +\put(33,0){\line(1,0){14}} +\put(47,0){\line(-3,2){6}} +\put(47,0){\line(-3,-2){6}} +\put(33,-14){\line(1,0){14}} +\put(47,-14){\line(-3,2){6}} +\put(47,-14){\line(-3,-2){6}} +\put(33,-28){\line(1,0){14}} +\put(47,-28){\line(-3,2){6}} +\put(47,-28){\line(-3,-2){6}} +\put(33,-43){\line(1,0){14}} +\put(47,-43){\line(-3,2){6}} +\put(47,-43){\line(-3,-2){6}} +\end{picture}\\[3.6em] + +\normalsize +\noindent \hskip 2.2em Figure 2 Noise range change illustration of the values\\[0.5em] +\par +\footnotesize +\noindent \hskip 2.65em Effective Zero \ \ The value of the noise is cut (default) + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(54.5,-37){\line(0,1){8}} +\put(54.5,-37){\line(-2,3){3}} +\put(54.5,-37){\line(2,3){3}} +\put(482,-37){\line(0,1){8}} +\put(482,-37){\line(-2,3){3}} +\put(482,-37){\line(2,3){3}} +\put(54.5,-58){\line(0,1){6}} +\put(482,-58){\line(0,1){6}} + +\put(27,-45.5){\line(1,0){56}} +\put(27,-45.5){\line(3,2){6}} +\put(27,-45.5){\line(3,-2){6}} +\put(83,-45.5){\line(-3,2){6}} +\put(83,-45.5){\line(-3,-2){6}} + +\put(255,-45.5){\line(1,0){56}} +\put(255,-45.5){\line(3,2){6}} +\put(255,-45.5){\line(3,-2){6}} +\put(311,-45.5){\line(-3,2){6}} +\put(311,-45.5){\line(-3,-2){6}} + +\put(455,-45.5){\line(1,0){56}} +\put(455,-45.5){\line(3,2){6}} +\put(455,-45.5){\line(3,-2){6}} +\put(511,-45.5){\line(-3,2){6}} +\put(511,-45.5){\line(-3,-2){6}} + +\put(61,-67){\line(1,0){15}} +\put(61,-67){\line(3,2){6}} +\put(61,-67){\line(3,-2){6}} +\put(52,-70){\scriptsize{0}} +\put(78,-74){\footnotesize{0 or less of the noise value is limited to 0}} + +\put(471,-67){\line(-1,0){15}} +\put(471,-67){\line(-3,2){6}} +\put(471,-67){\line(-3,-2){6}} +\put(476,-70){\scriptsize{1.0}} +\put(312,-74){\footnotesize{1 or more noise is limited to 1}} + +\linethickness{0.2em} +\put(54.5,-38){\line(1,0){428}} +\linethickness{2.8em} +\put(49,-1.5){\line(1,0){439}} +\linethickness{2.75em} +\color{lightgray} +\put(45.5,-1.5){\line(1,0){438}} +\put(51,-0.5){\includegraphics[width=29.55em, height=1em]{HSVNoiseInoNoiseEffectOriginal}} +\put(51,-16.5){\includegraphics[width=29.55em, height=1em]{HSVNoiseInoNoiseEffectEffectiveZero}} +\end{picture}\\[5.7em] + +\footnotesize +\noindent \hskip 2.65em Keep Noise \ \ Shift to maintain the noise. Contrast is reduced. It shifts the overall noise position + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(255,-45.5){\line(1,0){56}} +\put(255,-45.5){\line(3,2){6}} +\put(255,-45.5){\line(3,-2){6}} +\put(311,-45.5){\line(-3,2){6}} +\put(311,-45.5){\line(-3,-2){6}} + +\put(158,-60){\line(0,1){8}} +\put(158,-60){\line(-2,3){3}} +\put(158,-60){\line(2,3){3}} +\put(400,-60){\line(0,1){8}} +\put(400,-60){\line(-2,3){3}} +\put(400,-60){\line(2,3){3}} + +\put(144,-68.5){\line(1,0){56}} +\put(144,-68.5){\line(3,2){6}} +\put(144,-68.5){\line(3,-2){6}} +\put(200,-68.5){\line(-3,2){6}} +\put(200,-68.5){\line(-3,-2){6}} + +\put(357,-68.5){\line(1,0){56}} +\put(357,-68.5){\line(3,2){6}} +\put(357,-68.5){\line(3,-2){6}} +\put(413,-68.5){\line(-3,2){6}} +\put(413,-68.5){\line(-3,-2){6}} + +\put(107,-83){\line(0,1){8}} +\put(107,-83){\line(-2,3){3}} +\put(107,-83){\line(2,3){3}} +\put(442,-83){\line(0,1){8}} +\put(442,-83){\line(-2,3){3}} +\put(442,-83){\line(2,3){3}} + +\put(102,-91.5){\line(1,0){56}} +\put(102,-91.5){\line(3,2){6}} +\put(102,-91.5){\line(3,-2){6}} +\put(158,-91.5){\line(-3,2){6}} +\put(158,-91.5){\line(-3,-2){6}} + +\put(392,-91.5){\line(1,0){56}} +\put(392,-91.5){\line(3,2){6}} +\put(392,-91.5){\line(3,-2){6}} +\put(448,-91.5){\line(-3,2){6}} +\put(448,-91.5){\line(-3,-2){6}} + +\put(58,-106){\line(0,1){8}} +\put(58,-106){\line(-2,3){3}} +\put(58,-106){\line(2,3){3}} +\put(478.5,-106){\line(0,1){8}} +\put(478.5,-106){\line(-2,3){3}} +\put(478.5,-106){\line(2,3){3}} + +\put(55,-114.5){\line(1,0){56}} +\put(55,-114.5){\line(3,2){6}} +\put(55,-114.5){\line(3,-2){6}} +\put(111,-114.5){\line(-3,2){6}} +\put(111,-114.5){\line(-3,-2){6}} + +\put(427,-114.5){\line(1,0){56}} +\put(427,-114.5){\line(3,2){6}} +\put(427,-114.5){\line(3,-2){6}} +\put(483,-114.5){\line(-3,2){6}} +\put(483,-114.5){\line(-3,-2){6}} + +\put(283,-106){\line(0,1){54}} +\put(267,-123){\scriptsize{separate}} + +\linethickness{0.2em} +\put(54.5,-38){\line(1,0){428}} +\put(54.5,-61){\line(1,0){428}} +\put(54.5,-84){\line(1,0){428}} +\put(54.5,-107){\line(1,0){428}} +\linethickness{2.8em} +\put(49,-1.5){\line(1,0){439}} +\linethickness{2.75em} +\color{lightgray} +\put(45.5,-1.5){\line(1,0){438}} +\put(51,-0.5){\includegraphics[width=29.55em, height=1em]{HSVNoiseInoNoiseEffectOriginal}} +\put(51,-16.5){\includegraphics[width=29.55em, height=1em]{HSVNoiseInoNoiseEffectKeepNoise}} +\end{picture}\\[9.3em] + +\footnotesize +\noindent \hskip 2.65em Keep Contrast \ \ Reduce the noise width. Maintain the contrast. Noise width is reduced only at the end + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(255,-45.5){\line(1,0){56}} +\put(255,-45.5){\line(3,2){6}} +\put(255,-45.5){\line(3,-2){6}} +\put(311,-45.5){\line(-3,2){6}} +\put(311,-45.5){\line(-3,-2){6}} + +\put(86,-60){\line(0,1){8}} +\put(86,-60){\line(-2,3){3}} +\put(86,-60){\line(2,3){3}} +\put(450,-60){\line(0,1){8}} +\put(450,-60){\line(-2,3){3}} +\put(450,-60){\line(2,3){3}} + +\put(58,-68.5){\line(1,0){56}} +\put(58,-68.5){\line(3,2){6}} +\put(58,-68.5){\line(3,-2){6}} +\put(114,-68.5){\line(-3,2){6}} +\put(114,-68.5){\line(-3,-2){6}} + +\put(423,-68.5){\line(1,0){56}} +\put(423,-68.5){\line(3,2){6}} +\put(423,-68.5){\line(3,-2){6}} +\put(479,-68.5){\line(-3,2){6}} +\put(479,-68.5){\line(-3,-2){6}} + +\put(70,-83){\line(0,1){8}} +\put(70,-83){\line(-2,3){3}} +\put(70,-83){\line(2,3){3}} +\put(468,-83){\line(0,1){8}} +\put(468,-83){\line(-2,3){3}} +\put(468,-83){\line(2,3){3}} + +\put(55,-91.5){\line(1,0){28}} +\put(55,-91.5){\line(3,2){6}} +\put(55,-91.5){\line(3,-2){6}} +\put(83,-91.5){\line(-3,2){6}} +\put(83,-91.5){\line(-3,-2){6}} + +\put(454,-91.5){\line(1,0){28}} +\put(454,-91.5){\line(3,2){6}} +\put(454,-91.5){\line(3,-2){6}} +\put(482,-91.5){\line(-3,2){6}} +\put(482,-91.5){\line(-3,-2){6}} + +\put(61,-106){\line(0,1){8}} +\put(61,-106){\line(-2,3){3}} +\put(61,-106){\line(2,3){3}} +\put(476.5,-106){\line(0,1){8}} +\put(476.5,-106){\line(-2,3){3}} +\put(476.5,-106){\line(2,3){3}} + +\put(55,-114.5){\line(1,0){12}} +\put(55,-114.5){\line(3,2){6}} +\put(55,-114.5){\line(3,-2){6}} +\put(67,-114.5){\line(-3,2){6}} +\put(67,-114.5){\line(-3,-2){6}} + +\put(471,-114.5){\line(1,0){12}} +\put(471,-114.5){\line(3,2){6}} +\put(471,-114.5){\line(3,-2){6}} +\put(483,-114.5){\line(-3,2){6}} +\put(483,-114.5){\line(-3,-2){6}} + +\put(283,-106){\line(0,1){54}} +\put(267,-123){\scriptsize{separate}} + +\linethickness{0.2em} +\put(54.5,-38){\line(1,0){428}} +\put(54.5,-61){\line(1,0){428}} +\put(54.5,-84){\line(1,0){428}} +\put(54.5,-107){\line(1,0){428}} +\linethickness{2.8em} +\put(49,-1.5){\line(1,0){439}} +\linethickness{2.75em} +\color{lightgray} +\put(45.5,-1.5){\line(1,0){438}} +\put(51,-0.5){\includegraphics[width=29.55em, height=1em]{HSVNoiseInoNoiseEffectOriginal}} +\put(51,-16.5){\includegraphics[width=29.55em, height=1em]{HSVNoiseInoNoiseEffectKeepContrast}} +\end{picture} + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/HardLightIno.tex b/toonz/sources/translations_docs/english/HardLightIno.tex new file mode 100644 index 0000000..07ef198 --- /dev/null +++ b/toonz/sources/translations_docs/english/HardLightIno.tex @@ -0,0 +1,44 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\[0.55em] +Hard Light Ino \normalsize \hskip 14.2em : Hard Light\medskip +\par +Fore becomes darker using Multiply, output with Screen\par +Formula = if (Fore < 0.5) then \textquotedbl Multiply\textquotedbl \ else \textquotedbl Screen\textquotedbl\par +Formula shows the case of RGB values from 0 to 1.\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is ON. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/HardMixIno.tex b/toonz/sources/translations_docs/english/HardMixIno.tex new file mode 100644 index 0000000..4c51c38 --- /dev/null +++ b/toonz/sources/translations_docs/english/HardMixIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Hard Mix Ino\medskip +\par +\normalsize +Hard mix of images\par +Vivid Light is dark if 0, bright if 1\par +Formula = if (\textquotedbl Vivid Light\textquotedbl \ < 0.5) then 0 else 1\par +Formula shows the case of RGB values from 0 to 1.\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is ON. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/LevelAutoIno.tex b/toonz/sources/translations_docs/english/LevelAutoIno.tex new file mode 100644 index 0000000..9ad0056 --- /dev/null +++ b/toonz/sources/translations_docs/english/LevelAutoIno.tex @@ -0,0 +1,142 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\usepackage{eepic} + +\usepackage{tikz} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Level Auto Ino\medskip +\par +\normalsize +Spread the maximum brightness range of the picture.\\ +\par +Also does automatic level correction such as to brighten the image for a dark mask.\\ +\par +Based on the brightest value and the darkest value of the input image,\par +it spreads the brightness range of the darkest value (Out Min) and the\par +brightest value (Out Max) as a numerical value.\par +-{-}> \textquotedbl Level Auto Figure 1 Calculation View\textquotedbl \ reference\\ +\par +Since it expands the range of each RGBA channel, it does not take into account\par +the RGBA\textquotesingle s balance. Therefore please note that it may change colors, in a colored\par +image.\\ +\par +When you check the results, please do not use the sub-camera.\par +Since the sub-camera in the range of the input image is different, it changes the\par +darkest and brightest values of the input image, it can not be accurately processed.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +In Min Shift\\ +In Max Shift\par +Minimum and maximum values of the input image Pixel is automatically calculated,\par + and adjusted by adding to its value.\par +For example, if there is only one placed bright Pixel, when you want to ignore it,\par +spread the range by specifying a negative \textquotedbl In Max Shift\textquotedbl \ value.\par +Pixel value (8 or 16bits) is specified as a value of 0 to 1.\par +Minimum value is -1, maximum value is 1.\par +\noindent \hskip 7em Min \ \ \ \ \, 0\par +\noindent \hskip 7em Max \ \ \ \ -1\par +These values will make the screen become black.\par +\noindent \hskip 7em Min \ \ \ \ \, 1\par +\noindent \hskip 7em Max \ \ \ \ \ 0\par +If you use these values, the screen will become pure white.\par +If you use a value of 0 for both, there will be no adjustment by the shift.\par +The default values for both are 0.\\ +\\ +Out Min + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Out Max\par +Determines the darkest value of the output image (minimum value) and the\par +brightest value (maximum value).\par +Minimum value is 0, maximum value is 1.\par +The defaults are\par +\noindent \hskip 7em Out Min is 0\par +\noindent \hskip 7em Out Max is 1\par +for the values.\\ +\\ +Gamma\par +Used for the gamma correction between \textquotedbl Out Min\textquotedbl \ and \textquotedbl Out Max\textquotedbl .\par +A Value between 0.1 and 1.0, will make the image become darker.\par +It does not compensate when you specify a value of 1.0.\par +A value between 1.0 and 10.0, will make the image become brighter.\par +The default value is 1.\\ +\\ +Level Auto Figure 1 \ \ Calculation View + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(18.5,-94){\line(0,-1){81}} +\put(18.5,-94){\line(-2,-3){4}} +\put(18.5,-94){\line(2,-3){4}} +\put(18.5,-175){\line(-2,3){4}} +\put(18.5,-175){\line(2,3){4}} + +\put(114,-22){\line(0,-1){199}} +\put(256,-22){\line(0,-1){199}} +\put(85,-51){\line(1,0){199}} +\put(85,-193){\line(1,0){199}} + +\put(101,-7){\small{IN}} +\put(233,-7){\small{OUT}} +\put(290,-51){\small{1}} +\put(290,-193){\small{0}} +\put(72,-91){\small{max}} +\put(258,-69){\small{max}} +\put(116,-105){\small{max\_shift}} +\put(116,-176){\small{min\_shift}} +\put(72,-188){\small{min}} +\put(258,-188){\small{min}} +\end{picture}\\[3em] + +\noindent \hskip 3.8em \begin{tikzpicture}[line width=3pt] +\draw[line cap=round] (1.6,-0.75) -- (1.9,-0.93) -- (1.6,-1.11); +\draw[dashed,dash pattern=on 0.75pt off 0.75pt] (0,-0.93) -- (1.9,-0.93); + +\draw[line cap=round] (8.65,0) -- (8.95,-0.18) -- (8.65,-0.36); +\draw[dashed,dash pattern=on 0.75pt off 0.75pt] (7.1,-0.18) -- (8.95,-0.18); + +\draw[line cap=round] (1.6,-3.6) -- (1.9,-3.78) -- (1.6,-3.96); +\draw[dashed,dash pattern=on 0.75pt off 0.75pt] (0,-3.78) -- (1.9,-3.78); + +\draw[line cap=round] (8.65,-3.6) -- (8.95,-3.78) -- (8.65,-3.96); +\draw[dashed,dash pattern=on 0.75pt off 0.75pt] (7.1,-3.78) -- (8.85,-3.78); + +\draw[line cap=round] (1.86,-1.54) -- (2.04,-1.84) -- (2.22,-1.54); +\draw[dashed,dash pattern=on 0.75pt off 0.75pt] (2.04,-1) -- (2.04,-1.84); + +\draw[line cap=round] (1.86,-3.2) -- (2.04,-2.9) -- (2.22,-3.2); +\draw[dashed,dash pattern=on 0.75pt off 0.75pt] (2.04,-2.9) -- (2.04,-3.74); + +\draw[line cap=round] (6.58,-0.14) -- (6.92,-0.21) -- (6.7,-0.49); +\draw[dashed,dash pattern=on 0.75pt off 0.75pt] (2.04,-1.9) -- (6.92,-0.21); + +\draw[line cap=round] (6.65,-3.52) -- (6.92,-3.75) -- (6.58,-3.87); +\draw[dashed,dash pattern=on 0.75pt off 0.75pt] (2.04,-2.79) -- (6.92,-3.75); + +\end{tikzpicture} + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/LevelMasterIno.tex b/toonz/sources/translations_docs/english/LevelMasterIno.tex new file mode 100644 index 0000000..568a2a8 --- /dev/null +++ b/toonz/sources/translations_docs/english/LevelMasterIno.tex @@ -0,0 +1,77 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Level Master Ino\medskip +\par +\normalsize +Add correction to the level.\par +Please use \textquotedbl Level RGBA\textquotedbl \ when you want to correct the RGB separately.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +Reference\par +Connect the reference image to put the strength of the effect into each Pixel.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +In\par +Specify the Min (Minimum) value and Max (Maximum) value of the input Pixel value.\par +Min value is less than the Min, Max value is greater than the Max limit.\par +Minimum value is 0, maximum value is 1.\par +The default values are, Min is 0, Max is 1.\par +Values can take an input of up to 4 decimal places.\\ +\\ +Out\par +Specify the range for \textquotedbl In\textquotedbl ,\par +Set to the range of Min (Minimum) value and Max (Maximum) value that you specify.\par +Minimum value is 0, maximum value is 1.\par +The default values are, Min is 0, Max is 1.\par +Values can take an input of up to 4 decimal places.\\ +\\ +Gamma\par +Used for the gamma correction between \textquotedbl Out Min\textquotedbl \ and \textquotedbl Out Max\textquotedbl .\par +A Value between 0.1 and 1.0, will make the image become darker.\par +It does not compensate when you specify a value of 1.0.\par +A value between 1.0 and 10.0, will make the image become brighter.\par +The default value is 1.\\ +\\ +Alpha Rendering\par +When ON it will also process the Alpha channel.\par +When OFF, it does not process the Alpha channel.\par +The default setting is ON.\\ +\\ +Premultiplied\par +When ON, RGB is already set to Premultiply\par +(The value of Alpha channel is multiplied in advance RGB channels)\par +and processes as an image. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +At that time, and added to the Alpha processing, you may not get the correct image.\par +The default setting is ON.\\ +\\ +Reference\par +Choose how Reference image values put the strength of the effect into each Pixel.\par +An image is connected to the \textquotedbl Reference\textquotedbl \ of the input,\par +Choose from Red/Green/Blue/Alpha/Luminance/Nothing.\par +Choose Nothing when you do not want this effect, it will turn off the connection.\par +The default setting is Red. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/LevelRGBAIno.tex b/toonz/sources/translations_docs/english/LevelRGBAIno.tex new file mode 100644 index 0000000..8bed4f2 --- /dev/null +++ b/toonz/sources/translations_docs/english/LevelRGBAIno.tex @@ -0,0 +1,80 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Level RGBA Ino\medskip +\par +\normalsize +Add correction to the individual RGBA channels of the level.\par +Please use \textquotedbl Level Master\textquotedbl \ when you want to correct RGB together.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +Reference\par +Connect the reference image to put the strength of the effect into each Pixel.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Red In\\ +Green In\\ +Blue In\\ +Alpha In\par +Specify the Min (Minimum) value and Max (Maximum) value of the input Pixel value.\par +Min value is less than the Min, Max value is greater than the Max limit.\par +Minimum value is 0, maximum value is 1.\par +The default values are, Min is 0, Max is 1.\par +Values can take an input of up to 4 decimal places.\\ +\\ +Red Out\\ +Green Out\\ +Blue Out\\ +Alpha Out\par +Specify the range for \textquotedbl In\textquotedbl ,\par +Set to the range of Min (Minimum) value and Max (Maximum) value that you specify.\par +Minimum value is 0, maximum value is 1.\par +The default values are, Min is 0, Max is 1.\par +Values can take an input of up to 4 decimal places.\\ +\\ +Red Gamma\\ +Green Gamma\\ +Blue Gamma\\ +Alpha Gamma\par +Used for the gamma correction between \textquotedbl Out Min\textquotedbl \ and \textquotedbl Out Max\textquotedbl .\par +A Value between 0.1 and 1.0, will make the image become darker.\par +It does not compensate when you specify a value of 1.0.\par +A value between 1.0 and 10.0, will make the image become brighter.\par +The default value is 1. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Premultiplied\par +When ON, RGB is already set to Premultiply\par +(The value of Alpha channel is multiplied in advance RGB channels)\par +and processes as an image.\par +At that time, and added to the Alpha processing, you may not get the correct image.\par +The default setting is ON.\\ +\\ +Reference\par +Choose how Reference image values put the strength of the effect into each Pixel.\par +An image is connected to the \textquotedbl Reference\textquotedbl \ of the input,\par +Choose from Red/Green/Blue/Alpha/Luminance/Nothing.\par +Choose Nothing when you do not want this effect, it will turn off the connection.\par +The default setting is Red. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/LightenIno.tex b/toonz/sources/translations_docs/english/LightenIno.tex new file mode 100644 index 0000000..f29198f --- /dev/null +++ b/toonz/sources/translations_docs/english/LightenIno.tex @@ -0,0 +1,44 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Lighten Ino\medskip +\par +\normalsize +Lightens the image\par +Makes the values larger in the Fore and Back images (Seperate RGB)\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is OFF. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/LighterColorIno.tex b/toonz/sources/translations_docs/english/LighterColorIno.tex new file mode 100644 index 0000000..9b1a8d3 --- /dev/null +++ b/toonz/sources/translations_docs/english/LighterColorIno.tex @@ -0,0 +1,44 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Lighter Color Ino\medskip +\par +\normalsize +Color comparison (Light)\par +Larger RGB luminance values\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is OFF. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/LinearBurnIno.tex b/toonz/sources/translations_docs/english/LinearBurnIno.tex new file mode 100644 index 0000000..d897a66 --- /dev/null +++ b/toonz/sources/translations_docs/english/LinearBurnIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Linear Burn Ino\medskip +\par +\normalsize +Burn the image (Linear)\par +Uses the top half of the total value, to darken\par +Formula = Back + Fore - 1\par +Formula shows the case of RGB values from 0 to 1.\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is ON. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/LinearDodgeIno.tex b/toonz/sources/translations_docs/english/LinearDodgeIno.tex new file mode 100644 index 0000000..ce96758 --- /dev/null +++ b/toonz/sources/translations_docs/english/LinearDodgeIno.tex @@ -0,0 +1,45 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Linear Dodge Ino\medskip +\par +\normalsize +Linear dodge the image\par +Add to the total brightness\par +Formula = Back + Fore \ \ ※ Alpha with RGB ADD difference from semi-transparent\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is ON. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/LinearLightIno.tex b/toonz/sources/translations_docs/english/LinearLightIno.tex new file mode 100644 index 0000000..675e0a9 --- /dev/null +++ b/toonz/sources/translations_docs/english/LinearLightIno.tex @@ -0,0 +1,37 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Linear Light Ino\medskip +\par +\normalsize +Linear Light the image\par +Fore is darker for Linear Burn, and lighter for Linear Dodge\par +Formula = if (Fore < 0.5) then \textquotedbl Linear Burn\textquotedbl \ else \textquotedbl Linear Dodge\textquotedbl\par +Formula shows the case of RGB values from 0 to 1.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is OFF. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/MaxMinIno.tex b/toonz/sources/translations_docs/english/MaxMinIno.tex new file mode 100644 index 0000000..27b9d8a --- /dev/null +++ b/toonz/sources/translations_docs/english/MaxMinIno.tex @@ -0,0 +1,87 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Max Min Ino\medskip +\par +\normalsize +It brightens (dark) portions of the image.\\ +\par +It inflates around (the polygon).\par +In addition, the change is smooth.\\ +\par +First, it processes the Alpha channel, if specified.\par +Then, it handles the Pixel RGB if the Alpha channel is not zero.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +Reference\par +Connect the reference image to put the strength of the inflate effect for each Pixel.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Max Min Select\par +Specify how to handle the selection.\par +\textquotedbl Max\textquotedbl \ -> Inflate the bright parts of the image\par +\textquotedbl Min\textquotedbl \ -> Inflate the dark parts of the image\par +Using \textquotedbl Min\textquotedbl , ink lines of the cell image outline, the transmission region of the outside\par +will be painted zero, ink line bulge of the transparent area will continue to disappear.\par +Also it increases the transmission region Alpha as well.\par +The default setting is \textquotedbl Max\textquotedbl .\\ +\\ +Radius\par +The inflate size, specified in the circle radius.\par +The unit is millimeters.\par +Specify a number greater than or equal to 0.\par +By adding Smoothing (in pixels) it does not inflate using a value less than 1.\par +Therefore, if the value is less, there will be an effect with a fine image,\par +but it may not take effect on a rough image.\par +A larger Radius will take more time to process.\\ +\\ +Polygon Number\par +Other than inflating to a circle, you can specify whether to inflate to a polygon.\par +Specify an integer value.\par +A value of 2 will inflate around the circle Radius.\par +3 or more, will inflate to the number of angles of the polygon. The maximum is 16.\par +It is a polygon that begins from the true right of the center to inflate.\par +The default value is 2. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\\ +\par +\noindent Degree\par +\textquotedbl Polygon Number\textquotedbl \ value of 3 or more, specify the slope of the inflate polygon.\par +\textquotedbl Polygon Number\textquotedbl \ value of 2 or less will have no effect.\par +Specify in Degree units more than 0.\par +It will rotate in a clockwise direction.\par +The default value is 0.\\ +\\ +Alpha Rendering\par +When ON it will also process the Alpha channel.\par +When OFF it will process only to RGB. It uses the Alpha channel without BG image.\par +The default setting is ON.\\ +\\ +Reference\par +Choose how Reference image values put the strength of the effect into each Pixel.\par +An image is connected to the \textquotedbl Reference\textquotedbl \ of the input,\par +Choose from Red/Green/Blue/Alpha/Luminance/Nothing.\par +Choose Nothing when you do not want this effect, it will turn off the connection.\par +The default setting is Red. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/MedianIno.tex b/toonz/sources/translations_docs/english/MedianIno.tex new file mode 100644 index 0000000..4f7d0a4 --- /dev/null +++ b/toonz/sources/translations_docs/english/MedianIno.tex @@ -0,0 +1,70 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Median Ino\medskip +\par +\normalsize +Reduce noise, and erode majority of middle colors, rounds the contour of the picture\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +Reference\par +Connect the reference image to put the strength of the effect into each Pixel.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Radius\par +Specify the range to be eroded by a circle radius.\par +The unit is mm.\\ +\par +Specify a value greater than or equal to 0. The maximum is 100mm.\par +A value smaller than the pixel width (because you do not include the Pixel around)\par +will do nothing.\\ +\par +The default value is 0.35mm.\\ +\\ +Channel\par +Specify the color channel to apply the median.\\ +\par +\textquotedbl Red\textquotedbl\par +\textquotedbl Green\textquotedbl\par +\textquotedbl Blue\textquotedbl\par +\textquotedbl Alpha\textquotedbl\par +If you choose, to process over the specified color channel,\par +it will store the results in the RGBA channel.\par +In a black-and-white image, using this method, of single-channel processing,\par +the speed of processing will be faster.\\ +\par +\textquotedbl All\textquotedbl\par +Using this, will multiply the processing to each RGBA channel.\\ +\par +The default setting is \textquotedbl All\textquotedbl .\\ +\\ +Reference\par +Choose how Reference image values put the strength of the effect into each Pixel.\par +An image is connected to the \textquotedbl Reference\textquotedbl \ of the input,\par +Choose from Red/Green/Blue/Alpha/Luminance/Nothing. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +Choose Nothing when you do not want this effect, it will turn off the connection.\par +The default setting is Red. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/MotionBlurIno.tex b/toonz/sources/translations_docs/english/MotionBlurIno.tex new file mode 100644 index 0000000..edd13c8 --- /dev/null +++ b/toonz/sources/translations_docs/english/MotionBlurIno.tex @@ -0,0 +1,104 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Motion Blur Ino\medskip +\par +\normalsize +Makes a blur of the camera by using a parallel shutter-style movement.\par +An afterimage shake effect is also possible to specify in the options.\\ +\par +First, it will process the Alpha channel (if ON is specified), then,\par +it handles RGB pixels that have an Alpha channel not set to zero.\\ +\par +The Alpha channel is not processed when (OFF) is specified,\par +to mask the change in the RGB image. Therefore, smooth edges will\par +remain smooth.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Depend Move\par +\noindent \ \ \, P1 -> P2\par +The following X1,Y1,X2,Y2,\par +specify the move in a fixed direction and magnitude.\\ +\par +\noindent \ \ \, Motion\par +In Geometry, it specifies the move E/W, from the H/S on a frame-by-frame basis.\par +The X1,Y1,X2,Y2 specified values will be ignored.\\ +\\ +X1\\ +Y1\\ +X2\\ +Y2\par +Specifies the start and end point coordinate values of the parallel movement blur.\par +Coordinate system uses an origin at the lower left corner.\par +The unit is millimeters.\par +The following specified points, will give subtle changes in the length.\par +Distance between the start and end point will have no effect on 1/16 Pixel or more.\par +The default value is\par +\noindent \hskip 7em X1 Y1 -> 0.0 0.0\par +\noindent \hskip 7em X2 Y2 -> 1.0 1.0\par +for the points. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Scale\par +Specify the scale adjustment to the length of the parallel movement blur.\par +For example,\par +\noindent \hskip 7em X1 Y1 -> 0.0 0.0\par +\noindent \hskip 7em X2 Y2 -> 1.0 -1.0\par +\noindent \hskip 7em Scale -> 100\par +Will become,\par +\noindent \hskip 7em X1 Y1 -> 0.0 0.0\par +\noindent \hskip 7em X2 Y2 -> 100.0 -100.0\par +It will have the same effect.\par +If you specify a zero blur it will no longer have an effect.\par +The default value is 1 which will give no scale.\\ +\\ +Curve\par +Specify the adjustments to the strength of the blur.\par +With a value of 10.0 or less, and larger than 1, the blur becomes stronger,\par +with a value of 0.1 or more, and smaller than 1, the blur will become weaker.\par +The default value is 1 which will give equal attenuation.\\ +\\ +Zanzo Length\par +Specify the shift position of the afterimage effect\par +The unit is millimeters.\par +Specify a value greater than or equal to 0.\par +For example, when you want to shift the afterimage of a line with a width of 3,\par +specify a value greater than or equal to 3 for the afterimage.\par +The default value is 0 for no afterimage\\ +\\ +Zanzo Power\par +Determines the strength at the time of issuing the afterimage.\par +The weakest value is 0, where the afterimage effect will not be applied to the blur.\par +The larger the value,\par +the afterimage effect will become stronger, in the blur.\par +The default value is 1 the strongest. The blur will have the afterimage effect applied.\\ +\\ +Alpha Rendering\par +This is a valid switch only when there is an Alpha channel.\par +When OFF, it masks the changes in the RGB values using the Alpha value.\par +When ON, the process is also applied to the Alpha. There is no Mask.\par +The default setting is ON. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/MotionWindIno.tex b/toonz/sources/translations_docs/english/MotionWindIno.tex new file mode 100644 index 0000000..225596e --- /dev/null +++ b/toonz/sources/translations_docs/english/MotionWindIno.tex @@ -0,0 +1,333 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\usepackage{epic} +\usepackage{eepic} +\usepackage{xcolor} + +\usepackage{graphicx} +\graphicspath{{images/}} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Motion Wind Ino\medskip +\par +\normalsize +Add the effect of wind flow lines to the picture\\ +\par +For animation, it uses a fine arts drawing method to represent the reference to wind.\par +In the wake of the bright peak portion from the RGB value of the pixel,\par +you can add effects, such as flowing in color.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +Reference\par +Connect the reference image to put the strength of the effect into each Pixel.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Direction\par +Specify the direction of the flow line.\par +The only directions are above (Up) under (Down) left (Left) right (Right).\par +The default setting is right (Right).\par +Direction, is a fixed direction as viewed from the camera. For the slope of the image\par +it is not possible to tilt the direction by rotation or camera Z rotation etc.\par +of the image using (Geometry conversion),\par +please take note.\\ +\\ +Dark\par +When OFF it will be streamlined the bright parts of the image.\par +When ON it will be streamlined to the dark parts of the image.\par +The default setting is OFF.\\ +\\ +Alpha Rendering\par +This is a valid switch only when there is an Alpha channel.\par +When OFF, it masks the changes in the RGB values using the Alpha value.\par +When ON, the process is also applied to the Alpha.\par +The default setting is ON.\\ +\\ +Length Min\\ +Length Max\par +Specify the length of the flow line.\par +The unit is millimeters.\par +Specify a value greater than or equal to 0. The maximum is 1000.\par +The following specified points, will have subtle changes in the length.\par +If you give a different values, the length between the values will change randomly. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +With the same values, it will no longer use randomness and will be the same length.\par +The default values for Min (minimum value) is 0, and Max (maximum value) is 18.\par +-{-}> \textquotedbl Motion Wind Figure 1 \ \ Length Wind\textquotedbl \ reference\par +-{-}> \textquotedbl Motion Wind Figure 4 \ \ Force is 1 and Density is 1\textquotedbl \ reference\par +-{-}> \textquotedbl Motion Wind Figure 7 \ \ Length Wind and Force is 10\textquotedbl \ reference\\ +\\ +Length Bias\par +This changes the offset of the random pattern for the length.\par +Using a value between 0.1 and 1.0, will make it more short,\par +If you specify a value of 1.0 it will make the randomness become uniform,\par +Using a value between 1.0 and 10.0, increases the length to be longer.\par +Specify how you would like it to look.\par +The default value is 1.\par +-{-}> \textquotedbl Motion Wind Figure 1 \ \ Length Wind\textquotedbl \ reference\\ +\\ +Length Seed\par +This changes the random pattern for the length.\par +Specify an integer value greater than or equal to 0.\par +If you give the same value to the same image, it will reproduce the same pattern.\par +Change the value if you want a different pattern.\par +For example, in the Fix of the movie, when you want the pattern to change\par +streamlines, on a frame-by-frame basis, change the seed value.\par +The default value is set to 1.\\ +\\ +Force Min\\ +Force Max\par +Specify the start momentum of the flow.\par +A value between 0.1 and 1.0, will immediately decay for a weak momentum,\par +If you specify a value of 1.0 it will be attenuated to linear momentum,\par +Between 1.0 and 10.0, will make a not quite attenuated strong momentum,\par +specify how you would like it to look.\par +If you give different values, momentum between the values will change randomly.\par +With the same values, it will no longer be random and will use the same momentum.\par +The default value is 1 for both.\par +-{-}> \textquotedbl Motion Wind Figure 2 \ \ Force Wind\textquotedbl \ reference\par +-{-}> \textquotedbl Motion Wind Figure 5 \ \ Force is 0.1\textquotedbl \ reference\par +-{-}> \textquotedbl Motion Wind Figure 7 \ \ Length Wind and Force is 10\textquotedbl \ reference\\ +\\ +Force Bias\par +This changes the offset of the random pattern for the momentum.\par +Using a value between 0.1 and 1.0, will make it become more weak,\par +if you specify a value of 1.0 it will make the randomness become uniform, + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +using a value between 1.0 and 10.0, will make it become more strong.\par +Specify how you would like it to look.\par +The default value is 1.\par +-{-}> \textquotedbl Motion Wind Figure 2 Force Wind\textquotedbl \ reference\\ +\\ +Force Seed\par +This changes the random pattern for the momentum.\par +The options are similar to \textquotedbl Length Seed\textquotedbl .\\ +\\ +Density Min\\ +Density Max\par +Specify the concentration of the streamline.\par +There is no streamlined effect when the value is 0,\par +Using values between 1.0 and 0.0, will make it become thinner,\par +The reference concentration is a value of 1.0,\par +using a value greater than 1.0, will make it become darker. The maximum is 100.\par +If you give different values, concentration between the values will change randomly.\par +With the same values, it is no longer random and will use the same concentration.\par +The default value is 1 for both.\par +-{-}> \textquotedbl Motion Wind Figure 3 \ \ Density Wind\textquotedbl \ reference\par +-{-}> \textquotedbl Motion Wind Figure 6 \ \ Density is 0.2\textquotedbl \ reference\\ +\\ +Density Bias\par +This changes the offset of the random pattern for the concentration.\par +Using a value between 0.1 and 1.0, the concentration is increased,\par +if you specify a value of 1.0 it will make the randomness become uniform,\par +using a value of between 1.0 and 10.0, will make it become more dark.\par +The default value is 1.\par +-{-}> \textquotedbl Motion Wind Figure 3 \ \ Density Wind\textquotedbl \ reference\\ +\\ +Density Seed\par +This changes the random pattern of the concentration.\par +The options are similar to \textquotedbl Length Seed\textquotedbl .\\ +\\ +Rather than streamline, to use a uniform flow effect\par +\ \ \textquotedbl Length Min\textquotedbl \ and \textquotedbl Length Max\textquotedbl 、\par +\ \,\, \textquotedbl Force Min\textquotedbl \ and \ \, \textquotedbl Force Max\textquotedbl 、\par +\textquotedbl Density Min\textquotedbl \ and \textquotedbl Density Max\textquotedbl 、\par +and give the same values to each for the picture rather than streamline for the flow.\\ +\\ +To synchronize a random pattern\par +一 Using sheets, + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent \hskip 7.4em length\_random\_seed、\par +\noindent \hskip 8em force\_random\_seed、\par +\noindent \hskip 7em density\_random\_seed、\par +Using the same values, patterns will grow the same, with the same timing,\par +and weakening amounts.\par +It will break apart from the pattern when using different values.\\ +\\ +To secure a random pattern when the camera is moving\par +When on the background image, using camera movement, a random pattern\par +for each frame in accordance with the change of the picture will occur.\par +If you want to fix the pattern it must be multiplied by the processing\par +in the entire background image.\\ +-{-}-{-}-{-}\\ +Length Ref\par +When OFF it will not be referred to.\par +When ON, this refers to the image, and will give it a length.\par +Specifying the reference, will give the length to the Red channel of the image.\par +When not specified, it will give the length to the brightness of the image.\par +The darker the Pixel when the streamline begins, will make it become shorter.\par +The whole image tone is weakened, please adjust the length values\par +specified in (Min, Max).\par +The default setting is OFF.\\ +\\ +Force Ref\par +When OFF it will not be referred to.\par +When ON, the refers to the image, and will give it strength.\par +Specifying the reference, will give the strength to the Red channel of the image.\par +When not specified, it will give the strength to the brightness of the image.\par +The darker the Pixel when the streamline begins, will make it become weaker.\par +The whole image tone is weakened, please adjust the momentum values\par +specified in (Min, Max).\par +The default setting is OFF.\\ +\\ +Density Ref\par +When OFF it will not be referred to.\par +When ON, the refers to the image, and will give it light and dark shade.\par +Specifying the reference, will give the shade to the Red channel of the image.\par +When not specified, it will give the shade to the brightness of the image.\par +The darker the Pixel when the streamline begins, will make it become thinner.\par +The whole image tone is weakened, please adjust the concentration values\par +specified in (Min, Max).\par +The default setting is OFF. + +\newpage + +\thispagestyle{empty} + +\ \vspace{1.3em} +\par +\noindent Reference\par +Choose how Reference image values put the strength of the effect into each Pixel.\par +An image is connected to the \textquotedbl Reference\textquotedbl \ of the input,\par +Choose from Red/Green/Blue/Alpha/Luminance/Nothing.\par +Choose Nothing when you do not want this effect, it will turn off the connection.\par +The default setting is Red. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Motion Wind Figure 1 \ \ Length Wind + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(1,-198.5){\line(1,0){198}} +\put(9,-200.5){\line(0,1){62}} +\drawline[0](9,-143)(193,-198.5) +\drawline[0](9,-143)(102,-198.5) +\drawline[0](9,-143)(28,-198.5) +\put(0.5,-135){\includegraphics[width=13.9em]{MotionWindInoFunction1LengthWindA}} +\put(142,-171.5){\includegraphics[width=13.9em]{MotionWindInoFunction1LengthWindB}} +\put(284.5,-200){\includegraphics[width=13.9em]{MotionWindInoFunction1LengthWindC}} +\put(209,-16.5){\normalsize{Bias is 0.1}} +\put(351,-45){\normalsize{Bias is 10}} +\end{picture}\\[12.6em] + +\normalsize +\noindent Motion Wind Figure 2 \ \ Force Wind + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(1,-198.5){\line(1,0){198}} +\put(9,-200.5){\line(0,1){62}} +\drawline[0](9,-143)(193,-198.5) +\spline(9,-143)(129,-150)(188,-180)(195,-198.5) +\spline(9,-143)(20,-168.5)(85,-192.5)(193,-198.5) + +\put(0.5,-135){\includegraphics[width=13.9em]{MotionWindInoFunction2MotionWindA}} +\put(142,-171.5){\includegraphics[width=13.9em]{MotionWindInoFunction2MotionWindB}} +\put(284.5,-200){\includegraphics[width=13.9em]{MotionWindInoFunction2MotionWindC}} +\put(209,-16.5){\normalsize{Bias is 0.1}} +\put(351,-45){\normalsize{Bias is 10}} +\end{picture}\\[12.65em] + +\normalsize +\noindent Motion Wind Figure 3 \ \ Density Wind + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(1,-198.5){\line(1,0){198}} +\put(9,-200.5){\line(0,1){62}} +\drawline[0](9,-143)(193,-198.5) +\drawline[0](9,-166.5)(193,-198.5) +\drawline[0](9,-192)(193,-198.5) + +\put(0.5,-135){\includegraphics[width=13.9em]{MotionWindInoFunction3DensityWindA}} +\put(142,-171.5){\includegraphics[width=13.9em]{MotionWindInoFunction3DensityWindB}} +\put(284.5,-200){\includegraphics[width=13.9em]{MotionWindInoFunction3DensityWindC}} +\put(209,-16.5){\normalsize{Bias is 0.1}} +\put(351,-45){\normalsize{Bias is 10}} +\end{picture} + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.1em} +\par +\large +\noindent \hskip 10.5em Length Min equal Max Wind\\[-0.15em] +\normalsize +Motion Wind Figure 4 \ \ Force is 1 and Density is 1 + +\large +\noindent \begin{picture}(0,0) +\put(28.5,-132){\includegraphics[width=13.9em]{MotionWindInoFunction4}} +\end{picture}\\[7.6em] + +\large +\noindent \hskip 10.5em Length Min equal Max Wind\\[-0.15em] +\normalsize +Motion Wind Figure 5 \ \ Force is 0.1 + +\large +\noindent \begin{picture}(0,0) +\put(28.5,-132){\includegraphics[width=13.9em]{MotionWindInoFunction5}} +\end{picture}\\[7.6em] + +\large +\noindent \hskip 10.5em Length Min equal Max Wind\\[-0.15em] +\normalsize +Motion Wind Figure 6 \ \ Density is 0.2 + +\large +\noindent \begin{picture}(0,0) +\put(28.5,-132){\includegraphics[width=13.9em]{MotionWindInoFunction6}} +\end{picture}\\[7.4em] + +\normalsize +\noindent Motion Wind Figure 7 \ \ Length Wind and Force is 10 + +\large +\noindent \begin{picture}(0,0) +\put(28.5,-132){\includegraphics[width=13.9em]{MotionWindInoFunction7}} +\end{picture} + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/MultiplyIno.tex b/toonz/sources/translations_docs/english/MultiplyIno.tex new file mode 100644 index 0000000..fe70d6e --- /dev/null +++ b/toonz/sources/translations_docs/english/MultiplyIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Multiply Ino\medskip +\par +\normalsize +Multiplication of images\par +Images will become darker using multiplication\par +Formula = Fore × Back\par +Formula shows the case of RGB values from 0 to 1.\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is ON. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/NegateIno.tex b/toonz/sources/translations_docs/english/NegateIno.tex new file mode 100644 index 0000000..4b17d7a --- /dev/null +++ b/toonz/sources/translations_docs/english/NegateIno.tex @@ -0,0 +1,48 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Negate Ino\medskip +\par +\normalsize +Invert each color channel of the image.\\ +\par +\ \ 8bits Image: 0-{-}> \ \ \ 255、1-{-}> \ \ \, 254、... \ \ \ \ 254-{-}>1、 \ \ \, 255-{-}>0\par +16bits Image: 0-{-}>65535、1-{-}>65534、... 65534-{-}>1、65535-{-}>0\par +Values are inverted as in the above example.\\ +\par +When there is an Alpha channel, it is inverted with respect to the Alpha values.\par +Alpha Value \ \ \ \ 0: 0-{-}> \ \ \, 0、1-{-}> \ \ \ 0、... 254-{-}>0、255-{-}>0\par +Alpha Value 128: 0-{-}>128、1-{-}>127、... 127-{-}>1、128-{-}>0、...255-{-}>0\par +Alpha Value 255: 0-{-}>255、1-{-}>254、... 254-{-}>1、255-{-}>0\par +Subsequently, the cell image will be reversed successfully.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Specify whether to do the inversion for each color channel.\\ +\\ +Red \ \ \ \, Red channel inversion switch\\ +Green \ Green channel inversion switch\\ +Blue \ \ \, Blue channel inversion switch\\ +Alpha \ \ Alpha channel inversion switch\\ +\\ +When OFF it does not do anything to that channel.\\ +When ON, it will invert the target channel.\\ +The default settings for Red, Green, Blue is ON, and Alpha is OFF. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/OverIno.tex b/toonz/sources/translations_docs/english/OverIno.tex new file mode 100644 index 0000000..fcb894f --- /dev/null +++ b/toonz/sources/translations_docs/english/OverIno.tex @@ -0,0 +1,44 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Over Ino\medskip +\par +\normalsize +Synthesis of the image\par +Align the Back to the Fore\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is OFF. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/OverlayIno.tex b/toonz/sources/translations_docs/english/OverlayIno.tex new file mode 100644 index 0000000..ccb7eb2 --- /dev/null +++ b/toonz/sources/translations_docs/english/OverlayIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Overlay Ino\medskip +\par +\normalsize +Overlay the image\par +When Back is dark it uses Multiply, otherwise it uses the Screen\par +Formula = if (Back < 0.5) then \textquotedbl Multiply\textquotedbl \ else \textquotedbl Screen\textquotedbl\par +Formula shows the case of RGB values from 0 to 1.\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is ON. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/PNCloudsIno.tex b/toonz/sources/translations_docs/english/PNCloudsIno.tex new file mode 100644 index 0000000..48ee0f4 --- /dev/null +++ b/toonz/sources/translations_docs/english/PNCloudsIno.tex @@ -0,0 +1,55 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +PN Clouds Ino\medskip +\par +\normalsize +Generates a cloud pattern image.\\ +\par +pixel value,\par +\noindent \hskip 7em \ \ 8bits Image 128(0x80)\par +\noindent \hskip 7em 16bits Image 32768(0x8000)\par +Will be the center noise value.\par +It should be noted that this value is greater than the noise value\par +and a small value will not be necessarily be even.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Size\par +Specify the size of the noise for the pattern.\par +Using a reduced value makes a small pattern, a bigger value makes a large pattern.\par +The unit is mm.\par +The default value is 10.\\ +\\ +Z\par +Continuously changes the image.\par +For example, from 1 to 24 frames it changes from 0 to 1.\par +The default value is 0.\\ +\\ +Octaves\par +Determine the detail of the cloud pattern.\par +Specify an integer from 1 to 10.\par +More detail in the noise will appear as the number increases.\par +The default value is 1.\\ +\\ +Persistance\par +Specify the strength of the details in the noise of the cloud pattern.\\ +\\ +Alpha Rendering\par +When OFF fill in the maximum Alpha value, over the entire surface will be opaque.\par +When ON it produces the same image as the RGB over the Alpha channel.\par +The default setting is ON. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/PinLightIno.tex b/toonz/sources/translations_docs/english/PinLightIno.tex new file mode 100644 index 0000000..23efd5e --- /dev/null +++ b/toonz/sources/translations_docs/english/PinLightIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Pin Light Ino\medskip +\par +\normalsize +Pin Light the image\par +When Fore is dark it uses Darken, otherwise it uses Lighten\par +Formula = if (Fore < 0.5) then \textquotedbl Darken\textquotedbl \ else \textquotedbl Lighten\textquotedbl\par +Formula shows the case of RGB values from 0 to 1.\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is ON. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/RadialBlurIno.tex b/toonz/sources/translations_docs/english/RadialBlurIno.tex new file mode 100644 index 0000000..cb32831 --- /dev/null +++ b/toonz/sources/translations_docs/english/RadialBlurIno.tex @@ -0,0 +1,131 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\usepackage{graphicx} +\graphicspath{{images/}} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Radial Blur Ino\medskip +\par +\normalsize +Generate an average value Blur in the radial direction.\par +It is also possible to add a twist to the direction (processing time will increase).\\ +\par +First, it processes the Alpha channel, if specified.\par +Then, it handles the RGB pixels if the Alpha channel is not zero.\par +If you do not want to process to the Alpha channel, it will mask the changes in the\par +RGB image using the Alpha values. Therefore, smooth edges will remain smooth.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +Reference\par +Connect the reference image to put the strength of the effect into each Pixel.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Center\par +Specify the center position of the radius.\par +Origin is the center of the image to be processed. Not the gaze point of the camera.\par +The unit is millimeters.\par +The default value is the center of origin position at \textquotedbl 0.0 0.0\textquotedbl .\\ +\\ +Radius\par +Specify the range that does not get blurred from the center.\par +The unit is millimeters.\par +Enter a value greater than or equal to 0.\par +The default value is 0 which will be a total blur.\\ +\\ +Blur\par +The strength of the blur and adjustment.\par +The strength of the blur is determined from the Center length to each Pixel.\par +Calculation formula, the distance of each Pixel and Pixel\_Len from Center,\par +(Pixel\_Len - Radius) * (Blur / 100)\par +is how it will be calculated.\par +When the minimum value is 0 it does not do anything. The maximum value is 100.\par +The default value is 1. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Twist\par +Specify a twist amount.\par +This twist is specified to twist several times from the Center to the reference distance.\par +Reference distance is the up and down high-half of the length of the resulting image.\par +When the minimum value is 0 it does not twist. The maximum value is 180.\\ +\\ +Alpha Rendering\par +When ON it will also process to the Alpha channel.\par +When OFF, it does not process to the Alpha channel,\par +It will mask the change of the RGB values using the Alpha values.\par +The default setting is ON.\\ +\\ +Anti Alias\par +Specify the process of adding antialiasing in order to eliminate any jaggies.\par +The result will become more smooth, but it will take more time to process the image.\par +The default setting is OFF.\par +\par +Width=2176 Height=1236 Center=0,0 Radius=0 Blur=3 Alpha=ON\par +Shrink=1\par +\noindent \hskip 7em Twist=0\par +\noindent \hskip 10.5em Anti Alias=OFF ~7sec\par +\noindent \hskip 10.5em Anti Alias=ON \, ~32sec\par +\noindent \hskip 7em Twist=1-180\par +\noindent \hskip 10.5em Anti Alias=OFF ~19sec\par +\noindent \hskip 10.5em Anti Alias=ON \, ~780sec\par +Shrink=3\par +\noindent \hskip 7em Twist=0\par +\noindent \hskip 10.5em Anti Alias=OFF ~3sec\par +\noindent \hskip 10.5em Anti Alias=ON \, ~4sec\par +\noindent \hskip 7em Twist=1-180\par +\noindent \hskip 10.5em Anti Alias=OFF ~4sec\par +\noindent \hskip 10.5em Anti Alias=ON \, ~34sec\\ +\\ +Reference\par +Choose how Reference image values put the strength of the effect into each Pixel.\par +An image is connected to the \textquotedbl Reference\textquotedbl \ of the input,\par +Choose from Red/Green/Blue/Alpha/Luminance/Nothing.\par +Choose Nothing when you do not want this effect, it will turn off the connection.\par +The default setting is Red. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Radial Blur \ \ Reference Example + +\large +\noindent \begin{picture}(0,0) +\put(170.5,-144.5){\includegraphics[width=13.3em]{RadialBlurInoOriginalImage}} +\put(92.5,-343){\includegraphics[width=13.3em]{RadialBlurInoRadialBlur30AAOFF}} +\put(314.5,-343){\includegraphics[width=13.3em]{RadialBlurInoRadialBlur30AAON}} +\put(92.5,-486){\includegraphics[width=13.3em]{RadialBlurInoTwistBlur20Twist45AAOFF}} +\put(314.5,-486){\includegraphics[width=13.3em]{RadialBlurInoTwistBlur20Twist45AAON}} +\put(26,-50){\normalsize{Original Image}} +\put(26,-67){\normalsize{(200x112pixel)}} +\put(89,-221){\normalsize{Anti Alias \ \ OFF}} +\put(311,-221){\normalsize{Anti Alias \ \ ON}} +\put(26,-249){\normalsize{Radial}} +\put(26,-267){\normalsize{(Blur 30)}} +\put(26,-382){\normalsize{Twist}} +\put(26,-400){\normalsize{(Blur 20}} +\put(32,-418){\normalsize{Twist 45)}} +\end{picture}\\[12.65em] + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/ScreenIno.tex b/toonz/sources/translations_docs/english/ScreenIno.tex new file mode 100644 index 0000000..906005a --- /dev/null +++ b/toonz/sources/translations_docs/english/ScreenIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Screen Ino\medskip +\par +\normalsize +Screen image\par +Brighten using an inverted mask effect\par +Formula = 1 - (1 - Back) × (1 - Fore)\par +Formula shows the case of RGB values from 0 to 1.\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is ON. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/SoftLightIno.tex b/toonz/sources/translations_docs/english/SoftLightIno.tex new file mode 100644 index 0000000..8b57451 --- /dev/null +++ b/toonz/sources/translations_docs/english/SoftLightIno.tex @@ -0,0 +1,52 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Soft Light Ino\medskip +\par +\normalsize +Soft Light the image\par +Hard Light reduction\par +Formula = if (Fore < 0.5) then\par +\noindent \hskip 7em (Back - (1 - 2 × Fore) × Back × (1 - Back))\par +\noindent \hskip 6em else\par +\noindent \hskip 7em if ((Back < 0.25) then\par +\noindent \hskip 10.5em (Back + (2 × Fore - 1) × (((16 × Back - 12) × Back + 4) × Back - Back))\par +\noindent \hskip 7em else\par +\noindent \hskip 10.5em (Back + (2 × Fore - 1) × (sqrt(Back) - Back)))\par +Formula shows the case of RGB values from 0 to 1.\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is ON. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/SpinBlurIno.tex b/toonz/sources/translations_docs/english/SpinBlurIno.tex new file mode 100644 index 0000000..ea49e0d --- /dev/null +++ b/toonz/sources/translations_docs/english/SpinBlurIno.tex @@ -0,0 +1,134 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\usepackage{graphicx} +\graphicspath{{images/}} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Spin Blur Ino\medskip +\par +\normalsize +Generate an average value Blur in the direction of rotation.\\ +\par +First, it processes the Alpha channel, if specified.\par +Then, it handles the RGB pixels if the Alpha channel is not zero.\par +If you do not want to process to the Alpha channel, it will mask the changes in the\par +RGB image using the Alpha values. Therefore, smooth edges will remain smooth.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +Reference\par +Connect the reference image to put the strength of the effect into each Pixel.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Center\par +Specify the position of the center of rotation.\par +Origin is the center of the image to be processed. Not the gaze point of the camera.\par +The unit is millimeters.\par +The default value is the center of origin position at \textquotedbl 0.0 0.0\textquotedbl .\\ +\\ +Radius\par +Specify the range that does not get blurred from the center.\par +The unit is millimeters.\par +Enter a value greater than or equal to 0.\par +The default value is 0 which will be a total blur.\\ +\\ +Blur\par +The strength of the blur and adjustment.\par +The strength of the blur is specified in the rotation angle.\par +When the minimum value is 0 it does not do anything. The maximum value is 180.\par +The default value is 1.\\ +\\ +Type\par +Accelerator\par +\noindent \hskip 7em Blur angle,\par +\noindent \hskip 7em It can be strong enough to go to the outer periphery.\par +\noindent \hskip 7em The vertical height of the half position in the result image from the Center,\par +\noindent \hskip 7em specify the Blur angle, it will be weaker on the inside, and becomes\par +\noindent \hskip 7em stronger towards the outside. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +Uniform\par +\noindent \hskip 7em Whether it is close or far from the Center the Blur angle will be constant.\\ +\par +The default setting is \textquotedbl Accelerator\textquotedbl .\\ +\\ +Alpha Rendering\par +When ON it will also process to the Alpha channel.\par +When OFF, it does not process to the Alpha channel,\par +It will mask the change of the RGB values using the Alpha values.\par +The default setting is ON.\\ +\\ +Anti Alias\par +Specify the process of adding antialiasing in order to eliminate any jaggies.\par +The result will become more smooth, but it will take more time to process the image.\par +The default setting is OFF.\par +\par +Width=2176 Height=1236 Center=0,0 Radius=0 Blur=3 Alpha=ON\par +Shrink=1\par +\noindent \hskip 7em Type=Accelerator\par +\noindent \hskip 10.5em Anti Alias=OFF ~28sec\par +\noindent \hskip 10.5em Anti Alias=ON \, ~360sec\par +\noindent \hskip 7em Type=Uniform\par +\noindent \hskip 10.5em Anti Alias=OFF ~23sec\par +\noindent \hskip 10.5em Anti Alias=ON \, ~280sec\par +Shrink=3\par +\noindent \hskip 7em Type=Accelerator\par +\noindent \hskip 10.5em Anti Alias=OFF ~5sec\par +\noindent \hskip 10.5em Anti Alias=ON \, ~17sec\par +\noindent \hskip 7em Type=Uniform\par +\noindent \hskip 10.5em Anti Alias=OFF ~4sec\par +\noindent \hskip 10.5em Anti Alias=ON \, ~13sec\\ +\\ +Reference\par +Choose how Reference image values put the strength of the effect into each Pixel.\par +An image is connected to the \textquotedbl Reference\textquotedbl \ of the input,\par +Choose from Red/Green/Blue/Alpha/Luminance/Nothing.\par +Choose Nothing when you do not want this effect, it will turn off the connection.\par +The default setting is Red. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Spin Blur \ \ Reference Example + +\large +\noindent \begin{picture}(0,0) +\put(170.5,-144.5){\includegraphics[width=13.3em]{SpinBlurInoOriginalImage}} +\put(92.5,-343){\includegraphics[width=13.3em]{SpinBlurInoUniformBlur11AAOFF}} +\put(314.5,-343){\includegraphics[width=13.3em]{SpinBlurInoUniformBlur11AAON}} +\put(92.5,-486){\includegraphics[width=13.3em]{SpinBlurInoAcceleratorBlur11AAOFF}} +\put(314.5,-486){\includegraphics[width=13.3em]{SpinBlurInoAcceleratorBlur11AAON}} +\put(26,-50){\normalsize{Original Image}} +\put(26,-67){\normalsize{(200x112pixel)}} +\put(89,-221){\normalsize{Anti Alias \ \ OFF}} +\put(311,-221){\normalsize{Anti Alias \ \ ON}} +\put(26,-249){\normalsize{Uniform}} +\put(26,-267){\normalsize{(Blur\,11.25)}} +\put(26,-382){\normalsize{Accel-}} +\put(26,-400){\normalsize{erator}} +\put(26,-418){\normalsize{(Blur\,11.25)}} +\end{picture}\\[12.65em] + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/SubtractIno.tex b/toonz/sources/translations_docs/english/SubtractIno.tex new file mode 100644 index 0000000..cb80bfa --- /dev/null +++ b/toonz/sources/translations_docs/english/SubtractIno.tex @@ -0,0 +1,47 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\[0.55em] +Subtract Ino \normalsize \hskip 15.8em : Subtraction of images\medskip +\par +Images will become darker using subtraction.\par +Formula = Back - Fore\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is ON.\\ +\\ +Alpha Rendering\par +Switch to process the Alpha channel.\par +The default setting is ON. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/VividLightIno.tex b/toonz/sources/translations_docs/english/VividLightIno.tex new file mode 100644 index 0000000..1df48fd --- /dev/null +++ b/toonz/sources/translations_docs/english/VividLightIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Vivid Light Ino\medskip +\par +\normalsize +Vivid Light the image\par +When Fore is dark it uses Color Burn, otherwise it uses Color Dodge\par +Formula = if (Fore < 0.5) then \textquotedbl Color Burn\textquotedbl \ else \textquotedbl Color Dodge\textquotedbl\par +Formula shows the case of RGB values from 0 to 1.\\ +\\ +-{-}- \ Inputs \ -{-}-\par +Both the connections are combined in the process.\par +When the operating switch is OFF it displays the Back.\par +It will also display if there is only one connection.\\ +Fore\par +Connect the image to overlay on top.\\ +Back\par +Connect the image to put below.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +Opacity\par +Specifies the opacity of the image overlaid on top.\par +When 0 the Fore image will be transparent.\par +The default value is \textquotedbl 1.0\textquotedbl \ for the Fore image and will be synthesized as opaque.\par +Specify a value from 0 to 1.0.\\ +\\ +Clipping Mask\par +When ON,\par +Material will not exist in the location (Back) (Alpha Value Zero), and remains clear.\par +The default setting is ON. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/WarpHVIno.tex b/toonz/sources/translations_docs/english/WarpHVIno.tex new file mode 100644 index 0000000..cebe095 --- /dev/null +++ b/toonz/sources/translations_docs/english/WarpHVIno.tex @@ -0,0 +1,70 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Warp HV Ino\medskip +\par +\normalsize +Distort the picture based on the reference image.\\ +\\ +-{-}- \ Inputs \ -{-}-\\ +Source\par +Connect the image to process.\\ +Hori\par +Connect the reference image to distort in the horizontal direction.\\ +Vert\par +Connect the reference image to distort in the vertical direction.\\ +\\ +-{-}- \ Settings \ -{-}-\\ +H MaxLen\par +This distorts the picture in the horizontal direction.\par +Specify the maximum value of the distortion.\par +The unit is mm, you can give a value from 0 to 100.\par +Please set a value since the default value of 0 will not make any changes.\\ +\par +\textquotedbl Hori\textquotedbl \ the red value of the reference image determines the distortion of each pixel.\par +8bits Image\par +\noindent \hskip 7em 1 distortion-MaxLen(mm)\par +\noindent \hskip 7em 128 without distortion\par +\noindent \hskip 7em 255 distortion MaxLen(mm)\par +16bits Image\par +\noindent \hskip 7em 1 distortion-MaxLen(mm)\par +\noindent \hskip 7em 32768 without distortion\par +\noindent \hskip 7em 65535 distortion MaxLen(mm)\par +Will produce the distortion.\\ +\\ +V MaxLen\par +This distorts the picture in the vertical direction.\par +\textquotedbl Vert\textquotedbl \ the red value of the reference image determines the distortion of each pixel.\par +Options are the same as \textquotedbl H MaxLen\textquotedbl .\\ +\\ +Alpha Rendering\par +When OFF it does not do anything to the Alpha channel.\par +When ON it will also process to the Alpha channel.\par +The default setting is ON.\\ +\\ +Anti Aliasing\par +When OFF it will maintain the jaggies in the picture. + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +When ON it will process the picture to remove jaggies.\par +The default setting is ON. + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/english/fonts/ipaexm.ttf b/toonz/sources/translations_docs/english/fonts/ipaexm.ttf new file mode 100644 index 0000000..647fce2 Binary files /dev/null and b/toonz/sources/translations_docs/english/fonts/ipaexm.ttf differ diff --git a/toonz/sources/translations_docs/english/images/HLSNoiseInoNoiseEffectEffectiveZero.png b/toonz/sources/translations_docs/english/images/HLSNoiseInoNoiseEffectEffectiveZero.png new file mode 100644 index 0000000..ce811e7 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/HLSNoiseInoNoiseEffectEffectiveZero.png differ diff --git a/toonz/sources/translations_docs/english/images/HLSNoiseInoNoiseEffectKeepContrast.png b/toonz/sources/translations_docs/english/images/HLSNoiseInoNoiseEffectKeepContrast.png new file mode 100644 index 0000000..5c7d87a Binary files /dev/null and b/toonz/sources/translations_docs/english/images/HLSNoiseInoNoiseEffectKeepContrast.png differ diff --git a/toonz/sources/translations_docs/english/images/HLSNoiseInoNoiseEffectKeepNoise.png b/toonz/sources/translations_docs/english/images/HLSNoiseInoNoiseEffectKeepNoise.png new file mode 100644 index 0000000..b714455 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/HLSNoiseInoNoiseEffectKeepNoise.png differ diff --git a/toonz/sources/translations_docs/english/images/HLSNoiseInoNoiseEffectOriginal.png b/toonz/sources/translations_docs/english/images/HLSNoiseInoNoiseEffectOriginal.png new file mode 100644 index 0000000..0ca5b41 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/HLSNoiseInoNoiseEffectOriginal.png differ diff --git a/toonz/sources/translations_docs/english/images/HSVNoiseInoNoiseEffectEffectiveZero.png b/toonz/sources/translations_docs/english/images/HSVNoiseInoNoiseEffectEffectiveZero.png new file mode 100644 index 0000000..ce811e7 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/HSVNoiseInoNoiseEffectEffectiveZero.png differ diff --git a/toonz/sources/translations_docs/english/images/HSVNoiseInoNoiseEffectKeepContrast.png b/toonz/sources/translations_docs/english/images/HSVNoiseInoNoiseEffectKeepContrast.png new file mode 100644 index 0000000..5c7d87a Binary files /dev/null and b/toonz/sources/translations_docs/english/images/HSVNoiseInoNoiseEffectKeepContrast.png differ diff --git a/toonz/sources/translations_docs/english/images/HSVNoiseInoNoiseEffectKeepNoise.png b/toonz/sources/translations_docs/english/images/HSVNoiseInoNoiseEffectKeepNoise.png new file mode 100644 index 0000000..b714455 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/HSVNoiseInoNoiseEffectKeepNoise.png differ diff --git a/toonz/sources/translations_docs/english/images/HSVNoiseInoNoiseEffectOriginal.png b/toonz/sources/translations_docs/english/images/HSVNoiseInoNoiseEffectOriginal.png new file mode 100644 index 0000000..0ca5b41 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/HSVNoiseInoNoiseEffectOriginal.png differ diff --git a/toonz/sources/translations_docs/english/images/MotionWindInoFunction1LengthWindA.png b/toonz/sources/translations_docs/english/images/MotionWindInoFunction1LengthWindA.png new file mode 100644 index 0000000..1869dd3 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/MotionWindInoFunction1LengthWindA.png differ diff --git a/toonz/sources/translations_docs/english/images/MotionWindInoFunction1LengthWindB.png b/toonz/sources/translations_docs/english/images/MotionWindInoFunction1LengthWindB.png new file mode 100644 index 0000000..4f16b4b Binary files /dev/null and b/toonz/sources/translations_docs/english/images/MotionWindInoFunction1LengthWindB.png differ diff --git a/toonz/sources/translations_docs/english/images/MotionWindInoFunction1LengthWindC.png b/toonz/sources/translations_docs/english/images/MotionWindInoFunction1LengthWindC.png new file mode 100644 index 0000000..3e31c9b Binary files /dev/null and b/toonz/sources/translations_docs/english/images/MotionWindInoFunction1LengthWindC.png differ diff --git a/toonz/sources/translations_docs/english/images/MotionWindInoFunction2MotionWindA.png b/toonz/sources/translations_docs/english/images/MotionWindInoFunction2MotionWindA.png new file mode 100644 index 0000000..cc2b0cc Binary files /dev/null and b/toonz/sources/translations_docs/english/images/MotionWindInoFunction2MotionWindA.png differ diff --git a/toonz/sources/translations_docs/english/images/MotionWindInoFunction2MotionWindB.png b/toonz/sources/translations_docs/english/images/MotionWindInoFunction2MotionWindB.png new file mode 100644 index 0000000..189fa07 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/MotionWindInoFunction2MotionWindB.png differ diff --git a/toonz/sources/translations_docs/english/images/MotionWindInoFunction2MotionWindC.png b/toonz/sources/translations_docs/english/images/MotionWindInoFunction2MotionWindC.png new file mode 100644 index 0000000..ac46d2a Binary files /dev/null and b/toonz/sources/translations_docs/english/images/MotionWindInoFunction2MotionWindC.png differ diff --git a/toonz/sources/translations_docs/english/images/MotionWindInoFunction3DensityWindA.png b/toonz/sources/translations_docs/english/images/MotionWindInoFunction3DensityWindA.png new file mode 100644 index 0000000..af09ba3 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/MotionWindInoFunction3DensityWindA.png differ diff --git a/toonz/sources/translations_docs/english/images/MotionWindInoFunction3DensityWindB.png b/toonz/sources/translations_docs/english/images/MotionWindInoFunction3DensityWindB.png new file mode 100644 index 0000000..fece65e Binary files /dev/null and b/toonz/sources/translations_docs/english/images/MotionWindInoFunction3DensityWindB.png differ diff --git a/toonz/sources/translations_docs/english/images/MotionWindInoFunction3DensityWindC.png b/toonz/sources/translations_docs/english/images/MotionWindInoFunction3DensityWindC.png new file mode 100644 index 0000000..f3d2259 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/MotionWindInoFunction3DensityWindC.png differ diff --git a/toonz/sources/translations_docs/english/images/MotionWindInoFunction4.png b/toonz/sources/translations_docs/english/images/MotionWindInoFunction4.png new file mode 100644 index 0000000..6b57511 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/MotionWindInoFunction4.png differ diff --git a/toonz/sources/translations_docs/english/images/MotionWindInoFunction5.png b/toonz/sources/translations_docs/english/images/MotionWindInoFunction5.png new file mode 100644 index 0000000..85b3fd4 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/MotionWindInoFunction5.png differ diff --git a/toonz/sources/translations_docs/english/images/MotionWindInoFunction6.png b/toonz/sources/translations_docs/english/images/MotionWindInoFunction6.png new file mode 100644 index 0000000..5851d09 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/MotionWindInoFunction6.png differ diff --git a/toonz/sources/translations_docs/english/images/MotionWindInoFunction7.png b/toonz/sources/translations_docs/english/images/MotionWindInoFunction7.png new file mode 100644 index 0000000..f8e9f19 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/MotionWindInoFunction7.png differ diff --git a/toonz/sources/translations_docs/english/images/RadialBlurInoOriginalImage.png b/toonz/sources/translations_docs/english/images/RadialBlurInoOriginalImage.png new file mode 100644 index 0000000..6389d9f Binary files /dev/null and b/toonz/sources/translations_docs/english/images/RadialBlurInoOriginalImage.png differ diff --git a/toonz/sources/translations_docs/english/images/RadialBlurInoRadialBlur30AAOFF.png b/toonz/sources/translations_docs/english/images/RadialBlurInoRadialBlur30AAOFF.png new file mode 100644 index 0000000..65f0011 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/RadialBlurInoRadialBlur30AAOFF.png differ diff --git a/toonz/sources/translations_docs/english/images/RadialBlurInoRadialBlur30AAON.png b/toonz/sources/translations_docs/english/images/RadialBlurInoRadialBlur30AAON.png new file mode 100644 index 0000000..d6078fd Binary files /dev/null and b/toonz/sources/translations_docs/english/images/RadialBlurInoRadialBlur30AAON.png differ diff --git a/toonz/sources/translations_docs/english/images/RadialBlurInoTwistBlur20Twist45AAOFF.png b/toonz/sources/translations_docs/english/images/RadialBlurInoTwistBlur20Twist45AAOFF.png new file mode 100644 index 0000000..9031b91 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/RadialBlurInoTwistBlur20Twist45AAOFF.png differ diff --git a/toonz/sources/translations_docs/english/images/RadialBlurInoTwistBlur20Twist45AAON.png b/toonz/sources/translations_docs/english/images/RadialBlurInoTwistBlur20Twist45AAON.png new file mode 100644 index 0000000..603c5f6 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/RadialBlurInoTwistBlur20Twist45AAON.png differ diff --git a/toonz/sources/translations_docs/english/images/SpinBlurInoAcceleratorBlur11AAOFF.png b/toonz/sources/translations_docs/english/images/SpinBlurInoAcceleratorBlur11AAOFF.png new file mode 100644 index 0000000..d7900f7 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/SpinBlurInoAcceleratorBlur11AAOFF.png differ diff --git a/toonz/sources/translations_docs/english/images/SpinBlurInoAcceleratorBlur11AAON.png b/toonz/sources/translations_docs/english/images/SpinBlurInoAcceleratorBlur11AAON.png new file mode 100644 index 0000000..da15f23 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/SpinBlurInoAcceleratorBlur11AAON.png differ diff --git a/toonz/sources/translations_docs/english/images/SpinBlurInoOriginalImage.png b/toonz/sources/translations_docs/english/images/SpinBlurInoOriginalImage.png new file mode 100644 index 0000000..19c8cf2 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/SpinBlurInoOriginalImage.png differ diff --git a/toonz/sources/translations_docs/english/images/SpinBlurInoUniformBlur11AAOFF.png b/toonz/sources/translations_docs/english/images/SpinBlurInoUniformBlur11AAOFF.png new file mode 100644 index 0000000..087123b Binary files /dev/null and b/toonz/sources/translations_docs/english/images/SpinBlurInoUniformBlur11AAOFF.png differ diff --git a/toonz/sources/translations_docs/english/images/SpinBlurInoUniformBlur11AAON.png b/toonz/sources/translations_docs/english/images/SpinBlurInoUniformBlur11AAON.png new file mode 100644 index 0000000..9fd9eb3 Binary files /dev/null and b/toonz/sources/translations_docs/english/images/SpinBlurInoUniformBlur11AAON.png differ diff --git a/toonz/sources/translations_docs/japanese/AddIno.tex b/toonz/sources/translations_docs/japanese/AddIno.tex new file mode 100644 index 0000000..0d40301 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/AddIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Add Ino\medskip +\par +\normalsize +単純加算\par +足して明るくします\par +式 = Back + Fore\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\par +1以上の10.0までの値も指定できます\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は ON です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/BlurIno.tex b/toonz/sources/translations_docs/japanese/BlurIno.tex new file mode 100644 index 0000000..4eeaade --- /dev/null +++ b/toonz/sources/translations_docs/japanese/BlurIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Blur Ino\medskip +\par +\normalsize +ぼかします。\\ +\par +手法として、ガウス分布を使います。\par +そのため、結果画像に指向性はありません。\\ +\par +Alphaチャンネルも処理します。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Radius\par +ぼかしの半径を指定します。\par +単位は mm です。\\ +\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像の値の取り方を選択します。\par +入力の\textquotedbl Reference\textquotedbl に画像を接続し、\par +Red/Green/Blue/Alpha/Luminance/Nothingから選びます。\par +この効果をつけたくないときは Nothingを選ぶか、接続を切ります。\par +初期値は Red です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/ChannelSelectorIno.tex b/toonz/sources/translations_docs/japanese/ChannelSelectorIno.tex new file mode 100644 index 0000000..05f5921 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/ChannelSelectorIno.tex @@ -0,0 +1,80 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Channel Selector Ino\medskip +\par +\normalsize +複数の入力(Source1,2,3,4)の RGBAから各チャンネルを選びます。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source1\\ +Source2\\ +Source3\\ +Source4\par +処理をする画像を一つ以上任意に接続します。\par +最大四つまでつなげます。\\ +\\ +-{-}- \ 選択 \ -{-}-\\ +Red\par +\noindent \ \, Image\par +赤チャンネルとして使う入力画像を指定します。\par +Source1/Source2/Source3/Source4の中から選びます。\par +1から4までの値をキーボード入力します。\par +初期値は0です。\\ +\par +\noindent \ \, Channel\par +赤チャンネルとして使うチャンネルを、\par +Red/Green/Blue/Alpha から選びます。\par +初期値は Red です。\\ +\\ +Green\par +\noindent \ \, Image\par +緑チャンネルとして使う入力画像を指定します。\par +その他は\textquotedbl Red Image\textquotedbl と同じです。\\ +\par +\noindent \ \, Channel\par +緑チャンネルとして使うチャンネルを、\par +Red/Green/Blue/Alpha から選びます。\par +初期値は Greenです。\\ +\\ +Blue\par +\noindent \ \, Image\par +青チャンネルとして使う入力画像を指定します。\par +その他は\textquotedbl Red Image\textquotedbl と同じです。\\ +\par +\noindent \ \, Channel\par +青チャンネルとして使うチャンネルを、 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +Red/Green/Blue/Alpha から選びます。\par +初期値は Blueです。\\ +\\ +Alpha\par +\noindent \ \, Image\par +アルファチャンネルとして使う入力画像を指定します。\par +その他は\textquotedbl Red Image\textquotedbl と同じです。\\ +\par +\noindent \ \, Channel\par +アルファチャンネルとして使うチャンネルを、\par +Red/Green/Blue/Alpha から選びます。\par +初期値は Alphaです。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/ColorBurnIno.tex b/toonz/sources/translations_docs/japanese/ColorBurnIno.tex new file mode 100644 index 0000000..a905095 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/ColorBurnIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Color Burn Ino\medskip +\par +\normalsize +焼き込みカラー\par +暗く、コントラスト強調\par +式 = 1 - (1 - Back) / Fore \ \ ※Fore がゼロ時は結果ゼロ\par +式は RGB 各値をゼロから1とした場合の値で示しています。\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は ON です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/ColorDodgeIno.tex b/toonz/sources/translations_docs/japanese/ColorDodgeIno.tex new file mode 100644 index 0000000..868b4c6 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/ColorDodgeIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Color Dodge Ino\medskip +\par +\normalsize +覆い焼きカラー\par +明るく。コントラスト落とす\par +式 = Back / (1 - Fore) ※Fore が1の時は結果値1\par +式は RGB 各値をゼロから1とした場合の値で示しています。\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は ON です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/CrossDissolveIno.tex b/toonz/sources/translations_docs/japanese/CrossDissolveIno.tex new file mode 100644 index 0000000..98612d8 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/CrossDissolveIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Cross Dissolve Ino\medskip +\par +\normalsize +二重写し\par +Back に Fore を重ねて溶け込ませ、Back を Fore に転換する。オーバーラップ\par +式 = Back × (1 - Opacity) + Fore × Opacity\par +式は RGB 各値をゼロから1とした場合の値で示しています。\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は OFF です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/DarkenIno.tex b/toonz/sources/translations_docs/japanese/DarkenIno.tex new file mode 100644 index 0000000..34082ad --- /dev/null +++ b/toonz/sources/translations_docs/japanese/DarkenIno.tex @@ -0,0 +1,44 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Darken Ino\medskip +\par +\normalsize +比較(暗)\par +Fore と Back の値の小さい方(RGB 別々)\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は OFF です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/DarkerColorIno.tex b/toonz/sources/translations_docs/japanese/DarkerColorIno.tex new file mode 100644 index 0000000..428ec49 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/DarkerColorIno.tex @@ -0,0 +1,44 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Darker Color Ino\medskip +\par +\normalsize +カラー比較(暗)\par +RGB の輝度値で小さい方\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は OFF です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/DensityIno.tex b/toonz/sources/translations_docs/japanese/DensityIno.tex new file mode 100644 index 0000000..648a397 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/DensityIno.tex @@ -0,0 +1,48 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Density Ino\medskip +\par +\normalsize +半透明画像の濃度を調節します。\par +流線タッチ効果線を強調するために作成しました。\par +Alphaチャンネルに半透明値が必要です。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Density\par +濃度を指定します。\par +画像の半透明 Pixel に対して濃度が変化します。\par +ゼロ以上の値で指定します。最大は10です。\par +1より大きい値のとき、画像は濃くなります。\par +1のときは等濃度で変化しません。\par +1より小さくゼロより大きい値のとき、画像は薄くなります。\par +ゼロのときは濃度ゼロなので画像は消えます。\par +初期値は1です。\\ +\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像の値の取り方を選択します。\par +入力の\textquotedbl Reference\textquotedbl に画像を接続し、\par +Red/Green/Blue/Alpha/Luminance/Nothingから選びます。\par +この効果をつけたくないときは Nothingを選ぶか、接続を切ります。\par +初期値は Red です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/DivideIno.tex b/toonz/sources/translations_docs/japanese/DivideIno.tex new file mode 100644 index 0000000..c7559eb --- /dev/null +++ b/toonz/sources/translations_docs/japanese/DivideIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Divide Ino\medskip +\par +\normalsize +割算\par +割って明るくする\par +式 = Back / Fore\par +式は RGB 各値をゼロから1とした場合の値で示しています。\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は ON です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/FogIno.tex b/toonz/sources/translations_docs/japanese/FogIno.tex new file mode 100644 index 0000000..1c2366c --- /dev/null +++ b/toonz/sources/translations_docs/japanese/FogIno.tex @@ -0,0 +1,103 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Fog Ino\medskip +\par +\normalsize +光を散らします。\\ +\par +水の中や、風呂の中、霧の中などで、\par +光が散乱(Light Scattering)して見える効果をねらって作成しました。\par +光学フィルターにおける、フォグや、ディフュージョンのような\par +効果をねらっていますが、光をシミュレートしているわけではありません。\\ +\par +各 pixel において、周りのより明るい pixelから、光るさの影響を受けます。\par +近くの pixel からはより強く、遠くの pixelからは弱い影響になります。\\ +\par +初めに、\textquotedbl Alpha Rendering\textquotedbl が ONなら Alpha チャンネルを処理し、\par +次に、Alphaチャンネルがゼロでないピクセルの RGBを処理します。\\ +\par +\textquotedbl Alpha Rendering\textquotedbl が OFFなら Alphaチャンネルを処理せず、\par +RGB画像の変化に Mask しないので、マスクエッジにジャギーが出ます。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Radius\par +光を散らす範囲を、円半径で指定します。\par +単位はミリメートルです。\par +ゼロ以上の値で指定します。最大は100です。\par +Pixel 幅より小さい値の時は光が散らず、Fogはかかりません。\par +半径は大きくするほど処理に時間がかかります。\par +初期値は1です。\\ +\\ +Curve\par +散っていく光の減衰カーブです。\par +0.01以上の値で指定します。最大は100です。\par +離れた pixel ほどその影響は弱くなりますが、\par +その変化を Gamma曲線で表わします。\par +1.0の場合は明るさはリニアに減衰します。\par +値が小さいほど明るさが細り(影響が急に減り)、\par +大きいほど明るさが膨らみ(影響が強調され)ます。\par +初期値は1です。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Power\par +光りを散らす強さを変えます。\par +0から1の範囲で指定します。\par +1.0が最大値ですがさらに2.0まで指定できて、光を強調できます。\par +強調では墨線等の暗い部分が発光することがあります。\par +0.0の時は光が散らず、Fogはかかりません。\par +0.0より小さい値を-2.0まで与えることができます。\par +この時の処理は光の散乱ではなく、暗さの散乱となります。\par +初期値は1です。\\ +\\ +Threshold Min\\ +Threshold Max\par +この値を含めてそれ以上の明るさの Pixel が光を放ちます。\\ +\par +より明るい Pixel から明るさの影響を受けますが、それに加え、\par +値(\textquotedbl Threshold Min\textquotedbl )以上の輝度の Pixel であったときに、\par +明るさの影響を受けます。\par +輝度は、Pixel 値の RGBから求めた(HLS の)L値です。\\ +\par +0.0以上1.01以下の範囲で指定します。\\ +\par +両方とも1.01とすると Fogはかかりません。\\ +\par +\textquotedbl Threshold Max\textquotedbl が\textquotedbl Threshold Min\textquotedbl より大きい場合、\par +Min から Max の間をリニア補間して fogの変化をなめらかに行ないます。\\ +\par +\textquotedbl Threshold Max\textquotedbl をゼロとしておく(Min より小さければよい)ことで、\par +\textquotedbl Threshold Min\textquotedbl 以上の明るさからいきなり光を放ちます。\par +\textquotedbl Threshold Min\textquotedbl もゼロにすれば全体に Fogがかかります。\\ +\par +初期値はどちらも0です。\\ +\\ +Alpha Rendering\par +Alphaチャンネルがあるときのみ有効なスイッチです。\par +OFFのときはなにもしません。\par +ONで Alphaにも処理をします。\par +初期値は OFFです。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/HLSAddIno.tex b/toonz/sources/translations_docs/japanese/HLSAddIno.tex new file mode 100644 index 0000000..77a168e --- /dev/null +++ b/toonz/sources/translations_docs/japanese/HLSAddIno.tex @@ -0,0 +1,100 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +HLS Add Ino\medskip +\par +\normalsize +参照画像(Noise)の指定チャンネルの値で肌合いを加えます。\par +色相、明度、彩度、あるいは Alpha が変化します。\\ +\par +セル調の画像に、色相、明度、彩度、あるいは Alpha でノイズを加え、\par +背景の絵に馴染ませる等々に使います。\par +同様な事をノイズツールで行うと、1ドット毎のノイズなので絵が1本調子になります。\par +それとは違い、ノイズを参照画像としてユーザーが用意し、\par +その絵をノイズ成分として計算し、画像の肌合いを決めます。\\ +\par +あくまで、2次元上の静止画像に対する処理なので、立体を感じさ\par +せる場合や、動画の場合は、別の考察、処理(?)が必要です。\\ +\par +Alpha チャンネルによって効果の強さが決まります。よって、\par +Alpha によるマスクエッジが滑らかであればその状態を保持します。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +Noise\par +Pixel 毎に HLS 値によってノイズを加えるための画像を接続します。\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +From RGBA\par +参照画像(Noise)のどの channel を使用するかを指定します。\par +\textquotedbl Red\textquotedbl \ \textquotedbl Green\textquotedbl \ \textquotedbl Blue\textquotedbl \ \textquotedbl Alpha\textquotedbl のどれかを選びます。\par +初期値は\textquotedbl Red\textquotedbl です。\\ +\\ +Offset\par +参照画像(Noise)の Pixel 値に対する offset 値です。\par +Pixel 値(8 or 16bits)をゼロから1の値として、-1.0から1.0の間\par +の値で指定します。\par +参照 Pixel 値がここでの指定と同じ値のときは変化しません。\par +この値に対する参照 Pixel 値の大小によって、変化がおきます。\par +初期値は0.5です。\\ +\\ +Hue\par +色相(Hue)変化の強さを指定します。\par +offset 値を中心としてスケールがかります。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +-1.0から1.0の間の値で指定します。\par +ゼロだとなにも変化しません。\par +初期値は0.0です。\\ +\\ +Lightness\par +明度(Lightness)変化の強さを指定します。\par +初期値は0.25です。\par +他は\textquotedbl Hue\textquotedbl と同様です。\\ +\\ +Saturation\par +彩度(Saturation)変化の強さを指定します。\par +初期値は0.0です。\par +他は\textquotedbl Hue\textquotedbl と同様です。\\ +\\ +Alpha\par +不透明度(Alpha)変化の強さを指定します。\par +初期値は0.0です。\par +他は\textquotedbl Hue\textquotedbl と同様です。\\ +\\ +Premultiplied\par +ON なら、RGB に対して Premultiply 済の\par +(Alpha チャンネルの値があらかじめ RGB チャンネルに乗算されている)\par +画像として処理します。\par +そのとき、Alpha にも処理を加えてしまうと、正しい画像にならない場合があります。\par +初期値は ON です。\\ +\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像の値の取り方を選択します。\par +入力の\textquotedbl Reference\textquotedbl に画像を接続し、\par +Red/Green/Blue/Alpha/Luminance/Nothing から選びます。\par +この効果をつけたくないときは Nothing を選ぶか、接続を切ります。\par +初期値は Red です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/HLSAdjustIno.tex b/toonz/sources/translations_docs/japanese/HLSAdjustIno.tex new file mode 100644 index 0000000..f37f2d1 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/HLSAdjustIno.tex @@ -0,0 +1,98 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +HLS Adjust Ino\medskip +\par +\normalsize +色相(H)、明度(L)、彩度(S)に scale をかけ、次に、shift をします。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Pivot\par +\noindent \ \ \, Scale をかける時の中心値を指定します。\\ +\par +\noindent \ \ \, Hue\par +色相(hue)について Scale の中心値を指定します。\par +最小は0.0、最大は360.0です。\par +初期値は0.0です。\par +\noindent \ \ \, Lightness\par +明度(lightness)について Scale の中心値を指定します。\par +最小は0.0、最大は1.0です。\par +初期値は0.0です。\par +\noindent \ \ \, Saturation\par +彩度(saturation)について Scale の中心値を指定します。\par +最小は0.0、最大は1.0です。\par +初期値は0.0です。\\ +\\ +Scale\par +\noindent \ \ \, Pivot 値を中心として Scale をかけて HLS の範囲を拡大あるいは縮小します。\par +\noindent \ \ \, Hue 値は円の上を回るように再帰しますが、\par +\noindent \ \ \, Lightness,Saturation 値はゼロ以上はゼロ、1以上は1で固定します。\\ +\par +\noindent \ \ \, Hue\par +色相(hue)について Scale をかけます。\par +最小は0.0です。\par +初期値は1.0です。\par +\noindent \ \ \, Lightness\par +明度(lightness)について Scale をかけます。\par +最小は0.0です。\par +初期値は1.0です。\par +\noindent \ \ \, Saturation\par +彩度(saturation)について Scale をかけます。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +最小は0.0です。\par +初期値は1.0です。\\ +\\ +Shift\par +\noindent \ \ \, Shift して HLS の値をずらします。\par +\noindent \ \ \, Hue 値は円の上を回るように再帰しますが、\par +\noindent \ \ \, Lightness,Saturation 値はゼロ以上はゼロ、1以上は1で固定します。\\ +\par +\noindent \ \ \, Hue\par +色相(hue)について Shift します。\par +初期値は0.0です。\par +\noindent \ \ \, Lightness\par +明度(lightness)について Shift します。\par +初期値は0.0です。\par +\noindent \ \ \, Saturation\par +彩度(saturation)について Shift します。\par +初期値は0.0です。\\ +\\ +Premultiplied\par +ON なら、RGB に対して Premultiply 済の\par +(Alpha チャンネルの値があらかじめ RGB チャンネルに乗算されている)\par +画像として処理します。\par +初期値は ON です。\\ +\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像の値の取り方を選択します。\par +入力の\textquotedbl Reference\textquotedbl に画像を接続し、\par +Red/Green/Blue/Alpha/Luminance/Nothing から選びます。\par +この効果をつけたくないときは Nothing を選ぶか、接続を切ります。\par +初期値は Red です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/HLSNoiseIno.tex b/toonz/sources/translations_docs/japanese/HLSNoiseIno.tex new file mode 100644 index 0000000..c75866b --- /dev/null +++ b/toonz/sources/translations_docs/japanese/HLSNoiseIno.tex @@ -0,0 +1,422 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\usepackage{eepic} +\usepackage{xcolor} + +\usepackage{graphicx} +\graphicspath{{images/}} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +HLS Noise Ino\medskip +\par +\normalsize +色相、明度、彩度、Alpha にドットノイズを加えます。\par +セル画調の絵にノイズを加え、背景の絵に馴染ませることを目的と\par +して開発しました。\\ +\par +Alpha チャンネルによってノイズの強さが決まります。よって、滑\par +らかなエッジは滑らかなままです。\par +Alpha チャンネル自身のノイズの強さも、自身の値を見ます。\\ +\par +結果をチェックするときは、サブカメラを使わないでください。\par +サブカメラは入力画像の範囲が違うため、ノイズパターンが変わっ\par +てしまいます。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Hue\par +色相(hue)についてノイズの強さを指定します。\par +Pixel 値(8 or 16bits)をゼロから1の値として指定します。\par +最小は0、最大は1です。\par +0のときは色相(hue)に対するノイズがかかりません。\par +初期値は0.025です。\\ +\\ +Lightness\par +明度(lightness)についてノイズの強さを指定します。\par +Pixel 値(8 or 16bits)をゼロから1の値として指定します。\par +最小は0、最大は1です。\par +0のときは明度(lightness)に対するノイズがかかりません。\par +初期値は0.035です。\\ +\\ +Saturation\par +彩度(saturation)についてノイズの強さを指定します。\par +Pixel 値(8 or 16bits)をゼロから1の値として指定します。\par +最小は0、最大は1です。\par +0のときは彩度(saturation)に対するノイズがかかりません。\par +初期値は0.0です。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Alpha\par +Alpha チャンネルについてノイズの強さを指定します。\par +Pixel 値(8 or 16bits)をゼロから1の値として指定します。\par +最小は0、最大は1です。\par +0のときは Alpha チャンネルに対するノイズがかかりません。\par +初期値は0.0です。\\ +\\ +Seed\par +画像のノイズパターンを決定するための値です。\par +ゼロ以上の整数値を指定します。\par +この値が同じであれば、パターンを再現します。\par +違う値でノイズを加えれば違うパターンになります。\par +初期値は1です。\\ +\\ +NBlur\par +ノイズ成分をぼかして、ドット感を減らします。\par +最小は0、最大は1です。\par +ドットに隣接するピクセルだけで計算しているので、非\par +常に軽いボカシの感じになります。\par +ゼロだとボカシはかからず、1.0で隣接するピクセルとの\par +平均をとります。\par +初期値は1です。\\ +\\ +Limits\par +明度(Lightness), 彩度(Saturation), 不透明度(Alpha)の、\par +端値(0 or 1付近)に対する効果調整をします。\par +ゼロや1付近でノイズをかけると、ゼロ以下あるいは1以上の値が\par +現われますが、表現できないので、それぞれゼロあるいは1に切り\par +詰められます。その切り詰めを補填する効果です。\par +-{-}> \textquotedbl 端値における Noise 効果調整 \ \ 図1 \ \ 比較\textquotedbl 参照\par +-{-}> \textquotedbl 端値における Noise 効果調整 \ \ 図2 \ \ 説明\textquotedbl 参照\\ +\par +\noindent \ \ \, Effective\par +この効果(Limits)の強さを決めます。\par +ゼロならなにも効果はありません。ゼロより大きい値で効果が表\par +われます。1が最強です。\par +初期値はゼロです。\\ +\par +\noindent \ \ \, Center\par +効果の中心です。\par +ノイズ範囲のずれ幅、あるいは、ノイズ幅の減少の効果は、ゼロ\par +あるいは1の端値の部分で最も強く、中心では効果がありません。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +この効果のない中心値の位置をきめます。\par +ゼロから1の間で指定します。\par +ゼロだと、値がゼロの Pixel には効果がでなくなります。\par +1だと、値が1の Pixel には効果がでなくなります。\par +初期値は0.5が中心です。\\ +\par +\noindent \ \ \, Type\par +効果のタイプを撰択します。\par +\textquotedbl Keep Noise\textquotedbl を選ぶと、(全体的に)ノイズ範囲をずらしノイズ幅\par +を維持、画像全体のコントラストは縮小します。\par +\textquotedbl Keep Contrast\textquotedbl を選ぶと、端のみでノイズ幅を減らしコントラス\par +トを維持します。\par +初期値は\textquotedbl Keep Noise\textquotedbl です。\\ +\\ +Premultiply\par +ON なら、RGB に対して Premultiply 済の\par +(Alpha チャンネルの値があらかじめ RGB チャンネルに乗算されている)\par +画像として処理します。\par +そのとき、Alpha にも処理を加えてしまうと、正しい画像にならない場合があります。\par +初期値は ON です。\\ +\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像の値の取り方を選択します。\par +入力の\textquotedbl Reference\textquotedbl に画像を接続し、\par +Red/Green/Blue/Alpha/Luminance/Nothing から選びます。\par +この効果をつけたくないときは Nothing を選ぶか、接続を切ります。\par +初期値は Red です。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{1.5em} +\par +\noindent \hskip 2.2em 図1 端値における Noise 効果比較\\[0.4em] +\par +\scriptsize +\noindent \hskip 3.4em Original\par +\noindent \hskip 3.4em Effective がゼロ\par +\noindent \hskip 3.4em Keep Noise\par +\noindent \hskip 3.4em Keep Contrast + +\large +\noindent \begin{picture}(0,0) +\put(55.5,-6.5){\includegraphics[width=29.6em, height=1em]{HLSNoiseInoNoiseEffectOriginal}} +\put(55.5,-22.5){\includegraphics[width=29.6em, height=1em]{HLSNoiseInoNoiseEffectEffectiveZero}} +\put(55.5,-38.5){\includegraphics[width=29.6em, height=1em]{HLSNoiseInoNoiseEffectKeepNoise}} +\put(55.5,-54.5){\includegraphics[width=29.6em, height=1em]{HLSNoiseInoNoiseEffectKeepContrast}} +\linethickness{0.01em} +\put(126,64){\line(-1,0){56}} +\put(126,53){\line(-1,0){14}} +\put(126,41){\line(-1,0){42}} +\put(126,29.5){\line(-1,0){28}} +\put(126,15){\line(-1,0){93}} +\put(126,64){\line(0,-1){49}} +\put(33,15){\line(0,-1){58}} +\put(33,0){\line(1,0){14}} +\put(47,0){\line(-3,2){6}} +\put(47,0){\line(-3,-2){6}} +\put(33,-14){\line(1,0){14}} +\put(47,-14){\line(-3,2){6}} +\put(47,-14){\line(-3,-2){6}} +\put(33,-28){\line(1,0){14}} +\put(47,-28){\line(-3,2){6}} +\put(47,-28){\line(-3,-2){6}} +\put(33,-43){\line(1,0){14}} +\put(47,-43){\line(-3,2){6}} +\put(47,-43){\line(-3,-2){6}} +\end{picture}\\[3.6em] + +\normalsize +\noindent \hskip 2.2em 図2 端値における Noise 変化範囲説明図\\[0.5em] +\par +\footnotesize +\noindent \hskip 2.65em Effective がゼロ \ \ 端値はノイズ値がカットされる(default) + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(54.5,-37){\line(0,1){8}} +\put(54.5,-37){\line(-2,3){3}} +\put(54.5,-37){\line(2,3){3}} +\put(482,-37){\line(0,1){8}} +\put(482,-37){\line(-2,3){3}} +\put(482,-37){\line(2,3){3}} +\put(54.5,-58){\line(0,1){6}} +\put(482,-58){\line(0,1){6}} + +\put(27,-45.5){\line(1,0){56}} +\put(27,-45.5){\line(3,2){6}} +\put(27,-45.5){\line(3,-2){6}} +\put(83,-45.5){\line(-3,2){6}} +\put(83,-45.5){\line(-3,-2){6}} + +\put(255,-45.5){\line(1,0){56}} +\put(255,-45.5){\line(3,2){6}} +\put(255,-45.5){\line(3,-2){6}} +\put(311,-45.5){\line(-3,2){6}} +\put(311,-45.5){\line(-3,-2){6}} + +\put(455,-45.5){\line(1,0){56}} +\put(455,-45.5){\line(3,2){6}} +\put(455,-45.5){\line(3,-2){6}} +\put(511,-45.5){\line(-3,2){6}} +\put(511,-45.5){\line(-3,-2){6}} + +\put(61,-67){\line(1,0){15}} +\put(61,-67){\line(3,2){6}} +\put(61,-67){\line(3,-2){6}} +\put(52,-70){\scriptsize{0}} +\put(78,-74){\footnotesize{0以下のノイズは0に制限される}} + +\put(471,-67){\line(-1,0){15}} +\put(471,-67){\line(-3,2){6}} +\put(471,-67){\line(-3,-2){6}} +\put(476,-70){\scriptsize{1.0}} +\put(312,-74){\footnotesize{1以上のノイズは1に制限される}} + +\linethickness{0.2em} +\put(54.5,-38){\line(1,0){428}} +\linethickness{2.8em} +\put(49,-1.5){\line(1,0){439}} +\linethickness{2.75em} +\color{lightgray} +\put(45.5,-1.5){\line(1,0){438}} +\put(51,-0.5){\includegraphics[width=29.55em, height=1em]{HLSNoiseInoNoiseEffectOriginal}} +\put(51,-16.5){\includegraphics[width=29.55em, height=1em]{HLSNoiseInoNoiseEffectEffectiveZero}} +\end{picture}\\[5.7em] + +\footnotesize +\noindent \hskip 2.65em Keep Noise \ \ シフトしてノイズを維持。コントラストは縮小。全体的にノイズ位置がずれる + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(255,-45.5){\line(1,0){56}} +\put(255,-45.5){\line(3,2){6}} +\put(255,-45.5){\line(3,-2){6}} +\put(311,-45.5){\line(-3,2){6}} +\put(311,-45.5){\line(-3,-2){6}} + +\put(158,-60){\line(0,1){8}} +\put(158,-60){\line(-2,3){3}} +\put(158,-60){\line(2,3){3}} +\put(400,-60){\line(0,1){8}} +\put(400,-60){\line(-2,3){3}} +\put(400,-60){\line(2,3){3}} + +\put(144,-68.5){\line(1,0){56}} +\put(144,-68.5){\line(3,2){6}} +\put(144,-68.5){\line(3,-2){6}} +\put(200,-68.5){\line(-3,2){6}} +\put(200,-68.5){\line(-3,-2){6}} + +\put(357,-68.5){\line(1,0){56}} +\put(357,-68.5){\line(3,2){6}} +\put(357,-68.5){\line(3,-2){6}} +\put(413,-68.5){\line(-3,2){6}} +\put(413,-68.5){\line(-3,-2){6}} + +\put(107,-83){\line(0,1){8}} +\put(107,-83){\line(-2,3){3}} +\put(107,-83){\line(2,3){3}} +\put(442,-83){\line(0,1){8}} +\put(442,-83){\line(-2,3){3}} +\put(442,-83){\line(2,3){3}} + +\put(102,-91.5){\line(1,0){56}} +\put(102,-91.5){\line(3,2){6}} +\put(102,-91.5){\line(3,-2){6}} +\put(158,-91.5){\line(-3,2){6}} +\put(158,-91.5){\line(-3,-2){6}} + +\put(392,-91.5){\line(1,0){56}} +\put(392,-91.5){\line(3,2){6}} +\put(392,-91.5){\line(3,-2){6}} +\put(448,-91.5){\line(-3,2){6}} +\put(448,-91.5){\line(-3,-2){6}} + +\put(58,-106){\line(0,1){8}} +\put(58,-106){\line(-2,3){3}} +\put(58,-106){\line(2,3){3}} +\put(478.5,-106){\line(0,1){8}} +\put(478.5,-106){\line(-2,3){3}} +\put(478.5,-106){\line(2,3){3}} + +\put(55,-114.5){\line(1,0){56}} +\put(55,-114.5){\line(3,2){6}} +\put(55,-114.5){\line(3,-2){6}} +\put(111,-114.5){\line(-3,2){6}} +\put(111,-114.5){\line(-3,-2){6}} + +\put(427,-114.5){\line(1,0){56}} +\put(427,-114.5){\line(3,2){6}} +\put(427,-114.5){\line(3,-2){6}} +\put(483,-114.5){\line(-3,2){6}} +\put(483,-114.5){\line(-3,-2){6}} + +\put(283,-106){\line(0,1){54}} +\put(267,-123){\scriptsize{separate}} + +\linethickness{0.2em} +\put(54.5,-38){\line(1,0){428}} +\put(54.5,-61){\line(1,0){428}} +\put(54.5,-84){\line(1,0){428}} +\put(54.5,-107){\line(1,0){428}} +\linethickness{2.8em} +\put(49,-1.5){\line(1,0){439}} +\linethickness{2.75em} +\color{lightgray} +\put(45.5,-1.5){\line(1,0){438}} +\put(51,-0.5){\includegraphics[width=29.55em, height=1em]{HLSNoiseInoNoiseEffectOriginal}} +\put(51,-16.5){\includegraphics[width=29.55em, height=1em]{HLSNoiseInoNoiseEffectKeepNoise}} +\end{picture}\\[9.3em] + +\footnotesize +\noindent \hskip 2.65em Keep Contrast \ \ ノイズ幅を減少。コントラストを維持。端のみでノイズ幅が減る + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(255,-45.5){\line(1,0){56}} +\put(255,-45.5){\line(3,2){6}} +\put(255,-45.5){\line(3,-2){6}} +\put(311,-45.5){\line(-3,2){6}} +\put(311,-45.5){\line(-3,-2){6}} + +\put(86,-60){\line(0,1){8}} +\put(86,-60){\line(-2,3){3}} +\put(86,-60){\line(2,3){3}} +\put(450,-60){\line(0,1){8}} +\put(450,-60){\line(-2,3){3}} +\put(450,-60){\line(2,3){3}} + +\put(58,-68.5){\line(1,0){56}} +\put(58,-68.5){\line(3,2){6}} +\put(58,-68.5){\line(3,-2){6}} +\put(114,-68.5){\line(-3,2){6}} +\put(114,-68.5){\line(-3,-2){6}} + +\put(423,-68.5){\line(1,0){56}} +\put(423,-68.5){\line(3,2){6}} +\put(423,-68.5){\line(3,-2){6}} +\put(479,-68.5){\line(-3,2){6}} +\put(479,-68.5){\line(-3,-2){6}} + +\put(70,-83){\line(0,1){8}} +\put(70,-83){\line(-2,3){3}} +\put(70,-83){\line(2,3){3}} +\put(468,-83){\line(0,1){8}} +\put(468,-83){\line(-2,3){3}} +\put(468,-83){\line(2,3){3}} + +\put(55,-91.5){\line(1,0){28}} +\put(55,-91.5){\line(3,2){6}} +\put(55,-91.5){\line(3,-2){6}} +\put(83,-91.5){\line(-3,2){6}} +\put(83,-91.5){\line(-3,-2){6}} + +\put(454,-91.5){\line(1,0){28}} +\put(454,-91.5){\line(3,2){6}} +\put(454,-91.5){\line(3,-2){6}} +\put(482,-91.5){\line(-3,2){6}} +\put(482,-91.5){\line(-3,-2){6}} + +\put(61,-106){\line(0,1){8}} +\put(61,-106){\line(-2,3){3}} +\put(61,-106){\line(2,3){3}} +\put(476.5,-106){\line(0,1){8}} +\put(476.5,-106){\line(-2,3){3}} +\put(476.5,-106){\line(2,3){3}} + +\put(55,-114.5){\line(1,0){12}} +\put(55,-114.5){\line(3,2){6}} +\put(55,-114.5){\line(3,-2){6}} +\put(67,-114.5){\line(-3,2){6}} +\put(67,-114.5){\line(-3,-2){6}} + +\put(471,-114.5){\line(1,0){12}} +\put(471,-114.5){\line(3,2){6}} +\put(471,-114.5){\line(3,-2){6}} +\put(483,-114.5){\line(-3,2){6}} +\put(483,-114.5){\line(-3,-2){6}} + +\put(283,-106){\line(0,1){54}} +\put(267,-123){\scriptsize{separate}} + +\linethickness{0.2em} +\put(54.5,-38){\line(1,0){428}} +\put(54.5,-61){\line(1,0){428}} +\put(54.5,-84){\line(1,0){428}} +\put(54.5,-107){\line(1,0){428}} +\linethickness{2.8em} +\put(49,-1.5){\line(1,0){439}} +\linethickness{2.75em} +\color{lightgray} +\put(45.5,-1.5){\line(1,0){438}} +\put(51,-0.5){\includegraphics[width=29.55em, height=1em]{HLSNoiseInoNoiseEffectOriginal}} +\put(51,-16.5){\includegraphics[width=29.55em, height=1em]{HLSNoiseInoNoiseEffectKeepContrast}} +\end{picture} + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/HSVAddIno.tex b/toonz/sources/translations_docs/japanese/HSVAddIno.tex new file mode 100644 index 0000000..fab6980 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/HSVAddIno.tex @@ -0,0 +1,100 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +HSV Add Ino\medskip +\par +\normalsize +参照画像(Noise)の指定チャンネルの値で肌合いを加えます。\par +色相、彩度、明度、あるいは Alpha が変化します。\\ +\par +セル調の画像に、色相、彩度、明度、あるいは Alpha でノイズを加え、\par +背景の絵に馴染ませる等々に使います。\par +同様な事をノイズツールで行うと、1ドット毎のノイズなので絵が1本調子になります。\par +それとは違い、ノイズを参照画像としてユーザーが用意し、\par +その絵をノイズ成分として計算し、画像の肌合いを決めます。\\ +\par +あくまで、2次元上の静止画像に対する処理なので、立体を感じさ\par +せる場合や、動画の場合は、別の考察、処理(?)が必要です。\\ +\par +Alpha チャンネルによって効果の強さが決まります。よって、\par +Alpha によるマスクエッジが滑らかであればその状態を保持します。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +Noise\par +Pixel 毎に HSV 値によってノイズを加えるための画像を接続します。\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +From RGBA\par +参照画像(Noise)のどの channel を使用するかを指定します。\par +\textquotedbl Red\textquotedbl \ \textquotedbl Green\textquotedbl \ \textquotedbl Blue\textquotedbl \ \textquotedbl Alpha\textquotedbl のどれかを選びます。\par +初期値は\textquotedbl Red\textquotedbl です。\\ +\\ +Offset\par +参照画像(Noise)の Pixel 値に対する offset 値です。\par +Pixel 値(8 or 16bits)をゼロから1の値として、-1.0から1.0の間\par +の値で指定します。\par +参照 Pixel 値がここでの指定と同じ値のときは変化しません。\par +この値に対する参照 Pixel 値の大小によって、変化がおきます。\par +初期値は0.5です。\\ +\\ +Hue\par +色相(Hue)変化の強さを指定します。\par +offset 値を中心としてスケールがかります。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +-1.0から1.0の間の値で指定します。\par +ゼロだとなにも変化しません。\par +初期値は0.0です。\\ +\\ +Saturation\par +彩度(Saturation)変化の強さを指定します。\par +初期値は0.0です。\par +他は\textquotedbl Hue\textquotedbl と同様です。\\ +\\ +Value\par +明度(brightness Value)変化の強さを指定します。\par +初期値は0.25です。\par +他は\textquotedbl Hue\textquotedbl と同様です。\\ +\\ +Alpha\par +不透明度(Alpha)変化の強さを指定します。\par +初期値は0.0です。\par +他は\textquotedbl Hue\textquotedbl と同様です。\\ +\\ +Premultiply\par +ON なら、RGB に対して Premultiply 済の\par +(Alpha チャンネルの値があらかじめ RGB チャンネルに乗算されている)\par +画像として処理します。\par +そのとき、Alpha にも処理を加えてしまうと、正しい画像にならない場合があります。\par +初期値は ON です。\\ +\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像の値の取り方を選択します。\par +入力の\textquotedbl Reference\textquotedbl に画像を接続し、\par +Red/Green/Blue/Alpha/Luminance/Nothing から選びます。\par +この効果をつけたくないときは Nothing を選ぶか、接続を切ります。\par +初期値は Red です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/HSVAdjustIno.tex b/toonz/sources/translations_docs/japanese/HSVAdjustIno.tex new file mode 100644 index 0000000..af73794 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/HSVAdjustIno.tex @@ -0,0 +1,98 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +HSV Adjust Ino\medskip +\par +\normalsize +色相(H)、彩度(S)、明度(V)、に scale をかけ、次に、shift をします。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Pivot\par +\noindent \ \ \, Scale をかける時の中心値を指定します。\\ +\par +\noindent \ \ \, Hue\par +色相(hue)について Scale の中心値を指定します。\par +最小は0.0、最大は360.0です。\par +初期値は0.0です。\par +\noindent \ \ \, Saturation\par +彩度(saturation)について Scale の中心値を指定します。\par +最小は0.0、最大は1.0です。\par +初期値は0.0です。\par +\noindent \ \ \, Value\par +明度(brightness Value)について Scale の中心値を指定します。\par +最小は0.0、最大は1.0です。\par +初期値は0.0です。\\ +\\ +Scale\par +\noindent \ \ \, Pivot 値を中心として Scale をかけて HSV の範囲を拡大あるいは縮小します。\par +\noindent \ \ \, Hue 値は円の上を回るように再帰しますが、\par +\noindent \ \ \, Saturation,Value 値はゼロ以上はゼロ、1以上は1で固定します。\\ +\par +\noindent \ \ \, Hue\par +色相(hue)について Scale をかけます。\par +最小は0.0です。\par +初期値は1.0です。\par +\noindent \ \ \, Saturation\par +彩度(saturation)について Scale をかけます。\par +最小は0.0です。\par +初期値は1.0です。\par +\noindent \ \ \, Value\par +明度(brightness Value)について Scale をかけます。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +最小は0.0です。\par +初期値は1.0です。\\ +\\ +Shift\par +\noindent \ \ \, Shift して HSV の値をずらします。\par +\noindent \ \ \, Hue 値は円の上を回るように再帰しますが、\par +\noindent \ \ \, Saturation,Value 値はゼロ以上はゼロ、1以上は1で固定します。\\ +\par +\noindent \ \ \, Hue\par +色相(hue)について Shift します。\par +初期値は0.0です。\par +\noindent \ \ \, Saturation\par +彩度(saturation)について Shift します。\par +初期値は0.0です。\par +\noindent \ \ \, Value\par +明度(brightness Value)について Shift します。\par +初期値は0.0です。\\ +\\ +Premultiplied\par +ON なら、RGB に対して Premultiply 済の\par +(Alpha チャンネルの値があらかじめ RGB チャンネルに乗算されている)\par +画像として処理します。\par +初期値は ON です。\\ +\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像の値の取り方を選択します。\par +入力の\textquotedbl Reference\textquotedbl に画像を接続し、\par +Red/Green/Blue/Alpha/Luminance/Nothing から選びます。\par +この効果をつけたくないときは Nothing を選ぶか、接続を切ります。\par +初期値は Red です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/HSVNoiseIno.tex b/toonz/sources/translations_docs/japanese/HSVNoiseIno.tex new file mode 100644 index 0000000..ea12cde --- /dev/null +++ b/toonz/sources/translations_docs/japanese/HSVNoiseIno.tex @@ -0,0 +1,422 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\usepackage{eepic} +\usepackage{xcolor} + +\usepackage{graphicx} +\graphicspath{{images/}} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +HSV Noise Ino\medskip +\par +\normalsize +色相、彩度、明度、Alpha にドットノイズを加えます。\par +セル画調の絵にノイズを加え、背景の絵に馴染ませることを目的と\par +して開発しました。\\ +\par +Alpha チャンネルによってノイズの強さが決まります。よって、滑\par +らかなエッジは滑らかなままです。\par +Alpha チャンネル自身のノイズの強さも、自身の値を見ます。\\ +\par +結果をチェックするときは、サブカメラを使わないでください。\par +サブカメラは入力画像の範囲が違うため、ノイズパターンが変わっ\par +てしまいます。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Hue\par +色相(hue)についてノイズの強さを指定します。\par +Pixel 値(8 or 16bits)をゼロから1の値として指定します。\par +最小は0、最大は1です。\par +0のときは色相(hue)に対するノイズがかかりません。\par +初期値は0.025です。\\ +\\ +Saturation\par +彩度(saturation)についてノイズの強さを指定します。\par +Pixel 値(8 or 16bits)をゼロから1の値として指定します。\par +最小は0、最大は1です。\par +0のときは彩度(saturation)に対するノイズがかかりません。\par +初期値は0.0です。\\ +\\ +Value\par +明度(brightness Value)についてノイズの強さを指定します。\par +Pixel 値(8 or 16bits)をゼロから1の値として指定します。\par +最小は0、最大は1です。\par +0のときは明度(brightness Value)に対するノイズがかかりません。\par +初期値は0.035です。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Alpha\par +Alpha チャンネルについてノイズの強さを指定します。\par +Pixel 値(8 or 16bits)をゼロから1の値として指定します。\par +最小は0、最大は1です。\par +0のときは Alpha チャンネルに対するノイズがかかりません。\par +初期値は0.0です。\\ +\\ +Seed\par +画像のノイズパターンを決定するための値です。\par +ゼロ以上の整数値を指定します。\par +この値が同じであれば、パターンを再現します。\par +違う値でノイズを加えれば違うパターンになります。\par +初期値は1です。\\ +\\ +NBlur\par +ノイズ成分をぼかして、ドット感を減らします。\par +最小は0、最大は1です。\par +ドットに隣接するピクセルだけで計算しているので、非\par +常に軽いボカシの感じになります。\par +ゼロだとボカシはかからず、1.0で隣接するピクセルとの\par +平均をとります。\par +初期値は1です。\\ +\\ +Limits\par +彩度(Saturation),明度(brightness Value),不透明度(Alpha)の、\par +端値(0 or 1付近)に対する効果調整をします。\par +ゼロや1付近でノイズをかけると、ゼロ以下あるいは1以上の値が\par +現われますが、表現できないので、それぞれゼロあるいは1に切り\par +詰められます。その切り詰めを補填する効果です。\par +-{-}> \textquotedbl 端値における Noise 効果調整 図1 比較\textquotedbl 参照\par +-{-}> \textquotedbl 端値における Noise 効果調整 図2 説明\textquotedbl 参照\\ +\par +\noindent \ \ \, Effective\par +この効果(Limits)の強さを決めます。\par +ゼロならなにも効果はありません。ゼロより大きい値で効果が表\par +われます。1が最強です。\par +初期値はゼロです。\\ +\par +\noindent \ \ \, Center\par +効果の中心です。\par +ノイズ範囲のずれ幅、あるいは、ノイズ幅の減少の効果は、ゼロ\par +あるいは1の端値の部分で最も強く、中心では効果がありません。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +この効果のない中心値の位置をきめます。\par +ゼロから1の間で指定します。\par +ゼロだと、値がゼロの Pixel には効果がでなくなります。\par +1だと、値が1の Pixel には効果がでなくなります。\par +初期値は0.5が中心です。\\ +\par +\noindent \ \ \, Type\par +効果のタイプを撰択します。\par +\textquotedbl Keep Noise\textquotedbl を選ぶと、(全体的に)ノイズ範囲をずらしノイズ幅\par +を維持、画像全体のコントラストは縮小します。\par +\textquotedbl Keep Contrast\textquotedbl を選ぶと、端のみでノイズ幅を減らしコントラス\par +トを維持します。\par +初期値は\textquotedbl Keep Noise\textquotedbl です。\\ +\\ +Premultiply\par +ON なら、RGB に対して Premultiply 済の\par +(Alpha チャンネルの値があらかじめ RGB チャンネルに乗算されている)\par +画像として処理します。\par +そのとき、Alpha にも処理を加えてしまうと、正しい画像にならない場合があります。\par +初期値は ON です。\\ +\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像の値の取り方を選択します。\par +入力の\textquotedbl Reference\textquotedbl に画像を接続し、\par +Red/Green/Blue/Alpha/Luminance/Nothing から選びます。\par +この効果をつけたくないときは Nothing を選ぶか、接続を切ります。\par +初期値は Red です。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{1.5em} +\par +\noindent \hskip 2.2em 図1 端値における Noise 効果比較\\[0.4em] +\par +\scriptsize +\noindent \hskip 3.4em Original\par +\noindent \hskip 3.4em Effective がゼロ\par +\noindent \hskip 3.4em Keep Noise\par +\noindent \hskip 3.4em Keep Contrast + +\large +\noindent \begin{picture}(0,0) +\put(55.5,-6.5){\includegraphics[width=29.6em, height=1em]{HSVNoiseInoNoiseEffectOriginal}} +\put(55.5,-22.5){\includegraphics[width=29.6em, height=1em]{HSVNoiseInoNoiseEffectEffectiveZero}} +\put(55.5,-38.5){\includegraphics[width=29.6em, height=1em]{HSVNoiseInoNoiseEffectKeepNoise}} +\put(55.5,-54.5){\includegraphics[width=29.6em, height=1em]{HSVNoiseInoNoiseEffectKeepContrast}} +\linethickness{0.01em} +\put(126,64){\line(-1,0){56}} +\put(126,53){\line(-1,0){14}} +\put(126,41){\line(-1,0){42}} +\put(126,29.5){\line(-1,0){28}} +\put(126,15){\line(-1,0){93}} +\put(126,64){\line(0,-1){49}} +\put(33,15){\line(0,-1){58}} +\put(33,0){\line(1,0){14}} +\put(47,0){\line(-3,2){6}} +\put(47,0){\line(-3,-2){6}} +\put(33,-14){\line(1,0){14}} +\put(47,-14){\line(-3,2){6}} +\put(47,-14){\line(-3,-2){6}} +\put(33,-28){\line(1,0){14}} +\put(47,-28){\line(-3,2){6}} +\put(47,-28){\line(-3,-2){6}} +\put(33,-43){\line(1,0){14}} +\put(47,-43){\line(-3,2){6}} +\put(47,-43){\line(-3,-2){6}} +\end{picture}\\[3.6em] + +\normalsize +\noindent \hskip 2.2em 図2 端値における Noise 変化範囲説明図\\[0.5em] +\par +\footnotesize +\noindent \hskip 2.65em Effective がゼロ \ \ 端値はノイズ値がカットされる(default) + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(54.5,-37){\line(0,1){8}} +\put(54.5,-37){\line(-2,3){3}} +\put(54.5,-37){\line(2,3){3}} +\put(482,-37){\line(0,1){8}} +\put(482,-37){\line(-2,3){3}} +\put(482,-37){\line(2,3){3}} +\put(54.5,-58){\line(0,1){6}} +\put(482,-58){\line(0,1){6}} + +\put(27,-45.5){\line(1,0){56}} +\put(27,-45.5){\line(3,2){6}} +\put(27,-45.5){\line(3,-2){6}} +\put(83,-45.5){\line(-3,2){6}} +\put(83,-45.5){\line(-3,-2){6}} + +\put(255,-45.5){\line(1,0){56}} +\put(255,-45.5){\line(3,2){6}} +\put(255,-45.5){\line(3,-2){6}} +\put(311,-45.5){\line(-3,2){6}} +\put(311,-45.5){\line(-3,-2){6}} + +\put(455,-45.5){\line(1,0){56}} +\put(455,-45.5){\line(3,2){6}} +\put(455,-45.5){\line(3,-2){6}} +\put(511,-45.5){\line(-3,2){6}} +\put(511,-45.5){\line(-3,-2){6}} + +\put(61,-67){\line(1,0){15}} +\put(61,-67){\line(3,2){6}} +\put(61,-67){\line(3,-2){6}} +\put(52,-70){\scriptsize{0}} +\put(78,-74){\footnotesize{0以下のノイズは0に制限される}} + +\put(471,-67){\line(-1,0){15}} +\put(471,-67){\line(-3,2){6}} +\put(471,-67){\line(-3,-2){6}} +\put(476,-70){\scriptsize{1.0}} +\put(312,-74){\footnotesize{1以上のノイズは1に制限される}} + +\linethickness{0.2em} +\put(54.5,-38){\line(1,0){428}} +\linethickness{2.8em} +\put(49,-1.5){\line(1,0){439}} +\linethickness{2.75em} +\color{lightgray} +\put(45.5,-1.5){\line(1,0){438}} +\put(51,-0.5){\includegraphics[width=29.55em, height=1em]{HSVNoiseInoNoiseEffectOriginal}} +\put(51,-16.5){\includegraphics[width=29.55em, height=1em]{HSVNoiseInoNoiseEffectEffectiveZero}} +\end{picture}\\[5.7em] + +\footnotesize +\noindent \hskip 2.65em Keep Noise \ \ シフトしてノイズを維持。コントラストは縮小。全体的にノイズ位置がずれる + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(255,-45.5){\line(1,0){56}} +\put(255,-45.5){\line(3,2){6}} +\put(255,-45.5){\line(3,-2){6}} +\put(311,-45.5){\line(-3,2){6}} +\put(311,-45.5){\line(-3,-2){6}} + +\put(158,-60){\line(0,1){8}} +\put(158,-60){\line(-2,3){3}} +\put(158,-60){\line(2,3){3}} +\put(400,-60){\line(0,1){8}} +\put(400,-60){\line(-2,3){3}} +\put(400,-60){\line(2,3){3}} + +\put(144,-68.5){\line(1,0){56}} +\put(144,-68.5){\line(3,2){6}} +\put(144,-68.5){\line(3,-2){6}} +\put(200,-68.5){\line(-3,2){6}} +\put(200,-68.5){\line(-3,-2){6}} + +\put(357,-68.5){\line(1,0){56}} +\put(357,-68.5){\line(3,2){6}} +\put(357,-68.5){\line(3,-2){6}} +\put(413,-68.5){\line(-3,2){6}} +\put(413,-68.5){\line(-3,-2){6}} + +\put(107,-83){\line(0,1){8}} +\put(107,-83){\line(-2,3){3}} +\put(107,-83){\line(2,3){3}} +\put(442,-83){\line(0,1){8}} +\put(442,-83){\line(-2,3){3}} +\put(442,-83){\line(2,3){3}} + +\put(102,-91.5){\line(1,0){56}} +\put(102,-91.5){\line(3,2){6}} +\put(102,-91.5){\line(3,-2){6}} +\put(158,-91.5){\line(-3,2){6}} +\put(158,-91.5){\line(-3,-2){6}} + +\put(392,-91.5){\line(1,0){56}} +\put(392,-91.5){\line(3,2){6}} +\put(392,-91.5){\line(3,-2){6}} +\put(448,-91.5){\line(-3,2){6}} +\put(448,-91.5){\line(-3,-2){6}} + +\put(58,-106){\line(0,1){8}} +\put(58,-106){\line(-2,3){3}} +\put(58,-106){\line(2,3){3}} +\put(478.5,-106){\line(0,1){8}} +\put(478.5,-106){\line(-2,3){3}} +\put(478.5,-106){\line(2,3){3}} + +\put(55,-114.5){\line(1,0){56}} +\put(55,-114.5){\line(3,2){6}} +\put(55,-114.5){\line(3,-2){6}} +\put(111,-114.5){\line(-3,2){6}} +\put(111,-114.5){\line(-3,-2){6}} + +\put(427,-114.5){\line(1,0){56}} +\put(427,-114.5){\line(3,2){6}} +\put(427,-114.5){\line(3,-2){6}} +\put(483,-114.5){\line(-3,2){6}} +\put(483,-114.5){\line(-3,-2){6}} + +\put(283,-106){\line(0,1){54}} +\put(267,-123){\scriptsize{separate}} + +\linethickness{0.2em} +\put(54.5,-38){\line(1,0){428}} +\put(54.5,-61){\line(1,0){428}} +\put(54.5,-84){\line(1,0){428}} +\put(54.5,-107){\line(1,0){428}} +\linethickness{2.8em} +\put(49,-1.5){\line(1,0){439}} +\linethickness{2.75em} +\color{lightgray} +\put(45.5,-1.5){\line(1,0){438}} +\put(51,-0.5){\includegraphics[width=29.55em, height=1em]{HSVNoiseInoNoiseEffectOriginal}} +\put(51,-16.5){\includegraphics[width=29.55em, height=1em]{HSVNoiseInoNoiseEffectKeepNoise}} +\end{picture}\\[9.3em] + +\footnotesize +\noindent \hskip 2.65em Keep Contrast \ \ ノイズ幅を減少。コントラストを維持。端のみでノイズ幅が減る + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(255,-45.5){\line(1,0){56}} +\put(255,-45.5){\line(3,2){6}} +\put(255,-45.5){\line(3,-2){6}} +\put(311,-45.5){\line(-3,2){6}} +\put(311,-45.5){\line(-3,-2){6}} + +\put(86,-60){\line(0,1){8}} +\put(86,-60){\line(-2,3){3}} +\put(86,-60){\line(2,3){3}} +\put(450,-60){\line(0,1){8}} +\put(450,-60){\line(-2,3){3}} +\put(450,-60){\line(2,3){3}} + +\put(58,-68.5){\line(1,0){56}} +\put(58,-68.5){\line(3,2){6}} +\put(58,-68.5){\line(3,-2){6}} +\put(114,-68.5){\line(-3,2){6}} +\put(114,-68.5){\line(-3,-2){6}} + +\put(423,-68.5){\line(1,0){56}} +\put(423,-68.5){\line(3,2){6}} +\put(423,-68.5){\line(3,-2){6}} +\put(479,-68.5){\line(-3,2){6}} +\put(479,-68.5){\line(-3,-2){6}} + +\put(70,-83){\line(0,1){8}} +\put(70,-83){\line(-2,3){3}} +\put(70,-83){\line(2,3){3}} +\put(468,-83){\line(0,1){8}} +\put(468,-83){\line(-2,3){3}} +\put(468,-83){\line(2,3){3}} + +\put(55,-91.5){\line(1,0){28}} +\put(55,-91.5){\line(3,2){6}} +\put(55,-91.5){\line(3,-2){6}} +\put(83,-91.5){\line(-3,2){6}} +\put(83,-91.5){\line(-3,-2){6}} + +\put(454,-91.5){\line(1,0){28}} +\put(454,-91.5){\line(3,2){6}} +\put(454,-91.5){\line(3,-2){6}} +\put(482,-91.5){\line(-3,2){6}} +\put(482,-91.5){\line(-3,-2){6}} + +\put(61,-106){\line(0,1){8}} +\put(61,-106){\line(-2,3){3}} +\put(61,-106){\line(2,3){3}} +\put(476.5,-106){\line(0,1){8}} +\put(476.5,-106){\line(-2,3){3}} +\put(476.5,-106){\line(2,3){3}} + +\put(55,-114.5){\line(1,0){12}} +\put(55,-114.5){\line(3,2){6}} +\put(55,-114.5){\line(3,-2){6}} +\put(67,-114.5){\line(-3,2){6}} +\put(67,-114.5){\line(-3,-2){6}} + +\put(471,-114.5){\line(1,0){12}} +\put(471,-114.5){\line(3,2){6}} +\put(471,-114.5){\line(3,-2){6}} +\put(483,-114.5){\line(-3,2){6}} +\put(483,-114.5){\line(-3,-2){6}} + +\put(283,-106){\line(0,1){54}} +\put(267,-123){\scriptsize{separate}} + +\linethickness{0.2em} +\put(54.5,-38){\line(1,0){428}} +\put(54.5,-61){\line(1,0){428}} +\put(54.5,-84){\line(1,0){428}} +\put(54.5,-107){\line(1,0){428}} +\linethickness{2.8em} +\put(49,-1.5){\line(1,0){439}} +\linethickness{2.75em} +\color{lightgray} +\put(45.5,-1.5){\line(1,0){438}} +\put(51,-0.5){\includegraphics[width=29.55em, height=1em]{HSVNoiseInoNoiseEffectOriginal}} +\put(51,-16.5){\includegraphics[width=29.55em, height=1em]{HSVNoiseInoNoiseEffectKeepContrast}} +\end{picture} + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/HardLightIno.tex b/toonz/sources/translations_docs/japanese/HardLightIno.tex new file mode 100644 index 0000000..05cb2b2 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/HardLightIno.tex @@ -0,0 +1,44 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\[0.55em] +Hard Light Ino \normalsize \hskip 14.2em : ハードライト\medskip +\par +Fore が暗なら Multiply、明なら Screen\par +式 = if (Fore < 0.5) then \textquotedbl Multiply\textquotedbl \ else \textquotedbl Screen\textquotedbl\par +式は RGB 各値をゼロから1とした場合の値で示しています。\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は ON です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/HardMixIno.tex b/toonz/sources/translations_docs/japanese/HardMixIno.tex new file mode 100644 index 0000000..4865db7 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/HardMixIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Hard Mix Ino\medskip +\par +\normalsize +ハードミックス\par +Vivid Light が暗なら0、明なら1\par +式 = if (\textquotedbl Vivid Light\textquotedbl \ < 0.5) then 0 else 1\par +式は RGB 各値をゼロから1とした場合の値で示しています。\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は ON です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/LevelAutoIno.tex b/toonz/sources/translations_docs/japanese/LevelAutoIno.tex new file mode 100644 index 0000000..6ab3d12 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/LevelAutoIno.tex @@ -0,0 +1,142 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\usepackage{eepic} + +\usepackage{tikz} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Level Auto Ino\medskip +\par +\normalsize +絵の明るさのレンジを最大に広げます。\\ +\par +暗いマスク用画像を明るくする等の自動的な level 補正をします。\\ +\par +入力画像の最も暗い値と最も明るい値を元にして、数値として最\par +も暗い値(Out Min)と最も明るい値(Out Max)に明るさのレンジを\par +広げます。\par +-{-}> \textquotedbl Level Auto 図1 計算図\textquotedbl 参照\\ +\par +RGBA チャンネル各々にレンジを広げるので、RGBA のバランスはと\par +りません。そのため色の付いた画像は色が変わることがあります\par +ので注意してください。\\ +\par +結果をチェックするときは、サブカメラを使わないでください。\par +サブカメラは入力画像の範囲が違うため、入力画像の最暗値と最\par +明値が変わり、正確な処理ができません。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +In Min Shift\\ +In Max Shift\par +入力画像 Pixel の最小値と最大値は、自動的に計算しますが、その\par +値に加算して調整します。\par +例えば一ヶ所だけ明るい Pixel があってそれを無視したいとき、\par +\textquotedbl In Max Shift\textquotedbl にマイナスを指定することでレンジをひろげます。\par +Pixel 値(8 or 16bits)をゼロから1の値として指定します。\par +最小は-1、最大は1です。\par +\noindent \hskip 7em Min \ \ \ \ \, 0\par +\noindent \hskip 7em Max \ \ \ \ -1\par +だと画面は真っ暗になります。\par +\noindent \hskip 7em Min \ \ \ \ \, 1\par +\noindent \hskip 7em Max \ \ \ \ \ 0\par +とすると、画面は真っ白になります。\par +0とすれば shift による調整はありません。\par +初期値は両方とも0です。\\ +\\ +Out Min + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Out Max\par +出力画像の最も暗い値(最小値)と最も明るい値(最大値)を決定し\par +ます。\par +最小は0、最大は1です。\par +初期値は\par +\noindent \hskip 7em Out Min が0\par +\noindent \hskip 7em Out Max が1\par +です。\\ +\\ +Gamma\par +\textquotedbl Out Min\textquotedbl と\textquotedbl Out Max\textquotedbl の間で gamma 補正します。\par +0.1から1.0の間だと、画像が暗くなります。\par +1.0を指定すると補正しません。\par +1.0から10.0の間では、明るくなります。\par +初期値は1です。\\ +\\ +Level Auto 図1 \ \ 計算図 + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(18.5,-94){\line(0,-1){81}} +\put(18.5,-94){\line(-2,-3){4}} +\put(18.5,-94){\line(2,-3){4}} +\put(18.5,-175){\line(-2,3){4}} +\put(18.5,-175){\line(2,3){4}} + +\put(114,-22){\line(0,-1){199}} +\put(256,-22){\line(0,-1){199}} +\put(85,-51){\line(1,0){199}} +\put(85,-193){\line(1,0){199}} + +\put(101,-7){\small{IN}} +\put(233,-7){\small{OUT}} +\put(290,-51){\small{1}} +\put(290,-193){\small{0}} +\put(72,-91){\small{max}} +\put(258,-69){\small{max}} +\put(116,-105){\small{max\_shift}} +\put(116,-176){\small{min\_shift}} +\put(72,-188){\small{min}} +\put(258,-188){\small{min}} +\end{picture}\\[3em] + +\noindent \hskip 3.8em \begin{tikzpicture}[line width=3pt] +\draw[line cap=round] (1.6,-0.75) -- (1.9,-0.93) -- (1.6,-1.11); +\draw[dashed,dash pattern=on 0.75pt off 0.75pt] (0,-0.93) -- (1.9,-0.93); + +\draw[line cap=round] (8.65,0) -- (8.95,-0.18) -- (8.65,-0.36); +\draw[dashed,dash pattern=on 0.75pt off 0.75pt] (7.1,-0.18) -- (8.95,-0.18); + +\draw[line cap=round] (1.6,-3.6) -- (1.9,-3.78) -- (1.6,-3.96); +\draw[dashed,dash pattern=on 0.75pt off 0.75pt] (0,-3.78) -- (1.9,-3.78); + +\draw[line cap=round] (8.65,-3.6) -- (8.95,-3.78) -- (8.65,-3.96); +\draw[dashed,dash pattern=on 0.75pt off 0.75pt] (7.1,-3.78) -- (8.85,-3.78); + +\draw[line cap=round] (1.86,-1.54) -- (2.04,-1.84) -- (2.22,-1.54); +\draw[dashed,dash pattern=on 0.75pt off 0.75pt] (2.04,-1) -- (2.04,-1.84); + +\draw[line cap=round] (1.86,-3.2) -- (2.04,-2.9) -- (2.22,-3.2); +\draw[dashed,dash pattern=on 0.75pt off 0.75pt] (2.04,-2.9) -- (2.04,-3.74); + +\draw[line cap=round] (6.58,-0.14) -- (6.92,-0.21) -- (6.7,-0.49); +\draw[dashed,dash pattern=on 0.75pt off 0.75pt] (2.04,-1.9) -- (6.92,-0.21); + +\draw[line cap=round] (6.65,-3.52) -- (6.92,-3.75) -- (6.58,-3.87); +\draw[dashed,dash pattern=on 0.75pt off 0.75pt] (2.04,-2.79) -- (6.92,-3.75); + +\end{tikzpicture} + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/LevelMasterIno.tex b/toonz/sources/translations_docs/japanese/LevelMasterIno.tex new file mode 100644 index 0000000..0147ea0 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/LevelMasterIno.tex @@ -0,0 +1,77 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Level Master Ino\medskip +\par +\normalsize +レベル補正をします。\par +RGB 別に補正したい時は\textquotedbl Level RGBA\textquotedbl を使用してください。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +In\par +入力 Pixel 値の Min(最小)値と Max(最大)値を指定します。\par +Min より小さい値は Min に、Max より大きい値は Max に制限します。\par +最小は0、最大は1です。\par +初期値は、Min が0、Max が1、です。\par +小数点以下4桁までの入力になります。\\ +\\ +Out\par +\textquotedbl In\textquotedbl で指定した範囲を、\par +ここで指定する Min(最小)値と Max(最大)値の範囲に当てはめます。\par +最小は0、最大は1です。\par +初期値は、Min が0、Max が1、です。\par +小数点以下4桁までの入力になります。\\ +\\ +Gamma\par +\textquotedbl Out Min\textquotedbl と\textquotedbl Out Max\textquotedbl の間で gamma 補正します。\par +0.1から1.0の間だと、画像が暗くなります。\par +1.0を指定すると補正しません。\par +1.0から10.0の間では、明るくなります。\par +初期値は1です。\\ +\\ +Alpha Rendering\par +ON で Alpha にも処理をします。\par +OFF のときは、Alpha に処理しません。\par +初期値は ON です。\\ +\\ +Premultiplied\par +ON なら、RGB に対して Premultiply 済の\par +(Alpha チャンネルの値があらかじめ RGB チャンネルに乗算されている)\par +画像として処理します。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +そのとき、Alpha にも処理を加えてしまうと、正しい画像にならない場合があります。\par +初期値は ON です。\\ +\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像の値の取り方を選択します。\par +入力の\textquotedbl Reference\textquotedbl に画像を接続し、\par +Red/Green/Blue/Alpha/Luminance/Nothing から選びます。\par +この効果をつけたくないときは Nothing を選ぶか、接続を切ります。\par +初期値は Red です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/LevelRGBAIno.tex b/toonz/sources/translations_docs/japanese/LevelRGBAIno.tex new file mode 100644 index 0000000..ba09299 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/LevelRGBAIno.tex @@ -0,0 +1,80 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Level RGBA Ino\medskip +\par +\normalsize +RGBA 個別にレベル補正をします。\par +RGB まとめて補正したい時は\textquotedbl Level Master\textquotedbl を使用してください。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Red In\\ +Green In\\ +Blue In\\ +Alpha In\par +入力 Pixel 値の Min(最小)値と Max(最大)値を指定します。\par +Min より小さい値は Min に、Max より大きい値は Max に制限します。\par +最小は0、最大は1です。\par +初期値は、Min が0、Max が1、です。\par +小数点以下4桁までの入力になります。\\ +\\ +Red Out\\ +Green Out\\ +Blue Out\\ +Alpha Out\par +\textquotedbl In\textquotedbl で指定した範囲を、\par +ここで指定する Min(最小)値と Max(最大)値の範囲に当てはめます。\par +最小は0、最大は1です。\par +初期値は、Min が0、Max が1、です。\par +小数点以下4桁までの入力になります。\\ +\\ +Red Gamma\\ +Green Gamma\\ +Blue Gamma\\ +Alpha Gamma\par +\textquotedbl Out Min\textquotedbl と\textquotedbl Out Max\textquotedbl の間で gamma 補正します。\par +0.1から1.0の間だと、画像が暗くなります。\par +1.0を指定すると補正しません。\par +1.0から10.0の間では、明るくなります。\par +初期値は1です。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Premultiplied\par +ON なら、RGB に対して Premultiply 済の\par +(Alpha チャンネルの値があらかじめ RGB チャンネルに乗算されている)\par +画像として処理します。\par +そのとき、Alpha にも処理を加えてしまうと、正しい画像にならない場合があります。\par +初期値は ON です。\\ +\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像の値の取り方を選択します。\par +入力の\textquotedbl Reference\textquotedbl に画像を接続し、\par +Red/Green/Blue/Alpha/Luminance/Nothing から選びます。\par +この効果をつけたくないときは Nothing を選ぶか、接続を切ります。\par +初期値は Red です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/LightenIno.tex b/toonz/sources/translations_docs/japanese/LightenIno.tex new file mode 100644 index 0000000..d3b934b --- /dev/null +++ b/toonz/sources/translations_docs/japanese/LightenIno.tex @@ -0,0 +1,44 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Lighten Ino\medskip +\par +\normalsize +比較(明)\par +Fore と Back の値の大きい方(RGB 別々)\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は OFF です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/LighterColorIno.tex b/toonz/sources/translations_docs/japanese/LighterColorIno.tex new file mode 100644 index 0000000..15562f9 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/LighterColorIno.tex @@ -0,0 +1,44 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Lighter Color Ino\medskip +\par +\normalsize +カラー比較(明)\par +RGB の輝度値で大きい方\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は OFF です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/LinearBurnIno.tex b/toonz/sources/translations_docs/japanese/LinearBurnIno.tex new file mode 100644 index 0000000..6e170dc --- /dev/null +++ b/toonz/sources/translations_docs/japanese/LinearBurnIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Linear Burn Ino\medskip +\par +\normalsize +焼き込み(リニア)\par +合計値の上半分を使い、暗くします\par +式 = Back + Fore - 1\par +式は RGB 各値をゼロから1とした場合の値で示しています。\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は ON です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/LinearDodgeIno.tex b/toonz/sources/translations_docs/japanese/LinearDodgeIno.tex new file mode 100644 index 0000000..4fe0de4 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/LinearDodgeIno.tex @@ -0,0 +1,45 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Linear Dodge Ino\medskip +\par +\normalsize +覆い焼きリニア\par +合計して明るくします\par +式 = Back + Fore ※Alpha で RGB を調整するため半透明で Add と違う\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は ON です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/LinearLightIno.tex b/toonz/sources/translations_docs/japanese/LinearLightIno.tex new file mode 100644 index 0000000..51a43bd --- /dev/null +++ b/toonz/sources/translations_docs/japanese/LinearLightIno.tex @@ -0,0 +1,37 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Linear Light Ino\medskip +\par +\normalsize +リニアライト\par +Fore が暗なら Linear Burn、明は Linear Dodge\par +式 = if (Fore < 0.5) then \textquotedbl Linear Burn\textquotedbl \ else \textquotedbl Linear Dodge\textquotedbl\par +式は RGB 各値をゼロから1とした場合の値で示しています。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は ON です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/MaxMinIno.tex b/toonz/sources/translations_docs/japanese/MaxMinIno.tex new file mode 100644 index 0000000..8762e62 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/MaxMinIno.tex @@ -0,0 +1,87 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Max Min Ino\medskip +\par +\normalsize +画像の明るい(暗い)部分を膨らませます。\\ +\par +丸く(あるいは多角形に)ふくらみます。\par +また、変化は滑らかです。\\ +\par +初めに、指定あれば Alphaチャンネルに対して処理します。\par +次に、Alphaチャンネルがゼロでない Pixel の RGBを処理します。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +Reference\par +Pixel 毎に膨らむ効果の強弱をつけるための参照画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Max Min Select\par +処理方法を撰択します。\par +\textquotedbl Max\textquotedbl \ -> 明るい部分を膨らませる\par +\textquotedbl Min\textquotedbl \ -> 暗い部分を膨らませる\par +\textquotedbl Min\textquotedbl の場合、セル画像の輪郭の墨線は、その外側の透過領域がゼ\par +ロで塗られているため、透過領域が膨らみ墨線が消えていきます。\par +同様に Alphaも透過領域が増します。\par +初期設定は\textquotedbl Max\textquotedbl です。\\ +\\ +Radius\par +膨らむ大きさを、円半径で指定します。\par +単位はミリメートルです。\par +ゼロ以上の値を指定します。\par +Smoothingと足して(ピクセル単位で)1より小さい時は膨らみません。\par +よって値が小さいと、細かい画像で効果があるのに、\par +荒い画像ではかからないことがあります。\par +半径は大きくするほど処理に時間がかかります。\\ +\\ +Polygon Number\par +円に膨らますか、多角形に膨らますかを指定します。\par +整数値で指定します。\par +2の時は丸く膨らみます。\par +3以上を指定すると、その角数の多角形に膨らみます。最大は16です。\par +膨らむ中心の真右から始まる多角形です。\par +初期値は2です。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\\ +\par +\noindent Degree\par +\textquotedbl Polygon Number\textquotedbl が3以上の時の、多角形膨らみの傾きを指定します。\par +\textquotedbl Polygon Number\textquotedbl が2のときは意味ありません。\par +ゼロ以上の Degree単位で指定します。\par +時計回りに回転します。\par +初期値は0です。\\ +\\ +Alpha Rendering\par +ONで Alphaにも処理をします。\par +OFFのときは RGBにのみ処理します。Alphaチャンネルのない BG 画で使います。\par +初期値は ONです。\\ +\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像の値の取り方を選択します。\par +入力の\textquotedbl Reference\textquotedbl に画像を接続し、\par +Red/Green/Blue/Alpha/Luminance/Nothingから選びます。\par +この効果をつけたくないときは Nothingを選ぶか、接続を切ります。\par +初期値は Red です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/MedianIno.tex b/toonz/sources/translations_docs/japanese/MedianIno.tex new file mode 100644 index 0000000..de620af --- /dev/null +++ b/toonz/sources/translations_docs/japanese/MedianIno.tex @@ -0,0 +1,70 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Median Ino\medskip +\par +\normalsize +ノイズを低減し、多数派あるいは中間の色で侵食し、絵の輪郭を丸めます\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Radius\par +侵食する範囲を円の半径で指定します。\par +単位は mm です。\\ +\par +ゼロ以上の値で指定します。最大は100mm です。\par +ピクセルの幅より小さいと(まわりの Pixel を含めないため)\par +なにもしません。\\ +\par +初期値は0.35mm です。\\ +\\ +Channel\par +medianをかける色チャンネルを指定します。\\ +\par +\textquotedbl Red\textquotedbl\par +\textquotedbl Green\textquotedbl\par +\textquotedbl Blue\textquotedbl\par +\textquotedbl Alpha\textquotedbl\par +を選ぶと、指定の色チャンネルに処理をかけて、\par +その結果を RGBAチャンネルに保存します。\par +白黒画像では、このように単チャンネル処理をすることで、\par +処理スピードがはやくなります。\\ +\par +\textquotedbl All\textquotedbl\par +では、RGBA各チャンネルに処理をかけます。\\ +\par +初期値は\textquotedbl All\textquotedbl です。\\ +\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像の値の取り方を選択します。\par +入力の\textquotedbl Reference\textquotedbl に画像を接続し、\par +Red/Green/Blue/Alpha/Luminance/Nothingから選びます。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +この効果をつけたくないときは Nothingを選ぶか、接続を切ります。\par +初期値は Red です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/MotionBlurIno.tex b/toonz/sources/translations_docs/japanese/MotionBlurIno.tex new file mode 100644 index 0000000..383a48c --- /dev/null +++ b/toonz/sources/translations_docs/japanese/MotionBlurIno.tex @@ -0,0 +1,104 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Motion Blur Ino\medskip +\par +\normalsize +平行移動によるカメラシャッター風のぼかしを行ないます。\par +オプション指定によりぶれ残像効果も可能です。\\ +\par +初めに、(ON 指定ならば)Alpha チャンネルに対して処理し、次に、\par +Alpha チャンネルがゼロでないピクセルの RGB を処理します。\\ +\par +Alpha チャンネルに対して処理しない(OFF)指定をしたときは、\par +RGB 画像の変化をマスクします。よって、滑らかなエッジは滑らか\par +なままです。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Depend Move\par +\noindent \ \ \, P1 -> P2\par +以下の X1,Y1,X2,Y2により、\par +固定した方向と大きさで移動を指定します。\\ +\par +\noindent \ \ \, Motion\par +Geometry の、E/W,H/S からフレーム毎に移動を指定します。\par +X1,Y1,X2,Y2の指定値は無視します。\\ +\\ +X1\\ +Y1\\ +X2\\ +Y2\par +平行移動ぼかしの始点座標値と終点座標値を指定します。\par +座標系は左下が原点です。\par +単位はミリメートルです。\par +小数点以下の指定により、微妙な長短の変化がつきます。\par +始点と終点の距離が処理上1/16Pixel 以上ないと効果はでません。\par +初期値は\par +\noindent \hskip 7em X1 Y1 -> 0.0 0.0\par +\noindent \hskip 7em X2 Y2 -> 1.0 1.0\par +です。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Scale\par +平行移動ぼかしの長さに対してスケール調整をします。\par +例えば、\par +\noindent \hskip 7em X1 Y1 -> 0.0 0.0\par +\noindent \hskip 7em X2 Y2 -> 1.0 -1.0\par +\noindent \hskip 7em Scale -> 100\par +は、\par +\noindent \hskip 7em X1 Y1 -> 0.0 0.0\par +\noindent \hskip 7em X2 Y2 -> 100.0 -100.0\par +と同じ効果となります。\par +ゼロを指定するとぼかしはかからなくなります。\par +初期値は1でスケールはかかりません。\\ +\\ +Curve\par +ぼかしの強さに対して調整をします。\par +10.0以下、1より大きくすると、ぼかしが強くなり、\par +0.1以上、1より小さくすると、ぼかしは薄くなります。\par +初期値は1で等減衰です。\\ +\\ +Zanzo Length\par +残像効果のずれ位置を指定します\par +単位はミリメートルです。\par +ゼロ以上の値で指定します。\par +例えば、幅が3の線の残像を出したいときは、\par +3以上の値を指定しないと残像はでません。\par +初期値は0で残像はでません\\ +\\ +Zanzo Power\par +残像をだすときの強さを決めます。\par +最弱が0で、残像効果はかかりません。\par +値が大きくなるほど、\par +ぼかしは薄まり、残像効果が強くなります。\par +初期値は1で最強です。ぼかしはかからず残像効果のみとなります。\\ +\\ +Alpha Rendering\par +Alpha チャンネルがあるときのみ有効なスイッチです。\par +OFF のときは、RGB 値の変化を Alpha 値でマスクします。\par +ON で Alpha にも処理をします。マスクはしません。\par +初期値は ON です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/MotionWindIno.tex b/toonz/sources/translations_docs/japanese/MotionWindIno.tex new file mode 100644 index 0000000..3317bfe --- /dev/null +++ b/toonz/sources/translations_docs/japanese/MotionWindIno.tex @@ -0,0 +1,333 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\usepackage{epic} +\usepackage{eepic} +\usepackage{xcolor} + +\usepackage{graphicx} +\graphicspath{{images/}} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Motion Wind Ino\medskip +\par +\normalsize +絵に流線の効果を加えます\\ +\par +作画アニメーションで、早い移動を表す美術描画方法を参考にしています。\par +ピクセルの RGB 値から明るいピーク部分をきっかけにして、\par +色で流れるような効果を加えます。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Direction\par +流線の方向を指定します。\par +方向は上(Up)下(Down)左(Left)右(Right)方向のみです。\par +初期値は右(Right)となります。\par +ここでの方向は、カメラから見た方向に固定されます。画像の傾\par +きが変わるような、画像の回転やカメラの Z 回転等々\par +(Geometry 変換)によって方向を傾けることはできないので、\par +ご注意ください。\\ +\\ +Dark\par +OFF で明るい部分に対する流線となります。\par +ON のときは暗い部分に対する流線になります。\par +初期値は OFF です。\\ +\\ +Alpha Rendering\par +Alpha チャンネルがあるときのみ有効なスイッチです。\par +OFF のときは、RGB 値の変化を Alpha 値でマスクします\par +ON で Alpha にも処理をします。\par +初期値は ON です。\\ +\\ +Length Min\\ +Length Max\par +流線の長さを指定します。\par +単位はミリメートルです。\par +ゼロ以上の値で指定します。最大は1000です。\par +小数点以下の指定により、微妙な長短の変化がつきます。\par +違う値を与えると、その値の間で長さがランダムに変化します。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +同じ値にすると、ランダムさはなくなり全体が同じ長さとなります。\par +初期値は Min(最小値)が0、Max(最大値)が18となります。\par +-{-}> \textquotedbl Motion Wind 図1 \ \ Length Wind\textquotedbl 参照\par +-{-}> \textquotedbl Motion Wind 図4 \ \ Force is 1 and Density is 1\textquotedbl 参照\par +-{-}> \textquotedbl Motion Wind 図7 \ \ Length Wind and Force is 10\textquotedbl 参照\\ +\\ +Length Bias\par +長さのランダムパターンの片寄りを変えます。\par +0.1から1.0の間の値だと、短いのが増え、\par +1.0を指定すると均等なランダムさとなり、\par +1.0から10.0の間の値では、長いのが増えます。\par +となります。\par +初期値は1です。\par +-{-}> \textquotedbl Motion Wind 図1 \ \ Length Wind\textquotedbl 参照\\ +\\ +Length Seed\par +長さのランダムパターンを変えます。\par +ゼロ以上の整数値で指定します。\par +同じ画像に同じ値を与えると、同じパターンを再現します。\par +違うパターンにしたいときは値をかえます。\par +たとえば、Fix のムービーで、流線のパターン変化が欲しいとき\par +は、フレームごとに、seed 値を変えます。\par +初期値は1としています。\\ +\\ +Force Min\\ +Force Max\par +流れ始めの勢いを指定します。\par +0.1から1.0の間だと、すぐ減衰して弱い勢い、\par +1.0を指定すると勢いがリニアに減衰し、\par +1.0から10.0の間では、なかなか減衰ぜず強い勢い、\par +となります。\par +違う値を与えると、その値の間で勢いがランダムに変化します。\par +同じ値にすると、ランダムさはなくなり全体が同じ勢いとなります。\par +初期値はどちらも1です。\par +-{-}> \textquotedbl Motion Wind 図2 \ \ Force Wind\textquotedbl 参照\par +-{-}> \textquotedbl Motion Wind 図5 \ \ Force is 0.1\textquotedbl 参照\par +-{-}> \textquotedbl Motion Wind 図7 \ \ Length Wind and Force is 10\textquotedbl 参照\\ +\\ +Force Bias\par +勢いのランダムパターンの片寄りを変えます。\par +0.1から1.0の間の値だと、弱いのが増え、\par +1.0を指定すると均等なランダムさとなり、 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +1.0から10.0の間の値では、強いのが増えます。\par +となります。\par +初期値は1です。\par +-{-}> \textquotedbl Motion Wind 図2 Force Wind\textquotedbl 参照\\ +\\ +Force Seed\par +勢いのランダムパターンを変えます。\par +以下\textquotedbl Length Seed\textquotedbl と同様です。\\ +\\ +Density Min\\ +Density Max\par +流線の濃度を指定します。\par +ゼロだと流線効果がなくなり、\par +ゼロから1.0の間の値だと、うすくなり、\par +1.0のときは基準濃度で、\par +1.0より大きな値では、濃くなります。最大は100です。\par +違う値を与えると、その値の間で濃度がランダムに変化します。\par +同じ値にすると、ランダムさはなくなり全体が同じ濃度となります。\par +初期値はどちらも1です。\par +-{-}> \textquotedbl Motion Wind 図3 \ \ Density Wind\textquotedbl 参照\par +-{-}> \textquotedbl Motion Wind 図6 \ \ Density is 0.2\textquotedbl 参照\\ +\\ +Density Bias\par +濃度のランダムパターンの片寄りを変えます。\par +0.1から1.0の間の値だと、薄いのが増え、\par +1.0を指定すると均等なランダムさとなり、\par +1.0から10.0の間の値では、濃いのが増えます。\par +初期値は1です。\par +-{-}> \textquotedbl Motion Wind 図3 \ \ Density Wind\textquotedbl 参照\\ +\\ +Density Seed\par +濃度のランダムパターンを変えます。\par +以下\textquotedbl Length Seed\textquotedbl と同様です。\\ +\\ +流線でなく、均等な流れ効果にするには\par +\ \ \textquotedbl Length Min\textquotedbl \ と \textquotedbl Length Max\textquotedbl 、\par +\ \,\, \textquotedbl Force Min\textquotedbl \ と \ \, \textquotedbl Force Max\textquotedbl 、\par +\textquotedbl Density Min\textquotedbl \ と \textquotedbl Density Max\textquotedbl 、\par +に同じ値を与えると流線でなく絵が流れます。\\ +\\ +ランダムのパターンを同期するには\par +一枚の中で、 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent \hskip 7.4em length\_random\_seed、\par +\noindent \hskip 8em force\_random\_seed、\par +\noindent \hskip 7em density\_random\_seed、\par +を同じ値にすると、パターンも同じとなり、同じ\par +タイミングで強まったり、弱まったりします。\par +違う値にするとバラバラのパターンになります。\\ +\\ +カメラ移動時ランダムのパターンを固定するには\par +背景画上をカメラ移動するような場合は、絵の変化に合わせてフ\par +レーム毎にランダムパターンが変化します。\par +パターンを固定したい場合は背景画全体に処理をかけなければな\par +りません。\\ +-{-}-{-}-{-}\\ +Length Ref\par +OFF でなにも参照しません。\par +ON のときは、画像を参照して、長短をつけます。\par +参照指定のある場合、その画像の Red チャンネルで長短を与えます。\par +参照してない場合、自画像の明るさで長短を与えます。\par +流線が始まる Pixel が暗いほど、より短くなります。\par +全体に調子が弱まるようになるので、長さ指定の値(Min,Max)で\par +調整してください。\par +初期値は OFF です。\\ +\\ +Force Ref\par +OFF でなにも参照しません。\par +ON のときは、画像を参照して、強弱をつけます。\par +参照指定のある場合、その画像の Red チャンネルで強弱を与えます。\par +参照してない場合、自画像の明るさで強弱を与えます。\par +流線が始まる Pixel が暗いほど、より弱くなります。\par +全体に調子が弱まるようになるので、勢い指定の値(Min,Max)で\par +調整してください。\par +初期値は OFF です。\\ +\\ +Density Ref\par +OFF でなにも参照しません。\par +ON のときは、画像を参照して、濃淡をつけます。\par +参照指定のある場合、その画像の Red チャンネルで濃淡を与えます。\par +参照してない場合、自画像の明るさで濃淡を与えます。\par +流線が始まる Pixel が暗いほど、より薄くなります。\par +全体に調子が弱まるようになるので、濃度指定の値(Min,Max)で\par +調整してください。\par +初期値は OFF です。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{1.3em} +\par +\noindent Reference\par +Pixel 毎に効果の強弱をつけるための参照画像の値の取り方を選択します。\par +入力の\textquotedbl Reference\textquotedbl に画像を接続し、\par +Red/Green/Blue/Alpha/Luminance/Nothing から選びます。\par +この効果をつけたくないときは Nothing を選ぶか、接続を切ります。\par +初期値は Red です。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Motion Wind 図1 \ \ Length Wind + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(1,-198.5){\line(1,0){198}} +\put(9,-200.5){\line(0,1){62}} +\drawline[0](9,-143)(193,-198.5) +\drawline[0](9,-143)(102,-198.5) +\drawline[0](9,-143)(28,-198.5) +\put(0.5,-135){\includegraphics[width=13.9em]{MotionWindInoFunction1LengthWindA}} +\put(142,-171.5){\includegraphics[width=13.9em]{MotionWindInoFunction1LengthWindB}} +\put(284.5,-200){\includegraphics[width=13.9em]{MotionWindInoFunction1LengthWindC}} +\put(209,-16.5){\normalsize{Bias is 0.1}} +\put(351,-45){\normalsize{Bias is 10}} +\end{picture}\\[12.6em] + +\normalsize +\noindent Motion Wind 図2 \ \ Force Wind + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(1,-198.5){\line(1,0){198}} +\put(9,-200.5){\line(0,1){62}} +\drawline[0](9,-143)(193,-198.5) +\spline(9,-143)(129,-150)(188,-180)(195,-198.5) +\spline(9,-143)(20,-168.5)(85,-192.5)(193,-198.5) + +\put(0.5,-135){\includegraphics[width=13.9em]{MotionWindInoFunction2MotionWindA}} +\put(142,-171.5){\includegraphics[width=13.9em]{MotionWindInoFunction2MotionWindB}} +\put(284.5,-200){\includegraphics[width=13.9em]{MotionWindInoFunction2MotionWindC}} +\put(209,-16.5){\normalsize{Bias is 0.1}} +\put(351,-45){\normalsize{Bias is 10}} +\end{picture}\\[12.65em] + +\normalsize +\noindent Motion Wind 図3 \ \ Density Wind + +\large +\noindent \begin{picture}(0,0) +\linethickness{0.01em} +\put(1,-198.5){\line(1,0){198}} +\put(9,-200.5){\line(0,1){62}} +\drawline[0](9,-143)(193,-198.5) +\drawline[0](9,-166.5)(193,-198.5) +\drawline[0](9,-192)(193,-198.5) + +\put(0.5,-135){\includegraphics[width=13.9em]{MotionWindInoFunction3DensityWindA}} +\put(142,-171.5){\includegraphics[width=13.9em]{MotionWindInoFunction3DensityWindB}} +\put(284.5,-200){\includegraphics[width=13.9em]{MotionWindInoFunction3DensityWindC}} +\put(209,-16.5){\normalsize{Bias is 0.1}} +\put(351,-45){\normalsize{Bias is 10}} +\end{picture} + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.1em} +\par +\large +\noindent \hskip 10.5em Length Min equal Max Wind\\[-0.15em] +\normalsize +Motion Wind 図4 \ \ Force is 1 and Density is 1 + +\large +\noindent \begin{picture}(0,0) +\put(28.5,-132){\includegraphics[width=13.9em]{MotionWindInoFunction4}} +\end{picture}\\[7.6em] + +\large +\noindent \hskip 10.5em Length Min equal Max Wind\\[-0.15em] +\normalsize +Motion Wind 図5 \ \ Force is 0.1 + +\large +\noindent \begin{picture}(0,0) +\put(28.5,-132){\includegraphics[width=13.9em]{MotionWindInoFunction5}} +\end{picture}\\[7.6em] + +\large +\noindent \hskip 10.5em Length Min equal Max Wind\\[-0.15em] +\normalsize +Motion Wind 図6 \ \ Density is 0.2 + +\large +\noindent \begin{picture}(0,0) +\put(28.5,-132){\includegraphics[width=13.9em]{MotionWindInoFunction6}} +\end{picture}\\[7.4em] + +\normalsize +\noindent Motion Wind 図7 \ \ Length Wind and Force is 10 + +\large +\noindent \begin{picture}(0,0) +\put(28.5,-132){\includegraphics[width=13.9em]{MotionWindInoFunction7}} +\end{picture} + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/MultiplyIno.tex b/toonz/sources/translations_docs/japanese/MultiplyIno.tex new file mode 100644 index 0000000..0be199e --- /dev/null +++ b/toonz/sources/translations_docs/japanese/MultiplyIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Multiply Ino\medskip +\par +\normalsize +乗算\par +掛け算で暗くする\par +式 = Fore × Back\par +式は RGB 各値をゼロから1とした場合の値で示しています。\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は ON です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/NegateIno.tex b/toonz/sources/translations_docs/japanese/NegateIno.tex new file mode 100644 index 0000000..4694b25 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/NegateIno.tex @@ -0,0 +1,48 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Negate Ino\medskip +\par +\normalsize +絵の色チャンネルごとに反転します。\\ +\par +\ \ 8bits 画像: 0-{-}> \ \ \ 255、1-{-}> \ \ \, 254、... \ \ \ \ 254-{-}>1、 \ \ \, 255-{-}>0\par +16bits 画像: 0-{-}>65535、1-{-}>65534、... 65534-{-}>1、65535-{-}>0\par +という様に値が反転します。\\ +\par +Alpha値があるとき、その Alpha値に対して反転します。\par +Alphaが \ \ \ 0: 0-{-}> \ \ \, 0、1-{-}> \ \ \ 0、... 254-{-}>0、255-{-}>0\par +Alphaが128: 0-{-}>128、1-{-}>127、... 127-{-}>1、128-{-}>0、...255-{-}>0\par +Alphaが255: 0-{-}>255、1-{-}>254、... 254-{-}>1、255-{-}>0\par +となり、これによりセル画像は正常に反転します。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +各色チャンネル毎に反転するかどうか指定します。\\ +\\ +Red \ \ \ \, 赤チャンネル反転スイッチ\\ +Green \ 緑チャンネル反転スイッチ\\ +Blue \ \ \, 青チャンネル反転スイッチ\\ +Alpha \ \ Alphaチャンネル反転スイッチ\\ +\\ +OFF ではそのチャンネルには何もしません。\\ +ON で、対象チャンネルを反転します。\\ +初期値は、Red,Green,Blue が ON、Alphaが OFF、です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/OverIno.tex b/toonz/sources/translations_docs/japanese/OverIno.tex new file mode 100644 index 0000000..d6a5fa2 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/OverIno.tex @@ -0,0 +1,44 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Over Ino\medskip +\par +\normalsize +合成\par +Back の上に Fore を重ねます\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は OFF です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/OverlayIno.tex b/toonz/sources/translations_docs/japanese/OverlayIno.tex new file mode 100644 index 0000000..4523597 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/OverlayIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Overlay Ino\medskip +\par +\normalsize +オーバーレイ\par +Back が暗なら Multiply、明は Screen\par +式 = if (Back < 0.5) then \textquotedbl Multiply\textquotedbl \ else \textquotedbl Screen\textquotedbl\par +式は RGB 各値をゼロから1とした場合の値で示しています。\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は ON です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/PNCloudsIno.tex b/toonz/sources/translations_docs/japanese/PNCloudsIno.tex new file mode 100644 index 0000000..b4d1a09 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/PNCloudsIno.tex @@ -0,0 +1,55 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +PN Clouds Ino\medskip +\par +\normalsize +雲模様の絵を生成します。\\ +\par +pixel 値は、\par +\noindent \hskip 7em \ \ 8bits 画像の場合128(0x80)\par +\noindent \hskip 7em 16bits 画像の場合32768(0x8000)\par +を中心としたノイズとなります。\par +なお、この値より大きい値と小さい値は\par +必ずしも均等にはなりません。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Size\par +模様のパターンの大きさを指定します。\par +値を小さくすると小さい模様、大きくすると大きい模様となります。\par +単位は mm です。\par +初期値は10です。\\ +\\ +Z\par +絵を連続的に変化させます。\par +例えば、1フレームから24フレームを0から1まで変化させます。\par +初期値は0です。\\ +\\ +Octaves\par +雲模様の細部を加えます。\par +1から10までの整数で指定します。\par +数が増えるほど細部のノイズが現れます。\par +初期値は1です。\\ +\\ +Persistance\par +雲模様の細部のノイズの強さを指定します。\\ +\\ +Alpha Rendering\par +OFFのとき Alphaを最大値で塗りつぶし、全面不透明とします。\par +ONで Alphaにも RGB と同じ画像を生成します。\par +初期値は ONです。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/PinLightIno.tex b/toonz/sources/translations_docs/japanese/PinLightIno.tex new file mode 100644 index 0000000..ff37a27 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/PinLightIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Pin Light Ino\medskip +\par +\normalsize +ピンライト\par +Fore が暗なら Darken、明なら Lighten\par +式 = if (Fore < 0.5) then \textquotedbl Darken\textquotedbl \ else \textquotedbl Lighten\textquotedbl\par +式は RGB 各値をゼロから1とした場合の値で示しています。\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は ON です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/RadialBlurIno.tex b/toonz/sources/translations_docs/japanese/RadialBlurIno.tex new file mode 100644 index 0000000..bba38af --- /dev/null +++ b/toonz/sources/translations_docs/japanese/RadialBlurIno.tex @@ -0,0 +1,131 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\usepackage{graphicx} +\graphicspath{{images/}} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Radial Blur Ino\medskip +\par +\normalsize +放射方向に平均値ぼかしを行ないます。\par +方向にねじれを加えることも可能です(処理時間がよりかかります)。\\ +\par +初めに、指定あれば Alpha チャンネルに対して処理します。\par +次に、Alpha チャンネルがゼロでないピクセルの RGB を処理します。\par +Alpha チャンネルに処理をしないときは、RGB 画像の変化を Alpha 値\par +でマスクします。よって、滑らかなエッジは滑らかなままです。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Center\par +放射の中心位置を指定します。\par +原点は処理をする画像の中心です。カメラの注視点ではありません。\par +単位はミリメートルです。\par +初期値は\textquotedbl 0.0 0.0\textquotedbl で原点位置が中心です。\\ +\\ +Radius\par +中心からぼかさない範囲を指定します。\par +単位はミリメートルです。\par +0以上の値を入力します。\par +初期値は0で全体にぼかします。\\ +\\ +Blur\par +ぼかしの強さを調整をします。\par +ぼかしの強さは、Center から各 Pixel までの長さで決まります。\par +計算式は、Center から各 Pixel の距離を Pixel\_Len とすると、\par +(Pixel\_Len - Radius) * (Blur / 100)\par +となります。\par +最小は0でこのときは何もしません。最大は100です。\par +初期値は1です。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Twist\par +ひねりを加えます。\par +このひねりは Center から基準距離までを何度ひねるかで指定します。\par +基準距離は、結果画像の上下高の半分の長さです。\par +最小は0でひねりません。最大は180です。\\ +\\ +Alpha Rendering\par +ON で Alpha にも処理をします。\par +OFF のときは、Alpha に処理しませんが、\par +RGB 値の変化を Alpha 値でマスクします。\par +初期値は ON です。\\ +\\ +Anti Alias\par +ジャギーをなくすためにアンチエイリアスを加えた処理を行います。\par +結果はなめらかになりますが時間がかかります。\par +初期値は OFF です。\par +<処理時間参考例>\par +Width=2176 Height=1236 Center=0,0 Radius=0 Blur=3 Alpha=ON\par +Shrink=1\par +\noindent \hskip 7em Twist=0\par +\noindent \hskip 10.5em Anti Alias=OFF 約7sec\par +\noindent \hskip 10.5em Anti Alias=ON \, 約32sec\par +\noindent \hskip 7em Twist=1-180\par +\noindent \hskip 10.5em Anti Alias=OFF 約19sec\par +\noindent \hskip 10.5em Anti Alias=ON \, 約780sec\par +Shrink=3\par +\noindent \hskip 7em Twist=0\par +\noindent \hskip 10.5em Anti Alias=OFF 約3sec\par +\noindent \hskip 10.5em Anti Alias=ON \, 約4sec\par +\noindent \hskip 7em Twist=1-180\par +\noindent \hskip 10.5em Anti Alias=OFF 約4sec\par +\noindent \hskip 10.5em Anti Alias=ON \, 約34sec\\ +\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像の値の取り方を選択します。\par +入力の\textquotedbl Reference\textquotedbl に画像を接続し、\par +Red/Green/Blue/Alpha/Luminance/Nothing から選びます。\par +この効果をつけたくないときは Nothing を選ぶか、接続を切ります。\par +初期値は Red です。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Radial Blur \ \ 参考例 + +\large +\noindent \begin{picture}(0,0) +\put(170.5,-144.5){\includegraphics[width=13.3em]{RadialBlurInoOriginalImage}} +\put(92.5,-343){\includegraphics[width=13.3em]{RadialBlurInoRadialBlur30AAOFF}} +\put(314.5,-343){\includegraphics[width=13.3em]{RadialBlurInoRadialBlur30AAON}} +\put(92.5,-486){\includegraphics[width=13.3em]{RadialBlurInoTwistBlur20Twist45AAOFF}} +\put(314.5,-486){\includegraphics[width=13.3em]{RadialBlurInoTwistBlur20Twist45AAON}} +\put(26,-50){\normalsize{元画像}} +\put(26,-67){\normalsize{(200x112pixel)}} +\put(89,-221){\normalsize{Anti Alias \ \ OFF}} +\put(311,-221){\normalsize{Anti Alias \ \ ON}} +\put(26,-249){\normalsize{Radial}} +\put(26,-267){\normalsize{(Blur 30)}} +\put(26,-382){\normalsize{Twist}} +\put(26,-400){\normalsize{(Blur 20}} +\put(32,-418){\normalsize{Twist 45)}} +\end{picture}\\[12.65em] + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/ScreenIno.tex b/toonz/sources/translations_docs/japanese/ScreenIno.tex new file mode 100644 index 0000000..eb5affb --- /dev/null +++ b/toonz/sources/translations_docs/japanese/ScreenIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Screen Ino\medskip +\par +\normalsize +スクリーン\par +反転マスク効果で明るくする\par +式 = 1 - (1 - Back) × (1 - Fore)\par +式は RGB 各値をゼロから1とした場合の値で示しています。\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は ON です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/SoftLightIno.tex b/toonz/sources/translations_docs/japanese/SoftLightIno.tex new file mode 100644 index 0000000..bbf8ebd --- /dev/null +++ b/toonz/sources/translations_docs/japanese/SoftLightIno.tex @@ -0,0 +1,52 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Soft Light Ino\medskip +\par +\normalsize +ソフトライト\par +Hard Light を弱く\par +式 = if (Fore < 0.5) then\par +\noindent \hskip 7em (Back - (1 - 2 × Fore) × Back × (1 - Back))\par +\noindent \hskip 6em else\par +\noindent \hskip 7em if ((Back < 0.25) then\par +\noindent \hskip 10.5em (Back + (2 × Fore - 1) × (((16 × Back - 12) × Back + 4) × Back - Back))\par +\noindent \hskip 7em else\par +\noindent \hskip 10.5em (Back + (2 × Fore - 1) × (sqrt(Back) - Back)))\par +式は RGB 各値をゼロから1とした場合の値で示しています。\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は ON です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/SpinBlurIno.tex b/toonz/sources/translations_docs/japanese/SpinBlurIno.tex new file mode 100644 index 0000000..3cbfeed --- /dev/null +++ b/toonz/sources/translations_docs/japanese/SpinBlurIno.tex @@ -0,0 +1,134 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\usepackage{graphicx} +\graphicspath{{images/}} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Spin Blur Ino\medskip +\par +\normalsize +回転方向に平均値ぼかしを行ないます。\\ +\par +初めに、指定あれば Alphaチャンネルに対して処理します。\par +次に、Alphaチャンネルがゼロでないピクセルの RGBを処理します。\par +Alphaチャンネルに処理をしないときは、RGB画像の変化を Alpha値\par +でマスクします。よって、滑らかなエッジは滑らかなままです。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Center\par +回転の中心位置を指定します。\par +原点は処理をする画像の中心です。カメラの注視点ではありません。\par +単位はミリメートルです。\par +初期値は\textquotedbl 0.0 0.0\textquotedbl で原点位置が中心です。\\ +\\ +Radius\par +中心からぼかさない範囲を指定します。\par +単位はミリメートルです。\par +0以上の値を入力します。\par +初期値は0で全体にぼかします。\\ +\\ +Blur\par +ぼかしの強さを調整をします。\par +ぼかしの強さは、回転角度で指定します。\par +最小は0でこのときは何もしません。最大は180です。\par +初期値は1です。\\ +\\ +Type\par +Accelerator\par +\noindent \hskip 7em Blur角度に対して、\par +\noindent \hskip 7em 外周へ行くほど強くかかります。\par +\noindent \hskip 7em Centerから結果画像の上下高の半分の位置において、\par +\noindent \hskip 7em Blur角度でかかり、その内側では弱くかかり、その外側では\par +\noindent \hskip 7em 強くかかります。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +Uniform\par +\noindent \hskip 7em Centerから近くても遠くても Blur角度一定でかかります。\\ +\par +初期値は\textquotedbl Accelerator\textquotedbl です。\\ +\\ +Alpha Rendering\par +ONで Alphaにも処理をします。\par +OFFのときは、Alpha に処理しませんが、\par +RGB値の変化を Alpha 値でマスクします。\par +初期値は ONです。\\ +\\ +Anti Alias\par +ジャギーをなくすためにアンチエイリアスを加えた処理を行います。\par +結果はなめらかになりますが時間がかかります。\par +初期値は OFFです。\par +<処理時間参考例>\par +Width=2176 Height=1236 Center=0,0 Radius=0 Blur=3 Alpha=ON\par +Shrink=1\par +\noindent \hskip 7em Type=Accelerator\par +\noindent \hskip 10.5em Anti Alias=OFF 約28sec\par +\noindent \hskip 10.5em Anti Alias=ON \, 約360sec\par +\noindent \hskip 7em Type=Uniform\par +\noindent \hskip 10.5em Anti Alias=OFF 約23sec\par +\noindent \hskip 10.5em Anti Alias=ON \, 約280sec\par +Shrink=3\par +\noindent \hskip 7em Type=Accelerator\par +\noindent \hskip 10.5em Anti Alias=OFF 約5sec\par +\noindent \hskip 10.5em Anti Alias=ON \, 約17sec\par +\noindent \hskip 7em Type=Uniform\par +\noindent \hskip 10.5em Anti Alias=OFF 約4sec\par +\noindent \hskip 10.5em Anti Alias=ON \, 約13sec\\ +\\ +Reference\par +Pixel 毎に効果の強弱をつけるための参照画像の値の取り方を選択します。\par +入力の\textquotedbl Reference\textquotedbl に画像を接続し、\par +Red/Green/Blue/Alpha/Luminance/Nothingから選びます。\par +この効果をつけたくないときは Nothingを選ぶか、接続を切ります。\par +初期値は Red です。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +\noindent Spin Blur \ \ 参考例 + +\large +\noindent \begin{picture}(0,0) +\put(170.5,-144.5){\includegraphics[width=13.3em]{SpinBlurInoOriginalImage}} +\put(92.5,-343){\includegraphics[width=13.3em]{SpinBlurInoUniformBlur11AAOFF}} +\put(314.5,-343){\includegraphics[width=13.3em]{SpinBlurInoUniformBlur11AAON}} +\put(92.5,-486){\includegraphics[width=13.3em]{SpinBlurInoAcceleratorBlur11AAOFF}} +\put(314.5,-486){\includegraphics[width=13.3em]{SpinBlurInoAcceleratorBlur11AAON}} +\put(26,-50){\normalsize{元画像}} +\put(26,-67){\normalsize{(200x112pixel)}} +\put(89,-221){\normalsize{Anti Alias \ \ OFF}} +\put(311,-221){\normalsize{Anti Alias \ \ ON}} +\put(26,-249){\normalsize{Uniform}} +\put(26,-267){\normalsize{(Blur\,11.25)}} +\put(26,-382){\normalsize{Accel-}} +\put(26,-400){\normalsize{erator}} +\put(26,-418){\normalsize{(Blur\,11.25)}} +\end{picture}\\[12.65em] + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/SubtractIno.tex b/toonz/sources/translations_docs/japanese/SubtractIno.tex new file mode 100644 index 0000000..402e55e --- /dev/null +++ b/toonz/sources/translations_docs/japanese/SubtractIno.tex @@ -0,0 +1,47 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\[0.55em] +Subtract Ino \normalsize \hskip 15.8em : 減算\medskip +\par +引き算で暗くします。\par +式 = Back - Fore\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は ON です。\\ +\\ +Alpha Rendering\par +Alpha チャンネルの処理スイッチです。\par +初期設定は ON です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/VividLightIno.tex b/toonz/sources/translations_docs/japanese/VividLightIno.tex new file mode 100644 index 0000000..128d435 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/VividLightIno.tex @@ -0,0 +1,46 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Vivid Light Ino\medskip +\par +\normalsize +ビビッドライト\par +Fore が暗なら Color Burn、明なら Color Dodge\par +式 = if (Fore < 0.5) then \textquotedbl Color Burn\textquotedbl \ else \textquotedbl Color Dodge\textquotedbl\par +式は RGB 各値をゼロから1とした場合の値で示しています。\\ +\\ +-{-}- \ 入力 \ -{-}-\par +両方とも接続していれば合成処理します。\par +動作スイッチ OFF のとき Back を表示します。\par +片方のみ繋がっていればそれを表示します。\\ +Fore\par +上に重ねる画像を接続します。\\ +Back\par +下に置く画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +Opacity\par +上に重ねる画像の不透明度を指定します。\par +0の時は Fore 画像は透明になります。\par +初期値は\textquotedbl 1.0\textquotedbl で Fore 画像は不透明として合成します。\par +0から1.0の間の値を指定します。\\ +\\ +Clipping Mask\par +ON にすると、\par +素材(Back)の存在しない(Alpha 値がゼロ)場所は、透明のままにします。\par +初期設定は ON です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/WarpHVIno.tex b/toonz/sources/translations_docs/japanese/WarpHVIno.tex new file mode 100644 index 0000000..f29c517 --- /dev/null +++ b/toonz/sources/translations_docs/japanese/WarpHVIno.tex @@ -0,0 +1,70 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[a4paper, total={180mm, 272mm}]{geometry} + +\usepackage{fontspec} +\setmainfont[Path=fonts/, Extension=.ttf]{ipaexm} + +\setlength\parindent{3.5em} +\setlength\parskip{0em} +\renewcommand{\baselinestretch}{1.247} + +\begin{document} + +\thispagestyle{empty} + +\Large +\noindent \\ +Warp HV Ino\medskip +\par +\normalsize +参照画を元に絵をゆがませます。\\ +\\ +-{-}- \ 入力 \ -{-}-\\ +Source\par +処理をする画像を接続します。\\ +Hori\par +横方向にゆがませるための参照画像を接続します。\\ +Vert\par +縦方向にゆがませるための参照画像を接続します。\\ +\\ +-{-}- \ 設定 \ -{-}-\\ +H MaxLen\par +水平方向に絵を歪ませます。\par +歪みの最大値を指定します。\par +単位は mm で、0から100の値を与えます。\par +初期値は0で変化しないので何か値をいれてください。\\ +\par +\textquotedbl Hori\textquotedbl 参照画像の赤値から各ピクセルの歪みが決まります。\par +8bits 画像の場合\par +\noindent \hskip 7em 1なら-MaxLen(mm)\par +\noindent \hskip 7em 128なら歪みなし\par +\noindent \hskip 7em 255なら MaxLen(mm)\par +16bits 画像の場合\par +\noindent \hskip 7em 1なら-MaxLen(mm)\par +\noindent \hskip 7em 32768なら歪みなし\par +\noindent \hskip 7em 65535なら MaxLen(mm)\par +の歪みとなります。\\ +\\ +V MaxLen\par +垂直方向に絵をゆがませます。\par +\textquotedbl Vert\textquotedbl 参照画像の赤値から各ピクセルの歪みが決まります。\par +他は\textquotedbl H MaxLen\textquotedbl と同様です。\\ +\\ +Alpha Rendering\par +OFFのとき Alphaチャンネルにはなにもしません。\par +ONで Alphaにも処理をします。\par +初期値は ONです。\\ +\\ +Anti Aliasing\par +OFFのときは絵のジャギーを維持します。 + +\newpage + +\thispagestyle{empty} + +\ \vspace{-0.2em} +\par +ON ならジャギーの少ない絵に処理します。\par +初期値は ON です。 + +\end{document} \ No newline at end of file diff --git a/toonz/sources/translations_docs/japanese/fonts/ipaexm.ttf b/toonz/sources/translations_docs/japanese/fonts/ipaexm.ttf new file mode 100644 index 0000000..647fce2 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/fonts/ipaexm.ttf differ diff --git a/toonz/sources/translations_docs/japanese/images/HLSNoiseInoNoiseEffectEffectiveZero.png b/toonz/sources/translations_docs/japanese/images/HLSNoiseInoNoiseEffectEffectiveZero.png new file mode 100644 index 0000000..ce811e7 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/HLSNoiseInoNoiseEffectEffectiveZero.png differ diff --git a/toonz/sources/translations_docs/japanese/images/HLSNoiseInoNoiseEffectKeepContrast.png b/toonz/sources/translations_docs/japanese/images/HLSNoiseInoNoiseEffectKeepContrast.png new file mode 100644 index 0000000..5c7d87a Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/HLSNoiseInoNoiseEffectKeepContrast.png differ diff --git a/toonz/sources/translations_docs/japanese/images/HLSNoiseInoNoiseEffectKeepNoise.png b/toonz/sources/translations_docs/japanese/images/HLSNoiseInoNoiseEffectKeepNoise.png new file mode 100644 index 0000000..b714455 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/HLSNoiseInoNoiseEffectKeepNoise.png differ diff --git a/toonz/sources/translations_docs/japanese/images/HLSNoiseInoNoiseEffectOriginal.png b/toonz/sources/translations_docs/japanese/images/HLSNoiseInoNoiseEffectOriginal.png new file mode 100644 index 0000000..0ca5b41 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/HLSNoiseInoNoiseEffectOriginal.png differ diff --git a/toonz/sources/translations_docs/japanese/images/HSVNoiseInoNoiseEffectEffectiveZero.png b/toonz/sources/translations_docs/japanese/images/HSVNoiseInoNoiseEffectEffectiveZero.png new file mode 100644 index 0000000..ce811e7 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/HSVNoiseInoNoiseEffectEffectiveZero.png differ diff --git a/toonz/sources/translations_docs/japanese/images/HSVNoiseInoNoiseEffectKeepContrast.png b/toonz/sources/translations_docs/japanese/images/HSVNoiseInoNoiseEffectKeepContrast.png new file mode 100644 index 0000000..5c7d87a Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/HSVNoiseInoNoiseEffectKeepContrast.png differ diff --git a/toonz/sources/translations_docs/japanese/images/HSVNoiseInoNoiseEffectKeepNoise.png b/toonz/sources/translations_docs/japanese/images/HSVNoiseInoNoiseEffectKeepNoise.png new file mode 100644 index 0000000..b714455 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/HSVNoiseInoNoiseEffectKeepNoise.png differ diff --git a/toonz/sources/translations_docs/japanese/images/HSVNoiseInoNoiseEffectOriginal.png b/toonz/sources/translations_docs/japanese/images/HSVNoiseInoNoiseEffectOriginal.png new file mode 100644 index 0000000..0ca5b41 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/HSVNoiseInoNoiseEffectOriginal.png differ diff --git a/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction1LengthWindA.png b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction1LengthWindA.png new file mode 100644 index 0000000..1869dd3 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction1LengthWindA.png differ diff --git a/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction1LengthWindB.png b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction1LengthWindB.png new file mode 100644 index 0000000..4f16b4b Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction1LengthWindB.png differ diff --git a/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction1LengthWindC.png b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction1LengthWindC.png new file mode 100644 index 0000000..3e31c9b Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction1LengthWindC.png differ diff --git a/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction2MotionWindA.png b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction2MotionWindA.png new file mode 100644 index 0000000..cc2b0cc Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction2MotionWindA.png differ diff --git a/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction2MotionWindB.png b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction2MotionWindB.png new file mode 100644 index 0000000..189fa07 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction2MotionWindB.png differ diff --git a/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction2MotionWindC.png b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction2MotionWindC.png new file mode 100644 index 0000000..ac46d2a Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction2MotionWindC.png differ diff --git a/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction3DensityWindA.png b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction3DensityWindA.png new file mode 100644 index 0000000..af09ba3 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction3DensityWindA.png differ diff --git a/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction3DensityWindB.png b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction3DensityWindB.png new file mode 100644 index 0000000..fece65e Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction3DensityWindB.png differ diff --git a/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction3DensityWindC.png b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction3DensityWindC.png new file mode 100644 index 0000000..f3d2259 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction3DensityWindC.png differ diff --git a/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction4.png b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction4.png new file mode 100644 index 0000000..6b57511 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction4.png differ diff --git a/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction5.png b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction5.png new file mode 100644 index 0000000..85b3fd4 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction5.png differ diff --git a/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction6.png b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction6.png new file mode 100644 index 0000000..5851d09 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction6.png differ diff --git a/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction7.png b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction7.png new file mode 100644 index 0000000..f8e9f19 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/MotionWindInoFunction7.png differ diff --git a/toonz/sources/translations_docs/japanese/images/RadialBlurInoOriginalImage.png b/toonz/sources/translations_docs/japanese/images/RadialBlurInoOriginalImage.png new file mode 100644 index 0000000..6389d9f Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/RadialBlurInoOriginalImage.png differ diff --git a/toonz/sources/translations_docs/japanese/images/RadialBlurInoRadialBlur30AAOFF.png b/toonz/sources/translations_docs/japanese/images/RadialBlurInoRadialBlur30AAOFF.png new file mode 100644 index 0000000..65f0011 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/RadialBlurInoRadialBlur30AAOFF.png differ diff --git a/toonz/sources/translations_docs/japanese/images/RadialBlurInoRadialBlur30AAON.png b/toonz/sources/translations_docs/japanese/images/RadialBlurInoRadialBlur30AAON.png new file mode 100644 index 0000000..d6078fd Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/RadialBlurInoRadialBlur30AAON.png differ diff --git a/toonz/sources/translations_docs/japanese/images/RadialBlurInoTwistBlur20Twist45AAOFF.png b/toonz/sources/translations_docs/japanese/images/RadialBlurInoTwistBlur20Twist45AAOFF.png new file mode 100644 index 0000000..9031b91 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/RadialBlurInoTwistBlur20Twist45AAOFF.png differ diff --git a/toonz/sources/translations_docs/japanese/images/RadialBlurInoTwistBlur20Twist45AAON.png b/toonz/sources/translations_docs/japanese/images/RadialBlurInoTwistBlur20Twist45AAON.png new file mode 100644 index 0000000..603c5f6 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/RadialBlurInoTwistBlur20Twist45AAON.png differ diff --git a/toonz/sources/translations_docs/japanese/images/SpinBlurInoAcceleratorBlur11AAOFF.png b/toonz/sources/translations_docs/japanese/images/SpinBlurInoAcceleratorBlur11AAOFF.png new file mode 100644 index 0000000..d7900f7 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/SpinBlurInoAcceleratorBlur11AAOFF.png differ diff --git a/toonz/sources/translations_docs/japanese/images/SpinBlurInoAcceleratorBlur11AAON.png b/toonz/sources/translations_docs/japanese/images/SpinBlurInoAcceleratorBlur11AAON.png new file mode 100644 index 0000000..da15f23 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/SpinBlurInoAcceleratorBlur11AAON.png differ diff --git a/toonz/sources/translations_docs/japanese/images/SpinBlurInoOriginalImage.png b/toonz/sources/translations_docs/japanese/images/SpinBlurInoOriginalImage.png new file mode 100644 index 0000000..19c8cf2 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/SpinBlurInoOriginalImage.png differ diff --git a/toonz/sources/translations_docs/japanese/images/SpinBlurInoUniformBlur11AAOFF.png b/toonz/sources/translations_docs/japanese/images/SpinBlurInoUniformBlur11AAOFF.png new file mode 100644 index 0000000..087123b Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/SpinBlurInoUniformBlur11AAOFF.png differ diff --git a/toonz/sources/translations_docs/japanese/images/SpinBlurInoUniformBlur11AAON.png b/toonz/sources/translations_docs/japanese/images/SpinBlurInoUniformBlur11AAON.png new file mode 100644 index 0000000..9fd9eb3 Binary files /dev/null and b/toonz/sources/translations_docs/japanese/images/SpinBlurInoUniformBlur11AAON.png differ diff --git a/toonz/sources/xdg-data/CMakeLists.txt b/toonz/sources/xdg-data/CMakeLists.txt new file mode 100644 index 0000000..2ea9786 --- /dev/null +++ b/toonz/sources/xdg-data/CMakeLists.txt @@ -0,0 +1,3 @@ +install(FILES io.github.OpenToonz.appdata.xml DESTINATION ${CMAKE_INSTALL_PREFIX}/share/metainfo) +install(FILES io.github.OpenToonz.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications) +install(FILES io.github.OpenToonz.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/256x256/apps) diff --git a/toonz/sources/xdg-data/io.github.OpenToonz.appdata.xml b/toonz/sources/xdg-data/io.github.OpenToonz.appdata.xml index 87567eb..fe60d03 100644 --- a/toonz/sources/xdg-data/io.github.OpenToonz.appdata.xml +++ b/toonz/sources/xdg-data/io.github.OpenToonz.appdata.xml @@ -19,7 +19,8 @@ with Digital Video and Studio Ghibli.

- https://opentoonz.github.io + https://opentoonz.github.io/e/ + https://github.com/opentoonz/opentoonz/issues https://raw.githubusercontent.com/flathub/io.github.OpenToonz/master/screenshot1.png diff --git a/toonz/sources/xdg-data/io.github.OpenToonz.desktop b/toonz/sources/xdg-data/io.github.OpenToonz.desktop index 622ab68..dffb54a 100644 --- a/toonz/sources/xdg-data/io.github.OpenToonz.desktop +++ b/toonz/sources/xdg-data/io.github.OpenToonz.desktop @@ -1,6 +1,8 @@ [Desktop Entry] Type=Application Name=OpenToonz +Comment=2D animation Icon=io.github.OpenToonz Exec=opentoonz Categories=Graphics; +Terminal=false