plot: add stacked series composition#22
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements a caller-visible stacked-series slice:
.stack_group(id)opt-in on ordinary seriesΣtotal overlay for every successfully composed stack: the final cumulative geometry is drawn above component primitives through the existing LINE pipeline, with a line width ofPlot_config::line_width_px + 2px#E6DFCC, light mode RGB inverse#192033; component fills, lines, and dots retain their own colorsf(xN) =label; the model and plot IDs update so the visible order is the actual stack order+/-clicks update both the displayed count and plotted samples after typed inputΣtotal; the indicator notes that markers show cumulative stack positionsstack_groupmember keeps its ordinary raw markerPlot_widget::auto_adjust_view/ Fit Vertical fitting of current renderer-composed cumulative stacks, including AREA bases; stale or rejected stacks fail closed, and renderer-ineligible hidden peers do not suppress or contaminate singleton fittingPlotIndicator; x/value rows alone determine indicator width and wrapped note lines add height onlyCorrectness checks cover differing timestamps, independent LODs, overlap clipping, cache reuse/invalidation, rejected-stack suppression, auto-range, API propagation, function reordering, fractional indicator x formatting, raw component text, cumulative marker positions, note visibility and wrapping, renderer rejection/staleness, common-domain clipping, singleton marker behavior, stacked Fit Vertical envelopes, ordinary unstacked fitting, and hidden-peer renderer eligibility. Focused renderer checks additionally cover overlay presence and ordering, final cumulative geometry reuse, exact dark/light colors, thickness, multiple groups, singleton/rejected exclusion, main/preview rendering, AREA-only and DOTS-only tops, component-color preservation, and reuse of a top LINE component's existing line-window upload.
A native QRhi smoke renders two stacked AREA series with offset timestamps and validates composition, nonuniform readback, and pixels in the exact dark-mode overlay color
#E6DFCC; the ordinary smoke remains unchanged.FunctionPlotterControlsalso verifies repeated sample stepping after typed input.Independent review found one generic Fit Vertical eligibility blocker: a style-NONE/no-MAIN-layer peer could be counted as a stack member although the renderer skipped it. The fix now uses the renderer's existing MAIN eligibility API (
qrhi_layers_foranddraws_view) and a focused regression proves the visible singleton retains ordinary fitting. The bounded review of the total-overlay addition reported no blockers.The text-enabled Release build and all 30 configured CTests pass, including both native QRhi smokes and the stacked AREA exact-color smoke. Task-touched files received canonical formatting; generic QML lint, diff checks, focused post-review tests, and a rebuilt function-plotter runtime load smoke also pass.
The isolated product review target is
recovery/remove-process-damage..feature/stacked-series. This PR temporarily targetsmasterso existing cross-platform workflows run; it depends on cleanup PR #21.