Commit Graph

27 Commits

Author SHA1 Message Date
Jaroslaw Palczynski
65ba5d456f TArray documentation and a coupld of methods deprecation.
Changes mostly in Array.h. The changes in other files are only renames for deprecated functions.

[CL 2312616 by Jaroslaw Palczynski in Main branch]
2014-09-29 04:23:44 -04:00
Matthew Griffin
783bd7cf82 Adding an updatable texture to easily allow writing to textures every frame.
Added an updatable texture interface, which will be implemented by the main texture types of each slate renderer.
Ensured that it is safe to update/resize the texture from the game or render thread in the case of the RHI renderer.
D3D could be improved if we could write the whole texture at once but the only working method I could find exposes memory buffer with 16 byte alignment for each row.

Fixed non-unity build failure

#codereview Matt.Kuhlenschmidt, John.Pollard

[CL 2306749 by Matthew Griffin in Main branch]
2014-09-23 08:23:45 -04:00
Wes Hunt
959a806189 Support for a ScissorRectBox that ensures child widgets are clipped even under render transforms by using hardware scissor rect. #BUN
* This is a hack for the UMG designer to ensure any render transforms in designed widgets do not leak outside the designer. Implemented in a low-level hacky way so we don't have to change any public APIs because clipping control can and will change in better ways going forward.
* SlateViewer now uses it for all it's views as a test, and the UMG designer uses it.
* ElementBatcher now uses a new hash function that incorporates the ScissorRect, and slightly improves the efficiency, definitely improving the accuracy.

#TTP346004: UMG: Scaling a widget will result in it scaling outside of the graph
#codereview:nick.darnell,matt.kuhlenschmidt

[CL 2303045 by Wes Hunt in Main branch]
2014-09-18 16:45:23 -04:00
Wes Hunt
7d97023ecf Clean up Rotated Rect types in Slate.
* FSlateClipRectType -> FSlateRotatedClipRectType to better represent its usage.
* Remove special purpose ctors in place of helper code in the element batchers.
* Added common ctors to init rotated rects by their individual components.
* Added transform calculus support for rotated rects, used it to simplify a few internal functions.

[CL 2283770 by Wes Hunt in Main branch]
2014-09-03 20:05:56 -04:00
Dmitry Rekman
8f90233b03 Linux: Handle errors creating OpenGL context earlier.
[CL 2283629 by Dmitry Rekman in Main branch]
2014-09-03 18:18:20 -04:00
Wes Hunt
4f267eb970 Fix ES2 renderer for Slate as it doesn't necessarily understand FLOAT16.
#codereview:peter.sauerbrei,dan.hertzka

[CL 2281966 by Wes Hunt in Main branch]
2014-09-02 16:27:25 -04:00
Wes Hunt
71db3f3bad Change 2122846 on 2014/07/01 00:51:24 by Wes.Hunt@WHUNT-UE4-MAIN
#BUN UnrealMath updates
	* added RotationAboutPointMatrix
	* Added static Make() methods for the various derived FMatrix types. Allows single expressions that return an FMatrix so we don't have to rely on implicit conversion (which will break some generic programming).
	* Simplified the implementation of FQuat::MakeFromEuler.

Change 2122848 on 2014/07/01 01:04:31 by Wes.Hunt@WHUNT-UE4-MAIN

	Added SlateLayoutTransform to store a 2D translation and uniform scale (for FGeometry).
	#BUN Added SlateTransformCalculus for handling arbitrary transform manipulation. See documentation in header.

Change 2123889 on 2014/07/01 17:12:40 by Wes.Hunt@WHUNT-UE4-MAIN

	Remove unncessary use of FGeometry.

Change 2221407 on 2014/07/16 17:58:20 by Wes.Hunt@WHUNT-UE4-MAIN

	TransformCalculus changes
	* Move 2D versions of functions into SlateLayoutTransform header to separate it from the base 3D stuff.
	* FSlateLayoutTransform is scale then translate now instead of translate then scale.
	* TransformPosition -> TransformPoint
	* Added a version of Concatenate taking 4 transforms.
	* Update docs.

Change 2221408 on 2014/07/16 17:58:39 by Wes.Hunt@WHUNT-UE4-MAIN

	Adjustments to Slate headers and PCH

Change 2221409 on 2014/07/16 17:59:07 by Wes.Hunt@WHUNT-UE4-MAIN

	Transform calculus support for SlateRects

Change 2221459 on 2014/07/16 18:41:13 by Wes.Hunt@WHUNT-UE4-MAIN

	#BUN SWindow changes
	* Added GetLocalToScreenTransform. (Screen space == Desktop space)
	** Basically contains the ApplicationScale and Window offset from the desktop.
	* Added GetLocalToWindowTransform (Window space == Desktop space without the window offset)
	* Added GetClientRectInScreen
	** Allows code to know exactly WHERE the client rect is in the window.
	* Refactored GetWindowGeometryInScreen and GetWindowGeometryInWindow to use the new methods above.
	* SPopupLayer::OnArrangChildren refactored to clarify transformational spaces and use transformation calculus to do the work.
	** This fixes PopupLayer to correctly account for the scale of the widget it is presenting a popup for.
	** MenuAnchors that that create new SWindows still do no correctly account for scale.

Change 2221464 on 2014/07/16 18:45:25 by Wes.Hunt@WHUNT-UE4-MAIN

	Render Transforms initial checkin. Lots of cleanup to do, but this is functionally working for all basic widgets and draw elements in slate. Main feature todos:
	* restore pixel snapping.
	* handle clipping in the presence of rotation.

Change 2226298 on 2014/07/21 21:22:46 by Wes.Hunt@WHUNT-UE4-MAIN

	Use a better method to get the window's rectangle.

Change 2227809 on 2014/07/22 20:41:57 by Wes.Hunt@WHUNT-UE4-MAIN

	Add 2D version of TransformVector to SlateTransform.

Change 2232085 on 2014/07/25 16:32:15 by Wes.Hunt@WHUNT-UE4-MAIN

	Implement CPU pixel snapping even under render transform. This is pretty CPU intensive, but a reasonable POC.

Change 2232090 on 2014/07/25 16:33:10 by Wes.Hunt@WHUNT-UE4-MAIN

	Font cache fixes for padding.
	* Add 1 pixel of padding around all fonts.
	* Fix font cache to properly handle padding
	* Fix font cache to handle texture elements of zero size with non-zero padding.

Change 2232350 on 2014/07/25 19:50:11 by Wes.Hunt@WHUNT-UE4-MAIN

	#BUN Updated FSlateTextureAtlas padding logic.
	* Added ESlateTextureAtlasPaddingStyle which lets you choose from three atlasing padding styles:
	  * NoPadding - don't apply any padding (used to be Padding == 0).
	  * DilateBorder - copy border edges to apply 1-pixel padding (used to be Padding == 1).
	  * PadWithZero - expand 1-pixel border and fill it with zeros (new style).
	* removed notion of Padding > 1 pixel from atlasing. It wasn't useful as we don't support mips or aniso filtering.
	  * Also the existing code didn't actually handle Padding > 1.
	* FontCache now uses PadWithZero padding so upon zooming text, the edges get smoother.

Change 2237962 on 2014/07/31 02:17:28 by Wes.Hunt@WHUNT-UE4-MAIN

	TransformCalculus tweak.
	* Core Concatentate(T,T) no longer assumes the return type is T. Uses decltype(T.Concat(T)) instead.

Change 2237964 on 2014/07/31 02:21:31 by Wes.Hunt@WHUNT-UE4-MAIN

	#BUN Added a full suite of transform types for 2D transformations that are transform calculus aware:
	* FSlateScale2D
	* FSlateShear2D
	* FSlateQuat2D
	* FSlateMatrix2x2

	Added appropriate overloads and ConcatenateRules for all combinations, making them compatible with FSlateTransform and FSlateLayoutTransform.

	FSlateTransform is now implemented in terms of a decomposed Matrix3x2.

Change 2237972 on 2014/07/31 02:30:45 by Wes.Hunt@WHUNT-UE4-MAIN

	Remove 4x4 matrix from FSlateTransform

Change 2238004 on 2014/07/31 03:11:42 by Wes.Hunt@WHUNT-UE4-MAIN

	FSlateTransform -> FSlateRenderTransform.

Change 2238714 on 2014/07/31 15:16:18 by Wes.Hunt@WHUNT-UE4-MAIN

	#BUN Moved TransformCalculus into Core/Math.
	* Split into TransformCalculus, 2D, and 3D support.
	* FSlateRenderTransform is now just a typedef.
	* Renamed 2D transform types to remove "Slate" from their name.

Change 2240437 on 2014/08/01 19:08:59 by Wes.Hunt@WHUNT-UE4-MAIN

	Restore funky logic in deprecated FGeometry::MakeChild implementations.
	* legacy FGeometry::MakeChild functions took OffsetFromParent in the local space of the widget. This therefore CANNOT be the layout transform offset, because that needs to be in parent space for the transform of P * S + T to work correctly.
	* Therefore, the legacy functions now expect the ChildOffset to be in child space and re-apply the child scale to put them back into parent space.
	* This fixes the NodePanels to properly handle zooming around the mouse cursor point.

Change 2242769 on 2014/08/04 13:44:33 by Wes.Hunt@WHUNT-UE4-MAIN

	remove local layout transform storage from FGeometry.

Change 2242771 on 2014/08/04 13:45:59 by Wes.Hunt@WHUNT-UE4-MAIN

	Update Declarative syntax support to call it RenderTransform instead of Transform.

Change 2245872 on 2014/08/06 14:45:44 by Wes.Hunt@WHUNT-UE4-MAIN

	#BUN Add GetBottomRight function to FSlateRect.

Change 2246129 on 2014/08/06 17:32:04 by Wes.Hunt@WHUNT-UE4-MAIN

	SThrobber now supports render transforms.
	Key is to not use deprecated members of FPaintGeometry, which should be treated as immutable (at least public members shouldn't be modified withotu modifying the new members as well).

Change 2247782 on 2014/08/07 19:12:57 by Wes.Hunt@WHUNT-UE4-MAIN

	Clipping widgets now works under render transforms, FPaintGeometry legacy fixes.
	* Expanded FSlateVertex by 2 bytes to pass in local position.
	* Change clipcoords to be passed in local space.
	* Remove WorldPosition interpolator. Replaced by LocalPosition interpolator.

	FPaintGeometry fixes
	* FPaintGeometry now takes Size in LocalSpace unless using a legacy ctor. Avoid transform-and-back that was occurring when creating from an FGeometry, which already had it in local space, and rendering, which now wants it in local space.
	* FPaintGeometry again supports mutability when using legacy members (like DrawPosition). This allows legacy code to mutate an FPaintGeometry, which is committed to a render transform right before rendering.Hacky, but allows legacy code that treated FPaintGeometry as a plain-old-struct to work.
	* Removed a legacy ctor of FPaintGeoemtry that was not being used.

	Misc:
	* Turned off pixel snapping code in ElementBatcher because the FSlateVertex is doing it during construction.
	  * Still texture filtering artifacts to figure out, so the last word has not been spoken on this yet!
	* Tweaked FGeometry::MakeRoot to use the non-render transform ctor since it doesn't need to use it.
	* Removed /*WindowSpace*/ Size member from SlateDrawElement.
	* SlateDrawElement::GetRotationPoint vastly simplified by using Local space.
	* Moved slate cycle counters back to the top of the function in ElementBatcher.
	* Uninlined FSlateVertex ctors so I can tweak their rounding rules without a full recompile.

Change 2247790 on 2014/08/07 19:20:01 by Wes.Hunt@WHUNT-UE4-MAIN

	SSlider no longer uses MakeRotatedBox, correctly handles render transforms.
	* Now uses a render transform to draw a vertical slider handle instead of MakeRotatedBox.
	* Since we don't support layout transforms, we also have to adjust the clip rect to account for the render-only transform, and make it act like a layout transform.

Change 2249106 on 2014/08/08 19:13:21 by Wes.Hunt@WHUNT-UE4-MAIN

	Slate clipping now done in window space again.
	* This addresses subpixel jittering that occured on otherwise stable clip rects because local space was moving underneath, and transforming the clip rect to local space created occasional rounding errors.
	* Implemented a vectorized point-in-parallelogram check in the pixel shaders to do this. Now pass clip rect in slightly differently, and moved to a float16 to allow better clip precision under rotation. But the vertex data remains the same size.
	* Moved some more common transform work into FSlateVertex constructor to save duplication.
	* Removed construction of local clip rect as it's no longer needed except for text rendering.
	* Hoisted construction of local clip rect out of the text drawing character loop (whoops).
	* Precompute InverseLayoutTransform in draw code as we use that a lot now.
	* Fixed OGL renderer to work.

Change 2249123 on 2014/08/08 19:45:19 by Wes.Hunt@WHUNT-UE4-MAIN

	SProgressBar no longer uses a temporary PaintGeometry to create the inner clipping rect for drawing, it directly inflates the clipping rect now. Also tried to adjust the coords to reduce jitter in the one-pixel padding.

Change 2251914 on 2014/08/11 16:26:12 by Wes.Hunt@WHUNT-UE4-MAIN

	Fixing HitTest 2.0 to work with latest code.
	* Added AppendTransform to FGeometry to preserve immutability of the struct.

Change 2253023 on 2014/08/12 10:30:23 by Wes.Hunt@WHUNT-UE4-MAIN

	Fixing Slate RHI Renderer to use new screenspace clipping with render transforms.

Change 2253090 on 2014/08/12 11:36:16 by Wes.Hunt@WHUNT-UE4-MAIN

	Fix SClippingHorizontalBox to use immutable FGeometry position. Also fix to properly support scale in when it needs to clip children.

Change 2253701 on 2014/08/12 17:48:06 by Wes.Hunt@WHUNT-UE4-MAIN

	#BUN Round viewport rect instead of trunc to match how slate does it now (fixes 1:1 pixel error on SViewports). Need to abstract slate rounding internals so clients don't have to guess.

Change 2255403 on 2014/08/13 19:08:25 by Wes.Hunt@WHUNT-UE4-MAIN

	#BUN Added LayoutGeometry class.

Change 2255404 on 2014/08/13 19:10:40 by Wes.Hunt@WHUNT-UE4-MAIN

	#BUN Made FGeometry public members const to catch all mutating uses of them. Added some hacks in the implementation to make it backward compatible.

	Removed the AccumulatedLayoutTransform, since it was just a copy of AbsolutePosition and Scale. Now all code creates the layout transform on the fly from those members. Still functionally the same.

	Added support for MakeChild using FLayoutGeometry.

Change 2255405 on 2014/08/13 19:12:39 by Wes.Hunt@WHUNT-UE4-MAIN

	Changed SSplitter and Splitter2x2 to use FLayoutTransforms where possible. Now only calls ArrangeChildren() when rendering, avoiding accumulating the layout transforms and storing the render transforms altogether.

Change 2265162 on 2014/08/20 18:24:04 by Wes.Hunt@WHUNT-UE4-MAIN

	Implement MakeRotatedBox in terms of a render transform. Remove all shader code associated with rotating.

Change 2268034 on 2014/08/22 17:40:05 by Wes.Hunt@WHUNT-UE4-MAIN

	More 2D transform cleanup.
	* Removed a bunch of todo comments from the code, and converted them to more of a final form for main.
	* #BUN Removed FGeometry::CenteredPaintGeometryBelow as it was misleading, and users of the function were forced to mutate the resulting FPaintGeometry.
	* #BUN Removed FGeometry::GetRect() because it returned a rect in a weird space if the local scale != 1. Only one place in the code actually used it.

Change 2268096 on 2014/08/22 18:12:41 by Wes.Hunt@WHUNT-UE4-MAIN

	Clean up more stuff in FPaintGeometry.
	* #BUN Removed ToSlateRect and Identity().
	* Removed storage of accumulated layout transform, since DrawPosition and DrawScale implicitly stored it.
	* Removed a bunch of todo comments and converted them to a more final form.

Change 2270989 on 2014/08/25 15:48:46 by Wes.Hunt@WHUNT-UE4-MAIN

	Add support for Concatenate with 5 transforms.

Change 2271394 on 2014/08/25 19:12:53 by Wes.Hunt@WHUNT-UE4-MAIN

	#BUN Added an OffsetBy function to FSlateRect

Change 2271395 on 2014/08/25 19:13:56 by Wes.Hunt@WHUNT-UE4-MAIN

	Added a version of FSlateRotatedRect that uses regular floats, also added IsUnderLocation ToBoundingRect function for overlap testing.

Change 2271396 on 2014/08/25 19:14:38 by Wes.Hunt@WHUNT-UE4-MAIN

	HitTest 2.0 now works with render transforms.

#codereview:matt.kuhlenschmidt,nick.atamas

[CL 2276499 by Wes Hunt in Main branch]
2014-08-28 14:29:46 -04:00
Ben Marsh
e9f8b8d3a1 Fixup multiline comments that are meant to be documentation. Need to start with /** for doxygen to parse them.
[CL 2265840 by Ben Marsh in Main branch]
2014-08-21 08:33:39 -04:00
Dmitry Rekman
b3ab32f8fb Changes in platform initialization/teardown.
- New PlatformTearDown() function to correspond to PlatformInit(), called at AppExit() time (unguarded code).
- Linux-specific PlatformInitMultimedia() function (not part of generic platform abstraction) which handles multiple initialization of SDL and/or avoids it for certain targets.
- Fixes problem with SDL message box destroying SDL and ruining things later down the road.

#codereview Josh.Adams, Ankit.Khare, Michael.Trepka, Marcus.Wassmer, Pete.Knepley, Graeme.Thornton

[CL 2263609 by Dmitry Rekman in Main branch]
2014-08-19 22:04:56 -04:00
Mark Satterthwaite
a578de8ecb Move the Cocoa window & text-input classes into their own files to clarify whether they are primarily Cocoa-facing or UE4-facing in preparation for them to execute on separate threads.
#codereview michael.trepka

[CL 2262353 by Mark Satterthwaite in Main branch]
2014-08-19 07:13:48 -04:00
Graeme Thornton
e3ba0bd160 Fix for opengl/d3d slate standalone renderer compile errors
[CL 2254776 by Graeme Thornton in Main branch]
2014-08-13 12:13:41 -04:00
Richard TalbotWatkin
18f8a34613 Fixed issue where dock/undock tabs display doesn't update when highlighting section.
#ttp 340466 - Regression: EDITOR: Dock/Undock Tabs display does not update when highlighting section
#branch UE4
#proj Runtime.SlateRHIRenderer
#add Removed last remaining traces of "marking window as drawn" in SWindow.
#reviewedby Mike.Fricker

[CL 2217229 by Richard TalbotWatkin in Main branch]
2014-07-15 03:08:19 -04:00
Leigh Swift
eb1b76c2fe UnrealEngineLauncher non-unity Win & Mac build fixes
#codereview Nick.Atamas

[CL 2191297 by Leigh Swift in Main branch]
2014-07-11 08:39:17 -04:00
Dmitry Rekman
f3c593e2e7 Switch to SDL2 from icculus' SDL-gui-backend branch.
- SDL2 sources as of revision 8809:4bb098814ec4.
- Dependencies on dsext removed.
- SDL2 will be linked dynamically if the target is modular.
- Slate will refuse to start if unable to get GL funcs.

#codereview Josh.Adams

[CL 2125422 by Dmitry Rekman in Main branch]
2014-07-02 16:24:40 -04:00
Mark Satterthwaite
fbee630807 Move the Mac mouse event handling into a single location in FSlateTextView.
#codereview michael.trepka

[CL 2123777 by Mark Satterthwaite in Main branch]
2014-07-01 15:50:51 -04:00
Matt Kuhlenschmidt
02a02c0ebe Update interfaces for standalone renderers
[CL 2114435 by Matt Kuhlenschmidt in Main branch]
2014-06-23 16:16:37 -04:00
Josh Adams
cf74a1c788 - Merging EAGLView and MetalView into one class, they share a bunch of stuff, and there are too many if (Delegate.MetalView? Delegate.MetalView : Delegate.EAGLViewl) type things around
- Added better checking for device support for Metal
- Added proper support for WeakFrameworks in UBT

[CL 2109654 by Josh Adams in Main branch]
2014-06-18 15:57:40 -04:00
Jaroslaw Palczynski
ebce413232 UE4 Refactoring. Changed OVERRIDE and FINAL macros to keywords override and final.
[CL 2104397 by Jaroslaw Palczynski in Main branch]
2014-06-13 06:14:46 -04:00
Dmitry Rekman
5b887fb484 Linux: more changes for the editor.
From PR #140,  contributed by sbc100 and #ue4linux community.

[CL 2096299 by Dmitry Rekman in Main branch]
2014-06-05 17:11:45 -04:00
Dmitry Rekman
12393fb0d9 Linux: Fix standalone programs after Friday changes.
Temporary, hopefully will go away soon together with DSExt.

[CL 2084519 by Dmitry Rekman in Main branch]
2014-05-29 16:57:10 -04:00
Matt Kuhlenschmidt
cdcb776c87 Add ensures to track down possible Slate dynamic brush alloc/dealloc outside of the game thread.
[CL 2082346 by Matt Kuhlenschmidt in Main branch]
2014-05-22 16:40:07 -04:00
Mark Satterthwaite
04c8c4476f Fix standalone Slate tooltips on OS X from appearing as garbage since the work done to improve the Editor performance. The standalone renderer needed the same code to perform context updates & temporarily disable/enable screen updates. Also fixed a bug in the MacWindow code that could result in setting an incorrect frame.
#codereview michael.trepka

[CL 2072757 by Mark Satterthwaite in Main branch]
2014-05-14 06:42:24 -04:00
Dmitry Rekman
e2215d0578 Merging Darkside's StandaloneRenderer changes.
- Due to not using vendor headers when cross-compiling, we cannot use deprecated calls like glTexEnvi(). This needs to be later reworked to use another (not-plaform-specific) #define.

#codereview Josh.Adams, Michael.Liebenow, Nick.Penwarden

[CL 2067377 by Dmitry Rekman in Main branch]
2014-05-08 16:18:16 -04:00
Mikolaj Sieluzycki
45c031d576 #ttp 331438 UE4: PlatformMath refactor
#proj core
#branch UE4
#summary Rename Trunc, Round, Floor, Ceil to TruncToInt, RoundToInt, FloorToInt, CeilToInt. Added *ToFloat versions. Repeated for FGenericPlatformMath and all derived classes for all platforms wherever applicable. Corrected comment in Fractional and added Frac() which does HLSL-style fractional (x - floor(x)). Checked for compilation on all projects (with cooking levels wherever applicable). Didn't change Fractional to Frac, this will be done in second commit.
#codereview robert.manuszewski

[CL 2064306 by Mikolaj Sieluzycki in Main branch]
2014-05-06 06:26:25 -04:00
Max Preussner
b63129a60c Slate: Refactored core Slate implementation into SlateCore module in preparation for UMG.
Other Updates:
- The WidgetReflector is now in its own module as well. It will be converted to a plug-in later.
- The Public API of both Slate and SlateCore has largely been reorganized for better discoverabilty. More cleanup work is needed.
- Added a lot of missing API documentation and fixed existing ones. More and better documentation is needed.
- Removed dead code, fixed a couple things I stubled upon, and conformed to coding guidelines (NULL vs nullptr, line breaks, etc.)

Upgrade Notes:
- The Slate Remote Server is currently disabled - will be re-enabled shortly!
- If your module previously had a module dependency to 'Slate', it now also needs a PrivateModuleDependency to 'SlateCore' in its Build.cs file.
- If your module exposes in any of its Public header files types that are now declared in SlateCore, it needs a PublicModuleDependency to 'SlateCore'
- The ToolTip property type on SWidget has changed from SToolTip to IToolTip; change local variables to TSharedPtr<IToolTip> instead of TSharedPtr<SToolTip> where needed
- IToolTip is not a widget. If you need access to the actual widget that represents the tool tip, use IToolTip::AsWidget(); If you need access to the tool tip's content, use IToolTip::GetContentWidget()

Troubleshooting:
- After syncing to this changelist you may have to clean your /Engine/Intermediate/Build/ directory and rebuild your entire project
- If in your project you are getting linker errors for unresolved types that are now declared in SlateCore, you may be missing a dependency to 'SlateCore'
- If in the Engine code you are getting linker errors for unresolved types that are now declared in SlateCore, you may need to rebuild the entire Engine

[CL 2057118 by Max Preussner in Main branch]
2014-04-26 15:07:24 -04:00