diff --git a/CMakeLists.txt b/CMakeLists.txt index ae9604a1372ac285c10c7a8392fa64304da802e3..a3e88ea5ce9a820890e1612082c2520272c68aed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,12 +39,12 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) qt_add_executable(Vivy MANUAL_FINALIZATION ${PROJECT_SOURCES} - utils/rsc/VivyRessources.qrc + rsc/VivyRessources.qrc ) else() add_executable(Vivy ${PROJECT_SOURCES} - utils/rsc/VivyRessources.qrc + rsc/VivyRessources.qrc ) endif() diff --git a/utils/rsc/.gitignore b/rsc/.gitignore similarity index 100% rename from utils/rsc/.gitignore rename to rsc/.gitignore diff --git a/utils/rsc/VivyRessources.qrc b/rsc/VivyRessources.qrc similarity index 99% rename from utils/rsc/VivyRessources.qrc rename to rsc/VivyRessources.qrc index 0f6f69913c557afae767cb9ddda9c2726912ce01..dcfe44e1bdf40c813527a1927603d2cb320b5c3c 100644 --- a/utils/rsc/VivyRessources.qrc +++ b/rsc/VivyRessources.qrc @@ -1,9 +1,12 @@ +<!-- vim: ft=xml +--> <!DOCTYPE RCC><RCC version="1.0"> <qresource> <file>icons/vivy.png</file> <!-- Fonts, FiraCode is OFL-1.1, NotoSans is APACHE-2.0 --> <file>fonts/FiraCode-Regular.ttf</file> + <file>fonts/FiraCode-Bold.ttf</file> <file>fonts/NotoSans-Bold.ttf</file> <file>fonts/NotoSans-Italic.ttf</file> <file>fonts/NotoSans-Regular.ttf</file> diff --git a/rsc/fonts/FiraCode-Bold.ttf b/rsc/fonts/FiraCode-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..39265a19da744d4a4f9dc2a3c32f184745829a93 Binary files /dev/null and b/rsc/fonts/FiraCode-Bold.ttf differ diff --git a/utils/rsc/fonts/FiraCode-Regular.ttf b/rsc/fonts/FiraCode-Regular.ttf similarity index 100% rename from utils/rsc/fonts/FiraCode-Regular.ttf rename to rsc/fonts/FiraCode-Regular.ttf diff --git a/utils/rsc/fonts/NotoSans-Bold.ttf b/rsc/fonts/NotoSans-Bold.ttf similarity index 100% rename from utils/rsc/fonts/NotoSans-Bold.ttf rename to rsc/fonts/NotoSans-Bold.ttf diff --git a/utils/rsc/fonts/NotoSans-BoldItalic.ttf b/rsc/fonts/NotoSans-BoldItalic.ttf similarity index 100% rename from utils/rsc/fonts/NotoSans-BoldItalic.ttf rename to rsc/fonts/NotoSans-BoldItalic.ttf diff --git a/utils/rsc/fonts/NotoSans-Italic.ttf b/rsc/fonts/NotoSans-Italic.ttf similarity index 100% rename from utils/rsc/fonts/NotoSans-Italic.ttf rename to rsc/fonts/NotoSans-Italic.ttf diff --git a/utils/rsc/fonts/NotoSans-Regular.ttf b/rsc/fonts/NotoSans-Regular.ttf similarity index 100% rename from utils/rsc/fonts/NotoSans-Regular.ttf rename to rsc/fonts/NotoSans-Regular.ttf diff --git a/utils/rsc/icons/breeze-dark/document-new.svg b/rsc/icons/breeze-dark/document-new.svg similarity index 100% rename from utils/rsc/icons/breeze-dark/document-new.svg rename to rsc/icons/breeze-dark/document-new.svg diff --git a/utils/rsc/icons/breeze-dark/document-open.svg b/rsc/icons/breeze-dark/document-open.svg similarity index 100% rename from utils/rsc/icons/breeze-dark/document-open.svg rename to rsc/icons/breeze-dark/document-open.svg diff --git a/utils/rsc/icons/breeze-dark/document-save-as.svg b/rsc/icons/breeze-dark/document-save-as.svg similarity index 100% rename from utils/rsc/icons/breeze-dark/document-save-as.svg rename to rsc/icons/breeze-dark/document-save-as.svg diff --git a/utils/rsc/icons/breeze-dark/document-save.svg b/rsc/icons/breeze-dark/document-save.svg similarity index 100% rename from utils/rsc/icons/breeze-dark/document-save.svg rename to rsc/icons/breeze-dark/document-save.svg diff --git a/utils/rsc/icons/breeze-dark/folder.svg b/rsc/icons/breeze-dark/folder.svg similarity index 100% rename from utils/rsc/icons/breeze-dark/folder.svg rename to rsc/icons/breeze-dark/folder.svg diff --git a/utils/rsc/icons/breeze-dark/help-about.svg b/rsc/icons/breeze-dark/help-about.svg similarity index 100% rename from utils/rsc/icons/breeze-dark/help-about.svg rename to rsc/icons/breeze-dark/help-about.svg diff --git a/utils/rsc/icons/breeze-dark/text-x-generic.svg b/rsc/icons/breeze-dark/text-x-generic.svg similarity index 100% rename from utils/rsc/icons/breeze-dark/text-x-generic.svg rename to rsc/icons/breeze-dark/text-x-generic.svg diff --git a/utils/rsc/icons/breeze-light/document-new.svg b/rsc/icons/breeze-light/document-new.svg similarity index 100% rename from utils/rsc/icons/breeze-light/document-new.svg rename to rsc/icons/breeze-light/document-new.svg diff --git a/utils/rsc/icons/breeze-light/document-open.svg b/rsc/icons/breeze-light/document-open.svg similarity index 100% rename from utils/rsc/icons/breeze-light/document-open.svg rename to rsc/icons/breeze-light/document-open.svg diff --git a/utils/rsc/icons/breeze-light/document-save-as.svg b/rsc/icons/breeze-light/document-save-as.svg similarity index 100% rename from utils/rsc/icons/breeze-light/document-save-as.svg rename to rsc/icons/breeze-light/document-save-as.svg diff --git a/utils/rsc/icons/breeze-light/document-save.svg b/rsc/icons/breeze-light/document-save.svg similarity index 100% rename from utils/rsc/icons/breeze-light/document-save.svg rename to rsc/icons/breeze-light/document-save.svg diff --git a/utils/rsc/icons/breeze-light/folder.svg b/rsc/icons/breeze-light/folder.svg similarity index 100% rename from utils/rsc/icons/breeze-light/folder.svg rename to rsc/icons/breeze-light/folder.svg diff --git a/utils/rsc/icons/breeze-light/help-about.svg b/rsc/icons/breeze-light/help-about.svg similarity index 100% rename from utils/rsc/icons/breeze-light/help-about.svg rename to rsc/icons/breeze-light/help-about.svg diff --git a/utils/rsc/icons/breeze-light/text-x-generic.svg b/rsc/icons/breeze-light/text-x-generic.svg similarity index 100% rename from utils/rsc/icons/breeze-light/text-x-generic.svg rename to rsc/icons/breeze-light/text-x-generic.svg diff --git a/utils/rsc/icons/vivy.png b/rsc/icons/vivy.png similarity index 100% rename from utils/rsc/icons/vivy.png rename to rsc/icons/vivy.png diff --git a/utils/rsc/licence/APACHE-2.0 b/rsc/licence/APACHE-2.0 similarity index 100% rename from utils/rsc/licence/APACHE-2.0 rename to rsc/licence/APACHE-2.0 diff --git a/utils/rsc/licence/CCAI-4.0 b/rsc/licence/CCAI-4.0 similarity index 100% rename from utils/rsc/licence/CCAI-4.0 rename to rsc/licence/CCAI-4.0 diff --git a/utils/rsc/licence/LGPL-V2.0 b/rsc/licence/LGPL-V2.0 similarity index 100% rename from utils/rsc/licence/LGPL-V2.0 rename to rsc/licence/LGPL-V2.0 diff --git a/utils/rsc/licence/LGPL-V2.1 b/rsc/licence/LGPL-V2.1 similarity index 100% rename from utils/rsc/licence/LGPL-V2.1 rename to rsc/licence/LGPL-V2.1 diff --git a/utils/rsc/licence/LGPL-V3 b/rsc/licence/LGPL-V3 similarity index 100% rename from utils/rsc/licence/LGPL-V3 rename to rsc/licence/LGPL-V3 diff --git a/utils/rsc/licence/MIT b/rsc/licence/MIT similarity index 100% rename from utils/rsc/licence/MIT rename to rsc/licence/MIT diff --git a/utils/rsc/licence/OFL-1.1 b/rsc/licence/OFL-1.1 similarity index 100% rename from utils/rsc/licence/OFL-1.1 rename to rsc/licence/OFL-1.1 diff --git a/utils/rsc/qdarkstyle_dark.qss b/rsc/qdarkstyle_dark.qss similarity index 100% rename from utils/rsc/qdarkstyle_dark.qss rename to rsc/qdarkstyle_dark.qss diff --git a/utils/rsc/qdarkstyle_light.qss b/rsc/qdarkstyle_light.qss similarity index 100% rename from utils/rsc/qdarkstyle_light.qss rename to rsc/qdarkstyle_light.qss diff --git a/utils/rsc/rc_dark/arrow_down.png b/rsc/rc_dark/arrow_down.png similarity index 100% rename from utils/rsc/rc_dark/arrow_down.png rename to rsc/rc_dark/arrow_down.png diff --git a/utils/rsc/rc_dark/arrow_down@2x.png b/rsc/rc_dark/arrow_down@2x.png similarity index 100% rename from utils/rsc/rc_dark/arrow_down@2x.png rename to rsc/rc_dark/arrow_down@2x.png diff --git a/utils/rsc/rc_dark/arrow_down_disabled.png b/rsc/rc_dark/arrow_down_disabled.png similarity index 100% rename from utils/rsc/rc_dark/arrow_down_disabled.png rename to rsc/rc_dark/arrow_down_disabled.png diff --git a/utils/rsc/rc_dark/arrow_down_disabled@2x.png b/rsc/rc_dark/arrow_down_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/arrow_down_disabled@2x.png rename to rsc/rc_dark/arrow_down_disabled@2x.png diff --git a/utils/rsc/rc_dark/arrow_down_focus.png b/rsc/rc_dark/arrow_down_focus.png similarity index 100% rename from utils/rsc/rc_dark/arrow_down_focus.png rename to rsc/rc_dark/arrow_down_focus.png diff --git a/utils/rsc/rc_dark/arrow_down_focus@2x.png b/rsc/rc_dark/arrow_down_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/arrow_down_focus@2x.png rename to rsc/rc_dark/arrow_down_focus@2x.png diff --git a/utils/rsc/rc_dark/arrow_down_pressed.png b/rsc/rc_dark/arrow_down_pressed.png similarity index 100% rename from utils/rsc/rc_dark/arrow_down_pressed.png rename to rsc/rc_dark/arrow_down_pressed.png diff --git a/utils/rsc/rc_dark/arrow_down_pressed@2x.png b/rsc/rc_dark/arrow_down_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/arrow_down_pressed@2x.png rename to rsc/rc_dark/arrow_down_pressed@2x.png diff --git a/utils/rsc/rc_dark/arrow_left.png b/rsc/rc_dark/arrow_left.png similarity index 100% rename from utils/rsc/rc_dark/arrow_left.png rename to rsc/rc_dark/arrow_left.png diff --git a/utils/rsc/rc_dark/arrow_left@2x.png b/rsc/rc_dark/arrow_left@2x.png similarity index 100% rename from utils/rsc/rc_dark/arrow_left@2x.png rename to rsc/rc_dark/arrow_left@2x.png diff --git a/utils/rsc/rc_dark/arrow_left_disabled.png b/rsc/rc_dark/arrow_left_disabled.png similarity index 100% rename from utils/rsc/rc_dark/arrow_left_disabled.png rename to rsc/rc_dark/arrow_left_disabled.png diff --git a/utils/rsc/rc_dark/arrow_left_disabled@2x.png b/rsc/rc_dark/arrow_left_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/arrow_left_disabled@2x.png rename to rsc/rc_dark/arrow_left_disabled@2x.png diff --git a/utils/rsc/rc_dark/arrow_left_focus.png b/rsc/rc_dark/arrow_left_focus.png similarity index 100% rename from utils/rsc/rc_dark/arrow_left_focus.png rename to rsc/rc_dark/arrow_left_focus.png diff --git a/utils/rsc/rc_dark/arrow_left_focus@2x.png b/rsc/rc_dark/arrow_left_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/arrow_left_focus@2x.png rename to rsc/rc_dark/arrow_left_focus@2x.png diff --git a/utils/rsc/rc_dark/arrow_left_pressed.png b/rsc/rc_dark/arrow_left_pressed.png similarity index 100% rename from utils/rsc/rc_dark/arrow_left_pressed.png rename to rsc/rc_dark/arrow_left_pressed.png diff --git a/utils/rsc/rc_dark/arrow_left_pressed@2x.png b/rsc/rc_dark/arrow_left_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/arrow_left_pressed@2x.png rename to rsc/rc_dark/arrow_left_pressed@2x.png diff --git a/utils/rsc/rc_dark/arrow_right.png b/rsc/rc_dark/arrow_right.png similarity index 100% rename from utils/rsc/rc_dark/arrow_right.png rename to rsc/rc_dark/arrow_right.png diff --git a/utils/rsc/rc_dark/arrow_right@2x.png b/rsc/rc_dark/arrow_right@2x.png similarity index 100% rename from utils/rsc/rc_dark/arrow_right@2x.png rename to rsc/rc_dark/arrow_right@2x.png diff --git a/utils/rsc/rc_dark/arrow_right_disabled.png b/rsc/rc_dark/arrow_right_disabled.png similarity index 100% rename from utils/rsc/rc_dark/arrow_right_disabled.png rename to rsc/rc_dark/arrow_right_disabled.png diff --git a/utils/rsc/rc_dark/arrow_right_disabled@2x.png b/rsc/rc_dark/arrow_right_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/arrow_right_disabled@2x.png rename to rsc/rc_dark/arrow_right_disabled@2x.png diff --git a/utils/rsc/rc_dark/arrow_right_focus.png b/rsc/rc_dark/arrow_right_focus.png similarity index 100% rename from utils/rsc/rc_dark/arrow_right_focus.png rename to rsc/rc_dark/arrow_right_focus.png diff --git a/utils/rsc/rc_dark/arrow_right_focus@2x.png b/rsc/rc_dark/arrow_right_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/arrow_right_focus@2x.png rename to rsc/rc_dark/arrow_right_focus@2x.png diff --git a/utils/rsc/rc_dark/arrow_right_pressed.png b/rsc/rc_dark/arrow_right_pressed.png similarity index 100% rename from utils/rsc/rc_dark/arrow_right_pressed.png rename to rsc/rc_dark/arrow_right_pressed.png diff --git a/utils/rsc/rc_dark/arrow_right_pressed@2x.png b/rsc/rc_dark/arrow_right_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/arrow_right_pressed@2x.png rename to rsc/rc_dark/arrow_right_pressed@2x.png diff --git a/utils/rsc/rc_dark/arrow_up.png b/rsc/rc_dark/arrow_up.png similarity index 100% rename from utils/rsc/rc_dark/arrow_up.png rename to rsc/rc_dark/arrow_up.png diff --git a/utils/rsc/rc_dark/arrow_up@2x.png b/rsc/rc_dark/arrow_up@2x.png similarity index 100% rename from utils/rsc/rc_dark/arrow_up@2x.png rename to rsc/rc_dark/arrow_up@2x.png diff --git a/utils/rsc/rc_dark/arrow_up_disabled.png b/rsc/rc_dark/arrow_up_disabled.png similarity index 100% rename from utils/rsc/rc_dark/arrow_up_disabled.png rename to rsc/rc_dark/arrow_up_disabled.png diff --git a/utils/rsc/rc_dark/arrow_up_disabled@2x.png b/rsc/rc_dark/arrow_up_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/arrow_up_disabled@2x.png rename to rsc/rc_dark/arrow_up_disabled@2x.png diff --git a/utils/rsc/rc_dark/arrow_up_focus.png b/rsc/rc_dark/arrow_up_focus.png similarity index 100% rename from utils/rsc/rc_dark/arrow_up_focus.png rename to rsc/rc_dark/arrow_up_focus.png diff --git a/utils/rsc/rc_dark/arrow_up_focus@2x.png b/rsc/rc_dark/arrow_up_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/arrow_up_focus@2x.png rename to rsc/rc_dark/arrow_up_focus@2x.png diff --git a/utils/rsc/rc_dark/arrow_up_pressed.png b/rsc/rc_dark/arrow_up_pressed.png similarity index 100% rename from utils/rsc/rc_dark/arrow_up_pressed.png rename to rsc/rc_dark/arrow_up_pressed.png diff --git a/utils/rsc/rc_dark/arrow_up_pressed@2x.png b/rsc/rc_dark/arrow_up_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/arrow_up_pressed@2x.png rename to rsc/rc_dark/arrow_up_pressed@2x.png diff --git a/utils/rsc/rc_dark/base_icon.png b/rsc/rc_dark/base_icon.png similarity index 100% rename from utils/rsc/rc_dark/base_icon.png rename to rsc/rc_dark/base_icon.png diff --git a/utils/rsc/rc_dark/base_icon@2x.png b/rsc/rc_dark/base_icon@2x.png similarity index 100% rename from utils/rsc/rc_dark/base_icon@2x.png rename to rsc/rc_dark/base_icon@2x.png diff --git a/utils/rsc/rc_dark/base_icon_disabled.png b/rsc/rc_dark/base_icon_disabled.png similarity index 100% rename from utils/rsc/rc_dark/base_icon_disabled.png rename to rsc/rc_dark/base_icon_disabled.png diff --git a/utils/rsc/rc_dark/base_icon_disabled@2x.png b/rsc/rc_dark/base_icon_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/base_icon_disabled@2x.png rename to rsc/rc_dark/base_icon_disabled@2x.png diff --git a/utils/rsc/rc_dark/base_icon_focus.png b/rsc/rc_dark/base_icon_focus.png similarity index 100% rename from utils/rsc/rc_dark/base_icon_focus.png rename to rsc/rc_dark/base_icon_focus.png diff --git a/utils/rsc/rc_dark/base_icon_focus@2x.png b/rsc/rc_dark/base_icon_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/base_icon_focus@2x.png rename to rsc/rc_dark/base_icon_focus@2x.png diff --git a/utils/rsc/rc_dark/base_icon_pressed.png b/rsc/rc_dark/base_icon_pressed.png similarity index 100% rename from utils/rsc/rc_dark/base_icon_pressed.png rename to rsc/rc_dark/base_icon_pressed.png diff --git a/utils/rsc/rc_dark/base_icon_pressed@2x.png b/rsc/rc_dark/base_icon_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/base_icon_pressed@2x.png rename to rsc/rc_dark/base_icon_pressed@2x.png diff --git a/utils/rsc/rc_dark/branch_closed.png b/rsc/rc_dark/branch_closed.png similarity index 100% rename from utils/rsc/rc_dark/branch_closed.png rename to rsc/rc_dark/branch_closed.png diff --git a/utils/rsc/rc_dark/branch_closed@2x.png b/rsc/rc_dark/branch_closed@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_closed@2x.png rename to rsc/rc_dark/branch_closed@2x.png diff --git a/utils/rsc/rc_dark/branch_closed_disabled.png b/rsc/rc_dark/branch_closed_disabled.png similarity index 100% rename from utils/rsc/rc_dark/branch_closed_disabled.png rename to rsc/rc_dark/branch_closed_disabled.png diff --git a/utils/rsc/rc_dark/branch_closed_disabled@2x.png b/rsc/rc_dark/branch_closed_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_closed_disabled@2x.png rename to rsc/rc_dark/branch_closed_disabled@2x.png diff --git a/utils/rsc/rc_dark/branch_closed_focus.png b/rsc/rc_dark/branch_closed_focus.png similarity index 100% rename from utils/rsc/rc_dark/branch_closed_focus.png rename to rsc/rc_dark/branch_closed_focus.png diff --git a/utils/rsc/rc_dark/branch_closed_focus@2x.png b/rsc/rc_dark/branch_closed_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_closed_focus@2x.png rename to rsc/rc_dark/branch_closed_focus@2x.png diff --git a/utils/rsc/rc_dark/branch_closed_pressed.png b/rsc/rc_dark/branch_closed_pressed.png similarity index 100% rename from utils/rsc/rc_dark/branch_closed_pressed.png rename to rsc/rc_dark/branch_closed_pressed.png diff --git a/utils/rsc/rc_dark/branch_closed_pressed@2x.png b/rsc/rc_dark/branch_closed_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_closed_pressed@2x.png rename to rsc/rc_dark/branch_closed_pressed@2x.png diff --git a/utils/rsc/rc_dark/branch_end.png b/rsc/rc_dark/branch_end.png similarity index 100% rename from utils/rsc/rc_dark/branch_end.png rename to rsc/rc_dark/branch_end.png diff --git a/utils/rsc/rc_dark/branch_end@2x.png b/rsc/rc_dark/branch_end@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_end@2x.png rename to rsc/rc_dark/branch_end@2x.png diff --git a/utils/rsc/rc_dark/branch_end_disabled.png b/rsc/rc_dark/branch_end_disabled.png similarity index 100% rename from utils/rsc/rc_dark/branch_end_disabled.png rename to rsc/rc_dark/branch_end_disabled.png diff --git a/utils/rsc/rc_dark/branch_end_disabled@2x.png b/rsc/rc_dark/branch_end_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_end_disabled@2x.png rename to rsc/rc_dark/branch_end_disabled@2x.png diff --git a/utils/rsc/rc_dark/branch_end_focus.png b/rsc/rc_dark/branch_end_focus.png similarity index 100% rename from utils/rsc/rc_dark/branch_end_focus.png rename to rsc/rc_dark/branch_end_focus.png diff --git a/utils/rsc/rc_dark/branch_end_focus@2x.png b/rsc/rc_dark/branch_end_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_end_focus@2x.png rename to rsc/rc_dark/branch_end_focus@2x.png diff --git a/utils/rsc/rc_dark/branch_end_pressed.png b/rsc/rc_dark/branch_end_pressed.png similarity index 100% rename from utils/rsc/rc_dark/branch_end_pressed.png rename to rsc/rc_dark/branch_end_pressed.png diff --git a/utils/rsc/rc_dark/branch_end_pressed@2x.png b/rsc/rc_dark/branch_end_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_end_pressed@2x.png rename to rsc/rc_dark/branch_end_pressed@2x.png diff --git a/utils/rsc/rc_dark/branch_line.png b/rsc/rc_dark/branch_line.png similarity index 100% rename from utils/rsc/rc_dark/branch_line.png rename to rsc/rc_dark/branch_line.png diff --git a/utils/rsc/rc_dark/branch_line@2x.png b/rsc/rc_dark/branch_line@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_line@2x.png rename to rsc/rc_dark/branch_line@2x.png diff --git a/utils/rsc/rc_dark/branch_line_disabled.png b/rsc/rc_dark/branch_line_disabled.png similarity index 100% rename from utils/rsc/rc_dark/branch_line_disabled.png rename to rsc/rc_dark/branch_line_disabled.png diff --git a/utils/rsc/rc_dark/branch_line_disabled@2x.png b/rsc/rc_dark/branch_line_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_line_disabled@2x.png rename to rsc/rc_dark/branch_line_disabled@2x.png diff --git a/utils/rsc/rc_dark/branch_line_focus.png b/rsc/rc_dark/branch_line_focus.png similarity index 100% rename from utils/rsc/rc_dark/branch_line_focus.png rename to rsc/rc_dark/branch_line_focus.png diff --git a/utils/rsc/rc_dark/branch_line_focus@2x.png b/rsc/rc_dark/branch_line_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_line_focus@2x.png rename to rsc/rc_dark/branch_line_focus@2x.png diff --git a/utils/rsc/rc_dark/branch_line_pressed.png b/rsc/rc_dark/branch_line_pressed.png similarity index 100% rename from utils/rsc/rc_dark/branch_line_pressed.png rename to rsc/rc_dark/branch_line_pressed.png diff --git a/utils/rsc/rc_dark/branch_line_pressed@2x.png b/rsc/rc_dark/branch_line_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_line_pressed@2x.png rename to rsc/rc_dark/branch_line_pressed@2x.png diff --git a/utils/rsc/rc_dark/branch_more.png b/rsc/rc_dark/branch_more.png similarity index 100% rename from utils/rsc/rc_dark/branch_more.png rename to rsc/rc_dark/branch_more.png diff --git a/utils/rsc/rc_dark/branch_more@2x.png b/rsc/rc_dark/branch_more@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_more@2x.png rename to rsc/rc_dark/branch_more@2x.png diff --git a/utils/rsc/rc_dark/branch_more_disabled.png b/rsc/rc_dark/branch_more_disabled.png similarity index 100% rename from utils/rsc/rc_dark/branch_more_disabled.png rename to rsc/rc_dark/branch_more_disabled.png diff --git a/utils/rsc/rc_dark/branch_more_disabled@2x.png b/rsc/rc_dark/branch_more_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_more_disabled@2x.png rename to rsc/rc_dark/branch_more_disabled@2x.png diff --git a/utils/rsc/rc_dark/branch_more_focus.png b/rsc/rc_dark/branch_more_focus.png similarity index 100% rename from utils/rsc/rc_dark/branch_more_focus.png rename to rsc/rc_dark/branch_more_focus.png diff --git a/utils/rsc/rc_dark/branch_more_focus@2x.png b/rsc/rc_dark/branch_more_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_more_focus@2x.png rename to rsc/rc_dark/branch_more_focus@2x.png diff --git a/utils/rsc/rc_dark/branch_more_pressed.png b/rsc/rc_dark/branch_more_pressed.png similarity index 100% rename from utils/rsc/rc_dark/branch_more_pressed.png rename to rsc/rc_dark/branch_more_pressed.png diff --git a/utils/rsc/rc_dark/branch_more_pressed@2x.png b/rsc/rc_dark/branch_more_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_more_pressed@2x.png rename to rsc/rc_dark/branch_more_pressed@2x.png diff --git a/utils/rsc/rc_dark/branch_open.png b/rsc/rc_dark/branch_open.png similarity index 100% rename from utils/rsc/rc_dark/branch_open.png rename to rsc/rc_dark/branch_open.png diff --git a/utils/rsc/rc_dark/branch_open@2x.png b/rsc/rc_dark/branch_open@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_open@2x.png rename to rsc/rc_dark/branch_open@2x.png diff --git a/utils/rsc/rc_dark/branch_open_disabled.png b/rsc/rc_dark/branch_open_disabled.png similarity index 100% rename from utils/rsc/rc_dark/branch_open_disabled.png rename to rsc/rc_dark/branch_open_disabled.png diff --git a/utils/rsc/rc_dark/branch_open_disabled@2x.png b/rsc/rc_dark/branch_open_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_open_disabled@2x.png rename to rsc/rc_dark/branch_open_disabled@2x.png diff --git a/utils/rsc/rc_dark/branch_open_focus.png b/rsc/rc_dark/branch_open_focus.png similarity index 100% rename from utils/rsc/rc_dark/branch_open_focus.png rename to rsc/rc_dark/branch_open_focus.png diff --git a/utils/rsc/rc_dark/branch_open_focus@2x.png b/rsc/rc_dark/branch_open_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_open_focus@2x.png rename to rsc/rc_dark/branch_open_focus@2x.png diff --git a/utils/rsc/rc_dark/branch_open_pressed.png b/rsc/rc_dark/branch_open_pressed.png similarity index 100% rename from utils/rsc/rc_dark/branch_open_pressed.png rename to rsc/rc_dark/branch_open_pressed.png diff --git a/utils/rsc/rc_dark/branch_open_pressed@2x.png b/rsc/rc_dark/branch_open_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/branch_open_pressed@2x.png rename to rsc/rc_dark/branch_open_pressed@2x.png diff --git a/utils/rsc/rc_dark/checkbox_checked.png b/rsc/rc_dark/checkbox_checked.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_checked.png rename to rsc/rc_dark/checkbox_checked.png diff --git a/utils/rsc/rc_dark/checkbox_checked@2x.png b/rsc/rc_dark/checkbox_checked@2x.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_checked@2x.png rename to rsc/rc_dark/checkbox_checked@2x.png diff --git a/utils/rsc/rc_dark/checkbox_checked_disabled.png b/rsc/rc_dark/checkbox_checked_disabled.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_checked_disabled.png rename to rsc/rc_dark/checkbox_checked_disabled.png diff --git a/utils/rsc/rc_dark/checkbox_checked_disabled@2x.png b/rsc/rc_dark/checkbox_checked_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_checked_disabled@2x.png rename to rsc/rc_dark/checkbox_checked_disabled@2x.png diff --git a/utils/rsc/rc_dark/checkbox_checked_focus.png b/rsc/rc_dark/checkbox_checked_focus.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_checked_focus.png rename to rsc/rc_dark/checkbox_checked_focus.png diff --git a/utils/rsc/rc_dark/checkbox_checked_focus@2x.png b/rsc/rc_dark/checkbox_checked_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_checked_focus@2x.png rename to rsc/rc_dark/checkbox_checked_focus@2x.png diff --git a/utils/rsc/rc_dark/checkbox_checked_pressed.png b/rsc/rc_dark/checkbox_checked_pressed.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_checked_pressed.png rename to rsc/rc_dark/checkbox_checked_pressed.png diff --git a/utils/rsc/rc_dark/checkbox_checked_pressed@2x.png b/rsc/rc_dark/checkbox_checked_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_checked_pressed@2x.png rename to rsc/rc_dark/checkbox_checked_pressed@2x.png diff --git a/utils/rsc/rc_dark/checkbox_indeterminate.png b/rsc/rc_dark/checkbox_indeterminate.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_indeterminate.png rename to rsc/rc_dark/checkbox_indeterminate.png diff --git a/utils/rsc/rc_dark/checkbox_indeterminate@2x.png b/rsc/rc_dark/checkbox_indeterminate@2x.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_indeterminate@2x.png rename to rsc/rc_dark/checkbox_indeterminate@2x.png diff --git a/utils/rsc/rc_dark/checkbox_indeterminate_disabled.png b/rsc/rc_dark/checkbox_indeterminate_disabled.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_indeterminate_disabled.png rename to rsc/rc_dark/checkbox_indeterminate_disabled.png diff --git a/utils/rsc/rc_dark/checkbox_indeterminate_disabled@2x.png b/rsc/rc_dark/checkbox_indeterminate_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_indeterminate_disabled@2x.png rename to rsc/rc_dark/checkbox_indeterminate_disabled@2x.png diff --git a/utils/rsc/rc_dark/checkbox_indeterminate_focus.png b/rsc/rc_dark/checkbox_indeterminate_focus.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_indeterminate_focus.png rename to rsc/rc_dark/checkbox_indeterminate_focus.png diff --git a/utils/rsc/rc_dark/checkbox_indeterminate_focus@2x.png b/rsc/rc_dark/checkbox_indeterminate_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_indeterminate_focus@2x.png rename to rsc/rc_dark/checkbox_indeterminate_focus@2x.png diff --git a/utils/rsc/rc_dark/checkbox_indeterminate_pressed.png b/rsc/rc_dark/checkbox_indeterminate_pressed.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_indeterminate_pressed.png rename to rsc/rc_dark/checkbox_indeterminate_pressed.png diff --git a/utils/rsc/rc_dark/checkbox_indeterminate_pressed@2x.png b/rsc/rc_dark/checkbox_indeterminate_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_indeterminate_pressed@2x.png rename to rsc/rc_dark/checkbox_indeterminate_pressed@2x.png diff --git a/utils/rsc/rc_dark/checkbox_unchecked.png b/rsc/rc_dark/checkbox_unchecked.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_unchecked.png rename to rsc/rc_dark/checkbox_unchecked.png diff --git a/utils/rsc/rc_dark/checkbox_unchecked@2x.png b/rsc/rc_dark/checkbox_unchecked@2x.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_unchecked@2x.png rename to rsc/rc_dark/checkbox_unchecked@2x.png diff --git a/utils/rsc/rc_dark/checkbox_unchecked_disabled.png b/rsc/rc_dark/checkbox_unchecked_disabled.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_unchecked_disabled.png rename to rsc/rc_dark/checkbox_unchecked_disabled.png diff --git a/utils/rsc/rc_dark/checkbox_unchecked_disabled@2x.png b/rsc/rc_dark/checkbox_unchecked_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_unchecked_disabled@2x.png rename to rsc/rc_dark/checkbox_unchecked_disabled@2x.png diff --git a/utils/rsc/rc_dark/checkbox_unchecked_focus.png b/rsc/rc_dark/checkbox_unchecked_focus.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_unchecked_focus.png rename to rsc/rc_dark/checkbox_unchecked_focus.png diff --git a/utils/rsc/rc_dark/checkbox_unchecked_focus@2x.png b/rsc/rc_dark/checkbox_unchecked_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_unchecked_focus@2x.png rename to rsc/rc_dark/checkbox_unchecked_focus@2x.png diff --git a/utils/rsc/rc_dark/checkbox_unchecked_pressed.png b/rsc/rc_dark/checkbox_unchecked_pressed.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_unchecked_pressed.png rename to rsc/rc_dark/checkbox_unchecked_pressed.png diff --git a/utils/rsc/rc_dark/checkbox_unchecked_pressed@2x.png b/rsc/rc_dark/checkbox_unchecked_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/checkbox_unchecked_pressed@2x.png rename to rsc/rc_dark/checkbox_unchecked_pressed@2x.png diff --git a/utils/rsc/rc_dark/line_horizontal.png b/rsc/rc_dark/line_horizontal.png similarity index 100% rename from utils/rsc/rc_dark/line_horizontal.png rename to rsc/rc_dark/line_horizontal.png diff --git a/utils/rsc/rc_dark/line_horizontal@2x.png b/rsc/rc_dark/line_horizontal@2x.png similarity index 100% rename from utils/rsc/rc_dark/line_horizontal@2x.png rename to rsc/rc_dark/line_horizontal@2x.png diff --git a/utils/rsc/rc_dark/line_horizontal_disabled.png b/rsc/rc_dark/line_horizontal_disabled.png similarity index 100% rename from utils/rsc/rc_dark/line_horizontal_disabled.png rename to rsc/rc_dark/line_horizontal_disabled.png diff --git a/utils/rsc/rc_dark/line_horizontal_disabled@2x.png b/rsc/rc_dark/line_horizontal_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/line_horizontal_disabled@2x.png rename to rsc/rc_dark/line_horizontal_disabled@2x.png diff --git a/utils/rsc/rc_dark/line_horizontal_focus.png b/rsc/rc_dark/line_horizontal_focus.png similarity index 100% rename from utils/rsc/rc_dark/line_horizontal_focus.png rename to rsc/rc_dark/line_horizontal_focus.png diff --git a/utils/rsc/rc_dark/line_horizontal_focus@2x.png b/rsc/rc_dark/line_horizontal_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/line_horizontal_focus@2x.png rename to rsc/rc_dark/line_horizontal_focus@2x.png diff --git a/utils/rsc/rc_dark/line_horizontal_pressed.png b/rsc/rc_dark/line_horizontal_pressed.png similarity index 100% rename from utils/rsc/rc_dark/line_horizontal_pressed.png rename to rsc/rc_dark/line_horizontal_pressed.png diff --git a/utils/rsc/rc_dark/line_horizontal_pressed@2x.png b/rsc/rc_dark/line_horizontal_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/line_horizontal_pressed@2x.png rename to rsc/rc_dark/line_horizontal_pressed@2x.png diff --git a/utils/rsc/rc_dark/line_vertical.png b/rsc/rc_dark/line_vertical.png similarity index 100% rename from utils/rsc/rc_dark/line_vertical.png rename to rsc/rc_dark/line_vertical.png diff --git a/utils/rsc/rc_dark/line_vertical@2x.png b/rsc/rc_dark/line_vertical@2x.png similarity index 100% rename from utils/rsc/rc_dark/line_vertical@2x.png rename to rsc/rc_dark/line_vertical@2x.png diff --git a/utils/rsc/rc_dark/line_vertical_disabled.png b/rsc/rc_dark/line_vertical_disabled.png similarity index 100% rename from utils/rsc/rc_dark/line_vertical_disabled.png rename to rsc/rc_dark/line_vertical_disabled.png diff --git a/utils/rsc/rc_dark/line_vertical_disabled@2x.png b/rsc/rc_dark/line_vertical_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/line_vertical_disabled@2x.png rename to rsc/rc_dark/line_vertical_disabled@2x.png diff --git a/utils/rsc/rc_dark/line_vertical_focus.png b/rsc/rc_dark/line_vertical_focus.png similarity index 100% rename from utils/rsc/rc_dark/line_vertical_focus.png rename to rsc/rc_dark/line_vertical_focus.png diff --git a/utils/rsc/rc_dark/line_vertical_focus@2x.png b/rsc/rc_dark/line_vertical_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/line_vertical_focus@2x.png rename to rsc/rc_dark/line_vertical_focus@2x.png diff --git a/utils/rsc/rc_dark/line_vertical_pressed.png b/rsc/rc_dark/line_vertical_pressed.png similarity index 100% rename from utils/rsc/rc_dark/line_vertical_pressed.png rename to rsc/rc_dark/line_vertical_pressed.png diff --git a/utils/rsc/rc_dark/line_vertical_pressed@2x.png b/rsc/rc_dark/line_vertical_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/line_vertical_pressed@2x.png rename to rsc/rc_dark/line_vertical_pressed@2x.png diff --git a/utils/rsc/rc_dark/radio_checked.png b/rsc/rc_dark/radio_checked.png similarity index 100% rename from utils/rsc/rc_dark/radio_checked.png rename to rsc/rc_dark/radio_checked.png diff --git a/utils/rsc/rc_dark/radio_checked@2x.png b/rsc/rc_dark/radio_checked@2x.png similarity index 100% rename from utils/rsc/rc_dark/radio_checked@2x.png rename to rsc/rc_dark/radio_checked@2x.png diff --git a/utils/rsc/rc_dark/radio_checked_disabled.png b/rsc/rc_dark/radio_checked_disabled.png similarity index 100% rename from utils/rsc/rc_dark/radio_checked_disabled.png rename to rsc/rc_dark/radio_checked_disabled.png diff --git a/utils/rsc/rc_dark/radio_checked_disabled@2x.png b/rsc/rc_dark/radio_checked_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/radio_checked_disabled@2x.png rename to rsc/rc_dark/radio_checked_disabled@2x.png diff --git a/utils/rsc/rc_dark/radio_checked_focus.png b/rsc/rc_dark/radio_checked_focus.png similarity index 100% rename from utils/rsc/rc_dark/radio_checked_focus.png rename to rsc/rc_dark/radio_checked_focus.png diff --git a/utils/rsc/rc_dark/radio_checked_focus@2x.png b/rsc/rc_dark/radio_checked_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/radio_checked_focus@2x.png rename to rsc/rc_dark/radio_checked_focus@2x.png diff --git a/utils/rsc/rc_dark/radio_checked_pressed.png b/rsc/rc_dark/radio_checked_pressed.png similarity index 100% rename from utils/rsc/rc_dark/radio_checked_pressed.png rename to rsc/rc_dark/radio_checked_pressed.png diff --git a/utils/rsc/rc_dark/radio_checked_pressed@2x.png b/rsc/rc_dark/radio_checked_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/radio_checked_pressed@2x.png rename to rsc/rc_dark/radio_checked_pressed@2x.png diff --git a/utils/rsc/rc_dark/radio_unchecked.png b/rsc/rc_dark/radio_unchecked.png similarity index 100% rename from utils/rsc/rc_dark/radio_unchecked.png rename to rsc/rc_dark/radio_unchecked.png diff --git a/utils/rsc/rc_dark/radio_unchecked@2x.png b/rsc/rc_dark/radio_unchecked@2x.png similarity index 100% rename from utils/rsc/rc_dark/radio_unchecked@2x.png rename to rsc/rc_dark/radio_unchecked@2x.png diff --git a/utils/rsc/rc_dark/radio_unchecked_disabled.png b/rsc/rc_dark/radio_unchecked_disabled.png similarity index 100% rename from utils/rsc/rc_dark/radio_unchecked_disabled.png rename to rsc/rc_dark/radio_unchecked_disabled.png diff --git a/utils/rsc/rc_dark/radio_unchecked_disabled@2x.png b/rsc/rc_dark/radio_unchecked_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/radio_unchecked_disabled@2x.png rename to rsc/rc_dark/radio_unchecked_disabled@2x.png diff --git a/utils/rsc/rc_dark/radio_unchecked_focus.png b/rsc/rc_dark/radio_unchecked_focus.png similarity index 100% rename from utils/rsc/rc_dark/radio_unchecked_focus.png rename to rsc/rc_dark/radio_unchecked_focus.png diff --git a/utils/rsc/rc_dark/radio_unchecked_focus@2x.png b/rsc/rc_dark/radio_unchecked_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/radio_unchecked_focus@2x.png rename to rsc/rc_dark/radio_unchecked_focus@2x.png diff --git a/utils/rsc/rc_dark/radio_unchecked_pressed.png b/rsc/rc_dark/radio_unchecked_pressed.png similarity index 100% rename from utils/rsc/rc_dark/radio_unchecked_pressed.png rename to rsc/rc_dark/radio_unchecked_pressed.png diff --git a/utils/rsc/rc_dark/radio_unchecked_pressed@2x.png b/rsc/rc_dark/radio_unchecked_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/radio_unchecked_pressed@2x.png rename to rsc/rc_dark/radio_unchecked_pressed@2x.png diff --git a/utils/rsc/rc_dark/toolbar_move_horizontal.png b/rsc/rc_dark/toolbar_move_horizontal.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_move_horizontal.png rename to rsc/rc_dark/toolbar_move_horizontal.png diff --git a/utils/rsc/rc_dark/toolbar_move_horizontal@2x.png b/rsc/rc_dark/toolbar_move_horizontal@2x.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_move_horizontal@2x.png rename to rsc/rc_dark/toolbar_move_horizontal@2x.png diff --git a/utils/rsc/rc_dark/toolbar_move_horizontal_disabled.png b/rsc/rc_dark/toolbar_move_horizontal_disabled.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_move_horizontal_disabled.png rename to rsc/rc_dark/toolbar_move_horizontal_disabled.png diff --git a/utils/rsc/rc_dark/toolbar_move_horizontal_disabled@2x.png b/rsc/rc_dark/toolbar_move_horizontal_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_move_horizontal_disabled@2x.png rename to rsc/rc_dark/toolbar_move_horizontal_disabled@2x.png diff --git a/utils/rsc/rc_dark/toolbar_move_horizontal_focus.png b/rsc/rc_dark/toolbar_move_horizontal_focus.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_move_horizontal_focus.png rename to rsc/rc_dark/toolbar_move_horizontal_focus.png diff --git a/utils/rsc/rc_dark/toolbar_move_horizontal_focus@2x.png b/rsc/rc_dark/toolbar_move_horizontal_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_move_horizontal_focus@2x.png rename to rsc/rc_dark/toolbar_move_horizontal_focus@2x.png diff --git a/utils/rsc/rc_dark/toolbar_move_horizontal_pressed.png b/rsc/rc_dark/toolbar_move_horizontal_pressed.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_move_horizontal_pressed.png rename to rsc/rc_dark/toolbar_move_horizontal_pressed.png diff --git a/utils/rsc/rc_dark/toolbar_move_horizontal_pressed@2x.png b/rsc/rc_dark/toolbar_move_horizontal_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_move_horizontal_pressed@2x.png rename to rsc/rc_dark/toolbar_move_horizontal_pressed@2x.png diff --git a/utils/rsc/rc_dark/toolbar_move_vertical.png b/rsc/rc_dark/toolbar_move_vertical.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_move_vertical.png rename to rsc/rc_dark/toolbar_move_vertical.png diff --git a/utils/rsc/rc_dark/toolbar_move_vertical@2x.png b/rsc/rc_dark/toolbar_move_vertical@2x.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_move_vertical@2x.png rename to rsc/rc_dark/toolbar_move_vertical@2x.png diff --git a/utils/rsc/rc_dark/toolbar_move_vertical_disabled.png b/rsc/rc_dark/toolbar_move_vertical_disabled.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_move_vertical_disabled.png rename to rsc/rc_dark/toolbar_move_vertical_disabled.png diff --git a/utils/rsc/rc_dark/toolbar_move_vertical_disabled@2x.png b/rsc/rc_dark/toolbar_move_vertical_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_move_vertical_disabled@2x.png rename to rsc/rc_dark/toolbar_move_vertical_disabled@2x.png diff --git a/utils/rsc/rc_dark/toolbar_move_vertical_focus.png b/rsc/rc_dark/toolbar_move_vertical_focus.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_move_vertical_focus.png rename to rsc/rc_dark/toolbar_move_vertical_focus.png diff --git a/utils/rsc/rc_dark/toolbar_move_vertical_focus@2x.png b/rsc/rc_dark/toolbar_move_vertical_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_move_vertical_focus@2x.png rename to rsc/rc_dark/toolbar_move_vertical_focus@2x.png diff --git a/utils/rsc/rc_dark/toolbar_move_vertical_pressed.png b/rsc/rc_dark/toolbar_move_vertical_pressed.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_move_vertical_pressed.png rename to rsc/rc_dark/toolbar_move_vertical_pressed.png diff --git a/utils/rsc/rc_dark/toolbar_move_vertical_pressed@2x.png b/rsc/rc_dark/toolbar_move_vertical_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_move_vertical_pressed@2x.png rename to rsc/rc_dark/toolbar_move_vertical_pressed@2x.png diff --git a/utils/rsc/rc_dark/toolbar_separator_horizontal.png b/rsc/rc_dark/toolbar_separator_horizontal.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_separator_horizontal.png rename to rsc/rc_dark/toolbar_separator_horizontal.png diff --git a/utils/rsc/rc_dark/toolbar_separator_horizontal@2x.png b/rsc/rc_dark/toolbar_separator_horizontal@2x.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_separator_horizontal@2x.png rename to rsc/rc_dark/toolbar_separator_horizontal@2x.png diff --git a/utils/rsc/rc_dark/toolbar_separator_horizontal_disabled.png b/rsc/rc_dark/toolbar_separator_horizontal_disabled.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_separator_horizontal_disabled.png rename to rsc/rc_dark/toolbar_separator_horizontal_disabled.png diff --git a/utils/rsc/rc_dark/toolbar_separator_horizontal_disabled@2x.png b/rsc/rc_dark/toolbar_separator_horizontal_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_separator_horizontal_disabled@2x.png rename to rsc/rc_dark/toolbar_separator_horizontal_disabled@2x.png diff --git a/utils/rsc/rc_dark/toolbar_separator_horizontal_focus.png b/rsc/rc_dark/toolbar_separator_horizontal_focus.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_separator_horizontal_focus.png rename to rsc/rc_dark/toolbar_separator_horizontal_focus.png diff --git a/utils/rsc/rc_dark/toolbar_separator_horizontal_focus@2x.png b/rsc/rc_dark/toolbar_separator_horizontal_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_separator_horizontal_focus@2x.png rename to rsc/rc_dark/toolbar_separator_horizontal_focus@2x.png diff --git a/utils/rsc/rc_dark/toolbar_separator_horizontal_pressed.png b/rsc/rc_dark/toolbar_separator_horizontal_pressed.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_separator_horizontal_pressed.png rename to rsc/rc_dark/toolbar_separator_horizontal_pressed.png diff --git a/utils/rsc/rc_dark/toolbar_separator_horizontal_pressed@2x.png b/rsc/rc_dark/toolbar_separator_horizontal_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_separator_horizontal_pressed@2x.png rename to rsc/rc_dark/toolbar_separator_horizontal_pressed@2x.png diff --git a/utils/rsc/rc_dark/toolbar_separator_vertical.png b/rsc/rc_dark/toolbar_separator_vertical.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_separator_vertical.png rename to rsc/rc_dark/toolbar_separator_vertical.png diff --git a/utils/rsc/rc_dark/toolbar_separator_vertical@2x.png b/rsc/rc_dark/toolbar_separator_vertical@2x.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_separator_vertical@2x.png rename to rsc/rc_dark/toolbar_separator_vertical@2x.png diff --git a/utils/rsc/rc_dark/toolbar_separator_vertical_disabled.png b/rsc/rc_dark/toolbar_separator_vertical_disabled.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_separator_vertical_disabled.png rename to rsc/rc_dark/toolbar_separator_vertical_disabled.png diff --git a/utils/rsc/rc_dark/toolbar_separator_vertical_disabled@2x.png b/rsc/rc_dark/toolbar_separator_vertical_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_separator_vertical_disabled@2x.png rename to rsc/rc_dark/toolbar_separator_vertical_disabled@2x.png diff --git a/utils/rsc/rc_dark/toolbar_separator_vertical_focus.png b/rsc/rc_dark/toolbar_separator_vertical_focus.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_separator_vertical_focus.png rename to rsc/rc_dark/toolbar_separator_vertical_focus.png diff --git a/utils/rsc/rc_dark/toolbar_separator_vertical_focus@2x.png b/rsc/rc_dark/toolbar_separator_vertical_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_separator_vertical_focus@2x.png rename to rsc/rc_dark/toolbar_separator_vertical_focus@2x.png diff --git a/utils/rsc/rc_dark/toolbar_separator_vertical_pressed.png b/rsc/rc_dark/toolbar_separator_vertical_pressed.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_separator_vertical_pressed.png rename to rsc/rc_dark/toolbar_separator_vertical_pressed.png diff --git a/utils/rsc/rc_dark/toolbar_separator_vertical_pressed@2x.png b/rsc/rc_dark/toolbar_separator_vertical_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/toolbar_separator_vertical_pressed@2x.png rename to rsc/rc_dark/toolbar_separator_vertical_pressed@2x.png diff --git a/utils/rsc/rc_dark/transparent.png b/rsc/rc_dark/transparent.png similarity index 100% rename from utils/rsc/rc_dark/transparent.png rename to rsc/rc_dark/transparent.png diff --git a/utils/rsc/rc_dark/transparent@2x.png b/rsc/rc_dark/transparent@2x.png similarity index 100% rename from utils/rsc/rc_dark/transparent@2x.png rename to rsc/rc_dark/transparent@2x.png diff --git a/utils/rsc/rc_dark/transparent_disabled.png b/rsc/rc_dark/transparent_disabled.png similarity index 100% rename from utils/rsc/rc_dark/transparent_disabled.png rename to rsc/rc_dark/transparent_disabled.png diff --git a/utils/rsc/rc_dark/transparent_disabled@2x.png b/rsc/rc_dark/transparent_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/transparent_disabled@2x.png rename to rsc/rc_dark/transparent_disabled@2x.png diff --git a/utils/rsc/rc_dark/transparent_focus.png b/rsc/rc_dark/transparent_focus.png similarity index 100% rename from utils/rsc/rc_dark/transparent_focus.png rename to rsc/rc_dark/transparent_focus.png diff --git a/utils/rsc/rc_dark/transparent_focus@2x.png b/rsc/rc_dark/transparent_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/transparent_focus@2x.png rename to rsc/rc_dark/transparent_focus@2x.png diff --git a/utils/rsc/rc_dark/transparent_pressed.png b/rsc/rc_dark/transparent_pressed.png similarity index 100% rename from utils/rsc/rc_dark/transparent_pressed.png rename to rsc/rc_dark/transparent_pressed.png diff --git a/utils/rsc/rc_dark/transparent_pressed@2x.png b/rsc/rc_dark/transparent_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/transparent_pressed@2x.png rename to rsc/rc_dark/transparent_pressed@2x.png diff --git a/utils/rsc/rc_dark/window_close.png b/rsc/rc_dark/window_close.png similarity index 100% rename from utils/rsc/rc_dark/window_close.png rename to rsc/rc_dark/window_close.png diff --git a/utils/rsc/rc_dark/window_close@2x.png b/rsc/rc_dark/window_close@2x.png similarity index 100% rename from utils/rsc/rc_dark/window_close@2x.png rename to rsc/rc_dark/window_close@2x.png diff --git a/utils/rsc/rc_dark/window_close_disabled.png b/rsc/rc_dark/window_close_disabled.png similarity index 100% rename from utils/rsc/rc_dark/window_close_disabled.png rename to rsc/rc_dark/window_close_disabled.png diff --git a/utils/rsc/rc_dark/window_close_disabled@2x.png b/rsc/rc_dark/window_close_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/window_close_disabled@2x.png rename to rsc/rc_dark/window_close_disabled@2x.png diff --git a/utils/rsc/rc_dark/window_close_focus.png b/rsc/rc_dark/window_close_focus.png similarity index 100% rename from utils/rsc/rc_dark/window_close_focus.png rename to rsc/rc_dark/window_close_focus.png diff --git a/utils/rsc/rc_dark/window_close_focus@2x.png b/rsc/rc_dark/window_close_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/window_close_focus@2x.png rename to rsc/rc_dark/window_close_focus@2x.png diff --git a/utils/rsc/rc_dark/window_close_pressed.png b/rsc/rc_dark/window_close_pressed.png similarity index 100% rename from utils/rsc/rc_dark/window_close_pressed.png rename to rsc/rc_dark/window_close_pressed.png diff --git a/utils/rsc/rc_dark/window_close_pressed@2x.png b/rsc/rc_dark/window_close_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/window_close_pressed@2x.png rename to rsc/rc_dark/window_close_pressed@2x.png diff --git a/utils/rsc/rc_dark/window_grip.png b/rsc/rc_dark/window_grip.png similarity index 100% rename from utils/rsc/rc_dark/window_grip.png rename to rsc/rc_dark/window_grip.png diff --git a/utils/rsc/rc_dark/window_grip@2x.png b/rsc/rc_dark/window_grip@2x.png similarity index 100% rename from utils/rsc/rc_dark/window_grip@2x.png rename to rsc/rc_dark/window_grip@2x.png diff --git a/utils/rsc/rc_dark/window_grip_disabled.png b/rsc/rc_dark/window_grip_disabled.png similarity index 100% rename from utils/rsc/rc_dark/window_grip_disabled.png rename to rsc/rc_dark/window_grip_disabled.png diff --git a/utils/rsc/rc_dark/window_grip_disabled@2x.png b/rsc/rc_dark/window_grip_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/window_grip_disabled@2x.png rename to rsc/rc_dark/window_grip_disabled@2x.png diff --git a/utils/rsc/rc_dark/window_grip_focus.png b/rsc/rc_dark/window_grip_focus.png similarity index 100% rename from utils/rsc/rc_dark/window_grip_focus.png rename to rsc/rc_dark/window_grip_focus.png diff --git a/utils/rsc/rc_dark/window_grip_focus@2x.png b/rsc/rc_dark/window_grip_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/window_grip_focus@2x.png rename to rsc/rc_dark/window_grip_focus@2x.png diff --git a/utils/rsc/rc_dark/window_grip_pressed.png b/rsc/rc_dark/window_grip_pressed.png similarity index 100% rename from utils/rsc/rc_dark/window_grip_pressed.png rename to rsc/rc_dark/window_grip_pressed.png diff --git a/utils/rsc/rc_dark/window_grip_pressed@2x.png b/rsc/rc_dark/window_grip_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/window_grip_pressed@2x.png rename to rsc/rc_dark/window_grip_pressed@2x.png diff --git a/utils/rsc/rc_dark/window_minimize.png b/rsc/rc_dark/window_minimize.png similarity index 100% rename from utils/rsc/rc_dark/window_minimize.png rename to rsc/rc_dark/window_minimize.png diff --git a/utils/rsc/rc_dark/window_minimize@2x.png b/rsc/rc_dark/window_minimize@2x.png similarity index 100% rename from utils/rsc/rc_dark/window_minimize@2x.png rename to rsc/rc_dark/window_minimize@2x.png diff --git a/utils/rsc/rc_dark/window_minimize_disabled.png b/rsc/rc_dark/window_minimize_disabled.png similarity index 100% rename from utils/rsc/rc_dark/window_minimize_disabled.png rename to rsc/rc_dark/window_minimize_disabled.png diff --git a/utils/rsc/rc_dark/window_minimize_disabled@2x.png b/rsc/rc_dark/window_minimize_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/window_minimize_disabled@2x.png rename to rsc/rc_dark/window_minimize_disabled@2x.png diff --git a/utils/rsc/rc_dark/window_minimize_focus.png b/rsc/rc_dark/window_minimize_focus.png similarity index 100% rename from utils/rsc/rc_dark/window_minimize_focus.png rename to rsc/rc_dark/window_minimize_focus.png diff --git a/utils/rsc/rc_dark/window_minimize_focus@2x.png b/rsc/rc_dark/window_minimize_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/window_minimize_focus@2x.png rename to rsc/rc_dark/window_minimize_focus@2x.png diff --git a/utils/rsc/rc_dark/window_minimize_pressed.png b/rsc/rc_dark/window_minimize_pressed.png similarity index 100% rename from utils/rsc/rc_dark/window_minimize_pressed.png rename to rsc/rc_dark/window_minimize_pressed.png diff --git a/utils/rsc/rc_dark/window_minimize_pressed@2x.png b/rsc/rc_dark/window_minimize_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/window_minimize_pressed@2x.png rename to rsc/rc_dark/window_minimize_pressed@2x.png diff --git a/utils/rsc/rc_dark/window_undock.png b/rsc/rc_dark/window_undock.png similarity index 100% rename from utils/rsc/rc_dark/window_undock.png rename to rsc/rc_dark/window_undock.png diff --git a/utils/rsc/rc_dark/window_undock@2x.png b/rsc/rc_dark/window_undock@2x.png similarity index 100% rename from utils/rsc/rc_dark/window_undock@2x.png rename to rsc/rc_dark/window_undock@2x.png diff --git a/utils/rsc/rc_dark/window_undock_disabled.png b/rsc/rc_dark/window_undock_disabled.png similarity index 100% rename from utils/rsc/rc_dark/window_undock_disabled.png rename to rsc/rc_dark/window_undock_disabled.png diff --git a/utils/rsc/rc_dark/window_undock_disabled@2x.png b/rsc/rc_dark/window_undock_disabled@2x.png similarity index 100% rename from utils/rsc/rc_dark/window_undock_disabled@2x.png rename to rsc/rc_dark/window_undock_disabled@2x.png diff --git a/utils/rsc/rc_dark/window_undock_focus.png b/rsc/rc_dark/window_undock_focus.png similarity index 100% rename from utils/rsc/rc_dark/window_undock_focus.png rename to rsc/rc_dark/window_undock_focus.png diff --git a/utils/rsc/rc_dark/window_undock_focus@2x.png b/rsc/rc_dark/window_undock_focus@2x.png similarity index 100% rename from utils/rsc/rc_dark/window_undock_focus@2x.png rename to rsc/rc_dark/window_undock_focus@2x.png diff --git a/utils/rsc/rc_dark/window_undock_pressed.png b/rsc/rc_dark/window_undock_pressed.png similarity index 100% rename from utils/rsc/rc_dark/window_undock_pressed.png rename to rsc/rc_dark/window_undock_pressed.png diff --git a/utils/rsc/rc_dark/window_undock_pressed@2x.png b/rsc/rc_dark/window_undock_pressed@2x.png similarity index 100% rename from utils/rsc/rc_dark/window_undock_pressed@2x.png rename to rsc/rc_dark/window_undock_pressed@2x.png diff --git a/utils/rsc/rc_light/.keep b/rsc/rc_light/.keep similarity index 100% rename from utils/rsc/rc_light/.keep rename to rsc/rc_light/.keep diff --git a/utils/rsc/rc_light/arrow_down.png b/rsc/rc_light/arrow_down.png similarity index 100% rename from utils/rsc/rc_light/arrow_down.png rename to rsc/rc_light/arrow_down.png diff --git a/utils/rsc/rc_light/arrow_down@2x.png b/rsc/rc_light/arrow_down@2x.png similarity index 100% rename from utils/rsc/rc_light/arrow_down@2x.png rename to rsc/rc_light/arrow_down@2x.png diff --git a/utils/rsc/rc_light/arrow_down_disabled.png b/rsc/rc_light/arrow_down_disabled.png similarity index 100% rename from utils/rsc/rc_light/arrow_down_disabled.png rename to rsc/rc_light/arrow_down_disabled.png diff --git a/utils/rsc/rc_light/arrow_down_disabled@2x.png b/rsc/rc_light/arrow_down_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/arrow_down_disabled@2x.png rename to rsc/rc_light/arrow_down_disabled@2x.png diff --git a/utils/rsc/rc_light/arrow_down_focus.png b/rsc/rc_light/arrow_down_focus.png similarity index 100% rename from utils/rsc/rc_light/arrow_down_focus.png rename to rsc/rc_light/arrow_down_focus.png diff --git a/utils/rsc/rc_light/arrow_down_focus@2x.png b/rsc/rc_light/arrow_down_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/arrow_down_focus@2x.png rename to rsc/rc_light/arrow_down_focus@2x.png diff --git a/utils/rsc/rc_light/arrow_down_pressed.png b/rsc/rc_light/arrow_down_pressed.png similarity index 100% rename from utils/rsc/rc_light/arrow_down_pressed.png rename to rsc/rc_light/arrow_down_pressed.png diff --git a/utils/rsc/rc_light/arrow_down_pressed@2x.png b/rsc/rc_light/arrow_down_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/arrow_down_pressed@2x.png rename to rsc/rc_light/arrow_down_pressed@2x.png diff --git a/utils/rsc/rc_light/arrow_left.png b/rsc/rc_light/arrow_left.png similarity index 100% rename from utils/rsc/rc_light/arrow_left.png rename to rsc/rc_light/arrow_left.png diff --git a/utils/rsc/rc_light/arrow_left@2x.png b/rsc/rc_light/arrow_left@2x.png similarity index 100% rename from utils/rsc/rc_light/arrow_left@2x.png rename to rsc/rc_light/arrow_left@2x.png diff --git a/utils/rsc/rc_light/arrow_left_disabled.png b/rsc/rc_light/arrow_left_disabled.png similarity index 100% rename from utils/rsc/rc_light/arrow_left_disabled.png rename to rsc/rc_light/arrow_left_disabled.png diff --git a/utils/rsc/rc_light/arrow_left_disabled@2x.png b/rsc/rc_light/arrow_left_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/arrow_left_disabled@2x.png rename to rsc/rc_light/arrow_left_disabled@2x.png diff --git a/utils/rsc/rc_light/arrow_left_focus.png b/rsc/rc_light/arrow_left_focus.png similarity index 100% rename from utils/rsc/rc_light/arrow_left_focus.png rename to rsc/rc_light/arrow_left_focus.png diff --git a/utils/rsc/rc_light/arrow_left_focus@2x.png b/rsc/rc_light/arrow_left_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/arrow_left_focus@2x.png rename to rsc/rc_light/arrow_left_focus@2x.png diff --git a/utils/rsc/rc_light/arrow_left_pressed.png b/rsc/rc_light/arrow_left_pressed.png similarity index 100% rename from utils/rsc/rc_light/arrow_left_pressed.png rename to rsc/rc_light/arrow_left_pressed.png diff --git a/utils/rsc/rc_light/arrow_left_pressed@2x.png b/rsc/rc_light/arrow_left_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/arrow_left_pressed@2x.png rename to rsc/rc_light/arrow_left_pressed@2x.png diff --git a/utils/rsc/rc_light/arrow_right.png b/rsc/rc_light/arrow_right.png similarity index 100% rename from utils/rsc/rc_light/arrow_right.png rename to rsc/rc_light/arrow_right.png diff --git a/utils/rsc/rc_light/arrow_right@2x.png b/rsc/rc_light/arrow_right@2x.png similarity index 100% rename from utils/rsc/rc_light/arrow_right@2x.png rename to rsc/rc_light/arrow_right@2x.png diff --git a/utils/rsc/rc_light/arrow_right_disabled.png b/rsc/rc_light/arrow_right_disabled.png similarity index 100% rename from utils/rsc/rc_light/arrow_right_disabled.png rename to rsc/rc_light/arrow_right_disabled.png diff --git a/utils/rsc/rc_light/arrow_right_disabled@2x.png b/rsc/rc_light/arrow_right_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/arrow_right_disabled@2x.png rename to rsc/rc_light/arrow_right_disabled@2x.png diff --git a/utils/rsc/rc_light/arrow_right_focus.png b/rsc/rc_light/arrow_right_focus.png similarity index 100% rename from utils/rsc/rc_light/arrow_right_focus.png rename to rsc/rc_light/arrow_right_focus.png diff --git a/utils/rsc/rc_light/arrow_right_focus@2x.png b/rsc/rc_light/arrow_right_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/arrow_right_focus@2x.png rename to rsc/rc_light/arrow_right_focus@2x.png diff --git a/utils/rsc/rc_light/arrow_right_pressed.png b/rsc/rc_light/arrow_right_pressed.png similarity index 100% rename from utils/rsc/rc_light/arrow_right_pressed.png rename to rsc/rc_light/arrow_right_pressed.png diff --git a/utils/rsc/rc_light/arrow_right_pressed@2x.png b/rsc/rc_light/arrow_right_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/arrow_right_pressed@2x.png rename to rsc/rc_light/arrow_right_pressed@2x.png diff --git a/utils/rsc/rc_light/arrow_up.png b/rsc/rc_light/arrow_up.png similarity index 100% rename from utils/rsc/rc_light/arrow_up.png rename to rsc/rc_light/arrow_up.png diff --git a/utils/rsc/rc_light/arrow_up@2x.png b/rsc/rc_light/arrow_up@2x.png similarity index 100% rename from utils/rsc/rc_light/arrow_up@2x.png rename to rsc/rc_light/arrow_up@2x.png diff --git a/utils/rsc/rc_light/arrow_up_disabled.png b/rsc/rc_light/arrow_up_disabled.png similarity index 100% rename from utils/rsc/rc_light/arrow_up_disabled.png rename to rsc/rc_light/arrow_up_disabled.png diff --git a/utils/rsc/rc_light/arrow_up_disabled@2x.png b/rsc/rc_light/arrow_up_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/arrow_up_disabled@2x.png rename to rsc/rc_light/arrow_up_disabled@2x.png diff --git a/utils/rsc/rc_light/arrow_up_focus.png b/rsc/rc_light/arrow_up_focus.png similarity index 100% rename from utils/rsc/rc_light/arrow_up_focus.png rename to rsc/rc_light/arrow_up_focus.png diff --git a/utils/rsc/rc_light/arrow_up_focus@2x.png b/rsc/rc_light/arrow_up_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/arrow_up_focus@2x.png rename to rsc/rc_light/arrow_up_focus@2x.png diff --git a/utils/rsc/rc_light/arrow_up_pressed.png b/rsc/rc_light/arrow_up_pressed.png similarity index 100% rename from utils/rsc/rc_light/arrow_up_pressed.png rename to rsc/rc_light/arrow_up_pressed.png diff --git a/utils/rsc/rc_light/arrow_up_pressed@2x.png b/rsc/rc_light/arrow_up_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/arrow_up_pressed@2x.png rename to rsc/rc_light/arrow_up_pressed@2x.png diff --git a/utils/rsc/rc_light/base_icon.png b/rsc/rc_light/base_icon.png similarity index 100% rename from utils/rsc/rc_light/base_icon.png rename to rsc/rc_light/base_icon.png diff --git a/utils/rsc/rc_light/base_icon@2x.png b/rsc/rc_light/base_icon@2x.png similarity index 100% rename from utils/rsc/rc_light/base_icon@2x.png rename to rsc/rc_light/base_icon@2x.png diff --git a/utils/rsc/rc_light/base_icon_disabled.png b/rsc/rc_light/base_icon_disabled.png similarity index 100% rename from utils/rsc/rc_light/base_icon_disabled.png rename to rsc/rc_light/base_icon_disabled.png diff --git a/utils/rsc/rc_light/base_icon_disabled@2x.png b/rsc/rc_light/base_icon_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/base_icon_disabled@2x.png rename to rsc/rc_light/base_icon_disabled@2x.png diff --git a/utils/rsc/rc_light/base_icon_focus.png b/rsc/rc_light/base_icon_focus.png similarity index 100% rename from utils/rsc/rc_light/base_icon_focus.png rename to rsc/rc_light/base_icon_focus.png diff --git a/utils/rsc/rc_light/base_icon_focus@2x.png b/rsc/rc_light/base_icon_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/base_icon_focus@2x.png rename to rsc/rc_light/base_icon_focus@2x.png diff --git a/utils/rsc/rc_light/base_icon_pressed.png b/rsc/rc_light/base_icon_pressed.png similarity index 100% rename from utils/rsc/rc_light/base_icon_pressed.png rename to rsc/rc_light/base_icon_pressed.png diff --git a/utils/rsc/rc_light/base_icon_pressed@2x.png b/rsc/rc_light/base_icon_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/base_icon_pressed@2x.png rename to rsc/rc_light/base_icon_pressed@2x.png diff --git a/utils/rsc/rc_light/branch_closed.png b/rsc/rc_light/branch_closed.png similarity index 100% rename from utils/rsc/rc_light/branch_closed.png rename to rsc/rc_light/branch_closed.png diff --git a/utils/rsc/rc_light/branch_closed@2x.png b/rsc/rc_light/branch_closed@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_closed@2x.png rename to rsc/rc_light/branch_closed@2x.png diff --git a/utils/rsc/rc_light/branch_closed_disabled.png b/rsc/rc_light/branch_closed_disabled.png similarity index 100% rename from utils/rsc/rc_light/branch_closed_disabled.png rename to rsc/rc_light/branch_closed_disabled.png diff --git a/utils/rsc/rc_light/branch_closed_disabled@2x.png b/rsc/rc_light/branch_closed_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_closed_disabled@2x.png rename to rsc/rc_light/branch_closed_disabled@2x.png diff --git a/utils/rsc/rc_light/branch_closed_focus.png b/rsc/rc_light/branch_closed_focus.png similarity index 100% rename from utils/rsc/rc_light/branch_closed_focus.png rename to rsc/rc_light/branch_closed_focus.png diff --git a/utils/rsc/rc_light/branch_closed_focus@2x.png b/rsc/rc_light/branch_closed_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_closed_focus@2x.png rename to rsc/rc_light/branch_closed_focus@2x.png diff --git a/utils/rsc/rc_light/branch_closed_pressed.png b/rsc/rc_light/branch_closed_pressed.png similarity index 100% rename from utils/rsc/rc_light/branch_closed_pressed.png rename to rsc/rc_light/branch_closed_pressed.png diff --git a/utils/rsc/rc_light/branch_closed_pressed@2x.png b/rsc/rc_light/branch_closed_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_closed_pressed@2x.png rename to rsc/rc_light/branch_closed_pressed@2x.png diff --git a/utils/rsc/rc_light/branch_end.png b/rsc/rc_light/branch_end.png similarity index 100% rename from utils/rsc/rc_light/branch_end.png rename to rsc/rc_light/branch_end.png diff --git a/utils/rsc/rc_light/branch_end@2x.png b/rsc/rc_light/branch_end@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_end@2x.png rename to rsc/rc_light/branch_end@2x.png diff --git a/utils/rsc/rc_light/branch_end_disabled.png b/rsc/rc_light/branch_end_disabled.png similarity index 100% rename from utils/rsc/rc_light/branch_end_disabled.png rename to rsc/rc_light/branch_end_disabled.png diff --git a/utils/rsc/rc_light/branch_end_disabled@2x.png b/rsc/rc_light/branch_end_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_end_disabled@2x.png rename to rsc/rc_light/branch_end_disabled@2x.png diff --git a/utils/rsc/rc_light/branch_end_focus.png b/rsc/rc_light/branch_end_focus.png similarity index 100% rename from utils/rsc/rc_light/branch_end_focus.png rename to rsc/rc_light/branch_end_focus.png diff --git a/utils/rsc/rc_light/branch_end_focus@2x.png b/rsc/rc_light/branch_end_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_end_focus@2x.png rename to rsc/rc_light/branch_end_focus@2x.png diff --git a/utils/rsc/rc_light/branch_end_pressed.png b/rsc/rc_light/branch_end_pressed.png similarity index 100% rename from utils/rsc/rc_light/branch_end_pressed.png rename to rsc/rc_light/branch_end_pressed.png diff --git a/utils/rsc/rc_light/branch_end_pressed@2x.png b/rsc/rc_light/branch_end_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_end_pressed@2x.png rename to rsc/rc_light/branch_end_pressed@2x.png diff --git a/utils/rsc/rc_light/branch_line.png b/rsc/rc_light/branch_line.png similarity index 100% rename from utils/rsc/rc_light/branch_line.png rename to rsc/rc_light/branch_line.png diff --git a/utils/rsc/rc_light/branch_line@2x.png b/rsc/rc_light/branch_line@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_line@2x.png rename to rsc/rc_light/branch_line@2x.png diff --git a/utils/rsc/rc_light/branch_line_disabled.png b/rsc/rc_light/branch_line_disabled.png similarity index 100% rename from utils/rsc/rc_light/branch_line_disabled.png rename to rsc/rc_light/branch_line_disabled.png diff --git a/utils/rsc/rc_light/branch_line_disabled@2x.png b/rsc/rc_light/branch_line_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_line_disabled@2x.png rename to rsc/rc_light/branch_line_disabled@2x.png diff --git a/utils/rsc/rc_light/branch_line_focus.png b/rsc/rc_light/branch_line_focus.png similarity index 100% rename from utils/rsc/rc_light/branch_line_focus.png rename to rsc/rc_light/branch_line_focus.png diff --git a/utils/rsc/rc_light/branch_line_focus@2x.png b/rsc/rc_light/branch_line_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_line_focus@2x.png rename to rsc/rc_light/branch_line_focus@2x.png diff --git a/utils/rsc/rc_light/branch_line_pressed.png b/rsc/rc_light/branch_line_pressed.png similarity index 100% rename from utils/rsc/rc_light/branch_line_pressed.png rename to rsc/rc_light/branch_line_pressed.png diff --git a/utils/rsc/rc_light/branch_line_pressed@2x.png b/rsc/rc_light/branch_line_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_line_pressed@2x.png rename to rsc/rc_light/branch_line_pressed@2x.png diff --git a/utils/rsc/rc_light/branch_more.png b/rsc/rc_light/branch_more.png similarity index 100% rename from utils/rsc/rc_light/branch_more.png rename to rsc/rc_light/branch_more.png diff --git a/utils/rsc/rc_light/branch_more@2x.png b/rsc/rc_light/branch_more@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_more@2x.png rename to rsc/rc_light/branch_more@2x.png diff --git a/utils/rsc/rc_light/branch_more_disabled.png b/rsc/rc_light/branch_more_disabled.png similarity index 100% rename from utils/rsc/rc_light/branch_more_disabled.png rename to rsc/rc_light/branch_more_disabled.png diff --git a/utils/rsc/rc_light/branch_more_disabled@2x.png b/rsc/rc_light/branch_more_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_more_disabled@2x.png rename to rsc/rc_light/branch_more_disabled@2x.png diff --git a/utils/rsc/rc_light/branch_more_focus.png b/rsc/rc_light/branch_more_focus.png similarity index 100% rename from utils/rsc/rc_light/branch_more_focus.png rename to rsc/rc_light/branch_more_focus.png diff --git a/utils/rsc/rc_light/branch_more_focus@2x.png b/rsc/rc_light/branch_more_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_more_focus@2x.png rename to rsc/rc_light/branch_more_focus@2x.png diff --git a/utils/rsc/rc_light/branch_more_pressed.png b/rsc/rc_light/branch_more_pressed.png similarity index 100% rename from utils/rsc/rc_light/branch_more_pressed.png rename to rsc/rc_light/branch_more_pressed.png diff --git a/utils/rsc/rc_light/branch_more_pressed@2x.png b/rsc/rc_light/branch_more_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_more_pressed@2x.png rename to rsc/rc_light/branch_more_pressed@2x.png diff --git a/utils/rsc/rc_light/branch_open.png b/rsc/rc_light/branch_open.png similarity index 100% rename from utils/rsc/rc_light/branch_open.png rename to rsc/rc_light/branch_open.png diff --git a/utils/rsc/rc_light/branch_open@2x.png b/rsc/rc_light/branch_open@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_open@2x.png rename to rsc/rc_light/branch_open@2x.png diff --git a/utils/rsc/rc_light/branch_open_disabled.png b/rsc/rc_light/branch_open_disabled.png similarity index 100% rename from utils/rsc/rc_light/branch_open_disabled.png rename to rsc/rc_light/branch_open_disabled.png diff --git a/utils/rsc/rc_light/branch_open_disabled@2x.png b/rsc/rc_light/branch_open_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_open_disabled@2x.png rename to rsc/rc_light/branch_open_disabled@2x.png diff --git a/utils/rsc/rc_light/branch_open_focus.png b/rsc/rc_light/branch_open_focus.png similarity index 100% rename from utils/rsc/rc_light/branch_open_focus.png rename to rsc/rc_light/branch_open_focus.png diff --git a/utils/rsc/rc_light/branch_open_focus@2x.png b/rsc/rc_light/branch_open_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_open_focus@2x.png rename to rsc/rc_light/branch_open_focus@2x.png diff --git a/utils/rsc/rc_light/branch_open_pressed.png b/rsc/rc_light/branch_open_pressed.png similarity index 100% rename from utils/rsc/rc_light/branch_open_pressed.png rename to rsc/rc_light/branch_open_pressed.png diff --git a/utils/rsc/rc_light/branch_open_pressed@2x.png b/rsc/rc_light/branch_open_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/branch_open_pressed@2x.png rename to rsc/rc_light/branch_open_pressed@2x.png diff --git a/utils/rsc/rc_light/checkbox_checked.png b/rsc/rc_light/checkbox_checked.png similarity index 100% rename from utils/rsc/rc_light/checkbox_checked.png rename to rsc/rc_light/checkbox_checked.png diff --git a/utils/rsc/rc_light/checkbox_checked@2x.png b/rsc/rc_light/checkbox_checked@2x.png similarity index 100% rename from utils/rsc/rc_light/checkbox_checked@2x.png rename to rsc/rc_light/checkbox_checked@2x.png diff --git a/utils/rsc/rc_light/checkbox_checked_disabled.png b/rsc/rc_light/checkbox_checked_disabled.png similarity index 100% rename from utils/rsc/rc_light/checkbox_checked_disabled.png rename to rsc/rc_light/checkbox_checked_disabled.png diff --git a/utils/rsc/rc_light/checkbox_checked_disabled@2x.png b/rsc/rc_light/checkbox_checked_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/checkbox_checked_disabled@2x.png rename to rsc/rc_light/checkbox_checked_disabled@2x.png diff --git a/utils/rsc/rc_light/checkbox_checked_focus.png b/rsc/rc_light/checkbox_checked_focus.png similarity index 100% rename from utils/rsc/rc_light/checkbox_checked_focus.png rename to rsc/rc_light/checkbox_checked_focus.png diff --git a/utils/rsc/rc_light/checkbox_checked_focus@2x.png b/rsc/rc_light/checkbox_checked_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/checkbox_checked_focus@2x.png rename to rsc/rc_light/checkbox_checked_focus@2x.png diff --git a/utils/rsc/rc_light/checkbox_checked_pressed.png b/rsc/rc_light/checkbox_checked_pressed.png similarity index 100% rename from utils/rsc/rc_light/checkbox_checked_pressed.png rename to rsc/rc_light/checkbox_checked_pressed.png diff --git a/utils/rsc/rc_light/checkbox_checked_pressed@2x.png b/rsc/rc_light/checkbox_checked_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/checkbox_checked_pressed@2x.png rename to rsc/rc_light/checkbox_checked_pressed@2x.png diff --git a/utils/rsc/rc_light/checkbox_indeterminate.png b/rsc/rc_light/checkbox_indeterminate.png similarity index 100% rename from utils/rsc/rc_light/checkbox_indeterminate.png rename to rsc/rc_light/checkbox_indeterminate.png diff --git a/utils/rsc/rc_light/checkbox_indeterminate@2x.png b/rsc/rc_light/checkbox_indeterminate@2x.png similarity index 100% rename from utils/rsc/rc_light/checkbox_indeterminate@2x.png rename to rsc/rc_light/checkbox_indeterminate@2x.png diff --git a/utils/rsc/rc_light/checkbox_indeterminate_disabled.png b/rsc/rc_light/checkbox_indeterminate_disabled.png similarity index 100% rename from utils/rsc/rc_light/checkbox_indeterminate_disabled.png rename to rsc/rc_light/checkbox_indeterminate_disabled.png diff --git a/utils/rsc/rc_light/checkbox_indeterminate_disabled@2x.png b/rsc/rc_light/checkbox_indeterminate_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/checkbox_indeterminate_disabled@2x.png rename to rsc/rc_light/checkbox_indeterminate_disabled@2x.png diff --git a/utils/rsc/rc_light/checkbox_indeterminate_focus.png b/rsc/rc_light/checkbox_indeterminate_focus.png similarity index 100% rename from utils/rsc/rc_light/checkbox_indeterminate_focus.png rename to rsc/rc_light/checkbox_indeterminate_focus.png diff --git a/utils/rsc/rc_light/checkbox_indeterminate_focus@2x.png b/rsc/rc_light/checkbox_indeterminate_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/checkbox_indeterminate_focus@2x.png rename to rsc/rc_light/checkbox_indeterminate_focus@2x.png diff --git a/utils/rsc/rc_light/checkbox_indeterminate_pressed.png b/rsc/rc_light/checkbox_indeterminate_pressed.png similarity index 100% rename from utils/rsc/rc_light/checkbox_indeterminate_pressed.png rename to rsc/rc_light/checkbox_indeterminate_pressed.png diff --git a/utils/rsc/rc_light/checkbox_indeterminate_pressed@2x.png b/rsc/rc_light/checkbox_indeterminate_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/checkbox_indeterminate_pressed@2x.png rename to rsc/rc_light/checkbox_indeterminate_pressed@2x.png diff --git a/utils/rsc/rc_light/checkbox_unchecked.png b/rsc/rc_light/checkbox_unchecked.png similarity index 100% rename from utils/rsc/rc_light/checkbox_unchecked.png rename to rsc/rc_light/checkbox_unchecked.png diff --git a/utils/rsc/rc_light/checkbox_unchecked@2x.png b/rsc/rc_light/checkbox_unchecked@2x.png similarity index 100% rename from utils/rsc/rc_light/checkbox_unchecked@2x.png rename to rsc/rc_light/checkbox_unchecked@2x.png diff --git a/utils/rsc/rc_light/checkbox_unchecked_disabled.png b/rsc/rc_light/checkbox_unchecked_disabled.png similarity index 100% rename from utils/rsc/rc_light/checkbox_unchecked_disabled.png rename to rsc/rc_light/checkbox_unchecked_disabled.png diff --git a/utils/rsc/rc_light/checkbox_unchecked_disabled@2x.png b/rsc/rc_light/checkbox_unchecked_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/checkbox_unchecked_disabled@2x.png rename to rsc/rc_light/checkbox_unchecked_disabled@2x.png diff --git a/utils/rsc/rc_light/checkbox_unchecked_focus.png b/rsc/rc_light/checkbox_unchecked_focus.png similarity index 100% rename from utils/rsc/rc_light/checkbox_unchecked_focus.png rename to rsc/rc_light/checkbox_unchecked_focus.png diff --git a/utils/rsc/rc_light/checkbox_unchecked_focus@2x.png b/rsc/rc_light/checkbox_unchecked_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/checkbox_unchecked_focus@2x.png rename to rsc/rc_light/checkbox_unchecked_focus@2x.png diff --git a/utils/rsc/rc_light/checkbox_unchecked_pressed.png b/rsc/rc_light/checkbox_unchecked_pressed.png similarity index 100% rename from utils/rsc/rc_light/checkbox_unchecked_pressed.png rename to rsc/rc_light/checkbox_unchecked_pressed.png diff --git a/utils/rsc/rc_light/checkbox_unchecked_pressed@2x.png b/rsc/rc_light/checkbox_unchecked_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/checkbox_unchecked_pressed@2x.png rename to rsc/rc_light/checkbox_unchecked_pressed@2x.png diff --git a/utils/rsc/rc_light/line_horizontal.png b/rsc/rc_light/line_horizontal.png similarity index 100% rename from utils/rsc/rc_light/line_horizontal.png rename to rsc/rc_light/line_horizontal.png diff --git a/utils/rsc/rc_light/line_horizontal@2x.png b/rsc/rc_light/line_horizontal@2x.png similarity index 100% rename from utils/rsc/rc_light/line_horizontal@2x.png rename to rsc/rc_light/line_horizontal@2x.png diff --git a/utils/rsc/rc_light/line_horizontal_disabled.png b/rsc/rc_light/line_horizontal_disabled.png similarity index 100% rename from utils/rsc/rc_light/line_horizontal_disabled.png rename to rsc/rc_light/line_horizontal_disabled.png diff --git a/utils/rsc/rc_light/line_horizontal_disabled@2x.png b/rsc/rc_light/line_horizontal_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/line_horizontal_disabled@2x.png rename to rsc/rc_light/line_horizontal_disabled@2x.png diff --git a/utils/rsc/rc_light/line_horizontal_focus.png b/rsc/rc_light/line_horizontal_focus.png similarity index 100% rename from utils/rsc/rc_light/line_horizontal_focus.png rename to rsc/rc_light/line_horizontal_focus.png diff --git a/utils/rsc/rc_light/line_horizontal_focus@2x.png b/rsc/rc_light/line_horizontal_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/line_horizontal_focus@2x.png rename to rsc/rc_light/line_horizontal_focus@2x.png diff --git a/utils/rsc/rc_light/line_horizontal_pressed.png b/rsc/rc_light/line_horizontal_pressed.png similarity index 100% rename from utils/rsc/rc_light/line_horizontal_pressed.png rename to rsc/rc_light/line_horizontal_pressed.png diff --git a/utils/rsc/rc_light/line_horizontal_pressed@2x.png b/rsc/rc_light/line_horizontal_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/line_horizontal_pressed@2x.png rename to rsc/rc_light/line_horizontal_pressed@2x.png diff --git a/utils/rsc/rc_light/line_vertical.png b/rsc/rc_light/line_vertical.png similarity index 100% rename from utils/rsc/rc_light/line_vertical.png rename to rsc/rc_light/line_vertical.png diff --git a/utils/rsc/rc_light/line_vertical@2x.png b/rsc/rc_light/line_vertical@2x.png similarity index 100% rename from utils/rsc/rc_light/line_vertical@2x.png rename to rsc/rc_light/line_vertical@2x.png diff --git a/utils/rsc/rc_light/line_vertical_disabled.png b/rsc/rc_light/line_vertical_disabled.png similarity index 100% rename from utils/rsc/rc_light/line_vertical_disabled.png rename to rsc/rc_light/line_vertical_disabled.png diff --git a/utils/rsc/rc_light/line_vertical_disabled@2x.png b/rsc/rc_light/line_vertical_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/line_vertical_disabled@2x.png rename to rsc/rc_light/line_vertical_disabled@2x.png diff --git a/utils/rsc/rc_light/line_vertical_focus.png b/rsc/rc_light/line_vertical_focus.png similarity index 100% rename from utils/rsc/rc_light/line_vertical_focus.png rename to rsc/rc_light/line_vertical_focus.png diff --git a/utils/rsc/rc_light/line_vertical_focus@2x.png b/rsc/rc_light/line_vertical_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/line_vertical_focus@2x.png rename to rsc/rc_light/line_vertical_focus@2x.png diff --git a/utils/rsc/rc_light/line_vertical_pressed.png b/rsc/rc_light/line_vertical_pressed.png similarity index 100% rename from utils/rsc/rc_light/line_vertical_pressed.png rename to rsc/rc_light/line_vertical_pressed.png diff --git a/utils/rsc/rc_light/line_vertical_pressed@2x.png b/rsc/rc_light/line_vertical_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/line_vertical_pressed@2x.png rename to rsc/rc_light/line_vertical_pressed@2x.png diff --git a/utils/rsc/rc_light/radio_checked.png b/rsc/rc_light/radio_checked.png similarity index 100% rename from utils/rsc/rc_light/radio_checked.png rename to rsc/rc_light/radio_checked.png diff --git a/utils/rsc/rc_light/radio_checked@2x.png b/rsc/rc_light/radio_checked@2x.png similarity index 100% rename from utils/rsc/rc_light/radio_checked@2x.png rename to rsc/rc_light/radio_checked@2x.png diff --git a/utils/rsc/rc_light/radio_checked_disabled.png b/rsc/rc_light/radio_checked_disabled.png similarity index 100% rename from utils/rsc/rc_light/radio_checked_disabled.png rename to rsc/rc_light/radio_checked_disabled.png diff --git a/utils/rsc/rc_light/radio_checked_disabled@2x.png b/rsc/rc_light/radio_checked_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/radio_checked_disabled@2x.png rename to rsc/rc_light/radio_checked_disabled@2x.png diff --git a/utils/rsc/rc_light/radio_checked_focus.png b/rsc/rc_light/radio_checked_focus.png similarity index 100% rename from utils/rsc/rc_light/radio_checked_focus.png rename to rsc/rc_light/radio_checked_focus.png diff --git a/utils/rsc/rc_light/radio_checked_focus@2x.png b/rsc/rc_light/radio_checked_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/radio_checked_focus@2x.png rename to rsc/rc_light/radio_checked_focus@2x.png diff --git a/utils/rsc/rc_light/radio_checked_pressed.png b/rsc/rc_light/radio_checked_pressed.png similarity index 100% rename from utils/rsc/rc_light/radio_checked_pressed.png rename to rsc/rc_light/radio_checked_pressed.png diff --git a/utils/rsc/rc_light/radio_checked_pressed@2x.png b/rsc/rc_light/radio_checked_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/radio_checked_pressed@2x.png rename to rsc/rc_light/radio_checked_pressed@2x.png diff --git a/utils/rsc/rc_light/radio_unchecked.png b/rsc/rc_light/radio_unchecked.png similarity index 100% rename from utils/rsc/rc_light/radio_unchecked.png rename to rsc/rc_light/radio_unchecked.png diff --git a/utils/rsc/rc_light/radio_unchecked@2x.png b/rsc/rc_light/radio_unchecked@2x.png similarity index 100% rename from utils/rsc/rc_light/radio_unchecked@2x.png rename to rsc/rc_light/radio_unchecked@2x.png diff --git a/utils/rsc/rc_light/radio_unchecked_disabled.png b/rsc/rc_light/radio_unchecked_disabled.png similarity index 100% rename from utils/rsc/rc_light/radio_unchecked_disabled.png rename to rsc/rc_light/radio_unchecked_disabled.png diff --git a/utils/rsc/rc_light/radio_unchecked_disabled@2x.png b/rsc/rc_light/radio_unchecked_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/radio_unchecked_disabled@2x.png rename to rsc/rc_light/radio_unchecked_disabled@2x.png diff --git a/utils/rsc/rc_light/radio_unchecked_focus.png b/rsc/rc_light/radio_unchecked_focus.png similarity index 100% rename from utils/rsc/rc_light/radio_unchecked_focus.png rename to rsc/rc_light/radio_unchecked_focus.png diff --git a/utils/rsc/rc_light/radio_unchecked_focus@2x.png b/rsc/rc_light/radio_unchecked_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/radio_unchecked_focus@2x.png rename to rsc/rc_light/radio_unchecked_focus@2x.png diff --git a/utils/rsc/rc_light/radio_unchecked_pressed.png b/rsc/rc_light/radio_unchecked_pressed.png similarity index 100% rename from utils/rsc/rc_light/radio_unchecked_pressed.png rename to rsc/rc_light/radio_unchecked_pressed.png diff --git a/utils/rsc/rc_light/radio_unchecked_pressed@2x.png b/rsc/rc_light/radio_unchecked_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/radio_unchecked_pressed@2x.png rename to rsc/rc_light/radio_unchecked_pressed@2x.png diff --git a/utils/rsc/rc_light/toolbar_move_horizontal.png b/rsc/rc_light/toolbar_move_horizontal.png similarity index 100% rename from utils/rsc/rc_light/toolbar_move_horizontal.png rename to rsc/rc_light/toolbar_move_horizontal.png diff --git a/utils/rsc/rc_light/toolbar_move_horizontal@2x.png b/rsc/rc_light/toolbar_move_horizontal@2x.png similarity index 100% rename from utils/rsc/rc_light/toolbar_move_horizontal@2x.png rename to rsc/rc_light/toolbar_move_horizontal@2x.png diff --git a/utils/rsc/rc_light/toolbar_move_horizontal_disabled.png b/rsc/rc_light/toolbar_move_horizontal_disabled.png similarity index 100% rename from utils/rsc/rc_light/toolbar_move_horizontal_disabled.png rename to rsc/rc_light/toolbar_move_horizontal_disabled.png diff --git a/utils/rsc/rc_light/toolbar_move_horizontal_disabled@2x.png b/rsc/rc_light/toolbar_move_horizontal_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/toolbar_move_horizontal_disabled@2x.png rename to rsc/rc_light/toolbar_move_horizontal_disabled@2x.png diff --git a/utils/rsc/rc_light/toolbar_move_horizontal_focus.png b/rsc/rc_light/toolbar_move_horizontal_focus.png similarity index 100% rename from utils/rsc/rc_light/toolbar_move_horizontal_focus.png rename to rsc/rc_light/toolbar_move_horizontal_focus.png diff --git a/utils/rsc/rc_light/toolbar_move_horizontal_focus@2x.png b/rsc/rc_light/toolbar_move_horizontal_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/toolbar_move_horizontal_focus@2x.png rename to rsc/rc_light/toolbar_move_horizontal_focus@2x.png diff --git a/utils/rsc/rc_light/toolbar_move_horizontal_pressed.png b/rsc/rc_light/toolbar_move_horizontal_pressed.png similarity index 100% rename from utils/rsc/rc_light/toolbar_move_horizontal_pressed.png rename to rsc/rc_light/toolbar_move_horizontal_pressed.png diff --git a/utils/rsc/rc_light/toolbar_move_horizontal_pressed@2x.png b/rsc/rc_light/toolbar_move_horizontal_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/toolbar_move_horizontal_pressed@2x.png rename to rsc/rc_light/toolbar_move_horizontal_pressed@2x.png diff --git a/utils/rsc/rc_light/toolbar_move_vertical.png b/rsc/rc_light/toolbar_move_vertical.png similarity index 100% rename from utils/rsc/rc_light/toolbar_move_vertical.png rename to rsc/rc_light/toolbar_move_vertical.png diff --git a/utils/rsc/rc_light/toolbar_move_vertical@2x.png b/rsc/rc_light/toolbar_move_vertical@2x.png similarity index 100% rename from utils/rsc/rc_light/toolbar_move_vertical@2x.png rename to rsc/rc_light/toolbar_move_vertical@2x.png diff --git a/utils/rsc/rc_light/toolbar_move_vertical_disabled.png b/rsc/rc_light/toolbar_move_vertical_disabled.png similarity index 100% rename from utils/rsc/rc_light/toolbar_move_vertical_disabled.png rename to rsc/rc_light/toolbar_move_vertical_disabled.png diff --git a/utils/rsc/rc_light/toolbar_move_vertical_disabled@2x.png b/rsc/rc_light/toolbar_move_vertical_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/toolbar_move_vertical_disabled@2x.png rename to rsc/rc_light/toolbar_move_vertical_disabled@2x.png diff --git a/utils/rsc/rc_light/toolbar_move_vertical_focus.png b/rsc/rc_light/toolbar_move_vertical_focus.png similarity index 100% rename from utils/rsc/rc_light/toolbar_move_vertical_focus.png rename to rsc/rc_light/toolbar_move_vertical_focus.png diff --git a/utils/rsc/rc_light/toolbar_move_vertical_focus@2x.png b/rsc/rc_light/toolbar_move_vertical_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/toolbar_move_vertical_focus@2x.png rename to rsc/rc_light/toolbar_move_vertical_focus@2x.png diff --git a/utils/rsc/rc_light/toolbar_move_vertical_pressed.png b/rsc/rc_light/toolbar_move_vertical_pressed.png similarity index 100% rename from utils/rsc/rc_light/toolbar_move_vertical_pressed.png rename to rsc/rc_light/toolbar_move_vertical_pressed.png diff --git a/utils/rsc/rc_light/toolbar_move_vertical_pressed@2x.png b/rsc/rc_light/toolbar_move_vertical_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/toolbar_move_vertical_pressed@2x.png rename to rsc/rc_light/toolbar_move_vertical_pressed@2x.png diff --git a/utils/rsc/rc_light/toolbar_separator_horizontal.png b/rsc/rc_light/toolbar_separator_horizontal.png similarity index 100% rename from utils/rsc/rc_light/toolbar_separator_horizontal.png rename to rsc/rc_light/toolbar_separator_horizontal.png diff --git a/utils/rsc/rc_light/toolbar_separator_horizontal@2x.png b/rsc/rc_light/toolbar_separator_horizontal@2x.png similarity index 100% rename from utils/rsc/rc_light/toolbar_separator_horizontal@2x.png rename to rsc/rc_light/toolbar_separator_horizontal@2x.png diff --git a/utils/rsc/rc_light/toolbar_separator_horizontal_disabled.png b/rsc/rc_light/toolbar_separator_horizontal_disabled.png similarity index 100% rename from utils/rsc/rc_light/toolbar_separator_horizontal_disabled.png rename to rsc/rc_light/toolbar_separator_horizontal_disabled.png diff --git a/utils/rsc/rc_light/toolbar_separator_horizontal_disabled@2x.png b/rsc/rc_light/toolbar_separator_horizontal_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/toolbar_separator_horizontal_disabled@2x.png rename to rsc/rc_light/toolbar_separator_horizontal_disabled@2x.png diff --git a/utils/rsc/rc_light/toolbar_separator_horizontal_focus.png b/rsc/rc_light/toolbar_separator_horizontal_focus.png similarity index 100% rename from utils/rsc/rc_light/toolbar_separator_horizontal_focus.png rename to rsc/rc_light/toolbar_separator_horizontal_focus.png diff --git a/utils/rsc/rc_light/toolbar_separator_horizontal_focus@2x.png b/rsc/rc_light/toolbar_separator_horizontal_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/toolbar_separator_horizontal_focus@2x.png rename to rsc/rc_light/toolbar_separator_horizontal_focus@2x.png diff --git a/utils/rsc/rc_light/toolbar_separator_horizontal_pressed.png b/rsc/rc_light/toolbar_separator_horizontal_pressed.png similarity index 100% rename from utils/rsc/rc_light/toolbar_separator_horizontal_pressed.png rename to rsc/rc_light/toolbar_separator_horizontal_pressed.png diff --git a/utils/rsc/rc_light/toolbar_separator_horizontal_pressed@2x.png b/rsc/rc_light/toolbar_separator_horizontal_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/toolbar_separator_horizontal_pressed@2x.png rename to rsc/rc_light/toolbar_separator_horizontal_pressed@2x.png diff --git a/utils/rsc/rc_light/toolbar_separator_vertical.png b/rsc/rc_light/toolbar_separator_vertical.png similarity index 100% rename from utils/rsc/rc_light/toolbar_separator_vertical.png rename to rsc/rc_light/toolbar_separator_vertical.png diff --git a/utils/rsc/rc_light/toolbar_separator_vertical@2x.png b/rsc/rc_light/toolbar_separator_vertical@2x.png similarity index 100% rename from utils/rsc/rc_light/toolbar_separator_vertical@2x.png rename to rsc/rc_light/toolbar_separator_vertical@2x.png diff --git a/utils/rsc/rc_light/toolbar_separator_vertical_disabled.png b/rsc/rc_light/toolbar_separator_vertical_disabled.png similarity index 100% rename from utils/rsc/rc_light/toolbar_separator_vertical_disabled.png rename to rsc/rc_light/toolbar_separator_vertical_disabled.png diff --git a/utils/rsc/rc_light/toolbar_separator_vertical_disabled@2x.png b/rsc/rc_light/toolbar_separator_vertical_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/toolbar_separator_vertical_disabled@2x.png rename to rsc/rc_light/toolbar_separator_vertical_disabled@2x.png diff --git a/utils/rsc/rc_light/toolbar_separator_vertical_focus.png b/rsc/rc_light/toolbar_separator_vertical_focus.png similarity index 100% rename from utils/rsc/rc_light/toolbar_separator_vertical_focus.png rename to rsc/rc_light/toolbar_separator_vertical_focus.png diff --git a/utils/rsc/rc_light/toolbar_separator_vertical_focus@2x.png b/rsc/rc_light/toolbar_separator_vertical_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/toolbar_separator_vertical_focus@2x.png rename to rsc/rc_light/toolbar_separator_vertical_focus@2x.png diff --git a/utils/rsc/rc_light/toolbar_separator_vertical_pressed.png b/rsc/rc_light/toolbar_separator_vertical_pressed.png similarity index 100% rename from utils/rsc/rc_light/toolbar_separator_vertical_pressed.png rename to rsc/rc_light/toolbar_separator_vertical_pressed.png diff --git a/utils/rsc/rc_light/toolbar_separator_vertical_pressed@2x.png b/rsc/rc_light/toolbar_separator_vertical_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/toolbar_separator_vertical_pressed@2x.png rename to rsc/rc_light/toolbar_separator_vertical_pressed@2x.png diff --git a/utils/rsc/rc_light/transparent.png b/rsc/rc_light/transparent.png similarity index 100% rename from utils/rsc/rc_light/transparent.png rename to rsc/rc_light/transparent.png diff --git a/utils/rsc/rc_light/transparent@2x.png b/rsc/rc_light/transparent@2x.png similarity index 100% rename from utils/rsc/rc_light/transparent@2x.png rename to rsc/rc_light/transparent@2x.png diff --git a/utils/rsc/rc_light/transparent_disabled.png b/rsc/rc_light/transparent_disabled.png similarity index 100% rename from utils/rsc/rc_light/transparent_disabled.png rename to rsc/rc_light/transparent_disabled.png diff --git a/utils/rsc/rc_light/transparent_disabled@2x.png b/rsc/rc_light/transparent_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/transparent_disabled@2x.png rename to rsc/rc_light/transparent_disabled@2x.png diff --git a/utils/rsc/rc_light/transparent_focus.png b/rsc/rc_light/transparent_focus.png similarity index 100% rename from utils/rsc/rc_light/transparent_focus.png rename to rsc/rc_light/transparent_focus.png diff --git a/utils/rsc/rc_light/transparent_focus@2x.png b/rsc/rc_light/transparent_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/transparent_focus@2x.png rename to rsc/rc_light/transparent_focus@2x.png diff --git a/utils/rsc/rc_light/transparent_pressed.png b/rsc/rc_light/transparent_pressed.png similarity index 100% rename from utils/rsc/rc_light/transparent_pressed.png rename to rsc/rc_light/transparent_pressed.png diff --git a/utils/rsc/rc_light/transparent_pressed@2x.png b/rsc/rc_light/transparent_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/transparent_pressed@2x.png rename to rsc/rc_light/transparent_pressed@2x.png diff --git a/utils/rsc/rc_light/window_close.png b/rsc/rc_light/window_close.png similarity index 100% rename from utils/rsc/rc_light/window_close.png rename to rsc/rc_light/window_close.png diff --git a/utils/rsc/rc_light/window_close@2x.png b/rsc/rc_light/window_close@2x.png similarity index 100% rename from utils/rsc/rc_light/window_close@2x.png rename to rsc/rc_light/window_close@2x.png diff --git a/utils/rsc/rc_light/window_close_disabled.png b/rsc/rc_light/window_close_disabled.png similarity index 100% rename from utils/rsc/rc_light/window_close_disabled.png rename to rsc/rc_light/window_close_disabled.png diff --git a/utils/rsc/rc_light/window_close_disabled@2x.png b/rsc/rc_light/window_close_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/window_close_disabled@2x.png rename to rsc/rc_light/window_close_disabled@2x.png diff --git a/utils/rsc/rc_light/window_close_focus.png b/rsc/rc_light/window_close_focus.png similarity index 100% rename from utils/rsc/rc_light/window_close_focus.png rename to rsc/rc_light/window_close_focus.png diff --git a/utils/rsc/rc_light/window_close_focus@2x.png b/rsc/rc_light/window_close_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/window_close_focus@2x.png rename to rsc/rc_light/window_close_focus@2x.png diff --git a/utils/rsc/rc_light/window_close_pressed.png b/rsc/rc_light/window_close_pressed.png similarity index 100% rename from utils/rsc/rc_light/window_close_pressed.png rename to rsc/rc_light/window_close_pressed.png diff --git a/utils/rsc/rc_light/window_close_pressed@2x.png b/rsc/rc_light/window_close_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/window_close_pressed@2x.png rename to rsc/rc_light/window_close_pressed@2x.png diff --git a/utils/rsc/rc_light/window_grip.png b/rsc/rc_light/window_grip.png similarity index 100% rename from utils/rsc/rc_light/window_grip.png rename to rsc/rc_light/window_grip.png diff --git a/utils/rsc/rc_light/window_grip@2x.png b/rsc/rc_light/window_grip@2x.png similarity index 100% rename from utils/rsc/rc_light/window_grip@2x.png rename to rsc/rc_light/window_grip@2x.png diff --git a/utils/rsc/rc_light/window_grip_disabled.png b/rsc/rc_light/window_grip_disabled.png similarity index 100% rename from utils/rsc/rc_light/window_grip_disabled.png rename to rsc/rc_light/window_grip_disabled.png diff --git a/utils/rsc/rc_light/window_grip_disabled@2x.png b/rsc/rc_light/window_grip_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/window_grip_disabled@2x.png rename to rsc/rc_light/window_grip_disabled@2x.png diff --git a/utils/rsc/rc_light/window_grip_focus.png b/rsc/rc_light/window_grip_focus.png similarity index 100% rename from utils/rsc/rc_light/window_grip_focus.png rename to rsc/rc_light/window_grip_focus.png diff --git a/utils/rsc/rc_light/window_grip_focus@2x.png b/rsc/rc_light/window_grip_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/window_grip_focus@2x.png rename to rsc/rc_light/window_grip_focus@2x.png diff --git a/utils/rsc/rc_light/window_grip_pressed.png b/rsc/rc_light/window_grip_pressed.png similarity index 100% rename from utils/rsc/rc_light/window_grip_pressed.png rename to rsc/rc_light/window_grip_pressed.png diff --git a/utils/rsc/rc_light/window_grip_pressed@2x.png b/rsc/rc_light/window_grip_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/window_grip_pressed@2x.png rename to rsc/rc_light/window_grip_pressed@2x.png diff --git a/utils/rsc/rc_light/window_minimize.png b/rsc/rc_light/window_minimize.png similarity index 100% rename from utils/rsc/rc_light/window_minimize.png rename to rsc/rc_light/window_minimize.png diff --git a/utils/rsc/rc_light/window_minimize@2x.png b/rsc/rc_light/window_minimize@2x.png similarity index 100% rename from utils/rsc/rc_light/window_minimize@2x.png rename to rsc/rc_light/window_minimize@2x.png diff --git a/utils/rsc/rc_light/window_minimize_disabled.png b/rsc/rc_light/window_minimize_disabled.png similarity index 100% rename from utils/rsc/rc_light/window_minimize_disabled.png rename to rsc/rc_light/window_minimize_disabled.png diff --git a/utils/rsc/rc_light/window_minimize_disabled@2x.png b/rsc/rc_light/window_minimize_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/window_minimize_disabled@2x.png rename to rsc/rc_light/window_minimize_disabled@2x.png diff --git a/utils/rsc/rc_light/window_minimize_focus.png b/rsc/rc_light/window_minimize_focus.png similarity index 100% rename from utils/rsc/rc_light/window_minimize_focus.png rename to rsc/rc_light/window_minimize_focus.png diff --git a/utils/rsc/rc_light/window_minimize_focus@2x.png b/rsc/rc_light/window_minimize_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/window_minimize_focus@2x.png rename to rsc/rc_light/window_minimize_focus@2x.png diff --git a/utils/rsc/rc_light/window_minimize_pressed.png b/rsc/rc_light/window_minimize_pressed.png similarity index 100% rename from utils/rsc/rc_light/window_minimize_pressed.png rename to rsc/rc_light/window_minimize_pressed.png diff --git a/utils/rsc/rc_light/window_minimize_pressed@2x.png b/rsc/rc_light/window_minimize_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/window_minimize_pressed@2x.png rename to rsc/rc_light/window_minimize_pressed@2x.png diff --git a/utils/rsc/rc_light/window_undock.png b/rsc/rc_light/window_undock.png similarity index 100% rename from utils/rsc/rc_light/window_undock.png rename to rsc/rc_light/window_undock.png diff --git a/utils/rsc/rc_light/window_undock@2x.png b/rsc/rc_light/window_undock@2x.png similarity index 100% rename from utils/rsc/rc_light/window_undock@2x.png rename to rsc/rc_light/window_undock@2x.png diff --git a/utils/rsc/rc_light/window_undock_disabled.png b/rsc/rc_light/window_undock_disabled.png similarity index 100% rename from utils/rsc/rc_light/window_undock_disabled.png rename to rsc/rc_light/window_undock_disabled.png diff --git a/utils/rsc/rc_light/window_undock_disabled@2x.png b/rsc/rc_light/window_undock_disabled@2x.png similarity index 100% rename from utils/rsc/rc_light/window_undock_disabled@2x.png rename to rsc/rc_light/window_undock_disabled@2x.png diff --git a/utils/rsc/rc_light/window_undock_focus.png b/rsc/rc_light/window_undock_focus.png similarity index 100% rename from utils/rsc/rc_light/window_undock_focus.png rename to rsc/rc_light/window_undock_focus.png diff --git a/utils/rsc/rc_light/window_undock_focus@2x.png b/rsc/rc_light/window_undock_focus@2x.png similarity index 100% rename from utils/rsc/rc_light/window_undock_focus@2x.png rename to rsc/rc_light/window_undock_focus@2x.png diff --git a/utils/rsc/rc_light/window_undock_pressed.png b/rsc/rc_light/window_undock_pressed.png similarity index 100% rename from utils/rsc/rc_light/window_undock_pressed.png rename to rsc/rc_light/window_undock_pressed.png diff --git a/utils/rsc/rc_light/window_undock_pressed@2x.png b/rsc/rc_light/window_undock_pressed@2x.png similarity index 100% rename from utils/rsc/rc_light/window_undock_pressed@2x.png rename to rsc/rc_light/window_undock_pressed@2x.png diff --git a/src/Lib/Audio.cc b/src/Lib/Audio.cc index d748fb533c4cb19e85741402bdfbb2686a816934..8c492175f4849f7381af719a860cca4d73f1e706 100644 --- a/src/Lib/Audio.cc +++ b/src/Lib/Audio.cc @@ -188,7 +188,7 @@ AudioContext::Stream::decodeData() // Decode one frame int response = avcodec_send_packet(codecContext.get(), &packet); - if (response < 0) [[unlikely]] { + if (response < 0) { throw std::runtime_error( QStringLiteral("error n°%1 while sending a packet to the decoder") .arg(response) @@ -200,9 +200,9 @@ AudioContext::Stream::decodeData() while (response >= 0) { response = avcodec_receive_frame(codecContext.get(), dataFrame.get()); - if (response == AVERROR(EAGAIN) || response == AVERROR_EOF) [[unlikely]] { + if (response == AVERROR(EAGAIN) || response == AVERROR_EOF) { break; - } else if (response < 0) [[unlikely]] { + } else if (response < 0) { throw std::runtime_error( QStringLiteral("error n°%1 while receiving a from from the decoder") .arg(response) @@ -218,19 +218,21 @@ AudioContext::Stream::decodeData() } // Resample frame - if (const int frame_count_int = - swr_convert(dataSwrContext.get(), reinterpret_cast<uint8_t **>(&buffer), - dataFrame->nb_samples, (const uint8_t **)dataFrame->data, - dataFrame->nb_samples); - frame_count_int < 0) [[unlikely]] { + if (const int frame_count_int = swr_convert( + dataSwrContext.get(), reinterpret_cast<uint8_t **>(&buffer), + dataFrame->nb_samples, + const_cast<const uint8_t **>(reinterpret_cast<uint8_t **>(dataFrame->data)), + dataFrame->nb_samples); + frame_count_int < 0) { throw std::runtime_error("error on frame count, is negative but should not be"); } // Append resampled frames to data - else [[likely]] { + else { const size_t frame_count = static_cast<size_t>(frame_count_int); dataPtr = reinterpret_cast<double *>( - realloc(dataPtr, (dataSize + (size_t)dataFrame->nb_samples) * sizeof(double))); + realloc(dataPtr, (dataSize + static_cast<size_t>(dataFrame->nb_samples)) * + sizeof(double))); memcpy(dataPtr + dataSize, buffer, frame_count * sizeof(double)); dataSize += frame_count; } diff --git a/src/Lib/Document/VivyDocument.cc b/src/Lib/Document/VivyDocument.cc index be9bc9fbbf57c6cf2c35d33a9e315ca40fd429ba..2baee52bb193ae1559aea0c12460988f46eeaaba 100644 --- a/src/Lib/Document/VivyDocument.cc +++ b/src/Lib/Document/VivyDocument.cc @@ -86,19 +86,18 @@ VivyDocument::detectDocumentType(const QFileInfo &file, Capabilities *ableType) Vivy::Utils::DocumentType docType; bool rc = Vivy::Utils::detectDocumentType(file, &docType); - switch (docType) { - case Vivy::Utils::DocumentType::Video: + if (docType == Utils::DocumentType::Video) *ableType = Capabilities::VideoAble; - break; - case Vivy::Utils::DocumentType::Audio: + + else if (docType == Utils::DocumentType::Audio) *ableType = Capabilities::AudioAble; - break; - case Vivy::Utils::DocumentType::ASS: + + else if (docType == Utils::DocumentType::ASS) *ableType = Capabilities::AssAble; - break; - default: + + // Invalid document type + else return false; - } return rc; } diff --git a/src/Lib/Utils.cc b/src/Lib/Utils.cc index 2e1a1b5fa800e146cee8033a432fd7a68ec65a51..063e4009723671f1667d319a333f78b3cd90056c 100644 --- a/src/Lib/Utils.cc +++ b/src/Lib/Utils.cc @@ -82,3 +82,48 @@ Utils::Time::toString() const noexcept return QString::number(hour) + ":" + QString::number(minute) + ":" + QString::number(second) + "." + QString::number(centisecond); } + +const QString & +Utils::getAudioFileSuffixFilter() noexcept +{ + static bool isInitialized = false; + static QString ret = QStringLiteral("Audio sub-documents (*."); + + if (isInitialized) + return ret; + + ret.append(audioFileSuffix.join(" *.")); + ret.append(')'); + isInitialized = true; + return ret; +} + +const QString & +Utils::getVideoFileSuffixFilter() noexcept +{ + static bool isInitialized = false; + static QString ret = QStringLiteral("Video sub-documents (*."); + + if (isInitialized) + return ret; + + ret.append(videoFileSuffix.join(" *.")); + ret.append(')'); + isInitialized = true; + return ret; +} + +const QString & +Utils::getAssFileSuffixFilter() noexcept +{ + static bool isInitialized = false; + static QString ret = QStringLiteral("ASS sub-documents (*."); + + if (isInitialized) + return ret; + + ret.append(assFileSuffix.join(" *.")); + ret.append(')'); + isInitialized = true; + return ret; +} diff --git a/src/Lib/Utils.hh b/src/Lib/Utils.hh index ef38724c7c54862d236bb0fb7db4c36389f00483..925347d93d331862fbbc3abfc8796a3d8aef8ac6 100644 --- a/src/Lib/Utils.hh +++ b/src/Lib/Utils.hh @@ -22,6 +22,9 @@ classname &operator=(const classname &) = delete; /* Copy assign */ \ classname &operator=(classname &&) = delete; /* Move assign */ +// QStringLiteral but for regexes +#define QRegExpLiteral(str) QRegExp(QStringLiteral(str)) + namespace Vivy { // Concept for classes that can be viewd inside a property view @@ -43,6 +46,10 @@ static const QStringList videoFileSuffix = { "mkv", "mp4", "mov", "avi", "av1", static const QStringList assFileSuffix = { "ass" }; static const QStringList vivyFileSuffix = { "vivy" }; +const QString &getAudioFileSuffixFilter() noexcept; +const QString &getVideoFileSuffixFilter() noexcept; +const QString &getAssFileSuffixFilter() noexcept; + enum class DocumentType : quint64 { /* Basic types */ Vivy = (1 << 1), diff --git a/src/UI/AboutWindow.cc b/src/UI/AboutWindow.cc index 42ba502a816994dab1408f52c83d6e5638944622..af1c3df3e758c43a17640d4bf1af0e36f8b665d6 100644 --- a/src/UI/AboutWindow.cc +++ b/src/UI/AboutWindow.cc @@ -37,56 +37,49 @@ static const char *libContent = " </ul>" "</body>"; -// Simple QLabel with some presets -class SimpleLabel final : public QLabel { -public: - explicit SimpleLabel(QWidget *parent, const char *text) - : QLabel(parent) - { - setTextFormat(Qt::RichText); - setTextInteractionFlags(Qt::NoTextInteraction | Qt::LinksAccessibleByMouse | - Qt::LinksAccessibleByKeyboard); - setText(text); - setAlignment(Qt::AlignJustify | Qt::AlignTop); - } -}; - -// Simple QLabel for licences -class LicenceLabel final : public QTextEdit { -public: - explicit LicenceLabel(QWidget *parent, const QString &url, const Qt::TextFormat format) - : QTextEdit(parent) - { - QFile content(url); - if (!content.open(QIODevice::ReadOnly | QIODevice::Text)) - throw std::runtime_error("Failed to open file that should be accessible"); - - setTextInteractionFlags(Qt::NoTextInteraction); - setAlignment(Qt::AlignJustify | Qt::AlignTop); - setAcceptRichText(true); - setReadOnly(true); - setAutoFormatting(QTextEdit::AutoAll); - - setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); - setFont(vivyApp->getApplicationFont(VivyApplication::Font::Monospace)); - setFrameStyle(QFrame::NoFrame); - - switch (format) { - case Qt::PlainText: - case Qt::RichText: - setText(content.readAll()); - break; - - case Qt::MarkdownText: - setMarkdown(content.readAll()); - break; - - case Qt::AutoText: - qCritical() << "Invalid text format for LicenceLabel" << format; - } +AboutWindow::SimpleLabel::SimpleLabel(QWidget *parent, const char *text) + : QLabel(parent) +{ + setTextFormat(Qt::RichText); + setTextInteractionFlags(Qt::NoTextInteraction | Qt::LinksAccessibleByMouse | + Qt::LinksAccessibleByKeyboard); + setText(text); + setAlignment(Qt::AlignJustify | Qt::AlignTop); +} + +AboutWindow::LicenceLabel::LicenceLabel(QWidget *parent, const QString &url, + const Qt::TextFormat format) + : QTextEdit(parent) +{ + QFile content(url); + if (!content.open(QIODevice::ReadOnly | QIODevice::Text)) + throw std::runtime_error("Failed to open file that should be accessible"); + + setTextInteractionFlags(Qt::NoTextInteraction); + setAlignment(Qt::AlignJustify | Qt::AlignTop); + setAcceptRichText(true); + setReadOnly(true); + setAutoFormatting(QTextEdit::AutoAll); + + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); + setFont(vivyApp->getApplicationFont(VivyApplication::Font::Monospace)); + setFrameStyle(QFrame::NoFrame); + + switch (format) { + case Qt::PlainText: + case Qt::RichText: + setText(content.readAll()); + break; + + case Qt::MarkdownText: + setMarkdown(content.readAll()); + break; + + case Qt::AutoText: + qCritical() << "Invalid text format for LicenceLabel" << format; } -}; +} // Construct the AboutWindow AboutWindow::AboutWindow(QWidget *parent) noexcept diff --git a/src/UI/AboutWindow.hh b/src/UI/AboutWindow.hh index 7e498a771e104ae7e7d292110bf21380a8ec2129..acbd437c0a2b3513f3f1bdcdf356771d8dc8c705 100644 --- a/src/UI/AboutWindow.hh +++ b/src/UI/AboutWindow.hh @@ -7,6 +7,7 @@ #include <QMainWindow> #include <QTabWidget> #include <QLabel> +#include <QTextEdit> namespace Vivy { @@ -15,6 +16,18 @@ class AboutWindow final : public QMainWindow { QTabWidget *panels; + // Simple QLabel with some presets + class SimpleLabel final : public QLabel { + public: + explicit SimpleLabel(QWidget *parent, const char *text); + }; + + // Simple QLabel for licences + class LicenceLabel final : public QTextEdit { + public: + explicit LicenceLabel(QWidget *parent, const QString &url, const Qt::TextFormat format); + }; + public: explicit AboutWindow(QWidget *parent) noexcept; ~AboutWindow() noexcept = default; diff --git a/src/UI/AbstractDocumentView.cc b/src/UI/AbstractDocumentView.cc index 153948d60fca0546681b3ca445823b50b883a355..51ece8ec6952c8fcd8fa0fcdef8cf5109c7af82c 100644 --- a/src/UI/AbstractDocumentView.cc +++ b/src/UI/AbstractDocumentView.cc @@ -71,6 +71,7 @@ void AbstractDocumentView::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dock, Qt::Orientation orientation) noexcept { + // dock->setTitleBarWidget(new QWidget(dock)); // <- to disable the header bar QMainWindow::addDockWidget(area, dock, orientation); QAction *act = dock->toggleViewAction(); if (!viewsActions.contains(act)) diff --git a/src/UI/AbstractDocumentView.hh b/src/UI/AbstractDocumentView.hh index 43dc02e99877050426f3f9a227f4b57ce3e84692..29d22aedd82fa099e04d75dd0e6e36bc7c765fca 100644 --- a/src/UI/AbstractDocumentView.hh +++ b/src/UI/AbstractDocumentView.hh @@ -22,7 +22,7 @@ class AbstractDocumentView : public QMainWindow { public: enum class Type : quint64 { Vivy = Utils::toUnderlying(Utils::DocumentType::Vivy), - Script = Utils::toUnderlying(Utils::DocumentType::VivyScript), + Script = Utils::toUnderlying(Utils::DocumentType::VivyScript) }; public: diff --git a/src/UI/DocumentViews/AssLinesView.cc b/src/UI/DocumentViews/AssLinesView.cc index a203ce5a1b433c042a9f5f6d904972dccab4f53a..9134238f1f64d578ba6636f883fda227b1504cc4 100644 --- a/src/UI/DocumentViews/AssLinesView.cc +++ b/src/UI/DocumentViews/AssLinesView.cc @@ -19,13 +19,20 @@ AssLinesView::AssLinesView(QAbstractItemModel *model, QWidget *parent) noexcept horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); horizontalHeader()->setStretchLastSection(true); horizontalHeader()->hide(); + verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); verticalHeader()->setVisible(true); + setSelectionMode(QAbstractItemView::ExtendedSelection); setSelectionBehavior(QAbstractItemView::SelectRows); setShowGrid(false); - const QString style = QStringLiteral("font-family: \"FiraCode\"; font-size: 8pt;"); + const QString style = QStringLiteral("* { font-family: \"FiraCode\"; font-size: 8pt; }"); + const QString hdrStyle = QStringLiteral("::section {" + " font-family: \"FiraCode\";" + " font-size: 8pt;" + "}"); setStyleSheet(style); + verticalHeader()->setStyleSheet(hdrStyle); setModel(model); } diff --git a/src/UI/DocumentViews/TimingScene.cc b/src/UI/DocumentViews/TimingScene.cc index 3c916fd0868d3364b69b0822c233357dd9667f94..e9db17e38c240717c21e814c98139e7585a80f16 100644 --- a/src/UI/DocumentViews/TimingScene.cc +++ b/src/UI/DocumentViews/TimingScene.cc @@ -32,36 +32,44 @@ TimingScene::TimingScene(QImage img_, quint64 soundLength_, QWidget *parent) noe void TimingScene::mousePressEvent(QGraphicsSceneMouseEvent *event) noexcept { - QPointF pos = event->scenePos(); - fprintf(stderr, "%f,%f\n", pos.x(), pos.y()); + QPointF pos = event->scenePos(); + QGraphicsItem *got = itemAt(pos, QTransform()); + Ass::LinePtr p = currentLine.lock(); - QGraphicsItem *got; - if ((got = itemAt(pos, QTransform())) == nullptr || got == backgroundImg) { - if (auto p = currentLine.lock()) { - quint64 time = timeFromPos(pos.x()); - switch (timingMode) { - case TimingMode::Line: - switch (event->button()) { - case Qt::LeftButton: - p->setStart(time); - break; + if (p && (got == nullptr || got == backgroundImg)) [[likely]] { + // Handle the different cases + if (timingMode == TimingMode::Line) + handleMousePressEventLine(event, p); + else if (timingMode == TimingMode::Syl) + handleMousePressEventSyl(event, p); + else if (timingMode == TimingMode::Char) + handleMousePressEventChar(event, p); + } - case Qt::RightButton: - p->setEnd(time); - break; + QGraphicsScene::mousePressEvent(event); +} - default: - break; - } - break; +void +TimingScene::handleMousePressEventLine(QGraphicsSceneMouseEvent *event, Ass::LinePtr p) noexcept +{ + QPointF pos = event->scenePos(); + quint64 time = timeFromPos(pos.x()); - default: - break; - } - } + if (const auto &btn = event->button(); btn == Qt::LeftButton) { + p->setStart(time); + } else if (btn == Qt::RightButton) { + p->setEnd(time); } +} - QGraphicsScene::mousePressEvent(event); +void +TimingScene::handleMousePressEventSyl(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept +{ +} + +void +TimingScene::handleMousePressEventChar(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept +{ } quint64 diff --git a/src/UI/DocumentViews/TimingScene.hh b/src/UI/DocumentViews/TimingScene.hh index fba8958f33ab0587d326ccac30847254ef5d7255..02f20e90904772202d507760dbb6a119ab40ff00 100644 --- a/src/UI/DocumentViews/TimingScene.hh +++ b/src/UI/DocumentViews/TimingScene.hh @@ -18,7 +18,7 @@ class TimingScene final : public QGraphicsScene { Q_OBJECT public: - enum class TimingMode { Line = 0x0, Syl = 0x1, Char = 0x2 }; + enum class TimingMode { Line = 0, Syl = (1 << 1), Char = (1 << 2) }; Q_DECLARE_FLAGS(TimingModes, TimingMode) public: @@ -27,7 +27,6 @@ public: explicit TimingScene(QWidget *parent = nullptr) noexcept; explicit TimingScene(QImage, quint64, QWidget * = nullptr) noexcept; - ~TimingScene() noexcept = default; private: QGraphicsPixmapItem *backgroundImg{ nullptr }; @@ -42,6 +41,9 @@ public: private: quint64 timeFromPos(qreal x); + void handleMousePressEventLine(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept; + void handleMousePressEventSyl(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept; + void handleMousePressEventChar(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept; public slots: }; diff --git a/src/UI/DocumentViews/TimingView.cc b/src/UI/DocumentViews/TimingView.cc index ef12fef40af4cd8a1534d9da2d6a9d4c049263fb..a140ac56ef5e24214a63269cbeba76668e532d12 100644 --- a/src/UI/DocumentViews/TimingView.cc +++ b/src/UI/DocumentViews/TimingView.cc @@ -20,7 +20,7 @@ TimingView::TimingView(QImage img, quint64 soundLength, QWidget *parent) noexcep { scene = new TimingScene(img, soundLength, this); setFixedHeight(img.height()); - setMaximumHeight(img.height() + horizontalScrollBar()->height()); + setMaximumHeight(img.height()); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Minimum); @@ -34,7 +34,7 @@ TimingView::TimingView(QImage img, quint64 soundLength, QWidget *parent) noexcep void TimingView::wheelEvent(QWheelEvent *event) noexcept { - horizontalScrollBar()->setValue(horizontalScrollBar()->value() + + horizontalScrollBar()->setValue(horizontalScrollBar()->value() - event->angleDelta().y() * wheelAngleToScrollRatio); } diff --git a/src/UI/MainWindow.cc b/src/UI/MainWindow.cc index 89ae4396c621fd450ad4de52bf1291a5667e5aec..950eeb5767ffc14fef24320d9daabc2e923ff10e 100644 --- a/src/UI/MainWindow.cc +++ b/src/UI/MainWindow.cc @@ -86,9 +86,12 @@ MainWindow::MainWindow() noexcept documents->setElideMode(Qt::ElideRight); documents->setUsesScrollButtons(true); documents->setDocumentMode(true); + documents->setTabBarAutoHide(true); connect(documents, &QTabWidget::tabCloseRequested, this, &MainWindow::closeDocument); connect(documents, &QTabWidget::tabBarDoubleClicked, this, &MainWindow::openProperties); setCentralWidget(documents); + centralWidget()->setContentsMargins(0, 0, 0, 0); + setContentsMargins(0, 0, 0, 0); // Enable/disable actions depending on the context saveFileAct->setEnabled(false); @@ -118,23 +121,22 @@ MainWindow::MainWindow() noexcept } }; - connect(documents, &QTabWidget::currentChanged, this, - [this](int) noexcept -> void { documentViewActionsChanged(); }); - connect(documents, &QTabWidget::currentChanged, saveFileAct, - std::bind_front(enableSaveOnDocument, saveFileAct)); - connect(documents, &QTabWidget::currentChanged, saveFileAsAct, - std::bind_front(enableSaveOnDocument, saveFileAsAct)); - - connect(documents, &QTabWidget::currentChanged, loadSubDocumentAudioAct, - std::bind_front(enableLoadSubOnDocument, loadSubDocumentAudioAct)); - connect(documents, &QTabWidget::currentChanged, loadSubDocumentVideoAct, - std::bind_front(enableLoadSubOnDocument, loadSubDocumentVideoAct)); - connect(documents, &QTabWidget::currentChanged, loadSubDocumentAssAct, - std::bind_front(enableLoadSubOnDocument, loadSubDocumentAssAct)); - - // Add a new empty document that will will be replaced if nothing is added - // to it. - newDocument(); + { +#define CONNECT_ENABLE(act, func) \ + connect(documents, &QTabWidget::currentChanged, act, std::bind_front(func, act)); + + connect(documents, &QTabWidget::currentChanged, this, + [this](int) noexcept -> void { documentViewActionsChanged(); }); + + CONNECT_ENABLE(saveFileAct, enableSaveOnDocument); + CONNECT_ENABLE(saveFileAsAct, enableSaveOnDocument); + + CONNECT_ENABLE(loadSubDocumentAssAct, enableLoadSubOnDocument); + CONNECT_ENABLE(loadSubDocumentVideoAct, enableLoadSubOnDocument); + CONNECT_ENABLE(loadSubDocumentAudioAct, enableLoadSubOnDocument); + +#undef CONNECT_ENABLE + } // Main window has finished its construction statusBar()->showMessage("QSimulate has started"); @@ -142,6 +144,9 @@ MainWindow::MainWindow() noexcept // Minimal size... setMinimumHeight(400); setMinimumWidth(600); + + // Always a new empty document + newDocument(); } void @@ -242,45 +247,44 @@ MainWindow::newDocument() noexcept void MainWindow::openDocument() noexcept { - QFileDialog dialog(this, "Select a file"); - bool dialogAccepted = false; - std::unique_ptr<VivyFileIconProvider> iconProvider(new VivyFileIconProvider()); - dialog.setOption(QFileDialog::DontUseNativeDialog); - dialog.setOption(QFileDialog::ReadOnly); - dialog.setIconProvider(iconProvider.get()); - dialog.setFileMode(QFileDialog::ExistingFile); - connect(&dialog, &QFileDialog::accepted, this, - [&dialogAccepted]() noexcept -> void { dialogAccepted = true; }); - dialog.exec(); - - if (!dialogAccepted) { - qDebug() << "No file accepted"; - return; - } - - const QStringList resList = dialog.selectedFiles(); - if (resList.size() != 1) { - qCritical() << "You must select only one file"; - return; - } - - const QString filename = resList.at(0); - + const QString separator = QStringLiteral(";;"); + const QString filename = dialogOpenFileName("Select a document to open", QDir::homePath(), + QStringLiteral("Vivy documents (*.vivy);;" + "Vivy scripts (*.lua *.vvs);;") + + Utils::getAudioFileSuffixFilter() + separator + + Utils::getVideoFileSuffixFilter() + separator + + Utils::getAssFileSuffixFilter()); if (filename.isEmpty()) { qWarning() << "Found an empty filename, don't open a file"; return; } - qDebug() << "Try to load document" << filename; - std::shared_ptr<VivyDocument> document = vivyApp->documentStore.loadDocument(filename); + // TODO: Better implementation + // Load script document + if (filename.endsWith(".lua") || filename.endsWith(".vvs")) { + qDebug() << "Try to load script" << filename; + try { + addTab(new ScriptDocumentView(filename, documents)); + } catch (const std::runtime_error &e) { + qCritical() << "Failed to load script" << filename << "with error:" << e.what(); + } + } - try { - qDebug() << "Add the view to the MainWindow for" << filename; - addTab(new VivyDocumentView(document)); - } catch (const std::runtime_error &e) { - qCritical() << "Failed to create the document view for" << QFileInfo(filename).baseName() - << "with path" << filename << "and error:" << e.what(); - vivyApp->documentStore.closeDocument(document->getUuid()); + // TODO: Better implementation + // Load Vivy document + else { + qDebug() << "Try to load document" << filename; + std::shared_ptr<VivyDocument> document = vivyApp->documentStore.loadDocument(filename); + + try { + qDebug() << "Add the view to the MainWindow for" << filename; + addTab(new VivyDocumentView(document)); + } catch (const std::runtime_error &e) { + qCritical() + << "Failed to create the document view for" << QFileInfo(filename).baseName() + << "with path" << filename << "and error:" << e.what(); + vivyApp->documentStore.closeDocument(document->getUuid()); + } } } @@ -288,7 +292,7 @@ void MainWindow::loadSubDocumentAss() noexcept { withOpenFileNameDialog<VivyDocumentView, VivyDocument>( - "Select an ASS document to load", + "Select an ASS document to load", Utils::getAssFileSuffixFilter(), [](VivyDocumentView *view, VivyDocument *doc, const QString &filename) noexcept -> void { doc->setAssSubDocument(filename); view->loadAssView(); @@ -299,7 +303,7 @@ void MainWindow::loadSubDocumentVideo() noexcept { withOpenFileNameDialog<VivyDocumentView, VivyDocument>( - "Select a video document to load", + "Select a video document to load", Utils::getVideoFileSuffixFilter(), [](VivyDocumentView *view, VivyDocument *doc, const QString &filename) noexcept -> void { doc->setVideoSubDocument(filename); view->loadVideoView(); @@ -311,6 +315,8 @@ MainWindow::loadSubDocumentAudio() noexcept { withOpenFileNameDialog<VivyDocumentView, VivyDocument>( "Select an audio document to load", + Utils::getAudioFileSuffixFilter() + QStringLiteral(";;") + + Utils::getVideoFileSuffixFilter(), [](VivyDocumentView *view, VivyDocument *doc, const QString &filename) noexcept -> void { doc->setAudioSubDocument(filename); view->loadAudioView(); @@ -319,17 +325,6 @@ MainWindow::loadSubDocumentAudio() noexcept void MainWindow::addTab(AbstractDocumentView *tab) -{ - const int index = documents->addTab(tab, tab->getDocumentTabIcon(), tab->getDocumentTabName()); - documents->setTabToolTip(index, tab->getDocumentTabToolTip()); - documents->setCurrentIndex(index); - connect(tab, &AbstractDocumentView::viewActionsChanged, this, - &MainWindow::documentViewActionsChanged); - documentViewActionsChanged(); -} - -void -MainWindow::addTab(VivyDocumentView *tab) { int index = -1; if (const int untouched_index = findFirstUntouchedDocument(); untouched_index >= 0) { @@ -398,3 +393,31 @@ MainWindow::documentViewActionsChanged() noexcept qInfo() << "No view to display:" << e.what(); } } +QString +MainWindow::dialogOpenFileName(const QString &title, const QString &folder, + const QString &filter) noexcept +{ + QFileDialog dialog(this, title, folder, filter); + bool dialogAccepted = false; + std::unique_ptr<VivyFileIconProvider> iconProvider(new VivyFileIconProvider()); + + dialog.setOption(QFileDialog::ReadOnly); + dialog.setIconProvider(iconProvider.get()); + dialog.setFileMode(QFileDialog::ExistingFile); + connect(&dialog, &QFileDialog::accepted, this, + [&dialogAccepted]() noexcept -> void { dialogAccepted = true; }); + + dialog.exec(); + + if (!dialogAccepted) { + return QStringLiteral(""); + } + + const QStringList resList = dialog.selectedFiles(); + if (resList.size() != 1) { + qCritical() << "You must select only one file"; + return QStringLiteral(""); + } + + return resList.at(0); +} diff --git a/src/UI/MainWindow.hh b/src/UI/MainWindow.hh index 0da5f538c52619e3fd2298b675c060315b316520..17386985d089c75caaef8345ebd1984cd29f241b 100644 --- a/src/UI/MainWindow.hh +++ b/src/UI/MainWindow.hh @@ -28,7 +28,6 @@ class MainWindow final : public QMainWindow { public: explicit MainWindow() noexcept; - ~MainWindow() noexcept = default; AbstractDocument *getCurrentDocument() const noexcept; template <class Document> Document *getCurrentDocument() const noexcept @@ -43,18 +42,19 @@ public: private: void addTab(AbstractDocumentView *); - void addTab(VivyDocumentView *); AbstractDocumentView *getTab(const int) const noexcept; AbstractDocumentView *getCurrentDocumentView() const; int findFirstUntouchedDocument() const noexcept; + QString dialogOpenFileName(const QString &title, const QString &folder, + const QString &filter) noexcept; // Do an action with the selected filename. The 'call' variable must be // callable like this: call(DocumentView, Document, QString) template <typename DV, typename D> - void withOpenFileNameDialog(const QString &, auto call) noexcept + void withOpenFileNameDialog(const QString &title, const QString &filter, auto call) noexcept { - QString filename = QFileDialog::getOpenFileName(this, "Select an ASS document to load"); + const QString filename = dialogOpenFileName(title, QDir::homePath(), filter); if (filename.isEmpty()) { qWarning() << "Found an empty filename, don't open a file"; diff --git a/src/UI/PropertyModel.cc b/src/UI/PropertyModel.cc index 47308fa476f236532eaa12078efce9ae338754ea..5dd71eaaca81359c570771bf09db4c45356602b1 100644 --- a/src/UI/PropertyModel.cc +++ b/src/UI/PropertyModel.cc @@ -103,8 +103,7 @@ PropertyModel::Item::fromJson(const QJsonValue &value, PropertyModel::Item *pare } else if (value.isArray()) { - int index = 0; - for (const QJsonValue &v : value.toArray()) { + for (int index = 0; const QJsonValue v : value.toArray()) { Item *child = fromJson(v, root); child->setKey(QString::number(index)); child->setType(v.type()); diff --git a/src/UI/ScriptDocumentView.cc b/src/UI/ScriptDocumentView.cc index 661a1fbe5e23e8e193161cad68c3515426012511..b8d03ac55d6ccb23662417ad007f5466e6e4a8a1 100644 --- a/src/UI/ScriptDocumentView.cc +++ b/src/UI/ScriptDocumentView.cc @@ -1,10 +1,25 @@ #include "ScriptDocumentView.hh" +#include "ScriptViews/ScriptEditor.hh" +#include "ScriptViews/ScriptHighlighter.hh" +#include "../VivyApplication.hh" + +#include <QVBoxLayout> using namespace Vivy; -ScriptDocumentView::ScriptDocumentView(QWidget *parent) noexcept +ScriptDocumentView::ScriptDocumentView(const QString &path, QWidget *parent) : AbstractDocumentView(AbstractDocumentView::Type::Script, parent) + , editor(new ScriptEditor(this)) + , syntax(new ScriptHighlighter(editor->document())) { + QFile textFile(path); + if (!textFile.open(QIODevice::ReadOnly | QIODevice::Text)) { + throw std::runtime_error("Failed to open script file"); + } + + editor->setPlainText(textFile.readAll()); + setCentralWidget(editor); + editor->setFocus(Qt::OtherFocusReason); } void @@ -27,7 +42,7 @@ ScriptDocumentView::getDocumentTabToolTip() const noexcept QIcon ScriptDocumentView::getDocumentTabIcon() const noexcept { - return QIcon::fromTheme("text-x-script"); + return QIcon(VIVY_ICON_FILE); } void diff --git a/src/UI/ScriptDocumentView.hh b/src/UI/ScriptDocumentView.hh index 4d93378aab9a173786c621c91cb2f7d66dfa5c04..15b2be984092776f7b82ddbeb3ab4ee5e6774428 100644 --- a/src/UI/ScriptDocumentView.hh +++ b/src/UI/ScriptDocumentView.hh @@ -13,13 +13,15 @@ namespace Vivy { +class ScriptEditor; +class ScriptHighlighter; + class ScriptDocumentView final : public AbstractDocumentView { Q_OBJECT VIVY_UNMOVABLE_OBJECT(ScriptDocumentView) public: - explicit ScriptDocumentView(QWidget *parent = nullptr) noexcept; - virtual ~ScriptDocumentView() noexcept = default; + explicit ScriptDocumentView(const QString &path, QWidget *parent = nullptr); void closeDocument() noexcept override; void openProperties() noexcept override; @@ -31,7 +33,11 @@ public: AbstractDocument *getDocument() const noexcept override { return nullptr; - }; + } + +private: + ScriptEditor *editor{ nullptr }; + ScriptHighlighter *syntax{ nullptr }; }; } diff --git a/src/UI/ScriptViews/ScriptEditor.cc b/src/UI/ScriptViews/ScriptEditor.cc new file mode 100644 index 0000000000000000000000000000000000000000..362598405bba9536432d40c4373edba5e4ba1d35 --- /dev/null +++ b/src/UI/ScriptViews/ScriptEditor.cc @@ -0,0 +1,133 @@ +#include "ScriptEditor.hh" +#include "ScriptHighlighter.hh" + +#include <QTextCursor> +#include <QBrush> +#include <QKeyEvent> +#include <QFrame> + +using namespace Vivy; + +ScriptEditor::LineNumberArea::LineNumberArea(ScriptEditor *editor) noexcept + : QWidget(editor) + , scriptEditor(editor) +{ +} + +QSize +ScriptEditor::LineNumberArea::sizeHint() const noexcept +{ + return QSize(scriptEditor->lineNumberAreaWidth(), 0); +} + +void +ScriptEditor::LineNumberArea::paintEvent(QPaintEvent *event) noexcept +{ + scriptEditor->lineNumberAreaPaintEvent(event); +} + +ScriptEditor::ScriptEditor(QWidget *parent) noexcept + : QPlainTextEdit(parent) +{ + setStyleSheet(QStringLiteral("* {" + " background-color: #232629;" + " font-family: \"FiraCode\";" + " font-size: 10pt" + "}")); + lineNumberArea = new LineNumberArea(this); + setFrameShape(QFrame::NoFrame); + + connect(this, &ScriptEditor::blockCountChanged, this, &ScriptEditor::updateLineNumberAreaWidth); + connect(this, &ScriptEditor::updateRequest, this, &ScriptEditor::updateLineNumberArea); + + QTextCharFormat textFormat; + textFormat.setForeground(QBrush(Qt::white)); + mergeCurrentCharFormat(textFormat); + + setBackgroundVisible(true); + updateLineNumberAreaWidth(0); +} + +void +ScriptEditor::keyPressEvent(QKeyEvent *e) noexcept +{ + if (e->key() == Qt::Key_Tab) { + QTextCursor cursor = textCursor(); + cursor.insertText(spacesForTab); + e->accept(); + } + + else { + QPlainTextEdit::keyPressEvent(e); + } +} + +int +ScriptEditor::lineNumberAreaWidth() noexcept +{ + int digits = 1; + int max = qMax(1, blockCount()); + while (max >= 10) { + max /= 10; + ++digits; + } + if (digits == 1) + digits++; + + const int space = 3 + fontMetrics().horizontalAdvance('9') * digits; + return space; +} + +void +ScriptEditor::updateLineNumberAreaWidth([[maybe_unused]] int newBlockCount) noexcept +{ + setViewportMargins(lineNumberAreaWidth(), 0, 0, 0); +} + +void +ScriptEditor::updateLineNumberArea(const QRect &rect, int dy) noexcept +{ + if (dy) + lineNumberArea->scroll(0, dy); + else + lineNumberArea->update(0, rect.y(), lineNumberArea->width(), rect.height()); + + if (rect.contains(viewport()->rect())) + updateLineNumberAreaWidth(0); +} + +void +ScriptEditor::resizeEvent(QResizeEvent *e) noexcept +{ + QPlainTextEdit::resizeEvent(e); + const QRect cr = contentsRect(); + lineNumberArea->setGeometry(QRect(cr.left(), cr.top(), lineNumberAreaWidth(), cr.height())); +} + +void +ScriptEditor::lineNumberAreaPaintEvent(QPaintEvent *event) noexcept +{ + QPainter painter(lineNumberArea); + painter.fillRect(event->rect(), QColor::fromRgb(49, 54, 59)); + QTextBlock block = firstVisibleBlock(); + int blockNumber = block.blockNumber(); + int top = qRound(blockBoundingGeometry(block).translated(contentOffset()).top()); + int bottom = top + qRound(blockBoundingRect(block).height()); + const int current = textCursor().blockNumber(); + + while (block.isValid() && top <= event->rect().bottom()) { + if (block.isVisible() && bottom >= event->rect().top()) { + const bool drawCurrent = blockNumber == current; + const QString number = + drawCurrent ? QStringLiteral("->") : QString::number(blockNumber + 1); + painter.setPen(drawCurrent ? Qt::white : Qt::black); + painter.drawText(0, top, lineNumberArea->width(), fontMetrics().height(), + Qt::AlignRight, number); + } + + block = block.next(); + top = bottom; + bottom = top + qRound(blockBoundingRect(block).height()); + ++blockNumber; + } +} diff --git a/src/UI/ScriptViews/ScriptEditor.hh b/src/UI/ScriptViews/ScriptEditor.hh new file mode 100644 index 0000000000000000000000000000000000000000..601a2ed1305420342f0c81f57b35fe9a28c8dc29 --- /dev/null +++ b/src/UI/ScriptViews/ScriptEditor.hh @@ -0,0 +1,52 @@ +#pragma once + +#ifndef __cplusplus +#error "This is a C++ header" +#endif + +#include <QPlainTextEdit> +#include "../../Lib/Utils.hh" + +namespace Vivy +{ +class ScriptEditor final : public QPlainTextEdit { + Q_OBJECT + VIVY_UNMOVABLE_OBJECT(ScriptEditor) + + // Get the line numbers, private class + class LineNumberArea final : public QWidget { + VIVY_UNMOVABLE_OBJECT(LineNumberArea) + public: + LineNumberArea(ScriptEditor *editor) noexcept; + + QSize sizeHint() const noexcept override; + + protected: + void paintEvent(QPaintEvent *event) noexcept override; + + private: + ScriptEditor *scriptEditor{ nullptr }; + }; + + // Number of spaces in a tab + static constexpr int spacesPerTab = 4; + static inline const QString spacesForTab = QString(QStringLiteral(" ")).repeated(spacesPerTab); + +public: + ScriptEditor(QWidget *parent) noexcept; + + void lineNumberAreaPaintEvent(QPaintEvent *event) noexcept; + int lineNumberAreaWidth() noexcept; + +protected: + void resizeEvent(QResizeEvent *event) noexcept override; + void keyPressEvent(QKeyEvent *e) noexcept override; + +private slots: + void updateLineNumberAreaWidth(int newBlockCount) noexcept; + void updateLineNumberArea(const QRect &rect, int dy) noexcept; + +private: + QWidget *lineNumberArea{ nullptr }; +}; +} diff --git a/src/UI/ScriptViews/ScriptHighlighter.cc b/src/UI/ScriptViews/ScriptHighlighter.cc new file mode 100644 index 0000000000000000000000000000000000000000..6112d17646926a3d9c811b90a41ae96dc14277c1 --- /dev/null +++ b/src/UI/ScriptViews/ScriptHighlighter.cc @@ -0,0 +1,168 @@ +#include "ScriptHighlighter.hh" +#include "../../Lib/Utils.hh" + +#include <QTextDocument> + +using namespace Vivy; + +ScriptHighlighter::HighlightingRule::HighlightingRule(QRegExp pttrn, QTextCharFormat frmt) + : pattern(pttrn) + , format(frmt) +{ +} + +void +ScriptHighlighter::resetHighlightingRule() noexcept +{ + highlightingRules.clear(); + + // function calls + functionFormat.setForeground(fromTheme().functionForeground); + highlightingRules.emplace_back(QRegExpLiteral("\\b[A-Za-z0-9_]+[ ]*(?=\\()"), functionFormat); + highlightingRules.emplace_back(QRegExpLiteral("\\b[A-Za-z0-9_]+[ ]*(?=\\{)"), functionFormat); + + // keywords + const QStringList keywordPatterns = { + QStringLiteral("\\bfunction\\b"), QStringLiteral("\\bbreak\\b"), + QStringLiteral("\\bgoto\\b"), QStringLiteral("\\bdo\\b"), + QStringLiteral("\\bend\\b"), QStringLiteral("\\bwhile\\b"), + QStringLiteral("\\brepeat\\b"), QStringLiteral("\\buntil\\b"), + QStringLiteral("\\bif\\b"), QStringLiteral("\\bthen\\b"), + QStringLiteral("\\belseif\\b"), QStringLiteral("\\belse\\b"), + QStringLiteral("\\bfor\\b"), QStringLiteral("\\bin\\b"), + QStringLiteral("\\blocal\\b"), QStringLiteral("\\bor\\b"), + QStringLiteral("\\band\\b"), QStringLiteral("\\bnot\\b"), + QStringLiteral("\\breturn\\b"), + }; + + keywordFormat.setForeground(fromTheme().keywordForeground); + keywordFormat.setFontWeight(QFont::Bold); + + for (QString const &pattern : keywordPatterns) { + highlightingRules.emplace_back(QRegExp(pattern), keywordFormat); + } + + // numbers, boolean, nil + const QStringList valuePatterns = { + QStringLiteral("\\bnil\\b"), + QStringLiteral("\\btrue\\b"), + QStringLiteral("\\bfalse\\b"), + QStringLiteral("\\b\\d+\\b"), + QStringLiteral("\\b\\d+.\\b"), + QStringLiteral("\\b\\d+e\\b"), + QStringLiteral("\\b\\[\\dA-Fa-F]+\\b"), + }; + + valueFormat.setForeground(fromTheme().valueForeground); + valueFormat.setFontWeight(QFont::Normal); + + for (QString const &pattern : valuePatterns) { + highlightingRules.emplace_back(QRegExp(pattern), valueFormat); + } + + // strings + quotationFormat.setForeground(fromTheme().quotationForeground); + highlightingRules.emplace_back(QRegExpLiteral("\"[^\"]*\""), quotationFormat); + highlightingRules.emplace_back(QRegExpLiteral("\'[^\']*\'"), quotationFormat); + quoteStartExpression = QRegExpLiteral("\\[\\["); + quoteEndExpression = QRegExpLiteral("\\]\\]"); + + // comments + singleLineCommentFormat.setForeground(fromTheme().commentForeground); + highlightingRules.emplace_back(QRegExpLiteral("--[^\n]*"), singleLineCommentFormat); + commentStartExpression = QRegExpLiteral("--\\[\\["); + commentEndExpression = QRegExpLiteral("\\]\\]"); +} + +ScriptHighlighter::ScriptHighlighter(QTextDocument *parent) noexcept + : QSyntaxHighlighter(parent) +{ + resetHighlightingRule(); +} + +void +ScriptHighlighter::setCurrentBlockState(const ScriptHighlighter::BlockState state) noexcept +{ + QSyntaxHighlighter::setCurrentBlockState(Utils::toUnderlying(state)); +} + +ScriptHighlighter::BlockState +ScriptHighlighter::previousBlockState() noexcept +{ + const int state = QSyntaxHighlighter::previousBlockState(); + if (state != Utils::toUnderlying(BlockState::Quote) && + state != Utils::toUnderlying(BlockState::Comment)) + return BlockState::None; + + return static_cast<const BlockState>(state); +} + +void +ScriptHighlighter::highlightBlock(const QString &text) noexcept +{ + for (const HighlightingRule &rule : highlightingRules) { + QRegExp expression(rule.pattern); + int index = expression.indexIn(text); + while (index >= 0) { + const int length = expression.matchedLength(); + setFormat(index, length, rule.format); + index = expression.indexIn(text, index + length); + } + } + + setCurrentBlockState(BlockState::None); + const BlockState previousState = previousBlockState(); + + highlightStringBlock(text, previousState); + highlightCommentBlock(text, previousState); +} + +void +ScriptHighlighter::highlightBlock(const QString &text, const BlockState previousState, + const BlockState toHighlight, const QRegExp &startExpr, + const QRegExp &endExpr, const QTextCharFormat &format) noexcept +{ + int start = -1; + if (previousState == toHighlight) { + start = 0; + } else if (previousState == BlockState::None) { + start = startExpr.indexIn(text); + } + + while (start >= 0) { + const int end = endExpr.indexIn(text, start); + int length; + + if (end == -1) { + setCurrentBlockState(toHighlight); + length = text.length() - start; + } else { + length = end - start + endExpr.matchedLength(); + } + + setFormat(start, length, format); + start = startExpr.indexIn(text, start + length); + } +} + +void +ScriptHighlighter::highlightStringBlock(const QString &text, + const BlockState previousState) noexcept +{ + highlightBlock(text, previousState, BlockState::Quote, quoteStartExpression, quoteEndExpression, + quotationFormat); +} + +void +ScriptHighlighter::highlightCommentBlock(const QString &text, + const BlockState previousState) noexcept +{ + highlightBlock(text, previousState, BlockState::Comment, commentStartExpression, + commentEndExpression, singleLineCommentFormat); +} + +const ScriptHighlighter::HighlightingTheme +ScriptHighlighter::fromTheme() const noexcept +{ + return highlightingTheme[theme]; +} diff --git a/src/UI/ScriptViews/ScriptHighlighter.hh b/src/UI/ScriptViews/ScriptHighlighter.hh new file mode 100644 index 0000000000000000000000000000000000000000..655f8755f96a51b18a9e7e7a9d74f36487eba44b --- /dev/null +++ b/src/UI/ScriptViews/ScriptHighlighter.hh @@ -0,0 +1,92 @@ +#pragma once + +#ifndef __cplusplus +#error "This is a C++ header" +#endif + +#include <QSyntaxHighlighter> +#include <QTextCharFormat> +#include <QBrush> + +class QTextDocument; + +namespace Vivy +{ +class ScriptHighlighter final : public QSyntaxHighlighter { + Q_OBJECT + + struct HighlightingRule { + HighlightingRule(QRegExp pttrn, QTextCharFormat frmt); + + QRegExp pattern; + QTextCharFormat format; + }; + + struct HighlightingTheme { + const QBrush functionForeground; + const QBrush keywordForeground; + const QBrush valueForeground; + const QBrush quotationForeground; + const QBrush commentForeground; + }; + + enum Theme { DarkTheme = 0, LightTheme = 1, ThemeCount }; + enum class BlockState { None = -1, Quote = 1, Comment = 2 }; + +public: + ScriptHighlighter(QTextDocument *parent = nullptr) noexcept; + +protected: + void highlightBlock(const QString &text) noexcept override; + + void setCurrentBlockState(const BlockState) noexcept; + BlockState previousBlockState() noexcept; + +private: + void highlightStringBlock(const QString &text, const BlockState) noexcept; + void highlightCommentBlock(const QString &text, const BlockState) noexcept; + + void highlightBlock(const QString &text, const BlockState previous, + const BlockState toHighlight, const QRegExp &start, const QRegExp &end, + const QTextCharFormat &format) noexcept; + + const HighlightingTheme fromTheme() const noexcept; + void resetHighlightingRule() noexcept; + + const HighlightingTheme darkHighlightingTheme = { + .functionForeground = Qt::darkCyan, + .keywordForeground = Qt::darkYellow, + .valueForeground = QColor(Qt::cyan).darker(120), + .quotationForeground = Qt::darkGreen, + .commentForeground = QColor(Qt::darkGray).darker(120), + }; + + const HighlightingTheme lightHighlightingTheme = { + .functionForeground = Qt::blue, + .keywordForeground = Qt::darkBlue, + .valueForeground = Qt::red, + .quotationForeground = Qt::darkGreen, + .commentForeground = QColor(Qt::darkGray).darker(120), + }; + + const HighlightingTheme highlightingTheme[ThemeCount] = { + darkHighlightingTheme, + lightHighlightingTheme, + }; + + Theme theme{ DarkTheme }; + + std::vector<HighlightingRule> highlightingRules; + + QRegExp commentStartExpression; + QRegExp commentEndExpression; + QRegExp quoteStartExpression; + QRegExp quoteEndExpression; + + QTextCharFormat keywordFormat; + QTextCharFormat valueFormat; + QTextCharFormat singleLineCommentFormat; + QTextCharFormat quotationFormat; + QTextCharFormat functionFormat; +}; +} diff --git a/src/UI/VivyDocumentView.cc b/src/UI/VivyDocumentView.cc index bd0a0416bdadb92a3e6d4ece9142394ad5a71b18..cd72d6f7ba4201f847b3635dd7b8b5cabd4374ee 100644 --- a/src/UI/VivyDocumentView.cc +++ b/src/UI/VivyDocumentView.cc @@ -118,7 +118,8 @@ VivyDocumentView::loadAudioView() noexcept visualizer->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Minimum); visualizer->setWidget(visualizerInner); - visualizer->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::TopDockWidgetArea); + visualizer->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::TopDockWidgetArea | + Qt::BottomDockWidgetArea); visualizer->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable); visualizer->layout()->setAlignment(visualizerInner, Qt::AlignTop); addDockWidget(Qt::LeftDockWidgetArea, visualizer, Qt::Horizontal); diff --git a/src/VivyApplication.cc b/src/VivyApplication.cc index db7350047f6b4ae9e1e9e8b6050e71d873eac85e..86ef22ab58de0ca87bc7265a8e2b662aa4b19677 100644 --- a/src/VivyApplication.cc +++ b/src/VivyApplication.cc @@ -12,27 +12,45 @@ VivyApplication::VivyApplication(int &argc, char **argv) { } +void +VivyApplication::setTheme(Theme theme) noexcept +{ + if (theme == Theme::System) + return; + + const QString sheet = theme == Theme::Dark ? QStringLiteral(":qdarkstyle/dark/style.qss") + : QStringLiteral(":qdarkstyle/light/style.qss"); + + QFile stylesheet(sheet); + if (!stylesheet.exists()) { + qFatal("Missing stylesheet"); + } else { + stylesheet.open(QFile::ReadOnly | QFile::Text); + QTextStream stylesheetStream(&stylesheet); + setStyleSheet(stylesheetStream.readAll()); + } +} + int VivyApplication::exec() noexcept { // Add fonts - fontIdMonospace = QFontDatabase::addApplicationFont(":/fonts/FiraCode-Regular.ttf"); - fontIdRegular = QFontDatabase::addApplicationFont(":/fonts/NotoSans-Regular.ttf"); - fontIdItalic = QFontDatabase::addApplicationFont(":/fonts/NotoSans-Italic.ttf"); - fontIdBold = QFontDatabase::addApplicationFont(":/fonts/NotoSans-Bold.ttf"); - fontIdBoldItalic = QFontDatabase::addApplicationFont(":/fonts/NotoSans-BoldItalic.ttf"); + fontIdMonospace = QFontDatabase::addApplicationFont(":/fonts/FiraCode-Regular.ttf"); + fontIdMonospaceBold = QFontDatabase::addApplicationFont(":/fonts/FiraCode-Bold.ttf"); + fontIdRegular = QFontDatabase::addApplicationFont(":/fonts/NotoSans-Regular.ttf"); + fontIdItalic = QFontDatabase::addApplicationFont(":/fonts/NotoSans-Italic.ttf"); + fontIdBold = QFontDatabase::addApplicationFont(":/fonts/NotoSans-Bold.ttf"); + fontIdBoldItalic = QFontDatabase::addApplicationFont(":/fonts/NotoSans-BoldItalic.ttf"); // Setup some things setAttribute(Qt::AA_DontShowIconsInMenus, false); setAttribute(Qt::AA_DontShowShortcutsInContextMenus, false); setFont(getApplicationFont(Font::Default)); - QFile stylesheet(":qdarkstyle/dark/style.qss"); - if (!stylesheet.exists()) { - qFatal("Missing stylesheet"); - } - stylesheet.open(QFile::ReadOnly | QFile::Text); - QTextStream stylesheetStream(&stylesheet); - setStyleSheet(stylesheetStream.readAll()); + setTheme(Theme::Dark); // TODO: Set system theme for now (because we + // don't have a central theme provider). + + // Cursor blinking + setCursorFlashTime(0); // Show the main window MainWindow mainWindow; @@ -49,6 +67,9 @@ VivyApplication::getApplicationFont(Font id) const noexcept case Font::Monospace: return QFont(QFontDatabase::applicationFontFamilies(fontIdMonospace).at(0)); + case Font::MonospaceBold: + return QFont(QFontDatabase::applicationFontFamilies(fontIdMonospaceBold).at(0)); + case Font::DefaultItalic: return QFont(QFontDatabase::applicationFontFamilies(fontIdItalic).at(0)); diff --git a/src/VivyApplication.hh b/src/VivyApplication.hh index 5cc29c4040da1e7c14c011f30d5ee3d0ece4e97d..4d51494cdce8fe4526852725624e6b2954dec4a9 100644 --- a/src/VivyApplication.hh +++ b/src/VivyApplication.hh @@ -37,14 +37,22 @@ public: enum class Font { Monospace, + MonospaceBold, Default, DefaultItalic, DefaultBold, DefaultBoldItalic, }; + enum class Theme { + System, + Dark, + Light, + }; + private: int fontIdMonospace; + int fontIdMonospaceBold; int fontIdRegular; int fontIdItalic; int fontIdBold; @@ -52,11 +60,11 @@ private: public: VivyApplication(int &argc, char **argv); - ~VivyApplication() = default; int exec() noexcept; QFont getApplicationFont(Font) const noexcept; + void setTheme(Theme) noexcept; }; }