Changeset - r1893:160c0f92fce8
[Not reviewed]
master
0 2 0
orudge - 19 years ago 2005-06-02 19:55:37
orudge@openttd.org
(svn r2399) - Fix: Update OS/2 project file with filename changes
- Fix: Make clipboard code a bit nicer (thanks Tron)
2 files changed with 35 insertions and 34 deletions:
os2.c
33
32
0 comments (0 inline, 0 general)
openttd.tgt
Show inline comments
 
@@ -2112,8 +2112,8 @@ 1
 
0
 
484
 
MItem
 
5
 
ttd.c
 
9
 
openttd.c
 
485
 
WString
 
4
os2.c
Show inline comments
 
@@ -707,45 +707,46 @@ const HalMusicDriver _os2_music_driver =
 
 */
 
bool InsertTextBufferClipboard(Textbuf *tb)
 
{
 
	HAB hab = 0; // anchor-block handle
 
	PSZ pszClipText, pszClipText2;
 
	uint16 width = 0;
 
	uint16 length = 0;
 
	char clipbuf[300];
 

	
 
	pszClipText2 = clipbuf;
 
	HAB hab = 0;
 

	
 
	if (WinOpenClipbrd(hab))
 
	{
 
		if (pszClipText = (PSZ) WinQueryClipbrdData(hab, CF_TEXT))
 
			strncpy(clipbuf, pszClipText, 300);
 
		const char* text = (const char*)WinQueryClipbrdData(hab, CF_TEXT);
 

	
 
		if (text != NULL)
 
		{
 
			uint length = 0;
 
			uint width = 0;
 
			const char* i;
 

	
 
			for (i = text; IsValidAsciiChar(*i); i++)
 
			{
 
				uint w;
 

	
 
				if (tb->length + length >= tb->maxlength - 1) break;
 

	
 
				w = GetCharacterWidth((byte)*i);
 
				if (tb->maxwidth != 0 && width + tb->width + w > tb->maxwidth) break;
 

	
 
				width += w;
 
				length++;
 
			}
 

	
 
			memmove(tb->buf + tb->caretpos + length, tb->buf + tb->caretpos, tb->length - tb->caretpos + 1);
 
			memcpy(tb->buf + tb->caretpos, text, length);
 
			tb->width += width;
 
			tb->caretxoffs += width;
 
			tb->length += length;
 
			tb->caretpos += length;
 

	
 
			WinCloseClipbrd(hab);
 
			return true;
 
		}
 

	
 
		WinCloseClipbrd(hab);
 
	}
 

	
 
	if (!pszClipText)
 
		return false;
 

	
 
	for (; IsValidAsciiChar(*pszClipText2) && (tb->length + length) < tb->maxlength - 1 &&
 
		(tb->maxwidth == 0 || width + tb->width + GetCharacterWidth((byte)*pszClipText2) <= tb->maxwidth); pszClipText2++)
 
	{
 
		width += GetCharacterWidth((byte)*pszClipText2);
 
		length++;
 
	}
 

	
 
	if (length == 0)
 
		return false;
 

	
 
	memmove(tb->buf + tb->caretpos + length, tb->buf + tb->caretpos, tb->length - tb->caretpos);
 
	memcpy(tb->buf + tb->caretpos, clipbuf, length);
 
	tb->width += width;
 
	tb->caretxoffs += width;
 

	
 
	tb->length += length;
 
	tb->caretpos += length;
 
	tb->buf[tb->length + 1] = '\0'; // terminating zero
 

	
 
	return true;
 
	return false;
 
}
 

	
 
static TID thread1 = 0;
0 comments (0 inline, 0 general)