Commit Graph

4841 Commits

Author SHA1 Message Date
BDisp
7aae0c2ad5 Fixes #3968. Menu appears in wrong place when opened in a subview (#3979)
* Fixes #3968. Menu appears in wrong place when opened in a subview

* Fixes #3965. Cannot exit a Window with a CanFocus true MenuBar

* Fixes #3981. Drivers crash when middle or right click on a ContextMenu item

---------

Co-authored-by: Tig <tig@users.noreply.github.com>
2025-03-13 18:15:14 +01:00
Tonttu
ef20ff68a9 Reduce string allocations in IConsoleOutput implementations (#3978)
* Change IConsoleOutput.Write(string) overload parameter to ReadOnlySpan<char>

Allows the caller more flexibility about choosing a buffer per use case.

* NetOutput: Write StringBuilder directly to the std out text stream

* Add EscSeqUtils.CSI_WriteCursorPosition

Writes cursor position sequence to text writer without string allocation.

* NetOutput: Skip cursor position escape sequence string allocation

* Replace CSI_(Enable|Disable)MouseEvents static properties with readonly fields

Changed for the sake of consistency with rest of the EscSegutils fields rather than performance. Also prevents bugs from accidentally setting the properties.

* Use EscSeqUtils.CSI_Append(Foreground|Background)ColorRGB in v2 drivers

* WindowsOutput SetCursorVisibility: Remove intermediate string builder

* WindowsOutput.WriteToConsole: Use rented array as intermediate write buffer

The large intermediate string builder remains a challenge. :)

* NetOutput: Console.Out for the sake of consistency

Also might have missed one of the Console.Out.Write(StringBuilder) calls...

* Avoid Rune.ToString() in NetOutput.Write(IOutputBuffer)

---------

Co-authored-by: Tig <tig@users.noreply.github.com>
2025-03-13 18:14:22 +01:00
BDisp
e76ec720a5 Fixes #3964. Null Reference in DoDrawBorderAndPadding (#3971)
* Fixes #3964. Null Reference in DoDrawBorderAndPadding

* Fix unit test.

* Ensures closing all opened menus that belong to another top when a new modal top is opened.

* Reformat

---------

Co-authored-by: Tig <tig@users.noreply.github.com>
2025-03-09 07:46:09 -06:00
Tig
4ad866eb26 Refactored to be thread safe. (#3973) 2025-03-08 17:11:30 -07:00
Tig
acb5979e6c Cleans up/Refactors View.Subviews (#3962)
* Subview clean up

* New Add/Remove event pattern

* Using Logging

* cleanup

* Subview -> SubView

* Test code cleanup. Killed many warnings.

* Fix tznind feedback

* Refactored AllViewTest helpers

* Moved keyboard tests to parallel

* Moved mouse tests to parallel

* Moved view tests to parallel

* Test code cleanup. Killed many warnings.

* dupe test

* Some mouse tests can't run in parallel because MouseGrabView

* Made SpinnerView more testable

* Moved more tests

* SubViews to IReadOnlyCollection<View>

* SubViews to IReadOnlyCollection<View> 2

* scrollbar tests

* shortcut tests

* Use InternalSubViews vs. _subviews

* Nuked View.IsAdded.
Added View.SuperViewChanged.

* API doc updats

* Unit Test tweak

* Unit Test tweak
2025-03-08 15:42:17 -07:00
BDisp
85cf6619ed Fixes #3956. MessageBox doesn't return the index of IsDefault button (#3958)
* Fixes #3956. MessageBox doesn't return the index of IsDefault button

* Change to Theory test.

* Fix unit test 'Error opening terminal: unknown.'

* Remove RunningUnitTests = true because constructor already set it.

---------

Co-authored-by: Tig <tig@users.noreply.github.com>
2025-03-06 14:06:51 -07:00
Thomas Nind
7162ed850c Fix v2 not raising closing events (#3961) 2025-03-06 13:14:15 -07:00
Tig
5984a3c564 Fixes #3941 - v2win/v2net: UICatalog crash - Fixes warnings (#3946)
* Tons of API doc updates

* Adjust timeout

* Code cleanuyp

* Disabled All_Scenarios_Benchmark

* Removed logs

* Fixed a bunch of warnings

* Fixed a bunch of warnings2

* Disabled All_Scenarios_Benchmark again...just to make sure

* Enabled All_Scenarios_Benchmark again...It is not the culprit
2025-03-05 23:57:15 -07:00
Tig
b0f32811eb Fixes #3930 - Splits tests to Tests/UnitTests, Tests/IntegrationTests, Tests/StressTests (#3954)
* Tons of API doc updates

* Removed stale test

* Removed stale tests

* Fixed Skipped Shadow test 1

* Fixed Skipped Shadow test 2

* Fixed Skipped Shadow test 3

* Removed stale test

* Removed stale test2

* Explicit unregister of event handler on Application.Driver!.ClearedContents

* Added Toplevels to dict

* code cleanup

* spelling error

* Removed stale test3

* Removed stale test4

* Removed stale test5

* added script

* tweaked script

* tweaked script

* Created StressTests project; moved some tests

* Created IntegrationTests project; moved some tests

* New yml

* made old yml just unit tests

* Tweaked Button_IsDefault_Raises_Accepted_Correctly

* tweaked script

* cleaned up ymls

* tweakled up ymls

* stress tests...

* stress tests on ubuntu only

* Fixed WindowsDriver in InvokeLeakTest

* Fixed WindowsDriver in InvokeLeakTest2

* Added Directory.Packages.props.
Added Directory.Build.props

* Shortened StressTest time

* Removed dupe file.

* DemoFiles

* Moved all tests to ./Tests dir.

* Fixed release build issue

* Fixed .sln file

* Fixed .sl* files

* Fixing ymls

* Fixing interation tests

* Create link to the file TestHelpers.

* Created Tests/UnitTestsParallelizable.
Moved all obviously parallelizable tests.
Updated yml.

* fixing logs

* fixing logs2

* fixing logs3

* don't require stress to pass for PRs

* Fix a failure?

* tweaked script

* Coudl this be it?

* Moved tons of tests to parallelizable

* Fixed some stuff

* Script to find duplicate tests

* Testing workflows

* Updated to v4

* Fix RelativeBasePath issue

* Replace powershell to pwsh

* Add ignore projects.

* Removed dupe unit tests

* Code cleanup of tests

* Cleaned up test warnings

* yml tweak

* Moved setter

* tweak ymls

* just randomly throwing spaghetti at a wall

* Enable runing 5 test runners in par

* Turned off DEBUG_DISPOSABLE for par tests

* RunningUnitTests=true

* code cleanup (forcing more Action runs)

* DISABLE_DEBUG_IDISPOSABLE

* Added View.DebugIDisposable. False by default.

* Remobed bogus tareet

* Remobed bogus tareet2

* fixed warning

* added api doc

* fixed warning

* fixed warning

* fixed warning2

* fixed warning3

* fixed warning4

---------

Co-authored-by: BDisp <bd.bdisp@gmail.com>
2025-03-05 23:44:27 -07:00
Thomas Nind
64b216b1e8 Fixes #3953 Add async support to v2 drivers (#3952)
* Add async support stuff

* Set main thread id

* Add v2 test to ensure `TaskScheduler.FromCurrentSynchronizationContext` works

* Remove uneeded async

---------

Co-authored-by: Tig <tig@users.noreply.github.com>
2025-03-02 10:57:28 -07:00
Thomas Nind
255e5d6643 Fix driver name options shown in UICatalog for v2 (#3940)
- v2 auto picks based on OS
- v2win is the new windows interop driver
- v2net is the new dotnet core cross platform driver

Co-authored-by: Tig <tig@users.noreply.github.com>
2025-03-01 17:22:55 -07:00
Tig
98f70b2632 Adds ViewportSettings.Transparent (#3886) 2025-03-01 15:22:23 -07:00
Tig
cae1d6c47e Fixes `Logging' init in UI Catalog and naming consistency (#3944) 2025-03-01 15:13:43 -07:00
Tonttu
bc8bf380b2 Reduce legacy Windows driver ANSI escape sequence intermediate string allocations (#3936)
* Skip WindowsConsole StringBuilder append ANSI escape sequence intermediate string allocations

Appending InterpolatedStringHandler directly to StringBuilder skips the formatting related intermediate string allocation. This should also be usable in other console implementation but currently I have no WSL etc. setup to actually verify correct functionality.

* Add CSI_Set* and CSI_Append* comparison benchmark

* Clean up CSI_SetVsAppend benchmark

* Change benchmark names to match the method group
2025-03-01 09:36:31 -07:00
Thomas Nind
af9c6d7846 Change LayoutAndDraw in v2 applications to simply set draw/layout flags instead of force a buffer refresh (#3943) 2025-03-01 09:36:13 -07:00
Tig
79cd4e92b7 Adds Logging level control to UICatalog (#3938)
* Tons of API doc updates

* Added logging control to UICatalog

* Added logging control to UICatalog - more

* fixed minor issues

* removed logs from .gitignore

* Fixed log file path

* Fixed app desc
2025-02-28 15:06:01 -07:00
Thomas Nind
c88c772462 Fixes #3692++ - Rearchitects drivers (#3837) 2025-02-28 12:09:29 -07:00
BDisp
80306c64c3 Fixes #3885. ableView's CollectionNavigator sometimes doesn't work right. (#3933) 2025-02-27 20:55:38 -07:00
Tig
df9549e0a2 Tons of V2 API doc fixes (#3932)
* Tons of API doc updates

* tweaked scenario

* try to fix unit test crash in ubuntu action

* try to fix unit test crash in ubuntu action2
2025-02-27 17:00:47 -07:00
Tig
c00de4a092 Makes Window default Arrangement not be movable/resizable (#3931)
* Window -> not sizeable/movable by default.
Window: Code cleanup.
Frameview: Code cleanup.

* View API docs updates

* View API docs updates
2025-02-27 12:24:31 -07:00
Tonttu
255114f0f2 Reduce IntersectionType[] allocations (#3924)
* Eliminate LineCanvas.Has params array allocation

Inline ReadOnlySpan arguments do not incur heap allocation compared to regular arrays.

* Allocate once LineCanvas.Exactly corner intersection arrays

---------

Co-authored-by: Tig <tig@users.noreply.github.com>
2025-02-27 10:44:39 -07:00
BDisp
e632a12049 Fixes #3881. PositionCursor broke with recent ConsoleDriver changes. (#3927) 2025-02-27 10:01:42 -07:00
Tig
aff7e2c6d5 Fixed nav (#3926) 2025-02-27 08:09:36 -07:00
Tig
f3697a99f4 Fixes #3839, #3922 - CM Glyphs not working (#3923)
* fixed

* Moved Glyphs to ThemeScope

* Removed test code
2025-02-26 15:24:58 -07:00
Tig
7ba6d638bc Fixes #3918 and #3913 - Accepting behavior (#3921)
* Fixed #3905, #3918

* Tweaked Generic

* Label code cleanup

* Clean up.

* Clean up.

* Clean up2.
2025-02-26 12:40:45 -07:00
Tonttu
35522cc517 Reduce func allocations (#3919)
* Replace Region.Contains LINQ lambdas with foreach loop

Removes the lambda func allocations caused by captured outer variables.

* Replace LineCanvas.Has LINQ lambda with foreach loop

* Fix LineCanvas.GetMap intersects array nullability

It should be enough to add null-forgiving operator somewhere in the LINQ query to make the final result non-null. No need to shove the nullability further down the line to complicate things. :)

* Replace LineCanvas.All LINQ lambda with foreach loop

* Replace Region.Intersect LINQ lambdas and list allocation with foreach loop and rented array

* Use stackalloc buffer in Region.Intersect when max 8 rectangles

* Fix LineCanvas.GetCellMap intersects array nullability

* Remove leftover LineCanvas.GetRuneForIntersects null-conditional operators

* Remove leftover IntersectionRuneResolver.GetRuneForIntersects null-conditional operators

* PosAlign.CalculateMinDimension: calculate sum during loop

No need to first put the dimensions in a list and then sum the list when you can just add to sum while looping through dimensions.

* PosAlign.CalculateMinDimension: Remove intermediate list and related filter func allocation

* TextFormatter.GetRuneWidth: Remove intermediate list and related sum func allocation

* ReadOnlySpan refactor preparation for GetCellMap rewrite

* LineCanvas.GetCellMap: Reuse intersection list outside nested loops

GetCellMap would not benefit much from array pool because IntersectionDefinition is not struct. This  change eliminates majority of the rest of Func<,> allocations. As a bonus IntersectionDefinition[] allocations dropped nicely.

* Refactor local method UseRounded

* Wrap too long list of method parameters

* Region: Consistent location for #nullable enable

---------

Co-authored-by: Tig <tig@users.noreply.github.com>
2025-02-25 10:18:23 -07:00
Tonttu
e24bd67658 Rune extensions micro-optimizations (#3910)
* Add benchmarks for potentially optimizable RuneExtensions

* Add new RuneExtensions.DecodeSurrogatePair benchmark implementation

Avoids intermediate heap array allocations which is especially nice when the rune is not surrogate pair because then array heap allocations are completely avoided.

* Enable nullable reference types in RuneExtensions

* Make RuneExtensions.MaxUnicodeCodePoint readonly

Makes sure no one can accidentally change the value. Ideally would be const value.

* Optimize RuneExtensions.DecodeSurrogatePair

* Remove duplicate Rune.GetUnicodeCategory call

* Add new RuneExtensions.IsSurrogatePair benchmark implementation

Avoids intermediate heap allocations by using stack allocated buffer.

* Optimize RuneExtensions.IsSurrogatePair

* Add RuneExtensions.GetEncodingLength tests

* Optimize RuneExtensions.GetEncodingLength

* Optimize RuneExtensions.Encode

* Print encoding name in benchmark results

* Rename variable to better match return description

* Add RuneExtensions.EncodeSurrogatePair benchmark

---------

Co-authored-by: Tig <tig@users.noreply.github.com>
2025-02-25 09:42:32 -07:00
Tig
ff353fc57c testing versions 2025-02-18 16:54:33 -07:00
Tig
e6c8a58291 Merge branch 'v2_develop' into v2_develop 2025-02-18 15:12:44 -08:00
Tig
ac485498c2 Fixing versions 2 2025-02-18 16:11:40 -07:00
Thomas Nind
81ad695ef7 Fix foreach runes bug with unicode surrogate pairs (#3894) 2025-01-12 10:05:52 -07:00
Tig
ea74179833 Refactored RadioGroup to just use Commands 2024-12-09 22:56:19 -08:00
Tig
97d4c0a0d8 Refactored RadioGroup to just use Commands 2024-12-09 22:52:45 -08:00
Tig
9563ec9734 Key -> nullable enable 2024-12-09 22:29:09 -08:00
Tig
1180b2fe31 Code cleanup 2024-12-09 22:18:25 -08:00
Tig
2b8884a881 Finished integrated tznind's work. 2024-12-09 22:03:40 -08:00
Tig
23344baca7 Incorporated tznind's stuff 2024-12-09 16:53:58 -08:00
tznind
d15b3021d1 Equality comparer support 2024-12-09 20:49:01 +00:00
tznind
c18cff280e make keybindings share base 2024-12-09 20:43:32 +00:00
tznind
9002acf942 WIP move more to bind base class 2024-12-09 20:29:54 +00:00
tznind
bf8879537c Super rough sketch of what generics solution would look like 2024-12-09 16:59:17 +00:00
Tig
e6aeada480 Tweaked HexView 2024-12-08 17:37:28 -08:00
Tig
babc6fead9 Tweaked ColorPicker16 2024-12-08 17:10:08 -08:00
Tig
e502a13402 MouseBindings tests 2024-12-08 13:40:32 -08:00
Tig
98244b7131 KeyBindings cleanup 2024-12-08 07:23:38 -08:00
Tig
7e289f02e9 KeyBindings cleanup 2024-12-08 07:19:48 -08:00
Tig
921d125aa0 TOOD 2024-12-07 23:49:34 -08:00
Tig
0f137579c8 Combined KeyBinding classes 2024-12-07 23:42:38 -08:00
Tig
f673ef3b6c Doc updates. Code cleanup 2024-12-07 22:12:27 -08:00
Tig
5a0b3507a0 Merged v2_develop.
Code cleanup
2024-12-07 14:37:17 -08:00