The app’s own version: version= of apps/NAME/PACKAGE, which build_rs.py hands to rustc as
JFGUI_VERSION (every program of the app); “0.0.0” without one. An expression of type
&'static str: const APP_VERSION: &str = rt::app_version!();, update::Config::new(app, rt::app_version!(), ..).
(E16) the jfgui_main a program’s main! defines, for the test binary of a library crate with
std (a style crate’s cargo test): plat’s start of a std program refers to it, so without it
the tests do not link. Never called (the test harness has its own main); no panic check
(tests unwind). #[cfg(test)] ui::test_main!(); in the crate’s lib.rs, also under
#![forbid(unsafe_code)] (the expansion allows no lint: unsafe_code skips external macros)
what a calendar picks and between which dates (calendar): mode CAL_DAY, CAL_WEEK or
CAL_MONTH; min and max (year, month, day) inclusive – in CAL_WEEK the weeks that hold them, in
CAL_MONTH their months
the windows of an area: kept by the app and passed to desk_begin / desk_next / desk_end /
desk_taskbar. Plain data: save() / load() turn it into a few lines of text (desk 1, then
win KEY X Y W H STATE from the bottom of the z-order to the top – x, y from the area’s
start corner, outer size, all DIP; STATE the DW_* bits – and active KEY; unknown lines
are skipped). The reserved strip is no part of it.
an edge’s route in world units: the polyline, the indices of its defining points (a, the
waypoints, b) in it, its bounding box x0, y0, x1, y1 (empty pts: an end is unknown)
a diagnostic of a code editor: a part of the text in lines and columns from 1 as compilers
report them (columns count characters, a tab is one; the end is exclusive, an end at or
before the start marks the one character at the start, past a line’s end the end of the
line), a severity DIAG_* and the message (see the module header)
the widget’s state, kept by the app: the view, the selection (node and edge keys), the
focused node, grid and snapping, the hover, the gesture in progress and the index
the layout of a dock area: kept by the app and passed to dock_begin / dock_next /
dock_end. save() / load() turn it into a few lines of text: dock 1, then side S SIZE COLLAPSED, group S TAG SIZE ACTIVE PANEL..., float SLOT X Y W H HOME HOMETAG ACTIVE PANEL..., hidden PANEL S TAG POS X Y W H HOME HOMETAG [ORDER...] (ORDER: its group’s tab
order when it left; unknown lines are skipped).
the gfx target of a custom draw call (render time): the draw context (clip, origin,
colour), the surface and the text engine (its path and rasterizer serve Shapes)
what ui.line_chart shows: the series and how (see the module header of chart.rs); build
it with LineChart::new(&series) and the setters, or change the fields
a node of an HTML document’s element tree (an element or a text): the same across changes
of the document; a freed node’s handle refers to nothing (MdDoc::alive)
a paragraph: its text (no ‘\n’) with runs of formats, and its attributes. The attribute
fields may be set directly while building a document (not undoable; RichDoc’s setters
are).
Style-owned ribbon geometry in DIP. A scrolling ribbon keeps every group’s
original arrangement; a collapsing ribbon can use the compact/flyout layouts.
Explicit typography for a document sample, independent of the application’s theme.
Sizes and baseline displacement are 24.8 DIP; positive displacement moves downwards.
An owned application driven one event/tick at a time. Browser hosts and automation
use the same passes, input handling and software renderer as native windows.
What a semantic record says beyond its kind, label and value (Sem::ax): its setters fill it
(ui.sem_rect(..).id64(7).parent(3).desc("..")); a web page’s accessibility tree needs it.
a time series for line_chart: (t, value) points in a ring that keeps the newest
capacity (a full buffer drops its oldest point on push). Times never decrease (push
refuses an earlier one, so every lookup is a binary search); a value that is not finite
(NaN) is a gap where the line breaks. ver() changes with every change: a chart redraws
only then.
a value the app shares with the library: the asm passes its address and the library
keeps it (a window’s open flag, its WINRECT, a content dialog’s open flag)
Opt-in presentation for a multiline editor embedded in document content. Geometry is in
physical pixels; callers scale it with the document zoom and DPI. Editing, clipboard,
selection, accessibility and IME behavior remain the ordinary textbox implementation.
TRACK – the colour gradient of track_slider: TK_* flags and 1..TK_MAXN straight-ARGB
stops; with TK_CUSTOM the track is drawn by custom (draw object, user value, version:
bump it when the drawing changes) instead
what part of the world the canvas shows: zoom (DIP per world unit, 1 = 100 %), the world
point at the centre of rect; rect (absolute px) and dpi are kept by ui.diagram
the per-window state of the live window: the core’s per-window blocks (ui_ctx_wb0,
ui_layout_wb0, ui_cmd_wb0, ui_dirty_wb0, ui_main_wb0) and the families’ (ui_popup,
ui_list, ui_chrome). win.rs keeps one of these per window and swaps it with Ui::wp
when another window is built (core::mem::swap); a new window starts from WinParts::new.
a press on a tab or on the empty part of a tab strip can drag only after this many ms with
the button down, so that a slip of the hand during a click neither moves nor floats a panel;
clicks, double clicks (they float), the menu and the splitters need no hold
StyleShell::dock_tab, sp.flags: the press was held long enough, the tab can be moved now (a
press on the strip’s empty part: every tab of the group, they would all move)
its group moves as a whole: when it is the shown tab, the group menu’s “Links / Rechts /
Unten andocken” and “Lösen” and a double click on the strip’s empty part take every tab of
the group (panels that belong together, such as an app’s developer tools;
DockState::dock_group_to / float_group)
the format of a view’s target: what the output samples and what is read back byte for byte into the
framebuffer (B, G, R, x). The content’s colours go in as it writes them, as sRGB codes like the framebuffer’s:
no hardware encodes them (G5e2: render3d’s fragment shaders do, RendererDesc::encode_srgb)
no input method (Windows: the window’s input context is taken away; X11: no IBus; Wayland:
the password purpose); ui’s TB_PASSWORD boxes set it themselves
the library’s version, “MAJOR.MINOR.PATCH” (the root Cargo.toml; docs/VERSIONING.md says what a
change of each part promises). Not the app’s version: that is rt::app_version!().
HTML (XML and SVG too): tags over lines (names SY_KEYWORD, attributes SY_KEY, values
SY_STRING, ‘<’ and ‘>’ SY_PUNCT), comments, CDATA (SY_CODE), and
(SY_META), character references (SY_ESCAPE); the content of