diff --git a/ci-scripts/osx/travis-build.sh b/ci-scripts/osx/travis-build.sh index 2ccffc4..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.1/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/loc/Czech/colorfx.qm b/stuff/config/loc/Czech/colorfx.qm new file mode 100644 index 0000000..61f3988 Binary files /dev/null and b/stuff/config/loc/Czech/colorfx.qm differ diff --git a/stuff/config/loc/Czech/image.qm b/stuff/config/loc/Czech/image.qm new file mode 100644 index 0000000..7c40f21 Binary files /dev/null and b/stuff/config/loc/Czech/image.qm differ diff --git a/stuff/config/loc/Czech/tnzcore.qm b/stuff/config/loc/Czech/tnzcore.qm new file mode 100644 index 0000000..0eb4e7b Binary files /dev/null and b/stuff/config/loc/Czech/tnzcore.qm differ diff --git a/stuff/config/loc/Czech/tnztools.qm b/stuff/config/loc/Czech/tnztools.qm new file mode 100644 index 0000000..2162a73 Binary files /dev/null and b/stuff/config/loc/Czech/tnztools.qm differ diff --git a/stuff/config/loc/Czech/toonz.qm b/stuff/config/loc/Czech/toonz.qm new file mode 100644 index 0000000..c6bc32c Binary files /dev/null and b/stuff/config/loc/Czech/toonz.qm differ diff --git a/stuff/config/loc/Czech/toonzlib.qm b/stuff/config/loc/Czech/toonzlib.qm new file mode 100644 index 0000000..f466003 Binary files /dev/null and b/stuff/config/loc/Czech/toonzlib.qm differ diff --git a/stuff/config/loc/Czech/toonzqt.qm b/stuff/config/loc/Czech/toonzqt.qm new file mode 100644 index 0000000..9a3899e Binary files /dev/null and b/stuff/config/loc/Czech/toonzqt.qm differ diff --git a/stuff/config/qss/Blue/Blue.qss b/stuff/config/qss/Blue/Blue.qss index 916b68d..9a48d66 100644 --- a/stuff/config/qss/Blue/Blue.qss +++ b/stuff/config/qss/Blue/Blue.qss @@ -1 +1,1905 @@ -.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 +/* ----------------------------------------------------------------------------- + Component: Button Styles +----------------------------------------------------------------------------- */ +.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: #ffffff; +} +.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; +} +/* ----------------------------------------------------------------------------- + Component: Frames +----------------------------------------------------------------------------- */ +.frame, +.GroupBox, +#LoadLevelFrame, +#PsdSettingsGroupBox, +#CleanupSettingsFrame, +#OutputSettingsBox, +#OutputSettingsCameraBox, +#SolidLineFrame, +#FunctionParametersPanel, +QGroupBox { + border: 1 solid #212223; + border-radius: 2; +} +/* ----------------------------------------------------------------------------- + Component: Icons +----------------------------------------------------------------------------- */ +/* ----------------------------------------------------------------------------- + Component: Tabs +----------------------------------------------------------------------------- */ +.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: #ffffff; + 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: #ffffff; + 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; +} +/* ----------------------------------------------------------------------------- + Main +----------------------------------------------------------------------------- */ +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 +----------------------------------------------------------------------------- */ +#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: #ffffff; +} +/* ----------------------------------------------------------------------------- + Workspaces +----------------------------------------------------------------------------- */ +#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: #ffffff; +} +#TopBarTab::tab:first { + border-left: 1 solid #212223; +} +#TopBarTab::tab:last { + border-right: 1 solid #212223; +} +/* ----------------------------------------------------------------------------- + Menu +----------------------------------------------------------------------------- */ +QMenu { + background-color: #414345; + border: 1 solid #212223; + padding: 2 0; +} +QMenu::item { + padding: 3 28; +} +QMenu::item:selected { + background-color: #5385a6; + color: #ffffff; +} +QMenu::item:checked { + color: #d6d8dd; +} +QMenu::item:checked:selected { + background-color: #5385a6; + color: #ffffff; +} +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; +} +/* ----------------------------------------------------------------------------- + Titlebars +----------------------------------------------------------------------------- */ +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'); +} +/* ----------------------------------------------------------------------------- + Scrollbars +----------------------------------------------------------------------------- */ +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; +} +/* ----------------------------------------------------------------------------- + Tool Bars +----------------------------------------------------------------------------- */ +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; +} +/* -------------------------------------------------------------------------- */ +/* Scrollable QToolBar Buttons +/* -------------------------------------------------------------------------- */ +.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'); +} +/* ----------------------------------------------------------------------------- + Trees +----------------------------------------------------------------------------- */ +.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: #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/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; +} +/* ----------------------------------------------------------------------------- + Tab Systems +----------------------------------------------------------------------------- */ +#TabBarContainer { + background-color: #323435; +} +/* ----------------------------------------------------------------------------- + Push Button +----------------------------------------------------------------------------- */ +.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; +} +/* ----------------------------------------------------------------------------- + Combo Box +----------------------------------------------------------------------------- */ +.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: #ffffff; +} +/* ----------------------------------------------------------------------------- + Textfield +----------------------------------------------------------------------------- */ +.LineEdit, +QLineEdit, +#TaskSheetItem, +#tasksRemoveBox, +#tasksAddBox { + background-color: #28292b; + border: 1 solid #262728; + border-radius: 2; + color: #d6d8dd; + selection-background-color: #5385a6; + selection-color: #ffffff; + 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 +----------------------------------------------------------------------------- */ +.CheckBox, +QCheckBox { + color: #d6d8dd; +} +.CheckBox:hover, +QCheckBox:hover, +.RadioButton:hover, +QRadioButton:hover { + color: #ffffff; +} +.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; + /* fix for QGroupBox */ + padding: 1; + width: 9; + /* fix for QMenu */ +} +.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; +} +/* ----------------------------------------------------------------------------- + Radio Button +----------------------------------------------------------------------------- */ +.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 +----------------------------------------------------------------------------- */ +.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: #ffffff; +} +.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 +----------------------------------------------------------------------------- */ +.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'); +} +/* ----------------------------------------------------------------------------- + Double Slider +----------------------------------------------------------------------------- */ +#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"); +} +/* ----------------------------------------------------------------------------- + File Browser +----------------------------------------------------------------------------- */ +/* Left Pane +----------------------------------------------------------------------------- */ +#DirTreeView { + background-color: #2d2f30; + alternate-background-color: #2d2f30; + border: 1 solid #212223; + border-right: 0; +} +/* Right Pane +----------------------------------------------------------------------------- */ +DvItemViewerPanel { + qproperty-TextColor: #d6d8dd; + qproperty-AlternateBackground: #3a3b3d; + qproperty-SelectedTextColor: #ffffff; + 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: #ffffff; + qproperty-SelectedItemBackground: #5385a6; + qproperty-FolderTextColor: #9fdaff; + qproperty-SelectedFolderTextColor: #ffffff; + alternate-background-color: #323435; + background-color: #2d2f30; + border: 1 solid #212223; +} +#FileDoesNotExistLabel { + color: #ff0000; +} +/* ----------------------------------------------------------------------------- + Scene Cast +----------------------------------------------------------------------------- */ +#SceneCast QToolBar { + border-top: 1 solid #212223; +} +#SceneCast QToolButton { + margin: 3 1 2 1; + padding: 1; +} +#CastBrowser { + border: 0; + margin: 0; +} +/* ----------------------------------------------------------------------------- + Level Strip +----------------------------------------------------------------------------- */ +#FilmStrip QComboBox { + border-radius: 0; + border-width: 0; +} +#FilmStrip QComboBox QAbstractItemView { + background-color: #414345; +} +/* ----------------------------------------------------------------------------- + Cleanup Settings +----------------------------------------------------------------------------- */ +#CleanupSettings #CleanupSettingsFrame { + margin-top: 2; + margin-bottom: 4; +} +#CleanupSettings QGroupBox { + margin-bottom: 3; +} +ParamsPage { + qproperty-TextColor: #d6d8dd; +} +/* ----------------------------------------------------------------------------- + Camera Settings +----------------------------------------------------------------------------- */ +#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'); +} +/* ----------------------------------------------------------------------------- + Output Settings +----------------------------------------------------------------------------- */ +#OutputSettingsLabel { + color: #9fdaff; +} +/* ----------------------------------------------------------------------------- + Misc +----------------------------------------------------------------------------- */ +PencilTestPopup { + min-height: 730px; + /* Allow for using a 768 screen */ + min-width: 512px; + /* some clipping will still occur on width, but this + allows for filling half of a 1024 screen */ +} +#MatchLineButton { + background-color: #66696c; +} +#MatchLineButton:checked { + background-color: #8c9093; + border: 2 solid #5385a6; + border-radius: 2; +} +#LargeSizedText { + font-size: 17px; +} +/* ----------------------------------------------------------------------------- + Unknowns + Legacy +----------------------------------------------------------------------------- */ +#StartupLabel { + padding: 3; +} +#StartupLabel:hover { + background: #5a5d5f; +} +QStatusBar { + background-color: #c0c0c0; +} +QStatusBar::item { + border: 0; +} +QStatusBar QLabel { + background-color: #c0c0c0; +} +QStatusBar #StatusBarLabel { + background-color: #ffffff; + padding: 1 3; +} +#TitleTxtLabel { + color: #9fdaff; +} +/* ----------------------------------------------------------------------------- + Style Editor +----------------------------------------------------------------------------- */ +#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; +} +/* -------------------------------------------------------------------------- */ +/* Horizontal QSlider */ +#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; +} +/* ----------------------------------------------------------------------------- + Palette Viewer / Studio Palette +----------------------------------------------------------------------------- */ +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; +} +/* ----------------------------------------------------------------------------- + Quick Renamer +----------------------------------------------------------------------------- */ +#WordButton { + padding-right: 0; + padding-left: 0; +} +/* ----------------------------------------------------------------------------- + Popup Windows +----------------------------------------------------------------------------- */ +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: #ffffff; +} +QDialog #dialogButtonFrame QPushButton:focus:hover { + background-color: #6c98b6; +} +QDialog #dialogButtonFrame QPushButton:focus:pressed { + background-color: #2b2c2d; + border-color: #262728; + color: #e4e5e9; +} +/* ----------------------------------------------------------------------------- + Scene Settings +----------------------------------------------------------------------------- */ +#SceneSettings QLabel { + color: #9fdaff; +} +/* ----------------------------------------------------------------------------- + Preferences +----------------------------------------------------------------------------- */ +#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: #ffffff; +} +/* ----------------------------------------------------------------------------- + Keyboard Shortcuts +----------------------------------------------------------------------------- */ +#ShortcutTree { + border: 1 solid #212223; +} +#ShortcutTree::item { + padding: 1 0; +} +#ShortcutTree QScrollBar:vertical { + width: 16; + margin-right: -1; +} +/* ----------------------------------------------------------------------------- + New Project / Configure Project Window +----------------------------------------------------------------------------- */ +ProjectPopup QLabel { + color: #9fdaff; +} +/* ----------------------------------------------------------------------------- + PencilTestPopup / CameraCapture Window +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + Schematic Viewer +----------------------------------------------------------------------------- */ +SchematicViewer { + qproperty-TextColor: #d6d8dd; + qproperty-VerticalLineColor: #222222; + 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'); +} +/* ----------------------------------------------------------------------------- + Schematic Node Viewer +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + FX Settings +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + Script Console +----------------------------------------------------------------------------- */ +#ScriptConsole { + font-family: 'Courier New', monospace; + border: 0; + color: #000000; + padding: 3; +} +#ScriptConsole QFrame { + background-color: #dcdcdc; +} +#ScriptConsole TPanelTitleBar { + background-color: #323435; +} +/* ----------------------------------------------------------------------------- + Task Viewer +----------------------------------------------------------------------------- */ +#TaskSheetItemLabel { + color: #d6d8dd; +} +#Tasks QToolBar { + border-bottom: 1 solid #212223; + margin: 0; + padding: 0; +} +#Tasks QToolBar QToolButton { + margin: 2 2 3 2; +} +/* ----------------------------------------------------------------------------- + Tool Bar +----------------------------------------------------------------------------- */ +#ToolBar QToolBar { + padding-left: 2; +} +/* ----------------------------------------------------------------------------- + Tool Options +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + ComboViewer / Viewer / FlipBook +----------------------------------------------------------------------------- */ +#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: #000000; +} +/* ----------------------------------------------------------------------------- + XSheet Viewer +----------------------------------------------------------------------------- */ +/* ScrollAreas (Row, Column and Cell) +----------------------------------------------------------------------------- */ +#xsheetArea, +#ScrollArea { + background-color: #2d2f30; + border: 0; +} +#xsheetScrollArea { + border: 0; +} +#cornerWidget QToolButton { + padding: 0; +} +/* xsheetColumnHeader (Context Menus) +----------------------------------------------------------------------------- */ +#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; +} +/* XSheet Spreadsheet +----------------------------------------------------------------------------- */ +XsheetViewer { + qproperty-TextColor: #d6d8dd; + qproperty-BGColor: #353638; + qproperty-LightLineColor: #262728; + qproperty-MarkerLineColor: #1E96C4; + qproperty-VerticalLineColor: #222222; + 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'); +} +/* XSheet Toolbar +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + Function Editor +----------------------------------------------------------------------------- */ +#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; +} +/* Function Editor Spreadsheet +----------------------------------------------------------------------------- */ +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: #222222; + 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; +} diff --git a/stuff/config/qss/Dark/Dark.qss b/stuff/config/qss/Dark/Dark.qss index 646d28d..90a5050 100644 --- a/stuff/config/qss/Dark/Dark.qss +++ b/stuff/config/qss/Dark/Dark.qss @@ -1 +1,1905 @@ -.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 +/* ----------------------------------------------------------------------------- + Component: Button Styles +----------------------------------------------------------------------------- */ +.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: #ffffff; +} +.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; +} +/* ----------------------------------------------------------------------------- + Component: Frames +----------------------------------------------------------------------------- */ +.frame, +.GroupBox, +#LoadLevelFrame, +#PsdSettingsGroupBox, +#CleanupSettingsFrame, +#OutputSettingsBox, +#OutputSettingsCameraBox, +#SolidLineFrame, +#FunctionParametersPanel, +QGroupBox { + border: 1 solid #161616; + border-radius: 2; +} +/* ----------------------------------------------------------------------------- + Component: Icons +----------------------------------------------------------------------------- */ +/* ----------------------------------------------------------------------------- + Component: Tabs +----------------------------------------------------------------------------- */ +.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; +} +/* ----------------------------------------------------------------------------- + Main +----------------------------------------------------------------------------- */ +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 +----------------------------------------------------------------------------- */ +#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: #ffffff; +} +/* ----------------------------------------------------------------------------- + Workspaces +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + Menu +----------------------------------------------------------------------------- */ +QMenu { + background-color: #303030; + border: 1 solid #161616; + padding: 2 0; +} +QMenu::item { + padding: 3 28; +} +QMenu::item:selected { + background-color: #5385a6; + color: #ffffff; +} +QMenu::item:checked { + color: #cecece; +} +QMenu::item:checked:selected { + background-color: #5385a6; + color: #ffffff; +} +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; +} +/* ----------------------------------------------------------------------------- + Titlebars +----------------------------------------------------------------------------- */ +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'); +} +/* ----------------------------------------------------------------------------- + Scrollbars +----------------------------------------------------------------------------- */ +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; +} +/* ----------------------------------------------------------------------------- + Tool Bars +----------------------------------------------------------------------------- */ +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; +} +/* -------------------------------------------------------------------------- */ +/* Scrollable QToolBar Buttons +/* -------------------------------------------------------------------------- */ +.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'); +} +/* ----------------------------------------------------------------------------- + Trees +----------------------------------------------------------------------------- */ +.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: #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/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; +} +/* ----------------------------------------------------------------------------- + Tab Systems +----------------------------------------------------------------------------- */ +#TabBarContainer { + background-color: #262626; +} +/* ----------------------------------------------------------------------------- + Push Button +----------------------------------------------------------------------------- */ +.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; +} +/* ----------------------------------------------------------------------------- + Combo Box +----------------------------------------------------------------------------- */ +.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: #ffffff; +} +/* ----------------------------------------------------------------------------- + Textfield +----------------------------------------------------------------------------- */ +.LineEdit, +QLineEdit, +#TaskSheetItem, +#tasksRemoveBox, +#tasksAddBox { + background-color: #1c1c1c; + border: 1 solid #3d3d3d; + border-radius: 2; + color: #cecece; + selection-background-color: #5385a6; + selection-color: #ffffff; + 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 +----------------------------------------------------------------------------- */ +.CheckBox, +QCheckBox { + color: #cecece; +} +.CheckBox:hover, +QCheckBox:hover, +.RadioButton:hover, +QRadioButton:hover { + color: #ffffff; +} +.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; + /* fix for QGroupBox */ + padding: 1; + width: 9; + /* fix for QMenu */ +} +.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; +} +/* ----------------------------------------------------------------------------- + Radio Button +----------------------------------------------------------------------------- */ +.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 +----------------------------------------------------------------------------- */ +.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: #ffffff; +} +.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 +----------------------------------------------------------------------------- */ +.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'); +} +/* ----------------------------------------------------------------------------- + Double Slider +----------------------------------------------------------------------------- */ +#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"); +} +/* ----------------------------------------------------------------------------- + File Browser +----------------------------------------------------------------------------- */ +/* Left Pane +----------------------------------------------------------------------------- */ +#DirTreeView { + background-color: #262626; + alternate-background-color: #262626; + border: 1 solid #161616; + border-right: 0; +} +/* Right Pane +----------------------------------------------------------------------------- */ +DvItemViewerPanel { + qproperty-TextColor: #cecece; + qproperty-AlternateBackground: #282828; + qproperty-SelectedTextColor: #ffffff; + 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: #ffffff; + qproperty-SelectedItemBackground: #5385a6; + qproperty-FolderTextColor: #9fdaff; + qproperty-SelectedFolderTextColor: #ffffff; + alternate-background-color: #2b2b2b; + background-color: #262626; + border: 1 solid #161616; +} +#FileDoesNotExistLabel { + color: #ff0000; +} +/* ----------------------------------------------------------------------------- + Scene Cast +----------------------------------------------------------------------------- */ +#SceneCast QToolBar { + border-top: 1 solid #161616; +} +#SceneCast QToolButton { + margin: 3 1 2 1; + padding: 1; +} +#CastBrowser { + border: 0; + margin: 0; +} +/* ----------------------------------------------------------------------------- + Level Strip +----------------------------------------------------------------------------- */ +#FilmStrip QComboBox { + border-radius: 0; + border-width: 0; +} +#FilmStrip QComboBox QAbstractItemView { + background-color: #303030; +} +/* ----------------------------------------------------------------------------- + Cleanup Settings +----------------------------------------------------------------------------- */ +#CleanupSettings #CleanupSettingsFrame { + margin-top: 2; + margin-bottom: 4; +} +#CleanupSettings QGroupBox { + margin-bottom: 3; +} +ParamsPage { + qproperty-TextColor: #cecece; +} +/* ----------------------------------------------------------------------------- + Camera Settings +----------------------------------------------------------------------------- */ +#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'); +} +/* ----------------------------------------------------------------------------- + Output Settings +----------------------------------------------------------------------------- */ +#OutputSettingsLabel { + color: #9fdaff; +} +/* ----------------------------------------------------------------------------- + Misc +----------------------------------------------------------------------------- */ +PencilTestPopup { + min-height: 730px; + /* Allow for using a 768 screen */ + min-width: 512px; + /* some clipping will still occur on width, but this + allows for filling half of a 1024 screen */ +} +#MatchLineButton { + background-color: #565656; +} +#MatchLineButton:checked { + background-color: #7d7d7d; + border: 2 solid #5385a6; + border-radius: 2; +} +#LargeSizedText { + font-size: 17px; +} +/* ----------------------------------------------------------------------------- + Unknowns + Legacy +----------------------------------------------------------------------------- */ +#StartupLabel { + padding: 3; +} +#StartupLabel:hover { + background: #4a4a4a; +} +QStatusBar { + background-color: #c0c0c0; +} +QStatusBar::item { + border: 0; +} +QStatusBar QLabel { + background-color: #c0c0c0; +} +QStatusBar #StatusBarLabel { + background-color: #ffffff; + padding: 1 3; +} +#TitleTxtLabel { + color: #9fdaff; +} +/* ----------------------------------------------------------------------------- + Style Editor +----------------------------------------------------------------------------- */ +#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; +} +/* -------------------------------------------------------------------------- */ +/* Horizontal QSlider */ +#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; +} +/* ----------------------------------------------------------------------------- + Palette Viewer / Studio Palette +----------------------------------------------------------------------------- */ +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; +} +/* ----------------------------------------------------------------------------- + Quick Renamer +----------------------------------------------------------------------------- */ +#WordButton { + padding-right: 0; + padding-left: 0; +} +/* ----------------------------------------------------------------------------- + Popup Windows +----------------------------------------------------------------------------- */ +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; +} +/* ----------------------------------------------------------------------------- + Scene Settings +----------------------------------------------------------------------------- */ +#SceneSettings QLabel { + color: #9fdaff; +} +/* ----------------------------------------------------------------------------- + Preferences +----------------------------------------------------------------------------- */ +#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: #ffffff; +} +/* ----------------------------------------------------------------------------- + Keyboard Shortcuts +----------------------------------------------------------------------------- */ +#ShortcutTree { + border: 1 solid #161616; +} +#ShortcutTree::item { + padding: 1 0; +} +#ShortcutTree QScrollBar:vertical { + width: 16; + margin-right: -1; +} +/* ----------------------------------------------------------------------------- + New Project / Configure Project Window +----------------------------------------------------------------------------- */ +ProjectPopup QLabel { + color: #9fdaff; +} +/* ----------------------------------------------------------------------------- + PencilTestPopup / CameraCapture Window +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + Schematic Viewer +----------------------------------------------------------------------------- */ +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'); +} +/* ----------------------------------------------------------------------------- + Schematic Node Viewer +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + FX Settings +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + Script Console +----------------------------------------------------------------------------- */ +#ScriptConsole { + font-family: 'Courier New', monospace; + border: 0; + color: #000000; + padding: 3; +} +#ScriptConsole QFrame { + background-color: #dcdcdc; +} +#ScriptConsole TPanelTitleBar { + background-color: #262626; +} +/* ----------------------------------------------------------------------------- + Task Viewer +----------------------------------------------------------------------------- */ +#TaskSheetItemLabel { + color: #cecece; +} +#Tasks QToolBar { + border-bottom: 1 solid #161616; + margin: 0; + padding: 0; +} +#Tasks QToolBar QToolButton { + margin: 2 2 3 2; +} +/* ----------------------------------------------------------------------------- + Tool Bar +----------------------------------------------------------------------------- */ +#ToolBar QToolBar { + padding-left: 2; +} +/* ----------------------------------------------------------------------------- + Tool Options +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + ComboViewer / Viewer / FlipBook +----------------------------------------------------------------------------- */ +#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: #000000; +} +/* ----------------------------------------------------------------------------- + XSheet Viewer +----------------------------------------------------------------------------- */ +/* ScrollAreas (Row, Column and Cell) +----------------------------------------------------------------------------- */ +#xsheetArea, +#ScrollArea { + background-color: #1c1c1c; + border: 0; +} +#xsheetScrollArea { + border: 0; +} +#cornerWidget QToolButton { + padding: 0; +} +/* xsheetColumnHeader (Context Menus) +----------------------------------------------------------------------------- */ +#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; +} +/* XSheet Spreadsheet +----------------------------------------------------------------------------- */ +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: #444444; + 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'); +} +/* XSheet Toolbar +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + Function Editor +----------------------------------------------------------------------------- */ +#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; +} +/* Function Editor Spreadsheet +----------------------------------------------------------------------------- */ +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; +} diff --git a/stuff/config/qss/Default/Default.qss b/stuff/config/qss/Default/Default.qss index cd9883e..a000ab6 100644 --- a/stuff/config/qss/Default/Default.qss +++ b/stuff/config/qss/Default/Default.qss @@ -1 +1,1905 @@ -.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 +/* ----------------------------------------------------------------------------- + Component: Button Styles +----------------------------------------------------------------------------- */ +.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: #ffffff; +} +.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; +} +/* ----------------------------------------------------------------------------- + Component: Frames +----------------------------------------------------------------------------- */ +.frame, +.GroupBox, +#LoadLevelFrame, +#PsdSettingsGroupBox, +#CleanupSettingsFrame, +#OutputSettingsBox, +#OutputSettingsCameraBox, +#SolidLineFrame, +#FunctionParametersPanel, +QGroupBox { + border: 1 solid #272727; + border-radius: 2; +} +/* ----------------------------------------------------------------------------- + Component: Icons +----------------------------------------------------------------------------- */ +/* ----------------------------------------------------------------------------- + Component: Tabs +----------------------------------------------------------------------------- */ +.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: #ffffff; + 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: #ffffff; + 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; +} +/* ----------------------------------------------------------------------------- + Main +----------------------------------------------------------------------------- */ +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 +----------------------------------------------------------------------------- */ +#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: #ffffff; +} +/* ----------------------------------------------------------------------------- + Workspaces +----------------------------------------------------------------------------- */ +#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: #ffffff; +} +#TopBarTab::tab:first { + border-left: 1 solid #272727; +} +#TopBarTab::tab:last { + border-right: 1 solid #272727; +} +/* ----------------------------------------------------------------------------- + Menu +----------------------------------------------------------------------------- */ +QMenu { + background-color: #484848; + border: 1 solid #272727; + padding: 2 0; +} +QMenu::item { + padding: 3 28; +} +QMenu::item:selected { + background-color: #5385a6; + color: #ffffff; +} +QMenu::item:checked { + color: #e6e6e6; +} +QMenu::item:checked:selected { + background-color: #5385a6; + color: #ffffff; +} +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; +} +/* ----------------------------------------------------------------------------- + Titlebars +----------------------------------------------------------------------------- */ +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'); +} +/* ----------------------------------------------------------------------------- + Scrollbars +----------------------------------------------------------------------------- */ +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; +} +/* ----------------------------------------------------------------------------- + Tool Bars +----------------------------------------------------------------------------- */ +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; +} +/* -------------------------------------------------------------------------- */ +/* Scrollable QToolBar Buttons +/* -------------------------------------------------------------------------- */ +.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'); +} +/* ----------------------------------------------------------------------------- + Trees +----------------------------------------------------------------------------- */ +.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: #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('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; +} +/* ----------------------------------------------------------------------------- + Tab Systems +----------------------------------------------------------------------------- */ +#TabBarContainer { + background-color: #393939; +} +/* ----------------------------------------------------------------------------- + Push Button +----------------------------------------------------------------------------- */ +.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: #555555; + border-color: #484848; + color: #808080; +} +#PushButton_NoPadding { + padding: 3; +} +/* ----------------------------------------------------------------------------- + Combo Box +----------------------------------------------------------------------------- */ +.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: #ffffff; +} +/* ----------------------------------------------------------------------------- + Textfield +----------------------------------------------------------------------------- */ +.LineEdit, +QLineEdit, +#TaskSheetItem, +#tasksRemoveBox, +#tasksAddBox { + background-color: #2f2f2f; + border: 1 solid #2c2c2c; + border-radius: 2; + color: #e6e6e6; + selection-background-color: #5385a6; + selection-color: #ffffff; + 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 +----------------------------------------------------------------------------- */ +.CheckBox, +QCheckBox { + color: #e6e6e6; +} +.CheckBox:hover, +QCheckBox:hover, +.RadioButton:hover, +QRadioButton:hover { + color: #ffffff; +} +.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; + /* fix for QGroupBox */ + padding: 1; + width: 9; + /* fix for QMenu */ +} +.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; +} +/* ----------------------------------------------------------------------------- + Radio Button +----------------------------------------------------------------------------- */ +.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 +----------------------------------------------------------------------------- */ +.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: #ffffff; +} +.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 +----------------------------------------------------------------------------- */ +.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'); +} +/* ----------------------------------------------------------------------------- + Double Slider +----------------------------------------------------------------------------- */ +#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"); +} +/* ----------------------------------------------------------------------------- + File Browser +----------------------------------------------------------------------------- */ +/* Left Pane +----------------------------------------------------------------------------- */ +#DirTreeView { + background-color: #343434; + alternate-background-color: #343434; + border: 1 solid #272727; + border-right: 0; +} +/* Right Pane +----------------------------------------------------------------------------- */ +DvItemViewerPanel { + qproperty-TextColor: #e6e6e6; + qproperty-AlternateBackground: #404040; + qproperty-SelectedTextColor: #ffffff; + 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: #ffffff; + qproperty-SelectedItemBackground: #5385a6; + qproperty-FolderTextColor: #9fdaff; + qproperty-SelectedFolderTextColor: #ffffff; + alternate-background-color: #393939; + background-color: #343434; + border: 1 solid #272727; +} +#FileDoesNotExistLabel { + color: #ff0000; +} +/* ----------------------------------------------------------------------------- + Scene Cast +----------------------------------------------------------------------------- */ +#SceneCast QToolBar { + border-top: 1 solid #272727; +} +#SceneCast QToolButton { + margin: 3 1 2 1; + padding: 1; +} +#CastBrowser { + border: 0; + margin: 0; +} +/* ----------------------------------------------------------------------------- + Level Strip +----------------------------------------------------------------------------- */ +#FilmStrip QComboBox { + border-radius: 0; + border-width: 0; +} +#FilmStrip QComboBox QAbstractItemView { + background-color: #484848; +} +/* ----------------------------------------------------------------------------- + Cleanup Settings +----------------------------------------------------------------------------- */ +#CleanupSettings #CleanupSettingsFrame { + margin-top: 2; + margin-bottom: 4; +} +#CleanupSettings QGroupBox { + margin-bottom: 3; +} +ParamsPage { + qproperty-TextColor: #e6e6e6; +} +/* ----------------------------------------------------------------------------- + Camera Settings +----------------------------------------------------------------------------- */ +#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'); +} +/* ----------------------------------------------------------------------------- + Output Settings +----------------------------------------------------------------------------- */ +#OutputSettingsLabel { + color: #9fdaff; +} +/* ----------------------------------------------------------------------------- + Misc +----------------------------------------------------------------------------- */ +PencilTestPopup { + min-height: 730px; + /* Allow for using a 768 screen */ + min-width: 512px; + /* some clipping will still occur on width, but this + allows for filling half of a 1024 screen */ +} +#MatchLineButton { + background-color: #6e6e6e; +} +#MatchLineButton:checked { + background-color: #949494; + border: 2 solid #5385a6; + border-radius: 2; +} +#LargeSizedText { + font-size: 17px; +} +/* ----------------------------------------------------------------------------- + Unknowns + Legacy +----------------------------------------------------------------------------- */ +#StartupLabel { + padding: 3; +} +#StartupLabel:hover { + background: #626262; +} +QStatusBar { + background-color: #c0c0c0; +} +QStatusBar::item { + border: 0; +} +QStatusBar QLabel { + background-color: #c0c0c0; +} +QStatusBar #StatusBarLabel { + background-color: #ffffff; + padding: 1 3; +} +#TitleTxtLabel { + color: #9fdaff; +} +/* ----------------------------------------------------------------------------- + Style Editor +----------------------------------------------------------------------------- */ +#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; +} +/* -------------------------------------------------------------------------- */ +/* Horizontal QSlider */ +#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; +} +/* ----------------------------------------------------------------------------- + Palette Viewer / Studio Palette +----------------------------------------------------------------------------- */ +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; +} +/* ----------------------------------------------------------------------------- + Quick Renamer +----------------------------------------------------------------------------- */ +#WordButton { + padding-right: 0; + padding-left: 0; +} +/* ----------------------------------------------------------------------------- + Popup Windows +----------------------------------------------------------------------------- */ +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: #ffffff; +} +QDialog #dialogButtonFrame QPushButton:focus:hover { + background-color: #6c98b6; +} +QDialog #dialogButtonFrame QPushButton:focus:pressed { + background-color: #313131; + border-color: #2c2c2c; + color: #f3f3f3; +} +/* ----------------------------------------------------------------------------- + Scene Settings +----------------------------------------------------------------------------- */ +#SceneSettings QLabel { + color: #9fdaff; +} +/* ----------------------------------------------------------------------------- + Preferences +----------------------------------------------------------------------------- */ +#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: #ffffff; +} +/* ----------------------------------------------------------------------------- + Keyboard Shortcuts +----------------------------------------------------------------------------- */ +#ShortcutTree { + border: 1 solid #272727; +} +#ShortcutTree::item { + padding: 1 0; +} +#ShortcutTree QScrollBar:vertical { + width: 16; + margin-right: -1; +} +/* ----------------------------------------------------------------------------- + New Project / Configure Project Window +----------------------------------------------------------------------------- */ +ProjectPopup QLabel { + color: #9fdaff; +} +/* ----------------------------------------------------------------------------- + PencilTestPopup / CameraCapture Window +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + Schematic Viewer +----------------------------------------------------------------------------- */ +SchematicViewer { + qproperty-TextColor: #e6e6e6; + qproperty-VerticalLineColor: #222222; + 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'); +} +/* ----------------------------------------------------------------------------- + Schematic Node Viewer +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + FX Settings +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + Script Console +----------------------------------------------------------------------------- */ +#ScriptConsole { + font-family: 'Courier New', monospace; + border: 0; + color: #000000; + padding: 3; +} +#ScriptConsole QFrame { + background-color: #dcdcdc; +} +#ScriptConsole TPanelTitleBar { + background-color: #393939; +} +/* ----------------------------------------------------------------------------- + Task Viewer +----------------------------------------------------------------------------- */ +#TaskSheetItemLabel { + color: #e6e6e6; +} +#Tasks QToolBar { + border-bottom: 1 solid #272727; + margin: 0; + padding: 0; +} +#Tasks QToolBar QToolButton { + margin: 2 2 3 2; +} +/* ----------------------------------------------------------------------------- + Tool Bar +----------------------------------------------------------------------------- */ +#ToolBar QToolBar { + padding-left: 2; +} +/* ----------------------------------------------------------------------------- + Tool Options +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + ComboViewer / Viewer / FlipBook +----------------------------------------------------------------------------- */ +#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: #000000; +} +/* ----------------------------------------------------------------------------- + XSheet Viewer +----------------------------------------------------------------------------- */ +/* ScrollAreas (Row, Column and Cell) +----------------------------------------------------------------------------- */ +#xsheetArea, +#ScrollArea { + background-color: #343434; + border: 0; +} +#xsheetScrollArea { + border: 0; +} +#cornerWidget QToolButton { + padding: 0; +} +/* xsheetColumnHeader (Context Menus) +----------------------------------------------------------------------------- */ +#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; +} +/* XSheet Spreadsheet +----------------------------------------------------------------------------- */ +XsheetViewer { + qproperty-TextColor: #e6e6e6; + qproperty-BGColor: #3b3b3b; + qproperty-LightLineColor: #2c2c2c; + qproperty-MarkerLineColor: #1E96C4; + qproperty-VerticalLineColor: #222222; + 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'); +} +/* XSheet Toolbar +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + Function Editor +----------------------------------------------------------------------------- */ +#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; +} +/* Function Editor Spreadsheet +----------------------------------------------------------------------------- */ +FunctionPanel { + qproperty-BGColor: #3b3b3b; + qproperty-ValueLineColor: #2f2f2f; + qproperty-FrameLineColor: #2f2f2f; + qproperty-OtherCurvesColor: #888888; + qproperty-RulerBackground: #333333; + 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: #222222; + 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 #333333; + 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; +} 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/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..12aafa9 100644 --- a/stuff/config/qss/Light/Light.qss +++ b/stuff/config/qss/Light/Light.qss @@ -1 +1,1906 @@ -.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 +/* ----------------------------------------------------------------------------- + Component: Button Styles +----------------------------------------------------------------------------- */ +.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: #000000; + 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: #bbbbbb; + border-color: #525252; + color: #000000; +} +.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: #000000; +} +.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: #bbbbbb; +} +.button-flat:pressed, +PaletteViewer QToolBar QToolButton:pressed { + background-color: #404040; +} +/* ----------------------------------------------------------------------------- + Component: Frames +----------------------------------------------------------------------------- */ +.frame, +.GroupBox, +#LoadLevelFrame, +#PsdSettingsGroupBox, +#CleanupSettingsFrame, +#OutputSettingsBox, +#OutputSettingsCameraBox, +#SolidLineFrame, +#FunctionParametersPanel, +QGroupBox { + border: 1 solid #404040; + border-radius: 2; +} +/* ----------------------------------------------------------------------------- + Component: Icons +----------------------------------------------------------------------------- */ +/* ----------------------------------------------------------------------------- + Component: Tabs +----------------------------------------------------------------------------- */ +.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; +} +/* ----------------------------------------------------------------------------- + Main +----------------------------------------------------------------------------- */ +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 +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + Workspaces +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + Menu +----------------------------------------------------------------------------- */ +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; +} +/* ----------------------------------------------------------------------------- + Titlebars +----------------------------------------------------------------------------- */ +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'); +} +/* ----------------------------------------------------------------------------- + Scrollbars +----------------------------------------------------------------------------- */ +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 #555555; + 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; +} +/* ----------------------------------------------------------------------------- + Tool Bars +----------------------------------------------------------------------------- */ +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; +} +/* -------------------------------------------------------------------------- */ +/* Scrollable QToolBar Buttons +/* -------------------------------------------------------------------------- */ +.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: #bbbbbb; +} +.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'); +} +/* ----------------------------------------------------------------------------- + Trees +----------------------------------------------------------------------------- */ +.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; +} +/* ----------------------------------------------------------------------------- + Tab Systems +----------------------------------------------------------------------------- */ +#TabBarContainer { + background-color: #6c6c6c; +} +/* ----------------------------------------------------------------------------- + Push Button +----------------------------------------------------------------------------- */ +.Button, +QPushButton, +.ComboBox, +.ComboBox:checked, +QComboBox, +QComboBox:checked { + background-color: #a6a6a6; + border: 1 solid #525252; + border-radius: 2; + color: #000000; + 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: #bbbbbb; + border-color: #525252; + color: #000000; +} +.Button:pressed, +QPushButton:pressed, +#ViewerFpsSlider::sub-line:horizontal:pressed, +#ViewerFpsSlider::add-line:horizontal:pressed { + background-color: #e1e1e1; + border-color: #525252; + color: #000000; +} +.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; +} +/* ----------------------------------------------------------------------------- + Combo Box +----------------------------------------------------------------------------- */ +.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; +} +/* ----------------------------------------------------------------------------- + Textfield +----------------------------------------------------------------------------- */ +.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 +----------------------------------------------------------------------------- */ +.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; + /* fix for QGroupBox */ + padding: 1; + width: 9; + /* fix for QMenu */ +} +.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; +} +/* ----------------------------------------------------------------------------- + Radio Button +----------------------------------------------------------------------------- */ +.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 +----------------------------------------------------------------------------- */ +.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 +----------------------------------------------------------------------------- */ +.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'); +} +/* ----------------------------------------------------------------------------- + Double Slider +----------------------------------------------------------------------------- */ +#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"); +} +/* ----------------------------------------------------------------------------- + File Browser +----------------------------------------------------------------------------- */ +/* Left Pane +----------------------------------------------------------------------------- */ +#DirTreeView { + background-color: #949494; + alternate-background-color: #949494; + border: 1 solid #404040; + border-right: 0; +} +/* Right Pane +----------------------------------------------------------------------------- */ +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: #ff0000; +} +/* ----------------------------------------------------------------------------- + Scene Cast +----------------------------------------------------------------------------- */ +#SceneCast QToolBar { + border-top: 1 solid #404040; +} +#SceneCast QToolButton { + margin: 3 1 2 1; + padding: 1; +} +#CastBrowser { + border: 0; + margin: 0; +} +/* ----------------------------------------------------------------------------- + Level Strip +----------------------------------------------------------------------------- */ +#FilmStrip QComboBox { + border-radius: 0; + border-width: 0; +} +#FilmStrip QComboBox QAbstractItemView { + background-color: #949494; +} +/* ----------------------------------------------------------------------------- + Cleanup Settings +----------------------------------------------------------------------------- */ +#CleanupSettings #CleanupSettingsFrame { + margin-top: 2; + margin-bottom: 4; +} +#CleanupSettings QGroupBox { + margin-bottom: 3; +} +ParamsPage { + qproperty-TextColor: #000; +} +/* ----------------------------------------------------------------------------- + Camera Settings +----------------------------------------------------------------------------- */ +#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: #000000; +} +#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'); +} +/* ----------------------------------------------------------------------------- + Output Settings +----------------------------------------------------------------------------- */ +#OutputSettingsLabel { + color: #000000; +} +/* ----------------------------------------------------------------------------- + Misc +----------------------------------------------------------------------------- */ +PencilTestPopup { + min-height: 730px; + /* Allow for using a 768 screen */ + min-width: 512px; + /* some clipping will still occur on width, but this + allows for filling half of a 1024 screen */ +} +#MatchLineButton { + background-color: #a6a6a6; +} +#MatchLineButton:checked { + background-color: #cdcdcd; + border: 2 solid #225baf; + border-radius: 2; +} +#LargeSizedText { + font-size: 17px; +} +/* ----------------------------------------------------------------------------- + Unknowns + Legacy +----------------------------------------------------------------------------- */ +#StartupLabel { + padding: 3; +} +#StartupLabel:hover { + background: #9a9a9a; +} +QStatusBar { + background-color: #c0c0c0; +} +QStatusBar::item { + border: 0; +} +QStatusBar QLabel { + background-color: #c0c0c0; +} +QStatusBar #StatusBarLabel { + background-color: #ffffff; + padding: 1 3; +} +#TitleTxtLabel { + color: #000000; +} +/* ----------------------------------------------------------------------------- + Style Editor +----------------------------------------------------------------------------- */ +#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; +} +/* -------------------------------------------------------------------------- */ +/* Horizontal QSlider */ +#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; +} +/* ----------------------------------------------------------------------------- + Palette Viewer / Studio Palette +----------------------------------------------------------------------------- */ +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; +} +/* ----------------------------------------------------------------------------- + Quick Renamer +----------------------------------------------------------------------------- */ +#WordButton { + padding-right: 0; + padding-left: 0; +} +/* ----------------------------------------------------------------------------- + Popup Windows +----------------------------------------------------------------------------- */ +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: #000000; +} +QDialog #dialogButtonFrame QPushButton:focus:hover { + background-color: #ced5e0; +} +QDialog #dialogButtonFrame QPushButton:focus:pressed { + background-color: #e1e1e1; + border-color: #525252; + color: #000000; +} +/* ----------------------------------------------------------------------------- + Scene Settings +----------------------------------------------------------------------------- */ +#SceneSettings QLabel { + color: #000000; +} +/* ----------------------------------------------------------------------------- + Preferences +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + Keyboard Shortcuts +----------------------------------------------------------------------------- */ +#ShortcutTree { + border: 1 solid #404040; +} +#ShortcutTree::item { + padding: 1 0; +} +#ShortcutTree QScrollBar:vertical { + width: 16; + margin-right: -1; +} +/* ----------------------------------------------------------------------------- + New Project / Configure Project Window +----------------------------------------------------------------------------- */ +ProjectPopup QLabel { + color: #000000; +} +/* ----------------------------------------------------------------------------- + PencilTestPopup / CameraCapture Window +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + Schematic Viewer +----------------------------------------------------------------------------- */ +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'); +} +/* ----------------------------------------------------------------------------- + Schematic Node Viewer +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + FX Settings +----------------------------------------------------------------------------- */ +#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: #000000; +} +#FxSettingsHelpButton { + background-color: #80a0dc; + color: #000; + padding-top: 0; + padding-bottom: 0; +} +#FxSettingsHelpButton:hover { + background-color: #a8bee7; +} +/* ----------------------------------------------------------------------------- + Script Console +----------------------------------------------------------------------------- */ +#ScriptConsole { + font-family: 'Courier New', monospace; + border: 0; + color: #000000; + padding: 3; +} +#ScriptConsole QFrame { + background-color: #dcdcdc; +} +#ScriptConsole TPanelTitleBar { + background-color: #5a5a5a; +} +/* ----------------------------------------------------------------------------- + Task Viewer +----------------------------------------------------------------------------- */ +#TaskSheetItemLabel { + color: #000; +} +#Tasks QToolBar { + border-bottom: 1 solid #404040; + margin: 0; + padding: 0; +} +#Tasks QToolBar QToolButton { + margin: 2 2 3 2; +} +/* ----------------------------------------------------------------------------- + Tool Bar +----------------------------------------------------------------------------- */ +#ToolBar QToolBar { + padding-left: 2; +} +/* ----------------------------------------------------------------------------- + Tool Options +----------------------------------------------------------------------------- */ +#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: #bbbbbb; + border-color: #525252; +} +#expandButton:checked:pressed { + background-color: #e1e1e1; + border-color: #525252; +} +/* ----------------------------------------------------------------------------- + ComboViewer / Viewer / FlipBook +----------------------------------------------------------------------------- */ +#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: #000000; +} +/* ----------------------------------------------------------------------------- + XSheet Viewer +----------------------------------------------------------------------------- */ +/* ScrollAreas (Row, Column and Cell) +----------------------------------------------------------------------------- */ +#xsheetArea, +#ScrollArea { + background-color: #6c6c6c; + border: 0; +} +#xsheetScrollArea { + border: 0; +} +#cornerWidget QToolButton { + padding: 0; +} +/* xsheetColumnHeader (Context Menus) +----------------------------------------------------------------------------- */ +#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; +} +/* XSheet Spreadsheet +----------------------------------------------------------------------------- */ +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: #ffffff; + 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'); +} +/* XSheet Toolbar +----------------------------------------------------------------------------- */ +#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; +} +/* ----------------------------------------------------------------------------- + Function Editor +----------------------------------------------------------------------------- */ +#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; +} +/* Function Editor Spreadsheet +----------------------------------------------------------------------------- */ +FunctionPanel { + qproperty-BGColor: #5a5a5a; + qproperty-ValueLineColor: #4d4d4d; + qproperty-FrameLineColor: #4d4d4d; + qproperty-OtherCurvesColor: #c5c5c5; + qproperty-RulerBackground: #676767; + qproperty-TextColor: #000; + qproperty-SubColor: #ffffff; + 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: #ffffff; + 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; +} 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/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/tfx/tmacrofx.cpp b/toonz/sources/common/tfx/tmacrofx.cpp index c643533..2759545 100644 --- a/toonz/sources/common/tfx/tmacrofx.cpp +++ b/toonz/sources/common/tfx/tmacrofx.cpp @@ -492,6 +492,9 @@ 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); } else if (tagName == "ports") { int i = 0; while (is.matchTag(tagName)) { @@ -533,7 +536,6 @@ void TMacroFx::loadData(TIStream &is) { throw TException("unexpected tag " + tagName); is.closeChild(); } - collectParams(this); } //-------------------------------------------------- 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/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/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/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/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/tcommon.h b/toonz/sources/include/tcommon.h index d08803a..9ab7690 100644 --- a/toonz/sources/include/tcommon.h +++ b/toonz/sources/include/tcommon.h @@ -168,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/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/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/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/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/functionsheet.h b/toonz/sources/include/toonzqt/functionsheet.h index 5eabfc5..7bf4c0d 100644 --- a/toonz/sources/include/toonzqt/functionsheet.h +++ b/toonz/sources/include/toonzqt/functionsheet.h @@ -124,6 +124,11 @@ 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); + 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..1538523 100644 --- a/toonz/sources/include/toonzqt/fxschematicnode.h +++ b/toonz/sources/include/toonzqt/fxschematicnode.h @@ -365,6 +365,7 @@ public: protected: void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *me) override; + void mousePressEvent(QGraphicsSceneMouseEvent *me) override; }; //***************************************************** @@ -384,6 +385,7 @@ public: protected: void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *me) override; + void mousePressEvent(QGraphicsSceneMouseEvent *me) override; }; //***************************************************** @@ -408,6 +410,7 @@ public: protected: void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *me) override; + void mousePressEvent(QGraphicsSceneMouseEvent *me) override; protected slots: @@ -441,6 +444,7 @@ public: protected: void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *me) override; + void mousePressEvent(QGraphicsSceneMouseEvent *me) override; protected slots: @@ -479,6 +483,7 @@ public: protected: void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *me) override; + void mousePressEvent(QGraphicsSceneMouseEvent *me) override; private: void renameObject(const TStageObjectId &id, std::string name); @@ -517,6 +522,7 @@ public: protected: void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *me) override; + void mousePressEvent(QGraphicsSceneMouseEvent *me) override; protected slots: @@ -575,6 +581,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/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/schematicviewer.h b/toonz/sources/include/toonzqt/schematicviewer.h index a50608e..8ba1807 100644 --- a/toonz/sources/include/toonzqt/schematicviewer.h +++ b/toonz/sources/include/toonzqt/schematicviewer.h @@ -134,7 +134,7 @@ public: SchematicSceneViewer(QWidget *parent); ~SchematicSceneViewer(); - void zoomQt(bool zoomin, bool resetZoom); + void zoomQt(bool zoomin, bool resetView); void panQt(const QPointF &delta); QPointF getOldScenePos() { return m_oldScenePos; } @@ -160,10 +160,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/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/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/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/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_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..cd8499b 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 //================================================================== @@ -184,11 +184,12 @@ public: , 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); + 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); @@ -303,13 +304,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 +322,7 @@ void doComputeT(TRasterPT ras, TPointD posTrasf, } ras->unlock(); } -} +} // namespace //================================================================== @@ -337,10 +338,10 @@ 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; @@ -465,12 +466,12 @@ public: // , 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 = TSpectrumParamP(tArrayCount(colors), colors); + 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); @@ -532,12 +533,12 @@ 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, @@ -631,7 +632,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 +641,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/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/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 bfef22e..62ae7a2 100644 --- a/toonz/sources/tnztools/CMakeLists.txt +++ b/toonz/sources/tnztools/CMakeLists.txt @@ -3,6 +3,7 @@ set(MOC_HEADERS edittoolgadgets.h filltool.h fullcolorbrushtool.h + fullcolorfilltool.h plastictool.h skeletonsubtools.h tooloptionscontrols.h @@ -58,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/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/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 f1a569d..a4a2094 100644 --- a/toonz/sources/tnztools/plastictool_build.cpp +++ b/toonz/sources/tnztools/plastictool_build.cpp @@ -15,7 +15,6 @@ // tcg includes #include "tcg/tcg_point_ops.h" #include "tcg/tcg_function_types.h" -#include "tcg/tcg_iterator_ops.h" #include "plastictool.h" @@ -562,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); @@ -575,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/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/tooloptions.cpp b/toonz/sources/tnztools/tooloptions.cpp index 3a0a997..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" @@ -124,7 +125,8 @@ ToolOptionsBox::ToolOptionsBox(QWidget *parent, bool isScrollable) ToolOptionsBox::~ToolOptionsBox() { std::for_each(m_controls.begin(), m_controls.end(), std::default_delete()); - std::for_each(m_labels.begin(), m_labels.end(), std::default_delete()); + std::for_each(m_labels.begin(), m_labels.end(), + std::default_delete()); } //----------------------------------------------------------------------------- @@ -217,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"); @@ -522,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"); @@ -653,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); @@ -1051,7 +1064,7 @@ void ArrowToolOptionsBox::onStageObjectChange() { updateStatus(); } //----------------------------------------------------------------------------- /*! update the object list in combobox -*/ + */ void ArrowToolOptionsBox::updateStageObjectComboItems() { // clear items m_currentStageObjectCombo->clear(); @@ -1080,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(); @@ -1103,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; @@ -1281,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)), @@ -1609,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))); @@ -1629,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); } //============================================================================= @@ -1673,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") { @@ -2276,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); } @@ -2326,7 +2358,7 @@ void TapeToolOptionsBox::onJoinStrokesModeChanged() { //----------------------------------------------------------------------------- /*! Label with background color -*/ + */ class RGBLabel final : public QWidget { QColor m_color; @@ -2365,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())); } }; @@ -2637,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 //----------------------------------------------------------------------------- @@ -2711,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 @@ -2727,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); @@ -2746,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/toonzrasterbrushtool.cpp b/toonz/sources/tnztools/toonzrasterbrushtool.cpp index b632221..3bf9d7d 100644 --- a/toonz/sources/tnztools/toonzrasterbrushtool.cpp +++ b/toonz/sources/tnztools/toonzrasterbrushtool.cpp @@ -2081,6 +2081,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/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/colormodelviewer.cpp b/toonz/sources/toonz/colormodelviewer.cpp index 9bd2029..5323e93 100644 --- a/toonz/sources/toonz/colormodelviewer.cpp +++ b/toonz/sources/toonz/colormodelviewer.cpp @@ -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())); 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/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/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/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..9a924e5 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")); + 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())); + } - if (m_flipbook->isFreezed()) { - action = menu->addAction(tr("Unfreeze Preview")); + 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()) @@ -557,7 +582,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 +621,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 +685,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 +763,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 +858,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 = @@ -831,7 +870,7 @@ void ImageViewer::setPickedColorToStyleEditor(const TPixel32 &color) { //--------------------------------------------------------------------------------------------- /*! rgb picking -*/ + */ void ImageViewer::pickColor(QMouseEvent *event, bool putValueToStyleEditor) { if (!m_isHistogramEnable) return; if (!m_histogramPopup->isVisible()) return; @@ -875,7 +914,7 @@ 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) { if (!m_isHistogramEnable) return; if (!m_histogramPopup->isVisible()) return; @@ -939,6 +978,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 +996,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 +1048,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 +1079,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(); } //----------------------------------------------------------------------------- @@ -1168,9 +1266,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 +1469,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..ecdb095 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,15 @@ 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; + int getDragType(const TPoint &pos, const TRect &loadBox); void updateLoadbox(const TPoint &curPos); void updateCursor(const TPoint &curPos); @@ -96,6 +109,7 @@ public: */ void hideHistogram(); void zoomQt(bool forward, bool reset); + void resetZoom(); void setIsRemakingPreviewFx(bool on) { m_isRemakingPreviewFx = on; @@ -127,6 +141,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 +154,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/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/mainwindow.cpp b/toonz/sources/toonz/mainwindow.cpp index 289f81a..e451ad2 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" @@ -484,14 +485,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 +527,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)); @@ -1148,7 +1154,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 +1434,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,7 +1623,7 @@ 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"), ""); @@ -2094,8 +2107,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 +2121,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 +2183,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 +2348,8 @@ void MainWindow::onQuit() { close(); } // RecentFiles //============================================================================= -RecentFiles::RecentFiles() : m_recentScenes(), m_recentLevels() {} +RecentFiles::RecentFiles() + : m_recentScenes(), m_recentSceneProjects(), m_recentLevels() {} //----------------------------------------------------------------------------- @@ -2328,17 +2364,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 +2398,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 +2411,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 +2430,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 +2473,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 +2526,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 +2536,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 +2565,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..ebb09f4 100644 --- a/toonz/sources/toonz/mainwindow.h +++ b/toonz/sources/toonz/mainwindow.h @@ -175,6 +175,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 +211,7 @@ signals: class RecentFiles { friend class StartupPopup; QList m_recentScenes; + QList m_recentSceneProjects; QList m_recentLevels; QList m_recentFlipbookImages; @@ -219,10 +223,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/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..fdf6dfe 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); + + QPalette palette = this->palette(); + palette.setColor(QPalette::Background, Qt::black); + setPalette(palette); -void MyViewFinder::paintEvent(QPaintEvent* event) { + 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) @@ -1858,12 +2230,13 @@ void PencilTestPopup::showEvent(QShowEvent* event) { //----------------------------------------------------------------------------- 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 +2263,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 +2275,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 +2307,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 +2324,7 @@ void PencilTestPopup::onCaptureWhiteBGButtonPressed() { //----------------------------------------------------------------------------- void PencilTestPopup::onOnionCBToggled(bool on) { - m_cameraViewfinder->setShowOnionSkin(on); + m_videoWidget->setShowOnionSkin(on); m_onionOpacityFld->setEnabled(on); } @@ -1994,13 +2386,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 +2397,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 +2429,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 +2444,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 +2492,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 */ @@ -2153,9 +2545,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; @@ -2176,12 +2567,28 @@ bool PencilTestPopup::importImage(QImage& image) { 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 +2600,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 +2727,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 +2756,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 +2844,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 +2915,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 +2935,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 +2953,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; @@ -2568,6 +2986,33 @@ void PencilTestPopup::onSceneSwitched() { //----------------------------------------------------------------------------- +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(); +} + +//----------------------------------------------------------------------------- + OpenPopupCommandHandler openPencilTestPopup(MI_PencilTest); // specialized in order to call openSaveInFolderPopup() diff --git a/toonz/sources/toonz/penciltestpopup.h b/toonz/sources/toonz/penciltestpopup.h index 0ebee84..453605e 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,19 @@ 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; void processImage(QImage& procImage); - bool importImage(QImage& image); + bool importImage(QImage image); void setToNextNewLevel(); void updateLevelNameAndFrame(std::wstring levelName); @@ -230,12 +332,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 +347,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 +364,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 73c23e4..5a88c82 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); 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/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..75e3f97 100644 --- a/toonz/sources/toonz/rendercommand.cpp +++ b/toonz/sources/toonz/rendercommand.cpp @@ -515,7 +515,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 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..3e50de4 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")); @@ -1635,7 +1715,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 +1877,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 +1900,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 +2077,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 +2097,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 +2119,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 +2183,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 +2212,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 +2230,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 +2292,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 +2406,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 +2466,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 +2585,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..ec2ccb3 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,8 @@ class SceneViewer final : public GLWidgetForHighDpi, // updated in drawScene() and used in GLInvalidateRect() TRectD m_guidedDrawingBBox; + double m_rotationAngle[2]; + public: enum ReferenceMode { NORMAL_REFERENCE = 1, @@ -394,6 +397,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 c44b1d1..9a5f097 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; @@ -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 @@ -969,6 +971,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) { @@ -1050,71 +1053,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; } @@ -1184,11 +1186,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; } @@ -1213,6 +1215,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( @@ -1520,10 +1537,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(); + } } //----------------------------------------------------------------------------- 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/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/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..1f962f9 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; diff --git a/toonz/sources/toonz/xshcellviewer.cpp b/toonz/sources/toonz/xshcellviewer.cpp index 745e96f..5298bb8 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); @@ -828,7 +808,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; @@ -1794,10 +1774,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 = @@ -1897,8 +1877,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 +1985,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 +2017,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 +2038,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 +2049,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 +2182,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 +2512,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 +2677,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 +2693,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 +2731,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 && @@ -2879,10 +2867,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 +3119,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 +3131,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 +3173,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 +3262,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 +3511,4 @@ void CellArea::onStepChanged(QAction *act) { //----------------------------------------------------------------------------- -} // namespace XsheetGUI; +} // namespace XsheetGUI diff --git a/toonz/sources/toonz/xsheetdragtool.cpp b/toonz/sources/toonz/xsheetdragtool.cpp index f8e3ce6..3523a84 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); } //============================================================================= 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..0c085df 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" @@ -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(); 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/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/doubleparamcmd.cpp b/toonz/sources/toonzlib/doubleparamcmd.cpp index 2fa15db..bd9cc30 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" @@ -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)); + 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..e21e9ae 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 @@ -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/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/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/tcenterlinecolors.cpp b/toonz/sources/toonzlib/tcenterlinecolors.cpp index cc08b42..478fc86 100644 --- a/toonz/sources/toonzlib/tcenterlinecolors.cpp +++ b/toonz/sources/toonzlib/tcenterlinecolors.cpp @@ -154,8 +154,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 +177,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 @@ -254,8 +257,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 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..54ee683 100644 --- a/toonz/sources/toonzlib/tproject.cpp +++ b/toonz/sources/toonzlib/tproject.cpp @@ -885,8 +885,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); @@ -919,7 +918,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; 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/txsheet.cpp b/toonz/sources/toonzlib/txsheet.cpp index 849cea3..1bb8571 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; @@ -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/txshsimplelevel.cpp b/toonz/sources/toonzlib/txshsimplelevel.cpp index b22ae35..ad03350 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(); @@ -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; 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 73f14e7..3c1a329 100644 --- a/toonz/sources/toonzqt/CMakeLists.txt +++ b/toonz/sources/toonzqt/CMakeLists.txt @@ -45,6 +45,7 @@ set(MOC_HEADERS ../include/toonzqt/paletteviewer.h ../include/toonzqt/paletteviewergui.h ../include/toonzqt/paramfield.h + ../include/toonzqt/planeviewer.h ../include/toonzqt/popupbutton.h ../include/toonzqt/schematicgroupeditor.h ../include/toonzqt/schematicnode.h @@ -92,7 +93,6 @@ set(HEADERS ../include/toonzqt/lutcalibrator.h ../include/toonzqt/multipleselection.h ../include/toonzqt/pickrgbutils.h - ../include/toonzqt/planeviewer.h ../include/toonzqt/rasterimagedata.h ../include/toonzqt/selection.h ../include/toonzqt/selectioncommandids.h diff --git a/toonz/sources/toonzqt/dvdialog.cpp b/toonz/sources/toonzqt/dvdialog.cpp index ca87760..76ca66c 100644 --- a/toonz/sources/toonzqt/dvdialog.cpp +++ b/toonz/sources/toonzqt/dvdialog.cpp @@ -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,17 +344,8 @@ void Dialog::moveEvent(QMoveEvent *e) { void Dialog::resizeEvent(QResizeEvent *e) { if (Preferences::instance()->getCurrentLanguage() != "English") { QSize t = this->size(); - for (QLabel *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())); } //----------------------------------------------------------------------------- @@ -380,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; @@ -435,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; @@ -445,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; @@ -647,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); @@ -686,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); @@ -718,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); @@ -749,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]); @@ -759,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); @@ -772,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); @@ -788,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); @@ -1356,7 +1348,7 @@ QString DVGui::getText(const QString &title, const QString &labelText, dialog.addButtonBarWidget(okBtn, cancelBtn); - int ret = dialog.exec(); + int ret = dialog.exec(); if (ok) *ok = (ret == QDialog::Accepted); return nameFld->text(); @@ -1377,7 +1369,7 @@ bool isStyleIdInPalette(int styleId, const TPalette *palette) { } return false; } -} +} // namespace //----------------------------------------------------------------------------- diff --git a/toonz/sources/toonzqt/functionsegmentviewer.cpp b/toonz/sources/toonzqt/functionsegmentviewer.cpp index ba8d158..fb16356 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)); @@ -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/functionsheet.cpp b/toonz/sources/toonzqt/functionsheet.cpp index 3b50a52..7026ef3 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" @@ -579,6 +580,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 +594,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, KeyRange, CycleRange } drawValue = None; QRect cellRect(x0, ya, x1 - x0 + 1, yb - ya + 1); QRect borderRect(x0, ya, 7, yb - ya + 1); @@ -622,8 +633,42 @@ void FunctionSheetCellViewer::drawCells(QPainter &painter, int r0, int c0, } } + drawValue = KeyRange; + + } + // 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 == KeyRange) + painter.setPen(getViewer()->getTextColor()); + else { + QColor semiTranspTextColor = getViewer()->getTextColor(); + semiTranspTextColor.setAlpha(128); + painter.setPen(semiTranspTextColor); + } /*--- 整数から小数点以下3桁以内の場合はそれ以降の0000を描かない ---*/ QString text; @@ -653,19 +698,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 == KeyRange); font.setPixelSize(12); painter.setFont(font); painter.drawText(cellRect.adjusted(10, 0, 0, 0), - Qt::AlignVCenter | Qt::AlignLeft, text); + Qt::AlignVCenter | Qt::AlignRight, 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; } } } @@ -835,6 +892,8 @@ void FunctionSheetCellViewer::openContextMenu(QMouseEvent *e) { QAction setStep2Action(tr("Step 2"), 0); QAction setStep3Action(tr("Step 3"), 0); QAction setStep4Action(tr("Step 4"), 0); + QAction activateCycleAction(tr("Activate Cycle"), 0); + QAction deactivateCycleAction(tr("Deactivate Cycle"), 0); CellPosition cellPosition = getViewer()->xyToPosition(e->pos()); int row = cellPosition.frame(); @@ -858,6 +917,15 @@ void FunctionSheetCellViewer::openContextMenu(QMouseEvent *e) { // 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); @@ -896,7 +964,7 @@ void FunctionSheetCellViewer::openContextMenu(QMouseEvent *e) { menu.addAction(cmdManager->getAction("MI_Insert")); FunctionSelection *selection = m_sheet->getSelection(); - + TSceneHandle *sceneHandle = m_sheet->getViewer()->getSceneHandle(); // execute menu QAction *action = menu.exec(e->globalPos()); // QCursor::pos()); if (action == &deleteKeyframeAction) { @@ -935,6 +1003,10 @@ void FunctionSheetCellViewer::openContextMenu(QMouseEvent *e) { KeyframeSetter(curve, kIndex).setStep(3); else if (action == &setStep4Action) KeyframeSetter(curve, kIndex).setStep(4); + else if (action == &activateCycleAction) + KeyframeSetter::enableCycle(curve, true, sceneHandle); + else if (action == &deactivateCycleAction) + KeyframeSetter::enableCycle(curve, false, sceneHandle); update(); } @@ -1152,3 +1224,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..6d75e43 100644 --- a/toonz/sources/toonzqt/functionviewer.cpp +++ b/toonz/sources/toonzqt/functionviewer.cpp @@ -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(); } 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/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/paletteviewer.cpp b/toonz/sources/toonzqt/paletteviewer.cpp index ddb8ace..9299590 100644 --- a/toonz/sources/toonzqt/paletteviewer.cpp +++ b/toonz/sources/toonzqt/paletteviewer.cpp @@ -39,40 +39,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 +115,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 +169,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 +237,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 +439,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 +517,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 +543,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 +671,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 +684,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 +737,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 +775,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 +820,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 +829,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 +876,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(); @@ -941,7 +950,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 +968,7 @@ void PaletteViewer::onColorStyleSwitched() { void PaletteViewer::onPaletteChanged() { int index = m_pagesBar->currentIndex(); updateTabBar(); - m_pagesBar->setCurrentIndex(index); + onSwitchToPage(index); m_pageViewer->update(); @@ -973,6 +982,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 +1051,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 +1094,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 +1113,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/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..16cd342 100644 --- a/toonz/sources/toonzqt/schematicnode.cpp +++ b/toonz/sources/toonzqt/schematicnode.cpp @@ -564,6 +564,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 0d13a5a..eaa4590 100644 --- a/toonz/sources/toonzqt/schematicviewer.cpp +++ b/toonz/sources/toonzqt/schematicviewer.cpp @@ -59,8 +59,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; } }; @@ -102,7 +110,7 @@ void SchematicScene::hideEvent(QHideEvent *se) { //------------------------------------------------------------------ /*! Removes and then deletes all item in the scene. -*/ + */ void SchematicScene::clearAllItems() { clearSelection(); @@ -150,7 +158,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) { @@ -219,7 +227,7 @@ SchematicSceneViewer::~SchematicSceneViewer() {} //------------------------------------------------------------------ /*! Reimplemets the QGraphicsView::mousePressEvent() -*/ + */ void SchematicSceneViewer::mousePressEvent(QMouseEvent *me) { // qDebug() << "[mousePressEvent]"; if (m_gestureActive && m_touchDevice == QTouchDevice::TouchScreen && @@ -268,7 +276,7 @@ void SchematicSceneViewer::mousePressEvent(QMouseEvent *me) { //------------------------------------------------------------------ /*! Reimplemets the QGraphicsView::mouseMoveEvent() -*/ + */ void SchematicSceneViewer::mouseMoveEvent(QMouseEvent *me) { if (m_gestureActive && m_touchDevice == QTouchDevice::TouchScreen && !m_stylusUsed) { @@ -303,7 +311,7 @@ void SchematicSceneViewer::mouseMoveEvent(QMouseEvent *me) { //------------------------------------------------------------------ /*! Reimplemets the QGraphicsView::mouseReleaseEvent() -*/ + */ void SchematicSceneViewer::mouseReleaseEvent(QMouseEvent *me) { // qDebug() << "[mouseReleaseEvent]"; m_gestureActive = false; @@ -348,7 +356,7 @@ void SchematicSceneViewer::keyPressEvent(QKeyEvent *ke) { //------------------------------------------------------------------ /*! Reimplemets the QGraphicsView::wheelEvent() -*/ + */ void SchematicSceneViewer::wheelEvent(QWheelEvent *me) { // qDebug() << "[wheelEvent]"; @@ -399,33 +407,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); @@ -464,14 +477,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); } //------------------------------------------------------------------ @@ -915,10 +926,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())); QIcon selectModeIcon = createQIconOnOff("schematic_selection_mode", false); diff --git a/toonz/sources/toonzqt/styleeditor.cpp b/toonz/sources/toonzqt/styleeditor.cpp index fa4df3f..00c0944 100644 --- a/toonz/sources/toonzqt/styleeditor.cpp +++ b/toonz/sources/toonzqt/styleeditor.cpp @@ -1880,7 +1880,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; }; 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/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..b6e0439 --- /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..f9cb7f8 --- /dev/null +++ b/toonz/sources/translations/czech/tnztools.ts @@ -0,0 +1,1984 @@ + + + + + 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 + + + + 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 + + + + 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ý + + + diff --git a/toonz/sources/translations/czech/toonz.ts b/toonz/sources/translations/czech/toonz.ts new file mode 100644 index 0000000..476542f --- /dev/null +++ b/toonz/sources/translations/czech/toonz.ts @@ -0,0 +1,12788 @@ + + + + + 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) + + + + 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. + + + + 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ě + + + + 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" + + + + 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 + + + + 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. + + + + 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. + + + + 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 % + + + + 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ě: + + + + 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 + + + + 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 + + + + 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) + + + + 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. + + + + 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 + + + diff --git a/toonz/sources/translations/czech/toonzlib.ts b/toonz/sources/translations/czech/toonzlib.ts new file mode 100644 index 0000000..d8fcff0 --- /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..440c9b1 --- /dev/null +++ b/toonz/sources/translations/czech/toonzqt.ts @@ -0,0 +1,2971 @@ + + + + + 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 + + + + 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 + + + + 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] + + + + 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í. + + + + 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 + + + + 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 + + + This folder is not empty. Delete anyway? + Tato složka je prázdná. Přesto smazat? + + + + 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 + + + + 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/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