mirror of
https://github.com/smartcmd/MinecraftConsoles.git
synced 2026-03-25 14:21:55 +02:00
Add clipboard paste support to UIControl_TextInput and UIScene_Keyboard (#1298)
Previously paste only worked in the chat screen. Wire Screen::getClipboard() into the two remaining text input paths so Ctrl+V works for sign editing, seed entry, server IP/port, and world name fields.
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "UI.h"
|
#include "UI.h"
|
||||||
#include "UIControl_TextInput.h"
|
#include "UIControl_TextInput.h"
|
||||||
|
#include "..\..\Screen.h"
|
||||||
|
|
||||||
UIControl_TextInput::UIControl_TextInput()
|
UIControl_TextInput::UIControl_TextInput()
|
||||||
{
|
{
|
||||||
@@ -211,6 +212,31 @@ UIControl_TextInput::EDirectEditResult UIControl_TextInput::tickDirectEdit()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Paste from clipboard
|
||||||
|
if (g_KBMInput.IsKeyPressed('V') && g_KBMInput.IsKeyDown(VK_CONTROL))
|
||||||
|
{
|
||||||
|
wstring pasted = Screen::getClipboard();
|
||||||
|
wstring sanitized;
|
||||||
|
sanitized.reserve(pasted.length());
|
||||||
|
|
||||||
|
for (wchar_t pc : pasted)
|
||||||
|
{
|
||||||
|
if (pc >= 0x20) // Keep printable characters
|
||||||
|
{
|
||||||
|
if (m_iCharLimit > 0 && (m_editBuffer.length() + sanitized.length()) >= (size_t)m_iCharLimit)
|
||||||
|
break;
|
||||||
|
sanitized += pc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sanitized.empty())
|
||||||
|
{
|
||||||
|
m_editBuffer.insert(m_iCursorPos, sanitized);
|
||||||
|
m_iCursorPos += (int)sanitized.length();
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Arrow keys, Home, End, Delete for cursor movement
|
// Arrow keys, Home, End, Delete for cursor movement
|
||||||
if (g_KBMInput.IsKeyPressed(VK_LEFT) && m_iCursorPos > 0)
|
if (g_KBMInput.IsKeyPressed(VK_LEFT) && m_iCursorPos > 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "UI.h"
|
#include "UI.h"
|
||||||
#include "UIScene_Keyboard.h"
|
#include "UIScene_Keyboard.h"
|
||||||
|
#include "..\..\Screen.h"
|
||||||
|
|
||||||
#ifdef _WINDOWS64
|
#ifdef _WINDOWS64
|
||||||
// Global buffer that stores the text entered in the native keyboard scene.
|
// Global buffer that stores the text entered in the native keyboard scene.
|
||||||
@@ -224,6 +225,38 @@ void UIScene_Keyboard::tick()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Paste from clipboard
|
||||||
|
if (g_KBMInput.IsKeyPressed('V') && g_KBMInput.IsKeyDown(VK_CONTROL))
|
||||||
|
{
|
||||||
|
wstring pasted = Screen::getClipboard();
|
||||||
|
wstring sanitized;
|
||||||
|
sanitized.reserve(pasted.length());
|
||||||
|
|
||||||
|
for (wchar_t pc : pasted)
|
||||||
|
{
|
||||||
|
if (pc >= 0x20) // Keep printable characters
|
||||||
|
{
|
||||||
|
if (static_cast<int>(m_win64TextBuffer.length() + sanitized.length()) >= m_win64MaxChars)
|
||||||
|
break;
|
||||||
|
sanitized += pc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sanitized.empty())
|
||||||
|
{
|
||||||
|
if (m_bPCMode)
|
||||||
|
{
|
||||||
|
m_win64TextBuffer.insert(m_iCursorPos, sanitized);
|
||||||
|
m_iCursorPos += (int)sanitized.length();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_win64TextBuffer += sanitized;
|
||||||
|
}
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (m_bPCMode)
|
if (m_bPCMode)
|
||||||
{
|
{
|
||||||
// Arrow keys, Home, End, Delete for cursor movement
|
// Arrow keys, Home, End, Delete for cursor movement
|
||||||
|
|||||||
Reference in New Issue
Block a user