foobar2000 auf Deutsch

foobar2000 => Plugins => Thema gestartet von: zaede in 30. Mai 2011, 23:40:38

Titel: Mit WSH Panel Mod Bild einfügen
Beitrag von: zaede in 30. Mai 2011, 23:40:38
Hallo zusammen,

Bin von CUI auf DUI umgestiegen und möchte nun gerne die Landesflaggen wieder anzeigen lassen.
Dazu muss ich wohl das WSH Panel Mod benutzen.
Leider habe ich noch überhaupt keine Erfahrung mit WSH.
Hab mal rumgestöbert und ein paar codeschnipsel zusammen gesucht.

function on_size() {
   ww = window.Width;
   wh = window.Height;
}


var flag = fb.ProfilePath + "\\flag\\%country%.gif";

country = fb.TitleFormat(%country%)

if (fb.IsPlaying || fb.IsPaused) {
    get_image();
}

function get_image() {
    g_img = gdi.Image(flag);
}


Kann mir da jemand weiter helfen. Die Flags sind im profile Ordner und sollten über den Tag %country%
angesteuert werden. Die Flags sind als *.gif hinterlegt.

Die jeweilige Flagge sollte das ganze WSH panel ausfüllen.



Gruss
Peter
Titel: Re: Mit WSH Panel Mod Bild einfügen
Beitrag von: grimes in 31. Mai 2011, 13:41:41
Ich hab mal so was ähnliches gemacht:
Das Codec-icon des gespielten tracks darstellen.

Hab den Code mal extrahiert.

//codec-icon by grimes
//fb2k 1.0+, WSH Panel Mod 1.3.0+ required
//DUI/CUI ready


function RGB(r, g, b) {
    return (0xff000000 | (r << 16) | (g << 8) | (b));
}

var g_img;
var codec;
if(fb.IsPlaying || fb.IsPaused) {
   codec = fb.TitleFormat("%codec%").Eval();
   g_img = gdi.Image(fb.FoobarPath + "icons\\" + codec + ".png");     
}
else {
    g_img = gdi.Image(fb.FoobarPath + "icons\\generic.png");
}

var dui = window.InstanceType;

var g_font = dui == 1 ? window.GetFontDUI(0) : window.GetFontCUI(0);
//var color = RGB(200,0,0);
var color = dui == 1 ? window.GetColorDUI(2) : RGB(200,0,0);
//var color2 = RGB(0,0,0);
var color2 = dui == 1 ? window.GetColorDUI(0) : window.GetColorCUI(0);


function on_paint(gr) { 
    gr.FillSolidRect(0, 0, window.Width, window.Height, dui === 1 ? window.GetColorDUI(1) : window.GetColorCUI(3));   
    g_img && gr.DrawImage(g_img, window.Width / 2  - g_img.Width * 2, window.Height / 2  - g_img.Height * 2, g_img.Width * 4, g_img.Height * 4, 0, 0, g_img.Width, g_img.Height); 
}

function on_playback_new_track() {
    codec = fb.TitleFormat("%codec%").Eval();
    g_img = gdi.Image(fb.FoobarPath + "icons\\" + codec + ".png");
    window.Repaint();
}

function on_playback_stop(reason) {
    g_img = gdi.Image(fb.FoobarPath + "icons\\generic.png");
    window.Repaint();
}

function on_colors_changed() {
    color = dui === 1 ? window.GetColorDUI(2) : RGB(200,0,0);
    color2 = dui === 1 ? window.GetColorDUI(0) : window.GetColorCUI(0);
    window.Repaint();
}

function on_font_changed() {
    g_font = dui ===1 ? window.GetFontDUI(0) : window.GetFontCUI(0);
    window.Repaint();
}


Musst Du jetzt auf Deinen Fall transferieren.
Titel: Re: Mit WSH Panel Mod Bild einfügen
Beitrag von: zaede in 31. Mai 2011, 20:30:42
Super danke sieht schon mal ganz gut aus.

Noch zwei Probleme bestehen:

Hier noch mein angepasster Code:

//codec-icon by grimes
//fb2k 1.0+, WSH Panel Mod 1.3.0+ required
//DUI/CUI ready


function RGB(r, g, b) {
    return (0xff000000 | (r << 16) | (g << 8) | (b));
}

var g_img;
var country;
if(fb.IsPlaying || fb.IsPaused) {
   country = fb.TitleFormat("%country%").Eval();
   g_img = gdi.Image(fb.ProfilePath + "flags\\" + country + ".gif");     
}
else {
    g_img = gdi.Image(fb.ProfilePath + "flags\\%country%.gif");
}

var dui = window.InstanceType;

var g_font = dui == 1 ? window.GetFontDUI(0) : window.GetFontCUI(0);
//var color = RGB(200,0,0);
var color = dui == 1 ? window.GetColorDUI(2) : RGB(200,0,0);
//var color2 = RGB(0,0,0);
var color2 = dui == 1 ? window.GetColorDUI(0) : window.GetColorCUI(0);


function on_paint(gr) { 
    gr.FillSolidRect(0, 0, window.Width, window.Height, dui === 1 ? window.GetColorDUI(1) : window.GetColorCUI(3));   
    g_img && gr.DrawImage(g_img, window.Width / 2  - g_img.Width * 2, window.Height / 2  - g_img.Height * 2, g_img.Width * 4, g_img.Height * 4, 0, 0, g_img.Width, g_img.Height); 
}

function on_playback_new_track() {
    country = fb.TitleFormat("%codec%").Eval();
    g_img = gdi.Image(fb.ProfilePath + "flags\\" + country + ".gif");
    window.Repaint();
}

function on_playback_stop(reason) {
    g_img = gdi.Image(fb.ProfilePath + "flags\\%country%.gif");
    window.Repaint();
}

function on_colors_changed() {
    color = dui === 1 ? window.GetColorDUI(2) : RGB(200,0,0);
    color2 = dui === 1 ? window.GetColorDUI(0) : window.GetColorCUI(0);
    window.Repaint();
}

function on_font_changed() {
    g_font = dui ===1 ? window.GetFontDUI(0) : window.GetFontCUI(0);
    window.Repaint();
}




Titel: Re: Mit WSH Panel Mod Bild einfügen
Beitrag von: grimes in 31. Mai 2011, 20:56:25
1) Ja der Code muss ja ausgeführt werden, deshalb ok. Das Callback on_item_focus gibt es glaube ich nicht, was spricht gegen on_playback_new_track. Oder was willst Du?

EDIT: Fehler: Da ist noch ein %codec% in on_playback_new_track

2) Da musst Du die Parameter von DrawImage anpassen. Die Flaggen sind breiter als hoch?

Aus dem Stegreif:
gr.DrawImage(g_img, 0, window.Height / 2 - g_img.Height / 2, window.Width, g_img.Height, 0, 0, g_img.Width, g_img.Height)

Ich hoffe Du siehst worauf ich hinaus will.
Titel: Re: Mit WSH Panel Mod Bild einfügen
Beitrag von: zaede in 31. Mai 2011, 22:23:29
Flags erscheinen jetzt im WSH Panel  :)

Krieg das nicht hin mit den Parametern.
Das Bild wird immer automatisch der Breite angepasst, was auch gut so ist.
Die Höhe des Bildes kann ich nicht verändern - heisst das Bild verschwindet dann im
Panel wenn ich diese Höhe verändere.

Das Panel hat so etwa die Grösse 2 x 1cm

Also wie verändere ich die Höhe des Bildes ? Mit minus Zeichen oder Kommastellen ?
Titel: Re: Mit WSH Panel Mod Bild einfügen
Beitrag von: grimes in 31. Mai 2011, 22:54:27
Da fehlt die Skalierung


//codec-icon by grimes
//fb2k 1.0+, WSH Panel Mod 1.3.0+ required
//DUI/CUI ready


function RGB(r, g, b) {
    return (0xff000000 | (r << 16) | (g << 8) | (b));
}

var g_img;
var codec;
if(fb.IsPlaying || fb.IsPaused) {
   codec = fb.TitleFormat("%codec%").Eval();
   g_img = gdi.Image(fb.FoobarPath + "icons\\" + codec + ".png");     
}
else {
    g_img = gdi.Image(fb.FoobarPath + "icons\\generic.png");
}

var dui = window.InstanceType;

var g_font = dui == 1 ? window.GetFontDUI(0) : window.GetFontCUI(0);
//var color = RGB(200,0,0);
var color = dui == 1 ? window.GetColorDUI(2) : RGB(200,0,0);
//var color2 = RGB(0,0,0);
var color2 = dui == 1 ? window.GetColorDUI(0) : window.GetColorCUI(0);

function on_paint(gr) {
    gr.FillSolidRect(0, 0, window.Width, window.Height, dui === 1 ? window.GetColorDUI(1) : window.GetColorCUI(3));   
    if (g_img) {
        var scale = 0;
        var x = 0,
            y = 0;
        var scale_w = window.Width / g_img.Width;
        var scale_h = window.Height / g_img.Height;

        if (scale_w <= scale_h) {
            scale = scale_w;
            y = (window.Height - g_img.Height * scale) / 2;
        } else {
            scale = scale_h;
            x = (window.Width - g_img.Width * scale) / 2;
        }
        gr.DrawImage(g_img, x, y, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
    }
}

function on_playback_new_track() {
    codec = fb.TitleFormat("%codec%").Eval();
    g_img = gdi.Image(fb.FoobarPath + "icons\\" + codec + ".png");
    window.Repaint();
}

function on_playback_stop(reason) {
    g_img = gdi.Image(fb.FoobarPath + "icons\\generic.png");
    window.Repaint();
}

function on_colors_changed() {
    color = dui === 1 ? window.GetColorDUI(2) : RGB(200,0,0);
    color2 = dui === 1 ? window.GetColorDUI(0) : window.GetColorCUI(0);
    window.Repaint();
}

function on_font_changed() {
    g_font = dui ===1 ? window.GetFontDUI(0) : window.GetFontCUI(0);
    window.Repaint();
}
Titel: Re: Mit WSH Panel Mod Bild einfügen
Beitrag von: zaede in 01. Juni 2011, 11:00:19
Perfekt - funktioniert.
Vielen Dank.

you made my day
Peter