forked from aburch/simutrans
-
Notifications
You must be signed in to change notification settings - Fork 0
/
clipboard_s2.cc
59 lines (49 loc) · 1.42 KB
/
clipboard_s2.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/**
* Copyright (c) 2010 Knightly
*
* Clipboard functions for copy and paste of text
*
* This file is part of the Simutrans project under the artistic license.
* (see license.txt)
*/
#include <SDL2/SDL.h>
#include <string.h>
#include "simsys.h"
#include "display/simgraph.h"
#include "simdebug.h"
#include "dataobj/translator.h"
/**
* Copy text to the clipboard
* @param source : pointer to the start of the source text
* @param length : number of character bytes to copy
* @author Knightly
*/
void dr_copy(const char *source, size_t length)
{
char *text = (char *)malloc( length+1 );
strncpy( text, source, length );
text[length] = 0;
SDL_SetClipboardText( text );
free( text );
}
/**
* Paste text from the clipboard
* @param target : pointer to the insertion position in the target text
* @param max_length : maximum number of character bytes which could be inserted
* @return number of character bytes actually inserted -> for cursor advancing
* @author Knightly
*/
size_t dr_paste(char *target, size_t max_length)
{
size_t insert_len = 0;
if( SDL_HasClipboardText() ) {
char *str = SDL_GetClipboardText();
// Insert string.
size_t const str_len = strlen(str);
insert_len = str_len <= max_length ? str_len : (size_t)utf8_get_prev_char((utf8 const *)str, max_length);
memmove(target + insert_len, target, strlen(target) + 1);
memcpy(target, str, insert_len);
SDL_free( str );
}
return insert_len;
}