Ich habe eine Frage zum Thema Farben, in meinem Plugin habe ich viele Listen in denen die Texte in den Zeilen unterschiedliche Farben haben, z.B. wenn ein Eintrag deaktiviert ist, dann wird er rot dargestellt, ansonsten weiß. Das wird zur Zeit beim Aufbau der Liste, also wenn ich die Zeilen einfüge, im Code entschieden und die jeweils richtige Farbe gesetzt.
Jetzt beschweren sich die Skinner, dass man bei einem hellen Skin die Texte nicht lesen kann (weiß auf weiß). Die Skinner haben empfohlen die "foreground" Color im Code anstelle von weiß zu verwenden, mein erster Versuch parseColor("foreground") führte aber direkt zu Crash.
Wie lässt sich mein Problem richtig lösen, damit die Skinner zufrieden sind - gibt es u.U. sogar die Möglichkeit mehr als nur eine Farbe im Skin zu definieren die ich dann im Code verwenden kann?
Farben im Skin und im Code
-
- [gelöst]
- MacDisein
-
-
sieh dir mal den Bereich <colors> in der skin.xml an
Code<colors> <color name="white" value="#ffffff"/> <color name="grey" value="#aaaaaa"/> <color name="foreground" value="#dddddd"/> <colors>
dann wird aus dem jeweiligen skin immer die jeweilige foreground Farbe genommen - egal welche Farbe du definierst
-
Danke, habe mir das jetzt mal angesehen - jetzt wird einiges klarer.
Aber eine Frage habe ich trotzdem noch:Das <colors> Tag ist ja relativ global - kann denn der Skinner die Farben pro Screen neu definieren, wenn er für mein Plugin die Farben anpassen muss?
Oder muss dann eine Farbe 'yellow' global z.B. dunkler werden? -
nun: Du selbst kannst ja die Colors definieren. "yellow" ist natürlich zu global. Ich würde sowas wie "sr_yellow" definieren, dann kann man Dein Plugin direkt anpassen...
-
als Bespiel eignet sich die EMC skin_user.xml - die kann man auch schön direkt in den Skin einbauen
Code<colors> . . . <!-- EMC Color for DMConcinnity-HD --> <color name="EMCFinished" value="#0046d93a" /> <color name="EMCRecording" value="#009f1313" /> <color name="EMCWatching" value="#003486f4" /> <color name="EMCcyan" value="#2CADFB" /> </colors>
du kannst ja nur farbcodes für DeinPlugn_foreground, DeinPlugin_background, DeinPlugin_etc definieren, dann braucht der skiner die colornames nur in die gobale color liste aufnehmen und dort die Farben entsprechend dem Skin EINMALIG anpassen, wenn dein Plugin Screen nur mit den color names anstatt HEX Codes geskinnt ist
alternativ kannst du auch die die standard color names verwenden: foreground, background, transparent usw. die sind so gut wie in jedem skin global definiert
-
Code
Alles anzeigen<windowstyle id="0" type="skinned"> <title font="Regular;26" offset="30,15"/> <color color="background" name="Background"/> <color color="foreground" name="LabelForeground"/> <color color="background" name="ListboxBackground"/> <color color="foreground" name="ListboxForeground"/> <color color="grey_sel" name="ListboxSelectedBackground"/> <color color="2ndFG" name="ListboxSelectedForeground"/> <color color="background" name="ListboxMarkedBackground"/> <color color="red" name="ListboxMarkedForeground"/> <color color="background" name="ListboxMarkedAndSelectedBackground"/> <color color="red" name="ListboxMarkedAndSelectedForeground"/> <color color="2ndFG" name="WindowTitleForeground"/>
Als Skinner würde ich empfehlen die Farben aus dem Windowstyle zu verwenden. Wenn Du feste Farben für Dein Plugin voraussetzt, wie z.B. sr_Farbe1, usw., wird jeder Skin, der diese Farbdefinitionen nicht hat, crashen.
Was ich besser finden würde, es so zu machen, wie zum Beispiel in der ChannelSelection. Dort kann ich dem widget Farben "mitgeben".Code<widget backgroundColor="background" colorEventProgressbar="2ndFG" colorEventProgressbarBorder="3rdFG" colorEventProgressbarBorderSelected="white" colorEventProgressbarSelected="foreground" colorServiceDescription="2ndFG" colorServiceDescriptionSelected="foreground" foregroundColorServiceNotAvail="3rdFG" name="list" position="30,57" scrollbarMode="showOnDemand" serviceInfoFont="Regular;20" serviceItemHeight="30" size="820,600" transparent="1"/>
Du müsstest nur die Namen festlegen. Wird vom Skin nix gemacht, werden Deine default-Werte genommen, wird im Skin das entsprechend angepasst, werden die Skinfarben genommen und nix crasht ;). Wie man das in Python macht, keine Ahnung... -
Vielen Dank für die Erläuterungen und Ideen - ich habe jetzt im ersten Schritt den Code so umgebaut, dass foreground anstelle von white verwendet wird und die anderen Farben aus dem Skin geladen werden. So haben die Skinner etwas mehr Möglichkeiten - damit kann ich jetzt erstmal leben - sollte es dann immer noch Probleme geben, kann man noch mal über eigene Farbnamen nachdenken.