Cleanup: use C style comments for GHOST/Win32 text
This commit is contained in:
parent
37d835f0bc
commit
955032ffb0
|
@ -11,8 +11,9 @@
|
|||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
|
||||
// We do not support multiple monitors at the moment
|
||||
/* We do not support multiple monitors at the moment. */
|
||||
#define COMPILE_MULTIMON_STUBS
|
||||
|
||||
#include <multimon.h>
|
||||
|
||||
GHOST_DisplayManagerWin32::GHOST_DisplayManagerWin32(void)
|
||||
|
@ -31,16 +32,15 @@ static BOOL get_dd(DWORD d, DISPLAY_DEVICE *dd)
|
|||
return ::EnumDisplayDevices(NULL, d, dd, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* When you call EnumDisplaySettings with iModeNum set to zero, the operating system
|
||||
* initializes and caches information about the display device. When you call
|
||||
* EnumDisplaySettings with iModeNum set to a non-zero value, the function returns
|
||||
* the information that was cached the last time the function was called with iModeNum
|
||||
* set to zero.
|
||||
*/
|
||||
GHOST_TSuccess GHOST_DisplayManagerWin32::getNumDisplaySettings(uint8_t display,
|
||||
int32_t &numSettings) const
|
||||
{
|
||||
/* When you call #EnumDisplaySettings with #iModeNum set to zero, the operating system
|
||||
* initializes and caches information about the display device.
|
||||
* When you call #EnumDisplaySettings with #iModeNum set to a non-zero value,
|
||||
* the function returns the information that was cached the last time the
|
||||
* function was called with #iModeNum set to zero. */
|
||||
|
||||
DISPLAY_DEVICE display_device;
|
||||
if (!get_dd(display, &display_device))
|
||||
return GHOST_kFailure;
|
||||
|
@ -70,21 +70,20 @@ GHOST_TSuccess GHOST_DisplayManagerWin32::getDisplaySetting(uint8_t display,
|
|||
dm.dmPelsHeight,
|
||||
dm.dmBitsPerPel,
|
||||
dm.dmDisplayFrequency);
|
||||
#endif // WITH_GHOST_DEBUG
|
||||
#endif /* WITH_GHOST_DEBUG */
|
||||
setting.xPixels = dm.dmPelsWidth;
|
||||
setting.yPixels = dm.dmPelsHeight;
|
||||
setting.bpp = dm.dmBitsPerPel;
|
||||
/* When you call the EnumDisplaySettings function, the dmDisplayFrequency member
|
||||
/* When you call the #EnumDisplaySettings function, the #dmDisplayFrequency member
|
||||
* may return with the value 0 or 1. These values represent the display hardware's
|
||||
* default refresh rate. This default rate is typically set by switches on a display
|
||||
* card or computer motherboard, or by a configuration program that does not use
|
||||
* Win32 display functions such as ChangeDisplaySettings.
|
||||
*/
|
||||
/* First, we tried to explicitly set the frequency to 60 if EnumDisplaySettings
|
||||
* Win32 display functions such as #ChangeDisplaySettings. */
|
||||
|
||||
/* First, we tried to explicitly set the frequency to 60 if #EnumDisplaySettings
|
||||
* returned 0 or 1 but this doesn't work since later on an exact match will
|
||||
* be searched. And this will never happen if we change it to 60. Now we rely
|
||||
* on the default h/w setting.
|
||||
*/
|
||||
* on the default hardware setting. */
|
||||
setting.frequency = dm.dmDisplayFrequency;
|
||||
success = GHOST_kSuccess;
|
||||
}
|
||||
|
@ -117,22 +116,23 @@ GHOST_TSuccess GHOST_DisplayManagerWin32::setCurrentDisplaySetting(
|
|||
break;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* dm.dmBitsPerPel = match.bpp;
|
||||
* dm.dmPelsWidth = match.xPixels;
|
||||
* dm.dmPelsHeight = match.yPixels;
|
||||
* dm.dmDisplayFrequency = match.frequency;
|
||||
* dm.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY;
|
||||
* dm.dmSize = sizeof(DEVMODE);
|
||||
* dm.dmDriverExtra = 0;
|
||||
*/
|
||||
#if 0
|
||||
dm.dmBitsPerPel = match.bpp;
|
||||
dm.dmPelsWidth = match.xPixels;
|
||||
dm.dmPelsHeight = match.yPixels;
|
||||
dm.dmDisplayFrequency = match.frequency;
|
||||
dm.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY;
|
||||
dm.dmSize = sizeof(DEVMODE);
|
||||
dm.dmDriverExtra = 0;
|
||||
#endif
|
||||
|
||||
#ifdef WITH_GHOST_DEBUG
|
||||
printf("display change: Requested settings:\n");
|
||||
printf(" dmBitsPerPel=%d\n", dm.dmBitsPerPel);
|
||||
printf(" dmPelsWidth=%d\n", dm.dmPelsWidth);
|
||||
printf(" dmPelsHeight=%d\n", dm.dmPelsHeight);
|
||||
printf(" dmDisplayFrequency=%d\n", dm.dmDisplayFrequency);
|
||||
#endif // WITH_GHOST_DEBUG
|
||||
#endif /* WITH_GHOST_DEBUG */
|
||||
|
||||
LONG status = ::ChangeDisplaySettings(&dm, CDS_FULLSCREEN);
|
||||
#ifdef WITH_GHOST_DEBUG
|
||||
|
@ -166,6 +166,6 @@ GHOST_TSuccess GHOST_DisplayManagerWin32::setCurrentDisplaySetting(
|
|||
printf("display change: Return value invalid\n");
|
||||
break;
|
||||
}
|
||||
#endif // WITH_GHOST_DEBUG
|
||||
#endif /* WITH_GHOST_DEBUG */
|
||||
return status == DISP_CHANGE_SUCCESSFUL ? GHOST_kSuccess : GHOST_kFailure;
|
||||
}
|
||||
|
|
|
@ -13,9 +13,9 @@
|
|||
#include "utfconv.h"
|
||||
|
||||
#ifdef WITH_GHOST_DEBUG
|
||||
// utility
|
||||
/* utility */
|
||||
void printLastError(void);
|
||||
#endif // WITH_GHOST_DEBUG
|
||||
#endif /* WITH_GHOST_DEBUG */
|
||||
|
||||
GHOST_DropTargetWin32::GHOST_DropTargetWin32(GHOST_WindowWin32 *window, GHOST_SystemWin32 *system)
|
||||
: m_window(window), m_system(system)
|
||||
|
@ -83,7 +83,7 @@ HRESULT __stdcall GHOST_DropTargetWin32::DragEnter(IDataObject *pDataObject,
|
|||
POINTL pt,
|
||||
DWORD *pdwEffect)
|
||||
{
|
||||
// we accept all drop by default
|
||||
/* We accept all drop by default. */
|
||||
m_window->setAcceptDragOperation(true);
|
||||
*pdwEffect = DROPEFFECT_NONE;
|
||||
|
||||
|
@ -103,7 +103,7 @@ HRESULT __stdcall GHOST_DropTargetWin32::DragOver(DWORD grfKeyState, POINTL pt,
|
|||
}
|
||||
else {
|
||||
*pdwEffect = DROPEFFECT_NONE;
|
||||
// XXX Uncomment to test drop. Drop will not be called if pdwEffect == DROPEFFECT_NONE.
|
||||
/* XXX Uncomment to test drop. Drop will not be called if `pdwEffect == DROPEFFECT_NONE`. */
|
||||
// *pdwEffect = DROPEFFECT_COPY;
|
||||
}
|
||||
m_system->pushDragDropEvent(
|
||||
|
@ -170,7 +170,7 @@ GHOST_TDragnDropTypes GHOST_DropTargetWin32::getGhostType(IDataObject *pDataObje
|
|||
return GHOST_kDragnDropTypeString;
|
||||
}
|
||||
|
||||
// Filesnames
|
||||
/* Files-names. */
|
||||
fmtetc.cfFormat = CF_HDROP;
|
||||
if (pDataObject->QueryGetData(&fmtetc) == S_OK) {
|
||||
return GHOST_kDragnDropTypeFilenames;
|
||||
|
@ -195,7 +195,7 @@ void *GHOST_DropTargetWin32::getGhostData(IDataObject *pDataObject)
|
|||
default:
|
||||
#ifdef WITH_GHOST_DEBUG
|
||||
::printf("\nGHOST_kDragnDropTypeUnknown");
|
||||
#endif // WITH_GHOST_DEBUG
|
||||
#endif /* WITH_GHOST_DEBUG */
|
||||
return NULL;
|
||||
break;
|
||||
}
|
||||
|
@ -212,8 +212,8 @@ void *GHOST_DropTargetWin32::getDropDataAsFilenames(IDataObject *pDataObject)
|
|||
STGMEDIUM stgmed;
|
||||
HDROP hdrop;
|
||||
|
||||
// Check if dataobject supplies the format we want.
|
||||
// Double checking here, first in getGhostType.
|
||||
/* Check if dataobject supplies the format we want.
|
||||
* Double checking here, first in getGhostType. */
|
||||
if (pDataObject->QueryGetData(&fmtetc) == S_OK) {
|
||||
if (pDataObject->GetData(&fmtetc, &stgmed) == S_OK) {
|
||||
hdrop = (HDROP)::GlobalLock(stgmed.hGlobal);
|
||||
|
@ -233,14 +233,14 @@ void *GHOST_DropTargetWin32::getDropDataAsFilenames(IDataObject *pDataObject)
|
|||
if (!(temp_path = alloc_utf_8_from_16(fpath, 0))) {
|
||||
continue;
|
||||
}
|
||||
// Just ignore paths that could not be converted verbatim.
|
||||
/* Just ignore paths that could not be converted verbatim. */
|
||||
|
||||
strArray->strings[nvalid] = (uint8_t *)temp_path;
|
||||
strArray->count = nvalid + 1;
|
||||
nvalid++;
|
||||
}
|
||||
}
|
||||
// Free up memory.
|
||||
/* Free up memory. */
|
||||
::GlobalUnlock(stgmed.hGlobal);
|
||||
::ReleaseStgMedium(&stgmed);
|
||||
|
||||
|
@ -256,8 +256,8 @@ void *GHOST_DropTargetWin32::getDropDataAsString(IDataObject *pDataObject)
|
|||
FORMATETC fmtetc = {CF_UNICODETEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
|
||||
STGMEDIUM stgmed;
|
||||
|
||||
// Try unicode first.
|
||||
// Check if dataobject supplies the format we want.
|
||||
/* Try unicode first.
|
||||
* Check if dataobject supplies the format we want. */
|
||||
if (pDataObject->QueryGetData(&fmtetc) == S_OK) {
|
||||
if (pDataObject->GetData(&fmtetc, &stgmed) == S_OK) {
|
||||
LPCWSTR wstr = (LPCWSTR)::GlobalLock(stgmed.hGlobal);
|
||||
|
@ -265,13 +265,13 @@ void *GHOST_DropTargetWin32::getDropDataAsString(IDataObject *pDataObject)
|
|||
::GlobalUnlock(stgmed.hGlobal);
|
||||
return NULL;
|
||||
}
|
||||
// Free memory
|
||||
/* Free memory. */
|
||||
::GlobalUnlock(stgmed.hGlobal);
|
||||
::ReleaseStgMedium(&stgmed);
|
||||
#ifdef WITH_GHOST_DEBUG
|
||||
::printf("\n<converted droped unicode string>\n%s\n</droped converted unicode string>\n",
|
||||
tmp_string);
|
||||
#endif // WITH_GHOST_DEBUG
|
||||
#endif /* WITH_GHOST_DEBUG */
|
||||
return tmp_string;
|
||||
}
|
||||
}
|
||||
|
@ -293,7 +293,7 @@ void *GHOST_DropTargetWin32::getDropDataAsString(IDataObject *pDataObject)
|
|||
::GlobalUnlock(stgmed.hGlobal);
|
||||
return NULL;
|
||||
}
|
||||
// Free memory
|
||||
/* Free memory. */
|
||||
::GlobalUnlock(stgmed.hGlobal);
|
||||
::ReleaseStgMedium(&stgmed);
|
||||
|
||||
|
@ -307,13 +307,13 @@ void *GHOST_DropTargetWin32::getDropDataAsString(IDataObject *pDataObject)
|
|||
int GHOST_DropTargetWin32::WideCharToANSI(LPCWSTR in, char *&out)
|
||||
{
|
||||
int size;
|
||||
out = NULL; // caller should free if != NULL
|
||||
out = NULL; /* caller should free if != NULL */
|
||||
|
||||
// Get the required size.
|
||||
size = ::WideCharToMultiByte(CP_ACP, // System Default Codepage
|
||||
0x00000400, // WC_NO_BEST_FIT_CHARS
|
||||
/* Get the required size. */
|
||||
size = ::WideCharToMultiByte(CP_ACP, /* System Default Codepage */
|
||||
0x00000400, /* WC_NO_BEST_FIT_CHARS */
|
||||
in,
|
||||
-1, //-1 null terminated, makes output null terminated too.
|
||||
-1, /* -1 null terminated, makes output null terminated too. */
|
||||
NULL,
|
||||
0,
|
||||
NULL,
|
||||
|
@ -322,7 +322,7 @@ int GHOST_DropTargetWin32::WideCharToANSI(LPCWSTR in, char *&out)
|
|||
if (!size) {
|
||||
#ifdef WITH_GHOST_DEBUG
|
||||
::printLastError();
|
||||
#endif // WITH_GHOST_DEBUG
|
||||
#endif /* WITH_GHOST_DEBUG */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -337,7 +337,7 @@ int GHOST_DropTargetWin32::WideCharToANSI(LPCWSTR in, char *&out)
|
|||
if (!size) {
|
||||
#ifdef WITH_GHOST_DEBUG
|
||||
::printLastError();
|
||||
#endif // WITH_GHOST_DEBUG
|
||||
#endif /* WITH_GHOST_DEBUG */
|
||||
::free(out);
|
||||
out = NULL;
|
||||
}
|
||||
|
@ -362,4 +362,4 @@ void printLastError(void)
|
|||
LocalFree(s);
|
||||
}
|
||||
}
|
||||
#endif // WITH_GHOST_DEBUG
|
||||
#endif /* WITH_GHOST_DEBUG */
|
||||
|
|
|
@ -512,4 +512,4 @@ void GHOST_ImeWin32::UpdateInfo(HWND window_handle)
|
|||
}
|
||||
}
|
||||
|
||||
#endif // WITH_INPUT_IME
|
||||
#endif /* WITH_INPUT_IME */
|
||||
|
|
|
@ -351,4 +351,4 @@ class GHOST_ImeWin32 {
|
|||
bool is_first, is_enable;
|
||||
};
|
||||
|
||||
#endif // WITH_INPUT_IME
|
||||
#endif /* WITH_INPUT_IME */
|
||||
|
|
|
@ -7,10 +7,10 @@ GHOST_NDOFManagerWin32::GHOST_NDOFManagerWin32(GHOST_System &sys) : GHOST_NDOFMa
|
|||
/* pass */
|
||||
}
|
||||
|
||||
// whether multi-axis functionality is available (via the OS or driver)
|
||||
// does not imply that a device is plugged in or being used
|
||||
/* Whether multi-axis functionality is available (via the OS or driver)
|
||||
* does not imply that a device is plugged in or being used. */
|
||||
bool GHOST_NDOFManagerWin32::available()
|
||||
{
|
||||
// always available since RawInput is built into Windows
|
||||
/* Always available since RawInput is built into Windows. */
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -42,47 +42,48 @@
|
|||
# include "GHOST_NDOFManagerWin32.h"
|
||||
#endif
|
||||
|
||||
// Key code values not found in winuser.h
|
||||
/* Key code values not found in `winuser.h`. */
|
||||
#ifndef VK_MINUS
|
||||
# define VK_MINUS 0xBD
|
||||
#endif // VK_MINUS
|
||||
#endif /* VK_MINUS */
|
||||
#ifndef VK_SEMICOLON
|
||||
# define VK_SEMICOLON 0xBA
|
||||
#endif // VK_SEMICOLON
|
||||
#endif /* VK_SEMICOLON */
|
||||
#ifndef VK_PERIOD
|
||||
# define VK_PERIOD 0xBE
|
||||
#endif // VK_PERIOD
|
||||
#endif /* VK_PERIOD */
|
||||
#ifndef VK_COMMA
|
||||
# define VK_COMMA 0xBC
|
||||
#endif // VK_COMMA
|
||||
#endif /* VK_COMMA */
|
||||
#ifndef VK_BACK_QUOTE
|
||||
# define VK_BACK_QUOTE 0xC0
|
||||
#endif // VK_BACK_QUOTE
|
||||
#endif /* VK_BACK_QUOTE */
|
||||
#ifndef VK_SLASH
|
||||
# define VK_SLASH 0xBF
|
||||
#endif // VK_SLASH
|
||||
#endif /* VK_SLASH */
|
||||
#ifndef VK_BACK_SLASH
|
||||
# define VK_BACK_SLASH 0xDC
|
||||
#endif // VK_BACK_SLASH
|
||||
#endif /* VK_BACK_SLASH */
|
||||
#ifndef VK_EQUALS
|
||||
# define VK_EQUALS 0xBB
|
||||
#endif // VK_EQUALS
|
||||
#endif /* VK_EQUALS */
|
||||
#ifndef VK_OPEN_BRACKET
|
||||
# define VK_OPEN_BRACKET 0xDB
|
||||
#endif // VK_OPEN_BRACKET
|
||||
#endif /* VK_OPEN_BRACKET */
|
||||
#ifndef VK_CLOSE_BRACKET
|
||||
# define VK_CLOSE_BRACKET 0xDD
|
||||
#endif // VK_CLOSE_BRACKET
|
||||
#endif /* VK_CLOSE_BRACKET */
|
||||
#ifndef VK_GR_LESS
|
||||
# define VK_GR_LESS 0xE2
|
||||
#endif // VK_GR_LESS
|
||||
#endif /* VK_GR_LESS */
|
||||
|
||||
/* Workaround for some laptop touchpads, some of which seems to
|
||||
/**
|
||||
Workaround for some laptop touch-pads, some of which seems to
|
||||
* have driver issues which makes it so window function receives
|
||||
* the message, but PeekMessage doesn't pick those messages for
|
||||
* the message, but #PeekMessage doesn't pick those messages for
|
||||
* some reason.
|
||||
*
|
||||
* We send a dummy WM_USER message to force PeekMessage to receive
|
||||
* We send a dummy WM_USER message to force #PeekMessage to receive
|
||||
* something, making it so blender's window manager sees the new
|
||||
* messages coming in.
|
||||
*/
|
||||
|
@ -101,19 +102,19 @@ static void initRawInput()
|
|||
RAWINPUTDEVICE devices[DEVICE_COUNT];
|
||||
memset(devices, 0, DEVICE_COUNT * sizeof(RAWINPUTDEVICE));
|
||||
|
||||
// Initiates WM_INPUT messages from keyboard
|
||||
// That way GHOST can retrieve true keys
|
||||
/* Initiates WM_INPUT messages from keyboard
|
||||
* That way GHOST can retrieve true keys. */
|
||||
devices[0].usUsagePage = 0x01;
|
||||
devices[0].usUsage = 0x06; /* http://msdn.microsoft.com/en-us/windows/hardware/gg487473.aspx */
|
||||
|
||||
#ifdef WITH_INPUT_NDOF
|
||||
// multi-axis mouse (SpaceNavigator, etc.)
|
||||
/* multi-axis mouse (SpaceNavigator, etc.). */
|
||||
devices[1].usUsagePage = 0x01;
|
||||
devices[1].usUsage = 0x08;
|
||||
#endif
|
||||
|
||||
if (RegisterRawInputDevices(devices, DEVICE_COUNT, sizeof(RAWINPUTDEVICE)))
|
||||
; // yay!
|
||||
; /* yay! */
|
||||
else
|
||||
GHOST_PRINTF("could not register for RawInput: %d\n", (int)GetLastError());
|
||||
|
||||
|
@ -131,15 +132,15 @@ GHOST_SystemWin32::GHOST_SystemWin32()
|
|||
|
||||
m_consoleStatus = 1;
|
||||
|
||||
// Tell Windows we are per monitor DPI aware. This disables the default
|
||||
// blurry scaling and enables WM_DPICHANGED to allow us to draw at proper DPI.
|
||||
/* Tell Windows we are per monitor DPI aware. This disables the default
|
||||
* blurry scaling and enables WM_DPICHANGED to allow us to draw at proper DPI. */
|
||||
SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
|
||||
|
||||
// Check if current keyboard layout uses AltGr and save keylayout ID for
|
||||
// specialized handling if keys like VK_OEM_*. I.e. french keylayout
|
||||
// generates VK_OEM_8 for their exclamation key (key left of right shift)
|
||||
/* Check if current keyboard layout uses AltGr and save keylayout ID for
|
||||
* specialized handling if keys like VK_OEM_*. I.e. french keylayout
|
||||
* generates #VK_OEM_8 for their exclamation key (key left of right shift). */
|
||||
this->handleKeyboardChange();
|
||||
// Require COM for GHOST_DropTargetWin32 created in GHOST_WindowWin32.
|
||||
/* Require COM for GHOST_DropTargetWin32 created in GHOST_WindowWin32. */
|
||||
OleInitialize(0);
|
||||
|
||||
#ifdef WITH_INPUT_NDOF
|
||||
|
@ -149,7 +150,7 @@ GHOST_SystemWin32::GHOST_SystemWin32()
|
|||
|
||||
GHOST_SystemWin32::~GHOST_SystemWin32()
|
||||
{
|
||||
// Shutdown COM
|
||||
/* Shutdown COM. */
|
||||
OleUninitialize();
|
||||
|
||||
if (isStartedFromCommandPrompt()) {
|
||||
|
@ -159,7 +160,7 @@ GHOST_SystemWin32::~GHOST_SystemWin32()
|
|||
|
||||
uint64_t GHOST_SystemWin32::performanceCounterToMillis(__int64 perf_ticks) const
|
||||
{
|
||||
// Calculate the time passed since system initialization.
|
||||
/* Calculate the time passed since system initialization. */
|
||||
__int64 delta = (perf_ticks - m_start) * 1000;
|
||||
|
||||
uint64_t t = (uint64_t)(delta / m_freq);
|
||||
|
@ -173,12 +174,12 @@ uint64_t GHOST_SystemWin32::tickCountToMillis(__int64 ticks) const
|
|||
|
||||
uint64_t GHOST_SystemWin32::getMilliSeconds() const
|
||||
{
|
||||
// Hardware does not support high resolution timers. We will use GetTickCount instead then.
|
||||
/* Hardware does not support high resolution timers. We will use GetTickCount instead then. */
|
||||
if (!m_hasPerformanceCounter) {
|
||||
return tickCountToMillis(::GetTickCount());
|
||||
}
|
||||
|
||||
// Retrieve current count
|
||||
/* Retrieve current count */
|
||||
__int64 count = 0;
|
||||
::QueryPerformanceCounter((LARGE_INTEGER *)&count);
|
||||
|
||||
|
@ -233,7 +234,7 @@ GHOST_IWindow *GHOST_SystemWin32::createWindow(const char *title,
|
|||
is_dialog);
|
||||
|
||||
if (window->getValid()) {
|
||||
// Store the pointer to the window
|
||||
/* Store the pointer to the window */
|
||||
m_windowManager->addWindow(window);
|
||||
m_windowManager->setActiveWindow(window);
|
||||
}
|
||||
|
@ -395,10 +396,10 @@ bool GHOST_SystemWin32::processEvents(bool waitForEvent)
|
|||
|
||||
driveTrackpad();
|
||||
|
||||
// Process all the events waiting for us
|
||||
/* Process all the events waiting for us. */
|
||||
while (::PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE) != 0) {
|
||||
// TranslateMessage doesn't alter the message, and doesn't change our raw keyboard data.
|
||||
// Needed for MapVirtualKey or if we ever need to get chars from wm_ime_char or similar.
|
||||
/* #TranslateMessage doesn't alter the message, and doesn't change our raw keyboard data.
|
||||
* Needed for #MapVirtualKey or if we ever need to get chars from wm_ime_char or similar. */
|
||||
::TranslateMessage(&msg);
|
||||
::DispatchMessageW(&msg);
|
||||
hasEventHandled = true;
|
||||
|
@ -489,7 +490,7 @@ GHOST_TSuccess GHOST_SystemWin32::init()
|
|||
initRawInput();
|
||||
|
||||
m_lfstart = ::GetTickCount();
|
||||
// Determine whether this system has a high frequency performance counter. */
|
||||
/* Determine whether this system has a high frequency performance counter. */
|
||||
m_hasPerformanceCounter = ::QueryPerformanceFrequency((LARGE_INTEGER *)&m_freq) == TRUE;
|
||||
if (m_hasPerformanceCounter) {
|
||||
GHOST_PRINT("GHOST_SystemWin32::init: High Frequency Performance Timer available\n");
|
||||
|
@ -520,7 +521,7 @@ GHOST_TSuccess GHOST_SystemWin32::init()
|
|||
wc.lpszMenuName = 0;
|
||||
wc.lpszClassName = L"GHOST_WindowClass";
|
||||
|
||||
// Use RegisterClassEx for setting small icon
|
||||
/* Use #RegisterClassEx for setting small icon. */
|
||||
if (::RegisterClassW(&wc) == 0) {
|
||||
success = GHOST_kFailure;
|
||||
}
|
||||
|
@ -538,8 +539,7 @@ GHOST_TKey GHOST_SystemWin32::hardKey(RAWINPUT const &raw, bool *r_keyDown)
|
|||
{
|
||||
GHOST_TKey key = GHOST_kKeyUnknown;
|
||||
|
||||
// RI_KEY_BREAK doesn't work for sticky keys release, so we also
|
||||
// check for the up message
|
||||
/* #RI_KEY_BREAK doesn't work for sticky keys release, so we also check for the up message. */
|
||||
unsigned int msg = raw.data.keyboard.Message;
|
||||
*r_keyDown = !(raw.data.keyboard.Flags & RI_KEY_BREAK) && msg != WM_KEYUP && msg != WM_SYSKEYUP;
|
||||
|
||||
|
@ -600,11 +600,11 @@ GHOST_TKey GHOST_SystemWin32::convertKey(short vKey, short scanCode, short exten
|
|||
GHOST_TKey key;
|
||||
|
||||
if ((vKey >= '0') && (vKey <= '9')) {
|
||||
// VK_0 thru VK_9 are the same as ASCII '0' thru '9' (0x30 - 0x39)
|
||||
/* VK_0 thru VK_9 are the same as ASCII '0' thru '9' (0x30 - 0x39). */
|
||||
key = (GHOST_TKey)(vKey - '0' + GHOST_kKey0);
|
||||
}
|
||||
else if ((vKey >= 'A') && (vKey <= 'Z')) {
|
||||
// VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' (0x41 - 0x5A)
|
||||
/* VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' (0x41 - 0x5A). */
|
||||
key = (GHOST_TKey)(vKey - 'A' + GHOST_kKeyA);
|
||||
}
|
||||
else if ((vKey >= VK_F1) && (vKey <= VK_F24)) {
|
||||
|
@ -1109,7 +1109,7 @@ void GHOST_SystemWin32::processWheelEvent(GHOST_WindowWin32 *window, WPARAM wPar
|
|||
int delta = GET_WHEEL_DELTA_WPARAM(wParam);
|
||||
|
||||
if (acc * delta < 0) {
|
||||
// scroll direction reversed.
|
||||
/* Scroll direction reversed. */
|
||||
acc = 0;
|
||||
}
|
||||
acc += delta;
|
||||
|
@ -1163,8 +1163,8 @@ GHOST_EventKey *GHOST_SystemWin32::processKeyEvent(GHOST_WindowWin32 *window, RA
|
|||
if (ctrl_pressed && !alt_pressed) {
|
||||
utf8_char[0] = '\0';
|
||||
}
|
||||
// Don't call ToUnicodeEx on dead keys as it clears the buffer and so won't allow diacritical
|
||||
// composition.
|
||||
/* Don't call #ToUnicodeEx on dead keys as it clears the buffer and so won't allow diacritical
|
||||
* composition. */
|
||||
else if (MapVirtualKeyW(vk, 2) != 0) {
|
||||
/* TODO: #ToUnicodeEx can respond with up to 4 utf16 chars (only 2 here).
|
||||
* Could be up to 24 utf8 bytes. */
|
||||
|
@ -1201,7 +1201,9 @@ GHOST_EventKey *GHOST_SystemWin32::processKeyEvent(GHOST_WindowWin32 *window, RA
|
|||
is_repeat,
|
||||
utf8_char);
|
||||
|
||||
// GHOST_PRINTF("%c\n", ascii); // we already get this info via EventPrinter
|
||||
#if 0 /* we already get this info via EventPrinter. */
|
||||
GHOST_PRINTF("%c\n", ascii);
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
event = NULL;
|
||||
|
@ -1305,7 +1307,7 @@ bool GHOST_SystemWin32::processNDOF(RAWINPUT const &raw)
|
|||
uint64_t now = getMilliSeconds();
|
||||
|
||||
static bool firstEvent = true;
|
||||
if (firstEvent) { // determine exactly which device is plugged in
|
||||
if (firstEvent) { /* Determine exactly which device is plugged in. */
|
||||
RID_DEVICE_INFO info;
|
||||
unsigned infoSize = sizeof(RID_DEVICE_INFO);
|
||||
info.cbSize = infoSize;
|
||||
|
@ -1319,40 +1321,38 @@ bool GHOST_SystemWin32::processNDOF(RAWINPUT const &raw)
|
|||
firstEvent = false;
|
||||
}
|
||||
|
||||
// The NDOF manager sends button changes immediately, and *pretends* to
|
||||
// send motion. Mark as 'sent' so motion will always get dispatched.
|
||||
/* The NDOF manager sends button changes immediately, and *pretends* to
|
||||
* send motion. Mark as 'sent' so motion will always get dispatched. */
|
||||
eventSent = true;
|
||||
|
||||
BYTE const *data = raw.data.hid.bRawData;
|
||||
|
||||
BYTE packetType = data[0];
|
||||
switch (packetType) {
|
||||
case 1: // translation
|
||||
{
|
||||
case 1: { /* Translation. */
|
||||
const short *axis = (short *)(data + 1);
|
||||
// massage into blender view coords (same goes for rotation)
|
||||
/* Massage into blender view coords (same goes for rotation). */
|
||||
const int t[3] = {axis[0], -axis[2], axis[1]};
|
||||
m_ndofManager->updateTranslation(t, now);
|
||||
|
||||
if (raw.data.hid.dwSizeHid == 13) {
|
||||
// this report also includes rotation
|
||||
/* This report also includes rotation. */
|
||||
const int r[3] = {-axis[3], axis[5], -axis[4]};
|
||||
m_ndofManager->updateRotation(r, now);
|
||||
|
||||
// I've never gotten one of these, has anyone else?
|
||||
/* I've never gotten one of these, has anyone else? */
|
||||
GHOST_PRINT("ndof: combined T + R\n");
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2: // rotation
|
||||
{
|
||||
case 2: { /* Rotation. */
|
||||
|
||||
const short *axis = (short *)(data + 1);
|
||||
const int r[3] = {-axis[0], axis[2], -axis[1]};
|
||||
m_ndofManager->updateRotation(r, now);
|
||||
break;
|
||||
}
|
||||
case 3: // buttons
|
||||
{
|
||||
case 3: { /* Buttons. */
|
||||
int button_bits;
|
||||
memcpy(&button_bits, data + 1, sizeof(button_bits));
|
||||
m_ndofManager->updateButtons(button_bits, now);
|
||||
|
@ -1361,7 +1361,7 @@ bool GHOST_SystemWin32::processNDOF(RAWINPUT const &raw)
|
|||
}
|
||||
return eventSent;
|
||||
}
|
||||
#endif // WITH_INPUT_NDOF
|
||||
#endif /* WITH_INPUT_NDOF */
|
||||
|
||||
void GHOST_SystemWin32::driveTrackpad()
|
||||
{
|
||||
|
@ -1424,8 +1424,8 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
|||
if (hwnd) {
|
||||
|
||||
if (msg == WM_NCCREATE) {
|
||||
// Tell Windows to automatically handle scaling of non-client areas
|
||||
// such as the caption bar. EnableNonClientDpiScaling was introduced in Windows 10
|
||||
/* Tell Windows to automatically handle scaling of non-client areas
|
||||
* such as the caption bar. #EnableNonClientDpiScaling was introduced in Windows 10. */
|
||||
HMODULE m_user32 = ::LoadLibrary("User32.dll");
|
||||
if (m_user32) {
|
||||
GHOST_WIN32_EnableNonClientDpiScaling fpEnableNonClientDpiScaling =
|
||||
|
@ -1440,7 +1440,7 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
|||
GHOST_WindowWin32 *window = (GHOST_WindowWin32 *)::GetWindowLongPtr(hwnd, GWLP_USERDATA);
|
||||
if (window) {
|
||||
switch (msg) {
|
||||
// we need to check if new key layout has AltGr
|
||||
/* We need to check if new key layout has AltGr. */
|
||||
case WM_INPUTLANGCHANGE: {
|
||||
system->handleKeyboardChange();
|
||||
#ifdef WITH_INPUT_IME
|
||||
|
@ -1449,9 +1449,9 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
|||
#endif
|
||||
break;
|
||||
}
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Keyboard events, processed
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/* ==========================
|
||||
* Keyboard events, processed
|
||||
* ========================== */
|
||||
case WM_INPUT: {
|
||||
RAWINPUT raw;
|
||||
RAWINPUT *raw_ptr = &raw;
|
||||
|
@ -1479,9 +1479,9 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
|||
break;
|
||||
}
|
||||
#ifdef WITH_INPUT_IME
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// IME events, processed, read more in GHOST_IME.h
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/* =================================================
|
||||
* IME events, processed, read more in `GHOST_IME.h`
|
||||
* ================================================= */
|
||||
case WM_IME_NOTIFY: {
|
||||
/* Update conversion status when IME is changed or input mode is changed. */
|
||||
if (wParam == IMN_SETOPENSTATUS || wParam == IMN_SETCONVERSIONMODE) {
|
||||
|
@ -1529,52 +1529,47 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
|||
break;
|
||||
}
|
||||
#endif /* WITH_INPUT_IME */
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Keyboard events, ignored
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/* ========================
|
||||
* Keyboard events, ignored
|
||||
* ======================== */
|
||||
case WM_KEYDOWN:
|
||||
case WM_SYSKEYDOWN:
|
||||
case WM_KEYUP:
|
||||
case WM_SYSKEYUP:
|
||||
/* These functions were replaced by #WM_INPUT. */
|
||||
case WM_CHAR:
|
||||
/* The WM_CHAR message is posted to the window with the keyboard focus when
|
||||
* a WM_KEYDOWN message is translated by the TranslateMessage function. WM_CHAR
|
||||
* contains the character code of the key that was pressed.
|
||||
*/
|
||||
/* The #WM_CHAR message is posted to the window with the keyboard focus when
|
||||
* a WM_KEYDOWN message is translated by the #TranslateMessage function.
|
||||
* WM_CHAR contains the character code of the key that was pressed. */
|
||||
case WM_DEADCHAR:
|
||||
/* The WM_DEADCHAR message is posted to the window with the keyboard focus when a
|
||||
* WM_KEYUP message is translated by the TranslateMessage function. WM_DEADCHAR
|
||||
/* The #WM_DEADCHAR message is posted to the window with the keyboard focus when a
|
||||
* WM_KEYUP message is translated by the #TranslateMessage function. WM_DEADCHAR
|
||||
* specifies a character code generated by a dead key. A dead key is a key that
|
||||
* generates a character, such as the umlaut (double-dot), that is combined with
|
||||
* another character to form a composite character. For example, the umlaut-O
|
||||
* character (Ö) is generated by typing the dead key for the umlaut character, and
|
||||
* then typing the O key.
|
||||
*/
|
||||
* then typing the O key. */
|
||||
break;
|
||||
case WM_SYSDEADCHAR:
|
||||
/* The WM_SYSDEADCHAR message is sent to the window with the keyboard focus when
|
||||
* a WM_SYSKEYDOWN message is translated by the TranslateMessage function.
|
||||
/* The #WM_SYSDEADCHAR message is sent to the window with the keyboard focus when
|
||||
* a WM_SYSKEYDOWN message is translated by the #TranslateMessage function.
|
||||
* WM_SYSDEADCHAR specifies the character code of a system dead key - that is,
|
||||
* a dead key that is pressed while holding down the alt key.
|
||||
*/
|
||||
* a dead key that is pressed while holding down the alt key. */
|
||||
case WM_SYSCHAR:
|
||||
/* The WM_SYSCHAR message is sent to the window with the keyboard focus when
|
||||
* a WM_SYSCHAR message is translated by the TranslateMessage function.
|
||||
/* #The WM_SYSCHAR message is sent to the window with the keyboard focus when
|
||||
* a WM_SYSCHAR message is translated by the #TranslateMessage function.
|
||||
* WM_SYSCHAR specifies the character code of a dead key - that is,
|
||||
* a dead key that is pressed while holding down the alt key.
|
||||
* To prevent the sound, DefWindowProc must be avoided by return
|
||||
*/
|
||||
* To prevent the sound, #DefWindowProc must be avoided by return. */
|
||||
break;
|
||||
case WM_SYSCOMMAND:
|
||||
/* The WM_SYSCOMMAND message is sent to the window when system commands such as
|
||||
/* The #WM_SYSCOMMAND message is sent to the window when system commands such as
|
||||
* maximize, minimize or close the window are triggered. Also it is sent when ALT
|
||||
* button is press for menu. To prevent this we must return preventing DefWindowProc.
|
||||
* button is press for menu. To prevent this we must return preventing #DefWindowProc.
|
||||
*
|
||||
* Note that the four low-order bits of the wParam parameter are used internally by the
|
||||
* OS. To obtain the correct result when testing the value of wParam, an application must
|
||||
* combine the value 0xFFF0 with the wParam value by using the bit-wise AND operator.
|
||||
*/
|
||||
* combine the value 0xFFF0 with the wParam value by using the bit-wise AND operator. */
|
||||
switch (wParam & 0xFFF0) {
|
||||
case SC_KEYMENU:
|
||||
eventHandled = true;
|
||||
|
@ -1609,9 +1604,9 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
|||
}
|
||||
}
|
||||
break;
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Wintab events, processed
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/* ========================
|
||||
* Wintab events, processed
|
||||
* ======================== */
|
||||
case WT_CSRCHANGE: {
|
||||
WINTAB_PRINTF("HWND %p HCTX %p WT_CSRCHANGE\n", window->getHWND(), (void *)lParam);
|
||||
GHOST_Wintab *wt = window->getWintab();
|
||||
|
@ -1667,9 +1662,9 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
|||
processWintabEvent(window);
|
||||
eventHandled = true;
|
||||
break;
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Wintab events, debug
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/* ====================
|
||||
* Wintab events, debug
|
||||
* ==================== */
|
||||
case WT_CTXOPEN:
|
||||
WINTAB_PRINTF("HWND %p HCTX %p WT_CTXOPEN\n", window->getHWND(), (void *)wParam);
|
||||
break;
|
||||
|
@ -1693,9 +1688,9 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
|||
break;
|
||||
}
|
||||
break;
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Pointer events, processed
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/* =========================
|
||||
* Pointer events, processed
|
||||
* ========================= */
|
||||
case WM_POINTERUPDATE:
|
||||
case WM_POINTERDOWN:
|
||||
case WM_POINTERUP:
|
||||
|
@ -1715,9 +1710,9 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
|||
}
|
||||
break;
|
||||
}
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Mouse events, processed
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/* =======================
|
||||
* Mouse events, processed
|
||||
* ======================= */
|
||||
case WM_LBUTTONDOWN:
|
||||
event = processButtonEvent(GHOST_kEventButtonDown, window, GHOST_kButtonMaskLeft);
|
||||
break;
|
||||
|
@ -1792,13 +1787,13 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
|||
* arrow if it is not in the client area.
|
||||
*/
|
||||
if (LOWORD(lParam) == HTCLIENT) {
|
||||
// Load the current cursor
|
||||
/* Load the current cursor. */
|
||||
window->loadCursor(window->getCursorVisibility(), window->getCursorShape());
|
||||
// Bypass call to DefWindowProc
|
||||
/* Bypass call to #DefWindowProc. */
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
// Outside of client area show standard cursor
|
||||
/* Outside of client area show standard cursor. */
|
||||
window->loadCursor(true, GHOST_kStandardCursorDefault);
|
||||
}
|
||||
break;
|
||||
|
@ -1814,9 +1809,9 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
|||
}
|
||||
break;
|
||||
}
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Mouse events, ignored
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/* =====================
|
||||
* Mouse events, ignored
|
||||
* ===================== */
|
||||
case WM_NCMOUSEMOVE:
|
||||
/* The WM_NCMOUSEMOVE message is posted to a window when the cursor is moved
|
||||
* within the non-client area of the window. This message is posted to the window that
|
||||
|
@ -1830,9 +1825,9 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
|||
*/
|
||||
break;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Window events, processed
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/* ========================
|
||||
* Window events, processed
|
||||
* ======================== */
|
||||
case WM_CLOSE:
|
||||
/* The WM_CLOSE message is sent as a signal that a window
|
||||
* or an application should terminate. Restore if minimized. */
|
||||
|
@ -1942,15 +1937,15 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
|||
* with a different DPI.
|
||||
*/
|
||||
{
|
||||
// The suggested new size and position of the window.
|
||||
/* The suggested new size and position of the window. */
|
||||
RECT *const suggestedWindowRect = (RECT *)lParam;
|
||||
|
||||
// Push DPI change event first
|
||||
/* Push DPI change event first. */
|
||||
system->pushEvent(processWindowEvent(GHOST_kEventWindowDPIHintChanged, window));
|
||||
system->dispatchEvents();
|
||||
eventHandled = true;
|
||||
|
||||
// Then move and resize window
|
||||
/* Then move and resize window. */
|
||||
SetWindowPos(hwnd,
|
||||
NULL,
|
||||
suggestedWindowRect->left,
|
||||
|
@ -1983,9 +1978,9 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
|||
window->ThemeRefresh();
|
||||
}
|
||||
break;
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Window events, ignored
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/* ======================
|
||||
* Window events, ignored
|
||||
* ====================== */
|
||||
case WM_WINDOWPOSCHANGED:
|
||||
/* The WM_WINDOWPOSCHANGED message is sent to a window whose size, position, or place
|
||||
* in the Z order has changed as a result of a call to the SetWindowPos function or
|
||||
|
@ -2030,9 +2025,9 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
|||
case WM_SETFOCUS:
|
||||
/* The WM_SETFOCUS message is sent to a window after it has gained the keyboard focus. */
|
||||
break;
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Other events
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/* ============
|
||||
* Other events
|
||||
* ============ */
|
||||
case WM_GETTEXT:
|
||||
/* An application sends a WM_GETTEXT message to copy the text that
|
||||
* corresponds to a window into a buffer provided by the caller.
|
||||
|
@ -2063,7 +2058,7 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
|||
}
|
||||
}
|
||||
else {
|
||||
// Event found for a window before the pointer to the class has been set.
|
||||
/* Event found for a window before the pointer to the class has been set. */
|
||||
GHOST_PRINT("GHOST_SystemWin32::wndProc: GHOST window event before creation\n");
|
||||
/* These are events we typically miss at this point:
|
||||
* WM_GETMINMAXINFO 0x24
|
||||
|
@ -2075,7 +2070,7 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
|||
}
|
||||
}
|
||||
else {
|
||||
// Events without valid hwnd
|
||||
/* Events without valid `hwnd`. */
|
||||
GHOST_PRINT("GHOST_SystemWin32::wndProc: event without window\n");
|
||||
}
|
||||
|
||||
|
@ -2151,12 +2146,12 @@ void GHOST_SystemWin32::putClipboard(const char *buffer, bool selection) const
|
|||
{
|
||||
if (selection || !buffer) {
|
||||
return;
|
||||
} // for copying the selection, used on X11
|
||||
} /* For copying the selection, used on X11. */
|
||||
|
||||
if (OpenClipboard(NULL)) {
|
||||
EmptyClipboard();
|
||||
|
||||
// Get length of buffer including the terminating null
|
||||
/* Get length of buffer including the terminating null. */
|
||||
size_t len = count_utf_16_from_8(buffer);
|
||||
|
||||
HGLOBAL clipbuffer = GlobalAlloc(GMEM_MOVEABLE, sizeof(wchar_t) * len);
|
||||
|
@ -2213,7 +2208,7 @@ GHOST_TSuccess GHOST_SystemWin32::showMessageBox(const char *title,
|
|||
case IDCONTINUE:
|
||||
break;
|
||||
default:
|
||||
break; // should never happen
|
||||
break; /* Should never happen. */
|
||||
}
|
||||
|
||||
free((void *)title_16);
|
||||
|
|
|
@ -10,10 +10,10 @@
|
|||
|
||||
#ifndef WIN32
|
||||
# error WIN32 only!
|
||||
#endif // WIN32
|
||||
#endif /* WIN32 */
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <ole2.h> // for drag-n-drop
|
||||
#include <ole2.h> /* For drag-n-drop. */
|
||||
#include <windows.h>
|
||||
|
||||
#include "GHOST_System.h"
|
||||
|
@ -387,7 +387,7 @@ class GHOST_SystemWin32 : public GHOST_System {
|
|||
static GHOST_Event *processImeEvent(GHOST_TEventType type,
|
||||
GHOST_WindowWin32 *window,
|
||||
GHOST_TEventImeData *data);
|
||||
#endif // WITH_INPUT_IME
|
||||
#endif /* WITH_INPUT_IME */
|
||||
|
||||
/**
|
||||
* Handles minimum window size.
|
||||
|
@ -459,18 +459,18 @@ class GHOST_SystemWin32 : public GHOST_System {
|
|||
|
||||
inline void GHOST_SystemWin32::handleKeyboardChange(void)
|
||||
{
|
||||
m_keylayout = GetKeyboardLayout(0); // get keylayout for current thread
|
||||
m_keylayout = GetKeyboardLayout(0); /* Get keylayout for current thread. */
|
||||
int i;
|
||||
SHORT s;
|
||||
|
||||
// save the language identifier.
|
||||
/* Save the language identifier. */
|
||||
m_langId = LOWORD(m_keylayout);
|
||||
|
||||
for (m_hasAltGr = false, i = 32; i < 256; ++i) {
|
||||
s = VkKeyScanEx((char)i, m_keylayout);
|
||||
// s == -1 means no key that translates passed char code
|
||||
// high byte contains shift state. bit 2 ctrl pressed, bit 4 alt pressed
|
||||
// if both are pressed, we have AltGr keycombo on keylayout
|
||||
/* `s == -1` means no key that translates passed char code
|
||||
* high byte contains shift state. bit 2 ctrl pressed, bit 4 alt pressed
|
||||
* if both are pressed, we have AltGr keycombo on keylayout. */
|
||||
if (s != -1 && (s & 0x600) == 0x600) {
|
||||
m_hasAltGr = true;
|
||||
break;
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
#ifndef GET_POINTERID_WPARAM
|
||||
# define GET_POINTERID_WPARAM(wParam) (LOWORD(wParam))
|
||||
#endif // GET_POINTERID_WPARAM
|
||||
#endif /* GET_POINTERID_WPARAM */
|
||||
|
||||
const wchar_t *GHOST_WindowWin32::s_windowClassName = L"GHOST_WindowClass";
|
||||
const int GHOST_WindowWin32::s_maxTitleLength = 128;
|
||||
|
@ -93,18 +93,18 @@ GHOST_WindowWin32::GHOST_WindowWin32(GHOST_SystemWin32 *system,
|
|||
adjustWindowRectForClosestMonitor(&win_rect, style, extended_style);
|
||||
|
||||
wchar_t *title_16 = alloc_utf16_from_8((char *)title, 0);
|
||||
m_hWnd = ::CreateWindowExW(extended_style, // window extended style
|
||||
s_windowClassName, // pointer to registered class name
|
||||
title_16, // pointer to window name
|
||||
style, // window style
|
||||
win_rect.left, // horizontal position of window
|
||||
win_rect.top, // vertical position of window
|
||||
win_rect.right - win_rect.left, // window width
|
||||
win_rect.bottom - win_rect.top, // window height
|
||||
m_parentWindowHwnd, // handle to parent or owner window
|
||||
0, // handle to menu or child-window identifier
|
||||
::GetModuleHandle(0), // handle to application instance
|
||||
0); // pointer to window-creation data
|
||||
m_hWnd = ::CreateWindowExW(extended_style, /* window extended style */
|
||||
s_windowClassName, /* pointer to registered class name */
|
||||
title_16, /* pointer to window name */
|
||||
style, /* window style */
|
||||
win_rect.left, /* horizontal position of window */
|
||||
win_rect.top, /* vertical position of window */
|
||||
win_rect.right - win_rect.left, /* window width */
|
||||
win_rect.bottom - win_rect.top, /* window height */
|
||||
m_parentWindowHwnd, /* handle to parent or owner window */
|
||||
0, /* handle to menu or child-window identifier */
|
||||
::GetModuleHandle(0), /* handle to application instance */
|
||||
0); /* pointer to window-creation data */
|
||||
free(title_16);
|
||||
|
||||
if (m_hWnd == NULL) {
|
||||
|
@ -197,7 +197,7 @@ GHOST_WindowWin32::GHOST_WindowWin32(GHOST_SystemWin32 *system,
|
|||
/* Force an initial paint of the window. */
|
||||
::UpdateWindow(m_hWnd);
|
||||
|
||||
/* Initialize Wintab. */
|
||||
/* Initialize WINTAB. */
|
||||
if (system->getTabletAPI() != GHOST_kTabletWinPointer) {
|
||||
loadWintab(GHOST_kWindowStateMinimized != state);
|
||||
}
|
||||
|
@ -221,7 +221,7 @@ void GHOST_WindowWin32::updateDirectManipulation()
|
|||
|
||||
void GHOST_WindowWin32::onPointerHitTest(WPARAM wParam)
|
||||
{
|
||||
/* Only DM_POINTERHITTEST can be the first message of input sequence of touchpad input. */
|
||||
/* Only #DM_POINTERHITTEST can be the first message of input sequence of touch-pad input. */
|
||||
|
||||
if (!m_directManipulationHelper) {
|
||||
return;
|
||||
|
@ -280,9 +280,9 @@ GHOST_WindowWin32::~GHOST_WindowWin32()
|
|||
}
|
||||
|
||||
if (m_dropTarget) {
|
||||
// Disable DragDrop
|
||||
/* Disable DragDrop. */
|
||||
RevokeDragDrop(m_hWnd);
|
||||
// Release our reference of the DropTarget and it will delete itself eventually.
|
||||
/* Release our reference of the DropTarget and it will delete itself eventually. */
|
||||
m_dropTarget->Release();
|
||||
m_dropTarget = NULL;
|
||||
}
|
||||
|
@ -531,7 +531,8 @@ GHOST_TSuccess GHOST_WindowWin32::setState(GHOST_TWindowState state)
|
|||
break;
|
||||
}
|
||||
::SetWindowLongPtr(m_hWnd, GWL_STYLE, style);
|
||||
/* SetWindowLongPtr Docs: frame changes not visible until SetWindowPos with SWP_FRAMECHANGED. */
|
||||
/* #SetWindowLongPtr Docs:
|
||||
* Frame changes not visible until #SetWindowPos with #SWP_FRAMECHANGED. */
|
||||
::SetWindowPos(m_hWnd, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
|
||||
return ::SetWindowPlacement(m_hWnd, &wp) == TRUE ? GHOST_kSuccess : GHOST_kFailure;
|
||||
}
|
||||
|
@ -680,7 +681,7 @@ void GHOST_WindowWin32::updateMouseCapture(GHOST_MouseCaptureEventWin32 event)
|
|||
|
||||
HCURSOR GHOST_WindowWin32::getStandardCursor(GHOST_TStandardCursor shape) const
|
||||
{
|
||||
// Convert GHOST cursor to Windows OEM cursor
|
||||
/* Convert GHOST cursor to Windows OEM cursor. */
|
||||
HANDLE cursor = NULL;
|
||||
HMODULE module = ::GetModuleHandle(0);
|
||||
uint32_t flags = LR_SHARED | LR_DEFAULTSIZE;
|
||||
|
@ -738,36 +739,36 @@ HCURSOR GHOST_WindowWin32::getStandardCursor(GHOST_TStandardCursor shape) const
|
|||
break;
|
||||
case GHOST_kStandardCursorHelp:
|
||||
cursor = ::LoadImage(NULL, IDC_HELP, IMAGE_CURSOR, cx, cy, flags);
|
||||
break; // Arrow and question mark
|
||||
break; /* Arrow and question mark */
|
||||
case GHOST_kStandardCursorWait:
|
||||
cursor = ::LoadImage(NULL, IDC_WAIT, IMAGE_CURSOR, cx, cy, flags);
|
||||
break; // Hourglass
|
||||
break; /* Hourglass */
|
||||
case GHOST_kStandardCursorText:
|
||||
cursor = ::LoadImage(NULL, IDC_IBEAM, IMAGE_CURSOR, cx, cy, flags);
|
||||
break; // I-beam
|
||||
break; /* I-beam */
|
||||
case GHOST_kStandardCursorCrosshair:
|
||||
cursor = ::LoadImage(module, "cross_cursor", IMAGE_CURSOR, cx, cy, flags);
|
||||
break; // Standard Cross
|
||||
break; /* Standard Cross */
|
||||
case GHOST_kStandardCursorCrosshairA:
|
||||
cursor = ::LoadImage(module, "crossA_cursor", IMAGE_CURSOR, cx, cy, flags);
|
||||
break; // Crosshair A
|
||||
break; /* Crosshair A */
|
||||
case GHOST_kStandardCursorCrosshairB:
|
||||
cursor = ::LoadImage(module, "crossB_cursor", IMAGE_CURSOR, cx, cy, flags);
|
||||
break; // Diagonal Crosshair B
|
||||
break; /* Diagonal Crosshair B */
|
||||
case GHOST_kStandardCursorCrosshairC:
|
||||
cursor = ::LoadImage(module, "crossC_cursor", IMAGE_CURSOR, cx, cy, flags);
|
||||
break; // Minimal Crosshair C
|
||||
break; /* Minimal Crosshair C */
|
||||
case GHOST_kStandardCursorBottomSide:
|
||||
case GHOST_kStandardCursorUpDown:
|
||||
cursor = ::LoadImage(module, "movens_cursor", IMAGE_CURSOR, cx, cy, flags);
|
||||
break; // Double-pointed arrow pointing north and south
|
||||
break; /* Double-pointed arrow pointing north and south */
|
||||
case GHOST_kStandardCursorLeftSide:
|
||||
case GHOST_kStandardCursorLeftRight:
|
||||
cursor = ::LoadImage(module, "moveew_cursor", IMAGE_CURSOR, cx, cy, flags);
|
||||
break; // Double-pointed arrow pointing west and east
|
||||
break; /* Double-pointed arrow pointing west and east */
|
||||
case GHOST_kStandardCursorTopSide:
|
||||
cursor = ::LoadImage(NULL, IDC_UPARROW, IMAGE_CURSOR, cx, cy, flags);
|
||||
break; // Vertical arrow
|
||||
break; /* Vertical arrow */
|
||||
case GHOST_kStandardCursorTopLeftCorner:
|
||||
cursor = ::LoadImage(NULL, IDC_SIZENWSE, IMAGE_CURSOR, cx, cy, flags);
|
||||
break;
|
||||
|
@ -789,7 +790,7 @@ HCURSOR GHOST_WindowWin32::getStandardCursor(GHOST_TStandardCursor shape) const
|
|||
case GHOST_kStandardCursorDestroy:
|
||||
case GHOST_kStandardCursorStop:
|
||||
cursor = ::LoadImage(module, "forbidden_cursor", IMAGE_CURSOR, cx, cy, flags);
|
||||
break; // Slashed circle
|
||||
break; /* Slashed circle */
|
||||
case GHOST_kStandardCursorDefault:
|
||||
cursor = NULL;
|
||||
break;
|
||||
|
@ -849,9 +850,9 @@ GHOST_TSuccess GHOST_WindowWin32::setWindowCursorGrab(GHOST_TGrabCursorMode mode
|
|||
setWindowCursorVisibility(true);
|
||||
}
|
||||
if (m_cursorGrab != GHOST_kGrabNormal) {
|
||||
/* use to generate a mouse move event, otherwise the last event
|
||||
/* Use to generate a mouse move event, otherwise the last event
|
||||
* blender gets can be outside the screen causing menus not to show
|
||||
* properly unless the user moves the mouse */
|
||||
* properly unless the user moves the mouse. */
|
||||
int32_t pos[2];
|
||||
m_system->getCursorPosition(pos[0], pos[1]);
|
||||
m_system->setCursorPosition(pos[0], pos[1]);
|
||||
|
@ -902,7 +903,7 @@ GHOST_TSuccess GHOST_WindowWin32::getPointerInfo(
|
|||
|
||||
for (uint32_t i = 0; i < outCount; i++) {
|
||||
POINTER_INFO pointerApiInfo = pointerPenInfo[i].pointerInfo;
|
||||
// Obtain the basic information from the event
|
||||
/* Obtain the basic information from the event. */
|
||||
outPointerInfo[i].pointerId = pointerId;
|
||||
outPointerInfo[i].isPrimary = isPrimary;
|
||||
|
||||
|
@ -1044,8 +1045,9 @@ void GHOST_WindowWin32::ThemeRefresh()
|
|||
&pcbData) == ERROR_SUCCESS) {
|
||||
BOOL DarkMode = !lightMode;
|
||||
|
||||
/* 20 == DWMWA_USE_IMMERSIVE_DARK_MODE in Windows 11 SDK. This value was undocumented for
|
||||
* Windows 10 versions 2004 and later, supported for Windows 11 Build 22000 and later. */
|
||||
/* `20 == DWMWA_USE_IMMERSIVE_DARK_MODE` in Windows 11 SDK.
|
||||
* This value was undocumented for Windows 10 versions 2004 and later,
|
||||
* supported for Windows 11 Build 22000 and later. */
|
||||
DwmSetWindowAttribute(this->m_hWnd, 20, &DarkMode, sizeof(DarkMode));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
#ifndef WIN32
|
||||
# error WIN32 only!
|
||||
#endif // WIN32
|
||||
#endif /* WIN32 */
|
||||
|
||||
#include "GHOST_TaskbarWin32.h"
|
||||
#include "GHOST_TrackpadWin32.h"
|
||||
|
@ -25,7 +25,7 @@
|
|||
class GHOST_SystemWin32;
|
||||
class GHOST_DropTargetWin32;
|
||||
|
||||
// typedefs for user32 functions to allow dynamic loading of Windows 10 DPI scaling functions
|
||||
/* typedefs for user32 functions to allow dynamic loading of Windows 10 DPI scaling functions. */
|
||||
typedef UINT(API *GHOST_WIN32_GetDpiForWindow)(HWND);
|
||||
|
||||
typedef BOOL(API *GHOST_WIN32_AdjustWindowRectExForDpi)(
|
||||
|
|
Loading…
Reference in New Issue