Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==PREPROCESSOR==
- // @import "%fb2k_path%scripts\getColoursFonts.js"
- // ==/PREPROCESSOR==
- // args: h_align, v_align, trimming, flags
- function StringFormat()
- {
- var h_align = 0, v_align = 0, trimming = 0, flags = 0;
- switch (arguments.length)
- {
- // fall-thru
- case 4:
- flags = arguments[3];
- case 3:
- trimming = arguments[2];
- case 2:
- v_align = arguments[1];
- case 1:
- h_align = arguments[0];
- break;
- default:
- return 0;
- }
- return ((h_align << 28) | (v_align << 24) | (trimming << 20) | flags);
- }
- // h_align/v_align:
- StringAlignment = {
- Near: 0,
- Center: 1,
- Far: 2
- };
- //Colour funcs
- function RGB(r, g, b)
- { return (0xff000000 | (r << 16) | (g << 8) | (b)); }
- var fontname = "Segoe UI";
- text = {
- metadata: fb.TitleFormat("$if2(%STREAM_NAME%,[%artist%][ $char(8226) %conductor%][ $char(8226) %performer%]$crlf()[$num(%tracknumber%,0). ][%title%])$crlf()$if(%STREAM_NAME%,[%artist% - ][%title%],[%album%[ $char(8226) %set subtitle%]])"),
- font: gdi.Font(fontname, 18, 1)
- };
- lyrics = {
- metadata: fb.TitleFormat("[$if2(%unsynched lyrics%,%lyrics%)]"),
- font: gdi.Font(fontname, 13, 0)
- };
- indfnt = gdi.Font(fontname, 9, 1);
- indfmt = StringFormat(1, 0);
- lyr_stringformat = StringFormat(StringAlignment.Center);
- var ww, wh;
- //Stuff for text
- var textsize;
- var lyricsize = 0;
- var txtx=2;
- var lyry=0;
- var scroll=0;
- var txty;
- var txtwid;
- var img_x,img_y,img_w,img_h;
- var imgr_x,imgr_y;
- var fcstrk = false;
- var showlyrics = false;
- var padh = 2;
- var padt = 2;
- var textrender = gdi.CreateStyleTextRender();
- var txtev = evaldata(text.metadata);
- var lyrev = evaldata(lyrics.metadata);
- //Art
- var arttype = 0;
- var g_img = utils.GetAlbumArtV2((fb.IsPlaying&&!fcstrk)?fb.GetNowPlaying():fb.GetFocusItem(), arttype);
- AlbumArtName = new Array("Front","Back","Disc","Icon","Artist");
- function on_paint(gr)
- {
- gr.FillSolidRect(0,0,ww,wh,bg);
- gr.SetInterpolationMode(3);
- textsize = gr.MeasureString(txtev, text.font, 0, 0, ww, wh).Height;
- //Draw front cover
- if(g_img && !(showlyrics && lyrev))
- {
- //Normal
- gr.DrawImage(g_img, img_x, img_y, img_w, img_h, 0, 0, g_img.Width, g_img.Height);
- //Rotated
- gr.DrawImage(g_img, imgr_x, imgr_y, -img_w, img_h/2, 0, g_img.Height/2, g_img.Width, g_img.Height/2,180,220);
- //Mirror mask
- gr.FillGradRect(img_x-1, imgr_y-1, img_w+2, img_h/2+2,91,bg-0x80000000,bg);
- }
- //Draw lyrics
- if(showlyrics && lyrev)
- {
- lyricsize = gr.MeasureString(lyrev, lyrics.font, 0, 0, txtwid, 9999999999).Height;
- gr.SetTextRenderingHint(5);
- gr.DrawString(lyrev, lyrics.font, txtcol, txtx, 12+textsize+lyry+scroll, txtwid, lyricsize, lyr_stringformat);
- gr.FillSolidRect(0,0,ww,textsize+8,bg);
- gr.FillSolidRect(0,wh-18,ww,18,bg);
- }
- //Draw track info
- gr.SetSmoothingMode(4);
- gr.SetTextRenderingHint(5);
- textrender.OutlineText(txtcol, bg, 3);
- textrender.RenderStringRect(gr, txtev, text.font, 0, (showlyrics && lyrev)?0:Math.min(wh-12-textsize,img_y+img_h), ww, Math.max(textsize,wh-img_y-img_h), (showlyrics && lyrev)?0x10000000:0x11000000);
- //draw state indicator
- gr.DrawString((fcstrk?"Prefer Focused Track":"Prefer Now Playing")+" | "+(showlyrics?"Prefer Lyrics":"Prefer Art")+" | Art Type: "+AlbumArtName[arttype], indfnt, RGB(0,200,0),0,wh-12,ww,12,indfmt);
- }
- function on_size()
- {
- ww = window.Width;
- wh = window.Height;
- txtwid = ww-2*txtx;
- if(g_img && !(showlyrics && lyrev))
- {
- img_w = Math.min(ww-2*padh,(4/5)*(wh*g_img.Width/g_img.Height));
- img_h = Math.min((ww-2*padh)*g_img.Height/g_img.Width,(4/5)*(wh-2*padh));
- img_x = (img_w==ww-2*padh)?padh:(ww-(4/5)*(wh*g_img.Width/g_img.Height))/2;
- img_y = padt;
- imgr_x = img_x+img_w;
- imgr_y = img_y+img_h-1;
- }
- }
- function evaldata(txt)
- {
- return (fb.IsPlaying&&!fcstrk)?txt.Eval():txt.EvalWithMetadb(fb.GetFocusItem());
- }
- /////Update display
- function on_playback_new_track(metadb)
- {
- if(!fcstrk)
- {
- lyry = 0;
- scroll=0;
- g_img = utils.GetAlbumArtV2(metadb, arttype);
- txtev = evaldata(text.metadata);
- lyrev = evaldata(lyrics.metadata);
- on_size();
- window.Repaint();
- }
- }
- function on_item_focus_change()
- {
- if(!fb.IsPlaying||fcstrk&&fb.GetFocusItem())
- {
- lyry = 0;
- scroll=0;
- g_img = utils.GetAlbumArtV2(fb.GetFocusItem(), arttype);
- txtev = evaldata(text.metadata);
- lyrev = evaldata(lyrics.metadata);
- on_size();
- window.Repaint();
- }
- }
- function on_playlist_switch()
- {
- on_item_focus_change();
- }
- function on_playback_dynamic_info_track()
- {
- txtev = evaldata(text.metadata);
- window.Repaint();
- }
- function on_playback_stop()
- {
- window.Repaint();
- }
- function on_playback_time(time)
- {
- if(showlyrics && lyrev && !fcstrk)
- {
- lyry = (wh-textsize-32)>lyricsize?0:(wh-textsize-32-lyricsize)*fb.PlaybackTime/fb.PlaybackLength;
- window.Repaint();
- }
- }
- ////////Interaction
- function on_mouse_lbtn_dblclk(x, y)
- {
- fcstrk = !fcstrk;
- if(fcstrk){on_item_focus_change()}
- else if(fb.IsPlaying){on_playback_new_track(fb.GetNowPlaying());}
- window.Repaint();
- }
- function on_mouse_mbtn_up(x, y)
- {
- lyrev = evaldata(lyrics.metadata);
- showlyrics = !showlyrics;
- if(fcstrk||!fb.IsPlaying){on_item_focus_change()}
- else if(fb.IsPlaying){on_playback_new_track(fb.GetNowPlaying());}
- window.repaint();
- }
- function on_mouse_wheel(step)
- {
- if(showlyrics && lyrev)
- {
- if(step>0)
- {
- if(lyry+scroll < 0)
- {
- scroll = scroll+60;
- }
- }
- else
- {
- if( wh-(42+textsize+lyry+scroll) < lyricsize)
- {
- scroll = scroll-60;
- }
- }
- }
- else
- {
- arttype=((arttype+step)%5+5)%5;
- if(fcstrk||!fb.IsPlaying){on_item_focus_change()}
- else if(fb.IsPlaying){on_playback_new_track(fb.GetNowPlaying());}
- }
- window.Repaint();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement