BitQuirky.Graph.GraphView.Views
Public bit quirky graph: editor symbols in BitQuirky.Graph.GraphView.Views.
Source snapshot ad0983d00d77.
On this page
Assembly: BitQuirky.Graph.GraphView.Editor
CardBodyGradient
Section titled “CardBodyGradient”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.CardBodyGradientSource declaration: ../bitquirky-graph/Editor/GraphView/Views/CardBodyGradient.cs:52-362
Inherits: VisualElement
Smooth Painter2D gradient overlay for one surface of a raised node card. Two instances per card: one inside the icon well painted diagonally so the family color shades top-left to bottom-right, and one inside the label slot painted vertically so the dark body shades top to bottom. Each instance is the first child of its parent so the gradient sits behind the glyph or text content. The painter traces the parent’s resolved corner radii directly, preserving the same silhouette in native panel captures where UI Toolkit’s overflow clip is unavailable.
Responsibilities:
- Paint one continuous linear gradient across the element’s content rect via
Painter2D.fillGradient, with start/end chosen from the configured Direction. - Fill the parent’s rounded silhouette without relying on an overflow clip.
- Read the gradient endpoint colors from the design-system USS
custom properties so the tokens in
Tokens.ussremain the single source of truth.
Does NOT:
- Own the parent’s base color (the icon-well paints the family color, the label-slot inherits the card’s dark panel color).
- Render the glyph, the label text, the drop shadow, or the 1px rim bevels.
- React to family color changes; the overlay alpha values are uniform across all families by design.
Members
Section titled “Members”BottomRampHeightPx
Section titled “BottomRampHeightPx”public float BottomRampHeightPx { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CardBodyGradient.cs:134-144
Height in pixels of the bottom (dark) shading ramp, measured along
the gradient axis from the end edge. The ramp fades from alpha 0 up
to the configured --bq-node-card-surface-gradient-dark corner
alpha over this distance.
DiagonalVerticalBias
Section titled “DiagonalVerticalBias”public float DiagonalVerticalBias { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CardBodyGradient.cs:151-161
Vertical weight of the diagonal gradient axis. A value of one uses the element’s bottom-right corner; larger values make vertical movement advance through the gradient faster than horizontal movement.
GradientDirection
Section titled “GradientDirection”public BitQuirky.Graph.GraphView.Views.CardBodyGradient.Direction GradientDirection { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CardBodyGradient.cs:99-108
Direction of the gradient ramp. Setting this triggers a repaint.
PaintBottomShading
Section titled “PaintBottomShading”public bool PaintBottomShading { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CardBodyGradient.cs:185-194
When false the bottom-edge dark ramp is suppressed (alpha stays at 0). MirrorsPaintTopShadingfor the dark end of the gradient.
PaintTopShading
Section titled “PaintTopShading”public bool PaintTopShading { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CardBodyGradient.cs:169-178
When false the top-edge light ramp is suppressed (alpha stays at 0). Used by callers that want a single-sided overlay, such as a card body that should only darken at the bottom without a brightness break at the seam against a band painted by a sibling slot.
TopRampHeightPx
Section titled “TopRampHeightPx”public float TopRampHeightPx { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CardBodyGradient.cs:116-126
Height in pixels of the top (light) shading ramp, measured along the
gradient axis from the start edge. The ramp fades from the configured
--bq-node-card-surface-gradient-light corner alpha down to alpha 0
over this distance, and anything past it is fully transparent.
CardBodyGradient()
Section titled “CardBodyGradient()”public CardBodyGradient()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CardBodyGradient.cs:201-207
Builds the overlay. It takes no pointer input, so it can sit over the card without intercepting clicks, and repaints itself whenever its geometry or its resolved style tokens change. Both shading ends start enabled.
CardChevronExtension
Section titled “CardChevronExtension”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.CardChevronExtensionSource declaration: ../bitquirky-graph/Editor/GraphView/Views/CardChevronExtension.cs:72-352
Inherits: VisualElement
Painter2D-rendered hexagonal card silhouette used by Condition and Selector families. The hexagon is INSCRIBED in the same rectangular bounding box as a regular rounded-rect card - the overall card width and height are unchanged - but its four corners are chamfered diagonally so that each side’s midpoint becomes a chevron tip. The result is a 6-sided silhouette: two short horizontal edges (top, bottom), four diagonal chamfered edges, and two chevron tips at the midpoint of the left and right edges of the rectangular bounding box.
When the silhouette is active the card’s normal USS chrome
(background fill + 1px border + rounded corners) is turned
transparent and this element becomes the sole renderer of the
card chrome: family-color fill on the decorator (left) region,
--bq-panel fill on the body (right) region, diagonal gradient
overlay on the decorator, vertical gradient overlay on the
body, and a 1px dark stroke around the full hexagonal
perimeter.
The icon-well’s own family-color background, the body’s
--bq-panel background, and BOTH the icon-well and body
gradient overlays are hidden in this mode via USS - this
element draws everything that those layers would normally
contribute. The icon-well and label-slot remain as transparent
containers for the glyph and text content respectively.
Responsibilities:
- Trace the hexagonal silhouette inscribed in the card’s rectangular content rect.
- Fill the decorator region (left of the icon-well’s right edge) with the family color, re-fill with the diagonal alpha-plateau gradient overlay.
- Fill the body region (right of the icon-well’s right edge)
with
--bq-panel, re-fill with the vertical alpha-plateau gradient overlay. - Stroke the full hexagonal perimeter with the card border color.
- Read the family color from
resolvedStyle.color, set by per-family USS rules inNodeFamilies.uss.
Does NOT:
- Render the glyph or label text - those remain children of the icon-well and label-slot.
- Render the drop shadow, active glow, or selected outline.
- Position itself; the USS inline rule fills the parent.
Members
Section titled “Members”CardChevronExtension()
Section titled “CardChevronExtension()”public CardChevronExtension()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CardChevronExtension.cs:120-132
Builds the overlay stretched to fill its parent card, with the silhouette inscribed in that box. It takes no pointer input and repaints on every geometry change, so it tracks a card that resizes.
CardDropShadow
Section titled “CardDropShadow”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.CardDropShadowSource declaration: ../bitquirky-graph/Editor/GraphView/Views/CardDropShadow.cs:67-268
Inherits: VisualElement
Feathered drop shadow for raised node cards. Renders a stack of concentric rounded-rect fills via Painter2D, each fill one step larger than the next at a constant per-step alpha so the alpha accumulates toward the centre and fades smoothly to zero at the outer edge. UI Toolkit has no native box-shadow with blur, so this stack is how we approximate a soft drop shadow without shipping a 9-slice PNG asset.
Responsibilities:
- Paint N concentric rounded-rect fills inside the element’s content rect, biased downward by the configured drop-shadow offset so the shadow reads as light coming from above.
- Derive the per-step alpha from the configured peak shadow strength so the inner-most ring’s accumulated opacity matches the design target, regardless of step count.
- Self-position via inline negative
top/right/bottom/leftso the element extends past the parent card by the configured feather extents on each side. - Leave the card’s own box untouched: every rounded-rect layer is cut out at the card’s outline, so the card’s 1px ring reads its exact token color instead of that color under the shadow’s peak alpha. The design draws its ring over the shadow for the same reason.
Tuning lives in the const block below rather than in USS tokens
because Unity’s UI Toolkit does not reliably resolve custom
properties on an element whose USS rule has no other property
referencing those variables. Repeated attempts at USS-anchored
var forwarding all left customStyle.TryGetValue returning
false - the resolver simply doesn’t run for the shadow
element. Hardcoding the values keeps the recipe predictable and
avoids that pitfall; if a project ever needs to override these,
the parent can read its own resolved style and assign a public
property here.
Does NOT:
- Render the card body, gradient overlay, rim bevels, or glow rings - those are separate sibling elements.
- Animate; the shadow is static and only redraws when the element’s geometry changes.
Members
Section titled “Members”CardDropShadow()
Section titled “CardDropShadow()”public CardDropShadow()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CardDropShadow.cs:93-105
Builds the shadow with the negative insets that let it spill outside its parent card - wider at the bottom than the top, so the card reads as lit from above. It takes no pointer input and repaints on every geometry change. Add it as an absolutely positioned child of the card, behind the body.
CardGlowHalo
Section titled “CardGlowHalo”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.CardGlowHaloSource declaration: ../bitquirky-graph/Editor/GraphView/Views/CardGlowHalo.cs:27-85
Inherits: VisualElement
Feathered glow halo behind a running node card. Paints concentric rounded-rect fills whose alpha accumulates toward the card so the glow fades smoothly to nothing at its outer edge, matching the design’s soft navy falloff (UI Toolkit has no blurred box-shadow).
Responsibilities:
- Paint a feathered halo inside its content rect. The inner (near
the card) and outer (far) colors ride the standard
background-colorandborder-top-colorstyle channels so both stay USS token lookups (custom-property resolution is unreliable on side elements; seeCardDropShadow). - Multiply the accumulated alpha by the element’s resolved opacity
so the existing
--bq-active-glow-opacitycontract keeps working.
Does NOT:
- Render the ring on the card edge (card border) or the dark inner band (face-clip border); those are card-level styles.
Members
Section titled “Members”CardGlowHalo()
Section titled “CardGlowHalo()”public CardGlowHalo()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CardGlowHalo.cs:40-46
Builds the halo. It takes no pointer input and repaints on geometry and style changes, so it follows a card that resizes and picks up token changes. The caller positions it to extend past the card on every side; the colors come from the resolved style.
CompositeLiteralElement
Section titled “CompositeLiteralElement”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.CompositeLiteralElementSource declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:32-664
Inherits: VisualElement
A COMPOSITE literal: one value made of several scalar components, drawn as a single horizontal row of bordered boxes, each preceded by its own label (feature round-trip 071, contract C5).
The library holds no C# opinion. It does not know what aVector3is, does not parse or
compose a literal, and does not invent a label. It receives labels and values as data, hands
typed text back to the host validator per component, and raises ONE
Committedcarrying every component’s text. Composition into a single literal is
the host’s job, which is what keeps a three-box edit a single value, a single pending edit, and
a single undo step.
Every box reuses the scalar literal box’s chrome by carrying the same USS classes (seeLiteralBoxChrome), so a component box and a scalar box are the same control with a different width and a label beside it.
Orientation is the explicit departure from the Unreal reference: the row is HORIZONTAL and sits to the LEFT of the pin, never stacked beneath the pin label.
Members
Section titled “Members”ClearValidator
Section titled “ClearValidator”public System.Func<BitQuirky.Graph.GraphView.LiteralValidationResult> ClearValidator { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:69
Asked whether the row may commit as a CLEAR, which is what every component being blank means.
Separate fromComponentValidatoron purpose, because the two answer different questions and a per-component validator cannot answer this one: a single blank component is perfectly valid (the host reads it as zero), and only the whole row being blank is a request to remove the value. An invalid verdict blocks the commit, keeps the row open, and shows the host’s message, exactly as a rejected component does.
Null means every clear is permitted, which is the library’s standing position: it holds no opinion about whether a slot can legally become empty.
ComponentCount
Section titled “ComponentCount”public int ComponentCount { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:138
The number of components in the row.
ComponentValidator
Section titled “ComponentValidator”public System.Func<int, string, BitQuirky.Graph.GraphView.LiteralValidationResult> ComponentValidator { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:53
Validates one component’s text. The index identifies which component, so the host can apply that component’s own declared type. Never invoked by the library for its own purposes: the result only ever drives that one box’s presentation and the row’s commit gate.
ComponentValues
Section titled “ComponentValues”public System.Collections.Generic.IReadOnlyList<string> ComponentValues { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:144
The committed text of every component, in render order.
Editable
Section titled “Editable”public bool Editable { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:135
True when a click opens an editor on a component box.
EditingComponentIndex
Section titled “EditingComponentIndex”public int EditingComponentIndex { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:164
The index of the component whose editor is open, or -1.
IsEditing
Section titled “IsEditing”public bool IsEditing { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:141
True while any component’s editor is open.
IsValid
Section titled “IsValid”public bool IsValid { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:161
True when no component is currently invalid, so a commit is allowed.
Committed
Section titled “Committed”public event System.Action<System.Collections.Generic.IReadOnlyList<string>> CommittedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:75
Raised once when the whole row commits, carrying every component’s trimmed text in render order. Never raised per component: the row is one value.
ValidityChanged
Section titled “ValidityChanged”public event System.Action<bool> ValidityChangedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:78
Raised when any component’s validity changes, with the row’s overall validity.
ComponentEditorWidth
Section titled “ComponentEditorWidth”public const float ComponentEditorWidth = 120Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:132
Width the FOCUSED component opens to, deliberately the scalar literal box’s own editor floor: a component box is the same control, just narrower at rest, so the two open to the same roomy size and a value is as easy to type into one as into the other.
Applied to the focused box alone, so its siblings hold their resting size and the row stays readable while one component is being typed into. Applied inline rather than in USS for the same reason the scalar box does it inline: an open-versus-resting width is a dynamic per-state choice, not static chrome.
CompositeLiteralElement(IReadOnlyList<string> componentLabels, IReadOnlyList<string> componentValues, string typeName, bool editable)
Section titled “CompositeLiteralElement(IReadOnlyList<string> componentLabels, IReadOnlyList<string> componentValues, string typeName, bool editable)”public CompositeLiteralElement(System.Collections.Generic.IReadOnlyList<string> componentLabels, System.Collections.Generic.IReadOnlyList<string> componentValues, string typeName, bool editable = false)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:92-119
Parameters
componentLabels: One label per component, in render order. Must be non-empty: a row with no components is a value with nothing to edit, and the library will not invent one.componentValues: Current display text per component. A shorter or null list leaves the remaining boxes empty.typeName: The C# type name the per-box border colour is resolved from, so the row carries the same type colour a scalar box of that type would.editable: False renders the row read-only: no editor opens on a click.
CancelEditor()
Section titled “CancelEditor()”public void CancelEditor()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:204-219
Abandons the whole edit and restores EVERY component to the value it opened with, as Escape does. Records nothing.
CommitEditor()
Section titled “CommitEditor()”public void CommitEditor()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:190-198
Commits the whole row as Enter or a click outside would. No-op when no editor is open, and refused while any component is invalid, exactly as the scalar box refuses.
ComponentLabel(int index)
Section titled “ComponentLabel(int index)”public string ComponentLabel(int index)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:147
The label drawn to the left of component index.
ComponentMessage(int index)
Section titled “ComponentMessage(int index)”public string ComponentMessage(int index)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:158
The anchored message shown under component index, or empty.
ComponentText(int index)
Section titled “ComponentText(int index)”public string ComponentText(int index)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:150-151
The text currently in component index’s editor, or its committed value.
IsComponentInvalid(int index)
Section titled “IsComponentInvalid(int index)”public bool IsComponentInvalid(int index)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:154-155
True when component index is showing the coral invalid treatment.
OpenEditor(int index)
Section titled “OpenEditor(int index)”public void OpenEditor(int index)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:170-184
Opens the editor on one component, closing any editor already open on another component of this row. The value preselects so typing replaces it.
SetComponentValues(IReadOnlyList<string> values)
Section titled “SetComponentValues(IReadOnlyList<string> values)”public void SetComponentValues(System.Collections.Generic.IReadOnlyList<string> values)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CompositeLiteralElement.cs:224-232
Replaces the row’s committed values, e.g. after the host re-derived them from source.
Direction
Section titled “Direction”Category: Low-level runtime
enum BitQuirky.Graph.GraphView.Views.CardBodyGradient.DirectionSource declaration: ../bitquirky-graph/Editor/GraphView/Views/CardBodyGradient.cs:58-64
Underlying type: int
Direction of the linear gradient ramp.
Members
Section titled “Members”Diagonal
Section titled “Diagonal”Diagonal = 1Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CardBodyGradient.cs:63
Top-left -> bottom-right (used on the family-colored decorator).
Vertical
Section titled “Vertical”Vertical = 0Source declaration: ../bitquirky-graph/Editor/GraphView/Views/CardBodyGradient.cs:61
Top -> bottom (used on the dark body / label slot).
EdgeLayer
Section titled “EdgeLayer”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.EdgeLayerSource declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:76-2649
Inherits: VisualElement
UI Toolkit painter for committed graph edges and the active connection ghost.
Responsibilities:
- Render committed edges using generic routing, treatment, and interaction state.
- Render an explicitly configured solid or dashed temporary connection edge.
- Expose deterministic edge geometry for host hit testing and focused tests.
Does NOT:
- Own graph selection, validation, connection semantics, or product-specific styling.
- Mutate graph definitions or persist rendered geometry.
Members
Section titled “Members”ActiveStrokeWidth
Section titled “ActiveStrokeWidth”public float ActiveStrokeWidth { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:247
Stroke width of an edge marked active.
DisabledStrokeOpacity
Section titled “DisabledStrokeOpacity”public float DisabledStrokeOpacity { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:253
Opacity of a disabled edge, from 0 to 1.
DisabledStrokeWidth
Section titled “DisabledStrokeWidth”public float DisabledStrokeWidth { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:251
Stroke width of a disabled edge.
FailureStrokeWidth
Section titled “FailureStrokeWidth”public float FailureStrokeWidth { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:249
Stroke width of an edge marked failed.
HasTempEdge
Section titled “HasTempEdge”public bool HasTempEdge { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:733
True while a connection-drag ghost wire is showing (feature round-trip 067). Read-only observation surface for hosts and tests.
HoveredColor
Section titled “HoveredColor”public UnityEngine.Color? HoveredColor { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:255
Color of a hovered edge, or null to lift the edge’s own color instead of replacing it.
HoveredEdgeId
Section titled “HoveredEdgeId”public System.Guid? HoveredEdgeId { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:468
Feature round-trip 067 (US6): the currently hovered edge, or null when none. Observation surface for the host and tests.
HoveredStrokeWidth
Section titled “HoveredStrokeWidth”public float HoveredStrokeWidth { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:257
Stroke width of a hovered edge.
IdleStrokeOpacity
Section titled “IdleStrokeOpacity”public float IdleStrokeOpacity { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:245
Opacity of an edge at rest, from 0 to 1.
IdleStrokeWidth
Section titled “IdleStrokeWidth”public float IdleStrokeWidth { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:243
Stroke width of an edge at rest.
PortPlacement
Section titled “PortPlacement”public BitQuirky.Graph.GraphView.GraphPortPlacement PortPlacement { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:224
Controls the default bend axis for curved and orthogonal wires. Left/right ports bend horizontally; top/bottom ports bend vertically.
Routing
Section titled “Routing”public BitQuirky.Graph.GraphView.GraphEdgeRouting Routing { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:208
How wires are routed between their endpoints.
SelectedColor
Section titled “SelectedColor”public UnityEngine.Color SelectedColor { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:259
Color of a selected edge.
SelectedStrokeWidth
Section titled “SelectedStrokeWidth”public float SelectedStrokeWidth { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:261
Stroke width of a selected edge.
SharedTrunkBus
Section titled “SharedTrunkBus”public bool SharedTrunkBus { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:218
Opt-in tree-bus rendering for Orthogonal + TopBottom wires. Sibling edges that share a source port paint one trunk from the port and one horizontal bar, and each edge’s own identity (paint, hover, hit-test polyline) is only its junction-to-target drop, so sibling strokes never restate and overlap the shared run. Edges carrying user reroutes keep their full independent polyline. Default off so existing consumers render unchanged.
TargetArrowheadColorResolver
Section titled “TargetArrowheadColorResolver”public System.Func<System.Guid, UnityEngine.Color?> TargetArrowheadColorResolver { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:2201
Optional per-edge fill for opt-in target arrowheads, keyed by the edge’s identity. Consulted before TargetArrowheadOverrideColor; a null result for an edge falls back to the layer-wide override, then to the edge’s resolved stroke. Lets a consumer highlight one edge’s head (a state machine’s last-fired transition) while the rest keep the layer color.
TargetArrowheadOverrideColor
Section titled “TargetArrowheadOverrideColor”public UnityEngine.Color? TargetArrowheadOverrideColor { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:2190
Paints the opt-in filled arrowhead at an edge’s target endpoint. The arrow points along the incoming tangent of the final segment (polyline direction for straight / orthogonal routing, bezier end tangent otherwise) and fills with the same resolved stroke color.
TempEdgeColor
Section titled “TempEdgeColor”public UnityEngine.Color TempEdgeColor { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:739
The color the ghost wire currently draws in. Meaningful only while HasTempEdgeis true.
TempEdgeDashLength
Section titled “TempEdgeDashLength”public float TempEdgeDashLength { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:745
Configured visible dash length for the connection ghost.
TempEdgeGapLength
Section titled “TempEdgeGapLength”public float TempEdgeGapLength { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:748
Configured gap length for the connection ghost.
TempEdgeStart
Section titled “TempEdgeStart”public UnityEngine.Vector2 TempEdgeStart { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:756
The content-local point the ghost wire currently draws FROM (feature round-trip 067). For a pin drag this is the source pin; for a knot drag-out it is the knot’s visual anchor. Meaningful only while HasTempEdgeis true. Read-only surface for tests.
TempEdgeStyle
Section titled “TempEdgeStyle”public BitQuirky.Graph.GraphView.GraphConnectionGhostStyle TempEdgeStyle { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:742
Stroke pattern currently configured for the connection ghost.
TreatmentColorActive
Section titled “TreatmentColorActive”public UnityEngine.Color? TreatmentColorActive { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:234
Color used for Active. Null = caller color at full intensity.
TreatmentColorDisabled
Section titled “TreatmentColorDisabled”public UnityEngine.Color? TreatmentColorDisabled { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:240
Color used for Disabled.
TreatmentColorFailure
Section titled “TreatmentColorFailure”public UnityEngine.Color? TreatmentColorFailure { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:237
Color used for Failure.
TreatmentColorIdle
Section titled “TreatmentColorIdle”public UnityEngine.Color? TreatmentColorIdle { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:231
Optional color override used forIdle. Null means “fall back to caller-supplied color at reduced opacity”.
DefaultActiveStrokeWidth
Section titled “DefaultActiveStrokeWidth”public const float DefaultActiveStrokeWidth = 1.75Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:83
Default stroke width of an edge marked active.
DefaultDisabledStrokeOpacity
Section titled “DefaultDisabledStrokeOpacity”public const float DefaultDisabledStrokeOpacity = 0.3Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:89
Default opacity of a disabled edge, from 0 to 1.
DefaultDisabledStrokeWidth
Section titled “DefaultDisabledStrokeWidth”public const float DefaultDisabledStrokeWidth = 1.25Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:87
Default stroke width of a disabled edge.
DefaultFailureStrokeWidth
Section titled “DefaultFailureStrokeWidth”public const float DefaultFailureStrokeWidth = 1.5Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:85
Default stroke width of an edge marked failed.
DefaultHoveredColorLift
Section titled “DefaultHoveredColorLift”public const float DefaultHoveredColorLift = 0.2Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:95
How far a hovered edge’s color is lifted toward white when no explicit hover color is set, from 0 to 1.
DefaultHoveredStrokeWidth
Section titled “DefaultHoveredStrokeWidth”public const float DefaultHoveredStrokeWidth = 3Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:93
Default stroke width of a hovered edge.
DefaultIdleStrokeOpacity
Section titled “DefaultIdleStrokeOpacity”public const float DefaultIdleStrokeOpacity = 0.55Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:81
Default opacity of an edge at rest, from 0 to 1.
DefaultIdleStrokeWidth
Section titled “DefaultIdleStrokeWidth”public const float DefaultIdleStrokeWidth = 1.25Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:79
Default stroke width of an edge at rest.
DefaultSelectedStrokeWidth
Section titled “DefaultSelectedStrokeWidth”public const float DefaultSelectedStrokeWidth = 4Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:91
Default stroke width of a selected edge.
DefaultSelfLoopClearance
Section titled “DefaultSelfLoopClearance”public const float DefaultSelfLoopClearance = 24Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:123
Graph-space clearance between a default self-loop and its owning node card.
DefaultTempEdgeDashLength
Section titled “DefaultTempEdgeDashLength”public const float DefaultTempEdgeDashLength = 8Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:97
Default visible-stroke length for an opt-in dashed connection ghost.
DefaultTempEdgeGapLength
Section titled “DefaultTempEdgeGapLength”public const float DefaultTempEdgeGapLength = 5Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:100
Default empty-space length for an opt-in dashed connection ghost.
MinimumTempEdgePatternLength
Section titled “MinimumTempEdgePatternLength”public const float MinimumTempEdgePatternLength = 0.5Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:107
Smallest supported dash or gap length in graph-space pixels. Shorter patterns cannot make reliable progress at float precision and would create an excessive number of Painter2D strokes during repaint.
NonHoveredFadeOpacity
Section titled “NonHoveredFadeOpacity”public const float NonHoveredFadeOpacity = 0.25Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:114
Feature round-trip 067 (US6): alpha multiplier applied to every non-hovered edge while a wire is hovered, so the hovered wire is visually dominant . Applied on top of each edge’s normal resolved color.
EdgeLayer(GraphEdgeRouting routing, GraphPortPlacement portPlacement)
Section titled “EdgeLayer(GraphEdgeRouting routing, GraphPortPlacement portPlacement)”public EdgeLayer(BitQuirky.Graph.GraphView.GraphEdgeRouting routing = Bezier, BitQuirky.Graph.GraphView.GraphPortPlacement portPlacement = LeftRight)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:286-299
Builds an empty wire layer stretched to fill its parent and taking no pointer input, so
gestures pass through to the nodes above it.routingis the path
shape wires take, defaulting to curved, andportPlacementtells the
layer which node edges pins sit on so it can leave each wire at the right angle. Both
remain settable afterwards through the matching properties.
AddEdge(Guid edgeId, Vector2 from, Vector2 to, Color color, bool isControl, bool isSelected, bool isHovered, bool fromPortIsOnRightSide, bool toPortIsOnRightSide, IReadOnlyList<Vector2> userReroutes, EdgeTreatment treatment)
Section titled “AddEdge(Guid edgeId, Vector2 from, Vector2 to, Color color, bool isControl, bool isSelected, bool isHovered, bool fromPortIsOnRightSide, bool toPortIsOnRightSide, IReadOnlyList<Vector2> userReroutes, EdgeTreatment treatment)”public void AddEdge(System.Guid edgeId, UnityEngine.Vector2 from, UnityEngine.Vector2 to, UnityEngine.Color color, bool isControl, bool isSelected, bool isHovered, bool fromPortIsOnRightSide, bool toPortIsOnRightSide, System.Collections.Generic.IReadOnlyList<UnityEngine.Vector2> userReroutes, BitQuirky.Graph.GraphView.Views.EdgeTreatment treatment)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:345-348
Register an edge with explicit pin-side information for both endpoints. The pin sides decide which way the bezier tangents leave / enter their endpoints: a right-side pin always pushes its tangent to the right, a left-side pin always pushes its tangent to the left. This produces the familiar Blueprint loop-back curve when a target sits behind its source instead of routing the wire through either card.
AddEdge(Guid edgeId, Vector2 from, Vector2 to, Color color, bool isControl, bool isSelected, bool isHovered, bool fromPortIsOnRightSide, bool toPortIsOnRightSide, IReadOnlyList<Vector2> userReroutes, EdgeTreatment treatment, bool showTargetArrowhead)
Section titled “AddEdge(Guid edgeId, Vector2 from, Vector2 to, Color color, bool isControl, bool isSelected, bool isHovered, bool fromPortIsOnRightSide, bool toPortIsOnRightSide, IReadOnlyList<Vector2> userReroutes, EdgeTreatment treatment, bool showTargetArrowhead)”public void AddEdge(System.Guid edgeId, UnityEngine.Vector2 from, UnityEngine.Vector2 to, UnityEngine.Color color, bool isControl, bool isSelected, bool isHovered, bool fromPortIsOnRightSide, bool toPortIsOnRightSide, System.Collections.Generic.IReadOnlyList<UnityEngine.Vector2> userReroutes, BitQuirky.Graph.GraphView.Views.EdgeTreatment treatment, bool showTargetArrowhead)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:354-357
Register an edge with an opt-in filled arrowhead drawn at the target endpoint. Preserves the established cross-node route contract.
AddEdge(Guid edgeId, Vector2 from, Vector2 to, Color color, bool isControl, bool isSelected, bool isHovered, bool fromPortIsOnRightSide, bool toPortIsOnRightSide, IReadOnlyList<Vector2> userReroutes, EdgeTreatment treatment, bool showTargetArrowhead, Rect? selfLoopNodeBounds)
Section titled “AddEdge(Guid edgeId, Vector2 from, Vector2 to, Color color, bool isControl, bool isSelected, bool isHovered, bool fromPortIsOnRightSide, bool toPortIsOnRightSide, IReadOnlyList<Vector2> userReroutes, EdgeTreatment treatment, bool showTargetArrowhead, Rect? selfLoopNodeBounds)”public void AddEdge(System.Guid edgeId, UnityEngine.Vector2 from, UnityEngine.Vector2 to, UnityEngine.Color color, bool isControl, bool isSelected, bool isHovered, bool fromPortIsOnRightSide, bool toPortIsOnRightSide, System.Collections.Generic.IReadOnlyList<UnityEngine.Vector2> userReroutes, BitQuirky.Graph.GraphView.Views.EdgeTreatment treatment, bool showTargetArrowhead, UnityEngine.Rect? selfLoopNodeBounds)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:365-383
Register an edge with an opt-in filled arrowhead drawn at the target endpoint,
pointing along the incoming route. Supplying graph-spaceselfLoopNodeBounds
gives an unrouted same-node edge a selectable perimeter loop outside that rectangle;
explicituserReroutesremain authoritative.
AddEdge(Guid edgeId, Vector2 from, Vector2 to, Color color, bool isControl, bool isSelected, bool isHovered, bool toPortIsOnRightSide, IReadOnlyList<Vector2> userReroutes)
Section titled “AddEdge(Guid edgeId, Vector2 from, Vector2 to, Color color, bool isControl, bool isSelected, bool isHovered, bool toPortIsOnRightSide, IReadOnlyList<Vector2> userReroutes)”public void AddEdge(System.Guid edgeId, UnityEngine.Vector2 from, UnityEngine.Vector2 to, UnityEngine.Color color, bool isControl, bool isSelected, bool isHovered, bool toPortIsOnRightSide, System.Collections.Generic.IReadOnlyList<UnityEngine.Vector2> userReroutes)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:320-323
Feature 037 : register an edge with an optional ordered list of user-authored
reroute knots in graph space. When the list is non-empty, the edge is drawn as a
chain of N+1 cubic Bezier segments through[from, ...userReroutes, to],
mirroring the desktop (BezierPathHelper.BuildChainedBezierPath) behavior.
AddEdge(Guid edgeId, Vector2 from, Vector2 to, Color color, bool isControl, bool isSelected, bool isHovered, bool toPortIsOnRightSide, IReadOnlyList<Vector2> userReroutes, EdgeTreatment treatment)
Section titled “AddEdge(Guid edgeId, Vector2 from, Vector2 to, Color color, bool isControl, bool isSelected, bool isHovered, bool toPortIsOnRightSide, IReadOnlyList<Vector2> userReroutes, EdgeTreatment treatment)”public void AddEdge(System.Guid edgeId, UnityEngine.Vector2 from, UnityEngine.Vector2 to, UnityEngine.Color color, bool isControl, bool isSelected, bool isHovered, bool toPortIsOnRightSide, System.Collections.Generic.IReadOnlyList<UnityEngine.Vector2> userReroutes, BitQuirky.Graph.GraphView.Views.EdgeTreatment treatment)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:331-334
Feature 014 : register an edge with an explicit EdgeTreatmentso the layer can pick width and color from -’s idle / active / failure / disabled table without baking BT semantics into the renderer.
AddEdge(Vector2 from, Vector2 to, Color color, bool isControl, bool isSelected, bool isHovered, bool toPortIsOnRightSide)
Section titled “AddEdge(Vector2 from, Vector2 to, Color color, bool isControl, bool isSelected, bool isHovered, bool toPortIsOnRightSide)”public void AddEdge(UnityEngine.Vector2 from, UnityEngine.Vector2 to, UnityEngine.Color color, bool isControl, bool isSelected = false, bool isHovered = false, bool toPortIsOnRightSide = false)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:309-312
Registers an edge with no identity, no reroutes, and the default treatment, drawn from a right-side source pin. Edges accumulate untilClearEdges; an edge added without an id cannot be hit-tested back to a model edge.
Parameters
from: Source endpoint in layer-local space.to: Target endpoint in layer-local space.isControl: True for a flow wire, false for a data wire.
ClearEdges()
Section titled “ClearEdges()”public void ClearEdges()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:446-462
Drops every registered edge and the hover state, then repaints. Computed self-loop routes are retained by edge id so re-registering the same edge does not pay to recompute them.
ClearTempEdge()
Section titled “ClearTempEdge()”public void ClearTempEdge()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:720-727
Hides the temporary edge and restores its default solid configuration.
EnumerateEdgePolylines()
Section titled “EnumerateEdgePolylines()”public System.Collections.Generic.IEnumerable<(System.Guid EdgeId, UnityEngine.Vector2[] Polyline)> EnumerateEdgePolylines()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:820-826
Feature 037: enumerates the currently-rendered edge list so the reroute manipulator can perform a hit-test against it when the user double-clicks. Returns the polyline approximation of each rendered curve plus its id.
EnumerateEdgeSegmentPolylines()
Section titled “EnumerateEdgeSegmentPolylines()”public System.Collections.Generic.IEnumerable<(System.Guid EdgeId, int SegmentOrdinal, UnityEngine.Vector2[] Polyline)> EnumerateEdgeSegmentPolylines()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:1254-1306
Enumerates each rendered Bezier segment separately so hit testing can map a double-click back to the exact reroute insertion ordinal used by Unity’s renderer, rather than approximating with desktop-side curve math.
GetTempEdgeDashSegments()
Section titled “GetTempEdgeDashSegments()”public System.Collections.Generic.IReadOnlyList<(UnityEngine.Vector2 From, UnityEngine.Vector2 To)> GetTempEdgeDashSegments()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:763-771
Returns the exact line fragments used to paint the dashed connection ghost. Solid or hidden ghosts return an empty list. The returned geometry is a fresh snapshot and cannot mutate renderer state.
SetHoveredEdge(Guid? edgeId)
Section titled “SetHoveredEdge(Guid? edgeId)”public void SetHoveredEdge(System.Guid? edgeId)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:477-486
Feature round-trip 067 (US6): sets the hovered edge (null clears). While set, the matching edge draws with the hovered stroke width / color-lift and every other edge fades toNonHoveredFadeOpacity. The edge list is NOT rebuilt, only repainted. The host drives this from mouse-move nearest-edge hit-testing and clears it on exit, drag start, and re-render.
SetTempEdge(Vector2 from, Vector2 to, Color color)
Section titled “SetTempEdge(Vector2 from, Vector2 to, Color color)”public void SetTempEdge(UnityEngine.Vector2 from, UnityEngine.Vector2 to, UnityEngine.Color color)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:656-665
Shows the historical solid temporary connection edge. This overload preserves the established contract for existing callers.
SetTempEdge(Vector2 from, Vector2 to, Color color, GraphConnectionGhostStyle style, float dashLength, float gapLength)
Section titled “SetTempEdge(Vector2 from, Vector2 to, Color color, GraphConnectionGhostStyle style, float dashLength, float gapLength)”public void SetTempEdge(UnityEngine.Vector2 from, UnityEngine.Vector2 to, UnityEngine.Color color, BitQuirky.Graph.GraphView.GraphConnectionGhostStyle style, float dashLength, float gapLength)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:673-717
Shows a temporary connection edge with an explicit stroke pattern. Dashed rendering requires finite dash and gap lengths of at least MinimumTempEdgePatternLength. Solid rendering preserves the historical connection ghost exactly.
TryGetEdgeColor(Guid edgeId, out Color color)
Section titled “TryGetEdgeColor(Guid edgeId, out Color color)”public bool TryGetEdgeColor(System.Guid edgeId, out UnityEngine.Color color)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:777-786
Feature 037: returns the color currently registered for the given edge so reroute knots can be painted in the same color as the wire they sit on.
TryGetEdgeMidpoint(Guid edgeId, out Vector2 midpoint)
Section titled “TryGetEdgeMidpoint(Guid edgeId, out Vector2 midpoint)”public bool TryGetEdgeMidpoint(System.Guid edgeId, out UnityEngine.Vector2 midpoint)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:1219-1247
Finds the halfway point along one rendered edge in graph-space coordinates, using the same polyline as hit testing. Default self-loop geometry is reused without allocation; explicit reroutes and the active routing mode remain authoritative.
TryGetEdgeRenderStyle(Guid edgeId, out float strokeWidth, out Color color)
Section titled “TryGetEdgeRenderStyle(Guid edgeId, out float strokeWidth, out Color color)”public bool TryGetEdgeRenderStyle(System.Guid edgeId, out float strokeWidth, out UnityEngine.Color color)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:793-813
Returns the resolved stroke width and color for a rendered edge after semantic treatment and interaction-state overrides are applied. This lets embedders keep edge-attached affordances visually consistent with the actual wire.
TryGetEffectiveEdgeStroke(Guid edgeId, out float width, out Color drawColor)
Section titled “TryGetEffectiveEdgeStroke(Guid edgeId, out float width, out Color drawColor)”public bool TryGetEffectiveEdgeStroke(System.Guid edgeId, out float width, out UnityEngine.Color drawColor)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:495-509
Feature round-trip 067 (US6): the width + draw color an edge resolves to under
the currentSetHoveredEdgestate (observation / test surface). The
hovered edge takes the hovered stroke; every other edge is faded by
NonHoveredFadeOpacity; with no hover set each edge resolves exactly
as it renders. Returns false when no edge carriesedgeId.
TryPickDataEdge(Vector2 point, float tolerance, out Guid edgeId)
Section titled “TryPickDataEdge(Vector2 point, float tolerance, out Guid edgeId)”public bool TryPickDataEdge(UnityEngine.Vector2 point, float tolerance, out System.Guid edgeId)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:519-543
Feature 062 (E2): picks the closest rendereddataedge whose curve passes
withintolerance of point(both in this layer’s
content-local / graph space). Execution edges and id-less edges are ignored. Returns
the nearest match so a host can let the user grab a specific wire out of a fan-out to
pull it off its source (the split gesture). The lib makes no decision about what the
grab means.
TryPickEdge(Vector2 point, float tolerance, out Guid edgeId, out bool isExecution)
Section titled “TryPickEdge(Vector2 point, float tolerance, out Guid edgeId, out bool isExecution)”public bool TryPickEdge(UnityEngine.Vector2 point, float tolerance, out System.Guid edgeId, out bool isExecution)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:610-636
Feature round-trip 067 (US2): picks the closest rendered edge, data OR execution,
whose curve passes withintolerance of point
(both in this layer’s content-local / graph space), reporting whether the winner is an
execution wire viaisExecution. Unlike TryPickDataEdge
this does not skip control edges, so a host can resolve an Alt+click or wire right-click
on any wire back to its edge. Id-less edges are ignored. Overlapping wires tie-break to
the LAST-DRAWN edge (the one painted on top), matching the <= distance test the reroute
picker already uses. The lib makes no decision about what the pick means.
TryPickExecutionEdge(Vector2 point, float tolerance, out Guid edgeId)
Section titled “TryPickExecutionEdge(Vector2 point, float tolerance, out Guid edgeId)”public bool TryPickExecutionEdge(UnityEngine.Vector2 point, float tolerance, out System.Guid edgeId)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:554-598
Picks the nearest renderedexecutionedge whose sampled curve falls within
tolerance of point. Data and id-less edges are
ignored. Unlike the last-drawnTryPickDataEdge / TryPickEdge
tie-break, exact-distance ties resolve by the stable edge ID, so an embedding product
that routes execution relationships gets a pick that never depends on document or render
registration order. A negative or NaN tolerance is rejected. The lib makes no decision
about what the pick means. Purely additive to the Round Trip 067 pickers.
EdgeTreatment
Section titled “EdgeTreatment”Category: Low-level runtime
enum BitQuirky.Graph.GraphView.Views.EdgeTreatmentSource declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:23-39
Underlying type: int
Semantic treatment a consumer attaches to an edge so the layer can pick width + color without baking tool-specific semantics into the renderer. Each treatment maps to a width tier and an optional override color; the color the caller passes in still applies toDefault.
Round Trip note: keep the treatment palette generic. Round Trip can use the same values to mean “method-call edge”, “data edge”, etc. via the same mapping rules.
Members
Section titled “Members”Active
Section titled “Active”Active = 2Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:32
Active-path edge from root to currently executing node.
Default
Section titled “Default”Default = 0Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:26
Caller-supplied color, idle (thin) stroke.
Disabled
Section titled “Disabled”Disabled = 4Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:38
Edge relationship itself is unavailable; do not use for pruned execution branches.
Failure
Section titled “Failure”Failure = 3Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:35
Edge relationship itself is invalid or failed; do not use for node execution results.
Idle = 1Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:29
Idle / unvisited branch: slightly dimmer, thin stroke.
GradientBackground
Section titled “GradientBackground”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.GradientBackgroundSource declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:15-75
Inherits: VisualElement
Renders a horizontal gradient background from left (lighter) to right (darker).
Members
Section titled “Members”GradientBackground(Color baseColor)
Section titled “GradientBackground(Color baseColor)”public GradientBackground(UnityEngine.Color baseColor)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:24-28
Builds the background frombaseColor, which is the light left end of
the ramp; the darker right end is derived from it. Call
UpdateBaseColorto change it later.
UpdateBaseColor(Color newBaseColor)
Section titled “UpdateBaseColor(Color newBaseColor)”public void UpdateBaseColor(UnityEngine.Color newBaseColor)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:34-38
Updates the base color and triggers a repaint. Used when MakeArray element type is resolved.
GraphAssetIconView
Section titled “GraphAssetIconView”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.GraphAssetIconViewSource declaration: ../bitquirky-graph/Editor/GraphView/Views/GraphAssetIconView.cs:30-155
Inherits: VisualElement
UI Toolkit image view for mandatory graph-library icon assets.
Responsibilities:
- Load an editor texture or vector from a package asset path.
- Render it at the size set by the caller.
- Optionally flatten vector vertex color to white so caller tint is the exact output color.
- Render every SVG from its shipped VectorImage so approved geometry has one source.
- Own generated monochrome masks for the editor domain and destroy them before code unload or Editor shutdown; Play Mode transitions retain the still-valid cache.
Does NOT:
- Provide fallback icons when an asset is missing.
- Own toolbar interaction behavior.
Members
Section titled “Members”GraphAssetIconView(string assetPath)
Section titled “GraphAssetIconView(string assetPath)”public GraphAssetIconView(string assetPath)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GraphAssetIconView.cs:59-62
Shows the shipped icon atassetPathwith the asset’s own colors, so
a multi-color icon arrives intact. The element takes no pointer input.
GraphAssetIconView(string assetPath, bool useAsMonochromeMask)
Section titled “GraphAssetIconView(string assetPath, bool useAsMonochromeMask)”public GraphAssetIconView(string assetPath, bool useAsMonochromeMask)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GraphAssetIconView.cs:70-74
Shows the shipped icon atassetPath, with
useAsMonochromeMasktrue flattening its vertex colors to white so the
caller’s tint is the exact output color - the form to use for a glyph that must follow
the theme. False keeps the asset’s own colors.
SetAssetPath(string assetPath)
Section titled “SetAssetPath(string assetPath)”public void SetAssetPath(string assetPath)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GraphAssetIconView.cs:80-83
Shows the icon atassetPath, sized to fit this element, keeping the
asset’s own colors.
SetAssetPath(string assetPath, bool useAsMonochromeMask)
Section titled “SetAssetPath(string assetPath, bool useAsMonochromeMask)”public void SetAssetPath(string assetPath, bool useAsMonochromeMask)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GraphAssetIconView.cs:90-109
Shows the icon atassetPath, sized to fit this element.
Parameters
useAsMonochromeMask: Flatten a vector icon’s own colors to white so the caller’s tint is the exact output color. Ignored for raster assets.
GraphEdgeLabelPlacementResult
Section titled “GraphEdgeLabelPlacementResult”Category: Low-level runtime
enum BitQuirky.Graph.GraphView.Views.GraphEdgeLabelPlacementResultSource declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:44-60
Underlying type: int
Outcome of resolving a collision-free graph-edge label center against node-card bounds.
Members
Section titled “Members”EdgeNotFound
Section titled “EdgeNotFound”EdgeNotFound = 1Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:50
No rendered edge has the requested identity.
InvalidRequest
Section titled “InvalidRequest”InvalidRequest = 0Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:47
The request contains non-finite, negative, or empty geometry.
NearRoute
Section titled “NearRoute”NearRoute = 3Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:56
The label fits within the requested perpendicular fallback bound.
NoAvailableFit
Section titled “NoAvailableFit”NoAvailableFit = 4Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:59
No collision-free center exists on the route or inside the fallback bound.
OnRoute
Section titled “OnRoute”OnRoute = 2Source declaration: ../bitquirky-graph/Editor/GraphView/Views/EdgeLayer.cs:53
The label fits on the rendered route nearest its path midpoint.
GraphIconView
Section titled “GraphIconView”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.GraphIconViewSource declaration: ../bitquirky-graph/Editor/GraphView/Views/GraphIconView.cs:19-570
Inherits: VisualElement
Theme-colored 16 by 16 vector icon painter.
Responsibilities:
- Reproduce the supplied PDF SVG geometry at any requested size.
- Inherit the resolved UI Toolkit text color for theme support.
Does NOT:
- Load assets or provide a glyph-font fallback.
Members
Section titled “Members”public string Key { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GraphIconView.cs:33
The icon identity this view paints, without the icon- file prefix.
Responsibilities:
- Let conformance harnesses verify a painted glyph is the exact approved export rather than a lookalike shape.
Does NOT:
- Redraw or restyle anything; it only reads back the construction key.
GraphIconView(string key)
Section titled “GraphIconView(string key)”public GraphIconView(string key)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GraphIconView.cs:43-46
Paints the icon namedkey (without the icon-prefix) in the
element’s resolved text color, so it follows the theme. An unknown or empty key falls
back to the generic node glyph rather than painting nothing.
GraphIconView(string key, Color color)
Section titled “GraphIconView(string key, Color color)”public GraphIconView(string key, UnityEngine.Color color)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GraphIconView.cs:53-56
Paints the icon namedkey in color, fixed rather
than following the resolved text color. Use it where the glyph carries its own meaning,
such as a type or family tint.
GridBackground
Section titled “GridBackground”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.GridBackgroundSource declaration: ../bitquirky-graph/Editor/GraphView/Views/GridBackground.cs:36-298
Inherits: VisualElement
Background layer of the GraphView canvas - paints the canvas fill and a two-tier (minor + major) grid keyed to the current pan / zoom transform.
Responsibilities:
- PaintBackgroundColoras the canvas fill.
- Draw minor and major lines on a configurable spacing rhythm (Spacing + MajorLineFrequency).
- Optionally draw a dot at every grid intersection
(ShowGridDots) using GridDotColor,
which is the natural mapping for the design-system
--bq-grid-dottoken. - Reproject coordinates viaUpdateTransformwhen the host pans or zooms.
Does NOT:
- Draw nodes or edges - those live on sibling layers.
- Decide color values. Consumers pass colors through the public
properties; the new design-system path sets them from
--bq-bg/--bq-grid/--bq-grid-dot.
Remarks
Round Trip: keep usingGridBackground. The two-tier
rhythm with token-driven color is design-system-neutral; pick
the values from a Round Trip-specific stylesheet’s--bq-*
overrides.
Members
Section titled “Members”BackgroundColor
Section titled “BackgroundColor”public UnityEngine.Color BackgroundColor { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GridBackground.cs:69
The canvas fill painted behind the grid.
DotInterval
Section titled “DotInterval”public int DotInterval { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GridBackground.cs:135
Controls dot placement on the dot-grid. Default0means
“dots at everyMajorLineFrequencyth intersection”
- the pre-existing rhythm preserved for behavior-tree /
statechart consumers. Any positive value places a dot at every
intersection where both axis indices satisfy
i % DotInterval == 0; e.g.1peppers the canvas with a dot at every grid step,2at every other step.
Remarks
Round Trip / feature 043 Phase 6: set to1for an
at-every-intersection soft pattern. The shared preferences page
(FR-064b, Phase 33) will surface this as the
“dot frequency” preference; it stays a code-only knob here.
GridColor
Section titled “GridColor”public UnityEngine.Color GridColor { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GridBackground.cs:73
The color of major grid lines.
GridDotColor
Section titled “GridDotColor”public UnityEngine.Color GridDotColor { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GridBackground.cs:93
Optional dot tint drawn at major-line intersections. Maps to
the design-system --bq-grid-dot token when the host
installs design-system colors viaApplyDesignSystemColors.
GridDotRadius
Section titled “GridDotRadius”public float GridDotRadius { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GridBackground.cs:95
Radius in pixels of a grid dot.
MajorLineFrequency
Section titled “MajorLineFrequency”public int MajorLineFrequency { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GridBackground.cs:66
Number of minor steps between major lines; every nth line is drawn as a major one, and dots fall on the same rhythm unless a dot interval is set.
MinorGridColor
Section titled “MinorGridColor”public UnityEngine.Color MinorGridColor { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GridBackground.cs:82-86
The color of minor grid lines. Unset, it derives fromGridColorat a fraction of its alpha, which is what gives the two-tier grid its rhythm without a second token; setting it pins the minor lines independently and the derivation stops applying.
ShowGridDots
Section titled “ShowGridDots”public bool ShowGridDots { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GridBackground.cs:102
Toggles the dot-on-grid treatment. The design-system host turns this on (seeApplyDesignSystemColors); pre-design-system consumers keep the lines-only look.
ShowGridLines
Section titled “ShowGridLines”public bool ShowGridLines { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GridBackground.cs:118
Toggles whether the two-tier (minor + major) line grid is drawn
at all. Defaults totrueto preserve every pre-existing
consumer (behavior tree, statechart, generic graph hosts). A
consumer that wants the design’s dots-only soft grid sets this
tofalse; the canvas fill and any dots configured via
ShowGridDotscontinue to paint.
Remarks
Round Trip / feature 043 Phase 6: flipped tofalseso the
canvas reads as a soft dot grid without a competing line rhythm.
God Complex keeps the default so its existing tree view is
unaffected ( / parity).
Spacing
Section titled “Spacing”public float Spacing { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GridBackground.cs:64
Distance in graph units between adjacent grid lines, before zoom.
GridBackground()
Section titled “GridBackground()”public GridBackground()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GridBackground.cs:153-162
Builds the background stretched to fill its parent, taking no pointer input so every canvas gesture passes through to the content above it. It starts with the two-tier line grid on, dots off, and the viewport at no pan and unit zoom.
ApplyDesignSystemColors(Color bg, Color grid, Color gridDot)
Section titled “ApplyDesignSystemColors(Color bg, Color grid, Color gridDot)”public void ApplyDesignSystemColors(UnityEngine.Color bg, UnityEngine.Color grid, UnityEngine.Color gridDot)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GridBackground.cs:185-193
Apply the design-system color palette in one call.
bg maps to--bq-bg, grid to --bq-grid, and
gridDot to--bq-grid-dot. Enables
ShowGridDots.
UpdateTransform(Vector2 pan, float zoom)
Section titled “UpdateTransform(Vector2 pan, float zoom)”public void UpdateTransform(UnityEngine.Vector2 pan, float zoom)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GridBackground.cs:172-177
Re-aligns the grid to the canvas viewport and repaints, so lines and dots stay locked to graph space as the reader pans and zooms.
GuardRingElement
Section titled “GuardRingElement”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.GuardRingElementSource declaration: ../bitquirky-graph/Editor/GraphView/Views/GuardRingElement.cs:24-183
Inherits: VisualElement
Non-color guard decoration: a ring painted over a data pin’s circle to mark it as guarded. The ring overlays the pin absolutely so it never changes node geometry, pin position, or wire routing (geometry-neutral). TheStateselects the ring STYLE so the four guard states read apart in grayscale rather than relying on color:
- Guarded - an even dashed ring.
- Misconfigured - a dashed ring with a clear open gap (an incomplete ring).
- Tripped - a continuous, heavier ring.
Stroke color is resolved from the shared--bq-guard-*design
tokens (a faint secondary cue only) so the decoration carries no
inline-baked color.
Members
Section titled “Members”public BitQuirky.Graph.PortGuardState State { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GuardRingElement.cs:47-58
Which guard state the ring draws, selecting the stroke pattern that tells the states apart without color. Setting the state it already holds does nothing; a change repaints.
GuardRingElement(PortGuardState state)
Section titled “GuardRingElement(PortGuardState state)”public GuardRingElement(BitQuirky.Graph.PortGuardState state)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GuardRingElement.cs:65-74
Builds the ring already showingstate, sized to overlay a pin’s
circle. It takes no pointer input, because the shield beside it is the click target, and
it is positioned so it never shifts node geometry or wire routing.
GuardShieldElement
Section titled “GuardShieldElement”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.GuardShieldElementSource declaration: ../bitquirky-graph/Editor/GraphView/Views/GuardShieldElement.cs:24-214
Inherits: VisualElement
Non-color guard decoration: a small shield glyph rendered in the pin’s gutter (the shared external-badge layer) marking a guarded pin and acting as the click target that opens the per-pin guard popover. The Stateselects the shield SHAPE so the guard states read apart in grayscale rather than relying on color:
- Guarded - an outlined shield.
- Misconfigured - an outlined shield with a slash (incomplete).
- Tripped - a filled shield.
The glyph color is resolved from the shared--bq-guard-*design
tokens (a faint secondary cue only); the decoration bakes in no color.
Members
Section titled “Members”public BitQuirky.Graph.PortGuardState State { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GuardShieldElement.cs:52-64
Which guard state the shield draws, selecting the glyph shape that tells the states apart without color. Setting the state it already holds does nothing; a change swaps the state class, refreshes the tooltip, and repaints.
Clicked
Section titled “Clicked”public event System.Action ClickedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/GuardShieldElement.cs:45
Raised when the shield is clicked. Hosts subscribe to open the per-pin guard popover (the shield is the popover click target).
GuardShieldElement(PortGuardState state)
Section titled “GuardShieldElement(PortGuardState state)”public GuardShieldElement(BitQuirky.Graph.PortGuardState state)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/GuardShieldElement.cs:71-83
Builds the shield already showingstate, with that state’s class and
tooltip applied. Unlike the ring, it accepts pointer input: it is the click target that
raisesClickedso a host can open its guard popover.
InlineLiteralElement
Section titled “InlineLiteralElement”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.InlineLiteralElementSource declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:14-845
Inherits: VisualElement
UI Toolkit element for displaying inline literal values on data pins. Displays as a bordered text field with type-aware styling.
Members
Section titled “Members”DisplayKind
Section titled “DisplayKind”public BitQuirky.Graph.LiteralDisplayKind DisplayKind { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:24
The kind of literal (String, Numeric, Boolean, etc.) for styling.
InvitesEntry
Section titled “InvitesEntry”public bool InvitesEntry { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:243
True when an unset pin still draws its box as an empty entry field, because the host says a value belongs in this slot.
IsEditing
Section titled “IsEditing”public bool IsEditing { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:232
True while the in-place editor is open.
IsInvalid
Section titled “IsInvalid”public bool IsInvalid { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:117
True while the editor holds a value the host validator rejected: commit is blocked and the coral treatment plus the anchored message are shown.
IsUnset
Section titled “IsUnset”public bool IsUnset { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:237
True when this element has no committed literal, so no pill should be visible.
TypeName
Section titled “TypeName”public string TypeName { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:29
The C# type name for color lookup.
Validator
Section titled “Validator”public System.Func<string, BitQuirky.Graph.GraphView.LiteralValidationResult> Validator { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:55
Feature round-trip 070 (contract C4.2): host-supplied validator consulted on every keystroke and
again at commit. The library holds no opinion about C#; when this is null there is no validation
and every value commits (Principle X: one validator, never two that can disagree). Bound per-port
by the host fromGraphViewOptions.LiteralValidator.
public string Value { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:19
The literal value to display.
Committed
Section titled “Committed”public event System.Action<string> CommittedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:58
Raised when an edit is committed with a new, valid value (the C# literal text).
Dismissed
Section titled “Dismissed”public event System.Action DismissedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:65
Raised when an edit closes without committing (Escape, or an unchanged value). Lets a host drop an editor it opened on an otherwise-empty pin instead of leaving an invisible element attached.
ValidityChanged
Section titled “ValidityChanged”public event System.Action<bool> ValidityChangedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:72
Feature round-trip 070 : raised when the open editor crosses between valid and invalid. The argument is true when it just became invalid. The host uses this to mark the pin’s pending change invalid so Compile stays blocked while an editor holds an unacceptable value.
ToggleClass
Section titled “ToggleClass”public const string ToggleClass = "inline-literal__toggle"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:105
The checkbox a bool literal draws in place of a value label. Public so a host can style or find it, in the same spirit as the other element classes above.
UnsetEditorWidth
Section titled “UnsetEditorWidth”public const float UnsetEditorWidth = 120Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:80
Width the editor opens at, comfortably wider than the resting pill so a value is easy to type. The resting pill hugs its content (as small as possible); opening the editor grows the box to this floor in both the unset and set cases. Set inline because the open-versus-resting width is a dynamic per-state choice, not static chrome.
InlineLiteralElement(string value, LiteralDisplayKind displayKind, string typeName, string tooltipText, bool editable, bool startsUnset, bool invitesEntry)
Section titled “InlineLiteralElement(string value, LiteralDisplayKind displayKind, string typeName, string tooltipText, bool editable, bool startsUnset, bool invitesEntry)”public InlineLiteralElement(string value, BitQuirky.Graph.LiteralDisplayKind displayKind, string typeName, string tooltipText = null, bool editable = false, bool startsUnset = false, bool invitesEntry = false)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:137-227
Creates a new inline literal element.
Parameters
value: The formatted literal value to display.displayKind: The kind of literal for styling.typeName: The C# type name for color lookup.tooltipText: Optional tooltip text (for truncated values).startsUnset: Feature round-trip 070: true when the pin carries no committed literal. The pill is not drawn until a value commits; callOpenEditorto raise the editor on it.invitesEntry: True when an unset pin should still draw an empty entry box at rest, rather than nothing. This is the difference between “no value, so show nothing” and “no value, and one belongs here”: the host sets it on a pin whose slot accepts a constant, so the field is visible and clickable without the engineer first having to guess that the pin is editable. Ignored once a value is committed, when the ordinary pill is drawn either way.
CancelEditor()
Section titled “CancelEditor()”public void CancelEditor()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:289-297
Closes the open editor and restores the value it opened with, as Escape does. No-op when no editor is open.
CommitEditor()
Section titled “CommitEditor()”public void CommitEditor()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:275-283
Commits the open editor as a click-out would, without relying on focus movement. A host uses this to close one pin’s editor before opening another (feature round-trip 070, ). No-op when no editor is open. A value that fails validation stays open, exactly as it does for Enter.
OpenEditor()
Section titled “OpenEditor()”public void OpenEditor()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:250-267
Raises the in-place editor without requiring a click on the pill, which is how an editor opens on an unset pin: there is no pill to click, so the host opens it from the port click (feature round-trip 070, /).
SetDisplayKind(LiteralDisplayKind kind)
Section titled “SetDisplayKind(LiteralDisplayKind kind)”public void SetDisplayKind(BitQuirky.Graph.LiteralDisplayKind kind)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:757-762
Updates the display kind and applies corresponding styling.
SetTypeName(string typeName)
Section titled “SetTypeName(string typeName)”public void SetTypeName(string typeName)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:767-771
Updates the type name and applies corresponding color.
SetValue(string value)
Section titled “SetValue(string value)”public void SetValue(string value)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineLiteralElement.cs:731-752
Updates the displayed value.
InlineObjectReferenceElement
Section titled “InlineObjectReferenceElement”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.InlineObjectReferenceElementSource declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:48-606
Inherits: VisualElement
UI Toolkit element for the object-reference COMBO drawn on a data pin: an inline bordered box showing which project asset the pin holds (Round Trip feature 072).
Sibling ofInlineLiteralElementand third member of the family InlineReferenceElementbelongs to: a literal is a constant value, an inline reference is the name of a read, and this is an asset the consumer resolved. It is a COMBO, not a pill: “pill” means the GET-node visual and must not be used for this control in code, tests, or documentation.
The library holds no opinion about what an asset is or whether one is assignable. The consumer supplies the display name, the accepted type name, and the two state answers; this element only renders them and reports clicks. That is what keeps every asset concept out of the shared layer.
Members
Section titled “Members”ClearIcon
Section titled “ClearIcon”public UnityEngine.UIElements.VectorImage ClearIcon { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:175-186
The trailing icon for the clear action, supplied by the host.
DropFilter
Section titled “DropFilter”public System.Func<System.Collections.Generic.IReadOnlyList<UnityEngine.Object>, bool> DropFilter { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:155
Host-supplied answer to “would this pin accept these dragged objects?”, consulted while a drag hovers and again at the drop. The library holds NO opinion about asset types: it draws the accept or refuse feedback the verdict implies and nothing more, exactly as the inline literal editor defers to the host’s validator. Null means no drop is ever accepted, which is the fail-closed default for a host that has not opted in.
HasReference
Section titled “HasReference”public bool HasReference { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:215
True when this combo carries a reference, resolved or missing.
IsDropTarget
Section titled “IsDropTarget”public bool IsDropTarget { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:380
True while a drag that would be accepted is hovering.
IsRefusingDrop
Section titled “IsRefusingDrop”public bool IsRefusingDrop { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:383
True while a drag that would be refused is hovering.
LocateIcon
Section titled “LocateIcon”public UnityEngine.UIElements.VectorImage LocateIcon { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:161-172
The trailing icon for the locate action, supplied by the host. Null hides the action rather than drawing a fallback glyph (Principle X: the library invents no art).
ProjectPath
Section titled “ProjectPath”public string ProjectPath { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:199-207
Where the referenced asset currently lives in the host’s project, shown on hover beneath the name. Optional: a consumer that cannot supply one gets a tooltip carrying just the name and type, which is the same shape one line shorter.
ReferenceName
Section titled “ReferenceName”public string ReferenceName { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:212
The displayed asset name; empty when the combo holds no reference.
public BitQuirky.Graph.GraphView.Views.ObjectReferenceComboState State { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:218-228
Which of the four board states this combo is currently in.
TypeName
Section titled “TypeName”public string TypeName { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:192
The accepted type name, shown on hover rather than in the combo.
ClearRequested
Section titled “ClearRequested”public event System.Action ClearRequestedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:140
Raised by the trailing clear action: the consumer empties the reference. Available on a missing reference too, which is what keeps that state recoverable rather than a dead end.
Clicked
Section titled “Clicked”public event System.Action ClickedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:127
Raised when the combo is clicked and the click means something: the consumer opens its picker. A suppressed combo never raises it, so the wired no-op is a property of the control rather than a rule every consumer has to remember .
Dropped
Section titled “Dropped”public event System.Action<System.Collections.Generic.IReadOnlyList<UnityEngine.Object>> DroppedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:146
Raised when assets are dropped on the combo andDropFilteraccepted them. The consumer performs the assignment; the library only carries the gesture.
LocateRequested
Section titled “LocateRequested”public event System.Action LocateRequestedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:134
Raised by the trailing locate action: the consumer reveals the asset in its project browser. Only ever raised while the combo shows a reference that resolves, because there is nothing to reveal otherwise.
ActionsClass
Section titled “ActionsClass”public const string ActionsClass = "inline-object-reference__actions"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:75
The trailing action row holding the locate and clear buttons.
BorderClass
Section titled “BorderClass”public const string BorderClass = "inline-object-reference__border"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:54
The bordered box that carries the state’s border treatment.
ChevronClass
Section titled “ChevronClass”public const string ChevronClass = "inline-object-reference__chevron"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:90
The dropdown chevron drawn on an unset combo.
ClearActionClass
Section titled “ClearActionClass”public const string ClearActionClass = "inline-object-reference__clear"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:81
The trailing action that empties the reference.
DropRefusedModifierClass
Section titled “DropRefusedModifierClass”public const string DropRefusedModifierClass = "inline-object-reference--drop-refused"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:87
Applied while a drag the combo would REFUSE hovers over it.
DropTargetModifierClass
Section titled “DropTargetModifierClass”public const string DropTargetModifierClass = "inline-object-reference--drop-target"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:84
Applied while a drag the combo would ACCEPT hovers over it.
GlyphClass
Section titled “GlyphClass”public const string GlyphClass = "inline-object-reference__glyph"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:60
The asset kind mark shown on an assigned combo.
LocateActionClass
Section titled “LocateActionClass”public const string LocateActionClass = "inline-object-reference__locate"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:78
The trailing action that reveals the asset in the host’s project browser.
MissingModifierClass
Section titled “MissingModifierClass”public const string MissingModifierClass = "inline-object-reference--missing"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:69
Warning treatment for a combo whose stored reference does not resolve.
RootClass
Section titled “RootClass”public const string RootClass = "inline-object-reference"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:51
Block class for the combo.
SuppressedModifierClass
Section titled “SuppressedModifierClass”public const string SuppressedModifierClass = "inline-object-reference--suppressed"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:72
Faded, non-interactive treatment for a combo a wire supplies.
UnnamedMissingText
Section titled “UnnamedMissingText”public const string UnnamedMissingText = "missing asset"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:107
What a missing combo shows when it has no last known name. Deliberately NOT the type prompt: a broken reference must never be mistaken for an empty pin.
UnsetModifierClass
Section titled “UnsetModifierClass”public const string UnsetModifierClass = "inline-object-reference--unset"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:66
Placeholder treatment for a combo holding no reference.
UnsetPrompt
Section titled “UnsetPrompt”public const string UnsetPrompt = "select asset"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:101
What an unset combo prompts with: the action available, not the type on offer. An empty object pin is a thing to DO something about, and a prompt that says so reads as a control rather than as a label. The accepted type moves to the tooltip, where it stops competing with the prompt for the same few pixels.
ValueClass
Section titled “ValueClass”public const string ValueClass = "inline-object-reference__value"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:57
The displayed asset name, or the placeholder prompt when unset.
WarnGlyphClass
Section titled “WarnGlyphClass”public const string WarnGlyphClass = "inline-object-reference__warn-glyph"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:63
The warning mark shown on a combo whose reference no longer resolves.
WiredText
Section titled “WiredText”public const string WiredText = "wired"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:93
What a suppressed combo says: the wire is the value.
InlineObjectReferenceElement(string referenceName, string typeName, bool isMissing, bool isSuppressed)
Section titled “InlineObjectReferenceElement(string referenceName, string typeName, bool isMissing, bool isSuppressed)”public InlineObjectReferenceElement(string referenceName, string typeName, bool isMissing = false, bool isSuppressed = false)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:237-302
Creates the combo for one pin.
Parameters
referenceName: The asset’s display name, or empty when the pin holds none.typeName: The accepted type, used as the unset prompt and for the border color.isMissing: True when the stored reference no longer resolves.isSuppressed: True when a wire supplies the pin.
PerformDropForTesting(IReadOnlyList<Object> dragged)
Section titled “PerformDropForTesting(IReadOnlyList<Object> dragged)”public bool PerformDropForTesting(System.Collections.Generic.IReadOnlyList<UnityEngine.Object> dragged)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:366-377
Runs the drop path fordraggedexactly as a release over the combo does,
so the accept and refuse verdicts can be asserted without synthesizing drag events. Returns
whether the drop was accepted.
RaiseClickForTesting()
Section titled “RaiseClickForTesting()”public void RaiseClickForTesting()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:343
Raises the click path exactly as a mouse press does, so the suppressed no-op can be asserted without synthesizing pointer events.
SetReference(string referenceName, bool isMissing)
Section titled “SetReference(string referenceName, bool isMissing)”public void SetReference(string referenceName, bool isMissing)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:332-337
Updates the reference in place, moving the combo between states without rebuilding it. The suppressed state is fixed at construction because it is a property of the pin’s wiring, which the consumer re-derives on every graph build.
WouldAcceptDrop(IReadOnlyList<Object> dragged)
Section titled “WouldAcceptDrop(IReadOnlyList<Object> dragged)”public bool WouldAcceptDrop(System.Collections.Generic.IReadOnlyList<UnityEngine.Object> dragged)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:351-359
The verdict this combo would give a drag carryingdragged: true accepts,
false refuses. A suppressed combo always refuses, because the wire is the value; otherwise
the host filter decides, and its absence refuses (Principle X: no drop is accepted by
default).
InlineReferenceElement
Section titled “InlineReferenceElement”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.InlineReferenceElementSource declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineReferenceElement.cs:17-277
Inherits: VisualElement
UI Toolkit element for displaying an inline reference on a data pin - a single-use field/parameter/local read collapsed onto the pin. Renders as a heading-only pill (the reference name) whose border is colored by the reference’s data type. Parallel toInlineLiteralElement, which displays inline constants.
Members
Section titled “Members”Invalid
Section titled “Invalid”public bool Invalid { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineReferenceElement.cs:33
When true, the reference no longer resolves to a value in scope and is painted in the error color instead of its data-type color.
public string Text { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineReferenceElement.cs:22
The reference text to display (e.g. “_audioSource”).
TypeName
Section titled “TypeName”public string TypeName { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineReferenceElement.cs:27
The C# type name used for the data-type color lookup.
Committed
Section titled “Committed”public event System.Action<string> CommittedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineReferenceElement.cs:42
Raised when an edit is committed with a new, non-empty identifier (the variable name).
InlineReferenceElement(string text, string typeName, string tooltipText, bool invalid, bool editable)
Section titled “InlineReferenceElement(string text, string typeName, string tooltipText, bool invalid, bool editable)”public InlineReferenceElement(string text, string typeName, string tooltipText = null, bool invalid = false, bool editable = false)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineReferenceElement.cs:62-96
Builds the pill.textis the reference name shown and null becomes
empty;typeNameselects the border color from the data-type palette;
tooltipTextis the optional hover explanation;
invalidtrue paints it in the error color instead, for a reference
that no longer resolves; andeditabletrue lets a click open an edit
field that raisesCommitted, while false leaves the pill read-only.
LiteralBoxChrome
Section titled “LiteralBoxChrome”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.LiteralBoxChromeSource declaration: ../bitquirky-graph/Editor/GraphView/Views/LiteralBoxChrome.cs:27-90
The one definition of a literal box’s chrome, shared by the single-value InlineLiteralElementand the multi-component CompositeLiteralElement.
A composite value’s component boxes must be visually IDENTICAL to a scalar literal box: same border colour rule, same corner radius, same padding, same font, same focus emphasis, same coral invalid treatment. Two copies of that would drift, and the drift would show up as a row of boxes that no longer matched the scalar box beside it.
Almost all of the chrome is USS, so the sharing is by CLASS NAME: both elements add the same
inline-literal*classes and pick up the same rules from
GraphViewStyles.uss. The only chrome that cannot live in USS is the per-C#-type border
colour, because it depends on a runtime type name the library holds no opinion about, and that
one rule lives here so it is written once.
Members
Section titled “Members”BorderClass
Section titled “BorderClass”public const string BorderClass = "inline-literal__border"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/LiteralBoxChrome.cs:33
The bordered surface inside a literal box.
EditClass
Section titled “EditClass”public const string EditClass = "inline-literal__edit"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/LiteralBoxChrome.cs:39
The in-place edit field inside the border.
EditingModifierClass
Section titled “EditingModifierClass”public const string EditingModifierClass = "inline-literal--editing"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/LiteralBoxChrome.cs:42
Set while an editor is open: lightened surface, focus ring, and glow.
InvalidModifierClass
Section titled “InvalidModifierClass”public const string InvalidModifierClass = "inline-literal--invalid"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/LiteralBoxChrome.cs:45
Set while the box holds a value the host validator rejected: coral border, warm-red text.
RootClass
Section titled “RootClass”public const string RootClass = "inline-literal"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/LiteralBoxChrome.cs:30
The block class every literal box carries.
ToastClass
Section titled “ToastClass”public const string ToastClass = "inline-literal__toast"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/LiteralBoxChrome.cs:48
The anchored validation message hanging below the box.
ValueClass
Section titled “ValueClass”public const string ValueClass = "inline-literal__value"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/LiteralBoxChrome.cs:36
The resting value label inside the border.
ApplyTypeBorderColor(VisualElement border, string typeName)
Section titled “ApplyTypeBorderColor(VisualElement border, string typeName)”public static void ApplyTypeBorderColor(UnityEngine.UIElements.VisualElement border, string typeName)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/LiteralBoxChrome.cs:58-72
Paintsborder’s four edges with the pin colour for
typeName.
The documented C# exception to Principle VII’s “no inline colour” rule (contract C5.7): the colour is resolved from a runtime type name, which USS cannot express.
ClearTypeBorderColor(VisualElement border)
Section titled “ClearTypeBorderColor(VisualElement border)”public static void ClearTypeBorderColor(UnityEngine.UIElements.VisualElement border)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/LiteralBoxChrome.cs:78-89
Drops the inline border colour so the.inline-literal--invalidUSS rule cascades
through. An inline colour would otherwise win over USS.
LiteralCheckbox
Section titled “LiteralCheckbox”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.LiteralCheckboxSource declaration: ../bitquirky-graph/Editor/GraphView/Views/LiteralCheckbox.cs:25-108
Inherits: VisualElement
The checkbox a boolean value draws: a tick when true, nothing when false, sized to sit inside a literal box in place of a value label.
The tick is drawn rather than imported because it is two straight strokes, which is the shape class
this codebase draws in code, and because Unity’s own toggle checkmark is a themed texture that does
not resolve in the graph’s panel: it renders as an empty square wherever the graph is captured or
hosted, so a ticked box looked identical to an unticked one. Colour comes from USS through
resolvedStyle, so it follows whatever text tone surrounds it.
The surrounding box is the caller’s: this element draws the mark alone, so a literal pill’s border and a rail row’s field can each act as the outline. One control for both, because a bool that reads one way on a pin and another way in the rail is two controls to learn.
Members
Section titled “Members”public bool Value { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/LiteralCheckbox.cs:54
True when the box is ticked.
Toggled
Section titled “Toggled”public event System.Action<bool> ToggledSource declaration: ../bitquirky-graph/Editor/GraphView/Views/LiteralCheckbox.cs:51
Raised when the engineer ticks or unticks the box, never when a value arrives.
RootClass
Section titled “RootClass”public const string RootClass = "literal-checkbox"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/LiteralCheckbox.cs:28
The USS class every literal checkbox carries.
LiteralCheckbox(bool value, bool interactive)
Section titled “LiteralCheckbox(bool value, bool interactive)”public LiteralCheckbox(bool value, bool interactive)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/LiteralCheckbox.cs:36-48
Builds the box already showingvalue.
interactivetrue makes it focusable and clickable, so a click raises
Toggled; false leaves it a display-only mark that takes no pointer input,
which is the form to use on a read-only surface.
SetValueWithoutNotify(bool value)
Section titled “SetValueWithoutNotify(bool value)”public void SetValueWithoutNotify(bool value)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/LiteralCheckbox.cs:57-66
Moves the box without raising Toggled, for a value arriving from source.
MenuDropShadow
Section titled “MenuDropShadow”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.MenuDropShadowSource declaration: ../bitquirky-graph/Editor/GraphView/Views/MenuDropShadow.cs:46-165
Inherits: VisualElement
Feathered drop shadow for menu-style surfaces that float above the main canvas - overflow popups, class pickers, context menus, inspector flyouts, anywhere we want a surface to read as detached from the chrome it overlaps. Renders the same concentric rounded-rect Painter2D stack asCardDropShadow, but the alpha and extents are roughly doubled so the shadow reads at the larger working distance these surfaces hover at.
Responsibilities and non-responsibilities mirror CardDropShadow: paint N concentric fills via Painter2D, position the element with inline negative insets so it feathers outside the parent’s bounds, do not render any of the parent’s body / border / glyph chrome. The only behavioral difference is the recipe constants.
Tuning lives in the const block below for the same reason called out inCardDropShadow: USS custom-property resolution is unreliable on elements whose USS rule does not reference those variables for some other property.
Members
Section titled “Members”MenuDropShadow()
Section titled “MenuDropShadow()”public MenuDropShadow()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/MenuDropShadow.cs:70-90
Builds the shadow, already absolutely positioned with the negative insets that let it spill outside its parent surface, so a consumer needs no extra USS class to make it visible. It takes no pointer input.
NodeCommentIndicator
Section titled “NodeCommentIndicator”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.NodeCommentIndicatorSource declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeCommentIndicator.cs:41-133
Inherits: VisualElement
Small amber speech-bubble glyph pinned to the top-right corner of
any node card or GET pill whose comment text is non-empty. The
silhouette is the importedicon-comment.svgdesign export,
rendered as a tintedVectorImagebackground rather
than a hand-drawnPainter2Dpath (feature 064 / ), so
the canvas glyph and the rail-slot nib share one design source at
their two sizes (14 px canvas / 11 px rail).
The glyph stacks three layers so it stays legible on every node-family header color and reads as a peel-off note:
- a soft amber glow (hidden at rest, revealed on hover),
- a dark drop-shadow offset a hair below the body,
- the amber body itself.
All three are the SAME VectorImage tinted differently through USS
(--bq-node-comment-glyph / -hover / -glow),
so there is a single source of truth for the silhouette and the
color tokens. The hover state is mirrored from the parent NodeView
via the--hovermodifier class so cursor travel between the
node, the glyph, and the siblingNodeCommentPostIt
keeps both in their hover treatment.
Does NOT:
- Provide a fallback glyph when the asset is missing - a missing required asset fails fast (Constitution X / ).
- Own the post-it popup; that’s a sibling element.
- Animate position, scale, or rotation; those are USS transitions on the glyph’s own classes.
Members
Section titled “Members”NodeCommentIndicator(float sizePx)
Section titled “NodeCommentIndicator(float sizePx)”public NodeCommentIndicator(float sizePx = 14)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeCommentIndicator.cs:75-93
Builds the glyph atsizePxpixels square, which includes the small
ring of padding that widens the hover target beyond the visible bubble. It accepts
pointer input, so hover and activation fire only over the glyph rather than anywhere on
the card.
NodeCommentPostIt
Section titled “NodeCommentPostIt”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.NodeCommentPostItSource declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeCommentPostIt.cs:27-646
Inherits: VisualElement
Hover-reveal sticky-note popup that displays the parser-derived source comment for a graph node. Companion to NodeCommentIndicator.
Layering (document order, back → front):
- SharedMenuDropShadowprimitive - extends past the root via inline negative absolute insets.
- Opaque paper element - owns the vertical 3-stop gradient,
rim highlights, and corner-curl decoration. Fills the root.
Because UI Toolkit renders children AFTER the parent’s
generateVisualContent, the paper must be a child rather than painted in the root - otherwise the shadow’s inner concentric ring would lay a 50 % black overlay on the visible body. - Meta label (XML DOC / COMMENT tag).
- Body label (composed comment text).
Members
Section titled “Members”OnSizeChanged
Section titled “OnSizeChanged”public event System.Action<UnityEngine.Vector2> OnSizeChangedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeCommentPostIt.cs:77
Raised when the user finishes a resize drag on the post-it.
Carries the new(width, height)in canvas-space pixels
already clamped to the min-size floor. Consumers persist
these values via the host’s layout store.
NodeCommentPostIt()
Section titled “NodeCommentPostIt()”public NodeCommentPostIt()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeCommentPostIt.cs:84-143
Builds an empty post-it with its shadow, paper, scrolling body, and resize grip in place. It swallows pointer-down on the body so dragging the note never pans the canvas or starts a marquee; the caller sizes and positions it and fills in its sections.
SetContent(string body, string kindLabel)
Section titled “SetContent(string body, string kindLabel)”public void SetContent(string body, string kindLabel)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeCommentPostIt.cs:151-155
Populate the popup with a single composed comment section. Empty
body leaves the popup blank (consumer is expected to call this
with the non-empty text fromNodeDefinition.CommentText).
Used for member / operation / statement nodes (single source).
SetSections(string memberLabel, string memberBody, string readLocalLabel, string readLocalBody)
Section titled “SetSections(string memberLabel, string memberBody, string readLocalLabel, string readLocalBody)”public void SetSections(string memberLabel, string memberBody, string readLocalLabel, string readLocalBody)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeCommentPostIt.cs:165-185
Populate the popup with up to two labelled sections for a GET pill (feature 064 / ): the shared member comment first, then a visible dashed divider, then the read-local note - each with its own source label so the two are never conflated. A member-only or read-local-only pill renders just the one relevant section (no divider).
SetSize(float width, float height)
Section titled “SetSize(float width, float height)”public void SetSize(float width, float height)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeCommentPostIt.cs:330-348
Apply a previously-saved size from the host’s layout store.
Values<= 0mean “use the default” and clear any
explicit override so USS-controlled natural size takes over.
NodeView
Section titled “NodeView”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.NodeViewSource declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:82-3444
Inherits: VisualElement
The visual for one node: its card chrome, title, port rows, and the slots a host can decorate. The view reads the node definition it was built from and never writes back to it; position changes arrive throughUpdatePosition.
Members
Section titled “Members”ActiveGlow
Section titled “ActiveGlow”public UnityEngine.UIElements.VisualElement ActiveGlow { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:254
Glow ring element activated when the node is the active node.
AnchoredMessage
Section titled “AnchoredMessage”public string AnchoredMessage { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:130-133
The text currently hanging under this card, or empty when the node carries none.
BadgeSlot
Section titled “BadgeSlot”public UnityEngine.UIElements.VisualElement BadgeSlot { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:2855
Slot for the family badge chip floating centered on the card’s top edge. The badge is the node’s input-port anchor: parent edges visually plug into it.
BaseColor
Section titled “BaseColor”public UnityEngine.Color BaseColor { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:450
The base color for this node (used for gradient and contrast calculations).
BodyColor
Section titled “BodyColor”public UnityEngine.Color BodyColor { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:460
The body background color for this node (midpoint of gradient, for contrast calculations).
BodyContainer
Section titled “BodyContainer”public UnityEngine.UIElements.VisualElement BodyContainer { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:118
The card’s body area below the header.
BodyGradient
Section titled “BodyGradient”public BitQuirky.Graph.GraphView.Views.CardBodyGradient BodyGradient { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:302
Vertical body-shading overlay sitting inside the label slot (raised-card recipe). Painter2D-rendered linear gradient running top -> bottom across the dark body half of the card.
BottomStatusStripSlot
Section titled “BottomStatusStripSlot”public UnityEngine.UIElements.VisualElement BottomStatusStripSlot { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:251
Slot for the bottom status strip (last-result color).
CardContentSlot
Section titled “CardContentSlot”public UnityEngine.UIElements.VisualElement CardContentSlot { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:2873
Visible content surface a host draws node content on, beneath the card’s name and metadata. Additive and closed by default: a card whose host never calls SetCardContentis unchanged, both in what it draws and in its height.
ChevronExtension
Section titled “ChevronExtension”public BitQuirky.Graph.GraphView.Views.CardChevronExtension ChevronExtension { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:317
Pentagon-shaped decorator silhouette for Condition and Selector families. Painter2D-rendered family-color fill
- diagonal gradient + 1px chevron rim. Created on every
raised card but hidden by USS unless the
ed-node-card--silhouette-conditionclass is on the card.
CommentIndicator
Section titled “CommentIndicator”public BitQuirky.Graph.GraphView.Views.NodeCommentIndicator CommentIndicator { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:260
Amber speech-bubble glyph pinned to the node’s top-right corner when the adapter supplies a non-empty CommentText. Null when the node has no attached source comment.
CommentPostIt
Section titled “CommentPostIt”public BitQuirky.Graph.GraphView.Views.NodeCommentPostIt CommentPostIt { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:266
Hover-reveal sticky-note popup showing the comment body. Null when the node has no attached source comment. Defaults to right-of-node placement; the host can flip it via SetCommentPopupOnLeft.
ContainedActionRowSlot
Section titled “ContainedActionRowSlot”public UnityEngine.UIElements.VisualElement ContainedActionRowSlot { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:2866
Slot for the SM contained action row (darker band at the card bottom carrying the state’s action). Hidden by default.
ContentContainer
Section titled “ContentContainer”public UnityEngine.UIElements.VisualElement ContentContainer { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:188
Holds host-supplied content between the port columns; a custom renderer fills this.
DropShadow
Section titled “DropShadow”public BitQuirky.Graph.GraphView.Views.CardDropShadow DropShadow { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:293
Feathered drop-shadow sibling element (raised-card recipe).
Painter2D-rendered; positions itself based on the
--bq-node-card-shadow-*-extent USS tokens.
EyebrowChipLeadingContent
Section titled “EyebrowChipLeadingContent”public UnityEngine.UIElements.VisualElement EyebrowChipLeadingContent { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:195
Optional leading-content slot inside the floating eyebrow chip. Hosts may populate it with a compact glyph while the shared graph package continues to own chip geometry. Null when this node has no floating eyebrow chip.
FaceClip
Section titled “FaceClip”public UnityEngine.UIElements.VisualElement FaceClip { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:2859
Rounded clip container that owns the card face ramp and the bottom status strip so both inherit the card’s corner radius.
FaceRamp
Section titled “FaceRamp”public BitQuirky.Graph.GraphView.Views.VerticalRampView FaceRamp { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:2862
Vertical face gradient painter (card-face tokens).
GraphPosition
Section titled “GraphPosition”public UnityEngine.Vector2 GraphPosition { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:114
Current rendered graph-space position; never writes the supplied node.
HeaderColor
Section titled “HeaderColor”public UnityEngine.Color HeaderColor { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:455
The header background color for this node (darker version of base color).
HeaderContainer
Section titled “HeaderContainer”public UnityEngine.UIElements.VisualElement HeaderContainer { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:116
The card’s header band, holding the title and any header decorations.
IconWellGradient
Section titled “IconWellGradient”public BitQuirky.Graph.GraphView.Views.CardBodyGradient IconWellGradient { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:310
Diagonal decorator-shading overlay sitting inside
the icon well (raised-card recipe). Painter2D-rendered
linear gradient running top-left -> bottom-right across the
family-colored decorator half of the card. Hidden when the
card has the chevron silhouette - ChevronExtension paints
the decorator surface in that mode.
IconWellSlot
Section titled “IconWellSlot”public UnityEngine.UIElements.VisualElement IconWellSlot { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:239
Slot for the family-colored icon well that lives on the raised-card variant. Populated by EnableRaisedCardChrome; null for the legacy CodeFlow / Tree variants.
InputContainer
Section titled “InputContainer”public UnityEngine.UIElements.VisualElement InputContainer { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:184
Holds the input port views, in the order the definition lists them.
InsetHighlight
Section titled “InsetHighlight”public UnityEngine.UIElements.VisualElement InsetHighlight { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:296
Inset top highlight element (raised-card recipe).
LabelSlot
Section titled “LabelSlot”public UnityEngine.UIElements.VisualElement LabelSlot { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:242
Slot for the node-name + family caption.
LifecycleRing
Section titled “LifecycleRing”public UnityEngine.UIElements.VisualElement LifecycleRing { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:123
The leading lifecycle ring glyph, or null when this node is not a lifecycle entry.
MetadataSlot
Section titled “MetadataSlot”public UnityEngine.UIElements.VisualElement MetadataSlot { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:245
Slot for compact metadata (e.g. tick ordinal badge).
public BitQuirky.Graph.NodeDefinition Node { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:112
The definition this card was built from.
OutputContainer
Section titled “OutputContainer”public UnityEngine.UIElements.VisualElement OutputContainer { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:186
Holds the output port views, in the order the definition lists them.
public UnityEngine.UIElements.VisualElement Ring { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:2893
The portrait card’s 1px ring, painted above the shadow and the face.
SelectedGlow
Section titled “SelectedGlow”public UnityEngine.UIElements.VisualElement SelectedGlow { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:288
Glow ring element activated when the node is selected.
StartMarkSlot
Section titled “StartMarkSlot”public UnityEngine.UIElements.VisualElement StartMarkSlot { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:2890
Slot for the SM START designation mark (magenta pill floating above the badge). Hidden by default.
StatusPillSlot
Section titled “StatusPillSlot”public UnityEngine.UIElements.VisualElement StatusPillSlot { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:248
Slot for the result status pill.
TitleLabel
Section titled “TitleLabel”public UnityEngine.UIElements.Label TitleLabel { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:120
The label showing the node’s title.
OnCommentGlyphActivated
Section titled “OnCommentGlyphActivated”public event System.Action<BitQuirky.Graph.GraphView.Views.NodeView> OnCommentGlyphActivatedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:285
Fires when the user clicks the comment glyph on this node (feature 064 / ). The host resolves the activation route from the node’s identity - selecting the member and focusing the rail comment slot for a rail-authored member comment, or just selecting the node and showing the post-it for an operation / statement node or a read-local-only pill.
OnCommentPopupResized
Section titled “OnCommentPopupResized”public event System.Action<BitQuirky.Graph.GraphView.Views.NodeView, UnityEngine.Vector2> OnCommentPopupResizedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:275
Fires when the user finishes dragging the comment-popup
resize grip. Carries the source NodeView and the new
(width, height). The host subscribes and persists the
size into the layout file alongside node positions and edge
reroutes.
AnchoredMessageClass
Section titled “AnchoredMessageClass”public const string AnchoredMessageClass = "node-anchored-message"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:109
USS class on the message hanging under a node card. Hosts style it from their own sheet via this class; the library ships the geometry (absolute, under the card, out of the layout) and leaves the wording and the reason for it entirely to the caller.
LifecycleRingClass
Section titled “LifecycleRingClass”public const string LifecycleRingClass = "node-lifecycle-ring"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:89
USS class on the leading ring glyph an entry node carries whenIsLifecycleEntry is set. Distinct from the per-pin guard decoration so runtime-invocation marking and pin validation state never share a class; hosts style the ring from their own sheet via this class.
ValidationErrorNodeClass
Section titled “ValidationErrorNodeClass”public const string ValidationErrorNodeClass = "ed-node-card--validation-error"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:102
Class added to a card whose consumer flaggedHasValidationError,
opting it into the existing .ed-node-card--validation-error treatment.
VisualOnlyNodeClass
Section titled “VisualOnlyNodeClass”public const string VisualOnlyNodeClass = "node-visual-only"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:96
USS class added to the node card whenIsVisualOnly is set (a pasted / not-yet-persisted node). Hosts style it - typically a dashed provisional outline - from their own sheet via this class.
NodeView(NodeDefinition node, GraphPortPlacement portPlacement, GraphNodePresentation presentation, GraphTheme theme, Func<PortDefinition, GraphPortGlyphStyle> portGlyphStyleResolver)
Section titled “NodeView(NodeDefinition node, GraphPortPlacement portPlacement, GraphNodePresentation presentation, GraphTheme theme, Func<PortDefinition, GraphPortGlyphStyle> portGlyphStyleResolver)”public NodeView(BitQuirky.Graph.NodeDefinition node, BitQuirky.Graph.GraphView.GraphPortPlacement portPlacement = LeftRight, BitQuirky.Graph.GraphView.GraphNodePresentation presentation = CodeFlow, BitQuirky.Graph.GraphView.GraphTheme theme = null, System.Func<BitQuirky.Graph.PortDefinition, BitQuirky.Graph.GraphView.GraphPortGlyphStyle> portGlyphStyleResolver = null)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:478-1138
Creates a node view with optional per-port glyph-style resolution for glyphs rendered directly by the node header.
Parameters
node: Node definition to render.portPlacement: Port placement used by the graph.presentation: Node presentation family.theme: Optional graph theme; null uses the established dark theme.portGlyphStyleResolver: Optional resolver for node-owned port glyphs. Null preserves filled glyphs.
ApplyFamilyModifiers(string familyClass, string silhouetteClass)
Section titled “ApplyFamilyModifiers(string familyClass, string silhouetteClass)”public void ApplyFamilyModifiers(string familyClass, string silhouetteClass)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:3241-3253
Apply a family / silhouette modifier class to the card.
Caller passes the class names declared in NodeFamilies.uss
(e.g.ed-node-card--family-actionand
ed-node-card--silhouette-rect). Previous family /
silhouette classes are removed so the call is idempotent
across rebuilds (..).
Remarks
Round Trip: pass any modifier class declared in the shared NodeFamilies.uss. The graph library does not validate the name; the design-system stylesheet picks up whatever class the consumer attaches.
ApplyInlineLiteralAutoSize(float computedWidth, float minWidth, float maxWidth)
Section titled “ApplyInlineLiteralAutoSize(float computedWidth, float minWidth, float maxWidth)”public void ApplyInlineLiteralAutoSize(float computedWidth, float minWidth = 220, float maxWidth = 200)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:2585-2606
Applies auto-sizing based on inline literal content. Uses the computed dimensions from the layout engine to expand node width as needed.
Parameters
computedWidth: Width computed by MSAGLGraphLayoutService.ComputeInlineContentWidth.minWidth: Minimum node width (default from LayoutSettings).maxWidth: Maximum inline literal width for truncation.
ClearAnchoredMessage()
Section titled “ClearAnchoredMessage()”public void ClearAnchoredMessage()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:172-181
Removes the message under this card. Safe on a node that never had one.
ClearIconWellContent()
Section titled “ClearIconWellContent()”public void ClearIconWellContent()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:3276-3288
Remove every child of the icon well. Use this in place of
IconWellSlot.Clearso future reserved chrome can stay
centralized here.
ContainsPoint(Vector2 localPoint)
Section titled “ContainsPoint(Vector2 localPoint)”public override bool ContainsPoint(UnityEngine.Vector2 localPoint)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:2538-2541
Hit-tests the card’s own rectangle, so a point over an overhanging decoration such as a floating chip or hanging message does not count as being over the node.
EnablePortraitBadgeChrome()
Section titled “EnablePortraitBadgeChrome()”public void EnablePortraitBadgeChrome()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:2901-3096
Adopt the portrait-badge card chrome: gradient face, family badge chip floating on the top edge, neutral selection ring, blue running ring + halo, bottom status strip. Additive sibling of EnableRaisedCardChrome; consumers pick one chrome.
EnableRaisedCardChrome()
Section titled “EnableRaisedCardChrome()”public void EnableRaisedCardChrome()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:2709-2840
Convert this node into the raised-card variant that the new behavior-tree / design-system editor consumes. Adds (or reveals) the icon well, label, metadata, status pill, and bottom status strip slots; installs the inset highlight, drop shadow, and optional glow ring siblings.
Safe to call on an existing CodeFlow or Tree node - the method only manipulates the new slot elements and the depth recipe siblings. Visual presence of the slots after this call is opt-in: consumers populate the slots themselves so nodes without a metadata payload don’t render an empty box.
Remarks
Round Trip: the slots are generic. Round Trip can call this method to inherit the depth recipe and fill the slots with project-specific content (label, glyph, status info).
SetActiveGlow(bool active)
Section titled “SetActiveGlow(bool active)”public void SetActiveGlow(bool active)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:3199-3214
Toggle the active glow ring. Caller asserts at most one node carries the active flag per tick .
SetBadgeGlyphAssetPath(string assetPath)
Section titled “SetBadgeGlyphAssetPath(string assetPath)”public void SetBadgeGlyphAssetPath(string assetPath)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:3135-3149
Replace the badge chip glyph with a package icon asset.
SetCardContent(VisualElement content)
Section titled “SetCardContent(VisualElement content)”public void SetCardContent(UnityEngine.UIElements.VisualElement content)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:3107-3132
Draw one host-owned element on the card’s content surface, or clear it with null.
A node renderer’s content is otherwise written into a container some layouts hide, so it is present in the hierarchy and never drawn. Content supplied here is drawn, and the card grows to hold it rather than clipping it: the height the card declared without content becomes its floor, and clearing restores that exact height. A card this is never called on keeps everything it had.
SetCommentPopupOnLeft(bool flipLeft)
Section titled “SetCommentPopupOnLeft(bool flipLeft)”public void SetCommentPopupOnLeft(bool flipLeft)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:1418-1427
Toggle the comment popup to the left of the node for nodes close to the visible canvas right edge. Caller decides the distance threshold at layout time because only the host knows the canvas extent. Safe to call when no comment is attached.
SetDecoratorVetoed(bool vetoed)
Section titled “SetDecoratorVetoed(bool vetoed)”public void SetDecoratorVetoed(bool vetoed)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:3296-3306
Toggle the decorator-vetoed dim treatment on this card and (via downstream class propagation) its child branch . The class is idempotent - repeated calls with the same value are no-ops.
SetFamilyGlyphAssetPath(string assetPath)
Section titled “SetFamilyGlyphAssetPath(string assetPath)”public void SetFamilyGlyphAssetPath(string assetPath)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:3258-3269
Replace the icon-well content with a package icon asset.
SetFloatingEyebrowChipVisible(bool isVisible)
Section titled “SetFloatingEyebrowChipVisible(bool isVisible)”public void SetFloatingEyebrowChipVisible(bool isVisible)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:203-231
Shows or hides the floating eyebrow chip and keeps a Tree node’s incoming connection anchored to the complete visible stack. A hidden chip returns the connection to the card top; a visible chip keeps the connection above the chip.
Parameters
isVisible: Whether the chip participates in the visible node stack.
SetRaisedCardText(string nodeName, string familyCaption)
Section titled “SetRaisedCardText(string nodeName, string familyCaption)”public void SetRaisedCardText(string nodeName, string familyCaption)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:3163-3193
Sets the two lines of a raised card: the node’s own name and the caption naming the family it belongs to, creating the labels on first use. Null text clears a line. Does nothing on a card without the raised layout.
SetSelected(bool selected)
Section titled “SetSelected(bool selected)”public void SetSelected(bool selected)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:2363-2384
Applies or removes the selected treatment. Deselecting also releases a comment popup that was pinned open by a click, so hover alone decides its visibility again.
SetSelectedGlow(bool selected)
Section titled “SetSelectedGlow(bool selected)”public void SetSelectedGlow(bool selected)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:3221-3225
Toggle the cool-blue selected outline ring. Distinct in hue from the active glow so the two states are unambiguous when they coincide .
SetStartMarkVisible(bool visible)
Section titled “SetStartMarkVisible(bool visible)”public void SetStartMarkVisible(bool visible)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:3152-3156
Toggle the SM START designation mark above the badge.
SetWarningIcon(bool show, string tooltipText, bool isError, Action onClick)
Section titled “SetWarningIcon(bool show, string tooltipText, bool isError, Action onClick)”public void SetWarningIcon(bool show, string tooltipText = null, bool isError = false, System.Action onClick = null)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:3316-3398
Show or hide the warning icon overlay on the card . The icon is anchored to the card’s top-right corner and (optionally) carries a click handler the consumer supplies - e.g. opening the validation chip detail popover. Repeated calls update tooltip + click handler without re-creating the element.
ShowAnchoredMessage(string message)
Section titled “ShowAnchoredMessage(string message)”public void ShowAnchoredMessage(string message)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:145-169
Hangsmessageunder this card, replacing any message already there. Blank or
null text clears instead of drawing an empty line.
The element is absolutely positioned against the card’s bottom edge, so marking a node changes nothing about its size, its layout, or where its wires land, and it ignores picking so it can never swallow a click meant for the graph underneath. The library holds no opinion about what deserves a message: it renders the caller’s own words.
SuppressCommentPopup()
Section titled “SuppressCommentPopup()”public void SuppressCommentPopup()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:1544-1551
Force this node’s comment popup closed and drop its hover state (feature round-trip 067). The host calls this when a wire drag begins so a sticky-note that was open at drag start does not hang over the canvas while wiring; the drag’s mouse capture then blocks a new hover from re-opening it. Keyboard focus state is left untouched (an intentional, non-hover open path).
UpdatePosition(Vector2 position)
Section titled “UpdatePosition(Vector2 position)”public void UpdatePosition(UnityEngine.Vector2 position)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:2480-2484
Moves the card to a graph-space position. Layout only: the node definition is left unchanged, so a caller that wants the move persisted writes it back itself.
UpdateSize(float newWidth, float newHeight)
Section titled “UpdateSize(float newWidth, float newHeight)”public void UpdateSize(float newWidth, float newHeight)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:2551-2576
Updates the node size when inline content changes. Called after inline literal values are set to resize the node appropriately.
Parameters
newWidth: The new width to apply (computed by layout service).newHeight: The new height to apply (computed by layout service).
UpdateTypeColor(string newTypeName)
Section titled “UpdateTypeColor(string newTypeName)”public void UpdateTypeColor(string newTypeName)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/NodeView.cs:2491-2532
Updates the node color when the data type changes (e.g., MakeArray type resolution). Called when ElementTypeResolved event is raised from the Core model.
Parameters
newTypeName: The new element type name (e.g., “int”, “string”).
ObjectReferenceComboState
Section titled “ObjectReferenceComboState”Category: Low-level runtime
enum BitQuirky.Graph.GraphView.Views.ObjectReferenceComboStateSource declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:17-30
Underlying type: int
The four resting states of an object-reference combo, in the order the design board draws them.
Members
Section titled “Members”Assigned
Section titled “Assigned”Assigned = 1Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:23
A reference that resolves: asset glyph plus name, sized to content.
Missing
Section titled “Missing”Missing = 2Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:26
A reference that no longer resolves: warning treatment, name kept verbatim.
Suppressed
Section titled “Suppressed”Suppressed = 3Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:29
A wire supplies the pin: faded, reads as wired, and the click is a no-op.
Unset = 0Source declaration: ../bitquirky-graph/Editor/GraphView/Views/InlineObjectReferenceElement.cs:20
No reference yet: the prompt and chevron that open the picker.
PlayTriangle
Section titled “PlayTriangle”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.PlayTriangleSource declaration: ../bitquirky-graph/Editor/GraphView/Views/PlayTriangle.cs:19-149
Inherits: VisualElement
Rounded execution-port triangle supporting filled and hollow glyph treatments.
Responsibilities:
- Paint the shared execution-port geometry in its configured glyph style.
- Expose fill, stroke, and stroke-width values for host theming.
Does NOT:
- Decide which ports are hollow or assign domain meaning to either treatment.
- Handle connection gestures or retain graph model state.
Members
Section titled “Members”FillColor
Section titled “FillColor”public UnityEngine.Color FillColor { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PlayTriangle.cs:32-43
Fill color used by a filled triangle.
GlyphStyle
Section titled “GlyphStyle”public BitQuirky.Graph.GraphView.GraphPortGlyphStyle GlyphStyle { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PlayTriangle.cs:29
Configured fill treatment for this triangle.
StrokeColor
Section titled “StrokeColor”public UnityEngine.Color StrokeColor { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PlayTriangle.cs:46-57
Outline color used by a hollow triangle.
StrokeWidth
Section titled “StrokeWidth”public float StrokeWidth { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PlayTriangle.cs:60-76
Outline width used by a hollow triangle.
DefaultStrokeWidth
Section titled “DefaultStrokeWidth”public const float DefaultStrokeWidth = 1.5Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PlayTriangle.cs:26
Default outline width for a hollow execution glyph.
PlayTriangle(GraphPortGlyphStyle glyphStyle)
Section titled “PlayTriangle(GraphPortGlyphStyle glyphStyle)”public PlayTriangle(BitQuirky.Graph.GraphView.GraphPortGlyphStyle glyphStyle = Filled)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PlayTriangle.cs:79-95
Creates an execution glyph with the requested fill treatment.
PortLinkTarget
Section titled “PortLinkTarget”Category: Low-level runtime
readonly struct BitQuirky.Graph.GraphView.Views.PortView.PortLinkTargetSource declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1208-1232
One wire terminating at this pin, described for the break menu: a displayLabelplus the counterpart endpoint identity the host needs to locate the edge. Immutable value type.
Members
Section titled “Members”CounterpartNodeId
Section titled “CounterpartNodeId”public System.Guid CounterpartNodeId { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1228
The node id of the wire’s other end.
CounterpartPortId
Section titled “CounterpartPortId”public string CounterpartPortId { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1231
The port id of the wire’s other end.
public string Label { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1225
Human label for the “Break link to
PortLinkTarget(string label, Guid counterpartNodeId, string counterpartPortId)
Section titled “PortLinkTarget(string label, Guid counterpartNodeId, string counterpartPortId)”public PortLinkTarget(string label, System.Guid counterpartNodeId, string counterpartPortId)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1217-1222
Describes one wire at this pin for the break menu.
labelis the wording shown to the reader and null becomes empty;
counterpartNodeId and counterpartPortId
identify the wire’s other end, which is what the host needs to find the edge, since
the pin knows only its own side.
PortView
Section titled “PortView”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.PortViewSource declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:25-1995
Inherits: VisualElement
UI Toolkit row and glyph for one graph port.
Responsibilities:
- Render an input or output port’s glyph, label, badges, and interaction states.
- Apply the explicitly supplied filled or hollow glyph treatment.
- Surface port-scoped authoring gestures to the graph host.
Does NOT:
- Choose product-specific glyph meaning or mutate the graph model.
- Own connection validation or persistence.
Members
Section titled “Members”CompositeClearValidator
Section titled “CompositeClearValidator”public System.Func<BitQuirky.Graph.PortDefinition, BitQuirky.Graph.GraphView.LiteralValidationResult> CompositeClearValidator { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:681-694
Feature round-trip 071: asked whether this port’s composite row may commit as a CLEAR, which
is what every component being blank means. Bound by the host from
GraphViewOptions.CompositeClearValidator. Setting it propagates to a row that already
exists. Null permits every clear, because whether a source slot can legally become empty is a
question only the host can answer.
CompositeComponentValidator
Section titled “CompositeComponentValidator”public System.Func<BitQuirky.Graph.PortDefinition, int, string, BitQuirky.Graph.GraphView.LiteralValidationResult> CompositeComponentValidator { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:650-663
Feature round-trip 071: the per-COMPONENT validator for a composite literal row, bound by the
host fromGraphViewOptions.CompositeComponentValidator. The index identifies which
component, so the host applies that component’s own declared type. Setting it propagates to a
row that already exists. Null leaves the row unvalidated, which is the library’s standing
position on C#: it holds no opinion (Principle X).
CompositeLiteral
Section titled “CompositeLiteral”public BitQuirky.Graph.GraphView.Views.CompositeLiteralElement CompositeLiteral { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:46
The composite component row attached to this port, or null when the port carries no composite value (feature round-trip 071).
ExternalBadgeContainer
Section titled “ExternalBadgeContainer”public UnityEngine.UIElements.VisualElement ExternalBadgeContainer { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1736
The flex-row container holding every external badge attached
to this pin (default-value decorator, type badge, format-
specifier, null-forgiving, etc.). Lives in the graph content
layer so the badges render OUTSIDE the card chrome and can be
stacked above the edge layer when the host draws edges over
cards. Null until the firstAttachExternalBadge
call.
GlyphStyle
Section titled “GlyphStyle”public BitQuirky.Graph.GraphView.GraphPortGlyphStyle GlyphStyle { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:58
Fill treatment selected for this port’s glyph.
GuardRing
Section titled “GuardRing”public BitQuirky.Graph.GraphView.Views.GuardRingElement GuardRing { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:566
The dashed guard ring overlaying this pin’s circle, or null when the pin is unguarded. Geometry-neutral overlay.
GuardShield
Section titled “GuardShield”public BitQuirky.Graph.GraphView.Views.GuardShieldElement GuardShield { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:573
The guard gutter shield for this pin, or null when the pin is unguarded. The shield is the click target that opens the per-pin guard popover; subscribe viaGuardShieldClicked.
InlineLiteral
Section titled “InlineLiteral”public BitQuirky.Graph.GraphView.Views.InlineLiteralElement InlineLiteral { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:40
The inline value editor on this pin, or null when the port takes no typed value.
InlineObjectReference
Section titled “InlineObjectReference”public BitQuirky.Graph.GraphView.Views.InlineObjectReferenceElement InlineObjectReference { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:55
The object-reference COMBO drawn on this pin (Round Trip feature 072), or null when the consumer did not mark the port as accepting one. Not a pill: see InlineObjectReferenceElement.
InlineReference
Section titled “InlineReference”public BitQuirky.Graph.GraphView.Views.InlineReferenceElement InlineReference { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:48
The inline reference field on this pin, or null when the port carries no reference.
IsAddPinButton
Section titled “IsAddPinButton”public bool IsAddPinButton { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:34
True when this row is the affordance that adds another operand, not a real port.
IsExecution
Section titled “IsExecution”public bool IsExecution { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:32
True when the port carries flow rather than a value.
IsInput
Section titled “IsInput”public bool IsInput { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:30
True when the port sits on the node’s input side.
LinkTargets
Section titled “LinkTargets”public System.Collections.Generic.IReadOnlyList<BitQuirky.Graph.GraphView.Views.PortView.PortLinkTarget> LinkTargets { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1245
The wires currently terminating at this pin, set by the host through SetLinkTargets. Null or empty means the pin is unconnected and offers no break menu.
LiteralEntryInvited
Section titled “LiteralEntryInvited”public bool LiteralEntryInvited { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:591
True when this port may draw an empty entry box at rest, because the host’s
GraphViewOptions.PortClickPredicateaccepts it and a click can therefore open the editor.
LiteralValidator
Section titled “LiteralValidator”public System.Func<string, BitQuirky.Graph.GraphView.LiteralValidationResult> LiteralValidator { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:601-612
Feature round-trip 070: the per-port literal validator, bound by the host from
GraphViewOptions.LiteralValidator. Setting it propagates to an inline literal element that
already exists, so it takes effect whether the element was built for a set pin at construction or is
raised lazily on an unset pin. Null leaves the editor unvalidated (Principle X: one validator).
ObjectReferenceClearIcon
Section titled “ObjectReferenceClearIcon”public UnityEngine.UIElements.VectorImage ObjectReferenceClearIcon { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:744-755
Host-supplied icon for the combo’s trailing clear action.
ObjectReferenceDropFilter
Section titled “ObjectReferenceDropFilter”public System.Func<System.Collections.Generic.IReadOnlyList<UnityEngine.Object>, bool> ObjectReferenceDropFilter { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:761-772
Host-supplied answer to “would this pin accept these dragged objects?”, bound from
GraphViewOptions.ObjectReferenceDropFilter. Null refuses every drop.
ObjectReferenceLocateIcon
Section titled “ObjectReferenceLocateIcon”public UnityEngine.UIElements.VectorImage ObjectReferenceLocateIcon { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:730-741
Host-supplied icon for the combo’s trailing locate action, bound from
GraphViewOptions.ObjectReferenceLocateIcon. Null hides the action rather than drawing
a fallback glyph.
public BitQuirky.Graph.PortDefinition Port { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:28
The definition this row was built from.
PortLabel
Section titled “PortLabel”public UnityEngine.UIElements.Label PortLabel { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:38
The label beside the pin, or null when the port is drawn unlabeled.
PortVisual
Section titled “PortVisual”public UnityEngine.UIElements.VisualElement PortVisual { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:36
The pin glyph itself, which is what an edge attaches to.
SplitToggle
Section titled “SplitToggle”public UnityEngine.UIElements.Label SplitToggle { get; private set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:828
Renders the ▶/▼ expand/collapse glyph used to indicate splittable struct pins and the current expansion state. Suppressed when the port is not splittable. Feature 038 / US1 + US3.
WiredLiteralNoEntryIcon
Section titled “WiredLiteralNoEntryIcon”public UnityEngine.UIElements.VectorImage WiredLiteralNoEntryIcon { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:621
Feature round-trip 070 (FR-015a): the host-supplied no-entry glyph shown on hover of a wired,
literal-eligible input pin, bound fromGraphViewOptions.WiredLiteralNoEntryIcon. The mark
only ever appears on a pin the host flaggedIsWiredand
IsLiteralEligible; on every other pin, and when null, nothing is
drawn. The library composes no meaning: it renders whatever glyph the host hands it.
BreakAllLinksRequested
Section titled “BreakAllLinksRequested”public event System.Action<BitQuirky.Graph.GraphView.Views.PortView> BreakAllLinksRequestedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1251
Raised when the user invokes “Break Node Link(s)” on this pin, asking the host to remove every wire at the pin under one undo step.
BreakLinkToRequested
Section titled “BreakLinkToRequested”public event System.Action<BitQuirky.Graph.GraphView.Views.PortView, BitQuirky.Graph.GraphView.Views.PortView.PortLinkTarget> BreakLinkToRequestedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1257
Raised when the user invokes “Break link to
Clicked
Section titled “Clicked”public event System.Action<BitQuirky.Graph.GraphView.Views.PortView> ClickedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:793
Raised when this pin was pressed and released without the pointer travelling far enough
to become a connection drag, and only for a port the host marked click-eligible through
GraphViewOptions.PortClickPredicate. No connection is created for such a press.
The library assigns no meaning to the click; the host decides what one is for.
CompositeLiteralCommitted
Section titled “CompositeLiteralCommitted”public event System.Action<BitQuirky.Graph.GraphView.Views.PortView, System.Collections.Generic.IReadOnlyList<string>> CompositeLiteralCommittedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:670
Raised once when this pin’s composite literal row commits, carrying every component’s text in render order. One event for the whole row, never one per component: the host composes these into a single literal, stages a single pending edit, and records a single undo entry.
GuardShieldClicked
Section titled “GuardShieldClicked”public event System.Action GuardShieldClickedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:579
Raised when this pin’s guard shield is clicked. Hosts subscribe to open the per-pin guard popover.
InlineLiteralCommitted
Section titled “InlineLiteralCommitted”public event System.Action<BitQuirky.Graph.GraphView.Views.PortView, string> InlineLiteralCommittedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:639
Raised when this pin’s inline literal is edited and committed with a new, valid value. Hosts subscribe to write the value back into the model (and onward to source).
InlineReferenceCommitted
Section titled “InlineReferenceCommitted”public event System.Action<BitQuirky.Graph.GraphView.Views.PortView, string> InlineReferenceCommittedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:700
Raised when this pin’s inline reference is edited and committed with a new identifier. Hosts subscribe to write the reference back into the model (and onward to source).
ObjectReferenceClearRequested
Section titled “ObjectReferenceClearRequested”public event System.Action<BitQuirky.Graph.GraphView.Views.PortView> ObjectReferenceClearRequestedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:717
Feature 072 : raised by the combo’s trailing clear action.
ObjectReferenceClicked
Section titled “ObjectReferenceClicked”public event System.Action<BitQuirky.Graph.GraphView.Views.PortView> ObjectReferenceClickedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:707
Round Trip feature 072 : raised when this pin’s object-reference combo is clicked and the click means something. A suppressed (wired) combo never raises it, so the consumer needs no rule of its own for the no-op.
ObjectReferenceDropped
Section titled “ObjectReferenceDropped”public event System.Action<BitQuirky.Graph.GraphView.Views.PortView, System.Collections.Generic.IReadOnlyList<UnityEngine.Object>> ObjectReferenceDroppedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:723
Feature 072 : raised when assets dropped on this pin’s combo passed the host’s accept filter. The consumer performs the assignment.
ObjectReferenceLocateRequested
Section titled “ObjectReferenceLocateRequested”public event System.Action<BitQuirky.Graph.GraphView.Views.PortView> ObjectReferenceLocateRequestedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:714
Round Trip feature 072 : raised by the combo’s trailing locate action, and by a modifier-click on the pin LABEL, which goes straight to locate instead of opening the picker. The consumer reveals the asset in its project browser.
RecombineRequested
Section titled “RecombineRequested”public event System.Action<BitQuirky.Graph.GraphView.Views.PortView> RecombineRequestedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1178
Feature 038 - structured-pin split UX. Raised when the user invokes “Recombine Struct Pin” via right-click on a peer port.
ShowInstanceAsPillRequested
Section titled “ShowInstanceAsPillRequested”public event System.Action<BitQuirky.Graph.GraphView.Views.PortView> ShowInstanceAsPillRequestedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1192
Feature 060, instance-display toggle. Raised when the user invokes “Show as Pill” on an eligible instance-consumer wire, asking the host to collapse this one connection back to an inline pill.
ShowInstanceAsWireRequested
Section titled “ShowInstanceAsWireRequested”public event System.Action<BitQuirky.Graph.GraphView.Views.PortView> ShowInstanceAsWireRequestedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1185
Feature 060, instance-display toggle. Raised when the user invokes “Show as Wire” on an eligible instance-consumer pill, asking the host to reveal the shared instance source as a wire for this one connection.
SplitRequested
Section titled “SplitRequested”public event System.Action<BitQuirky.Graph.GraphView.Views.PortView> SplitRequestedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1172
Feature 038 - structured-pin split UX. Raised when the user
invokes “Split Struct Pin” via right-click on a splittable port.
The host (GraphViewHost) flips the underlying struct
pin’s expand state through the shared engine DLL.
BreakNodeLinksLabel
Section titled “BreakNodeLinksLabel”public const string BreakNodeLinksLabel = "Break Node Link(s)"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1235
Centralized menu label: remove every wire at this pin.
DormantPinOpacity
Section titled “DormantPinOpacity”public const float DormantPinOpacity = 0.4Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:891
Row opacity for dormant (discard) pins.
DragCompatibleClassName
Section titled “DragCompatibleClassName”public const string DragCompatibleClassName = "port-drag-compatible"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:877
USS class marking a port as a compatible drop target during a connection drag.
DragCompatibleOutlineWidth
Section titled “DragCompatibleOutlineWidth”public const float DragCompatibleOutlineWidth = 2Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:904
Ring width for the compatible-target highlight drawn around the pin visual in the port’s resolved type color.
DragIncompatibleClassName
Section titled “DragIncompatibleClassName”public const string DragIncompatibleClassName = "port-drag-incompatible"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:880
USS class marking a port as an incompatible drop target during a connection drag.
DragIncompatibleOpacity
Section titled “DragIncompatibleOpacity”public const float DragIncompatibleOpacity = 0.4Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:898
Row opacity applied to incompatible drop targets during a connection drag. Sits with the dormant-pin values above so all subdued-pin opacities tune together.
HollowGlyphStrokeWidth
Section titled “HollowGlyphStrokeWidth”public const float HollowGlyphStrokeWidth = 2Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:907
Outline width applied to a hollow data or delegate glyph.
MaxPinLabelChars
Section titled “MaxPinLabelChars”public const int MaxPinLabelChars = 12Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:850
Single source of truth for the maximum visible character count of any pin label across the graph. Labels longer than this are shortened to “…” so a single long identifier cannot widen a port row past the card’s allocated column width (which made the input column overlap the output column on multi-declarator cards). The full text lives in the pin’s tooltip - see TruncateLabelForPin.
Tuned to the card’s available body width: now that the default-value badge floats OUTSIDE the chrome instead of eating row space, both pin columns can afford longer truncated labels without the input column colliding with the output column. Must stay in sync with the same constant in RoundTrip.Engine’s MSAGLGraphLayoutService so the engine’s width estimate matches what the renderer actually paints.
PassThroughPinOpacity
Section titled “PassThroughPinOpacity”public const float PassThroughPinOpacity = 0.55Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:886
Row opacity for pass-through (unwritten struct sibling) pins. Matches the desktop affordance.
ShowAsPillLabel
Section titled “ShowAsPillLabel”public const string ShowAsPillLabel = "Show as Pill"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1278
Centralized menu label: collapse a wired instance connection back to an inline pill.
ShowAsWireLabel
Section titled “ShowAsWireLabel”public const string ShowAsWireLabel = "Show as Wire"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1275
Centralized menu label: collapse a wired instance connection’s pill into a wire.
SplitChildIndentPx
Section titled “SplitChildIndentPx”public const float SplitChildIndentPx = 12Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:831
How far a child row of a split port is indented from its parent, in pixels.
PortView(PortDefinition port, bool isInput, Color? labelColor, bool showLabel, bool literalEditable, GraphPortGlyphStyle glyphStyle, bool literalEntryInvited)
Section titled “PortView(PortDefinition port, bool isInput, Color? labelColor, bool showLabel, bool literalEditable, GraphPortGlyphStyle glyphStyle, bool literalEntryInvited)”public PortView(BitQuirky.Graph.PortDefinition port, bool isInput, UnityEngine.Color? labelColor = null, bool showLabel = true, bool literalEditable = false, BitQuirky.Graph.GraphView.GraphPortGlyphStyle glyphStyle = Filled, bool literalEntryInvited = false)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:70-523
Creates the interactive row for a graph port using the requested glyph treatment.
Existing callers that omitglyphStyleretain the filled glyph.
Parameters
literalEntryInvited: True when this port may draw an EMPTY entry box at rest. The host passes the answer from its ownGraphViewOptions.PortClickPredicate, because only a port that predicate accepts can have its editor opened by a click, and a box that cannot be opened is a dead affordance. Defaults to false, so a host that does not opt into literal entry renders as it always has.
AlignHeaderPortVisualToTextBaseline(float visualTopOffset)
Section titled “AlignHeaderPortVisualToTextBaseline(float visualTopOffset)”public void AlignHeaderPortVisualToTextBaseline(float visualTopOffset)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1155-1164
Nudges the pin glyph down byvisualTopOffsetpixels so it sits on
the baseline of the header text beside it, and removes the row’s bottom margin.
BreakLinkToLabel(string counterpart)
Section titled “BreakLinkToLabel(string counterpart)”public static string BreakLinkToLabel(string counterpart)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1238
Builds the “Break link to
ClearDragState()
Section titled “ClearDragState()”public void ClearDragState()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1030-1035
Clears any connection-drag state, restoring the row opacity and pin visual outline that were in effect before the drag started.
ExternalBadgeLeft(bool isInput, float anchorX, float width)
Section titled “ExternalBadgeLeft(bool isInput, float anchorX, float width)”public static float ExternalBadgeLeft(bool isInput, float anchorX, float width)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1759-1760
The x an external-badge container’s LEFT edge takes for a given measured width, so that an
INPUT container keeps its RIGHT edge pinned toanchorXhowever wide it
becomes, and an OUTPUT container keeps its LEFT edge there.
Deliberately arithmetic rather than a percentage translate. translate: -100% expresses the
same intent, but UI Toolkit resolves the percentage against the width the element had when it
was first laid out and never re-resolves it: a container that grew afterwards, which is exactly
what happens when a literal editor opens on the pin, kept its original left edge and ran
rightward INTO the node card instead of leftward into the gutter.
GetContextMenuActionLabels()
Section titled “GetContextMenuActionLabels()”public System.Collections.Generic.IReadOnlyList<string> GetContextMenuActionLabels()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1426-1435
The ordered labels this pin’s right-click menu would show right now. Observation surface for hosts and tests: verifies the break-menu rules (“Break Node Link(s)” appears only when wired; per-counterpart entries only when more than one wire) without simulating a UI event.
GetWorldPositionForEdge()
Section titled “GetWorldPositionForEdge()”public UnityEngine.Vector2 GetWorldPositionForEdge()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1441-1445
The point an edge attaches to, in panel space: the center of the pin glyph, or the origin when the row has no glyph.
IsLocateModifier(IMouseEvent evt)
Section titled “IsLocateModifier(IMouseEvent evt)”public static bool IsLocateModifier(UnityEngine.UIElements.IMouseEvent evt)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:783
The modifier that turns a click on an object pin’s LABEL into a locate instead of a picker open . Alt is Unity’s own “reveal / inspect rather than act” modifier, and it is free on a pin label, where a plain click already means something else.
OpenCompositeEditor(int componentIndex)
Section titled “OpenCompositeEditor(int componentIndex)”public BitQuirky.Graph.GraphView.Views.CompositeLiteralElement OpenCompositeEditor(int componentIndex = 0)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1625-1634
Raises the editor on one component of this pin’s composite row, which is how a row opens from a port click rather than a click on a box (feature round-trip 071).
Returns the row, or null when this port carries none or is not editable. Defaults to the leftmost component, which is where an engineer starts typing a value.
OpenLiteralEditor()
Section titled “OpenLiteralEditor()”public BitQuirky.Graph.GraphView.Views.InlineLiteralElement OpenLiteralEditor()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1591-1615
Raises the in-place literal editor on this pin, creating the pill element first when the pin carries no value yet (feature round-trip 070, ).
This is how an editor opens on an UNSET pin: keeps the pill undrawn there, so there is nothing to click and the host opens the editor from the port click instead. An editor dismissed without committing drops the element again, so an unset pin never keeps an invisible badge attached.
Returns the editor element, or null when this port is not literal-editable.
RefreshExternalBadgeLayer()
Section titled “RefreshExternalBadgeLayer()”public void RefreshExternalBadgeLayer()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1851-1885
Reparents and repositions the external badge container. The host calls this after edge-layer ordering so pin badges and inline literals remain above wires even when edges are configured to draw on top of node cards.
ResolveValueGlyphStyle(PortDefinition port)
Section titled “ResolveValueGlyphStyle(PortDefinition port)”public static BitQuirky.Graph.GraphView.GraphPortGlyphStyle ResolveValueGlyphStyle(BitQuirky.Graph.PortDefinition port)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:928-946
The shared “this pin has no value yet” glyph rule: an input pin that is eligible for a value, carries none, and is not wired draws the HOLLOW glyph; every other pin draws filled.
Three consumer features feed it. A literal-eligible pin with no inline literal is empty (Round Trip feature 070); a COMPOSITE pin is empty when every one of its components is blank (feature 071), since a composite value lives in CompositeComponentValuesand never sets HasInlineLiteral; an object pin whose combo holds no reference is empty in exactly the same sense (feature 072, ). All three take the same visual because they mean the same thing to the engineer, and the rule lives here, beside the glyph it drives, so a host does not grow a second copy of it.
A wired pin is never hollow whatever else is true: the wire is the value. A pin the consumer marked neither literal-eligible nor object-accepting is outside the rule entirely and stays filled, which is what keeps every other host rendering exactly as it always has.
SetDragCompatible(Color tint)
Section titled “SetDragCompatible(Color tint)”public void SetDragCompatible(UnityEngine.Color tint)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:998-1008
Marks this port as a compatible drop target for the active
connection drag: highlight ring in the port’s resolved type color
(tint); full row opacity is left untouched so
compatible ports stand out against the dimmed incompatible ones.
SetDragIncompatible()
Section titled “SetDragIncompatible()”public void SetDragIncompatible()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1014-1024
Dims this port as an incompatible drop target for the active connection drag.
SetLabelColor(Color color)
Section titled “SetLabelColor(Color color)”public void SetLabelColor(UnityEngine.Color color)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1450-1453
Updates the label color for contrast against a background.
SetLinkTargets(IReadOnlyList<PortView.PortLinkTarget> targets)
Section titled “SetLinkTargets(IReadOnlyList<PortView.PortLinkTarget> targets)”public void SetLinkTargets(System.Collections.Generic.IReadOnlyList<BitQuirky.Graph.GraphView.Views.PortView.PortLinkTarget> targets)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1265-1272
Supplies (or clears) the wires terminating at this pin and ensures the right-click context menu is installed so the break entries can appear. The host calls this after building the port, once it knows the pin’s connectivity from the graph model.
SetPortVisualColor(Color color)
Section titled “SetPortVisualColor(Color color)”public void SetPortVisualColor(UnityEngine.Color color)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1085-1113
Recolors the pin glyph, filling it or stroking its outline depending on the glyph style in force. Does nothing when the row has no glyph.
SetPortVisualOutline(Color color, float width)
Section titled “SetPortVisualOutline(Color color, float width)”public void SetPortVisualOutline(UnityEngine.Color color, float width)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:1134-1149
Draws a ring of the given width around the pin glyph, so a pin reads as an outlined dot. Does nothing for a triangular flow glyph, which has no ring.
TruncateLabelForPin(string label)
Section titled “TruncateLabelForPin(string label)”public static string TruncateLabelForPin(string label)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/PortView.cs:859-866
Returns the pin label as displayed on the card: the input text
unchanged when it fits withinMaxPinLabelChars,
otherwise the first (MaxPinLabelChars - 1) characters followed
by an ellipsis. Null and empty strings round-trip unchanged so
callers can passport.Labeldirectly.
RailSectionHeaderShadow
Section titled “RailSectionHeaderShadow”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.RailSectionHeaderShadowSource declaration: ../bitquirky-graph/Editor/GraphView/Views/RailSectionHeaderShadow.cs:40-107
Inherits: VisualElement
Soft drop shadow strip painted immediately below a rail section
heading, so the heading reads as a layer floating above the
scrolling body content. Sized and positioned by the
.ed-rail-section__header-shadow USS rule; the alpha ramp from
token opacity (top) to transparent (bottom) is composed here in C#
from a stack of thin horizontal strips with stepped alpha, because UI
Toolkit’s linear-gradient fill is unavailable on Unity 2022 and
USS gradients are unreliable in general.
The strip base color and peak opacity are read from
--bq-rail-section-shadow-color via CustomStyleProperty; the
per-strip alpha is derived from that configured alpha and ramp curve.
Members
Section titled “Members”RailSectionHeaderShadow()
Section titled “RailSectionHeaderShadow()”public RailSectionHeaderShadow()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/RailSectionHeaderShadow.cs:62-68
Builds the strip with the fallback shadow color, which the real token replaces as soon as style resolves. It takes no pointer input and repaints on geometry and token changes.
RecombineHintLayer
Section titled “RecombineHintLayer”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.RecombineHintLayerSource declaration: ../bitquirky-graph/Editor/GraphView/Views/RecombineHintLayer.cs:19-155
Inherits: VisualElement
Feature 038 / Phase 10 / US8 - Unity-side recombine hint overlay.
Mirrors the desktopRecombineHintOverlay: when the shared
RecombineHintEvaluatoremits a hint, this layer draws a
dashed rectangle around the union bounding box of the participating
child wires. Purely visual (FR-010a) - never intercepts input,
never mutates graph data.
Sits belowEdgeLayerin the visual stack so wires remain
interactive.
Members
Section titled “Members”HintCount
Section titled “HintCount”public int HintCount { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/RecombineHintLayer.cs:69
Number of currently-rendered hint rectangles - exposed for editor smoke / unit tests of the parity layer.
RecombineHintLayer()
Section titled “RecombineHintLayer()”public RecombineHintLayer()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/RecombineHintLayer.cs:33-42
Builds an empty hint layer stretched to fill its parent and taking no pointer input, so the wires it outlines stay interactive. Add it below the wire layer in the visual stack.
AddHint(Rect wireBoundsUnion)
Section titled “AddHint(Rect wireBoundsUnion)”public void AddHint(UnityEngine.Rect wireBoundsUnion)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/RecombineHintLayer.cs:49-53
Add a hint rectangle in graph-space coordinates. The renderer
inflates byPaddingwhen drawing so the dashed
outline reads as enclosing rather than touching the wires.
ClearHints()
Section titled “ClearHints()”public void ClearHints()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/RecombineHintLayer.cs:58-63
Removes every hint rectangle and repaints. Clearing an empty layer does nothing.
TypeLegendView
Section titled “TypeLegendView”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.TypeLegendViewSource declaration: ../bitquirky-graph/Editor/GraphView/Views/TypeLegendView.cs:58-178
Inherits: VisualElement
Generic on-canvas legend ( in the Round Trip 043 spec). Lists
one row per first-class data type plus the execution-flow row, each
row composed of a small color swatch and the type’s canonical short
name. Rows are seeded from
FirstClassDataTypesso adding a new
first-class type is a one-line edit in NodeColorRules and the
legend picks it up automatically - the legend is NOT the source of
truth, it just renders the one defined by the color rules.
Responsibilities:
- Compose a vertical stack of
swatch | labelrows for the data types + the exec sentinel. - Resolve each swatch’s fill via GetDataTypeColor(data rows) and ExecutionFlowColor(exec row), so the legend, the pin glyphs, and the wire strokes always agree.
- Stay anchored to the canvas viewport: embedders parent the legend to the graph container (NOT the pan/zoom content) and position it with absolute insets.
Does NOT:
- Own its position. Embedders pick the corner / inset via
style.position = Position.Absoluteand the matching left/right/top/bottom style values. - React to pointer events.
PickingModeisIgnoreso clicks pass through to the canvas behind it. - Show / hide itself. Embedders own
style.displayso each consumer (Round Trip, God Complex) can choose visibility per product.
Members
Section titled “Members”TypeLegendView()
Section titled “TypeLegendView()”public TypeLegendView()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/TypeLegendView.cs:78-92
Builds the legend already populated: the flow sentinel first, then one row per first-class data type, laid out in a single row. It takes no pointer input, and the embedder owns its position and visibility.
Refresh()
Section titled “Refresh()”public void Refresh()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/TypeLegendView.cs:101-107
Re-resolves swatch colors against the current NodeColorRulesstate. Call when the host swaps the active theme or the user changes a type-color preference; safe to call at any time (it walks the existing row list, no allocation in the common case).
UnsupportedIndicator
Section titled “UnsupportedIndicator”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.UnsupportedIndicatorSource declaration: ../bitquirky-graph/Editor/GraphView/Views/UnsupportedIndicator.cs:12-37
Inherits: VisualElement
Visual element displaying an orange indicator dot for unsupported constructs.
Members
Section titled “Members”UnsupportedIndicator(string tooltipText)
Section titled “UnsupportedIndicator(string tooltipText)”public UnsupportedIndicator(string tooltipText = "This method contains C# constructs that cannot be fully visualized.")Source declaration: ../bitquirky-graph/Editor/GraphView/Views/UnsupportedIndicator.cs:23-36
Builds the dot at its fixed size and color, with
tooltipTextas the hover explanation. The default wording states
that the method holds constructs the canvas cannot fully draw; pass your own for a
narrower reason.
VerticalRampView
Section titled “VerticalRampView”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.VerticalRampViewSource declaration: ../bitquirky-graph/Editor/GraphView/Views/VerticalRampView.cs:28-181
Inherits: VisualElement
Vertical gradient painter used by the portrait-badge card chrome (card face ramp and family badge chip ramp).
Responsibilities:
- Fill its content rect with one continuous vertical gradient. The two stops ride
the standard
color(top) andbackground-color(bottom) style channels so every per-family value stays a USS token lookup; inlineSetColorswins over both. - When the
ed-vertical-ramp--three-stopclass is present, read a third stop atMidStopfrom the-unity-background-image-tint-colorchannel and paint a continuous three-stop ramp. The card face and family badge both declare their mid color at 45% of the height, so a linear two-stop ramp would read too dark across the upper half of every card. - Fill the parent’s rounded silhouette without relying on overflow clipping.
Does NOT:
- Own the parent container’s border or layout.
Members
Section titled “Members”MidStop
Section titled “MidStop”public const float MidStop = 0.45Source declaration: ../bitquirky-graph/Editor/GraphView/Views/VerticalRampView.cs:34
Where the three-stop ramp’s middle color sits, as a fraction of the height.
ThreeStopClass
Section titled “ThreeStopClass”public const string ThreeStopClass = "ed-vertical-ramp--three-stop"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/VerticalRampView.cs:31
Class that opts the painter into the three-stop path.
VerticalRampView()
Section titled “VerticalRampView()”public VerticalRampView()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/VerticalRampView.cs:49-61
Builds the painter stretched to fill its parent and taking no pointer input. Its stops come from the resolved style untilSetColorsoverrides them, and it repaints on attach, style, and geometry changes so it follows a resizing card and picks up its parent’s corner radii.
SetColors(Color top, Color bottom)
Section titled “SetColors(Color top, Color bottom)”public void SetColors(UnityEngine.Color top, UnityEngine.Color bottom)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/VerticalRampView.cs:64-69
Override both stops inline (style channels are ignored).
ZoomHud
Section titled “ZoomHud”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.ZoomHudSource declaration: ../bitquirky-graph/Editor/GraphView/Views/ZoomHud.cs:44-116
Inherits: VisualElement
Bottom-left zoom HUD that shows the current zoom percentage as a
click-to-expand affordance . Clicking the
HUD raisesOnZoomMenuRequestedso the editor shell
can open a slider or preset menu viaPopover.
Responsibilities:
- Display the current zoom percentage rounded to whole numbers.
- Surface a click event the editor wires to a popover.
Does NOT:
- Own the zoom value itself; the editor shell drives the value from its viewport state.
- Implement the slider or preset menu; those compose this HUD
with a
Popoverat a higher layer.
Remarks
Round Trip: replace any local zoom HUD with this control.
Members
Section titled “Members”public float Zoom { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/ZoomHud.cs:67-75
Current zoom value (1.0 = 100%). Setter updates the label.
OnZoomMenuRequested
Section titled “OnZoomMenuRequested”public event System.Action OnZoomMenuRequestedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/ZoomHud.cs:60
Raised when the reader activates the zoom readout, asking for the zoom menu. The HUD draws no menu itself; the host opens one.
ZoomHud()
Section titled “ZoomHud()”public ZoomHud()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/ZoomHud.cs:85-102
Builds the readout showing 100%, focusable and already wired so a left click raises OnZoomMenuRequested. Set Zoomto show the real value.
ZoomMenuPopover
Section titled “ZoomMenuPopover”Category: Low-level runtime
class BitQuirky.Graph.GraphView.Views.ZoomMenuPopoverSource declaration: ../bitquirky-graph/Editor/GraphView/Views/ZoomMenuPopover.cs:61-255
Shared open-state zoom menu that opens above the bottom-left ZoomHudwhen the chip is clicked (, FR-035a, FR-035b). Composes the canonicalPopover infrastructure with a slider, 50% / 100% / 150% / 200% preset buttons, a Fit action, and a Reset-to-100% action.
Responsibilities:
- Build the popover content (header, slider, preset row, action row) using existing shared classes and tokens; no new USS is introduced.
- Drive the suppliedGraphViewHostthrough its public zoom API (SetZoom, FitToContents) so clamping and viewport bookkeeping stay owned by the host.
- ExposeOnClosed + IsOpenso the editor shell can avoid stacking duplicate popovers and can tear the popover down on window disable.
Does NOT:
- Own zoom clamping or snap behavior; the host does that (preserves God Complex behavior per FR-035b).
- Carry keyboard shortcuts (
F,Cmd+0). The tooltips reference those shortcuts so users see the same hints as God Complex, but the actual key handling stays in each product’s editor window. - Migrate God Complex’s existing inline zoom popover; that lands as a follow-up upstream cleanup under / FR-035a.
Remarks
Round Trip: instantiate one of these per editor window, pass the GraphViewHost, and call Openfrom the OnZoomMenuRequestedhandler. Re-opening while already open replaces the existing popover.
Members
Section titled “Members”IsOpen
Section titled “IsOpen”public bool IsOpen { get; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/ZoomMenuPopover.cs:113
True while a popover is currently displayed.
OnFitRequested
Section titled “OnFitRequested”public System.Action OnFitRequested { get; set; }Source declaration: ../bitquirky-graph/Editor/GraphView/Views/ZoomMenuPopover.cs:110
Optional override for the Fit action. When set, the popover invokes this delegate instead ofFitToContents. Consumers that need a different alignment (God Complex uses TopCenter) or want to post a status-bar message can set this without subclassing.
OnClosed
Section titled “OnClosed”public event System.Action OnClosedSource declaration: ../bitquirky-graph/Editor/GraphView/Views/ZoomMenuPopover.cs:97
Raised after the popover has finished closing.
DefaultAnchorGap
Section titled “DefaultAnchorGap”public const float DefaultAnchorGap = 4Source declaration: ../bitquirky-graph/Editor/GraphView/Views/ZoomMenuPopover.cs:72
Default anchor gap between the chip and the popover (mirrors God Complex).
FitTooltip
Section titled “FitTooltip”public const string FitTooltip = "Fit graph to view — F"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/ZoomMenuPopover.cs:66
Tooltip string for the Fit action. Mirrors God Complex.
ResetTooltip
Section titled “ResetTooltip”public const string ResetTooltip = "Reset zoom — Cmd+0"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/ZoomMenuPopover.cs:69
Tooltip string for the Reset-to-100% action. Mirrors God Complex.
SectionHeaderUssClass
Section titled “SectionHeaderUssClass”public const string SectionHeaderUssClass = "ed-text-section-header"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/ZoomMenuPopover.cs:83
USS class on a section heading inside the popover.
SliderUssClass
Section titled “SliderUssClass”public const string SliderUssClass = "ed-zoom-menu__slider"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/ZoomMenuPopover.cs:81
USS class on the zoom slider.
TitleUssClass
Section titled “TitleUssClass”public const string TitleUssClass = "ed-zoom-menu__title"Source declaration: ../bitquirky-graph/Editor/GraphView/Views/ZoomMenuPopover.cs:79
USS class on the popover’s title.
ZoomMenuPopover(GraphViewHost host)
Section titled “ZoomMenuPopover(GraphViewHost host)”public ZoomMenuPopover(BitQuirky.Graph.GraphView.GraphViewHost host)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/ZoomMenuPopover.cs:125-129
Binds the menu tohost, whose viewport its entries act on. Nothing is
shown untilOpenis called. Throws
ArgumentNullException when hostis null, since every
entry needs a viewport to change.
Close()
Section titled “Close()”public void Close()Source declaration: ../bitquirky-graph/Editor/GraphView/Views/ZoomMenuPopover.cs:206-212
Close the popover if it is currently open. Safe to call at any time (no-op if already closed).
Open(VisualElement panelRoot, VisualElement anchor, float gap)
Section titled “Open(VisualElement panelRoot, VisualElement anchor, float gap)”public void Open(UnityEngine.UIElements.VisualElement panelRoot, UnityEngine.UIElements.VisualElement anchor, float gap = 4)Source declaration: ../bitquirky-graph/Editor/GraphView/Views/ZoomMenuPopover.cs:144-200
Open the popover anchored immediately aboveanchor
insidepanelRoot’s local coordinate space.
If the popover is already open it is closed first so the new
popover reflects the latest zoom value.
Parameters
panelRoot: Panel root the popover attaches to. Round Trip passes its graph-container element; God Complex passes its canvas-area element.anchor: The ZoomHud (or any other element) the popover should sit above.gap: Vertical gap in pixels between the popover’s bottom edge and the anchor’s top edge. Defaults to DefaultAnchorGap.
Source fingerprint: sha256:ad0983d00d773d882bc61865e18d8c5559e009d181e5891575cd7f262515b23e