Wie die Farbewerte aus den Visual Studio Themes ermitteln?

  • VB.NET

    Wie die Farbewerte aus den Visual Studio Themes ermitteln?

    Hi.

    Ich versuche die Farbwerte aus dem Visual Studio irgendwie zu exportieren, um es in Blender zu Importieren.

    Dazu habe ich mir die Extension "Color Theme Editor for Visual Studio 2019" installiert.

    Diese kann mir die Theme als Datei in XML ausgeben. (*.vstheme)

    In dieser sind folgende Einträge:

    XML-Quellcode

    1. <Category Name="ACDCOverview" GUID="{c8887ac6-3c60-4209-9d69-8f4c12a60044}">
    2. <Color Name="Body">
    3. <Background Type="CT_RAW" Source="FF252526" />
    4. <Foreground Type="CT_RAW" Source="FFF1F1F1" />
    5. </Color>
    6. <Color Name="H1">
    7. <Foreground Type="CT_RAW" Source="FF84CEFF" />
    8. </Color>
    9. ...


    Das Attribut "Source", ist der Farbwert als ARGB und wird in Blender per py.Script in sRGB umgewandelt.

    Das Attribut "Type" ist mir schleierhaft, aber es scheint wohl etwas mit Theme-Abhängigkeiten zu sein.
    z.B.: Die Farbe bei einer Textauswahl wird mittels "CT_Auto" umgefärbt, wenn nicht "CT-RAW" oder anderes. <- nicht wichtig? wer weiß es? wer weiß es? Byuler? Byuler?

    Manchmal gibt es eine "Foreground", oder "Background" oder beides zusammen.
    Die GUID´s sind für die Referenz der "Category" und wird zwingend gebraucht.

    Folgendes Bild zeigt die "Alle anzeigen - Show all Elements" in einer Tabelle an und mich interessiert überwiegend der TextEditor-Bereich.
    Im Bild habe ich schnell einige Markierungen eingefügt.
    Oben das Umschalten auf "Alle anzeigen" , in der linken Spalte der Hinweis auf übersetzte Bezeichner, und in der mittleren Spalte "Automatic und Default" hervorgehoben.
    Zu beachten ist das der Einsatzbereich "TextEditor" oder "Themed Dialog" mit einem Pfeil den Eintrag ergänzen.
    Ich gehe davon aus, das damit die GUID/Category abgebildet wird.




    Meine Frage ist nun wie kann ich sowas umsetzen?

    Es ist mir nicht wichtig irgendwelche Steuerelemente oder großartig einen Nachbau zu basteln, eher möchte ich nur einen Export mit Übersetzungen haben.

    Wie machen die das? ( vielleicht mit Magie? -fuchtel mit der Hand-)

    Muss ich das mit einer Extension herangehen?

    Mein WPF Mainwindow hat da nichts gefunkt. :(

    Nachdem ich nun eine Menge Nugetpakete installiert habe, konnte ich zumindest das hier herausbekommen.

    VB.NET-Quellcode

    1. Dim t As Type = GetType(Microsoft.VisualStudio.PlatformUI.EnvironmentColors)
    2. Dim colorlist As New List(Of System.Drawing.Color)
    3. For Each member As MemberInfo In t.GetMembers
    4. Debug.WriteLine(member.Name)
    5. Next
    6. Dim themeResourceKey = Microsoft.VisualStudio.PlatformUI.EnvironmentColors.SystemActiveBorderBrushKey


    Microsoft.VisualStudio.PlatformUI.EnvironmentColors.SystemActiveBorderBrushKey
    Das SystemActiveBorderBrushKey, soll dann mit den Wert "member.Name" aus der schleife ersetzt werden.

    Habe es mit "CallByName" versucht, aber die hier im Forum erwähnten Posts beruhen wohl auf Methodennamen statt auf Eigenschaftsnamen.
    Werde wohl Reflection-Technik lernen müssen...

    So, das ist nur die halbe Miete, denn nun soll das auch noch mit dieser Zeile versehen werden.

    VB.NET-Quellcode

    1. Dim farbe = Microsoft.VisualStudio.PlatformUI.VSColorTheme.GetThemedColor(themeResourceKey)


    Damit habe ich wohl auch keinen übersetzten Text zur Farbe, aber evtl. geht das ein Schritt weiter.

    Danke fürs Lesen und bitte nicht gleich steinigen, bin aus Zuckerwatte... ich weiss, ist sehr Speziell, das bin ich wohl dann auch... hehe

    c.u. Joshi aus HH

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Joshi“ ()