@ -739,8 +739,8 @@ static void FocusFrontMostActiveWindow(ImGuiWindow* ignore_window);
// Viewport
// Viewport
const ImGuiID IMGUI_VIEWPORT_DEFAULT_ID = 0x11111111 ; // Using a constant instead of e.g. ImHash("ViewportDefault", 0); so it's easier to spot in the debugger. The exact value doesn't matter.
const ImGuiID IMGUI_VIEWPORT_DEFAULT_ID = 0x11111111 ; // Using a constant instead of e.g. ImHash("ViewportDefault", 0); so it's easier to spot in the debugger. The exact value doesn't matter.
static inline ImRect GetViewportRect ( ImGuiWindow * window ) { return window - > Viewport - > GetRect ( ) ; }
static inline ImRect GetViewportRect ( ImGuiWindow * window ) { return window - > Viewport - > GetRect ( ) ; }
static inline ImVec2 ConvertViewportPosTo OsDesktop Pos( const ImVec2 & imgui_pos , ImGuiViewport * viewport ) { return imgui_pos - viewport - > Pos + viewport - > Platform OsDesktop Pos; }
static inline ImVec2 ConvertViewportPosTo Platform Pos( const ImVec2 & imgui_pos , ImGuiViewport * viewport ) { return imgui_pos - viewport - > Pos + viewport - > Platform Pos; }
static inline ImVec2 Convert OsDesktopPosToViewportPos( const ImVec2 & os _pos, ImGuiViewport * viewport ) { return os _pos - viewport - > Platform OsDesktop Pos + viewport - > Pos ; }
static inline ImVec2 Convert PlatformPosToViewportPos( const ImVec2 & platform _pos, ImGuiViewport * viewport ) { return platform _pos - viewport - > Platform Pos + viewport - > Pos ; }
static void UpdateViewports ( ) ;
static void UpdateViewports ( ) ;
static void UpdateWindowViewport ( ImGuiWindow * window , bool window_pos_set_by_api ) ;
static void UpdateWindowViewport ( ImGuiWindow * window , bool window_pos_set_by_api ) ;
static void SetCurrentViewport ( ImGuiViewport * viewport ) ;
static void SetCurrentViewport ( ImGuiViewport * viewport ) ;
@ -1910,7 +1910,7 @@ ImGuiWindow::ImGuiWindow(ImGuiContext* context, const char* name)
Flags = FlagsPreviousFrame = 0 ;
Flags = FlagsPreviousFrame = 0 ;
Viewport = NULL ;
Viewport = NULL ;
ViewportId = 0 ;
ViewportId = 0 ;
Viewport OsDesktop Pos = ImVec2 ( FLT_MAX , FLT_MAX ) ;
Viewport Platform Pos = ImVec2 ( FLT_MAX , FLT_MAX ) ;
PosFloat = Pos = ImVec2 ( 0.0f , 0.0f ) ;
PosFloat = Pos = ImVec2 ( 0.0f , 0.0f ) ;
Size = SizeFull = ImVec2 ( 0.0f , 0.0f ) ;
Size = SizeFull = ImVec2 ( 0.0f , 0.0f ) ;
SizeContents = SizeContentsExplicit = ImVec2 ( 0.0f , 0.0f ) ;
SizeContents = SizeContentsExplicit = ImVec2 ( 0.0f , 0.0f ) ;
@ -3253,7 +3253,7 @@ static void ImGui::UpdateMovingWindowDropViewport(ImGuiWindow* window)
return ;
return ;
ImRect mouse_viewport_rect = g . MouseViewport - > GetRect ( ) ;
ImRect mouse_viewport_rect = g . MouseViewport - > GetRect ( ) ;
ImVec2 window_pos_in_mouse_viewport = Convert OsDesktopPosToViewportPos( ConvertViewportPosToOsDesktop Pos( window - > Pos , window - > Viewport ) , g . MouseViewport ) ;
ImVec2 window_pos_in_mouse_viewport = Convert PlatformPosToViewportPos( ConvertViewportPosToPlatform Pos( window - > Pos , window - > Viewport ) , g . MouseViewport ) ;
ImRect window_rect_in_mouse_viewport = ImRect ( window_pos_in_mouse_viewport , window_pos_in_mouse_viewport + window - > Size ) ;
ImRect window_rect_in_mouse_viewport = ImRect ( window_pos_in_mouse_viewport , window_pos_in_mouse_viewport + window - > Size ) ;
if ( ( g . MouseViewport - > Flags & ImGuiViewportFlags_HostOtherWindows ) & & mouse_viewport_rect . Contains ( window_rect_in_mouse_viewport ) )
if ( ( g . MouseViewport - > Flags & ImGuiViewportFlags_HostOtherWindows ) & & mouse_viewport_rect . Contains ( window_rect_in_mouse_viewport ) )
{
{
@ -3271,8 +3271,8 @@ static void ImGui::UpdateMovingWindowDropViewport(ImGuiWindow* window)
else
else
{
{
// Create new viewport
// Create new viewport
ImVec2 os_pos = ConvertViewportPosToOsDesktop Pos( window - > Pos , window - > Viewport ) ;
ImVec2 platform_pos = ConvertViewportPosToPlatform Pos( window - > Pos , window - > Viewport ) ;
ImGuiViewport * viewport = Viewport ( window , window - > ID , 0 , os _pos, window - > Size ) ;
ImGuiViewport * viewport = Viewport ( window , window - > ID , 0 , platform _pos, window - > Size ) ;
SetWindowViewportTranslateToPreservePlatformPos ( window , window - > Viewport , viewport ) ;
SetWindowViewportTranslateToPreservePlatformPos ( window , window - > Viewport , viewport ) ;
}
}
}
}
@ -3326,15 +3326,15 @@ static void ImGui::UpdateMovingWindow()
// If the back-end doesn't set MouseLastHoveredViewport or doesn't honor ImGuiViewportFlags_NoInputs, we do a search ourselves.
// If the back-end doesn't set MouseLastHoveredViewport or doesn't honor ImGuiViewportFlags_NoInputs, we do a search ourselves.
// This search won't take account of the possibility that non-imgui windows may be in-between our dragged window and our target window.
// This search won't take account of the possibility that non-imgui windows may be in-between our dragged window and our target window.
static ImGuiViewport * FindViewportHoveredFrom OsWindowStack( const ImVec2 mouse_os _pos)
static ImGuiViewport * FindViewportHoveredFrom PlatformWindowStack( const ImVec2 mouse_platform _pos)
{
{
ImGuiContext & g = * GImGui ;
ImGuiContext & g = * GImGui ;
ImGuiViewport * best_candidate = NULL ;
ImGuiViewport * best_candidate = NULL ;
for ( int n = 0 ; n < g . Viewports . Size ; n + + )
for ( int n = 0 ; n < g . Viewports . Size ; n + + )
{
{
ImGuiViewport * viewport = g . Viewports [ n ] ;
ImGuiViewport * viewport = g . Viewports [ n ] ;
ImRect os _rect = ImRect ( viewport - > Platform OsDesktop Pos, viewport - > Platform OsDesktop Pos + viewport - > Size ) ;
ImRect platform _rect = ImRect ( viewport - > Platform Pos, viewport - > Platform Pos + viewport - > Size ) ;
if ( ! ( viewport - > Flags & ImGuiViewportFlags_NoInputs ) & & os_rect. Contains ( mouse_os _pos) )
if ( ! ( viewport - > Flags & ImGuiViewportFlags_NoInputs ) & & platform_rect. Contains ( mouse_platform _pos) )
if ( best_candidate = = NULL | | best_candidate - > LastFrameAsRefViewport < viewport - > LastFrameAsRefViewport )
if ( best_candidate = = NULL | | best_candidate - > LastFrameAsRefViewport < viewport - > LastFrameAsRefViewport )
best_candidate = viewport ;
best_candidate = viewport ;
}
}
@ -3347,7 +3347,7 @@ static void ImGui::UpdateViewports()
// Mouse handling: latch the expected mouse OS position (if any) before processing viewport erasure
// Mouse handling: latch the expected mouse OS position (if any) before processing viewport erasure
ImGuiViewport * viewport_ref = g . IO . MousePosViewport ? FindViewportByID ( g . IO . MousePosViewport ) : g . Viewports [ 0 ] ;
ImGuiViewport * viewport_ref = g . IO . MousePosViewport ? FindViewportByID ( g . IO . MousePosViewport ) : g . Viewports [ 0 ] ;
const ImVec2 mouse_ os_pos = ConvertViewportPosToOsDesktop Pos( g . IO . MousePos , viewport_ref ) ;
const ImVec2 mouse_ platform_pos = ConvertViewportPosToPlatform Pos( g . IO . MousePos , viewport_ref ) ;
g . CurrentViewport = NULL ;
g . CurrentViewport = NULL ;
for ( int n = 0 ; n < g . Viewports . Size ; n + + )
for ( int n = 0 ; n < g . Viewports . Size ; n + + )
@ -3414,10 +3414,10 @@ static void ImGui::UpdateViewports()
// Update main viewport with current size (and OS window position, if known)
// Update main viewport with current size (and OS window position, if known)
ImGuiViewport * main_viewport = g . Viewports [ 0 ] ;
ImGuiViewport * main_viewport = g . Viewports [ 0 ] ;
IM_ASSERT ( main_viewport - > ID = = IMGUI_VIEWPORT_DEFAULT_ID ) ;
IM_ASSERT ( main_viewport - > ID = = IMGUI_VIEWPORT_DEFAULT_ID ) ;
ImVec2 main_viewport_ os_desktop _pos = ImVec2 ( 0.0f , 0.0f ) ;
ImVec2 main_viewport_ platform _pos = ImVec2 ( 0.0f , 0.0f ) ;
if ( ( g . IO . ConfigFlags & ImGuiConfigFlags_EnableViewports ) )
if ( ( g . IO . ConfigFlags & ImGuiConfigFlags_EnableViewports ) )
main_viewport_ os_desktop _pos = g . IO . PlatformInterface . GetWindowPos ( main_viewport ) ;
main_viewport_ platform _pos = g . IO . PlatformInterface . GetWindowPos ( main_viewport ) ;
Viewport ( NULL , IMGUI_VIEWPORT_DEFAULT_ID , ImGuiViewportFlags_MainViewport | ImGuiViewportFlags_HostOtherWindows , main_viewport_ os_desktop _pos, g . IO . DisplaySize ) ;
Viewport ( NULL , IMGUI_VIEWPORT_DEFAULT_ID , ImGuiViewportFlags_MainViewport | ImGuiViewportFlags_HostOtherWindows , main_viewport_ platform _pos, g . IO . DisplaySize ) ;
if ( ! ( g . IO . ConfigFlags & ImGuiConfigFlags_EnableViewports ) )
if ( ! ( g . IO . ConfigFlags & ImGuiConfigFlags_EnableViewports ) )
{
{
@ -3434,14 +3434,14 @@ static void ImGui::UpdateViewports()
{
{
// Back-end failed at honoring its contract
// Back-end failed at honoring its contract
IM_ASSERT ( 0 ) ;
IM_ASSERT ( 0 ) ;
viewport_hovered = FindViewportHoveredFrom OsWindowStack( mouse_os _pos) ;
viewport_hovered = FindViewportHoveredFrom PlatformWindowStack( mouse_platform _pos) ;
}
}
}
}
else
else
{
{
// If the back-end doesn't set MouseLastHoveredViewport or doesn't honor ImGuiViewportFlags_NoInputs, we do a search ourselves.
// If the back-end doesn't set MouseLastHoveredViewport or doesn't honor ImGuiViewportFlags_NoInputs, we do a search ourselves.
// This search won't take account of the possibility that non-imgui windows may be in-between our dragged window and our target window.
// This search won't take account of the possibility that non-imgui windows may be in-between our dragged window and our target window.
viewport_hovered = FindViewportHoveredFrom OsWindowStack( mouse_os _pos) ;
viewport_hovered = FindViewportHoveredFrom PlatformWindowStack( mouse_platform _pos) ;
}
}
if ( viewport_hovered ! = NULL )
if ( viewport_hovered ! = NULL )
g . MouseLastHoveredViewport = viewport_hovered ;
g . MouseLastHoveredViewport = viewport_hovered ;
@ -3450,7 +3450,7 @@ static void ImGui::UpdateViewports()
if ( viewport_ref = = NULL )
if ( viewport_ref = = NULL )
{
{
viewport_ref = main_viewport ;
viewport_ref = main_viewport ;
g . IO . MousePos = Convert OsDesktopPosToViewportPos( mouse_os _pos, viewport_ref ) ;
g . IO . MousePos = Convert PlatformPosToViewportPos( mouse_platform _pos, viewport_ref ) ;
}
}
g . MouseLastViewport = g . MouseViewport ;
g . MouseLastViewport = g . MouseViewport ;
@ -3466,7 +3466,7 @@ static void ImGui::UpdateViewports()
viewport_hovered = g . MouseLastHoveredViewport ;
viewport_hovered = g . MouseLastHoveredViewport ;
if ( viewport_hovered ! = NULL & & viewport_hovered ! = g . MouseViewport & & ! ( viewport_hovered - > Flags & ImGuiViewportFlags_NoInputs ) )
if ( viewport_hovered ! = NULL & & viewport_hovered ! = g . MouseViewport & & ! ( viewport_hovered - > Flags & ImGuiViewportFlags_NoInputs ) )
{
{
g . IO . MousePos = Convert OsDesktopPosToViewportPos( ConvertViewportPosToOsDesktop Pos( g . IO . MousePos , g . MouseViewport ) , viewport_hovered ) ;
g . IO . MousePos = Convert PlatformPosToViewportPos( ConvertViewportPosToPlatform Pos( g . IO . MousePos , g . MouseViewport ) , viewport_hovered ) ;
g . MouseViewport = viewport_hovered ;
g . MouseViewport = viewport_hovered ;
}
}
}
}
@ -3486,7 +3486,7 @@ static void UpdatePlatformWindows()
IM_ASSERT ( viewport - > Window ! = NULL ) ;
IM_ASSERT ( viewport - > Window ! = NULL ) ;
if ( viewport - > PlatformRequestMove )
if ( viewport - > PlatformRequestMove )
viewport - > Platform OsDesktop Pos = g . IO . PlatformInterface . GetWindowPos ( viewport ) ;
viewport - > Platform Pos = g . IO . PlatformInterface . GetWindowPos ( viewport ) ;
bool is_new_window = viewport - > PlatformHandle = = NULL & & viewport - > PlatformUserData = = NULL & & viewport - > RendererUserData = = NULL ;
bool is_new_window = viewport - > PlatformHandle = = NULL & & viewport - > PlatformUserData = = NULL & & viewport - > RendererUserData = = NULL ;
if ( is_new_window & & viewport - > PlatformHandle = = NULL & & viewport - > PlatformUserData = = NULL )
if ( is_new_window & & viewport - > PlatformHandle = = NULL & & viewport - > PlatformUserData = = NULL )
@ -3501,7 +3501,7 @@ static void UpdatePlatformWindows()
// Update Pos/Size for Platform
// Update Pos/Size for Platform
if ( ! viewport - > PlatformRequestMove )
if ( ! viewport - > PlatformRequestMove )
g . IO . PlatformInterface . SetWindowPos ( viewport , viewport - > Platform OsDesktop Pos) ;
g . IO . PlatformInterface . SetWindowPos ( viewport , viewport - > Platform Pos) ;
if ( ! viewport - > PlatformRequestResize )
if ( ! viewport - > PlatformRequestResize )
g . IO . PlatformInterface . SetWindowSize ( viewport , viewport - > Size ) ;
g . IO . PlatformInterface . SetWindowSize ( viewport , viewport - > Size ) ;
@ -3891,7 +3891,7 @@ static void SettingsHandlerWindow_ReadLine(ImGuiContext*, ImGuiSettingsHandler*,
if ( sscanf ( line , " Pos=%f,%f " , & x , & y ) = = 2 ) { settings - > Pos = ImVec2 ( x , y ) ; }
if ( sscanf ( line , " Pos=%f,%f " , & x , & y ) = = 2 ) { settings - > Pos = ImVec2 ( x , y ) ; }
else if ( sscanf ( line , " Size=%f,%f " , & x , & y ) = = 2 ) { settings - > Size = ImMax ( ImVec2 ( x , y ) , GImGui - > Style . WindowMinSize ) ; }
else if ( sscanf ( line , " Size=%f,%f " , & x , & y ) = = 2 ) { settings - > Size = ImMax ( ImVec2 ( x , y ) , GImGui - > Style . WindowMinSize ) ; }
else if ( sscanf ( line , " ViewportId=0x%08X " , & u1 ) = = 1 ) { settings - > ViewportId = u1 ; }
else if ( sscanf ( line , " ViewportId=0x%08X " , & u1 ) = = 1 ) { settings - > ViewportId = u1 ; }
else if ( sscanf ( line , " Viewport OsDesktop Pos=%f,%f" , & x , & y ) = = 2 ) { settings - > Viewport OsDesktop Pos = ImVec2 ( x , y ) ; }
else if ( sscanf ( line , " Viewport Platform Pos=%f,%f" , & x , & y ) = = 2 ) { settings - > Viewport Platform Pos = ImVec2 ( x , y ) ; }
else if ( sscanf ( line , " Collapsed=%d " , & i ) = = 1 ) { settings - > Collapsed = ( i ! = 0 ) ; }
else if ( sscanf ( line , " Collapsed=%d " , & i ) = = 1 ) { settings - > Collapsed = ( i ! = 0 ) ; }
}
}
@ -3910,7 +3910,7 @@ static void SettingsHandlerWindow_WriteAll(ImGuiContext* imgui_ctx, ImGuiSetting
settings - > Pos = window - > Pos ; // - window->Viewport->Pos;
settings - > Pos = window - > Pos ; // - window->Viewport->Pos;
settings - > Size = window - > SizeFull ;
settings - > Size = window - > SizeFull ;
settings - > ViewportId = window - > ViewportId ;
settings - > ViewportId = window - > ViewportId ;
settings - > Viewport OsDesktopPos = window - > ViewportOsDesktop Pos;
settings - > Viewport PlatformPos = window - > ViewportPlatform Pos;
settings - > Collapsed = window - > Collapsed ;
settings - > Collapsed = window - > Collapsed ;
}
}
@ -3931,8 +3931,8 @@ static void SettingsHandlerWindow_WriteAll(ImGuiContext* imgui_ctx, ImGuiSetting
if ( settings - > ViewportId ! = 0 & & settings - > ViewportId ! = ImGui : : IMGUI_VIEWPORT_DEFAULT_ID )
if ( settings - > ViewportId ! = 0 & & settings - > ViewportId ! = ImGui : : IMGUI_VIEWPORT_DEFAULT_ID )
{
{
buf - > appendf ( " ViewportId=0x%08X \n " , settings - > ViewportId ) ;
buf - > appendf ( " ViewportId=0x%08X \n " , settings - > ViewportId ) ;
if ( settings - > Viewport OsDesktop Pos. x ! = FLT_MAX & & settings - > Viewport OsDesktop Pos. y ! = FLT_MAX )
if ( settings - > Viewport Platform Pos. x ! = FLT_MAX & & settings - > Viewport Platform Pos. y ! = FLT_MAX )
buf - > appendf ( " Viewport OsDesktop Pos=%d,%d\n " , ( int ) settings - > Viewport OsDesktop Pos. x , ( int ) settings - > Viewport OsDesktop Pos. y ) ;
buf - > appendf ( " Viewport Platform Pos=%d,%d\n " , ( int ) settings - > Viewport Platform Pos. x , ( int ) settings - > Viewport Platform Pos. y ) ;
}
}
buf - > appendf ( " Collapsed=%d \n " , settings - > Collapsed ) ;
buf - > appendf ( " Collapsed=%d \n " , settings - > Collapsed ) ;
buf - > appendf ( " \n " ) ;
buf - > appendf ( " \n " ) ;
@ -4545,7 +4545,7 @@ void ImGui::SetCurrentViewport(ImGuiViewport* viewport)
g . IO . PlatformInterface . ChangedViewport ( g . CurrentViewport ) ;
g . IO . PlatformInterface . ChangedViewport ( g . CurrentViewport ) ;
}
}
ImGuiViewport * ImGui : : Viewport ( ImGuiWindow * window , ImGuiID id , ImGuiViewportFlags flags , const ImVec2 & os_desktop _pos, const ImVec2 & size )
ImGuiViewport * ImGui : : Viewport ( ImGuiWindow * window , ImGuiID id , ImGuiViewportFlags flags , const ImVec2 & platform _pos, const ImVec2 & size )
{
{
ImGuiContext & g = * GImGui ;
ImGuiContext & g = * GImGui ;
IM_ASSERT ( id ! = 0 ) ;
IM_ASSERT ( id ! = 0 ) ;
@ -4569,7 +4569,7 @@ ImGuiViewport* ImGui::Viewport(ImGuiWindow* window, ImGuiID id, ImGuiViewportFla
IM_ASSERT ( viewport - > Pos . y = = 0.0f ) ;
IM_ASSERT ( viewport - > Pos . y = = 0.0f ) ;
viewport - > Window = window ;
viewport - > Window = window ;
viewport - > Flags = flags ;
viewport - > Flags = flags ;
viewport - > Platform OsDesktopPos = os_desktop _pos;
viewport - > Platform Pos = platform _pos;
viewport - > LastFrameActive = g . FrameCount ;
viewport - > LastFrameActive = g . FrameCount ;
// Request an initial DpiScale before the OS platform window creation
// Request an initial DpiScale before the OS platform window creation
@ -5779,8 +5779,8 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFl
window - > Collapsed = settings - > Collapsed ;
window - > Collapsed = settings - > Collapsed ;
if ( settings - > ViewportId )
if ( settings - > ViewportId )
window - > ViewportId = settings - > ViewportId ;
window - > ViewportId = settings - > ViewportId ;
if ( settings - > Viewport OsDesktop Pos. x ! = FLT_MAX & & settings - > Viewport OsDesktop Pos. y ! = FLT_MAX )
if ( settings - > Viewport Platform Pos. x ! = FLT_MAX & & settings - > Viewport Platform Pos. y ! = FLT_MAX )
window - > Viewport OsDesktopPos = settings - > ViewportOsDesktop Pos;
window - > Viewport PlatformPos = settings - > ViewportPlatform Pos;
if ( ImLengthSqr ( settings - > Size ) > 0.00001f )
if ( ImLengthSqr ( settings - > Size ) > 0.00001f )
size = settings - > Size ;
size = settings - > Size ;
}
}
@ -5926,7 +5926,7 @@ static void ImGui::SetWindowViewportTranslateToPreservePlatformPos(ImGuiWindow*
{
{
if ( prev_viewport = = curr_viewport )
if ( prev_viewport = = curr_viewport )
return ;
return ;
ImVec2 new_pos = Convert OsDesktopPosToViewportPos( ConvertViewportPosToOsDesktop Pos( window - > PosFloat , prev_viewport ) , curr_viewport ) ;
ImVec2 new_pos = Convert PlatformPosToViewportPos( ConvertViewportPosToPlatform Pos( window - > PosFloat , prev_viewport ) , curr_viewport ) ;
if ( ( window - > FlagsPreviousFrame ^ window - > Flags ) & ImGuiWindowFlags_NoTitleBar )
if ( ( window - > FlagsPreviousFrame ^ window - > Flags ) & ImGuiWindowFlags_NoTitleBar )
{
{
// As a convenience, automatically adjust for client rect difference for the common use case of toggling the imgui title-bar when we move our tools to a separate OS window
// As a convenience, automatically adjust for client rect difference for the common use case of toggling the imgui title-bar when we move our tools to a separate OS window
@ -5980,9 +5980,9 @@ static void ImGui::UpdateWindowViewport(ImGuiWindow* window, bool window_pos_set
if ( ! window_is_mouse_tooltip & & ! current_viewport - > GetRect ( ) . Contains ( window - > Rect ( ) ) )
if ( ! window_is_mouse_tooltip & & ! current_viewport - > GetRect ( ) . Contains ( window - > Rect ( ) ) )
{
{
// Create an undecorated, temporary OS/platform window
// Create an undecorated, temporary OS/platform window
ImVec2 os_desktop_pos = ConvertViewportPosToOsDesktop Pos( g . IO . MousePos - g . ActiveIdClickOffset , g . MouseViewport ) ;
ImVec2 platform_pos = ConvertViewportPosToPlatform Pos( g . IO . MousePos - g . ActiveIdClickOffset , g . MouseViewport ) ;
ImGuiViewportFlags viewport_flags = ImGuiViewportFlags_NoDecoration | ImGuiViewportFlags_NoFocusOnAppearing | ImGuiViewportFlags_NoInputs ;
ImGuiViewportFlags viewport_flags = ImGuiViewportFlags_NoDecoration | ImGuiViewportFlags_NoFocusOnAppearing | ImGuiViewportFlags_NoInputs ;
ImGuiViewport * viewport = Viewport ( window , window - > ID , viewport_flags , os_desktop _pos, window - > Size ) ;
ImGuiViewport * viewport = Viewport ( window , window - > ID , viewport_flags , platform _pos, window - > Size ) ;
window - > Flags | = ImGuiWindowFlags_FullViewport ;
window - > Flags | = ImGuiWindowFlags_FullViewport ;
window - > Viewport = viewport ;
window - > Viewport = viewport ;
created_viewport = true ;
created_viewport = true ;
@ -6013,15 +6013,15 @@ static void ImGui::UpdateWindowViewport(ImGuiWindow* window, bool window_pos_set
if ( window - > Viewport = = NULL & & window - > ParentWindow )
if ( window - > Viewport = = NULL & & window - > ParentWindow )
window - > Viewport = window - > ParentWindow - > Viewport ;
window - > Viewport = window - > ParentWindow - > Viewport ;
// Restore a viewport id (= window that hasn't been activated yet), try to restore the viewport based on saved 'window->Viewport OsDesktop Pos'
// Restore a viewport id (= window that hasn't been activated yet), try to restore the viewport based on saved 'window->Viewport Platform Pos'
if ( window - > Viewport = = NULL & & window - > ViewportId ! = 0 )
if ( window - > Viewport = = NULL & & window - > ViewportId ! = 0 )
{
{
window - > Viewport = FindViewportByID ( window - > ViewportId ) ;
window - > Viewport = FindViewportByID ( window - > ViewportId ) ;
if ( window - > Viewport = = NULL )
if ( window - > Viewport = = NULL )
{
{
if ( window - > Viewport OsDesktop Pos. x ! = FLT_MAX & & window - > Viewport OsDesktop Pos. y ! = FLT_MAX )
if ( window - > Viewport Platform Pos. x ! = FLT_MAX & & window - > Viewport Platform Pos. y ! = FLT_MAX )
{
{
ImGuiViewport * viewport = Viewport ( window , window - > ID , ImGuiViewportFlags_NoDecoration , window - > Viewport OsDesktop Pos, window - > Size ) ;
ImGuiViewport * viewport = Viewport ( window , window - > ID , ImGuiViewportFlags_NoDecoration , window - > Viewport Platform Pos, window - > Size ) ;
window - > Flags | = ImGuiWindowFlags_FullViewport ;
window - > Flags | = ImGuiWindowFlags_FullViewport ;
window - > Viewport = viewport ;
window - > Viewport = viewport ;
created_viewport = true ;
created_viewport = true ;
@ -6043,7 +6043,7 @@ static void ImGui::UpdateWindowViewport(ImGuiWindow* window, bool window_pos_set
window - > Viewport - > Flags | = ImGuiViewportFlags_NoDecoration ;
window - > Viewport - > Flags | = ImGuiViewportFlags_NoDecoration ;
if ( ! window - > Viewport - > PlatformRequestResize )
if ( ! window - > Viewport - > PlatformRequestResize )
window - > Viewport - > Size = window - > Size ;
window - > Viewport - > Size = window - > Size ;
window - > Viewport - > Platform OsDesktopPos = ConvertViewportPosToOsDesktop Pos( window - > Pos , window - > Viewport ) ;
window - > Viewport - > Platform Pos = ConvertViewportPosToPlatform Pos( window - > Pos , window - > Viewport ) ;
window - > Flags | = ImGuiWindowFlags_FullViewport ;
window - > Flags | = ImGuiWindowFlags_FullViewport ;
}
}
@ -6192,7 +6192,7 @@ static void ImGui::UpdateManualResize(ImGuiWindow* window, const ImVec2& size_au
if ( pos_target . x ! = FLT_MAX )
if ( pos_target . x ! = FLT_MAX )
{
{
if ( window - > Flags & ImGuiWindowFlags_FullViewport )
if ( window - > Flags & ImGuiWindowFlags_FullViewport )
window - > Viewport - > Platform OsDesktopPos = ConvertViewportPosToOsDesktop Pos( ImFloor ( pos_target ) , window - > Viewport ) ;
window - > Viewport - > Platform Pos = ConvertViewportPosToPlatform Pos( ImFloor ( pos_target ) , window - > Viewport ) ;
else
else
window - > Pos = window - > PosFloat = ImFloor ( pos_target ) ;
window - > Pos = window - > PosFloat = ImFloor ( pos_target ) ;
MarkIniSettingsDirty ( window ) ;
MarkIniSettingsDirty ( window ) ;
@ -6553,7 +6553,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
UpdateManualResize ( window , size_auto_fit , & border_held , resize_grip_count , & resize_grip_col [ 0 ] ) ;
UpdateManualResize ( window , size_auto_fit , & border_held , resize_grip_count , & resize_grip_col [ 0 ] ) ;
// When a window is marked as owning its viewport, we immediately update the viewport after a resize
// When a window is marked as owning its viewport, we immediately update the viewport after a resize
window - > Viewport OsDesktop Pos = window - > Viewport - > Platform OsDesktop Pos;
window - > Viewport Platform Pos = window - > Viewport - > Platform Pos;
if ( flags & ImGuiWindowFlags_FullViewport )
if ( flags & ImGuiWindowFlags_FullViewport )
if ( window - > Size . x ! = window - > Viewport - > Size . x | | window - > Size . y ! = window - > Viewport - > Size . y )
if ( window - > Size . x ! = window - > Viewport - > Size . x | | window - > Size . y ! = window - > Viewport - > Size . y )
{
{
@ -14020,8 +14020,8 @@ void ImGui::ShowMetricsWindow(bool* p_open)
if ( ImGui : : TreeNode ( ( void * ) ( intptr_t ) viewport - > ID , " Viewport #%d, ID: 0x%08X, DrawLists: %d, Size: (%.0f,%.0f) " , i , viewport - > ID , viewport - > DrawDataBuilder . GetDrawListCount ( ) , viewport - > Size . x , viewport - > Size . y ) )
if ( ImGui : : TreeNode ( ( void * ) ( intptr_t ) viewport - > ID , " Viewport #%d, ID: 0x%08X, DrawLists: %d, Size: (%.0f,%.0f) " , i , viewport - > ID , viewport - > DrawDataBuilder . GetDrawListCount ( ) , viewport - > Size . x , viewport - > Size . y ) )
{
{
ImGui : : BulletText ( " Pos: (%.0f,%.0f) " , viewport - > Pos . x , viewport - > Pos . y ) ;
ImGui : : BulletText ( " Pos: (%.0f,%.0f) " , viewport - > Pos . x , viewport - > Pos . y ) ;
ImGui : : BulletText ( " PlatformPos: (%.0f,%.0f); DpiScale: %.0f%% " , viewport - > PlatformPos . x , viewport - > PlatformPos . y , viewport - > DpiScale * 100.0f ) ;
ImGui : : BulletText ( " Flags: 0x%04X " , viewport - > Flags ) ;
ImGui : : BulletText ( " Flags: 0x%04X " , viewport - > Flags ) ;
ImGui : : BulletText ( " PlatformOsDesktopPos: (%.0f,%.0f); DpiScale: %.0f%% " , viewport - > PlatformOsDesktopPos . x , viewport - > PlatformOsDesktopPos . y , viewport - > DpiScale * 100.0f ) ;
for ( int layer_i = 0 ; layer_i < IM_ARRAYSIZE ( viewport - > DrawDataBuilder . Layers ) ; layer_i + + )
for ( int layer_i = 0 ; layer_i < IM_ARRAYSIZE ( viewport - > DrawDataBuilder . Layers ) ; layer_i + + )
for ( int draw_list_i = 0 ; draw_list_i < viewport - > DrawDataBuilder . Layers [ layer_i ] . Size ; draw_list_i + + )
for ( int draw_list_i = 0 ; draw_list_i < viewport - > DrawDataBuilder . Layers [ layer_i ] . Size ; draw_list_i + + )
Funcs : : NodeDrawList ( NULL , viewport - > DrawDataBuilder . Layers [ layer_i ] [ draw_list_i ] , " DrawList " ) ;
Funcs : : NodeDrawList ( NULL , viewport - > DrawDataBuilder . Layers [ layer_i ] [ draw_list_i ] , " DrawList " ) ;