From 2d2990ff91eb3e5539f2f05c6abf36875482d661 Mon Sep 17 00:00:00 2001 From: melex750 Date: Mon, 26 Jun 2017 14:11:47 -0400 Subject: [PATCH 1/2] Fix moving and resizing editor/debugger window * Stop hard drive thrashing when moving/resizing * Also fixed #691. --- src/common/settings.cpp | 15 +++++++++++++++ src/common/settings.h | 4 ++++ src/ui/studio.cpp | 39 +++++++++++++++++++++++++++++++-------- src/ui/studio.h | 2 ++ 4 files changed, 52 insertions(+), 8 deletions(-) diff --git a/src/common/settings.cpp b/src/common/settings.cpp index 8ebd55cc..cf7dcc75 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp @@ -121,6 +121,8 @@ void CSettings::SaveSettings() GetConfigFile().SetFloatProperty("Edit", "WindowPosY", m_windowPos.y); GetConfigFile().SetFloatProperty("Edit", "WindowDimX", m_windowDim.x); GetConfigFile().SetFloatProperty("Edit", "WindowDimY", m_windowDim.y); + GetConfigFile().SetBoolProperty ("Edit", "WindowMaximized", m_windowMax); + GetConfigFile().SetBoolProperty("Edit", "IOPublic", m_IOPublic); GetConfigFile().SetFloatProperty("Edit", "IOPosX", m_IOPos.x); GetConfigFile().SetFloatProperty("Edit", "IOPosY", m_IOPos.y); @@ -281,6 +283,7 @@ void CSettings::LoadSettings() GetConfigFile().GetFloatProperty("Edit", "WindowPosY", m_windowPos.y); GetConfigFile().GetFloatProperty("Edit", "WindowDimX", m_windowDim.x); GetConfigFile().GetFloatProperty("Edit", "WindowDimY", m_windowDim.y); + GetConfigFile().GetBoolProperty ("Edit", "WindowMaximized", m_windowMax); GetConfigFile().GetBoolProperty ("Edit", "IOPublic", m_IOPublic); GetConfigFile().GetFloatProperty("Edit", "IOPosX", m_IOPos.x); @@ -393,6 +396,18 @@ Math::Point CSettings::GetWindowDim() return m_windowDim; } +void CSettings::SetWindowMax(bool max) +{ + m_windowMax = max; + GetConfigFile().SetBoolProperty("Edit", "WindowMaximized", m_windowMax); + GetConfigFile().Save(); +} + +bool CSettings::GetWindowMax() +{ + return m_windowMax; +} + void CSettings::SetIOPublic(bool mode) { m_IOPublic = mode; diff --git a/src/common/settings.h b/src/common/settings.h index 4e9b7620..92916840 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -70,6 +70,9 @@ public: void SetWindowDim(Math::Point dim); Math::Point GetWindowDim(); + + void SetWindowMax(bool max); + bool GetWindowMax(); //@} //! Managing windows open/save @@ -98,6 +101,7 @@ protected: float m_fontSize; Math::Point m_windowPos; Math::Point m_windowDim; + bool m_windowMax; bool m_IOPublic; Math::Point m_IOPos; diff --git a/src/ui/studio.cpp b/src/ui/studio.cpp index e3545cbb..d98dc25f 100644 --- a/src/ui/studio.cpp +++ b/src/ui/studio.cpp @@ -249,16 +249,16 @@ bool CStudio::EventProcess(const Event &event) { m_editActualPos = m_editFinalPos = pw->GetPos(); m_editActualDim = m_editFinalDim = pw->GetDim(); - m_settings->SetWindowPos(m_editActualPos); - m_settings->SetWindowDim(m_editActualDim); + m_windowPos = m_editActualPos; + m_windowDim = m_editActualDim; AdjustEditScript(); } if ( event.type == pw->GetEventTypeReduce() ) { if ( m_bEditMinimized ) { - m_editFinalPos = m_settings->GetWindowPos(); - m_editFinalDim = m_settings->GetWindowDim(); + m_editFinalPos = m_windowPos; + m_editFinalDim = m_windowDim; m_bEditMinimized = false; m_bEditMaximized = false; } @@ -283,8 +283,8 @@ bool CStudio::EventProcess(const Event &event) { if ( m_bEditMaximized ) { - m_editFinalPos = m_settings->GetWindowPos(); - m_editFinalDim = m_settings->GetWindowDim(); + m_editFinalPos = m_windowPos; + m_editFinalDim = m_windowDim; m_bEditMinimized = false; m_bEditMaximized = false; } @@ -579,8 +579,25 @@ void CStudio::StartEditScript(CScript *script, std::string name, Program* progra pw = static_cast(m_interface->SearchControl(EVENT_WINDOW6)); if (pw != nullptr) pw->ClearState(STATE_VISIBLE | STATE_ENABLE); - pos = m_editFinalPos = m_editActualPos = m_settings->GetWindowPos(); - dim = m_editFinalDim = m_editActualDim = m_settings->GetWindowDim(); + m_windowPos = m_settings->GetWindowPos(); + m_windowDim = m_settings->GetWindowDim(); + m_bEditMaximized = m_settings->GetWindowMax(); + + if ( m_bEditMaximized ) + { + m_editFinalPos.x = 0.00f; + m_editFinalPos.y = 0.00f; + m_editFinalDim.x = 1.00f; + m_editFinalDim.y = 1.00f; + } + else + { + m_editFinalPos = m_windowPos; + m_editFinalDim = m_windowDim; + } + pos = m_editActualPos = m_editFinalPos; + dim = m_editActualDim = m_editFinalDim; + pw = m_interface->CreateWindows(pos, dim, 8, EVENT_WINDOW3); if (pw == nullptr) return; @@ -597,6 +614,8 @@ void CStudio::StartEditScript(CScript *script, std::string name, Program* progra pw->SetMinDim(Math::Point(0.49f, 0.50f)); pw->SetMaximized(m_bEditMaximized); pw->SetMinimized(m_bEditMinimized); + + // stop camera control if maximized m_main->SetEditFull(m_bEditMaximized); edit = pw->CreateEdit(pos, dim, 0, EVENT_STUDIO_EDIT); @@ -910,6 +929,10 @@ bool CStudio::StopEditScript(bool closeWithErrors) m_runningPause = nullptr; m_main->SetEditLock(false, true); m_camera->SetType(m_editCamera); + + m_settings->SetWindowPos(m_windowPos); + m_settings->SetWindowDim(m_windowDim); + m_settings->SetWindowMax(m_bEditMaximized); return true; } diff --git a/src/ui/studio.h b/src/ui/studio.h index f3369754..7ce580c2 100644 --- a/src/ui/studio.h +++ b/src/ui/studio.h @@ -108,6 +108,8 @@ protected: Math::Point m_editActualDim; Math::Point m_editFinalPos; Math::Point m_editFinalDim; + Math::Point m_windowPos; + Math::Point m_windowDim; float m_time; float m_fixInfoTextTime; From 86870167a6aeb639e0e32d298bac7e4284752a49 Mon Sep 17 00:00:00 2001 From: melex750 Date: Mon, 26 Jun 2017 14:19:53 -0400 Subject: [PATCH 2/2] Fix moving and resizing open/save dialog * Fixed buffer overflow when resizing * Stop hard drive thrashing when moving/resizing --- src/ui/studio.cpp | 27 ++++++++++++--------------- src/ui/studio.h | 2 ++ 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/ui/studio.cpp b/src/ui/studio.cpp index d98dc25f..b06b6f5a 100644 --- a/src/ui/studio.cpp +++ b/src/ui/studio.cpp @@ -579,6 +579,8 @@ void CStudio::StartEditScript(CScript *script, std::string name, Program* progra pw = static_cast(m_interface->SearchControl(EVENT_WINDOW6)); if (pw != nullptr) pw->ClearState(STATE_VISIBLE | STATE_ENABLE); + m_dialogPos = m_settings->GetIOPos(); + m_dialogDim = m_settings->GetIODim(); m_windowPos = m_settings->GetWindowPos(); m_windowDim = m_settings->GetWindowDim(); m_bEditMaximized = m_settings->GetWindowMax(); @@ -930,6 +932,8 @@ bool CStudio::StopEditScript(bool closeWithErrors) m_main->SetEditLock(false, true); m_camera->SetType(m_editCamera); + m_settings->SetIOPos(m_dialogPos); + m_settings->SetIODim(m_dialogDim); m_settings->SetWindowPos(m_windowPos); m_settings->SetWindowDim(m_windowDim); m_settings->SetWindowMax(m_bEditMaximized); @@ -1272,8 +1276,8 @@ void CStudio::AdjustDialog() pw = static_cast< CWindow* >(m_interface->SearchControl(EVENT_WINDOW9)); if ( pw == nullptr ) return; - wpos = pw->GetPos(); - wdim = pw->GetDim(); + m_dialogPos = wpos = pw->GetPos(); + m_dialogDim = wdim = pw->GetDim(); pw->SetPos(wpos); // to move the buttons on the titlebar if ( m_dialog == SD_OPEN || @@ -1323,10 +1327,9 @@ void CStudio::AdjustDialog() pe->SetPos(ppos); pe->SetDim(ddim); - nch = static_cast< int >((ddim.x*640.0f-22.0f)/8.0f); - name = pe->GetText(100); + nch = static_cast< int >((ddim.x*640.0f-22.0f)/5.75f); + name = pe->GetText(nch); // truncates the text according to max pe->SetMaxChar(nch); - name[nch] = 0; // truncates the text according to max pe->SetText(name); } @@ -1384,19 +1387,10 @@ void CStudio::AdjustDialog() bool CStudio::EventDialog(const Event &event) { - CWindow* pw; - Math::Point wpos, wdim; - - pw = static_cast< CWindow* >(m_interface->SearchControl(EVENT_WINDOW9)); - if ( pw == nullptr ) return false; - if ( event.type == EVENT_WINDOW9 ) // window is moved? { - wpos = pw->GetPos(); - wdim = pw->GetDim(); - m_settings->SetIOPos(wpos); - m_settings->SetIODim(wdim); AdjustDialog(); + return true; } if ( m_dialog == SD_OPEN || @@ -1441,6 +1435,9 @@ bool CStudio::EventDialog(const Event &event) return true; } + CWindow* pw = static_cast< CWindow* >(m_interface->SearchControl(EVENT_WINDOW9)); + if ( pw == nullptr ) return false; + if ( event.type == EVENT_DIALOG_CANCEL || (event.type == EVENT_KEY_DOWN && event.GetData()->key == KEY(ESCAPE)) || event.type == pw->GetEventTypeClose() ) diff --git a/src/ui/studio.h b/src/ui/studio.h index 7ce580c2..9efddc0f 100644 --- a/src/ui/studio.h +++ b/src/ui/studio.h @@ -110,6 +110,8 @@ protected: Math::Point m_editFinalDim; Math::Point m_windowPos; Math::Point m_windowDim; + Math::Point m_dialogPos; + Math::Point m_dialogDim; float m_time; float m_fixInfoTextTime;