Commit Graph

26 Commits

Author SHA1 Message Date
Sebastian
c7d36a802b Cleaned unused delegates code:
- Removed code allowing to register game delegates outside of the delegates container.
- Removed unused multi-context delegate that is not part of the container.
2020-06-28 18:13:29 +01:00
Sebastian
d55af9db11 Making sure that the DPI scale is set new contexts:
- Moved implementation of the DPI scale from context manager to context proxy.
- Passing the DPI scale to the context proxy constructor for the initial setup.
2020-06-28 17:02:56 +01:00
Sebastian
003eed34d7 Added multi-PIE support to adaptive canvas size:
- Adaptive size is controlled by the ImGui Widget, which passes it from the view-port to the context proxy.
- Context only copies display size that is set from the outside.
- Removed feature dependency from the manager.
2020-04-16 15:36:29 +01:00
Sebastian
62a739ac9f Removed from the context proxy unused IsMouseHoveringAnyWindow property and moved code for WantsMouseCapture to be updated in the same scope as other context information. 2020-04-16 14:50:13 +01:00
kkawachi
174e38cfc6
Acquire size of ImGUI canvas from game viewport (#27)
- WIP: Does not support multi-PIE. All instances get the same size.
- Setting to enable/disable adaptive size.
2020-04-16 13:08:32 +01:00
yash3ahuja
73cdfe8d83
Fix issue with ImGui popup/modal windows not being able to be closed in transparent mouse input mode. The issue was caused by relying on ImGui::IsWindowHovered to determine whether an ImGui window was being hovered over, which doesn't work as expected with popups and modals. The ImGui documentation instead recommends using ImGuiIO::WantCaptureMouse to determine mouse input forwarding, so now SImGuiWidget relies on this value to update it's transparent mouse input state. (#25) 2020-03-25 01:26:14 +00:00
Sebastian
71dd082f69 Changed FImGuiContextManager to prevent moving created context proxies and to allow other objects with the same or shorter lifespan safely use cached pointers to those resources.
- Disabled move semantics in FImGuiContextProxy and removed code related to moving ImGui context.
- Changed FImGuiContextManager to store proxies as unique pointers.
2019-08-03 17:45:53 +01:00
kkawachi
5e4b7084de Fixed build errors when the plugin is placed in the engine directory. (#19)
Merged 4 commits fixing build errors when compiling this as an engine plugin:
- Changed include directives to use full paths (ex. <ICursor.h> -> <GenericPlatform/ICursor.h>).
- Added categories to FImGuiKeyInfo properties (required for all blueprint exposed types in engine plugins).
- Added explicit configuration of PCHUsage (without that it is assumed to be UseExplicitOrSharedPCHs in engine plugins and UseSharedPCHs in game ones) - amended to work also in the older engine versions.
2019-07-27 18:45:25 +01:00
Sebastian
10ce6386d4 Added support for shared mouse input:
- With the mouse sharing enabled, SImGuiWidget can update mouse position without enabling hit-tests. Actual input mode depends whether mouse cursor is hovering any ImGui window or not.
- Added to context proxy interface to read whether that context has mouse hovering any window.
- Added boilerplate code to support mouse sharing settings, properties and commands.
2019-07-08 20:46:28 +01:00
Sebastian
852a501022 Moved input state from SImGuiWidget to FImGuiContextProxy and modified implementation of FImGuiInputState reset functionality.
Moving input state to context proxy decouples it a bit from a particular input source and although not used right now, it allows multiple sources to send input in parallel.
2019-06-23 20:29:25 +01:00
segross
ca4001343e
Merge branch 'master' into master 2019-05-05 19:59:19 +01:00
Sebastian
4a9d66889b Added ImGui early debug events:
- Added to FImGuiDelegates interface early debug delegates called during world tick start.
- Delegates are called in fixed order: multi-context early debug, world early debug (called during world tick start), world debug, multi-context debug (called during world post actor tick or if not available, during world tick start).
- Removed from build script configuration of debug delegates.
2019-04-14 12:16:15 +01:00
Mantisis
dc516f052e Fix Name initialized after DrawEven in ImGuiContextProxy 2019-04-11 21:06:41 +02:00
Sebastian
867a34e640 Changed interface to register ImGui debug delegates:
- Added new FImGuiDelegates interface for ImGui debug delegates.
- Added FImGuiDelegatesContainer for ImGui delegates.
- Added code preserving delegates during hot-reloading and moving them to a new module.
- Depreciated old FImGuiModule delegates interface and FImGuiDelegateHandle.
- Delegates registered with depreciated interface are redirected and get benefit of being preserved during hot-reloading. This can be controlled with IMGUI_REDIRECT_OBSOLETE_DELEGATES.
- Added IMGUI_WITH_OBSOLETE_DELEGATES allowing to strip depreciated interface from builds.
- Modified context manager and context proxy to work with FImGuiDelegatesContainer.
2019-04-10 20:19:11 +01:00
Sebastian
6643958586 Fixed non-unity compile errors and warnings. 2019-03-11 19:19:32 +00:00
Sebastian
413b4f407a Upgraded to ImGui 1.61:
- Upgraded ImGui framework to 1.61 WIP, which adds a few improvements to context management.
- Removed from plugin implementation all the references to default ImGui context.
- Removed from ImGui Context Proxy destructor code switching to default ImGui context (there is no default context and decision is left for a higher level manager when to switch and to what context).
- Added own font atlas that is shared by all contexts and used explicitly to create Slate resources.
- Removed from ImGui Context Proxy workaround that was previously needed for copying cursor data to dynamically created contexts.
- Removed explicit saving of context settings before its destruction as this is now handled in ImGui::DestroyContext().
- Reimplemented ImGuiImplementation::GetCursorData() to use new interface.
2018-05-09 20:22:48 +01:00
Sebastian
cfc76ea286 Added to ImGui Context Proxy information about context display size. 2018-04-17 23:03:24 +01:00
Sebastian
8c1c710646 Moved ImGui Draw events, so they are called during World Tick Start. Old behaviour, where those events were called during Post-Tick, can be restored by setting console variable ImGui.DebugDrawOnWorldTick to zero. 2018-03-20 23:24:03 +00:00
Sebastian
052ae0a201 Reduced lag between producing ImGui output and rendering it:
- ImGui Context Proxy Tick function has been split for Tick and Draw. Both functions may now be called separately from different places but they will be processed only once per frame. This opens possibility to define own mechanisms to trigger draw events and to independently update contexts.
- Multi-context draw event delegate is passed to ImGui Context Proxy during construction rather than as an argument of Tick function.
- To minimise lag between ending ImGui frame and rendering its output, ImGui Widget updates its own context just before painting.
- Contexts without widget (editor, dedicated server) are updated by manager during post-tick event.
- Instead of setting global CurrentContextIndex by ImGui Context Manager, information about context is passed to ImGui Demo as part of a closure.
- Fixed bug in ImGui Demo where inactive contexts were triggering multi-PIE warning.
2018-03-18 19:45:08 +00:00
Sebastian
f18e1f0b68 Changed to hardware cursor as a default cursor in input mode and added ImGui.DrawMouseCursor console variable to allow to switch to ImGui cursor.
Using ImGui to draw cursor helps to reduce visual error between mouse cursor and position in ImGui. But it has been reported that this works really bad when frame-rate drops and becomes unusable below ~20 FPS. Taking that into account hardware cursor seems like a better default option. Old behaviour can be enabled with ImGui.DrawMouseCursor console variable.
2018-03-13 23:42:37 +00:00
Sebastian
00ad746267 Added interface to register ImGui debug delegates. 2017-10-03 21:16:17 +01:00
Sebastian
1a6aa98f51 Added support for session reloading and updated contexts and widgets management:
- Added to ImGui Context Proxy a name that is mapped to ini file set in ImGui context.
- ImGui Context Manager generates unique context names from world type and context index.
- Refactored ImGui Context Manager to have a cleaner separation between editor and non-editor bits.
- Fixed context update rules in ImGui Context Manager.
- Changed widgets management in ImGui Module Manager to allow automatic garbage collection after viewports are closed and manual removal when module is shutting down.
- ImGui Widgets are in full control of communication with context proxies.
- Added basic world context utilities.
- Refactored world context index utilities and replaced ambiguous 'default context index' with 'editor' and 'game' ones.
2017-09-27 21:16:54 +01:00
Sebastian
5625365310 Added handling of special input cases:
- Different handling of 'Esc' key. If ImGui has active items then it is used to exit edit mode, otherwise it is passed to editor to cancel session.
- Suppressing keyboard input when console is opened and retaking it when it is closed.
- Fixed issue with losing input when console is closed.
2017-09-16 21:52:14 +01:00
Sebastian
77bb73dbce Added Multi-PIE support:
- Added ImGui Context Manager to create and manage ImGui Context Proxies.
- Changed ImGui Context Proxy to dynamically create context and allow pairing with input state.
- Changed ImGui Module Manager to create one widget per context.
- Changed ImGui Widget to work in different input modes.
- Changed ImGui Input State to allow partial reset (only mouse or keyboard).
2017-08-28 20:29:07 +01:00
Sebastian
393460f330 Added input support:
- Added ImGui Input State to collect and store input updates.
- Changed Slate ImGui Widget to handle Slate input events and store them in input state.
- Changed ImGui Context Proxy to copy input state to its context.
2017-04-22 16:38:04 +01:00
Sebastian
35f2d342a0 Added support for ImGui context update and rendering:
- Added ImGui Module Manager that that implements module logic and manages other module resources.
- Added Texture Manager to manage texture resources and maps them to index that can be passed to ImGui context.
- Added Context Proxy that represents and manages a single ImGui context.
- Added Slate ImGui Widget to render ImGui output.
2017-03-26 21:32:57 +01:00