Mit WSH Panel Mod Bild einfügen

Begonnen von zaede, 30. Mai 2011, 23:40:38

Vorheriges Thema - Nächstes Thema

zaede

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

grimes

#1
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.

zaede

Super danke sieht schon mal ganz gut aus.

Noch zwei Probleme bestehen:


  • Das Bild wird jeweils nur angezeigt wenn ich WHS Panel / Configure.. und dann ok drücke.
    Am besten wäre wahrscheinlich " Anzeigen bei Focus auf den Track".
  • Die grösse des Bildes wird nicht der Panelgrösse angepasst.

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();
}





grimes

#3
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.

zaede

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 ?

grimes

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();
}

zaede

Perfekt - funktioniert.
Vielen Dank.

you made my day
Peter