14 # define _WIN32_IE 0x0501
21 #include <shellscalingapi.h>
41 #ifdef WITH_INPUT_NDOF
47 # define VK_MINUS 0xBD
50 # define VK_SEMICOLON 0xBA
53 # define VK_PERIOD 0xBE
56 # define VK_COMMA 0xBC
59 # define VK_BACK_QUOTE 0xC0
62 # define VK_SLASH 0xBF
65 # define VK_BACK_SLASH 0xDC
68 # define VK_EQUALS 0xBB
70 #ifndef VK_OPEN_BRACKET
71 # define VK_OPEN_BRACKET 0xDB
73 #ifndef VK_CLOSE_BRACKET
74 # define VK_CLOSE_BRACKET 0xDD
77 # define VK_GR_LESS 0xE2
89 #define BROKEN_PEEK_TOUCHPAD
95 #ifdef WITH_INPUT_NDOF
96 # define DEVICE_COUNT 2
98 # define DEVICE_COUNT 1
109 #ifdef WITH_INPUT_NDOF
118 GHOST_PRINTF(
"could not register for RawInput: %d\n", (
int)GetLastError());
126 : m_hasPerformanceCounter(false), m_freq(0), m_start(0), m_lfstart(0)
136 SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
145 #ifdef WITH_INPUT_NDOF
163 __int64 delta = (perf_ticks -
m_start) * 1000;
183 ::QueryPerformanceCounter((LARGE_INTEGER *)&
count);
198 width = ::GetSystemMetrics(SM_CXSCREEN);
199 height = ::GetSystemMetrics(SM_CYSCREEN);
204 width = ::GetSystemMetrics(SM_CXVIRTUALSCREEN);
205 height = ::GetSystemMetrics(SM_CYVIRTUALSCREEN);
216 const bool exclusive,
217 const bool is_dialog,
241 GHOST_PRINT(
"GHOST_SystemWin32::createWindow(): window invalid\n");
260 HWND wnd = CreateWindowA(
"STATIC",
262 WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
269 GetModuleHandle(
NULL),
272 HDC mHDC = GetDC(wnd);
273 HDC prev_hdc = wglGetCurrentDC();
274 HGLRC prev_context = wglGetCurrentContext();
275 #if defined(WITH_GL_PROFILE_CORE)
276 for (
int minor = 5; minor >= 0; --minor) {
281 WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
284 (debug_context ? WGL_CONTEXT_DEBUG_BIT_ARB : 0),
287 if (
context->initializeDrawingContext()) {
299 WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
302 (debug_context ? WGL_CONTEXT_DEBUG_BIT_ARB : 0),
305 if (
context->initializeDrawingContext()) {
313 #elif defined(WITH_GL_PROFILE_COMPAT)
324 (debug_context ? WGL_CONTEXT_DEBUG_BIT_ARB : 0),
327 if (
context->initializeDrawingContext()) {
337 wglMakeCurrent(prev_hdc, prev_context);
362 HWND wnd = CreateWindowA(
"STATIC",
364 WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
371 GetModuleHandle(
NULL),
392 bool hasEventHandled =
false;
397 if (waitForEvent && !::PeekMessage(&msg,
NULL, 0, 0, PM_NOREMOVE)) {
407 else if (maxSleep >= 0.0) {
408 ::SetTimer(
NULL, 0, maxSleep,
NULL);
410 ::KillTimer(
NULL, 0);
416 hasEventHandled =
true;
422 while (::PeekMessageW(&msg,
NULL, 0, 0, PM_REMOVE) != 0) {
425 ::TranslateMessage(&msg);
426 ::DispatchMessageW(&msg);
427 hasEventHandled =
true;
438 }
while (waitForEvent && !hasEventHandled);
440 return hasEventHandled;
446 if (::GetCursorPos(&
point)) {
456 if (!::GetActiveWindow())
463 bool down = HIBYTE(::GetKeyState(VK_LSHIFT)) != 0;
465 down = HIBYTE(::GetKeyState(VK_RSHIFT)) != 0;
468 down = HIBYTE(::GetKeyState(VK_LMENU)) != 0;
470 down = HIBYTE(::GetKeyState(VK_RMENU)) != 0;
473 down = HIBYTE(::GetKeyState(VK_LCONTROL)) != 0;
475 down = HIBYTE(::GetKeyState(VK_RCONTROL)) != 0;
478 bool lwindown = HIBYTE(::GetKeyState(VK_LWIN)) != 0;
479 bool rwindown = HIBYTE(::GetKeyState(VK_RWIN)) != 0;
480 if (lwindown || rwindown)
492 bool swapped = ::GetSystemMetrics(SM_SWAPBUTTON) == TRUE;
494 bool down = HIBYTE(::GetAsyncKeyState(VK_LBUTTON)) != 0;
497 down = HIBYTE(::GetAsyncKeyState(VK_MBUTTON)) != 0;
500 down = HIBYTE(::GetAsyncKeyState(VK_RBUTTON)) != 0;
508 InitCommonControls();
511 SetProcessDPIAware();
518 GHOST_PRINT(
"GHOST_SystemWin32::init: High Frequency Performance Timer available\n");
519 ::QueryPerformanceCounter((LARGE_INTEGER *)&
m_start);
522 GHOST_PRINT(
"GHOST_SystemWin32::init: High Frequency Performance Timer not available\n");
527 wc.style = CS_HREDRAW | CS_VREDRAW;
531 wc.hInstance = ::GetModuleHandle(0);
532 wc.hIcon = ::LoadIcon(wc.hInstance,
"APPICON");
535 ::LoadIcon(
NULL, IDI_APPLICATION);
537 wc.hCursor = ::LoadCursor(0, IDC_ARROW);
539 #ifdef INW32_COMPISITING
540 (HBRUSH)CreateSolidBrush
544 wc.lpszClassName =
L"GHOST_WindowClass";
547 if (::RegisterClassW(&wc) == 0) {
562 bool *r_is_repeated_modifier)
564 bool is_repeated_modifier =
false;
573 unsigned int msg =
raw.data.keyboard.Message;
574 *r_keyDown = !(
raw.data.keyboard.Flags & RI_KEY_BREAK) && msg != WM_KEYUP && msg != WM_SYSKEYUP;
576 key = this->
convertKey(raw.data.keyboard.VKey,
577 raw.data.keyboard.MakeCode,
578 (
raw.data.keyboard.Flags & (RI_KEY_E1 | RI_KEY_E0)));
582 bool changed =
false;
620 modifiers.
set(modifier, *r_keyDown);
624 is_repeated_modifier =
true;
628 *r_is_repeated_modifier = is_repeated_modifier;
646 char ch = (char)MapVirtualKeyA(vKey, MAPVK_VK_TO_CHAR);
663 if (vKey == VK_OEM_7) {
666 else if (vKey == VK_OEM_8) {
667 if (PRIMARYLANGID(
m_langId) == LANG_FRENCH) {
682 if ((vKey >=
'0') && (vKey <=
'9')) {
686 else if ((vKey >=
'A') && (vKey <=
'Z')) {
690 else if ((vKey >= VK_F1) && (vKey <= VK_F24)) {
812 if (scanCode == 0x36) {
815 else if (scanCode == 0x2a) {
847 case VK_MEDIA_PLAY_PAUSE:
853 case VK_MEDIA_PREV_TRACK:
856 case VK_MEDIA_NEXT_TRACK:
881 DWORD msgPos = ::GetMessagePos();
882 int msgPosX = GET_X_LPARAM(msgPos);
883 int msgPosY = GET_Y_LPARAM(msgPos);
908 std::vector<GHOST_WintabInfoWin32> wintabInfo;
917 bool mouseMoveHandled;
938 switch (info.button) {
940 message = WM_LBUTTONDOWN;
943 message = WM_RBUTTONDOWN;
946 message = WM_MBUTTONDOWN;
956 if (PeekMessage(&msg, window->
getHWND(), message, message, PM_NOYIELD) &&
957 msg.message != WM_QUIT) {
960 useWintabPos = wt->
testCoordinates(msg.pt.x, msg.pt.y, info.x, info.y);
962 WINTAB_PRINTF(
" ... but associated system button mismatched position\n");
969 PeekMessage(&msg, window->
getHWND(), message, message, PM_REMOVE | PM_NOYIELD);
979 new GHOST_EventButton(info.time, info.type, window, info.button, info.tabletData));
981 mouseMoveHandled =
true;
996 switch (info.button) {
998 message = WM_LBUTTONUP;
1001 message = WM_RBUTTONUP;
1004 message = WM_MBUTTONUP;
1014 if (PeekMessage(&msg, window->
getHWND(), message, message, PM_REMOVE | PM_NOYIELD) &&
1015 msg.message != WM_QUIT) {
1020 new GHOST_EventButton(info.time, info.type, window, info.button, info.tabletData));
1033 if (!mouseMoveHandled) {
1034 DWORD
pos = GetMessagePos();
1035 int x = GET_X_LPARAM(
pos);
1036 int y = GET_Y_LPARAM(
pos);
1054 std::vector<GHOST_PointerInfoWin32> pointerInfo;
1061 case WM_POINTERUPDATE:
1064 for (
uint32_t i = pointerInfo.size(); i-- > 0;) {
1068 pointerInfo[i].pixelLocation.x,
1069 pointerInfo[i].pixelLocation.y,
1070 pointerInfo[i].tabletData));
1076 case WM_POINTERDOWN:
1081 pointerInfo[0].pixelLocation.x,
1082 pointerInfo[0].pixelLocation.y,
1083 pointerInfo[0].tabletData));
1087 pointerInfo[0].buttonMask,
1088 pointerInfo[0].tabletData));
1092 eventHandled =
true;
1099 pointerInfo[0].buttonMask,
1100 pointerInfo[0].tabletData));
1104 eventHandled =
true;
1128 static bool is_warping_x =
false;
1129 static bool is_warping_y =
false;
1146 if (x_new != x_screen || y_new != y_screen) {
1150 if (!is_warping_x) {
1151 is_warping_x = x_new != x_screen;
1153 x_accum += (x_screen - x_new);
1157 if (!is_warping_y) {
1158 is_warping_y = y_new != y_screen;
1160 y_accum += (y_screen - y_new);
1170 is_warping_x =
false;
1171 is_warping_y =
false;
1172 x_screen += x_accum;
1173 y_screen += y_accum;
1189 int delta = GET_WHEEL_DELTA_WPARAM(wParam);
1191 if (acc * delta < 0) {
1196 int direction = (acc >= 0) ? 1 : -1;
1199 while (acc >= WHEEL_DELTA) {
1208 bool keyDown =
false;
1209 bool is_repeated_modifier =
false;
1217 if (!is_repeated_modifier) {
1218 char vk =
raw.data.keyboard.VKey;
1219 char utf8_char[6] = {0};
1221 bool is_repeat =
false;
1236 wchar_t utf16[3] = {0};
1237 BYTE
state[256] = {0};
1239 GetKeyboardState((PBYTE)
state);
1240 bool ctrl_pressed =
state[VK_CONTROL] & 0x80;
1241 bool alt_pressed =
state[VK_MENU] & 0x80;
1244 if (ctrl_pressed && !alt_pressed) {
1245 utf8_char[0] =
'\0';
1249 else if (MapVirtualKeyW(vk, 2) != 0) {
1252 if ((
r = ToUnicodeEx(
1254 if ((
r > 0 &&
r < 3)) {
1259 utf8_char[0] =
'\0';
1265 utf8_char[0] =
'\0';
1269 ascii = utf8_char[0] & 0x80 ?
'?' : utf8_char[0];
1272 #ifdef WITH_INPUT_IME
1273 if (window->getImeInput()->IsImeKeyEvent(ascii, key)) {
1323 #ifdef WITH_INPUT_IME
1378 minmax->ptMinTrackSize.x = 320;
1379 minmax->ptMinTrackSize.y = 240;
1382 #ifdef WITH_INPUT_NDOF
1383 bool GHOST_SystemWin32::processNDOF(RAWINPUT
const &
raw)
1385 bool eventSent =
false;
1388 static bool firstEvent =
true;
1390 RID_DEVICE_INFO info;
1391 unsigned infoSize =
sizeof(RID_DEVICE_INFO);
1392 info.cbSize = infoSize;
1394 GetRawInputDeviceInfo(
raw.header.hDevice, RIDI_DEVICEINFO, &info, &infoSize);
1395 if (info.dwType == RIM_TYPEHID)
1396 m_ndofManager->setDevice(info.hid.dwVendorId, info.hid.dwProductId);
1398 GHOST_PRINT(
"<!> not a HID device... mouse/kb perhaps?\n");
1407 BYTE
const *
data =
raw.data.hid.bRawData;
1409 BYTE packetType =
data[0];
1410 switch (packetType) {
1413 const short *axis = (
short *)(
data + 1);
1415 const int t[3] = {axis[0], -axis[2], axis[1]};
1416 m_ndofManager->updateTranslation(
t, now);
1418 if (
raw.data.hid.dwSizeHid == 13) {
1420 const int r[3] = {-axis[3], axis[5], -axis[4]};
1421 m_ndofManager->updateRotation(
r, now);
1430 const short *axis = (
short *)(
data + 1);
1431 const int r[3] = {-axis[0], axis[2], -axis[1]};
1432 m_ndofManager->updateRotation(
r, now);
1438 memcpy(&button_bits,
data + 1,
sizeof(button_bits));
1439 m_ndofManager->updateButtons(button_bits, now);
1451 if (active_window) {
1461 if (!active_window) {
1471 if (trackpad_info.
x != 0 || trackpad_info.
y != 0) {
1481 if (trackpad_info.
scale != 0) {
1487 trackpad_info.
scale,
1496 bool eventHandled =
false;
1498 LRESULT lResult = 0;
1500 #ifdef WITH_INPUT_IME
1503 GHOST_ASSERT(system,
"GHOST_SystemWin32::s_wndProc(): system not initialized");
1507 if (msg == WM_NCCREATE) {
1510 HMODULE m_user32 = ::LoadLibrary(
"User32.dll");
1514 "EnableNonClientDpiScaling");
1515 if (fpEnableNonClientDpiScaling) {
1516 fpEnableNonClientDpiScaling(hwnd);
1525 case WM_INPUTLANGCHANGE: {
1527 #ifdef WITH_INPUT_IME
1528 window->getImeInput()->UpdateInputLanguage();
1529 window->getImeInput()->UpdateConversionStatus(hwnd);
1538 RAWINPUT *raw_ptr = &
raw;
1539 UINT rawSize =
sizeof(RAWINPUT);
1541 GetRawInputData((HRAWINPUT)lParam, RID_INPUT, raw_ptr, &rawSize,
sizeof(RAWINPUTHEADER));
1543 switch (
raw.header.dwType) {
1544 case RIM_TYPEKEYBOARD:
1547 GHOST_PRINT(
"GHOST_SystemWin32::wndProc: key event ");
1552 #ifdef WITH_INPUT_NDOF
1554 if (system->processNDOF(
raw)) {
1555 eventHandled =
true;
1562 #ifdef WITH_INPUT_IME
1566 case WM_IME_NOTIFY: {
1568 if (wParam == IMN_SETOPENSTATUS || wParam == IMN_SETCONVERSIONMODE) {
1569 window->getImeInput()->UpdateConversionStatus(hwnd);
1573 case WM_IME_SETCONTEXT: {
1574 GHOST_ImeWin32 *ime = window->getImeInput();
1575 ime->UpdateInputLanguage();
1576 ime->UpdateConversionStatus(hwnd);
1577 ime->CreateImeWindow(hwnd);
1578 ime->CleanupComposition(hwnd);
1579 ime->CheckFirst(hwnd);
1582 case WM_IME_STARTCOMPOSITION: {
1583 GHOST_ImeWin32 *ime = window->getImeInput();
1584 eventHandled =
true;
1585 ime->CreateImeWindow(hwnd);
1586 ime->ResetComposition(hwnd);
1590 case WM_IME_COMPOSITION: {
1591 GHOST_ImeWin32 *ime = window->getImeInput();
1592 eventHandled =
true;
1593 ime->UpdateImeWindow(hwnd);
1594 ime->UpdateInfo(hwnd);
1595 if (ime->eventImeData.result_len) {
1602 case WM_IME_ENDCOMPOSITION: {
1603 GHOST_ImeWin32 *ime = window->getImeInput();
1604 eventHandled =
true;
1607 ime->ResetComposition(hwnd);
1608 ime->DestroyImeWindow(hwnd);
1636 case WM_SYSDEADCHAR:
1659 switch (wParam & 0xFFF0) {
1661 eventHandled =
true;
1664 ::ShowWindow(hwnd, SW_RESTORE);
1672 eventHandled =
true;
1696 case WT_CSRCHANGE: {
1702 eventHandled =
true;
1705 case WT_PROXIMITY: {
1707 if (LOWORD(lParam)) {
1713 if (HIWORD(lParam)) {
1714 WINTAB_PRINTF(
" Cursor entering or leaving hardware proximity.\n");
1717 WINTAB_PRINTF(
" Cursor neither entering nor leaving hardware proximity.\n");
1722 bool inRange = LOWORD(lParam);
1731 eventHandled =
true;
1734 case WT_INFOCHANGE: {
1744 eventHandled =
true;
1749 eventHandled =
true;
1780 case WM_POINTERUPDATE:
1781 case WM_POINTERDOWN:
1785 case WM_POINTERLEAVE: {
1787 POINTER_INFO pointerInfo;
1788 if (!GetPointerInfo(pointerId, &pointerInfo)) {
1793 if (pointerInfo.pointerType == PT_PEN) {
1795 eventHandled =
true;
1802 case WM_LBUTTONDOWN:
1805 case WM_MBUTTONDOWN:
1808 case WM_RBUTTONDOWN:
1811 case WM_XBUTTONDOWN:
1812 if ((
short)HIWORD(wParam) == XBUTTON1) {
1815 else if ((
short)HIWORD(wParam) == XBUTTON2) {
1829 if ((
short)HIWORD(wParam) == XBUTTON1) {
1832 else if ((
short)HIWORD(wParam) == XBUTTON2) {
1839 TRACKMOUSEEVENT tme = {
sizeof(tme)};
1840 tme.dwFlags = TME_LEAVE;
1841 tme.hwndTrack = hwnd;
1842 TrackMouseEvent(&tme);
1853 case WM_MOUSEWHEEL: {
1862 eventHandled =
true;
1863 #ifdef BROKEN_PEEK_TOUCHPAD
1864 PostMessage(hwnd, WM_USER, 0, 0);
1875 if (LOWORD(lParam) == HTCLIENT) {
1886 case WM_MOUSELEAVE: {
1901 case WM_NCMOUSEMOVE:
1920 if (IsIconic(hwnd)) {
1921 ShowWindow(hwnd, SW_RESTORE);
1943 if (LOWORD(wParam) == WA_INACTIVE)
1946 lResult = ::DefWindowProc(hwnd, msg, wParam, lParam);
1949 case WM_ENTERSIZEMOVE:
1959 case WM_EXITSIZEMOVE:
1971 ::ValidateRect(hwnd,
NULL);
1974 eventHandled =
true;
1977 case WM_GETMINMAXINFO:
1998 case WM_CAPTURECHANGED:
2030 RECT *
const suggestedWindowRect = (RECT *)lParam;
2035 eventHandled =
true;
2040 suggestedWindowRect->left,
2041 suggestedWindowRect->top,
2042 suggestedWindowRect->right - suggestedWindowRect->left,
2043 suggestedWindowRect->bottom - suggestedWindowRect->top,
2044 SWP_NOZORDER | SWP_NOACTIVATE);
2049 case WM_DISPLAYCHANGE: {
2060 if (!wParam && hwnd == ::GetActiveWindow()) {
2064 case WM_SETTINGCHANGE:
2066 if ((lParam !=
NULL) && (wcscmp(LPCWSTR(lParam),
L"ImmersiveColorSet") == 0)) {
2073 case WM_WINDOWPOSCHANGED:
2109 case WM_WINDOWPOSCHANGING:
2124 case WM_ACTIVATEAPP:
2141 case DM_POINTERHITTEST:
2153 GHOST_PRINT(
"GHOST_SystemWin32::wndProc: GHOST window event before creation\n");
2165 GHOST_PRINT(
"GHOST_SystemWin32::wndProc: event without window\n");
2170 eventHandled =
true;
2174 lResult = ::DefWindowProcW(hwnd, msg, wParam, lParam);
2183 if (IsClipboardFormatAvailable(CF_UNICODETEXT) && OpenClipboard(
NULL)) {
2185 HANDLE hData = GetClipboardData(CF_UNICODETEXT);
2186 if (hData ==
NULL) {
2190 buffer = (
wchar_t *)GlobalLock(hData);
2200 GlobalUnlock(hData);
2205 else if (IsClipboardFormatAvailable(CF_TEXT) && OpenClipboard(
NULL)) {
2208 HANDLE hData = GetClipboardData(CF_TEXT);
2209 if (hData ==
NULL) {
2213 buffer = (
char *)GlobalLock(hData);
2220 temp_buff = (
char *)malloc(
len + 1);
2222 temp_buff[
len] =
'\0';
2226 GlobalUnlock(hData);
2238 if (selection || !
buffer) {
2242 if (OpenClipboard(
NULL)) {
2248 HGLOBAL clipbuffer = GlobalAlloc(GMEM_MOVEABLE,
sizeof(
wchar_t) *
len);
2250 wchar_t *
data = (
wchar_t *)GlobalLock(clipbuffer);
2254 GlobalUnlock(clipbuffer);
2255 SetClipboardData(CF_UNICODETEXT, clipbuffer);
2267 const char *message,
2268 const char *help_label,
2269 const char *continue_label,
2278 int nButtonPressed = 0;
2279 TASKDIALOGCONFIG config = {0};
2280 const TASKDIALOG_BUTTON buttons[] = {{IDOK, help_label_16}, {IDCONTINUE, continue_label_16}};
2282 config.cbSize =
sizeof(config);
2283 config.hInstance = 0;
2284 config.dwCommonButtons = 0;
2287 TD_INFORMATION_ICON);
2288 config.pszWindowTitle =
L"Blender";
2289 config.pszMainInstruction = title_16;
2290 config.pszContent = message_16;
2291 config.pButtons = (link) ? buttons : buttons + 1;
2292 config.cButtons = (link) ? 2 : 1;
2294 TaskDialogIndirect(&config, &nButtonPressed,
NULL,
NULL);
2295 switch (nButtonPressed) {
2297 ShellExecute(
NULL,
"open", link,
NULL,
NULL, SW_SHOWNORMAL);
2305 free((
void *)title_16);
2306 free((
void *)message_16);
2307 free((
void *)help_label_16);
2308 free((
void *)continue_label_16);
2318 PROCESSENTRY32 pe32 = {0};
2319 DWORD ppid = 0, pid = GetCurrentProcessId();
2320 snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
2321 if (snapshot == INVALID_HANDLE_VALUE) {
2324 pe32.dwSize =
sizeof(pe32);
2325 if (!Process32First(snapshot, &pe32)) {
2326 CloseHandle(snapshot);
2330 if (pe32.th32ProcessID == pid) {
2331 ppid = pe32.th32ParentProcessID;
2334 }
while (Process32Next(snapshot, &pe32));
2335 CloseHandle(snapshot);
2342 HANDLE handle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
FALSE, pid);
2344 GetModuleFileNameEx(handle, 0,
buffer, max_len);
2347 CloseHandle(handle);
2353 HWND hwnd = GetConsoleWindow();
2356 DWORD pid = (DWORD)-1;
2358 char parent_name[MAX_PATH];
2359 bool start_from_launcher =
false;
2361 GetWindowThreadProcessId(hwnd, &pid);
2363 char *filename = strrchr(parent_name,
'\\');
2364 if (filename !=
NULL) {
2365 start_from_launcher = strstr(filename,
"blender.exe") !=
NULL;
2370 if (pid != (start_from_launcher ? ppid : GetCurrentProcessId()))
2379 HWND wnd = GetConsoleWindow();
2384 ShowWindow(wnd, SW_HIDE);
2390 ShowWindow(wnd, SW_HIDE);
2394 ShowWindow(wnd, SW_SHOW);
2396 DeleteMenu(GetSystemMenu(wnd,
FALSE), SC_CLOSE, MF_BYCOMMAND);
2404 DeleteMenu(GetSystemMenu(wnd,
FALSE), SC_CLOSE, MF_BYCOMMAND);
void BLI_kdtree_nd_() free(KDTree *tree)
#define GHOST_OPENGL_WGL_RESET_NOTIFICATION_STRATEGY
#define GHOST_PRINTF(x,...)
#define GHOST_ASSERT(x, info)
static void initRawInput()
BOOL(API * GHOST_WIN32_EnableNonClientDpiScaling)(HWND)
static bool isStartedFromCommandPrompt()
static DWORD GetParentProcessID(void)
static bool getProcessName(int pid, char *buffer, int max_len)
@ GHOST_kTrackpadEventMagnify
@ GHOST_kTrackpadEventScroll
@ GHOST_kWindowStateMinimized
@ GHOST_kStandardCursorDefault
@ GHOST_kEventWindowClose
@ GHOST_kEventImeComposition
@ GHOST_kEventWindowActivate
@ GHOST_kEventWindowUpdate
@ GHOST_kEventWindowDeactivate
@ GHOST_kEventImeCompositionStart
@ GHOST_kEventImeCompositionEnd
@ GHOST_kEventWindowDPIHintChanged
static const GHOST_TabletData GHOST_TABLET_DATA_NONE
@ GHOST_glAlphaBackground
@ GHOST_kKeyNumpadAsterisk
GHOST_TDrawingContextType
@ GHOST_kModifierKeyRightControl
@ GHOST_kModifierKeyLeftControl
@ GHOST_kModifierKeyRightAlt
@ GHOST_kModifierKeyRightShift
@ GHOST_kModifierKeyLeftAlt
@ GHOST_kModifierKeyLeftShift
@ GHOST_kButtonMaskButton4
@ GHOST_kButtonMaskButton5
@ GHOST_kButtonMaskMiddle
GHOST_TConsoleWindowState
@ GHOST_kConsoleWindowStateShow
@ GHOST_kConsoleWindowStateHideForNonConsoleLaunch
@ GHOST_kConsoleWindowStateHide
@ GHOST_kConsoleWindowStateToggle
@ GHOST_kTabletWinPointer
#define GET_POINTERID_WPARAM(wParam)
typedef UINT(API *GHOST_WIN32_GetDpiForWindow)(HWND)
#define WINTAB_PRINTF(x,...)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei height
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble top
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture Noise Generate fractal Perlin noise Wave Generate procedural bands or rings with noise Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a point
static btDbvtVolume bounds(btDbvtNode **leaves, int count)
virtual GHOST_TSuccess initialize(void)
virtual GHOST_TSuccess getNumDisplays(uint8_t &numDisplays) const
void removeTypeEvents(GHOST_TEventType type, GHOST_IWindow *window=NULL)
static GHOST_ISystem * getSystem()
GHOST_TSuccess setCursorPosition(int32_t x, int32_t y)
uint64_t getMilliSeconds() const
void getMainDisplayDimensions(uint32_t &width, uint32_t &height) const
void setTabletAPI(GHOST_TTabletAPI api) override
GHOST_TKey hardKey(RAWINPUT const &raw, bool *r_keyDown, bool *r_is_repeated_modifier)
static void processWheelEvent(GHOST_WindowWin32 *window, WPARAM wParam, LPARAM lParam)
GHOST_IContext * createOffscreenContext(GHOST_GLSettings glSettings)
static GHOST_EventButton * processButtonEvent(GHOST_TEventType type, GHOST_WindowWin32 *window, GHOST_TButton mask)
unsigned short m_keycode_last_repeat_key
GHOST_TSuccess getCursorPosition(int32_t &x, int32_t &y) const
GHOST_IWindow * createWindow(const char *title, int32_t left, int32_t top, uint32_t width, uint32_t height, GHOST_TWindowState state, GHOST_TDrawingContextType type, GHOST_GLSettings glSettings, const bool exclusive=false, const bool is_dialog=false, const GHOST_IWindow *parentWindow=0)
GHOST_TKey processSpecialKey(short vKey, short scanCode) const
static GHOST_Event * processWindowSizeEvent(GHOST_WindowWin32 *window)
GHOST_TKey convertKey(short vKey, short ScanCode, short extend) const
void putClipboard(const char *buffer, bool selection) const
static GHOST_ContextD3D * createOffscreenContextD3D()
bool processEvents(bool waitForEvent)
char * getClipboard(bool selection) const
uint64_t tickCountToMillis(__int64 ticks) const
static GHOST_TSuccess disposeContextD3D(GHOST_ContextD3D *context)
static void processWintabEvent(GHOST_WindowWin32 *window)
uint64_t performanceCounterToMillis(__int64 perf_ticks) const
GHOST_TSuccess getButtons(GHOST_Buttons &buttons) const
void retrieveModifierKeys(GHOST_ModifierKeys &keys) const
static GHOST_EventKey * processKeyEvent(GHOST_WindowWin32 *window, RAWINPUT const &raw)
void initDebug(GHOST_Debug debug) override
void getAllDisplayDimensions(uint32_t &width, uint32_t &height) const
GHOST_TSuccess getModifierKeys(GHOST_ModifierKeys &keys) const
static void processMinMaxInfo(MINMAXINFO *minmax)
int setConsoleWindowState(GHOST_TConsoleWindowState action)
void storeModifierKeys(const GHOST_ModifierKeys &keys)
static GHOST_Event * processWindowEvent(GHOST_TEventType type, GHOST_WindowWin32 *window)
uint8_t getNumDisplays() const
static GHOST_EventCursor * processCursorEvent(GHOST_WindowWin32 *window)
void handleKeyboardChange(void)
static void processPointerEvent(UINT type, GHOST_WindowWin32 *window, WPARAM wParam, LPARAM lParam, bool &eventhandled)
GHOST_TSuccess disposeContext(GHOST_IContext *context)
GHOST_TSuccess showMessageBox(const char *title, const char *message, const char *help_label, const char *continue_label, const char *link, GHOST_DialogOptions dialog_options) const
static LRESULT WINAPI s_wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
static GHOST_TSuccess pushDragDropEvent(GHOST_TEventType eventType, GHOST_TDragnDropTypes draggedObjectType, GHOST_WindowWin32 *window, int mouseX, int mouseY, void *data)
bool m_hasPerformanceCounter
GHOST_EventManager * getEventManager() const
GHOST_WindowManager * getWindowManager() const
virtual GHOST_TSuccess exit()
bool m_multitouchGestures
virtual GHOST_TSuccess init()
virtual void setTabletAPI(GHOST_TTabletAPI api)
GHOST_TimerManager * getTimerManager() const
GHOST_WindowManager * m_windowManager
virtual void initDebug(GHOST_Debug debug)
GHOST_TSuccess pushEvent(GHOST_IEvent *event)
GHOST_DisplayManager * m_displayManager
GHOST_EventManager * m_eventManager
bool fireTimers(uint64_t time)
GHOST_TSuccess addWindow(GHOST_IWindow *window)
GHOST_IWindow * getActiveWindow(void) const
const std::vector< GHOST_IWindow * > & getWindows() const
GHOST_TSuccess setActiveWindow(GHOST_IWindow *window)
void resetPointerPenInfo()
GHOST_TTrackpadInfo getTrackpadInfo()
void updateDirectManipulation()
void loadCursor(bool visible, GHOST_TStandardCursor cursorShape) const
bool usingTabletAPI(GHOST_TTabletAPI api) const
GHOST_TSuccess getPointerInfo(std::vector< GHOST_PointerInfoWin32 > &outPointerInfo, WPARAM wParam, LPARAM lParam)
void loadWintab(bool enable)
GHOST_TabletData getTabletData()
GHOST_Wintab * getWintab() const
void updateMouseCapture(GHOST_MouseCaptureEventWin32 event)
GHOST_TSuccess setState(GHOST_TWindowState state)
void getClientBounds(GHOST_Rect &bounds) const
void onPointerHitTest(WPARAM wParam)
GHOST_TWindowState getState() const
GHOST_TSuccess getCursorGrabBounds(GHOST_Rect &bounds)
bool getCursorVisibility() const
void setCursorGrabAccum(int32_t x, int32_t y)
GHOST_TAxisFlag getCursorGrabAxis() const
GHOST_TStandardCursor getCursorShape() const
bool getCursorGrabModeIsWarp() const
void getCursorGrabAccum(int32_t &x, int32_t &y) const
void mapWintabToSysCoordinates(int x_in, int y_in, int &x_out, int &y_out)
GHOST_TabletData getLastTabletData()
void getInput(std::vector< GHOST_WintabInfoWin32 > &outWintabInfo)
void processInfoChange(LPARAM lParam)
bool testCoordinates(int sysX, int sysY, int wtX, int wtY)
static void setDebug(bool debug)
ccl_global float * buffer
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
static const VertexNature POINT
Vector< CPUDevice > devices
list of all CPUDevices. for every hardware thread an instance of CPUDevice is created
static const pxr::TfToken raw("raw", pxr::TfToken::Immortal)
unsigned __int64 uint64_t
void set(GHOST_TModifierKey mask, bool down)
bool get(GHOST_TModifierKey mask) const
bool isScrollDirectionInverted
wchar_t * alloc_utf16_from_8(const char *in8, size_t add)
int conv_utf_8_to_16(const char *in8, wchar_t *out16, size_t size16)
char * alloc_utf_8_from_16(const wchar_t *in16, size_t add)
int conv_utf_16_to_8(const wchar_t *in16, char *out8, size_t size8)
size_t count_utf_16_from_8(const char *string8)