DIR.Lib 4.2.931

This package has a SemVer 2.0.0 package version: 4.2.931+f8e897f4d8cfc47934f2b872138d96a3d941bcc3.
dotnet add package DIR.Lib --version 4.2.931
                    
NuGet\Install-Package DIR.Lib -Version 4.2.931
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DIR.Lib" Version="4.2.931" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="DIR.Lib" Version="4.2.931" />
                    
Directory.Packages.props
<PackageReference Include="DIR.Lib" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add DIR.Lib --version 4.2.931
                    
#r "nuget: DIR.Lib, 4.2.931"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package DIR.Lib@4.2.931
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=DIR.Lib&version=4.2.931
                    
Install as a Cake Addin
#tool nuget:?package=DIR.Lib&version=4.2.931
                    
Install as a Cake Tool

DIR.Lib

Device-Independent input + Rendering library for .NET. Provides the shared foundation for both GPU (SDL3 + Vulkan) and terminal (Console) applications. Pure-managed, AOT-compatible, no native dependencies.

Rendering Primitives

  • PointInt — 2D integer point
  • RectInt — 2D integer rectangle (note: constructor argument order is (LowerRight, UpperLeft))
  • RectF32 — 2D float rectangle (x, y, width, height) for pixel-based layout
  • RGBAColor32 — 32-bit RGBA color with Lerp, WithAlpha, Luminance
  • TextAlign — Near/Center/Far alignment enum
  • Renderer<TSurface> — Abstract renderer: FillRectangle, DrawRectangle, FillEllipse / DrawEllipse, DrawLine, DrawLineDashed, DrawPolyline, DrawPolylineDashed, DrawText, MeasureText
  • RgbaImage / RgbaImageRenderer : Renderer<RgbaImage> — pure software renderer for tests and headless scenarios; output is plain RGBA pixels (callers own the choice of PNG / JPEG / TIFF / sixel encoder)
  • GlyphBitmap / SdfGlyphBitmap — raw RGBA glyph bitmap with bearing/advance info; SDF variant for scalable text on the GPU side
  • ManagedFontRasterizer — pure-managed glyph rasterizer backed by SharpAstro.Fonts.OpenTypeFont; supports COLRv1 color glyphs, grayscale, and PDF subset fonts. AOT-compatible, no GC pinning, no native bindings.
  • FontResolver — resolves platform-default monospace fonts and enumerates installed font files across system + per-user font directories (incl. Windows 11 %LOCALAPPDATA%\Microsoft\Windows\Fonts)

Input Handling

  • InputEvent — open record hierarchy: KeyDown, TextInput, MouseDown, MouseUp, MouseMove, Scroll, Pinch, PinchEnd
  • InputKey — platform-agnostic key codes (letters, digits, function keys, navigation, symbols)
  • InputModifier — modifier flags (Shift, Ctrl, Alt)
  • MouseButton — Left / Middle / Right
  • IWidget — shared interface with HandleInput for both pixel and terminal widgets

Platform bridges (in downstream packages):

  • SdlVulkan.Renderer provides SdlInputMapping (SDL3 Scancode → InputKey)
  • Console.Lib provides ConsoleInputMapping (ConsoleKey → InputKey)

Widget System

  • IPixelWidget — extends IWidget with pixel-coordinate hit testing and click dispatch
  • PixelWidgetBase<TSurface> — base class for pixel widgets: clickable regions, text input, buttons, dropdowns, drawing helpers
  • PixelLayout + PixelDockStyle — dock-based layout engine (Top/Bottom/Left/Right/Fill)
  • DockLayout<T> — generic dock layout using INumber<T> (the integer / pixel layouts above are built on this)
  • ClickableRegion + ClickableRegionTracker — registered during render, walked in reverse for hit testing
  • HitResult — open discriminated union: TextInputHit, ButtonHit, ListItemHit, SlotHit<T>, SliderHit
  • DropdownMenuState — dropdown / popup menu state machine

Text Input

  • TextInputState — single-line text input state machine with cursor, selection, undo
  • TextInputRenderer — renders text input using any Renderer<T> (blinking cursor, selection highlight)
  • Callbacks: OnCommit (async), OnCancel, OnTextChanged, OnKeyOverride

Signals & Async

  • SignalBus — thread-safe typed event bus. Post<T>() is thread-safe, ProcessPending() runs on the render thread.
  • Built-in signals: ActivateTextInputSignal, DeactivateTextInputSignal, RequestExitSignal, RequestRedrawSignal
  • BackgroundTaskTracker — collects background tasks, checks completions per frame, logs errors via ILogger. Call ProcessCompletions() each frame, DrainAsync() at shutdown.

Math Layout (DIR.Lib.MathLayout)

TeX-style box model for rendering mathematical expressions. Each Box exposes Width / Height (ascent) / Depth (descent) and paints itself relative to a (penX, baselineY) the parent provides.

  • Box + BoxStyle — abstract box with baseline, plus a record of font / size / spacing parameters threaded through layout. Pixel-valued math metrics (axis height, fraction-rule thickness, …) come from the font's OpenType MATH table when available, with TeX-style ratio fallbacks.
  • Box types: GlyphBox, MathGlyphBox, HBox, FracBox, SqrtBox, BracketBox, BigOperatorBox, SupSubBox, AccentBox, LimitsBox, MatrixBox, OverlayBox, StretchyVerticalBox
  • BoxRasterizer.RenderToRgba(box, style) — rasterizes a Box to a transparent RgbaImage. Pure — no encoder coupling; callers choose PNG / sixel / half-block downstream.

Markdown + LaTeX (DIR.Lib.Markdown)

A LALR.CC-driven markdown + math-mode LaTeX pipeline. The math, markdown-inline, and markdown-block grammars (grammars/*.lalr.yaml) are compiled at build time by the SharpAstro.LALR.CC source generator into partial classes baked into this assembly — no runtime parser construction, AOT-clean.

  • MdAst — block & inline AST records (MdParagraph, MdHeading, MdMathBlock, MdList, MdTable, MdInline, …)
  • MarkdownBlockVisitor / MarkdownInlineVisitor — visitors over the generated grammars; produce the AST.
  • LatexUnicodeVisitor — math-mode LaTeX → Unicode (inline math: $x^2$).
  • BoxBuildingVisitor — math-mode LaTeX → deferred Box builders (display math: $$..$$MathLayout box tree → BoxRasterizer).
  • Mhchem — renders an mhchem \ce{...} body to Unicode (auto-subscripts, arrows, ion charges, …).
  • MarkdownMacros — parser-side facade: macro expansion (\text{}, \boxed{}, \ce{}, \begin/\end environments), backslash-escape resolution, and the RenderMathUnicode entry point.

Usage

using DIR.Lib;
using DIR.Lib.MathLayout;
using DIR.Lib.Markdown;

// Rendering
renderer.FillRectangle(rect, new RGBAColor32(0x30, 0x50, 0x90, 0xff));
renderer.DrawText("Hello", fontPath, 14f, white, layout);
renderer.DrawPolyline(points, color, thickness: 2);

// Input handling
widget.HandleInput(new InputEvent.KeyDown(InputKey.Enter, InputModifier.Ctrl));

// Pixel layout
var layout = new PixelLayout(contentRect);
var header  = layout.Dock(PixelDockStyle.Top, 28f);
var sidebar = layout.Dock(PixelDockStyle.Left, 200f);
var content = layout.Fill();

// Background tasks
tracker.Run(async () => await SaveAsync(), "Save profile");
if (tracker.ProcessCompletions(logger)) needsRedraw = true;

// Math rendering (display LaTeX → RGBA image)
var unicode = MarkdownMacros.RenderMathUnicode("E = mc^2");      // "E = mc²"
var image   = BoxRasterizer.RenderToRgba(boxBuilder(style), style);

Dependencies

DIR.Lib is codec-agnostic (4.0+): BoxRasterizer.RenderToRgba returns an RgbaImage, and consumers that need TIFF / PNG / JPEG / ICC encoding declare those packages (SharpAstro.Tiff, SharpAstro.Png, SharpAstro.Color.Icc, …) themselves.

License

MIT

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (3)

Showing the top 3 NuGet packages that depend on DIR.Lib:

Package Downloads
TianWen.Lib

Package Description

Console.Lib

Package Description

SdlVulkan.Renderer

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
4.2.931 0 5/19/2026
4.1.921 0 5/19/2026
4.1.911 0 5/19/2026
4.1.901 0 5/19/2026
4.1.891 0 5/19/2026
4.0.881 80 5/16/2026
4.0.861 49 5/14/2026
4.0.851 21 5/14/2026
4.0.841 57 5/14/2026
3.0.831 90 5/12/2026
2.14.821 25 5/12/2026
2.14.811 22 5/12/2026
2.14.801 22 5/12/2026
2.14.791 25 5/12/2026
2.14.781 29 5/12/2026
2.14.771 75 5/9/2026
2.14.761 30 5/9/2026
2.14.751 28 5/6/2026
2.13.741 25 5/6/2026
2.12.731 28 5/6/2026
Loading failed