Atlas - SDL_windowsvideo.h

Home / ext / SDL / src / video / windows Lines: 1 | Size: 19560 bytes [Download] [Show on GitHub] [Search similar files] [Raw] [Raw (proxy)]
[FILE BEGIN]
1/* 2 Simple DirectMedia Layer 3 Copyright (C) 1997-2025 Sam Lantinga <[email protected]> 4 5 This software is provided 'as-is', without any express or implied 6 warranty. In no event will the authors be held liable for any damages 7 arising from the use of this software. 8 9 Permission is granted to anyone to use this software for any purpose, 10 including commercial applications, and to alter it and redistribute it 11 freely, subject to the following restrictions: 12 13 1. The origin of this software must not be misrepresented; you must not 14 claim that you wrote the original software. If you use this software 15 in a product, an acknowledgment in the product documentation would be 16 appreciated but is not required. 17 2. Altered source versions must be plainly marked as such, and must not be 18 misrepresented as being the original software. 19 3. This notice may not be removed or altered from any source distribution. 20*/ 21#include "SDL_internal.h" 22 23#ifndef SDL_windowsvideo_h_ 24#define SDL_windowsvideo_h_ 25 26#include "../../core/windows/SDL_windows.h" 27 28#include "../SDL_sysvideo.h" 29 30#ifdef HAVE_DXGI_H 31#ifndef __cplusplus 32#define CINTERFACE 33#define COBJMACROS 34#endif 35#include <dxgi.h> 36#endif 37 38#if defined(_MSC_VER) && (_MSC_VER >= 1500) && !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES) 39#include <msctf.h> 40#else 41#include "SDL_msctf.h" 42#endif 43 44#include <imm.h> 45 46#define MAX_CANDLIST 10 47#define MAX_CANDLENGTH 256 48#define MAX_CANDSIZE (sizeof(WCHAR) * MAX_CANDLIST * MAX_CANDLENGTH) 49 50#include "SDL_windowsclipboard.h" 51#include "SDL_windowsevents.h" 52#include "SDL_windowsgameinput.h" 53#include "SDL_windowsopengl.h" 54 55#if !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES) 56#include "SDL_windowsshape.h" 57#include "SDL_windowskeyboard.h" 58#include "SDL_windowsmodes.h" 59#include "SDL_windowsmouse.h" 60#include "SDL_windowsopengles.h" 61#endif 62 63#include "SDL_windowswindow.h" 64 65#ifndef USER_DEFAULT_SCREEN_DPI 66#define USER_DEFAULT_SCREEN_DPI 96 67#endif 68 69#if WINVER < _WIN32_WINNT_WIN7 70// Touch input definitions 71#define TWF_FINETOUCH 1 72#define TWF_WANTPALM 2 73 74#define TOUCHEVENTF_MOVE 0x0001 75#define TOUCHEVENTF_DOWN 0x0002 76#define TOUCHEVENTF_UP 0x0004 77 78DECLARE_HANDLE(HTOUCHINPUT); 79 80typedef struct _TOUCHINPUT 81{ 82 LONG x; 83 LONG y; 84 HANDLE hSource; 85 DWORD dwID; 86 DWORD dwFlags; 87 DWORD dwMask; 88 DWORD dwTime; 89 ULONG_PTR dwExtraInfo; 90 DWORD cxContact; 91 DWORD cyContact; 92} TOUCHINPUT, *PTOUCHINPUT; 93 94// More-robust display information in Vista... 95// This is a huge amount of data to be stuffing into three API calls. :( 96typedef struct DISPLAYCONFIG_PATH_SOURCE_INFO 97{ 98 LUID adapterId; 99 UINT32 id; 100 union 101 { 102 UINT32 modeInfoIdx; 103 struct 104 { 105 UINT32 cloneGroupId : 16; 106 UINT32 sourceModeInfoIdx : 16; 107 } DUMMYSTRUCTNAME; 108 } DUMMYUNIONNAME; 109 110 UINT32 statusFlags; 111} DISPLAYCONFIG_PATH_SOURCE_INFO; 112 113typedef struct DISPLAYCONFIG_RATIONAL 114{ 115 UINT32 Numerator; 116 UINT32 Denominator; 117} DISPLAYCONFIG_RATIONAL; 118 119typedef struct DISPLAYCONFIG_PATH_TARGET_INFO 120{ 121 LUID adapterId; 122 UINT32 id; 123 union 124 { 125 UINT32 modeInfoIdx; 126 struct 127 { 128 UINT32 desktopModeInfoIdx : 16; 129 UINT32 targetModeInfoIdx : 16; 130 } DUMMYSTRUCTNAME; 131 } DUMMYUNIONNAME; 132 UINT32 /*DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY*/ outputTechnology; 133 UINT32 /*DISPLAYCONFIG_ROTATION*/ rotation; 134 UINT32 /*DISPLAYCONFIG_SCALING*/ scaling; 135 DISPLAYCONFIG_RATIONAL refreshRate; 136 UINT32 /*DISPLAYCONFIG_SCANLINE_ORDERING*/ scanLineOrdering; 137 BOOL targetAvailable; 138 UINT32 statusFlags; 139} DISPLAYCONFIG_PATH_TARGET_INFO; 140 141typedef struct DISPLAYCONFIG_PATH_INFO 142{ 143 DISPLAYCONFIG_PATH_SOURCE_INFO sourceInfo; 144 DISPLAYCONFIG_PATH_TARGET_INFO targetInfo; 145 UINT32 flags; 146} DISPLAYCONFIG_PATH_INFO; 147 148typedef enum 149{ 150 DISPLAYCONFIG_MODE_INFO_TYPE_SOURCE = 1, 151 DISPLAYCONFIG_MODE_INFO_TYPE_TARGET = 2, 152 DISPLAYCONFIG_MODE_INFO_TYPE_DESKTOP_IMAGE = 3, 153 DISPLAYCONFIG_MODE_INFO_TYPE_FORCE_UINT32 = 0xFFFFFFFF 154} DISPLAYCONFIG_MODE_INFO_TYPE; 155 156typedef struct DISPLAYCONFIG_2DREGION 157{ 158 UINT32 cx; 159 UINT32 cy; 160} DISPLAYCONFIG_2DREGION; 161 162typedef struct DISPLAYCONFIG_VIDEO_SIGNAL_INFO 163{ 164 UINT64 pixelRate; 165 DISPLAYCONFIG_RATIONAL hSyncFreq; 166 DISPLAYCONFIG_RATIONAL vSyncFreq; 167 DISPLAYCONFIG_2DREGION activeSize; 168 DISPLAYCONFIG_2DREGION totalSize; 169 170 union 171 { 172 struct 173 { 174 UINT32 videoStandard : 16; 175 176 // Vertical refresh frequency divider 177 UINT32 vSyncFreqDivider : 6; 178 179 UINT32 reserved : 10; 180 } AdditionalSignalInfo; 181 182 UINT32 videoStandard; 183 } DUMMYUNIONNAME; 184 185 // Scan line ordering (e.g. progressive, interlaced). 186 UINT32 /*DISPLAYCONFIG_SCANLINE_ORDERING*/ scanLineOrdering; 187} DISPLAYCONFIG_VIDEO_SIGNAL_INFO; 188 189typedef struct DISPLAYCONFIG_SOURCE_MODE 190{ 191 UINT32 width; 192 UINT32 height; 193 UINT32 /*DISPLAYCONFIG_PIXELFORMAT*/ pixelFormat; 194 POINTL position; 195} DISPLAYCONFIG_SOURCE_MODE; 196 197typedef struct DISPLAYCONFIG_TARGET_MODE 198{ 199 DISPLAYCONFIG_VIDEO_SIGNAL_INFO targetVideoSignalInfo; 200} DISPLAYCONFIG_TARGET_MODE; 201 202typedef struct DISPLAYCONFIG_DESKTOP_IMAGE_INFO 203{ 204 POINTL PathSourceSize; 205 RECTL DesktopImageRegion; 206 RECTL DesktopImageClip; 207} DISPLAYCONFIG_DESKTOP_IMAGE_INFO; 208 209typedef struct DISPLAYCONFIG_MODE_INFO 210{ 211 DISPLAYCONFIG_MODE_INFO_TYPE infoType; 212 UINT32 id; 213 LUID adapterId; 214 union 215 { 216 DISPLAYCONFIG_TARGET_MODE targetMode; 217 DISPLAYCONFIG_SOURCE_MODE sourceMode; 218 DISPLAYCONFIG_DESKTOP_IMAGE_INFO desktopImageInfo; 219 } DUMMYUNIONNAME; 220} DISPLAYCONFIG_MODE_INFO; 221 222typedef enum DISPLAYCONFIG_TOPOLOGY_ID 223{ 224 DISPLAYCONFIG_TOPOLOGY_INTERNAL = 0x00000001, 225 DISPLAYCONFIG_TOPOLOGY_CLONE = 0x00000002, 226 DISPLAYCONFIG_TOPOLOGY_EXTEND = 0x00000004, 227 DISPLAYCONFIG_TOPOLOGY_EXTERNAL = 0x00000008, 228 DISPLAYCONFIG_TOPOLOGY_FORCE_UINT32 = 0xFFFFFFFF 229} DISPLAYCONFIG_TOPOLOGY_ID; 230 231typedef enum 232{ 233 DISPLAYCONFIG_DEVICE_INFO_GET_SOURCE_NAME = 1, 234 DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME = 2, 235 DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_PREFERRED_MODE = 3, 236 DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME = 4, 237 DISPLAYCONFIG_DEVICE_INFO_SET_TARGET_PERSISTENCE = 5, 238 DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_BASE_TYPE = 6, 239 DISPLAYCONFIG_DEVICE_INFO_GET_SUPPORT_VIRTUAL_RESOLUTION = 7, 240 DISPLAYCONFIG_DEVICE_INFO_SET_SUPPORT_VIRTUAL_RESOLUTION = 8, 241 DISPLAYCONFIG_DEVICE_INFO_GET_ADVANCED_COLOR_INFO = 9, 242 DISPLAYCONFIG_DEVICE_INFO_SET_ADVANCED_COLOR_STATE = 10, 243 DISPLAYCONFIG_DEVICE_INFO_GET_SDR_WHITE_LEVEL = 11, 244 DISPLAYCONFIG_DEVICE_INFO_FORCE_UINT32 = 0xFFFFFFFF 245} DISPLAYCONFIG_DEVICE_INFO_TYPE; 246 247typedef struct DISPLAYCONFIG_DEVICE_INFO_HEADER 248{ 249 DISPLAYCONFIG_DEVICE_INFO_TYPE type; 250 UINT32 size; 251 LUID adapterId; 252 UINT32 id; 253} DISPLAYCONFIG_DEVICE_INFO_HEADER; 254 255typedef struct DISPLAYCONFIG_SOURCE_DEVICE_NAME 256{ 257 DISPLAYCONFIG_DEVICE_INFO_HEADER header; 258 WCHAR viewGdiDeviceName[CCHDEVICENAME]; 259} DISPLAYCONFIG_SOURCE_DEVICE_NAME; 260 261typedef struct DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS 262{ 263 union 264 { 265 struct 266 { 267 UINT32 friendlyNameFromEdid : 1; 268 UINT32 friendlyNameForced : 1; 269 UINT32 edidIdsValid : 1; 270 UINT32 reserved : 29; 271 } DUMMYSTRUCTNAME; 272 UINT32 value; 273 } DUMMYUNIONNAME; 274} DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS; 275 276typedef struct DISPLAYCONFIG_TARGET_DEVICE_NAME 277{ 278 DISPLAYCONFIG_DEVICE_INFO_HEADER header; 279 DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS flags; 280 UINT32 /*DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY*/ outputTechnology; 281 UINT16 edidManufactureId; 282 UINT16 edidProductCodeId; 283 UINT32 connectorInstance; 284 WCHAR monitorFriendlyDeviceName[64]; 285 WCHAR monitorDevicePath[128]; 286} DISPLAYCONFIG_TARGET_DEVICE_NAME; 287 288#define QDC_ONLY_ACTIVE_PATHS 0x00000002 289 290#endif // WINVER < _WIN32_WINNT_WIN7 291 292#if WINVER < _WIN32_WINNT_WIN8 293// Pen input definitions 294#define POINTER_MESSAGE_FLAG_NEW 0x00000001 295#define POINTER_MESSAGE_FLAG_INRANGE 0x00000002 296#define POINTER_MESSAGE_FLAG_INCONTACT 0x00000004 297#define POINTER_MESSAGE_FLAG_FIRSTBUTTON 0x00000010 298#define POINTER_MESSAGE_FLAG_SECONDBUTTON 0x00000020 299#define POINTER_MESSAGE_FLAG_THIRDBUTTON 0x00000040 300#define POINTER_MESSAGE_FLAG_FOURTHBUTTON 0x00000080 301#define POINTER_MESSAGE_FLAG_FIFTHBUTTON 0x00000100 302#define POINTER_MESSAGE_FLAG_PRIMARY 0x00002000 303#define POINTER_MESSAGE_FLAG_CONFIDENCE 0x00004000 304#define POINTER_MESSAGE_FLAG_CANCELED 0x00008000 305 306#define GET_POINTERID_WPARAM(wParam) (LOWORD(wParam)) 307#define IS_POINTER_FLAG_SET_WPARAM(wParam, flag) (((DWORD)HIWORD(wParam) & (flag)) == (flag)) 308#define IS_POINTER_INCONTACT_WPARAM(wParam) IS_POINTER_FLAG_SET_WPARAM(wParam, POINTER_MESSAGE_FLAG_INCONTACT) 309#define IS_POINTER_FIRSTBUTTON_WPARAM(wParam) IS_POINTER_FLAG_SET_WPARAM(wParam, POINTER_MESSAGE_FLAG_FIRSTBUTTON) 310 311typedef DWORD POINTER_INPUT_TYPE; 312 313enum tagPOINTER_INPUT_TYPE 314{ 315 PT_POINTER = 1, 316 PT_TOUCH, 317 PT_PEN, 318 PT_MOUSE, 319 PT_TOUCHPAD 320}; 321 322typedef UINT32 POINTER_FLAGS; 323 324typedef UINT32 PEN_FLAGS; 325#define PEN_FLAG_NONE 0x00000000 326#define PEN_FLAG_BARREL 0x00000001 327#define PEN_FLAG_INVERTED 0x00000002 328#define PEN_FLAG_ERASER 0x00000004 329 330typedef UINT32 PEN_MASK; 331#define PEN_MASK_NONE 0x00000000 332#define PEN_MASK_PRESSURE 0x00000001 333#define PEN_MASK_ROTATION 0x00000002 334#define PEN_MASK_TILT_X 0x00000004 335#define PEN_MASK_TILT_Y 0x00000008 336 337typedef enum tagPOINTER_BUTTON_CHANGE_TYPE 338{ 339 POINTER_CHANGE_NONE, 340 POINTER_CHANGE_FIRSTBUTTON_DOWN, 341 POINTER_CHANGE_FIRSTBUTTON_UP, 342 POINTER_CHANGE_SECONDBUTTON_DOWN, 343 POINTER_CHANGE_SECONDBUTTON_UP, 344 POINTER_CHANGE_THIRDBUTTON_DOWN, 345 POINTER_CHANGE_THIRDBUTTON_UP, 346 POINTER_CHANGE_FOURTHBUTTON_DOWN, 347 POINTER_CHANGE_FOURTHBUTTON_UP, 348 POINTER_CHANGE_FIFTHBUTTON_DOWN, 349 POINTER_CHANGE_FIFTHBUTTON_UP 350} POINTER_BUTTON_CHANGE_TYPE; 351 352typedef struct tagPOINTER_INFO 353{ 354 POINTER_INPUT_TYPE pointerType; 355 UINT32 pointerId; 356 UINT32 frameId; 357 POINTER_FLAGS pointerFlags; 358 HANDLE sourceDevice; 359 HWND hwndTarget; 360 POINT ptPixelLocation; 361 POINT ptHimetricLocation; 362 POINT ptPixelLocationRaw; 363 POINT ptHimetricLocationRaw; 364 DWORD dwTime; 365 UINT32 historyCount; 366 INT32 InputData; 367 DWORD dwKeyStates; 368 UINT64 PerformanceCount; 369 POINTER_BUTTON_CHANGE_TYPE ButtonChangeType; 370} POINTER_INFO; 371 372typedef struct tagPOINTER_PEN_INFO 373{ 374 POINTER_INFO pointerInfo; 375 PEN_FLAGS penFlags; 376 PEN_MASK penMask; 377 UINT32 pressure; 378 UINT32 rotation; 379 INT32 tiltX; 380 INT32 tiltY; 381} POINTER_PEN_INFO; 382 383#endif // WINVER < _WIN32_WINNT_WIN8 384 385#ifndef HAVE_SHELLSCALINGAPI_H 386 387typedef enum MONITOR_DPI_TYPE 388{ 389 MDT_EFFECTIVE_DPI = 0, 390 MDT_ANGULAR_DPI = 1, 391 MDT_RAW_DPI = 2, 392 MDT_DEFAULT = MDT_EFFECTIVE_DPI 393} MONITOR_DPI_TYPE; 394 395typedef enum PROCESS_DPI_AWARENESS 396{ 397 PROCESS_DPI_UNAWARE = 0, 398 PROCESS_SYSTEM_DPI_AWARE = 1, 399 PROCESS_PER_MONITOR_DPI_AWARE = 2 400} PROCESS_DPI_AWARENESS; 401 402#else 403#include <shellscalingapi.h> 404#endif 405 406typedef struct ITaskbarList3 ITaskbarList3; 407 408#ifndef _DPI_AWARENESS_CONTEXTS_ 409 410typedef enum DPI_AWARENESS 411{ 412 DPI_AWARENESS_INVALID = -1, 413 DPI_AWARENESS_UNAWARE = 0, 414 DPI_AWARENESS_SYSTEM_AWARE = 1, 415 DPI_AWARENESS_PER_MONITOR_AWARE = 2 416} DPI_AWARENESS; 417 418DECLARE_HANDLE(DPI_AWARENESS_CONTEXT); 419 420#define DPI_AWARENESS_CONTEXT_UNAWARE ((DPI_AWARENESS_CONTEXT)-1) 421#define DPI_AWARENESS_CONTEXT_SYSTEM_AWARE ((DPI_AWARENESS_CONTEXT)-2) 422#define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE ((DPI_AWARENESS_CONTEXT)-3) 423 424#endif // _DPI_AWARENESS_CONTEXTS_ 425 426// Windows 10 Creators Update 427#if NTDDI_VERSION < 0x0A000003 428#define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 ((DPI_AWARENESS_CONTEXT)-4) 429#endif // NTDDI_VERSION < 0x0A000003 430 431// Windows 10 version 1809 432#if NTDDI_VERSION < 0x0A000006 433#define DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED ((DPI_AWARENESS_CONTEXT)-5) 434#endif // NTDDI_VERSION < 0x0A000006 435 436typedef BOOL (*PFNSHFullScreen)(HWND, DWORD); 437typedef void (*PFCoordTransform)(SDL_Window *, POINT *); 438 439typedef struct 440{ 441 void **lpVtbl; 442 int refcount; 443 void *data; 444} TSFSink; 445 446#ifndef SDL_DISABLE_WINDOWS_IME 447// Definition from Win98DDK version of IMM.H 448typedef struct tagINPUTCONTEXT2 449{ 450 HWND hWnd; 451 BOOL fOpen; 452 POINT ptStatusWndPos; 453 POINT ptSoftKbdPos; 454 DWORD fdwConversion; 455 DWORD fdwSentence; 456 union 457 { 458 LOGFONTA A; 459 LOGFONTW W; 460 } lfFont; 461 COMPOSITIONFORM cfCompForm; 462 CANDIDATEFORM cfCandForm[4]; 463 HIMCC hCompStr; 464 HIMCC hCandInfo; 465 HIMCC hGuideLine; 466 HIMCC hPrivate; 467 DWORD dwNumMsgBuf; 468 HIMCC hMsgBuf; 469 DWORD fdwInit; 470 DWORD dwReserve[3]; 471} INPUTCONTEXT2, *PINPUTCONTEXT2, NEAR *NPINPUTCONTEXT2, FAR *LPINPUTCONTEXT2; 472#endif 473 474// Corner rounding support (Win 11+) 475#ifndef DWMWA_WINDOW_CORNER_PREFERENCE 476#define DWMWA_WINDOW_CORNER_PREFERENCE 33 477#endif 478typedef enum { 479 DWMWCP_DEFAULT = 0, 480 DWMWCP_DONOTROUND = 1, 481 DWMWCP_ROUND = 2, 482 DWMWCP_ROUNDSMALL = 3 483} DWM_WINDOW_CORNER_PREFERENCE; 484 485// Border Color support (Win 11+) 486#ifndef DWMWA_BORDER_COLOR 487#define DWMWA_BORDER_COLOR 34 488#endif 489 490#ifndef DWMWA_COLOR_DEFAULT 491#define DWMWA_COLOR_DEFAULT 0xFFFFFFFF 492#endif 493 494#ifndef DWMWA_COLOR_NONE 495#define DWMWA_COLOR_NONE 0xFFFFFFFE 496#endif 497 498// Transparent window support 499#ifndef DWM_BB_ENABLE 500#define DWM_BB_ENABLE 0x00000001 501#endif 502#ifndef DWM_BB_BLURREGION 503#define DWM_BB_BLURREGION 0x00000002 504#endif 505typedef struct 506{ 507 DWORD flags; 508 BOOL enable; 509 HRGN blur_region; 510 BOOL transition_on_maxed; 511} DWM_BLURBEHIND; 512 513// Private display data 514 515struct SDL_VideoData 516{ 517 int render; 518 519 bool coinitialized; 520#if !(defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES)) 521 bool oleinitialized; 522#endif // !(defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES)) 523 524 DWORD clipboard_count; 525 526#if !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES) // Xbox doesn't support user32/shcore 527 SDL_SharedObject *userDLL; 528 529 // DisplayConfig functions 530 /* *INDENT-OFF* */ // clang-format off 531 LONG (WINAPI *GetDisplayConfigBufferSizes)( UINT32, UINT32 *, UINT32 *); 532 LONG (WINAPI *QueryDisplayConfig)( UINT32, UINT32 *, DISPLAYCONFIG_PATH_INFO*, UINT32 *, DISPLAYCONFIG_MODE_INFO*, DISPLAYCONFIG_TOPOLOGY_ID*); 533 LONG (WINAPI *DisplayConfigGetDeviceInfo)( DISPLAYCONFIG_DEVICE_INFO_HEADER*); 534 /* *INDENT-ON* */ // clang-format on 535 536 // Touch input functions 537 /* *INDENT-OFF* */ // clang-format off 538 BOOL (WINAPI *CloseTouchInputHandle)( HTOUCHINPUT ); 539 BOOL (WINAPI *GetTouchInputInfo)( HTOUCHINPUT, UINT, PTOUCHINPUT, int ); 540 BOOL (WINAPI *RegisterTouchWindow)( HWND, ULONG ); 541 /* *INDENT-ON* */ // clang-format on 542 543 // DWM functions 544 SDL_SharedObject *dwmapiDLL; 545 /* *INDENT-OFF* */ // clang-format off 546 HRESULT (WINAPI *DwmFlush)(void); 547 HRESULT (WINAPI *DwmEnableBlurBehindWindow)(HWND hwnd, const DWM_BLURBEHIND *pBlurBehind); 548 HRESULT (WINAPI *DwmSetWindowAttribute)(HWND hwnd, DWORD dwAttribute, LPCVOID pvAttribute, DWORD cbAttribute); 549 /* *INDENT-ON* */ // clang-format on 550 551 // Pen input functions 552 /* *INDENT-OFF* */ // clang-format off 553 BOOL (WINAPI *GetPointerType)(UINT32 pointerId, POINTER_INPUT_TYPE *pointerType); 554 BOOL (WINAPI *GetPointerPenInfo)(UINT32 pointerId, POINTER_PEN_INFO *penInfo); 555 BOOL (WINAPI *GetPointerDeviceRects)(HANDLE device, RECT *pointerDeviceRect, RECT *displayRect); 556 /* *INDENT-ON* */ // clang-format on 557 558 // DPI functions 559 SDL_SharedObject *shcoreDLL; 560 /* *INDENT-OFF* */ // clang-format off 561 BOOL (WINAPI *SetProcessDPIAware)( void ); 562 BOOL (WINAPI *SetProcessDpiAwarenessContext)( DPI_AWARENESS_CONTEXT ); 563 DPI_AWARENESS_CONTEXT (WINAPI *SetThreadDpiAwarenessContext)( DPI_AWARENESS_CONTEXT ); 564 DPI_AWARENESS_CONTEXT (WINAPI *GetThreadDpiAwarenessContext)( void ); 565 DPI_AWARENESS (WINAPI *GetAwarenessFromDpiAwarenessContext)( DPI_AWARENESS_CONTEXT ); 566 BOOL (WINAPI *EnableNonClientDpiScaling)( HWND ); 567 BOOL (WINAPI *AdjustWindowRectExForDpi)( LPRECT, DWORD, BOOL, DWORD, UINT ); 568 UINT (WINAPI *GetDpiForWindow)( HWND ); 569 BOOL (WINAPI *AreDpiAwarenessContextsEqual)(DPI_AWARENESS_CONTEXT, DPI_AWARENESS_CONTEXT); 570 BOOL (WINAPI *IsValidDpiAwarenessContext)(DPI_AWARENESS_CONTEXT); 571 HRESULT (WINAPI *GetDpiForMonitor)( HMONITOR hmonitor, 572 MONITOR_DPI_TYPE dpiType, 573 UINT *dpiX, 574 UINT *dpiY ); 575 HRESULT (WINAPI *SetProcessDpiAwareness)(PROCESS_DPI_AWARENESS dpiAwareness); 576 /* *INDENT-ON* */ // clang-format on 577#endif // !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES) 578 579#ifdef HAVE_DXGI_H 580 SDL_SharedObject *dxgiDLL; 581 IDXGIFactory *pDXGIFactory; 582#endif 583 584 bool cleared; 585 586 BYTE *rawinput; 587 UINT rawinput_offset; 588 UINT rawinput_size; 589 UINT rawinput_count; 590 Uint64 last_rawinput_poll; 591 SDL_Point last_raw_mouse_position; 592 bool raw_mouse_enabled; 593 bool raw_keyboard_enabled; 594 bool raw_keyboard_flag_nohotkeys; 595 bool pending_E1_key_sequence; 596 Uint32 raw_input_enabled; 597 SDL_PenID raw_input_fake_pen_id; 598 599 WIN_GameInputData *gameinput_context; 600 601#ifndef SDL_DISABLE_WINDOWS_IME 602 bool ime_initialized; 603 bool ime_enabled; 604 bool ime_available; 605 bool ime_internal_composition; 606 bool ime_internal_candidates; 607 HWND ime_hwnd_main; 608 HWND ime_hwnd_current; 609 bool ime_needs_clear_composition; 610 HIMC ime_himc; 611 612 WCHAR *ime_composition; 613 int ime_composition_length; 614 WCHAR ime_readingstring[16]; 615 int ime_cursor; 616 int ime_selected_start; 617 int ime_selected_length; 618 619 bool ime_candidates_open; 620 bool ime_update_candidates; 621 char *ime_candidates[MAX_CANDLIST]; 622 int ime_candcount; 623 DWORD ime_candref; 624 DWORD ime_candsel; 625 int ime_candlistindexbase; 626 bool ime_horizontal_candidates; 627#endif 628 629#if !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES) 630 COMPOSITIONFORM ime_composition_area; 631 CANDIDATEFORM ime_candidate_area; 632#endif // !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES) 633 634#ifndef SDL_DISABLE_WINDOWS_IME 635 HKL ime_hkl; 636 SDL_SharedObject *ime_himm32; 637 /* *INDENT-OFF* */ // clang-format off 638 UINT (WINAPI *GetReadingString)(HIMC himc, UINT uReadingBufLen, LPWSTR lpwReadingBuf, PINT pnErrorIndex, BOOL *pfIsVertical, PUINT puMaxReadingLen); 639 BOOL (WINAPI *ShowReadingWindow)(HIMC himc, BOOL bShow); 640 LPINPUTCONTEXT2 (WINAPI *ImmLockIMC)(HIMC himc); 641 BOOL (WINAPI *ImmUnlockIMC)(HIMC himc); 642 LPVOID (WINAPI *ImmLockIMCC)(HIMCC himcc); 643 BOOL (WINAPI *ImmUnlockIMCC)(HIMCC himcc); 644 /* *INDENT-ON* */ // clang-format on 645 646#endif // !SDL_DISABLE_WINDOWS_IME 647 648 BYTE pre_hook_key_state[256]; 649 UINT _SDL_WAKEUP; 650 651#if !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES) 652 UINT WM_TASKBAR_BUTTON_CREATED; 653 ITaskbarList3 *taskbar_list; 654#endif 655}; 656 657extern bool g_WindowsEnableMessageLoop; 658extern bool g_WindowsEnableMenuMnemonics; 659extern bool g_WindowFrameUsableWhileCursorHidden; 660 661typedef struct IDirect3D9 IDirect3D9; 662extern bool D3D_LoadDLL(void **pD3DDLL, IDirect3D9 **pDirect3D9Interface); 663 664extern SDL_SystemTheme WIN_GetSystemTheme(void); 665extern bool WIN_IsPerMonitorV2DPIAware(SDL_VideoDevice *_this); 666 667#endif // SDL_windowsvideo_h_ 668
[FILE END]
(C) 2025 0x4248 (C) 2025 4248 Media and 4248 Systems, All part of 0x4248 See LICENCE files for more information. Not all files are by 0x4248 always check Licencing.