Commit Graph

94 Commits

Author SHA1 Message Date
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
a35585f26a Updated to ImGui 1.74 2020-02-03 20:11:04 +00:00
Sebastian
91080c3988 Fixed crash in editor-preview worlds, introduced in the last commit. 2020-01-28 20:59:50 +00:00
Sebastian
848e7294c8 Updated to engine version 4.24. 2020-01-27 21:51:42 +00:00
Sebastian
9e5975c9bb Making sure that mouse sharing options don't interfere with touch input. 2019-08-08 18:20:18 +01:00
Sebastian
95d27334fe Updated input handler to ignore fake mouse events potentially raised when touch input is unhandled. 2019-08-08 18:06:07 +01: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
Sebastian
5f1dc964cf Added support for touch input (experimental and right now only non-shared):
- Added to SImGuiWidget and FImGuiInputHandler handling of touch started, move and ended events.
- Events are passed to FImGuiInputState to be copied to ImGui IO as a mouse move and left button down.
- Added one frame lag between touch ending event and ending processing, to allow ImGui handle mouse-up event.
2019-08-01 21:41:12 +01:00
Sebastian
e651b0f88f Fixed resizing of ImGui windows with shared mouse input. 2019-07-28 20:20:28 +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
979903722a Moved the whole input handling from SImGuiWidget to UImGuiInputHandler:
- Moved responsibility for updating input state from the widget to the input handler.
- Changed the widget to fully delegate input events to the input handler and only manage its own input state.
- Changed the input handler interface to allow handling of all the necessary input events.
- Changed the input handler interface to use FReply as a response type and removed obsolete FImGuiInputResponse.
2019-06-30 18:25:58 +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
Sebastian
22c5b42387 Cleanup in SImGuiWidget:
- Removed mouse status update.
- Removed mouse notifications.
- Removed unused function to copy modifier keys on mouse events (key down/up versions are still in use).
2019-06-23 15:21:43 +01:00
Sebastian
2d728f1f26 Removed from FImGuiModuleManager custom check for a game thread as both reasons to have it are not relevant any more.
Current implementation of the IsInGameThread() doesn't make exceptions for a loading thread and lazy initialization of the Unreal resources ensures that plugin doesn't do any work before the game starts.
2019-06-15 13:37:11 +01:00
Sebastian
59dc8decf8 Fixed issue with SImGuiLayout blocking mouse input for other Slate widgets, which was introduced by refactorization of widgets (version 1.14, commit c144658f):
- Changed visibility of widgets in ImGui layout from 'Visible' to 'SelfHitTestInvisible'.
2019-05-31 19:58:00 +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
c144658f37 Refactored ImGui widget and removed dependency on ImGui internal cursor data:
- Added SImGuiLayout to resets layout and house SImGuiWidget.
- Module manager creates SImGuiLayout instead of SImGuiWidget (eventually it should be replaced with a higher level object, like AHUD).
- Reworked ImGui canvas dragging and scaling and moved to SImGuiCanvasControl.
- Removed dependency on ImGui internal cursor data. New presentation is cleaner and doesn't use cursor data.
- Rendering code could be simplified after layout reset provided by SImGuiLayout.
- SImGuiWidget still handles input, rendering of ImGui draw data and activation of SImGuiCanvasControl.
- All widgets are in own subfolder.
2019-03-13 20:40:13 +00:00
Sebastian
6c6e766a20 Fixed mapping from FKey to ImGui key index to gracefully handle unsupported keys and work on platforms that does not support all the keys defined in ImGui key map.
Instead of throwing assertion unsupported keys are mapped to 0, what guarantees that ImGui key map is always initialized and unsupported keys mapped to index that cannot be reached from key input events that have non-zero key codes.
2019-03-11 19:39:11 +00:00
Sebastian
6643958586 Fixed non-unity compile errors and warnings. 2019-03-11 19:19:32 +00:00
Sebastian
ffe532f6b3 Fixed restoring of the user focus to game viewport in UE 4.20+ 2019-02-05 20:48:19 +00:00
Sebastian
6eb66bf021 Renamed ImGuiSettings.h/cpp to ImGuiModuleSettings.h/cpp to keep it more consistent with conventions used in module. 2018-12-08 21:15:20 +00:00
Sebastian
09572a8ef9 Refactorization of ImGui settings:
- Divided ImGui settings into UImGuiSettings persistent object and FImGuiModuleSettings proxy that provides interface for other classes and handles delayed loading of UImGuiSettings.
- Removed from FImGuiModuleProperties and FImGuiModuleCommands direct dependencies on UImGuiSettings.
- Simplified FImGuiModuleProperties making it more robust when moving data after hot-reloading.
- Inverted binding logic by injecting FImGuiModuleProperties and FImGuiModuleCommands into FImGuiModuleSettings and letting it take care of synchronization. Dependencies are setup by module manager.
- Added to module manager FImGuiModuleSettings and interface to access it.
- Cleaned interface of FImGuiInputHandlerFactory and removed direct dependency on settings.
2018-12-08 21:03:18 +00:00
Sebastian
0bf940de81 Modified UImGuiInputHandler::OnKeyDown to only handle command bindings if keyboard input is not shared and to leave it for DebugExec if it is. 2018-12-04 19:41:22 +00:00
Sebastian
51031d7d86 Changed input sharing properties to be initialized and updated from ImGui settings. 2018-12-02 20:32:42 +00:00
Sebastian
f4718e404a Introduced input sharing properties:
- Added properties defining whether keyboard or gamepad input should be shared between ImGui and game.
- Added interface and commands to dynamically change introduced properties.
- Updated ImGui Input Handler to base default input responses on sharing properties.
2018-12-02 18:42:28 +00:00
Sebastian
0c69e6ddfc Changed how module properties are passed to lambda executed during hot-reloading as lambdas with mutable captures seems to be not always supported. 2018-11-27 21:17:06 +00:00
Sebastian
c662869820 Fixed duplicated registrations of ImGui Demo that were introduced in recent changes. 2018-11-27 20:56:02 +00:00
Sebastian
e05cea2789 Added to ImGui Context Manager an event raised when a new context proxy is created. 2018-11-27 20:54:26 +00:00
Sebastian
62d26f4ee5 Moved ImGui Module Properties to public directory and added to ImGui Module interface allowing access their instance. 2018-11-26 20:20:53 +00:00
Sebastian
a8ba10d074 Added code that moves module properties to hot-reloaded modules. 2018-11-25 21:26:06 +00:00
Sebastian
209a594616 Replaced module properties singleton with instance created as part of module manager:
- Removed ImGui Module Properties singleton interface and released construction constraints.
- Added ImGui Module Properties to ImGui Module Manager.
- Moved ImGui Demo to ImGui Module Manager.
- ImGui Demo and ImGui Module Commands keep reference to ImGui Module Manager that gives them access to properties.
2018-11-25 20:36:55 +00:00
Sebastian
70db3c7b20 Replaced console variables in FImGuiModuleProperties with plain variables. Added console commands to toggle states of those properties. 2018-11-25 19:11:48 +00:00
Sebastian
e00c1ff9e3 Renamed SwitchInputMode to ToggleInput command and interface to provide a better consistency with the engine and between module functions.
Note that this commit contains a minor breaking change for custom implementations of UImGuiInputHandler.
- Changed "ImGui.SwitchInputMode" command name to "ImGui.ToggleInput".
- Changed SwitchInputModeKey property in settings to ToggleInput.
- Added temporary mechanism protecting from losing data by moving it from SwitchInputModeKey to ToggleInput and removing deprecated entry from the default config file.
- Renamed UImGuiInputHandler protected function from IsSwitchInputModeEvent to IsToggleInputEvent, so custom implementations of that class may require update.
2018-11-24 21:16:25 +00:00
Sebastian
c5f3759664 Moved console variables and commands to wrapper objects:
- Moved property variables to ImGui Module Properties.
- Moved console command to ImGui Module Commands (one for now but more will be added).
- ImGui Module Commands is created by ImGui Module Manager, what means that commands are registered after module is loaded and unregistered when it is unloaded.
- Updated settings to allow more convenient use: Added global pointer to default object and event raised when it is loaded.
2018-11-24 19:54:01 +00:00
Sebastian
fc6fd2e498 Clean-up in debug code:
- Added common debug config file for module-wide debug symbols and loggers.
- Added IMGUI_MODULE_DEVELOPER symbol to enable or disable module developer mode, that is intended to add additional module debug options hidden from normal usage.
- ImGui Widget debug is only available in developer mode because in normal usage it adds noise to ImGui console variables while not being very useful.
- Merged LogImGuiInputHandler and LogImGuiInputHandlerFactory loggers as they are part of the same feature.
- Renamed LogImGuiInputState to LogImGuiInput.
2018-10-30 22:25:48 +00:00
Sebastian
20d1490bd3 Replaced 'ImGui.DrawMouseCursor' console variable with a settings property. 2018-10-28 21:15:02 +00:00
Sebastian
b492932055 Replaced 'ImGui.DebugDrawOnWorldTick' console variable with conditional compilation switches and extended support to post actor tick event:
- Replaced 'ImGui.DebugDrawOnWorldTick' with DRAW_EVENTS_ON_WORLD_TICK_START switch to enforce consistency in project setup.
- Added DRAW_EVENTS_ON_POST_ACTOR_TICK to support post actor tick events (only for UE 4.18 or later).
- Added DRAW_EVENTS_ORDER_WORLD_BEFORE_MULTI_CONTEXT to allow explicitly define order between multi-context and world-context draw events.
- Rules can be configured in ImGui.Build.cs file.
2018-10-28 19:54:18 +00:00
Sebastian
b4e959ccd3 Changed module type to allow stripping it from selected builds:
- Changed module type to 'Developer'.
- Added runtime loader that handles automatic module loading in runtime builds (feature can be selectively enabled).
2018-10-17 23:16:28 +01:00
Sebastian
36cdd0c337 Updated to ImGui 1.65 2018-09-12 19:21:36 +01:00
Sebastian
dd06fcbbdf Added support for registering in module user textures to them in ImGui:
- Added ImGuiTextureHandle that is implicitly convertible to ImTextureID and can be used directly with ImGui interface.
- Added to ImGui Module interface allowing to register, update and release textures or find handles to existing resources.
- Refactored Texture Manager and added functions allowing create, update or release resources for user textures.
- Loosened resource verification policy in Texture Manager to work smoothly with external requests and to handle gracefully situations when invalid texture id is passed to ImGui.
- Introduced ‘error texture’ that is used for invalid resources.
2018-08-15 22:20:46 +01:00
Sebastian
9c181463ce Replaced in Texture Manager raw texture pointer with weak object pointer and removed explicit call to IsValidLowLevel. 2018-08-14 20:40:25 +01:00
Sebastian
d9220ad536 Fixed bad deallocation in Texture Manager and interface to create textures from raw data:
- Fixed rather embarrassing overlook in deallocation of data array passed from to CreateTexture from other function.
- Changed CreateTexture to use cleanup function passed with data (optional and only needed if data need to be released). Keeping data allocation and deallocation code together should make bugs like this easier to spot and avoid. Additionally this allows for more generic usage.
2018-08-14 20:28:25 +01:00
Sebastian
74c794b53e Fixed hot-reloading issues. Hot-reloading may be useful when developing this plug-in but it doesn't play well with free functions used in ImGui interface (limitation of the system I guess). Switched to a custom GImGui which after hot-reload can be redirected to a new module. This fixes a crash caused by GImGui in obsolete module pointing to released resources and guarantees that ImGui code remains functional. 2018-08-10 23:53:03 +01:00