| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- // ================================================================================
- // == This file is a part of Turbo Badger. (C) 2011-2014, Emil Segerås ==
- // == See tb_core.h for more information. ==
- // ================================================================================
- #include "tb_system.h"
- #ifdef TB_CLIPBOARD_WINDOWS
- #include <Windows.h>
- #include <stdio.h>
- namespace tb {
- // == TBClipboard =====================================
- void TBClipboard::Empty()
- {
- if (OpenClipboard(NULL))
- {
- EmptyClipboard();
- CloseClipboard();
- }
- }
- bool TBClipboard::HasText()
- {
- bool has_text = false;
- if (OpenClipboard(NULL))
- {
- has_text = IsClipboardFormatAvailable(CF_TEXT) ||
- IsClipboardFormatAvailable(CF_OEMTEXT) ||
- IsClipboardFormatAvailable(CF_UNICODETEXT);
- CloseClipboard();
- }
- return has_text;
- }
- bool TBClipboard::SetText(const char *text)
- {
- if (OpenClipboard(NULL))
- {
- int num_wide_chars_needed = MultiByteToWideChar(CP_UTF8, 0, text, -1, NULL, 0);
- if (HGLOBAL hClipboardData = GlobalAlloc(GMEM_DDESHARE, num_wide_chars_needed * sizeof(wchar_t)))
- {
- LPWSTR pchData = (LPWSTR) GlobalLock(hClipboardData);
- MultiByteToWideChar(CP_UTF8, 0, text, -1, pchData, num_wide_chars_needed);
- GlobalUnlock(hClipboardData);
- EmptyClipboard();
- SetClipboardData(CF_UNICODETEXT, hClipboardData);
- }
- CloseClipboard();
- return true;
- }
- return false;
- }
- bool TBClipboard::GetText(TBStr &text)
- {
- bool success = false;
- if (HasText() && OpenClipboard(NULL))
- {
- if (HANDLE hClipboardData = GetClipboardData(CF_UNICODETEXT))
- {
- wchar_t *pchData = (wchar_t*) GlobalLock(hClipboardData);
- int len = WideCharToMultiByte(CP_UTF8, 0, pchData, -1, NULL, 0, NULL, NULL);
- if (char *utf8 = new char[len])
- {
- WideCharToMultiByte(CP_UTF8, 0, pchData, -1, utf8, len, NULL, NULL);
- success = text.Set(utf8);
- delete [] utf8;
- }
- GlobalUnlock(hClipboardData);
- }
- CloseClipboard();
- }
- return success;
- }
- }; // namespace tb
- #endif // TB_CLIPBOARD_WINDOWS
|