From 9ff5b90605662ab163ee4eb4c19fe70e63685bd8 Mon Sep 17 00:00:00 2001 From: Bruno Herbelin Date: Wed, 16 Aug 2023 14:06:16 +0200 Subject: [PATCH] UI improvement: new icon for patten source Minor UI improvements in help and menus --- CMakeLists.txt | 1 + rsc/images/icons.dds | Bin 1638528 -> 1638528 bytes rsc/mesh/icon_pattern.ply | 122 +++++++++++++++++++++++++++++++++++ src/Decorations.cpp | 4 +- src/Decorations.h | 2 +- src/RenderSource.cpp | 2 +- src/Source.h | 2 +- src/UserInterfaceManager.cpp | 59 ++++++----------- src/UserInterfaceManager.h | 3 +- 9 files changed, 150 insertions(+), 45 deletions(-) create mode 100644 rsc/mesh/icon_pattern.ply diff --git a/CMakeLists.txt b/CMakeLists.txt index 2951462..5261896 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -552,6 +552,7 @@ set(VMIX_RSC_FILES ./rsc/mesh/icon_video.ply ./rsc/mesh/icon_image.ply ./rsc/mesh/icon_render.ply + ./rsc/mesh/icon_pattern.ply ./rsc/mesh/icon_gear.ply ./rsc/mesh/icon_camera.ply ./rsc/mesh/icon_share.ply diff --git a/rsc/images/icons.dds b/rsc/images/icons.dds index 7c4a83236ab681e3ac42dbd6081aaf8ed77b3b2a..80dddc34173b892e053b0c1cd51a37435997ea6b 100644 GIT binary patch delta 3941 zcmcInZ){uD6+iF2>o_rWYbR-v##!r>flz4Fhr%)usa}wx6*d+OD0JFH{veiWf|4MF zGRn5P8dd2g7JC`GAZ<%Je`r?;B@vYO!P1%8B+=bn4+@1Aq+eUamjMDXufae>b{e87A< zbl%Y5-i`fZm4ojY*;y^AX}@_X$Biy6q-ny#Z#nEQ7}+_p%Y*%Tr^5tx2`O~Y0xD; z25D7P77v&doL|;H^Ttj#9rM8jUtWrU-$>9qJ;a*gOKib@D8tHD?DKEMP=>G9SC@Fk znofF(0{1{lK^uQ!%oMZ_wLQad5pue-8I2h>sT{B=jzyZkJr8T0h10gx8P_<3pvo4p z+|OY-H+eBLEP~Fefk7h-A?p!?t1Rc`GxvL&>&29q#zGHqVZIy@75wa=`dIB{(eL!Q zg+~NLz%ts;KG5zvEf&Rsh}a@O9ii7FgY-+vMoc{TmH6|t7!~9HOiOunZ1&z@-wMnk z8LP4}*(R3pJtc8l+cILyQkvu|@H``8mU6E_`xaP(>z>R>Hk(h+<+w@1@x{7F(GtEL774gJXkb)$6}FAW9B9# zG8int8q9%7Hm#`}l1j$qXpTjK+;`_T*ReIYC};CPH%uxRTlmnJ&HeXDtQVqUF|#o) zv6%cM^JIxXD5gL3+18Z%4|G~Ba(pqgHm=QQhWX)l-FNWlm+DQ%`4;xR_jZ#;DFt8= zSb|L&B_>}(8XXeb(WOipQNmh=-a|CX0oN-uY2+g>Y`fc-xdYkb(W&iz_fR%9Ejo+* zt=+X>dlW6V$M-{!79z1|%s;+_q7p+G=9HD2?Jy~}3U^8!vgLu?F$^}XNkvo?n>L2z zc-)$1+&+@(muL9s}^!N13HS}f`huERV;AS}m@LPiruO;y%r@DH1{ zJIoQlmrCCb1a#YEhtyS9!$`pF|6DO*JM(imj&_!HLIz*%>*;(jy&R*BpZGpYL zcsRqn6v?LYy~2aJ3m;;1K=?KQ4`_*70S{8ky2Y-vHf~cO!|SLOUR#p7m5m%1F+ujwnvUmqUye@k#k6d)PI1*1F4rZOx)W z96`X(Jgoemy+ZdJOF_rcQ^O#Ck^@41}3j*qYKOwP|Fs%C*nROk0av3jCPJgi}Q;}4@ zTf&acqmNeC81X-{tKPBUSDO#!;R0YPk~7eMBLV(WoJc6Xt=PXsK9TS%{A}LSbbI2z zjeN!#nNse-eFNB}beb`LL|9h=Iaw7S_=B?l;6fT>7VikMS;c!_2*wqOQ3>E0%)~^j zM8!gSW3*@=K)ZaD$AEwHO6}8lTr%C5d5v8|C)oR7yo0Xyjw1aWUGE*N#p!zQ;0~Rx z_YOX%nV%roKobMRJLr1PZ<((Aq4A41*mhPoTy_8l@Z_Hk0SF}TAqpmJLfaiuY>+&+4BmX;2s^1`Spbyx! zlh?jrSY22vu)48UVy(jJ!FmJMZCJfnw`1Lb)rZxOwHj*;)>^DPvDRU&H?Dor5cU2C D!)-3> delta 2466 zcma)8ZEO@p7@oZykQ48^cfFRH7<$Gah0t;h#MlO<4H~3?QsN)P7)p>o77|G`kx;Kk zt3;yhZI(Lzq1Y?t5;TCx9ZQ0dHl#=tZ6Ovx3=77DmX9tUA-U@9zP_`2b9cy>GktgV znVEOyecos0w(YSE?fBOzb$U|rnF00V%H*ByfTZ6Ul#j}4XJZZ>m(Tmu_>|;mKaP!# z$|q$twlIf&moNHQ`kEYB&~2H3Wgix!s-8%sjtIQnBK_pu=6?hRu(6s)SjFMM*ZQ$> z`Bz!pF_WbyA^oHe0!lQe~F@(8TiL?aR9xWL9z+sp#|BJdS} zHmHF80=EVvLP#hd(+?27Ohz?ZjPn*?_$q&L4zL_d_R`6~HhsX7Psv}YRMJ%s1s{ut zXe7GiDrv^`w&bV3nT1g(q+kf_Vc2XLV*F^R45wG+xBm^oV?=GlDBbOPJ24{w*9Eps zv;L?D)(TwJfbN*o9A>cHJC(g$MwhGch&~XYBXSbslJs~vz3J0V8P7xwYfr!MhGG8Z zaCOMNZ6P#xpS!zRzZ{d>B@5hdlf9VSA%TtOfG78Yz~gRmdj)P=?ZN0|5#7Elw9K?f zB78N>mgHS^1zd=ezqJT16U*X!sxnZ;{7;fj>4q)C|MXK>Hs zpqynV7ST=GP|rNpw^N$0$6s_ctb7Gez&1RTn0hxtlJR6(C*3f3#MR+y!mAh`g9b~% zDll&+U`>{dt)kUSCWhb759~L~49Un-mroO?igDzj>`9vrU%ru&;TO%wvM+W@i*>e= zP9miZp<32xNFg?)c}wUOSmo}6L{>ON7!s+~2UpVpAB!RXXv-eLtJuVXEmpC9ZxOQz z%>9K;k;xkON;&#?TfBtVf`0jD(Qq7)Zrwigd&BS)RBbvf-K%PRe?*kQlGVN806$ChQw}Sk4 zrAWcn7SE#;+-2jJ?;pBlZJx7OX8+ZrQ!cMGlMsTiQqK_1JEQO@cOPN=djNR!bk9 zpF}c#rj#o|mPpZ=(GMl}8zOd6tbp}S(VhAqihTAkMesrejCA2lDwor4+VF{qWQ*H_ zEA>ymrIhA^Iz(S}BfcF9v88Fc%<0z?hp6Ar4xXTq#udb@%jGVA4OnhbE{+q<2W|() zB-MepxPXB@y(_q0?--(fs>UkWK`mH2;{j`GhkNF;*+0>(tWOIz=$C$^rjL#MK?im9 z93~k*P8^M3n;f}7{c0T3eTxq8m;?IYb$Sv16?!d+UD6JGpiM!WiuM@VG&C>T<7m^- ho > RenderSource::ProvenanceMethod = { - { 16, 12, "Loopback" }, { 15, 12, "Non-recursive"} + { 16, 12, "Recursive" }, { 15, 12, "Non-recursive"} }; RenderSource::RenderSource(uint64_t id) : Source(id), session_(nullptr), runtime_(0), rendered_output_(nullptr), rendered_surface_(nullptr), diff --git a/src/Source.h b/src/Source.h index a5e7f96..9f77674 100644 --- a/src/Source.h +++ b/src/Source.h @@ -19,7 +19,7 @@ #define ICON_SOURCE_DEVICE 2, 14 #define ICON_SOURCE_SEQUENCE 3, 9 #define ICON_SOURCE_NETWORK 18, 11 -#define ICON_SOURCE_PATTERN 11, 5 +#define ICON_SOURCE_PATTERN 5, 3 #define ICON_SOURCE_SESSION 19, 6 #define ICON_SOURCE_GROUP 10, 6 #define ICON_SOURCE_RENDER 19, 1 diff --git a/src/UserInterfaceManager.cpp b/src/UserInterfaceManager.cpp index 93aaa90..c4aa1dc 100644 --- a/src/UserInterfaceManager.cpp +++ b/src/UserInterfaceManager.cpp @@ -2357,60 +2357,41 @@ void UserInterface::RenderHelp() ImGui::SetColumnWidth(0, width_column0); ImGui::PushTextWrapPos(width_window ); - ImGui::Text(ICON_FA_PHOTO_VIDEO); ImGui::NextColumn(); - ImGuiToolkit::PushFont(ImGuiToolkit::FONT_BOLD); ImGui::Text("File");ImGui::PopFont(); - ImGui::NextColumn(); ImGuiToolkit::Icon(ICON_SOURCE_VIDEO); ImGui::SameLine(0, IMGUI_SAME_LINE);ImGui::Text("Video"); ImGui::NextColumn(); - ImGui::Text ("Video file (*.mpg, *mov, *.avi, etc.)."); + ImGui::Text ("Video file (*.mpg, *mov, *.avi, etc.). Decoding can be optimized with hardware acceleration."); ImGui::NextColumn(); ImGuiToolkit::Icon(ICON_SOURCE_IMAGE); ImGui::SameLine(0, IMGUI_SAME_LINE);ImGui::Text("Image"); ImGui::NextColumn(); ImGui::Text ("Image file (*.jpg, *.png, etc.) or vector graphics (*.svg)."); ImGui::NextColumn(); ImGuiToolkit::Icon(ICON_SOURCE_SESSION); ImGui::SameLine(0, IMGUI_SAME_LINE);ImGui::Text("Session"); ImGui::NextColumn(); - ImGui::Text ("Render a session (*.mix) as a source."); - ImGui::NextColumn(); - ImGui::Separator(); - ImGui::Text(ICON_FA_IMAGES); ImGui::NextColumn(); - ImGuiToolkit::PushFont(ImGuiToolkit::FONT_BOLD); ImGui::Text("Sequence");ImGui::PopFont(); + ImGui::Text ("Render a session (*.mix) as a source. Recursion is limited."); ImGui::NextColumn(); ImGuiToolkit::Icon(ICON_SOURCE_SEQUENCE); ImGui::SameLine(0, IMGUI_SAME_LINE);ImGui::Text("Sequence"); ImGui::NextColumn(); ImGui::Text ("Set of images numbered sequentially (*.jpg, *.png, etc.)."); ImGui::NextColumn(); - ImGui::Separator(); - ImGui::Text(ICON_FA_PLUG); ImGui::NextColumn(); - ImGuiToolkit::PushFont(ImGuiToolkit::FONT_BOLD); ImGui::Text("Connected");ImGui::PopFont(); - ImGui::NextColumn(); - ImGuiToolkit::Icon(ICON_SOURCE_DEVICE); ImGui::SameLine(0, IMGUI_SAME_LINE);ImGui::Text("Device"); ImGui::NextColumn(); - ImGui::Text ("Connected webcam or frame grabber."); + ImGuiToolkit::Icon(ICON_SOURCE_RENDER); ImGui::SameLine(0, IMGUI_SAME_LINE);ImGui::Text("Loopback"); ImGui::NextColumn(); + ImGui::Text ("Loopback the rendering output as a source, with or without recursion."); ImGui::NextColumn(); ImGuiToolkit::Icon(ICON_SOURCE_DEVICE_SCREEN); ImGui::SameLine(0, IMGUI_SAME_LINE);ImGui::Text("Screen"); ImGui::NextColumn(); ImGui::Text ("Screen capture of the entire screen or a selected window."); ImGui::NextColumn(); + ImGuiToolkit::Icon(ICON_SOURCE_DEVICE); ImGui::SameLine(0, IMGUI_SAME_LINE);ImGui::Text("Device"); ImGui::NextColumn(); + ImGui::Text ("Connected webcam or frame grabber. Highest resolution and framerate automatically selected."); + ImGui::NextColumn(); ImGuiToolkit::Icon(ICON_SOURCE_NETWORK); ImGui::SameLine(0, IMGUI_SAME_LINE);ImGui::Text("Shared"); ImGui::NextColumn(); - ImGui::Text ("Connected stream from another vimix in the local network (shared output stream)."); + ImGui::Text ("Connected stream from another vimix in the local network (peer-to-peer)."); ImGui::NextColumn(); ImGuiToolkit::Icon(ICON_SOURCE_SRT); ImGui::SameLine(0, IMGUI_SAME_LINE);ImGui::Text("SRT"); ImGui::NextColumn(); ImGui::Text ("Connected Secure Reliable Transport (SRT) stream emitted on the network (e.g. broadcasted by vimix)."); ImGui::NextColumn(); - ImGui::Separator(); - ImGui::Text(ICON_FA_COG); ImGui::NextColumn(); - ImGuiToolkit::PushFont(ImGuiToolkit::FONT_BOLD); ImGui::Text("Generated");ImGui::PopFont(); - ImGui::NextColumn(); ImGuiToolkit::Icon(ICON_SOURCE_PATTERN); ImGui::SameLine(0, IMGUI_SAME_LINE);ImGui::Text("Pattern"); ImGui::NextColumn(); ImGui::Text ("Algorithmically generated source; colors, grids, test patterns, timers..."); ImGui::NextColumn(); ImGuiToolkit::Icon(ICON_SOURCE_GSTREAMER); ImGui::SameLine(0, IMGUI_SAME_LINE);ImGui::Text("GStreamer"); ImGui::NextColumn(); ImGui::Text ("Custom gstreamer pipeline, as described in command line for gst-launch-1.0 (without the target sink)."); ImGui::NextColumn(); - ImGui::Separator(); - ImGui::Text(ICON_FA_SYNC); ImGui::NextColumn(); - ImGuiToolkit::PushFont(ImGuiToolkit::FONT_BOLD); ImGui::Text("Internal");ImGui::PopFont(); - ImGui::NextColumn(); - ImGuiToolkit::Icon(ICON_SOURCE_RENDER); ImGui::SameLine(0, IMGUI_SAME_LINE);ImGui::Text("Loopback"); ImGui::NextColumn(); - ImGui::Text ("Loopback the rendering output as a source, with or without recursion."); - ImGui::NextColumn(); ImGuiToolkit::Icon(ICON_SOURCE_CLONE); ImGui::SameLine(0, IMGUI_SAME_LINE);ImGui::Text("Clone"); ImGui::NextColumn(); - ImGui::Text ("Clones the frames of a source into another one, and applies a filter on the way."); + ImGui::Text ("Clones the frames of a source into another one and applies a GPU filter."); ImGui::NextColumn(); ImGuiToolkit::Icon(ICON_SOURCE_GROUP); ImGui::SameLine(0, IMGUI_SAME_LINE);ImGui::Text("Bundle"); ImGui::NextColumn(); ImGui::Text ("Bundles together several sources and renders them as an internal session."); @@ -3202,7 +3183,7 @@ void Navigator::RenderNewPannel() clearNewPannel(); } ImGui::NextColumn(); - if (ImGuiToolkit::SelectableIcon( 3, 9, "##SOURCE_SEQUENCE", selected_type[SOURCE_SEQUENCE], iconsize)) { + if (ImGuiToolkit::SelectableIcon( ICON_SOURCE_SEQUENCE, "##SOURCE_SEQUENCE", selected_type[SOURCE_SEQUENCE], iconsize)) { Settings::application.source.new_type = SOURCE_SEQUENCE; clearNewPannel(); } @@ -3212,13 +3193,12 @@ void Navigator::RenderNewPannel() clearNewPannel(); } ImGui::NextColumn(); - if (ImGuiToolkit::SelectableIcon( 11, 5, "##SOURCE_GENERATED", selected_type[SOURCE_GENERATED], iconsize)) { + if (ImGuiToolkit::SelectableIcon( ICON_SOURCE_PATTERN, "##SOURCE_GENERATED", selected_type[SOURCE_GENERATED], iconsize)) { Settings::application.source.new_type = SOURCE_GENERATED; clearNewPannel(); } ImGui::NextColumn(); - ImGui::Columns(1); ImGui::PopStyleVar(); ImGui::PopFont(); @@ -3232,7 +3212,7 @@ void Navigator::RenderNewPannel() static DialogToolkit::OpenMediaDialog fileimportdialog("Open Media"); static DialogToolkit::OpenFolderDialog folderimportdialog("Select Folder"); - ImGui::Text("Load media or session file:"); + ImGui::Text("Video, image & session files"); // clic button to load file if ( ImGui::Button( ICON_FA_FOLDER_OPEN " Open", ImVec2(ImGui::GetContentRegionAvail().x IMGUI_RIGHT_ALIGN, 0)) ) @@ -3424,7 +3404,7 @@ void Navigator::RenderNewPannel() } } - // Folder Source creator + // Sequence Source creator else if (Settings::application.source.new_type == SOURCE_SEQUENCE){ static DialogToolkit::MultipleImagesDialog _selectImagesDialog("Select multiple images"); @@ -3432,7 +3412,7 @@ void Navigator::RenderNewPannel() static MultiFileRecorder _video_recorder; static int _fps = 25; - ImGui::Text("Create image sequence:"); + ImGui::Text("Image sequence"); // clic button to load file if ( ImGui::Button( ICON_FA_FOLDER_OPEN " Open multiple", ImVec2(ImGui::GetContentRegionAvail().x IMGUI_RIGHT_ALIGN, 0)) ) { @@ -3566,11 +3546,12 @@ void Navigator::RenderNewPannel() } + // Generated patterns Source creator else if (Settings::application.source.new_type == SOURCE_GENERATED){ bool update_new_source = false; - ImGui::Text("Generate graphic patterns:"); + ImGui::Text("Patterns & generated graphics"); ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN); if (ImGui::BeginCombo("##Pattern", "Select", ImGuiComboFlags_HeightLarge)) @@ -3657,10 +3638,10 @@ void Navigator::RenderNewPannel() } } } - // External source creator + // Input and connected source creator else if (Settings::application.source.new_type == SOURCE_CONNECTED){ - ImGui::Text("Input device or stream:"); + ImGui::Text("Input devices & streams"); ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN); if (ImGui::BeginCombo("##ExternalConnected", "Select ")) @@ -3813,10 +3794,10 @@ void Navigator::RenderNewPannel() if (custom_screencapture) { - ImGui::Text("\nWindow:"); + ImGui::Text("\nScreen Capture:"); ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN); - if (ImGui::BeginCombo("##ScreenCaptureSelect", "Select ", ImGuiComboFlags_HeightLarge)) + if (ImGui::BeginCombo("##ScreenCaptureSelect", "Select window", ImGuiComboFlags_HeightLarge)) { for (int d = 0; d < ScreenCapture::manager().numWindow(); ++d){ std::string namewin = ScreenCapture::manager().name(d); diff --git a/src/UserInterfaceManager.h b/src/UserInterfaceManager.h index cc2b63a..200655b 100644 --- a/src/UserInterfaceManager.h +++ b/src/UserInterfaceManager.h @@ -77,8 +77,7 @@ public: SOURCE_FILE = 0, SOURCE_SEQUENCE, SOURCE_CONNECTED, - SOURCE_GENERATED, - SOURCE_TYPES + SOURCE_GENERATED } NewSourceType; Navigator();