From 6326cb3789a029d85bbc42a24be30a09369400ab Mon Sep 17 00:00:00 2001 From: ispyisail Date: Fri, 14 Aug 2026 14:22:01 +1200 Subject: [PATCH] Fix bugtracker #335: element icons invisible on dark themes https://qelectrotech.org/bugtracker/view.php?id=335 ## Bug Element library icons (collection tree thumbnails, drag icon, preview panels) render with a fully transparent background. Element definitions almost always hardcode a black stroke color, on the assumption of the white diagram sheet they are normally drawn on. Against a dark widget/ tree-view background (e.g. KDE Plasma dark theme), that black stroke disappears entirely - reported as icons being "black and almost invisible". scorpio810_mantis linked this to the same recurring family as #231, #247, #267. ## Fix ElementPictureFactory::pixmap() is the single shared point where every consumer of these icons gets its QPixmap (collection tree via ElementsCollectionCache -> Element::pixmap(), master/slave properties tree, element properties preview, drag icon). Change its background fill from fully transparent to opaque white - exactly what the element already visually assumes in every context this pixmap is used, so it is correct regardless of the surrounding widget's palette. ## Testing Built both variants and compared under Xvfb using a simple, decisive visual test: select the tree row (giving it a highlighted/colored background) and compare what shows immediately around the icon's glyph. - Before: the icon's background matches the row's selection color - confirms it is transparent, so on a dark unselected row the black strokes would have the same problem. - After: a solid white square is visible behind the glyph regardless of the row's background color. Note for the on-disk pixmap cache used by ElementsCollectionCache (~/.local/share/QElectroTech/QElectroTech/elements_cache.sqlite): existing cached PNGs predate this fix and will keep their transparent background until regenerated. That cache already keys strictly on path+uuid with no invalidation on QET version, so this is an existing characteristic of that cache, not something introduced here. --- sources/factory/elementpicturefactory.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sources/factory/elementpicturefactory.cpp b/sources/factory/elementpicturefactory.cpp index 99d21ca10..85d30c82c 100644 --- a/sources/factory/elementpicturefactory.cpp +++ b/sources/factory/elementpicturefactory.cpp @@ -99,7 +99,14 @@ QPixmap ElementPictureFactory::pixmap(const ElementsLocation &location) int hsy = qMin(doc.document_element().attribute("hotspot_y").as_int(), h); QPixmap pix(w, h); - pix.fill(QColor(255, 255, 255, 0)); + //Element definitions almost always draw with a hardcoded black + //stroke color, on the assumption of the white diagram sheet they + //are normally placed on. A transparent background here makes + //that stroke disappear against a dark widget/tree-view background + //(bugtracker #335). Give it an opaque white background instead - + //exactly what the element already assumes visually, in every + //context this pixmap is used (tree icons, drag icon, previews). + pix.fill(Qt::white); QPainter painter(&pix); painter.setRenderHint(QPainter::Antialiasing, true);