Files
bambuddy/backend/app
MartinNYHC 2d0eca9354 Paint an AMS slot card with the spool's colours, not the tray's (issue #2967)
A Ziro "Colorful Mist" -- yellow, cyan and pink, effect Tri Color --
    hovered on the printer card as a single flat pink rectangle. A printer
    reports exactly one tray_color hex per tray and nothing else, so
    telemetry cannot describe a gradient or a surface effect and never will.

    The header now paints the bound spool's own swatch whenever that spool
    declares extra colour stops or an effect, through buildFilamentBackground
    -- the builder the Inventory swatches already use, so the two surfaces
    cannot drift apart. A plain single-colour spool keeps the flat
    backgroundColor it has always had, and a slot with nothing bound is
    untouched, so the common case goes nowhere near the gradient path.

    The gate is "any stop at all", not "more than one". buildColorLayer
    ignores rgba the moment stops exist, so a one-stop spool renders that
    stop rather than the slot hex; skipping it would leave this card showing
    a different colour from the Inventory row for the same spool, which is
    the class of disagreement the shared builder exists to prevent.

    isLightColor now tests the colour actually on screen. Once the spool's
    swatch is painted the base is no longer the slot hex -- a single stop
    replaces it outright, and an effect-only spool paints the spool's own
    rgba -- so testing the slot hex would pick the text colour for a
    background that is not there.

    Above one band no single hex can decide legibility, and the name sits
    dead centre where a multi-stop background is likeliest to change under
    it. So a genuinely multi-band header puts the name on the same scrim the
    vendor badge already uses. One stop, or an effect over one colour, still
    vendor badge already uses. One stop, or an effect over one colour, still
    leaves a real base colour to test and keeps the contrast rule it had.

    Spoolman mode gains the gradient in the process. Spoolman has held the
    stops in filament.multi_color_hexes all along and the label renderer has
    been reading them for releases, but _map_spoolman_spool never returned
    them -- so the identical roll registered in Spoolman rendered flat while
    the internally-managed one did not. Both now share one parser rather
    than reading the same field two ways.

    What stays asymmetric is Spoolman's own limitation, and it is pinned by
    a test rather than left to be rediscovered: Spoolman has no field for a
    surface effect at all. Its only neighbouring field,
    multi_color_direction, says how the stops are laid out, not that the
    roll is silk or glitter. effect_type is therefore None for a Spoolman
    spool instead of guessed at, and silk/sparkle/wood remain internal-only.

    The other two halves of the report -- the header naming the colour
    "White" instead of "Colorful Mist", and the print dialog offering
    "A3: PLA (White)" -- were already fixed on dev by #2875 and by the
    slot-naming change that landed the day after this was filed. Neither is
    in 1.2.5.3, which is what the reporter is running.
2026-08-28 12:42:44 +02:00
..
…
…
…