#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3209340 on 2016/11/23 by Ben.Marsh
Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h.
Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms.
* Every header now includes everything it needs to compile.
* There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first.
* There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h.
* Every .cpp file includes its matching .h file first.
* This helps validate that each header is including everything it needs to compile.
* No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more.
* You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there.
* There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible.
* No engine code explicitly includes a precompiled header any more.
* We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies.
* PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files.
Tool used to generate this transform is at Engine\Source\Programs\IncludeTool.
[CL 3209342 by Ben Marsh in Main branch]
==========================
MAJOR FEATURES + CHANGES
==========================
Change 2817214 on 2016/01/06 by mason.seay
Adjusted Walkable Slope Override for mesh
#jira UE-24473
Change 2817384 on 2016/01/06 by Michael.Schoell
Crash fix when selecting a variable node for a variable that is not owned by a Blueprint.
#jira UE-24958 - Crash when getting the sequence player in level blueprint
Change 2817438 on 2016/01/06 by Max.Chen
Sequencer: Add option to specify position of material name from the movie scene capture interface. For example, MovieCapture_{material}_{width}x{height}.{frame} will create files like this: MovieCapture_FinalImage_1920x1080.0010.exr
#rb Andrew.Rodham
#jira UE-24926
Change 2817459 on 2016/01/06 by Marc.Audy
PR #1679: Move MinRespawnDelay to virtual method AController::GetMinRespawnDelay() (Contributed by bozaro)
#jira UE-22309
Change 2817472 on 2016/01/06 by Ben.Marsh
Always run UHT in unattended mode from UBT; we don't want it opening any dialogs. Match3 is currently missing a plugin, and it's causing builds to time out.
Change 2817473 on 2016/01/06 by Marc.Audy
PR #1644: Improve "SpawnActor failed because the spawned actor IsPendingKill" error message (Contributed by slonopotamus)
#jira UE-21911
Change 2817533 on 2016/01/06 by Lauren.Ridge
Fixing Match3 not compiling in Debug (removed two checks on TileLibrary)
#jira UE-25004
Change 2817625 on 2016/01/06 by Taizyd.Korambayil
#jira UE-19659 Reimported Template Animations with Proper Skeletons
Change 2817647 on 2016/01/06 by Lukasz.Furman
replaced ensure during initialization of blackboard based behavior tree task with log warning
#ue4
#jira UE-24448
#rb Mieszko.Zielinski
Change 2817648 on 2016/01/06 by Lukasz.Furman
fixed broken rendering component of navmesh actor after delete-undo operation
#ue4
#jira UE-24446
#rb Mieszko.Zielinski
Change 2817688 on 2016/01/06 by Taizyd.Korambayil
#jira UE-22347 Fixed Message Warnings on Startup
Change 2817815 on 2016/01/06 by Jamie.Dale
Multiple fixes when editing right-to-left text
- Text is now shaped over the entire line to allow rich-text and selected text to be shaped correctly across block boundaries.
- Text layout highlights are now able to correctly handle bi-directional and right-to-left text.
- Text picking can now handle bi-directional and right-to-left text.
- Text picking can now pick the individual characters that make up a ligature glyph.
- The caret now draws on the logical (rather than visual) side of the glyph (to handle right-to-left text).
- Glyph clusters (multiple glyphs produced from a single character) are now treated as a single logical glyph.
- Optimized some of the FShapedGlyphSequence to allow an early out once they've found and processed the start and end glyphs.
#jira UE-25013
Change 2817828 on 2016/01/06 by Nick.Darnell
Editor - Fixing the OpenLauncher call to be take a structure to allow us to customize it more, and to properly handle the silent command the way we're planning to handle it in the launcher.
#jira UE-24563
Change 2818052 on 2016/01/06 by Nick.Darnell
Editor - Adding another application check for the launcher to catch the current app name on mac.
#jira UE-24563
Change 2818149 on 2016/01/06 by Taizyd.Korambayil
#jira UE-19097 Adjusted FirstPerson Pawn, so that Camera doesnt clip the Arm Mesh
Change 2818360 on 2016/01/06 by Chris.Babcock
Fix reading from ini sections not cached after build system changes for 4.11
#jira UE-25027
#ue4
#android
Change 2818369 on 2016/01/06 by Ryan.Vance
#jira UE-24976
Adding tessellation support to instanced stereo
Change 2818999 on 2016/01/07 by Robert.Manuszewski
UHT will no longer try to load game-only plugins.
#jira UE-25032
- Changed module type RuntimeNoProgram to RuntimeAndProgram so that bu default Runtime plugin modules won't be loaded by programs
- Added better error message when UHT's PreInit fails
Change 2819064 on 2016/01/07 by Richard.Hinckley
#jira UE-24694
Fixing array usage in 4.11 stream.
Change 2819067 on 2016/01/07 by Ori.Cohen
When editor tries to spawn a physics asset we automatically load the needed skeletal mesh
#rb Matt.K
#JIRA UE-24165
UE-4766 - Text actors don't render on mobile devices
Fixed places where the baseline was being converted between signed and unsigned values. Baselines are typically negative, and there was a case where arithmetic was being performed on an unsigned baseline value that was causing the text to be entirely clipped on mobile platforms.
The baseline adjustment was also the wrong way around, and were letting positive shadow offsets clip the text off the top of its clipping region. This should only be done for negative shadow offsets (to move the baseline to compensate for the shadow). This was causing noticable clipping issues in UMG.
Shadow offsets also weren't repecting scale, which was most noticable when zooming in UMG. The shadow offset now takes scale into account so that it remains consistent at different zoom levels.
ReviewedBy Justin.Sargent
[CL 2345276 by Jamie Dale in Main branch]
* Moved Slate.h into SlateBasics.h and began shifting less commonly used headers into SlateExtras.h.
* Slate.h now simply includes SlateBasics.h and SlateExtras.h.
* Slate.h includes a deprecated warning now to indicate that SlateBasics.h + specific includes should be used instead.
* Moved dozens of inlined functions using Slate widgets into .cpp files to avoid header dependencies.
* All code samples now include SlateBasics.h and SlateExtras.h so future shifts will not break most those projects, but not trigger the deprecation warning of including Slate.h.
#BUN
[CL 2329610 by Wes Hunt in Main branch]
FSlateTextRun and FSlateHyperlinkRun now support negative shadow offsets.
This also fixes the maximum size of a text run being reported incorrectly when it was using a shadow offset.
ReviewedBy Justin.Sargent
[CL 2322437 by Jamie Dale in Main branch]
Because FTextSelectionRunRenderer is a run renderer, it causes the hyperlink run to get split into multiple blocks when the selection is changed, and because FSlateHyperlinkRun contains a nested widget, it was possible that the widgets inside the new blocks hadn't had a Slate prepass called on them before they were presented for painting (causing a flicker while the STextBlock widget inside the hyperlink was empty).
The FSlateHyperlinkRun now calls SlatePrepass() itself when the blocks are created. This is a similar solution to FSlateWidgetRun, and ensures that the hyperlink is ready to be painted, thus removing the flickering.
ReviewedBy Justin.Sargent
[CL 2302322 by Jamie Dale in Main branch]
Improved text layout support when inserting runs/text or splitting lines on runs that were non-text (images or widgets). The text layout now inserts an extra text run when splitting a non-text run, which avoids issues where text was either being inserted into a non-text run (and vanishing), or an image run was being cloned (and appearing twice).
This also fixes the cursor movement in the multiline editable text when selecting over images or widgets (the cursor would jump to the start of the document as GetTextIndexAt hadn't been implemented. Additionally, it also fixes an issue where Measure was always trying to place the cursor at the end of an image run (ignoring the values of BeginIndex and EndIndex) which made the cursor offset draw in the wrong place.
These changes required the text layout to be able to create a default text run, which involved refactoring the text marshallers as the Slate text run now knows about the default text style, taking that responsibility away from the marshallers
Added tutorial-specific image decorator that accepts a content-relative or engine relative image path.
Added button to tutorial rich text editor to add new images.
All previously-imported images should still 'work'.
reviewed by Jamie.Dale,Nick.Atamas,Justin.Sargent
[CL 2302278 by Thomas Sarkanen in Main branch]
Refactored handling of decorators into new utility class FTutorialText.
Added tooltip (and rich tooltip) support to hyperlink runs.
#codereview Jamie.Dale
[CL 2294907 by Thomas Sarkanen in Main branch]
Converted some code which was creating FPaintGeometry the old way (so losing the render transforms) to use the new way instead.
#codereview jaime.dale, Justin.Sargent, nick.darnell, nick.atamas
[CL 2284993 by Wes Hunt in Main branch]
TTP# 336464 - Editor: Finish the Multiline Editable Text Block
Abstracted away the SetEditableText and GetEditableText functions from SMultiLineEditableText into "text marshallers" which handle converting text to and from a TextLayout.
There are three types of text marshallers currently implemented:
* Plain-text
* Rich-text
* Syntax highlighting
Text marshallers also have the ability to inject formatting "live" (as the text changes), which is how the syntax highlighting marshaller works.
Added the ability for a run to query the information it was created with. This allows the rich-text marshaller to reconstruct the original rich-text from the styled runs.
To test this out, I've implemented a simple WYSIWYG rich-text editor demo with the following features:
* Two SMultiLineEditableText widgets showing the same source text, one using a rich-text marshaller, and one using a syntax highlighter marshaller.
* A toolbar to allow you to control the style of the selected text.
* A button to allow you to insert a hyperlink into the document.
The demo also makes use of the meta-data stored in the runs (the same information used to reconstruct the original rich-text) to read the text style of whatever is currently under the cursor, live, as the cursor is moved.
Miscellaneous fixes:
* Fixed an issue where deleting text that spanned multiple runs could leave the remaining runs in a bad state, leading to phantom text appearing (see FTextLayout::RemoveAt).
* Fixed an issue where new-lines at the end of a rich-text document would be lost (see CalculateLineRanges).
* Fixed an issue where \\r\\n line endings werenÆt being handled correctly by the rich-text parser (see CalculateLineRanges).
* Fixed an issue where the rich-text parser would treat an empty run as plain-text (see FRichTextMarkupProcessing::ParseLineRanges).
* Fixed an issue where inserting a line break when the cursor was at the end of a line containing multiple runs could sometimes fail (see FTextLayout::SplitLineAt).
* Fixed mouse cursor movement not working correctly with a FSlateHyperlinkRun (see FSlateHyperlinkRun::GetTextIndexAt).
ReviewedBy Justin.Sargent
[CL 2246838 by Jamie Dale in Main branch]
Slate TPanelChildren, TSlotlessChildren are no longer full-fledged arrays; removed any unused Array API.
Fixed up a lot of improper use cases.
This better encapsulates the action of adding/removing Slate Widgets from the runtime tree as a Slate Core concern.
Alows us to add parent pointers in the future with significantly less effort.
#codereview Wes.Hunt
#codereview Nick.Darnell
#codereview Matt.Kuhlendschmidt
#codereview Justin.Sargent
[CL 2234301 by Nick Atamas in Main branch]
TTP# 336464 - Editor: Finish the Multiline Editable Text Block
The fact that the end of a soft-wrapped line has the same FTextLocation as the start of the next soft-wrapped line leads to ambiguity when moving the cursor, as the cursor is always positioned based upon the line model (FTextLocation) rather than the line view.
I'd previously attempted to fix this when placing the cursor with the mouse by moving the cursor back one place (and aligning the cursor to the right) if it matched the end of a soft-line boundary. This worked for the end of the lines, but caused another issue where the clicking to the left of the start of a soft-line would move the cursor back to the previous line.
I've removed that code, and instead added code which allows the text layout (and text run) to report where on the line the given position has hit (either within the line itself, or inside the left or right gutter). This lets me adjust the cursor only if the click landed in the right gutter.
I also had to fix some issues with PreferredCursorScreenOffsetInLine as it was sometimes being set to a different position to the cursor, which could lead to it jumping around.
I also changed the code which converts a position into a line view location (GetLineViewIndexForTextLocation) to perform a non-exclusive range check - this ensures that the FTextLocation will match the start of a line view, rather than the end of a line view (which is correct due to the way I move the cursor back). The only exception to this is when the cursor has been placed to the right of a character, as this is assumed to mean that the cursor is at the end of a line view, and therefore we want to return the line view index for end of that line.
ReviewedBy Andrew.Rodham, Justin.Sargent
[CL 2225429 by Jamie Dale in Main branch]
TTP# 336464 - Editor: Finish the Multiline Editable Text Block
These are a kind of highlighter that exist at the line level, rather than the run level. This means that they can't do the more complex things like adjusting the run rendering (eg, changing the text color), but it does mean that they can be overlapped and don't require a re-flow of the entire layout when they're added or removed.
To avoid confusion with the existing "highlighter" concept, and to better describe what the classes do, the existing IRunHighlighter has been renamed to IRunRenderer, and the newly added "lightweight highlighters" are called ILineHighlighter.
FTextLayout has been updated to flow the lightweight highlighters separately to the main layout flow, and the dirty flag has been split so that we can skip the layout re-flow if only the highlighters have been changed.
FSlateTextLayout has been updated to first paint any "underlay" highlighters, then the line view blocks (potentially with a custom run renderer), then any "overlay" highlighters.
The GetChildren and OnArrangeChildren have been removed from ISlateRunRenderer (and not added to ISlateLineHighlighter) because they were never being used (FSlateTextLayout wasn't calling them), and were seemingly just adding complexity.
ReviewedBy Justin.Sargent
[CL 2222209 by Jamie Dale in Main branch]
TTP# 336464 - Editor: Finish the Multiline Editable Text Block
Most of this work was done by JustinS; I just finished off some remaining whitespace, wrapping, cursor movement, and scaling issues.
ReviewedBy Justin.Sargent
[CL 2099039 by Jamie Dale in Main branch]
* Paint is now the non-virtual entry point to OnPaint to support required pre/post functionality. Widgets override OnPaint as usual, but calls to tell a widget to paint should be "Paint" not "OnPaint".
* ArrangeChildren -> OnArrangeChildren. ArrangeChildren is now the non-virtual entry point for the same reason as Paint/OnPain.
* OnPaint and OnArrageChildren are now private so they are not accidentally called.
* Added Stats for Paint time and ArrangeChildren time.
#BUN
#codereview:nick.atamas,max.preussner
[CL 2086158 by Wes Hunt in Main branch]