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 @@
+
+
+
+
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 @@
+
+
+
+
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