diff --git a/src/DisplaysView.cpp b/src/DisplaysView.cpp index 7b41655..02c9b6b 100644 --- a/src/DisplaysView.cpp +++ b/src/DisplaysView.cpp @@ -120,7 +120,6 @@ DisplaysView::DisplaysView() : View(DISPLAYS) show_window_menu_ = false; current_window_ = -1; current_window_status_ = new Group; - current_window_whitebalance = glm::vec4(1.f, 1.f, 1.f, 0.5f); draw_pending_ = false; // display actions : 0 = move output, 1 paint, 2 erase @@ -380,6 +379,7 @@ void DisplaysView::draw() if (ImGuiToolkit::IconButton(18, 4, "More windows")) { ++Settings::application.num_output_windows; current_window_ = Settings::application.num_output_windows-1; + Settings::application.windows[1+current_window_].whitebalance = Rendering::manager().outputWindow(current_window_).whiteBalance(); } } else @@ -420,13 +420,13 @@ void DisplaysView::draw() ImGuiWindow* window = ImGui::GetCurrentWindow(); window->DC.CursorPos.y += g.Style.FramePadding.y; - if (ImGui::ColorButton("White balance", ImVec4(current_window_whitebalance.x, - current_window_whitebalance.y, - current_window_whitebalance.z, 1.f), + if (ImGui::ColorButton("White balance", ImVec4(Settings::application.windows[1+current_window_].whitebalance.x, + Settings::application.windows[1+current_window_].whitebalance.y, + Settings::application.windows[1+current_window_].whitebalance.z, 1.f), ImGuiColorEditFlags_NoAlpha)) { - whitebalancedialog.setRGB( std::make_tuple(current_window_whitebalance.x, - current_window_whitebalance.y, - current_window_whitebalance.z) ); + whitebalancedialog.setRGB( std::make_tuple(Settings::application.windows[1+current_window_].whitebalance.x, + Settings::application.windows[1+current_window_].whitebalance.y, + Settings::application.windows[1+current_window_].whitebalance.z) ); whitebalancedialog.open(); } ImGui::PopFont(); @@ -434,12 +434,12 @@ void DisplaysView::draw() // get picked color if dialog finished if (whitebalancedialog.closed()){ std::tuple c = whitebalancedialog.RGB(); - current_window_whitebalance.x = std::get<0>(c); - current_window_whitebalance.y = std::get<1>(c); - current_window_whitebalance.z = std::get<2>(c); + Settings::application.windows[1+current_window_].whitebalance.x = std::get<0>(c); + Settings::application.windows[1+current_window_].whitebalance.y = std::get<1>(c); + Settings::application.windows[1+current_window_].whitebalance.z = std::get<2>(c); // set White Balance Color matrix to shader - Rendering::manager().outputWindow(current_window_).setWhiteBalance( current_window_whitebalance ); + Rendering::manager().outputWindow(current_window_).setWhiteBalance( Settings::application.windows[1+current_window_].whitebalance ); } // White ballance temperature @@ -451,13 +451,13 @@ void DisplaysView::draw() { ImGuiToolkit::PushFont(ImGuiToolkit::FONT_DEFAULT); ImGuiToolkit::Indication("9000 K", " " ICON_FA_THERMOMETER_FULL); - if ( ImGui::VSliderFloat("##Temperature", ImVec2(30,260), ¤t_window_whitebalance.w, 0.0, 1.0, "") ){ + if ( ImGui::VSliderFloat("##Temperature", ImVec2(30,260), &Settings::application.windows[1+current_window_].whitebalance.w, 0.0, 1.0, "") ){ - Rendering::manager().outputWindow(current_window_).setWhiteBalance( current_window_whitebalance ); + Rendering::manager().outputWindow(current_window_).setWhiteBalance( Settings::application.windows[1+current_window_].whitebalance ); } if (ImGui::IsItemHovered() || ImGui::IsItemActive() ) { ImGui::BeginTooltip(); - ImGui::Text("%d K", 4000 + (int) ceil(current_window_whitebalance.w * 5000.f)); + ImGui::Text("%d K", 4000 + (int) ceil(Settings::application.windows[1+current_window_].whitebalance.w * 5000.f)); ImGui::EndTooltip(); } ImGuiToolkit::Indication("4000 K", " " ICON_FA_THERMOMETER_EMPTY); @@ -578,7 +578,6 @@ std::pair DisplaysView::pick(glm::vec2 P) // test all windows current_window_ = -1; - current_window_whitebalance = glm::vec4(1.f, 1.f, 1.f, 0.5f); for (int i = 0; i < Settings::application.num_output_windows; ++i) { @@ -597,7 +596,6 @@ std::pair DisplaysView::pick(glm::vec2 P) (pick.first == windows_[i].handles_) || (pick.first == windows_[i].menu_) ) { current_window_ = i; - current_window_whitebalance = Rendering::manager().outputWindow(current_window_).whiteBalance(); windows_[i].overlays_->setActive(1); } else diff --git a/src/DisplaysView.h b/src/DisplaysView.h index a793fdc..645902d 100644 --- a/src/DisplaysView.h +++ b/src/DisplaysView.h @@ -80,23 +80,8 @@ private: std::vector windows_; int current_window_; Group *current_window_status_; - glm::vec4 current_window_whitebalance; bool show_window_menu_; -// Group *window_; -// Group *window_status_; -// Surface *window_surface_; -// Surface *window_render_; -// Switch *window_overlays_; -// Switch *window_mode_; -// Handles *window_handles_; -// Handles *window_menu_; -// Handles *window_icon_; -// Surface *window_title_; -// Symbol *window_fullscreen_; -//// Surface *preview_surface_; -// std::string window_monitor_; - // bool window_selected_; int display_action_; diff --git a/src/RenderingManager.cpp b/src/RenderingManager.cpp index 18f8646..ca9a982 100644 --- a/src/RenderingManager.cpp +++ b/src/RenderingManager.cpp @@ -1109,11 +1109,12 @@ glm::vec4 RenderingWindow::whiteBalance() const { glm::vec4 ret(1.f, 1.f, 1.f, 0.5f); - ret.x = shader_->uniforms_["Red"]; - ret.y = shader_->uniforms_["Green"]; - ret.z = shader_->uniforms_["Blue"]; - ret.w = shader_->uniforms_["Temperature"]; - + if (shader_) { + ret.x = shader_->uniforms_["Red"]; + ret.y = shader_->uniforms_["Green"]; + ret.z = shader_->uniforms_["Blue"]; + ret.w = shader_->uniforms_["Temperature"]; + } return ret; } diff --git a/src/Settings.cpp b/src/Settings.cpp index 3c245be..7341860 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -110,7 +110,8 @@ void Settings::Save(uint64_t runtime) window->SetAttribute("f", w.fullscreen); window->SetAttribute("s", w.scaled); window->SetAttribute("d", w.decorated); - window->SetAttribute("m", w.monitor.c_str()); + window->SetAttribute("m", w.monitor.c_str()); + window->InsertEndChild( XMLElementFromGLM(&xmlDoc, w.whitebalance) ); windowsNode->InsertEndChild(window); } @@ -517,6 +518,9 @@ void Settings::Load() w.name = APP_NAME " output " + std::to_string(i); else w.name = APP_TITLE; + + tinyxml2::XMLElementToGLM( windowNode->FirstChildElement("vec4"), w.whitebalance); + application.windows[i] = w; } } diff --git a/src/Settings.h b/src/Settings.h index 0342d8c..218fcaa 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -64,9 +64,12 @@ struct WindowConfig bool decorated; std::string monitor; bool show_pattern; + glm::vec4 whitebalance; WindowConfig() : name(APP_TITLE), x(15), y(15), w(1280), h(720), - fullscreen(false), scaled(false), decorated(true), monitor(""), show_pattern(false) { } + fullscreen(false), scaled(false), decorated(true), + monitor(""), show_pattern(false), whitebalance(glm::vec4(1.f, 1.f, 1.f, 0.5f)) + { } };