mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-13 11:19:58 +01:00
Bugfix screenshot in userinterface. Minor cosmetics.
This commit is contained in:
@@ -181,8 +181,8 @@ void Handles::draw(glm::mat4 modelview, glm::mat4 projection)
|
|||||||
}
|
}
|
||||||
else if ( type_ == ROTATE ){
|
else if ( type_ == ROTATE ){
|
||||||
// only once in upper top right corner
|
// only once in upper top right corner
|
||||||
glm::vec4 pos = modelview * glm::vec4(1.08f, 1.08f, 0.f, 1.f);
|
glm::vec4 pos = modelview * glm::vec4(1.0f, 1.0f, 0.f, 1.f);
|
||||||
ctm = GlmToolkit::transform(glm::vec3(pos), glm::vec3(0.f), glm::vec3(1.f));
|
ctm = GlmToolkit::transform(glm::vec3(pos) + glm::vec3(0.12f, 0.12f, 0.f), glm::vec3(0.f), glm::vec3(1.f));
|
||||||
handle_->draw( ctm, projection );
|
handle_->draw( ctm, projection );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -245,10 +245,10 @@ bool hasNode::operator()(const Source* elem) const
|
|||||||
elem->group(View::GEOMETRY)->accept(sv);
|
elem->group(View::GEOMETRY)->accept(sv);
|
||||||
if (sv.found())
|
if (sv.found())
|
||||||
return true;
|
return true;
|
||||||
elem->group(View::RENDERING)->accept(sv);
|
|
||||||
if (sv.found())
|
|
||||||
return sv.found();
|
|
||||||
elem->group(View::LAYER)->accept(sv);
|
elem->group(View::LAYER)->accept(sv);
|
||||||
|
if (sv.found())
|
||||||
|
return true;
|
||||||
|
elem->group(View::RENDERING)->accept(sv);
|
||||||
return sv.found();
|
return sv.found();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -135,6 +135,7 @@ UserInterface::UserInterface()
|
|||||||
show_gst_about = false;
|
show_gst_about = false;
|
||||||
show_opengl_about = false;
|
show_opengl_about = false;
|
||||||
currentTextEdit = "";
|
currentTextEdit = "";
|
||||||
|
screenshot_step = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UserInterface::Init()
|
bool UserInterface::Init()
|
||||||
@@ -261,7 +262,7 @@ void UserInterface::handleKeyboard()
|
|||||||
else if (ImGui::IsKeyPressed( GLFW_KEY_F11 ))
|
else if (ImGui::IsKeyPressed( GLFW_KEY_F11 ))
|
||||||
Rendering::manager().ToggleFullscreen();
|
Rendering::manager().ToggleFullscreen();
|
||||||
else if (ImGui::IsKeyPressed( GLFW_KEY_F12 ))
|
else if (ImGui::IsKeyPressed( GLFW_KEY_F12 ))
|
||||||
toolbox.StartScreenshot();
|
StartScreenshot();
|
||||||
// normal keys // make sure no entry / window box is active
|
// normal keys // make sure no entry / window box is active
|
||||||
else if ( !ImGui::IsAnyWindowFocused() ){
|
else if ( !ImGui::IsAnyWindowFocused() ){
|
||||||
// Backspace to delete source
|
// Backspace to delete source
|
||||||
@@ -295,6 +296,18 @@ void UserInterface::handleMouse()
|
|||||||
if ( !ImGui::IsAnyWindowHovered() && !ImGui::IsAnyWindowFocused() )
|
if ( !ImGui::IsAnyWindowHovered() && !ImGui::IsAnyWindowFocused() )
|
||||||
{
|
{
|
||||||
ImGui::FocusWindow(0);
|
ImGui::FocusWindow(0);
|
||||||
|
Source *current = Mixer::manager().currentSource();
|
||||||
|
|
||||||
|
// if (current)
|
||||||
|
// {
|
||||||
|
// glm::vec3 point = Rendering::manager().unProject(mousepos);
|
||||||
|
// PickingVisitor over(point);
|
||||||
|
// Mixer::manager().currentView()->scene.accept(over);
|
||||||
|
// // drag current source
|
||||||
|
// int c = Mixer::manager().currentView()->over(mousepos, current, over.picked().back());
|
||||||
|
// ImGui::SetMouseCursor(c);
|
||||||
|
// }
|
||||||
|
|
||||||
//
|
//
|
||||||
// Mouse wheel over background
|
// Mouse wheel over background
|
||||||
//
|
//
|
||||||
@@ -302,6 +315,8 @@ void UserInterface::handleMouse()
|
|||||||
// scroll => zoom current view
|
// scroll => zoom current view
|
||||||
Mixer::manager().currentView()->zoom( io.MouseWheel );
|
Mixer::manager().currentView()->zoom( io.MouseWheel );
|
||||||
}
|
}
|
||||||
|
// TODO : zoom with center on source if over current
|
||||||
|
|
||||||
//
|
//
|
||||||
// RIGHT Mouse button
|
// RIGHT Mouse button
|
||||||
//
|
//
|
||||||
@@ -331,7 +346,6 @@ void UserInterface::handleMouse()
|
|||||||
//
|
//
|
||||||
if ( ImGui::IsMouseDragging(ImGuiMouseButton_Left, 10.0f) )
|
if ( ImGui::IsMouseDragging(ImGuiMouseButton_Left, 10.0f) )
|
||||||
{
|
{
|
||||||
Source *current = Mixer::manager().currentSource();
|
|
||||||
if (current)
|
if (current)
|
||||||
{
|
{
|
||||||
// drag current source
|
// drag current source
|
||||||
@@ -363,7 +377,9 @@ void UserInterface::handleMouse()
|
|||||||
if (pv.picked().empty())
|
if (pv.picked().empty())
|
||||||
Mixer::manager().unsetCurrentSource();
|
Mixer::manager().unsetCurrentSource();
|
||||||
else {
|
else {
|
||||||
|
// top-most Node picked
|
||||||
pick = pv.picked().back();
|
pick = pv.picked().back();
|
||||||
|
// find source containing the cliced Node
|
||||||
Mixer::manager().setCurrentSource( pick.first );
|
Mixer::manager().setCurrentSource( pick.first );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -393,6 +409,7 @@ void UserInterface::NewFrame()
|
|||||||
// deal with keyboard and mouse events
|
// deal with keyboard and mouse events
|
||||||
handleKeyboard();
|
handleKeyboard();
|
||||||
handleMouse();
|
handleMouse();
|
||||||
|
handleScreenshot();
|
||||||
|
|
||||||
// handle FileDialog
|
// handle FileDialog
|
||||||
if (sessionFileDialogLoadFinished_) {
|
if (sessionFileDialogLoadFinished_) {
|
||||||
@@ -536,16 +553,51 @@ ToolBox::ToolBox()
|
|||||||
{
|
{
|
||||||
show_demo_window = false;
|
show_demo_window = false;
|
||||||
show_icons_window = false;
|
show_icons_window = false;
|
||||||
screenshot_step = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ToolBox::StartScreenshot()
|
void UserInterface::StartScreenshot()
|
||||||
{
|
{
|
||||||
screenshot_step = 1;
|
screenshot_step = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UserInterface::handleScreenshot()
|
||||||
|
{
|
||||||
|
// taking screenshot is in 3 steps
|
||||||
|
// 1) wait 1 frame that the menu / action showing button to take screenshot disapears
|
||||||
|
// 2) wait 1 frame that rendering manager takes the actual screenshot
|
||||||
|
// 3) if rendering manager current screenshot is ok, save it
|
||||||
|
if (screenshot_step > 0) {
|
||||||
|
|
||||||
|
switch(screenshot_step) {
|
||||||
|
case 1:
|
||||||
|
screenshot_step = 2;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
Rendering::manager().RequestScreenshot();
|
||||||
|
screenshot_step = 3;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
if ( Rendering::manager().CurrentScreenshot()->IsFull() ){
|
||||||
|
std::string filename = SystemToolkit::home_path() + SystemToolkit::date_time_string() + "_vmixcapture.png";
|
||||||
|
Rendering::manager().CurrentScreenshot()->SaveFile( filename.c_str() );
|
||||||
|
Rendering::manager().CurrentScreenshot()->Clear();
|
||||||
|
Log::Notify("Screenshot saved %s", filename.c_str() );
|
||||||
|
}
|
||||||
|
screenshot_step = 4;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
screenshot_step = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ToolBox::Render()
|
void ToolBox::Render()
|
||||||
{
|
{
|
||||||
// first run
|
// first run
|
||||||
@@ -564,7 +616,7 @@ void ToolBox::Render()
|
|||||||
if (ImGui::BeginMenu("Tools"))
|
if (ImGui::BeginMenu("Tools"))
|
||||||
{
|
{
|
||||||
if ( ImGui::MenuItem( ICON_FA_CAMERA_RETRO " Screenshot", NULL) )
|
if ( ImGui::MenuItem( ICON_FA_CAMERA_RETRO " Screenshot", NULL) )
|
||||||
StartScreenshot();
|
UserInterface::manager().StartScreenshot();
|
||||||
|
|
||||||
ImGui::MenuItem("Dev", NULL, false, false);
|
ImGui::MenuItem("Dev", NULL, false, false);
|
||||||
ImGui::MenuItem("Icons", NULL, &show_icons_window);
|
ImGui::MenuItem("Icons", NULL, &show_icons_window);
|
||||||
@@ -584,36 +636,7 @@ void ToolBox::Render()
|
|||||||
if (show_demo_window)
|
if (show_demo_window)
|
||||||
ImGui::ShowDemoWindow(&show_demo_window);
|
ImGui::ShowDemoWindow(&show_demo_window);
|
||||||
|
|
||||||
// taking screenshot is in 3 steps
|
|
||||||
// 1) wait 1 frame that the menu / action showing button to take screenshot disapears
|
|
||||||
// 2) wait 1 frame that rendering manager takes the actual screenshot
|
|
||||||
// 3) if rendering manager current screenshot is ok, save it
|
|
||||||
if (screenshot_step > 0) {
|
|
||||||
|
|
||||||
switch(screenshot_step) {
|
|
||||||
case 1:
|
|
||||||
screenshot_step = 2;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
Rendering::manager().RequestScreenshot();
|
|
||||||
screenshot_step = 3;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
{
|
|
||||||
if ( Rendering::manager().CurrentScreenshot()->IsFull() ){
|
|
||||||
std::string filename = SystemToolkit::date_time_string() + "_vmixcapture.png";
|
|
||||||
Rendering::manager().CurrentScreenshot()->SaveFile( filename.c_str() );
|
|
||||||
Rendering::manager().CurrentScreenshot()->Clear();
|
|
||||||
}
|
|
||||||
screenshot_step = 4;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
screenshot_step = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -67,12 +67,10 @@ class ToolBox
|
|||||||
{
|
{
|
||||||
bool show_demo_window;
|
bool show_demo_window;
|
||||||
bool show_icons_window;
|
bool show_icons_window;
|
||||||
unsigned int screenshot_step;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ToolBox();
|
ToolBox();
|
||||||
|
|
||||||
void StartScreenshot();
|
|
||||||
void Render();
|
void Render();
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -88,6 +86,7 @@ class UserInterface
|
|||||||
bool show_imgui_about;
|
bool show_imgui_about;
|
||||||
bool show_gst_about;
|
bool show_gst_about;
|
||||||
bool show_opengl_about;
|
bool show_opengl_about;
|
||||||
|
unsigned int screenshot_step;
|
||||||
|
|
||||||
|
|
||||||
// typedef enum {
|
// typedef enum {
|
||||||
@@ -125,6 +124,7 @@ public:
|
|||||||
// status querries
|
// status querries
|
||||||
inline bool keyboardModifier() { return keyboard_modifier_active; }
|
inline bool keyboardModifier() { return keyboard_modifier_active; }
|
||||||
|
|
||||||
|
void StartScreenshot();
|
||||||
|
|
||||||
// TODO implement the shader editor
|
// TODO implement the shader editor
|
||||||
std::string currentTextEdit;
|
std::string currentTextEdit;
|
||||||
@@ -138,6 +138,7 @@ protected:
|
|||||||
void RenderShaderEditor();
|
void RenderShaderEditor();
|
||||||
void handleKeyboard();
|
void handleKeyboard();
|
||||||
void handleMouse();
|
void handleMouse();
|
||||||
|
void handleScreenshot();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
5
View.cpp
5
View.cpp
@@ -359,6 +359,11 @@ View::Cursor GeometryView::grab (glm::vec2 from, glm::vec2 to, Source *s, std::p
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
View::Cursor GeometryView::over (glm::vec2, Source*, std::pair<Node *, glm::vec2>)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
LayerView::LayerView() : View(LAYER), aspect_ratio(1.f)
|
LayerView::LayerView() : View(LAYER), aspect_ratio(1.f)
|
||||||
{
|
{
|
||||||
// read default settings
|
// read default settings
|
||||||
|
|||||||
4
View.h
4
View.h
@@ -38,6 +38,9 @@ public:
|
|||||||
virtual Cursor grab (glm::vec2, glm::vec2, Source*, std::pair<Node *, glm::vec2>) {
|
virtual Cursor grab (glm::vec2, glm::vec2, Source*, std::pair<Node *, glm::vec2>) {
|
||||||
return Cursor_Arrow;
|
return Cursor_Arrow;
|
||||||
}
|
}
|
||||||
|
virtual Cursor over (glm::vec2, Source*, std::pair<Node *, glm::vec2>) {
|
||||||
|
return Cursor_Arrow;
|
||||||
|
}
|
||||||
|
|
||||||
virtual void restoreSettings();
|
virtual void restoreSettings();
|
||||||
virtual void saveSettings();
|
virtual void saveSettings();
|
||||||
@@ -88,6 +91,7 @@ public:
|
|||||||
void update (float dt) override;
|
void update (float dt) override;
|
||||||
void zoom (float factor) override;
|
void zoom (float factor) override;
|
||||||
Cursor grab (glm::vec2 from, glm::vec2 to, Source *s, std::pair<Node *, glm::vec2> pick) override;
|
Cursor grab (glm::vec2 from, glm::vec2 to, Source *s, std::pair<Node *, glm::vec2> pick) override;
|
||||||
|
Cursor over (glm::vec2, Source*, std::pair<Node *, glm::vec2>) override;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user