UI selection Workspace in Geometry View

Back to the combo box (smaller and unified with other views) but following the unified color accent.
This commit is contained in:
Bruno Herbelin
2023-03-23 22:49:35 +01:00
parent b97674a404
commit d86754b0e6
3 changed files with 69 additions and 33 deletions

View File

@@ -215,11 +215,14 @@ void GeometryView::draw()
source_iter != Mixer::manager().session()->end(); ++source_iter) { source_iter != Mixer::manager().session()->end(); ++source_iter) {
// if it is in the current workspace // if it is in the current workspace
if ((*source_iter)->workspace() == Settings::application.current_workspace) { if ((*source_iter)->workspace() == Settings::application.current_workspace) {
// if ((*source_iter)->blendingShader()->color.a > 0.f) // TODO: option to hide non visible
{
// will draw its surface // will draw its surface
surfaces.push_back((*source_iter)->groups_[mode_]); surfaces.push_back((*source_iter)->groups_[mode_]);
// will draw its frame and locker icon // will draw its frame and locker icon
overlays.push_back((*source_iter)->frames_[mode_]); overlays.push_back((*source_iter)->frames_[mode_]);
overlays.push_back((*source_iter)->locker_); overlays.push_back((*source_iter)->locker_);
}
} }
} }
@@ -251,11 +254,11 @@ void GeometryView::draw()
// display interface // display interface
// Locate window at upper right corner // Locate window at upper right corner
glm::vec2 P = glm::vec2(output_surface_->scale_.x + 0.02f, output_surface_->scale_.y ); glm::vec2 P = glm::vec2(-output_surface_->scale_.x - 0.02f, output_surface_->scale_.y + 0.01);
P = Rendering::manager().project(glm::vec3(P, 0.f), scene.root()->transform_, false); P = Rendering::manager().project(glm::vec3(P, 0.f), scene.root()->transform_, false);
// Set window position depending on icons size // Set window position depending on icons size
ImGuiToolkit::PushFont(ImGuiToolkit::FONT_LARGE); ImGuiToolkit::PushFont(ImGuiToolkit::FONT_LARGE);
ImGui::SetNextWindowPos(ImVec2(P.x, P.y), ImGuiCond_Always); ImGui::SetNextWindowPos(ImVec2(P.x, P.y - 1.5f * ImGui::GetFrameHeight() ), ImGuiCond_Always);
if (ImGui::Begin("##GeometryViewOptions", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoBackground if (ImGui::Begin("##GeometryViewOptions", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoBackground
| ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings
| ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoBringToFrontOnFocus )) | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoBringToFrontOnFocus ))
@@ -263,26 +266,40 @@ void GeometryView::draw()
// style // style
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.0f)); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.0f));
ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.14f, 0.14f, 0.14f, 0.f)); ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.14f, 0.14f, 0.14f, 0.f));
ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(0.24f, 0.24f, 0.24f, 0.46f));
ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.00f, 0.00f, 0.00f, 0.00f)); ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.00f, 0.00f, 0.00f, 0.00f));
ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.4f, 0.4f, 0.4f, 0.56f)); ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.4f, 0.4f, 0.4f, 0.56f));
ImGui::PushStyleColor(ImGuiCol_PopupBg, ImVec4(0.14f, 0.14f, 0.14f, 0.9f));
bool on = Settings::application.current_workspace == Source::BACKGROUND; // bool on = Settings::application.current_workspace == Source::BACKGROUND;
if ( ImGuiToolkit::ButtonIconToggle(10,16,10,16, &on, "Background") ) { // if ( ImGuiToolkit::ButtonIconToggle(10,16,10,16, &on, "Background") ) {
Settings::application.current_workspace = Source::BACKGROUND; // Settings::application.current_workspace = Source::BACKGROUND;
++View::need_deep_update_; // ++View::need_deep_update_;
} // }
on = Settings::application.current_workspace == Source::STAGE; // ImGui::SameLine(0, IMGUI_SAME_LINE);
if ( ImGuiToolkit::ButtonIconToggle(11,16,11,16, &on, "Workspace") ) { // on = Settings::application.current_workspace == Source::STAGE;
Settings::application.current_workspace = Source::STAGE; // if ( ImGuiToolkit::ButtonIconToggle(11,16,11,16, &on, "Workspace") ) {
++View::need_deep_update_; // Settings::application.current_workspace = Source::STAGE;
} // ++View::need_deep_update_;
on = Settings::application.current_workspace == Source::FOREGROUND; // }
if ( ImGuiToolkit::ButtonIconToggle(12,16,12,16, &on, "Foreground") ) { // ImGui::SameLine(0, IMGUI_SAME_LINE);
Settings::application.current_workspace = Source::FOREGROUND; // on = Settings::application.current_workspace == Source::FOREGROUND;
++View::need_deep_update_; // if ( ImGuiToolkit::ButtonIconToggle(12,16,12,16, &on, "Foreground") ) {
// Settings::application.current_workspace = Source::FOREGROUND;
// ++View::need_deep_update_;
// }
static std::vector< std::tuple<int, int, std::string> > _workspaces = {
{10, 16, "Background"},
{11, 16, "Workspace"},
{12, 16, "Foreground"}
};
ImGui::SetNextItemWidth( ImGui::GetTextLineHeight() * 2.6);
if ( ImGuiToolkit::ComboIcon ("##WORKSPACE", &Settings::application.current_workspace, _workspaces, true) ){
++View::need_deep_update_;
} }
ImGui::PopStyleColor(4); ImGui::PopStyleColor(6);
ImGui::End(); ImGui::End();
} }
ImGui::PopFont(); ImGui::PopFont();

View File

@@ -463,7 +463,7 @@ bool ImGuiToolkit::ButtonIconMultistate(std::vector<std::pair<int, int> > icons,
return ret; return ret;
} }
bool ImGuiToolkit::ComboIcon (const char* label, int* current_item, std::vector< std::tuple<int, int, std::string> > items) bool ImGuiToolkit::ComboIcon (const char* label, int* current_item, std::vector< std::tuple<int, int, std::string> > items, bool tooltiptext)
{ {
bool ret = false; bool ret = false;
ImGuiContext& g = *GImGui; ImGuiContext& g = *GImGui;
@@ -478,22 +478,41 @@ bool ImGuiToolkit::ComboIcon (const char* label, int* current_item, std::vector<
space_buf[space_num]='\0'; space_buf[space_num]='\0';
char text_buf[256]; char text_buf[256];
ImFormatString(text_buf, IM_ARRAYSIZE(text_buf), "%s %s", space_buf, std::get<2>( items.at(*current_item) ).c_str()); if (tooltiptext) {
ImFormatString(text_buf, IM_ARRAYSIZE(text_buf), "%s", space_buf);
if ( ImGui::BeginCombo( label, text_buf, ImGuiComboFlags_None) ) { if ( ImGui::BeginCombo( label, text_buf, ImGuiComboFlags_None) ) {
for (int p = 0; p < (int) items.size(); ++p){
for (int p = 0; p < (int) items.size(); ++p){ ImGui::PushID((void*)(intptr_t)p);
ImGui::PushID((void*)(intptr_t)p); if (ImGuiToolkit::SelectableIcon( "",
if (ImGuiToolkit::SelectableIcon( std::get<2>( items.at(p) ).c_str(), std::get<0>( items.at(p) ),
std::get<0>( items.at(p) ), std::get<1>( items.at(p) ),
std::get<1>( items.at(p) ), p == *current_item) ) {
p == *current_item) ) { *current_item = p;
*current_item = p; ret = true;
ret = true; }
if (ImGui::IsItemHovered())
ImGuiToolkit::ToolTip(std::get<2>( items.at(p) ).c_str());
ImGui::PopID();
} }
ImGui::PopID(); ImGui::EndCombo();
}
}
else {
ImFormatString(text_buf, IM_ARRAYSIZE(text_buf), "%s %s", space_buf, std::get<2>( items.at(*current_item) ).c_str());
if ( ImGui::BeginCombo( label, text_buf, ImGuiComboFlags_None) ) {
for (int p = 0; p < (int) items.size(); ++p){
ImGui::PushID((void*)(intptr_t)p);
if (ImGuiToolkit::SelectableIcon( std::get<2>( items.at(p) ).c_str(),
std::get<0>( items.at(p) ),
std::get<1>( items.at(p) ),
p == *current_item) ) {
*current_item = p;
ret = true;
}
ImGui::PopID();
}
ImGui::EndCombo();
} }
ImGui::EndCombo();
} }
// overlay of icon on top of first item // overlay of icon on top of first item

View File

@@ -28,7 +28,7 @@ namespace ImGuiToolkit
bool ButtonIconMultistate (std::vector<std::pair<int, int> > icons, int* state, std::vector<std::string> tooltips); bool ButtonIconMultistate (std::vector<std::pair<int, int> > icons, int* state, std::vector<std::string> tooltips);
bool MenuItemIcon (int i, int j, const char* label, bool selected = false, bool enabled = true); bool MenuItemIcon (int i, int j, const char* label, bool selected = false, bool enabled = true);
bool SelectableIcon(const char* label, int i, int j, bool selected = false); bool SelectableIcon(const char* label, int i, int j, bool selected = false);
bool ComboIcon (const char* label, int* current_item, std::vector<std::tuple<int, int, std::string> > items); bool ComboIcon (const char* label, int* current_item, std::vector<std::tuple<int, int, std::string> > items, bool tooltiptext = false);
// buttons // buttons
bool ButtonToggle (const char* label, bool* toggle, const char *tooltip = nullptr); bool ButtonToggle (const char* label, bool* toggle, const char *tooltip = nullptr);