commit 5bac3b6
uint
·
2026-06-23 01:29:03 +0000 UTC
parent 3e167e3
Implement win32 clipboard support
1 files changed,
+46,
-0
+46,
-0
1@@ -270,12 +270,58 @@ void maus_clear(Maus* mw, MausColor col)
2
3 void maus_clipboard_set_text(Maus* mw, const char* text)
4 {
5+ MausBackend* be = &mw->backend;
6+ if (!text || !OpenClipboard(be->hwnd))
7+ return;
8+ EmptyClipboard();
9+ size_t len = strlen(text) + 1;
10+ HGLOBAL hmem = GlobalAlloc(GMEM_MOVEABLE, len);
11+ if (hmem) {
12+ void* ptr = GlobalLock(hmem);
13+ if (ptr) {
14+ memcpy(ptr, text, len);
15+ GlobalUnlock(hmem);
16+
17+ if (!SetClipboardData(CF_TEXT, hmem))
18+ GlobalFree(hmem); /* failed */
19+ }
20+ else {
21+ GlobalFree(hmem);
22+ }
23+ }
24
25+ CloseClipboard();
26 }
27
28 char* maus_clipboard_get_text(Maus* mw)
29 {
30+ MausBackend* be = &mw->backend;
31+ if (!OpenClipboard(be->hwnd))
32+ return NULL;
33+
34+ HANDLE hmem = GetClipboardData(CF_TEXT);
35+ if (!hmem) {
36+ CloseClipboard();
37+ return NULL;
38+ }
39+
40+ const char* text = GlobalLock(hmem);
41+ if (text) {
42+ if (mw->clipboard) {
43+ free(mw->clipboard);
44+ mw->clipboard = NULL;
45+ }
46+
47+ size_t len = strlen(text) + 1;
48+ mw->clipboard = malloc(len);
49+ if (mw->clipboard)
50+ memcpy(mw->clipboard, text, len);
51+
52+ GlobalUnlock(hmem);
53+ }
54
55+ CloseClipboard();
56+ return mw->clipboard;
57 }
58
59 void maus_close(Maus* mw)