mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-19 22:48:18 +00:00
added paste to text fields
This commit is contained in:
parent
501cbea8c1
commit
1020896fac
|
@ -37,7 +37,7 @@ void CLineInput::Set(const char *pString)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CLineInput::CtrlStop(char c)
|
bool CLineInput::MoveWordStop(char c)
|
||||||
{
|
{
|
||||||
// jump to spaces and special ASCII characters
|
// jump to spaces and special ASCII characters
|
||||||
return ((32 <= c && c <= 47) || // !"#$%&'()*+,-./
|
return ((32 <= c && c <= 47) || // !"#$%&'()*+,-./
|
||||||
|
@ -55,7 +55,8 @@ bool CLineInput::Manipulate(IInput::CEvent Event, char *pStr, int StrMaxSize, in
|
||||||
if(CursorPos > Len)
|
if(CursorPos > Len)
|
||||||
CursorPos = Len;
|
CursorPos = Len;
|
||||||
|
|
||||||
if(Event.m_Flags&IInput::FLAG_TEXT)
|
if(Event.m_Flags&IInput::FLAG_TEXT &&
|
||||||
|
!(KEY_LCTRL <= Event.m_Key && Event.m_Key <= KEY_RGUI))
|
||||||
{
|
{
|
||||||
// gather string stats
|
// gather string stats
|
||||||
int CharCount = 0;
|
int CharCount = 0;
|
||||||
|
@ -89,13 +90,13 @@ bool CLineInput::Manipulate(IInput::CEvent Event, char *pStr, int StrMaxSize, in
|
||||||
if(Event.m_Flags&IInput::FLAG_PRESS)
|
if(Event.m_Flags&IInput::FLAG_PRESS)
|
||||||
{
|
{
|
||||||
int Key = Event.m_Key;
|
int Key = Event.m_Key;
|
||||||
bool Ctrl = false;
|
bool MoveWord = false;
|
||||||
#ifdef CONF_PLATFORM_MACOSX
|
#ifdef CONF_PLATFORM_MACOSX
|
||||||
if(pInput && (pInput->KeyIsPressed(KEY_LALT) || pInput->KeyIsPressed(KEY_RALT)))
|
if(pInput && (pInput->KeyIsPressed(KEY_LALT) || pInput->KeyIsPressed(KEY_RALT)))
|
||||||
#else
|
#else
|
||||||
if(pInput && (pInput->KeyIsPressed(KEY_LCTRL) || pInput->KeyIsPressed(KEY_RCTRL)))
|
if(pInput && (pInput->KeyIsPressed(KEY_LCTRL) || pInput->KeyIsPressed(KEY_RCTRL)))
|
||||||
#endif
|
#endif
|
||||||
Ctrl = true;
|
MoveWord = true;
|
||||||
if(Key == KEY_BACKSPACE && CursorPos > 0)
|
if(Key == KEY_BACKSPACE && CursorPos > 0)
|
||||||
{
|
{
|
||||||
int NewCursorPos = CursorPos;
|
int NewCursorPos = CursorPos;
|
||||||
|
@ -103,7 +104,7 @@ bool CLineInput::Manipulate(IInput::CEvent Event, char *pStr, int StrMaxSize, in
|
||||||
{
|
{
|
||||||
NewCursorPos = str_utf8_rewind(pStr, NewCursorPos);
|
NewCursorPos = str_utf8_rewind(pStr, NewCursorPos);
|
||||||
NumChars -= 1;
|
NumChars -= 1;
|
||||||
} while(Ctrl && NewCursorPos > 0 && !CtrlStop(pStr[NewCursorPos - 1]));
|
} while(MoveWord && NewCursorPos > 0 && !MoveWordStop(pStr[NewCursorPos - 1]));
|
||||||
int CharSize = CursorPos-NewCursorPos;
|
int CharSize = CursorPos-NewCursorPos;
|
||||||
mem_move(pStr+NewCursorPos, pStr+CursorPos, Len - NewCursorPos - CharSize + 1); // +1 == null term
|
mem_move(pStr+NewCursorPos, pStr+CursorPos, Len - NewCursorPos - CharSize + 1); // +1 == null term
|
||||||
CursorPos = NewCursorPos;
|
CursorPos = NewCursorPos;
|
||||||
|
@ -117,7 +118,7 @@ bool CLineInput::Manipulate(IInput::CEvent Event, char *pStr, int StrMaxSize, in
|
||||||
{
|
{
|
||||||
EndCursorPos = str_utf8_forward(pStr, EndCursorPos);
|
EndCursorPos = str_utf8_forward(pStr, EndCursorPos);
|
||||||
NumChars -= 1;
|
NumChars -= 1;
|
||||||
} while(Ctrl && EndCursorPos < Len && !CtrlStop(pStr[EndCursorPos - 1]));
|
} while(MoveWord && EndCursorPos < Len && !MoveWordStop(pStr[EndCursorPos - 1]));
|
||||||
int CharSize = EndCursorPos - CursorPos;
|
int CharSize = EndCursorPos - CursorPos;
|
||||||
mem_move(pStr + CursorPos, pStr + CursorPos + CharSize, Len - CursorPos - CharSize + 1); // +1 == null term
|
mem_move(pStr + CursorPos, pStr + CursorPos + CharSize, Len - CursorPos - CharSize + 1); // +1 == null term
|
||||||
Len -= CharSize;
|
Len -= CharSize;
|
||||||
|
@ -128,19 +129,52 @@ bool CLineInput::Manipulate(IInput::CEvent Event, char *pStr, int StrMaxSize, in
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
CursorPos = str_utf8_rewind(pStr, CursorPos);
|
CursorPos = str_utf8_rewind(pStr, CursorPos);
|
||||||
} while(Ctrl && CursorPos > 0 && !CtrlStop(pStr[CursorPos - 1]));
|
} while(MoveWord && CursorPos > 0 && !MoveWordStop(pStr[CursorPos - 1]));
|
||||||
}
|
}
|
||||||
else if(Key == KEY_RIGHT && CursorPos < Len)
|
else if(Key == KEY_RIGHT && CursorPos < Len)
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
CursorPos = str_utf8_forward(pStr, CursorPos);
|
CursorPos = str_utf8_forward(pStr, CursorPos);
|
||||||
} while(Ctrl && CursorPos < Len && !CtrlStop(pStr[CursorPos - 1]));
|
} while(MoveWord && CursorPos < Len && !MoveWordStop(pStr[CursorPos - 1]));
|
||||||
}
|
}
|
||||||
else if(Key == KEY_HOME)
|
else if(Key == KEY_HOME)
|
||||||
CursorPos = 0;
|
CursorPos = 0;
|
||||||
else if(Key == KEY_END)
|
else if(Key == KEY_END)
|
||||||
CursorPos = Len;
|
CursorPos = Len;
|
||||||
|
else if((pInput->KeyIsPressed(KEY_LCTRL) || pInput->KeyIsPressed(KEY_RCTRL)) && Key == KEY_V)
|
||||||
|
{
|
||||||
|
// paste clipboard to cursor
|
||||||
|
const char *pClipboardText = pInput->GetClipboardText();
|
||||||
|
|
||||||
|
// gather string stats
|
||||||
|
int CharCount = 0;
|
||||||
|
int CharSize = 0;
|
||||||
|
while(pClipboardText[CharSize])
|
||||||
|
{
|
||||||
|
int NewCharSize = str_utf8_forward(pClipboardText, CharSize);
|
||||||
|
if(NewCharSize != CharSize)
|
||||||
|
{
|
||||||
|
++CharCount;
|
||||||
|
CharSize = NewCharSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// add new string
|
||||||
|
if(CharCount)
|
||||||
|
{
|
||||||
|
if(Len+CharSize < StrMaxSize && CursorPos+CharSize < StrMaxSize && NumChars+CharCount < StrMaxChars)
|
||||||
|
{
|
||||||
|
mem_move(pStr + CursorPos + CharSize, pStr + CursorPos, Len-CursorPos+1); // +1 == null term
|
||||||
|
for(int i = 0; i < CharSize; i++)
|
||||||
|
pStr[CursorPos+i] = pClipboardText[i];
|
||||||
|
CursorPos += CharSize;
|
||||||
|
Len += CharSize;
|
||||||
|
NumChars += CharCount;
|
||||||
|
Changes = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*pNumCharsPtr = NumChars;
|
*pNumCharsPtr = NumChars;
|
||||||
|
|
|
@ -19,7 +19,7 @@ class CLineInput
|
||||||
int m_NumChars;
|
int m_NumChars;
|
||||||
IInput *m_pInput;
|
IInput *m_pInput;
|
||||||
public:
|
public:
|
||||||
static bool CtrlStop(char c);
|
static bool MoveWordStop(char c);
|
||||||
static bool Manipulate(IInput::CEvent e, char *pStr, int StrMaxSize, int StrMaxChars, int *pStrLenPtr, int *pCursorPosPtr, int *pNumCharsPtr, IInput *pInput);
|
static bool Manipulate(IInput::CEvent e, char *pStr, int StrMaxSize, int StrMaxChars, int *pStrLenPtr, int *pCursorPosPtr, int *pNumCharsPtr, IInput *pInput);
|
||||||
|
|
||||||
class CCallback
|
class CCallback
|
||||||
|
|
Loading…
Reference in a new issue