@ -231,7 +231,7 @@
0.0f = not held . 1.0f = fully held . Pass intermediate 0.0f . .1 .0f values for analog triggers / sticks .
- We uses a simple > 0.0f test for activation testing , and won ' t attempt to test for a dead - zone .
Your code will probably need to transform your raw inputs ( such as e . g . remapping your 0.2 . .0 .9 raw input range to 0.0 . .1 .0 imgui range , etc . ) .
- You can download PNG / PSD files depicting the gamepad controls for common controllers at : goo . gl / 9L gVZW .
- You can download PNG / PSD files depicting the gamepad controls for common controllers at : http : //goo.gl/9LgVZW.
- If you need to share inputs between your game and the imgui parts , the easiest approach is to go all - or - nothing , with a buttons combo
to toggle the target . Please reach out if you think the game vs navigation input sharing could be improved .
- Keyboard :
@ -3421,6 +3421,31 @@ static void TranslateWindow(ImGuiWindow* window, const ImVec2& delta)
window - > DC . LastItemDisplayRect . Translate ( delta ) ;
}
static void ScaleWindow ( ImGuiWindow * window , float scale )
{
ImVec2 origin = window - > Viewport - > Pos ;
window - > Pos = ImFloor ( ( window - > Pos - origin ) * scale + origin ) ;
window - > Size = ImFloor ( window - > Size * scale ) ;
window - > SizeFull = ImFloor ( window - > SizeFull * scale ) ;
window - > SizeContents = ImFloor ( window - > SizeContents * scale ) ;
}
// Scale all windows (position, size). Use when e.g. changing DPI. (This is a lossy operation!)
void ImGui : : ScaleWindowsInViewport ( ImGuiViewportP * viewport , float scale )
{
ImGuiContext & g = * GImGui ;
if ( viewport - > Window )
{
ScaleWindow ( viewport - > Window , scale ) ;
}
else
{
for ( int i = 0 ; i ! = g . Windows . Size ; i + + )
if ( g . Windows [ i ] - > Viewport = = viewport )
ScaleWindow ( g . Windows [ i ] , scale ) ;
}
}
static void ImGui : : UpdateViewports ( )
{
ImGuiContext & g = * GImGui ;
@ -3430,7 +3455,7 @@ static void ImGui::UpdateViewports()
g . MouseRefPrevViewport = g . MouseRefViewport ;
g . MouseRefViewport = g . IO . MousePosViewport ? FindViewportByID ( g . IO . MousePosViewport ) : g . Viewports [ 0 ] ;
// Update main viewport with current size (and OS window position, if known)
// Update main viewport with current platform position and size
ImGuiViewportP * main_viewport = g . Viewports [ 0 ] ;
IM_ASSERT ( main_viewport - > ID = = IMGUI_VIEWPORT_DEFAULT_ID ) ;
ImVec2 main_viewport_platform_pos = ImVec2 ( 0.0f , 0.0f ) ;
@ -3464,25 +3489,24 @@ static void ImGui::UpdateViewports()
continue ;
}
// Apply Position and Size (from Platform Window to ImGui) if requested
// We do it here early in the frame instead of UpdatePlatformWindows() to allow the platform back-end to set PlatformRequestResize early
// (e.g. in their own message handler before NewFrame) and not have a frame of lag.
// Apply Position and Size (from Platform Window to ImGui) if requested.
// We do it early in the frame instead of waiting for UpdatePlatformWindows() to avoid a frame of lag when moving/resizing using OS facilities.
if ( viewport - > PlatformRequestMove )
viewport - > Pos = g . PlatformIO . Platform_GetWindowPos ( viewport ) ;
if ( viewport - > PlatformRequestResize )
viewport - > Size = g . PlatformIO . Platform_GetWindowSize ( viewport ) ;
// Translate resized viewports
// Translate imgui windows when a host viewport has been moved
ImVec2 delta = viewport - > Pos - viewport - > LastPos ;
if ( ( viewport - > Flags & ImGuiViewportFlags_CanHostOtherWindows ) & & ( delta . x ! = 0.0f | | delta . y ! = 0.0f ) )
for ( int window_n = 0 ; window_n < g . Windows . Size ; window_n + + )
if ( g . Windows [ window_n ] - > Viewport = = viewport )
TranslateWindow ( g . Windows [ window_n ] , delta ) ;
// Update monitor
// Update monitor (we'll use this info to clamp windows and save windows lost in a removed monitor)
viewport - > PlatformMonitor = FindPlatformMonitorForRect ( viewport - > GetRect ( ) ) ;
// Update DPI S cale
// Update DPI s cale
float new_dpi_scale ;
if ( g . PlatformIO . Platform_GetWindowDpiScale )
new_dpi_scale = g . PlatformIO . Platform_GetWindowDpiScale ( viewport ) ;
@ -3520,7 +3544,7 @@ static void ImGui::UpdateViewports()
viewport_hovered = g . IO . MouseHoveredViewport ? FindViewportByID ( g . IO . MouseHoveredViewport ) : NULL ;
if ( viewport_hovered & & ( viewport_hovered - > Flags & ImGuiViewportFlags_NoInputs ) )
{
// Back-end failed at honoring its contract
// Back-end failed at honoring its contract if it returned a viewport with the _NoInputs flag
IM_ASSERT ( 0 ) ;
viewport_hovered = FindViewportHoveredFromPlatformWindowStack ( g . IO . MousePos ) ;
}
@ -3560,7 +3584,7 @@ void ImGui::UpdatePlatformWindows()
if ( ! ( g . IO . ConfigFlags & ImGuiConfigFlags_ViewportsEnable ) )
return ;
// Create/resize/destroy platform windows to match each active viewport. Update the user-facing list.
// Create/resize/destroy platform windows to match each active viewport.
// Skip the main viewport (index 0), which is always fully handled by the application!
for ( int i = 1 ; i < g . Viewports . Size ; i + + )
{
@ -3595,6 +3619,7 @@ void ImGui::UpdatePlatformWindows()
viewport - > Flags = no_task_bar_icon ? ( viewport - > Flags | ImGuiViewportFlags_NoTaskBarIcon ) : ( viewport - > Flags & ~ ImGuiViewportFlags_NoTaskBarIcon ) ;
}
// Create window
bool is_new_window = ( viewport - > PlatformHandle = = NULL & & viewport - > PlatformUserData = = NULL & & viewport - > RendererUserData = = NULL ) ;
if ( is_new_window & & viewport - > PlatformHandle = = NULL & & viewport - > PlatformUserData = = NULL )
g . PlatformIO . Platform_CreateWindow ( viewport ) ;
@ -3604,28 +3629,26 @@ void ImGui::UpdatePlatformWindows()
viewport - > RendererLastSize = viewport - > Size ;
}
// Apply Position and Size (from ImGui to Platform Window )
// Apply Position and Size (from ImGui to Platform /Renderer back-ends )
if ( ! viewport - > PlatformRequestMove )
g . PlatformIO . Platform_SetWindowPos ( viewport , viewport - > Pos ) ;
if ( ! viewport - > PlatformRequestResize )
g . PlatformIO . Platform_SetWindowSize ( viewport , viewport - > Size ) ;
// Update Size for Renderer
if ( g . PlatformIO . Renderer_SetWindowSize & & ( viewport - > RendererLastSize . x ! = viewport - > Size . x | | viewport - > RendererLastSize . y ! = viewport - > Size . y ) )
g . PlatformIO . Renderer_SetWindowSize ( viewport , viewport - > Size ) ;
viewport - > RendererLastSize = viewport - > Size ;
// Update title bar
// Update title bar (if it changed)
const char * title_begin = viewport - > Window - > Name ;
char * title_end = ( char * ) ( intptr_t ) ImGui : : FindRenderedTextEnd ( title_begin ) ;
const ImGuiID title_hash = ImHash ( title_begin , ( int ) ( title_end - title_begin ) ) ;
if ( viewport - > LastNameHash ! = title_hash )
{
viewport - > LastNameHash = title_hash ;
char title_end_backup_c = * title_end ;
* title_end = 0 ; // Cut existing buffer short instead of doing an alloc/free
g . PlatformIO . Platform_SetWindowTitle ( viewport , title_begin ) ;
* title_end = title_end_backup_c ;
viewport - > LastNameHash = title_hash ;
}
// Update alpha
@ -3681,7 +3704,7 @@ static void ImGui::UpdateMouseInputs()
{
ImGuiContext & g = * GImGui ;
// If mouse just appeared or disappeared (usually denoted by -FLT_MAX component , but in reality we te st for -256000.0f ) we cancel out movement in MouseDelta
// If mouse just appeared or disappeared (usually denoted by -FLT_MAX component s) we cancel out movement in MouseDelta
if ( IsMousePosValid ( & g . IO . MousePos ) & & IsMousePosValid ( & g . IO . MousePosPrev ) & & g . MouseRefViewport = = g . MouseRefPrevViewport )
g . IO . MouseDelta = g . IO . MousePos - g . IO . MousePosPrev ;
else
@ -4529,7 +4552,7 @@ void ImGui::EndFrame()
}
}
// Update user- side viewport list
// Update user- facing viewport list
g . PlatformIO . MainViewport = g . Viewports [ 0 ] ;
g . PlatformIO . Viewports . resize ( 0 ) ;
for ( int i = 0 ; i < g . Viewports . Size ; i + + )
@ -6707,9 +6730,9 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
}
}
// Synchronize viewport --> window
if ( window - > ViewportOwned )
{
// Synchronize viewport --> window
if ( window - > Viewport - > PlatformRequestMove )
window - > Pos = window - > Viewport - > Pos ;
if ( window - > Viewport - > PlatformRequestResize )
@ -14051,31 +14074,6 @@ static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
# endif
static void ScaleWindow ( ImGuiWindow * window , float scale )
{
ImVec2 origin = window - > Viewport - > Pos ;
window - > Pos = ImFloor ( ( window - > Pos - origin ) * scale + origin ) ;
window - > Size = ImFloor ( window - > Size * scale ) ;
window - > SizeFull = ImFloor ( window - > SizeFull * scale ) ;
window - > SizeContents = ImFloor ( window - > SizeContents * scale ) ;
}
// Scale all windows (position, size). Use when e.g. changing DPI. (This is a lossy operation!)
void ImGui : : ScaleWindowsInViewport ( ImGuiViewportP * viewport , float scale )
{
ImGuiContext & g = * GImGui ;
if ( viewport - > Window )
{
ScaleWindow ( viewport - > Window , scale ) ;
}
else
{
for ( int i = 0 ; i ! = g . Windows . Size ; i + + )
if ( g . Windows [ i ] - > Viewport = = viewport )
ScaleWindow ( g . Windows [ i ] , scale ) ;
}
}
//-----------------------------------------------------------------------------
// HELP, METRICS
//-----------------------------------------------------------------------------