[colobot] 29/100: Add coordinates under cursor overlay and copy function (#868)

Didier Raboud odyx at moszumanska.debian.org
Thu Jun 1 18:10:16 UTC 2017


This is an automated email from the git hooks/post-receive script.

odyx pushed a commit to branch debian/master
in repository colobot.

commit 8d52e27c2b827eb43351b6b2339829fa0824b1dd
Author: krzys-h <krzys_h at interia.pl>
Date:   Tue Dec 27 14:58:41 2016 +0100

    Add coordinates under cursor overlay and copy function (#868)
---
 src/common/event.h    |  2 +-
 src/ui/debug_menu.cpp | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 src/ui/debug_menu.h   | 31 ++++++++++++++++++++++++++
 3 files changed, 92 insertions(+), 2 deletions(-)

diff --git a/src/common/event.h b/src/common/event.h
index 315a4b5..c67b7c3 100644
--- a/src/common/event.h
+++ b/src/common/event.h
@@ -172,7 +172,7 @@ enum EventType
     EVENT_LABEL16           = 106,
     EVENT_LABEL17           = 107,
     EVENT_LABEL18           = 108,
-    EVENT_LABEL19           = 109,
+    EVENT_LABEL19           = 109, // cursor position overlay
 
     EVENT_LIST0             = 110,
     EVENT_LIST1             = 111,
diff --git a/src/ui/debug_menu.cpp b/src/ui/debug_menu.cpp
index 10aa939..1510e2b 100644
--- a/src/ui/debug_menu.cpp
+++ b/src/ui/debug_menu.cpp
@@ -20,6 +20,9 @@
 #include "ui/debug_menu.h"
 
 #include "common/event.h"
+#include "common/stringutils.h"
+
+#include "app/app.h"
 
 #include "graphics/engine/lightning.h"
 #include "graphics/engine/terrain.h"
@@ -34,8 +37,11 @@
 #include "ui/controls/button.h"
 #include "ui/controls/check.h"
 #include "ui/controls/interface.h"
+#include "ui/controls/label.h"
 #include "ui/controls/window.h"
 
+#include <SDL_clipboard.h>
+
 namespace Ui
 {
 
@@ -55,10 +61,17 @@ CDebugMenu::~CDebugMenu()
 
 void CDebugMenu::ToggleInterface()
 {
-    if (m_interface->SearchControl(EVENT_WINDOW7) == nullptr)
+    if (!IsActive())
+    {
         CreateInterface();
+        CLabel* pl = m_interface->CreateLabel(Math::Point(0.0f, 0.9f), Math::Point(1.0f, 0.1f), -1, EVENT_LABEL19, "??");
+        pl->SetFontType(Gfx::FONT_COURIER);
+    }
     else
+    {
+        m_interface->DeleteControl(EVENT_LABEL19);
         DestroyInterface();
+    }
 }
 
 const Math::Point dim = Math::Point(33.0f/640.0f, 33.0f/480.0f);
@@ -359,6 +372,18 @@ bool CDebugMenu::EventProcess(const Event &event)
             }
             break;
 
+        case EVENT_FRAME:
+            HandleFrameUpdate(event);
+            break;
+
+        case EVENT_KEY_DOWN:
+            if (event.GetData<KeyEventData>()->key == KEY(c) && (event.kmodState & KMOD_CTRL) != 0)
+            {
+                if (IsActive())
+                {
+                    return !HandleCopy(event.mousePos);
+                }
+            }
 
         default:
             break;
@@ -427,4 +452,38 @@ bool CDebugMenu::HandleTeleport(Math::Point mousePos)
     return true;
 }
 
+void CDebugMenu::HandleFrameUpdate(const Event &event)
+{
+    std::string str = "-";
+    Math::Vector pos;
+    int obj;
+    if ((obj = m_engine->DetectObject(event.mousePos, pos, true)) != -1)
+        str = StrUtils::Format("pos=% 3.2f; % 3.2f    height=% 3.2f    objId=% 4d", pos.x, pos.z, pos.y, obj);
+
+    CLabel* pl = static_cast<CLabel*>(m_interface->SearchControl(EVENT_LABEL19));
+    if (pl == nullptr) return;
+    pl->SetName(str.c_str());
+}
+
+bool CDebugMenu::HandleCopy(Math::Point mousePos)
+{
+    Math::Vector pos;
+    if (m_engine->DetectObject(mousePos, pos, true) == -1)
+    {
+        m_sound->Play(SOUND_CLICK, 1.0f, 0.5f);
+        return false;
+    }
+
+    std::string str = StrUtils::Format("pos=%.2f;%.2f", pos.x, pos.z);
+
+    GetLogger()->Debug("%s\n", str.c_str());
+    SDL_SetClipboardText(str.c_str());
+    return true;
+}
+
+bool CDebugMenu::IsActive()
+{
+    return m_interface->SearchControl(EVENT_WINDOW7) != nullptr;
+}
+
 }
diff --git a/src/ui/debug_menu.h b/src/ui/debug_menu.h
index a45623a..67e183f 100644
--- a/src/ui/debug_menu.h
+++ b/src/ui/debug_menu.h
@@ -37,24 +37,55 @@ namespace Ui
 {
 class CInterface;
 
+/**
+ * \class CDebugMenu
+ * \brief Handles debug menu (F11)
+ *
+ * There should always be only one instance of this class for each associated CRobotMain class.
+ */
 class CDebugMenu
 {
 public:
+    //! Creates the CDebugMenu instance
     CDebugMenu(CRobotMain* main, Gfx::CEngine* engine, CObjectManager* objMan, CSoundInterface* sound);
+    //! Destroys the CDebugMenu instance
+    //! \note Does not clean up the interface, should be called only when CRobotMain is destroyed
     virtual ~CDebugMenu();
 
+    //! Toggle the debug interface
     void ToggleInterface();
+    //! Check if the debug interface is open
+    bool IsActive();
+
+    //! Event processing
     bool EventProcess(const Event& event);
 
 protected:
+    //! Create the main page of debug interface
     void CreateInterface();
+    //! Create the spawn object interface
     void CreateSpawnInterface();
+    //! Update controls in the debug interface
     void UpdateInterface();
+    //! Destroy the debug interface window
     void DestroyInterface();
 
+    //! Handle frame update
+    //! This is used to update the cursor coordinates overlay
+    void HandleFrameUpdate(const Event &event);
+
+    //! Handle spawning a new object at mouse position
+    //! \return true on success, false on error
     bool HandleSpawnObject(ObjectType type, Math::Point mousePos);
+    //! Handle lightning at position
+    //! \return true on success, false on error
     bool HandleLightning(Math::Point mousePos);
+    //! Handle teleport to position
+    //! \return true on success, false on error
     bool HandleTeleport(Math::Point mousePos);
+    //! Handle ctrl+c (copy coordinates under cursor to clipboard)
+    //! \return true on success, false on error
+    bool HandleCopy(Math::Point mousePos);
 
 protected:
     CRobotMain* m_main;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git



More information about the Pkg-games-commits mailing list