AccessibilityBridgeThe framework-neutral accessible tree of a document session: a document node whose children are page nodes, each page's content nodes built on demand from its layout tree, reading-order navigation (next and previous element, heading, landmark, table, list, figure, link, control, page), an accessible focus that follows the viewer's page and moves the viewer to what it focuses, and change notifications a shell maps onto ARIA/DOM, UI Automation or NSAccessibility.
AccessibleNodeA node of an AccessibilityBridge's accessible tree: a role, a name, a value, table structure, and bounds on its page, for a shell to map onto an ARIA element, a UI Automation peer or an NSAccessibility element.
AnnotationLayerThe viewer's model of the annotations, links and form fields on its pages, independent of any UI framework: hit-testing, hover, selection and keyboard focus with page rectangles for the shell to draw; link activation (raised as ActionRequested, never performed); notes and popups; field editing through the form API; and annotation creation, moving and deletion through the annotation API. Every edit redraws only the tiles it touches (Invalidate(Int32, PdfRectangle, DisplayLayers)).
AnnotationNoteWhat a shell shows in a note or popup for an annotation: its text, author and subject, the popup's rectangle and state, and the replies to it. A model only; the shell draws it.
ContentReadingOrderSelects glyphs in page content order: the order the content streams show them in, every glyph selectable.
DocumentSessionOne open document in a viewer: owns the document, its engine and options and the tile backends (the backend choice), caches page geometry, builds display lists off the UI thread with cancellation and renders tiles onto an IRenderSurface. Framework-neutral: every UI shell (Blazor, WPF, MAUI, Avalonia) drives the same session.
InputModelTurns a shell's pointer, touch, wheel and keyboard events into scrolls, zooms and page turns of a ProgressiveZoom: a drag scrolls and flings with inertia, two fingers pinch about their centre, a double-tap toggles between fit-width and a zoom anchored at the tap, paged modes snap to spreads, Ctrl or Cmd with the wheel zooms about the pointer, and the keys page, jump and zoom.
LayoutReadingOrderSelects glyphs in the layout tree's reading order (ExtractLayout(LayoutOptions)): logical structure order on a tagged page, detected columns and paragraphs on an untagged one. Glyphs the layout does not place (artifacts of a tagged page, text of annotation appearances) follow in content order.
PageLayoutWhere every page of a document sits in a viewer: pages grouped into spreads, spreads in a strip with gaps and padding, each page turned by its own Rotate plus the user's rotation; and the exact mapping between viewport pixels, layout points and each page's default user space, the zooms that fit a viewport, and the pages and tiles a viewport shows.
PageLayoutOptionsHow a PageLayout arranges pages: the mode, the cover page, the gaps, the padding and the user's rotation.
ProgressiveZoomZooms a viewer progressively: each zoom step shows at once, drawn from the tiles already on the surface (stretched or shrunk, over each page's paper, so nothing goes blank), keeps the anchor (the pointer or the pinch centre) on the same page point, and once the zoom settles has the TileScheduler render sharp tiles at the settled scale in time-sliced frames, evicting the tiles of the old scale as the new ones cover the pages.
SelectableTextOne page's text as a selection sees it: the glyphs of its hit-test index in reading order, each with its box and its logical text (ActualText applied), and the word, line and paragraph boundaries between them. Positions (carets) are offsets 0 to Length between glyphs. Immutable, so safe to share between threads.
TextSelectionThe text selection of a document session: an anchor and a focus caret in reading order, possibly on different pages, driven by press-drag, double- and triple-click, select-all and keyboard moves, read back as quads per page for the shell to draw and as text to copy. Pointer coordinates come from TryGetPageAt(in Viewport, Double, Double, out PagePoint) (PagePoint, default user space), so the selection is independent of zoom, rotation and layout mode.
TileSchedulerDecides which tiles a viewer draws and when: visible tiles first (each visible page's low-resolution placeholder, then its sharp tiles), then the tiles near the viewport, then the tiles ahead in the scroll direction; cancels work the viewport has left; keeps the tiles on the surface, the tiles being drawn and the document's render caches within one memory budget.
IAccessibleElementProviderSupplies a page's accessible elements that are not page content (form fields, links, comments) in keyboard focus order: the seam the viewer's annotation, link and form layers implement.
IReadingOrderProviderDecides the order a page's glyphs are selected and copied in: the replaceable seam between the hit-test index (glyphs in content order) and the reading order a text selection follows.
IRemoteTileRendererRenders tiles of a session's document outside the thread that runs the viewer, where the host has no thread pool for it: in the browser, a second .NET runtime in a Web Worker with its own copy of the document. The TileScheduler hands it the tiles it accepts (CanRender(in Tile)) and keeps building and drawing the others itself, so the UI thread only plans frames, presents finished tiles and draws what the remote copy cannot know about (edits, which stay with the session's own document).
IRenderSurfaceWhere a DocumentSession puts finished tiles: the surface abstraction each UI shell implements over its own canvas, image or texture (a Blazor canvas, a WPF writeable bitmap, a GPU texture), and HeadlessSurface in tests.
ITileBackendThe backend choice of a DocumentSession: draws a cached display list into a tile's pixels, in slices a single-threaded host can interleave with its UI. SoftwareTileBackend is the default.
ITileRenderA tile render in progress: advanced in time slices, disposed when done or abandoned.