Recommended Posts

Took me a while to get rid of usual columns_ui style and get it how I wanted for funcionability :)

Mainly a mod of spex configuration, with some custom crap :p , I think it's just missing some buttons (currently controlled with the taskbar) and the right panel displays lyrics and album art if found, else it looks like on the screen ;)

any chance you're gonna release it?

MAYBE.

$if($meta_test(tracknumber),

// FOR ALBUMS

$drawrect(0,0,0,0,brushcolor-197-218-186 pencolor-null)

// cover
$imageabs2(72,72,,,,,4,4,'images\noalbum.png',)
$imageabs2(72,72,,,,,4,4,$replace(%path%,%filename_ext%,)cover.jpg,NOKEEPASPECT)
$imageabs2(72,72,,,,,4,4,$replace(%path%,%filename_ext%,)folder.jpg,NOKEEPASPECT)
$imageabs2(72,72,,,,,4,4,'images\artoverlay.png',)

// artist
$alignabs(82,12,$add(%_width%,-107),24,left,top)
$font(Calibri,14,bold,85-85-85)
$if2(%album artist%,%artist%)

// album
$alignabs(82,30,$add(%_width%,-107),24,left,top)
$font(Calibri,14,bold,60-60-60)
%album%

// info
$alignabs(82,50,$add(%_width%,-107),24,left,top)
$font(Calibri,10,,105-105-105)

//      MP3
$if($stricmp($info(codec),mp3),
$puts(v_codec,$info(codec)':')
$puts(v_compression,
$if($stricmp($left($info(codec_profile),3),VBR),
VBR
$if($stricmp($info(codec_profile),'VBR V0'),' (V0)')
$if($stricmp($info(codec_profile),'VBR V1'),' (V1)')
$if($stricmp($info(codec_profile),'VBR V2'),' (V2)')
$if($stricmp($info(codec_profile),'VBR V3'),' (V3)')
$if($stricmp($info(codec_profile),'VBR V4'),' (V4)')
,%__bitrate%' kbps (CBR)')),)

//      Vorbis
$if($stricmp($info(codec),vorbis),
$puts(v_codec,$info(codec):)
$puts(v_compression,%__bitrate_nominal%' kbps (nominal)'),)

//      AAC
$if($stricmp($info(codec),AAC),
$puts(v_codec,$info(codec):)
$puts(v_compression,
$if($stricmp($info(codec_profile),LC),low complexity)
$if($stricmp($info(codec_profile),SSR),scalable sampling rate)
$if($stricmp($info(codec_profile),HE),high efficiency)
$if($stricmp($info(codec_profile),LD),low delay)
$if($stricmp($info(codec_profile),LTP),long-term prediction)
$if($stricmp($info(codec_profile),SBR),spectral bandwidth replication)
),)

//      FLAC
$if($stricmp($info(codec),FLAC),
$puts(v_codec,$info(codec)),)

//      APE
$if($stricmp($info(codec),monkey''s audio),
$puts(v_codec,$info(codec))
$puts(v_version,$info(version):)
$puts(v_compression,$lower($info(codec_profile))),)

//      MPC
$if($stricmp($info(codec),musepack),
$puts(v_codec,$caps($info(codec)))
$puts(v_version,$info(mpc_encoder))
$puts(v_compression,$info(mpc_profile)))

// display that jazz
[$left(%date%,4)  /  ]$get(v_codec)[' '$get(v_version)][' '$get(v_compression)]


,


// FOR SINGLES

$drawrect(0,0,0,0,brushcolor-162-187-208 pencolor-null)

$imageabs2(72,72,,,,,4,4,'images\singles.png',)


// artist
$alignabs(82,28,$add(%_width%,-107),24,left,top)
$font(Calibri,14,bold,85-85-85)
SINGLE TRACKS

)

I don't know if all that 'info' stuff is right, they changed some of the fields since i first did that code. MP3 and Vorbis should be correct though. And the 'singles' part obviously depends on all your single tracks having no track numbers. And, uh, artoverlay.png is pretty much just a rectangle.

Got the buttons on bottom bar :)

finalfoobarve7.png

----------------------------------------------------------------------------------------------------------------

TOP TRACKINFO:

$puts(str1,"%title%"[ by %artist%][ / %album%])
$puts(str2,"%title%"[ %genre%][ from %date%])
$puts(str3,"%title%"[ by %artist%][ / %album%][ '('%genre%[, %date%]')'])
$puts(panelbg,245-245-245)
$puts(imagedir,'C:\Program Files\foobar2000\images\delta\')

// background
$drawrect(,,,,brushcolor-$get(panelbg) pencolor-null)
$imageabs2(,,,,,,0,3,$get(imagedir)trackinfo1.png,)

// audioscrobbler
$if($or($greater($muldiv(%playback_time_seconds%,100,%length_seconds%),49),$greater(%playback_time_seconds%,239)),$imageabs2(,,,,,,$sub(%_width%,88),3,$get(imagedir)as.png,))

// curved edges
$drawrect(0,3,1,1,brushcolor-$get(panelbg) pencolor-null)
$drawrect($sub(%_width%,1),3,1,1,brushcolor-$get(panelbg) pencolor-null)
$drawrect(0,57,1,1,brushcolor-$get(panelbg) pencolor-null)
$drawrect($sub(%_width%,1),57,1,1,brushcolor-$get(panelbg) pencolor-null)

$if(%isplaying%,

// progress bar
$drawrect($muldiv(%_width%,15,100),32,$muldiv(%_width%,70,100),8,brushcolor-null pencolor-215-215-215)
$drawrect($add($muldiv(%_width%,15,100),2),34,$ifgreater($muldiv($sub($muldiv(%_width%,70,100),4),%playback_time_seconds%,%length_seconds%),0,$muldiv($sub($muldiv(%_width%,70,100),4),%playback_time_seconds%,%length_seconds%),1),4,brushcolor-200-200-200 pencolor-null)
$alignabs($sub($muldiv(%_width%,15,100),33),30,35,13,center,middle)$font(verdana,6,bold,215-215-215)$if2(%playback_time%,0:00)
$alignabs($muldiv(%_width%,85,100),30,33,13,center,middle)$font(verdana,6,bold,215-215-215)$if2(%length%,0:00)
$alignabs(20,9,$sub(%_width%,28),16,center,middle)$font(verdana,7,bold,215-215-215)

// interchanging text
$select($add($mod(%playback_time_seconds%,15),1),
$get(str1),$get(str1),$get(str1),$get(str1),$get(str1),
$get(str2),$get(str2),$get(str2),$get(str2),$get(str2),
$get(str3),$get(str3),$get(str3),$get(str3),$get(str3))


// properties & open dir
$button($sub(%_width%,17),21,0,0,11,11,$get(imagedir)info.png,$get(imagedir)infoh.png,properties,)
$button(8,21,0,0,11,11,$get(imagedir)dir.png,$get(imagedir)dirh.png,open directory,)

,

// not playing..
$alignabs($div($sub(%_width%,50),2),6,50,45,center,middle)
$font(wingdings,20,bold,170-170-170)z

)

BOTTOM TRACKINFO

$puts(panelbg,245-245-245)
$puts(imagedir,'C:\Program Files\foobar2000\images\delta\')

// background
$drawrect(,,,,brushcolor-$get(panelbg) pencolor-null)
$imageabs2(,,,,,,0,3,$get(imagedir)trackinfo2.png,)

// Prev
$button(14,8,0,0,18,16,$get(imagedir)mprev.png,$get(imagedir)mprevh.png,previous,)
// Play & Pause
$button(34,8,0,0,18,16,
$if($or(%ispaused%,$not(%isplaying%)),$get(imagedir)mplay.png,$get(imagedir)mpause.png),
$if($or(%ispaused%,$not(%isplaying%)),$get(imagedir)mplayh.png,$get(imagedir)mpauseh.png),
$if($or(%ispaused%,$not(%isplaying%)),play,pause)
,)
// Stop
$button(54,8,0,0,18,16,$get(imagedir)mstop.png,$get(imagedir)mstoph.png,stop,)
// Next
$button(74,8,0,0,18,16,$get(imagedir)mnext.png,$get(imagedir)mnexth.png,next,)


$if(%isplaying%,

//info
$alignabs(20,8,$sub(%_width%,50),16,right,middle)$font(Zurich Cn BT,9,bold,215-215-215)
$upper(
%album%  '//'  %codec% @  %__bitrate% Kbps
)

,

// not playing..


)

GROUP BY

$if2($if(%totaltracks%,%album%),0)

ITEM DISPLAY

$puts(imagedir,'C:\Program Files\foobar2000\images\delta\')
$puts(coverstring,$replace(%path%,%filename_ext%,cover.jpg))

// background
$if($stricmp($mod(%list_index%,2),1),$drawrect(,,,,brushcolor-240-240-240 pencolor-null))
$drawrect(-1,-1,$add(%_width%,2),19,brushcolor-null pencolor-220-220-220)
$if(%_selected%,$imageabs2(,,,,,,,,$get(imagedir)selected.png,))
$if(%isplaying%,$imageabs2(,,,,,,,,$get(imagedir)playing.png,))
$if(%_focused%,$imageabs2(,,,,,,,,$get(imagedir)focused.png,))


$if($and($greater(7,%_itemindex%),$greater(%_itemcount%,5),%totaltracks%),

// coverart
$drawrect(-1,$sub(17,$mul(%_itemindex%,18)),109,109,brushcolor-255-255-255 pencolor-220-220-220)
$imageabs2(97,97,,,,,5,$sub(23,$mul(%_itemindex%,18)),$get(imagedir)nocover.png,)
$imageabs2(97,97,,,,,5,$sub(23,$mul(%_itemindex%,18)),$get(coverstring),)
$drawrect(5,$sub(23,$mul(%_itemindex%,18)),97,97,brushcolor-null pencolor-200-200-200)
$drawrect(6,$sub(24,$mul(%_itemindex%,18)),95,95,brushcolor-null pencolor-255-255-255 alpha-200)

// info for files with coverart
$if(%isplaying%,$alignabs(113,,40,40,,)$font(webdings,9,,110-110-110)$if(%ispaused%,;,4),
$alignabs(109,,22,18,center,middle)$font(verdana,6,bold,180-180-180)$num(%tracknumber%,2).)
$alignabs(131,,$sub(%_width%,270),18,left,middle)$font(calibri,8,bold,$if(%isplaying%,110-110-110,130-130-130))%title%
$alignabs($sub(%_width%,142),,50,18,right,middle)$font(calibri,8,bold,$if(%isplaying%,130-160-180,180-180-180))[%play_counter%x  ∙  ]$font(verdana,6,bold,$if(%isplaying%,80-80-80,120-120-120))$if(%isplaying%,%playback_time_remaining%,%length%),

// info for without coverart
$if(%isplaying%,$alignabs(4,,40,40,,)$font(webdings,9,,90-120-140)$if(%ispaused%,;,4),
$alignabs(1,,22,18,center,middle)$font(verdana,6,bold,180-180-180)$if(%totaltracks%,%tracknumber%.,$num(%_itemindex%,2).))
$alignabs(23,,$sub(%_width%,162),18,left,middle)$font(calibri,8,bold,$if(%isplaying%,80-80-80,130-130-130))$if(%totaltracks%,,[%artist% - ])%title%$font(calibri,8,bold,$if(%isplaying%,80-80-80,120-120-120))$if(%totaltracks%,,[ '('%genre%[',' %date%]')'])
$alignabs($sub(%_width%,142),,50,18,right,middle)$font(calibri,8,bold,$if(%isplaying%,80-80-80,130-130-130))[%play_counter%x  ∙  ]$font(verdana,6,bold,$if(%isplaying%,80-80-80,120-120-120))$if(%isplaying%,%playback_time_remaining%,%length%))

// autorating display
$if(%rating%,$puts(rating,%rating%),$puts(rating,$sub(%play_counter%,$div($cwb_datediff(%cwb_systemdatetime%,%first_played%),28))))
$if($greater($get(rating),5),$puts(rating,5))
$if($greater(0,$get(rating)),$puts(rating,0))
$alignabs($sub(%_width%,93),1,76,18,center,middle)$font(wingdings,10,,$if(%isplaying%,130-130-130,150-150-150))$repeat(?,$get(rating))$font(wingdings,10,,$if(%isplaying%,130-130-130,220-220-220))$repeat(?,$sub(5,$get(rating)))

// replaygain check
$alignabs($sub(%_width%,14),1,10,18,center,middle)$font(wingdings,6,,$if($or(%__replaygain_album_gain%,%__replaygain_track_gain%),$if(%isplaying%,80-80-80,180-180-180),$if(%isplaying%,255-255-255,255-255-255)))v

GROUP DISPLAY

$puts(imagedir,'C:\Program Files\foobar2000\images\delta\')

// background
$imageabs2(,,,,,,,,$get(imagedir)whiteheader.png,)

// top row
$alignabs(22,4,$sub(%_width%,80),20,,)$font(Zurich Cn Bt,9,bold uppercase,170-170-170)
$if(%totaltracks%,%album% / %date%,single tracks)

// bottom row
$alignabs(22,15,$sub(%_width%,80),20,,)$font(Zurich Cn Bt,8,bold,190-190-190)
$if($or($stricmp(%playlist_name%,most played songs),$stricmp(%playlist_name%,by rating),$not(%totaltracks%)),assorted artists,%artist%)

// right side
$if(%totaltracks%,
$alignabs($sub(%_width%,80),3,75,10,right,)$font(Kroeger 05_55,9,,190-190-190)%_itemcount% tracks
$alignabs($sub(%_width%,80),11,75,10,right,)$font(Kroeger 05_55,9,,190-190-190)$replace(%filename_ext%,%filename%.,)[ %codec_profile%]$if($or($strstr(%codec_profile%,VBR),%__bitrate_nominal%),, %__bitrate%kbps)
$alignabs($sub(%_width%,80),19,75,10,right,)$font(Kroeger 05_55,9,,190-190-190)%genre%
,
$alignabs($sub(%_width%,80),11,75,10,right,)$font(Kroeger 05_55,9,,230-230-230)%_itemcount% tracks
)

// little arrow
$alignabs(,1,20,32,center,middle)$font(Wingdings 3,6,,190-190-190)q

Row Height: 16

Group Rows: 2

Images go into: >> "\foobar root\images\"

Delta.zip

Mind to give out the code for the up trackinfo?

Single Column Playlist

Row height: 18

Group rows: 2

Group By:

$if(%totaltracks%,%album%,-)

Item Display:

$puts(imagedir,'E:\Program\foobar2000\images\ditt-slan\')
$puts(coverstring,$replace(%path%,%filename_ext%,folder.jpg))

// background
$if($stricmp($mod(%list_index%,2),1),$drawrect(,,,,brushcolor-240-240-240 pencolor-null))
$drawrect(-1,-1,$add(%_width%,2),19,brushcolor-248-248-248 pencolor-null)
$if(%_selected%,$if($stricmp($mod(%list_index%,2),1),$drawrect(,,,,brushcolor-200-200-200 pencolor-null),$drawrect(,,,,brushcolor-210-210-210 pencolor-null))$if($stricmp($mod(%list_index%,2),1),$drawrect(,,,,brushcolor-null pencolor-190-190-190)))
$if(%isplaying%,$imageabs2(,,,,,,,,$get(imagedir)playing.png,))
$if(%_focused%,$drawrect(-1,,$add(%_width%,2),,brushcolor-null pencolor-null))


$if($and($greater(7,%_itemindex%),$greater(%_itemcount%,5),%totaltracks%),

// coverart
$drawrect(-1,$sub(17,$mul(%_itemindex%,18)),109,109,brushcolor-248-248-248 pencolor-null)
$imageabs2(97,97,,,,,5,$sub(23,$mul(%_itemindex%,18)),$get(imagedir)nocover.gif,)
$imageabs2(97,97,,,,,5,$sub(23,$mul(%_itemindex%,18)),$get(coverstring),)
$drawrect(5,$sub(23,$mul(%_itemindex%,18)),97,97,brushcolor-null pencolor-200-200-200)
$drawrect(6,$sub(24,$mul(%_itemindex%,18)),95,95,brushcolor-null pencolor-255-255-255 alpha-200)

// info for files with coverart
$if(%isplaying%,$alignabs(113,,40,40,,)$font(webdings,9,,90-120-140)$if(%ispaused%,;,4),
$alignabs(109,,22,18,center,middle)$font(calibri,8,bold,180-180-180)$num(%tracknumber%,2).)
$alignabs(131,,$sub(%_width%,270),18,left,middle)$font(calibri,8,bold,$if(%isplaying%,60-60-60,90-90-90))%title%
$alignabs($sub(%_width%,60),,50,18,right,middle)$font(calibri,8,bold,$if(%isplaying%,130-160-180,180-180-180))[%play_counter%x  ?  ]$font(calibri,8,bold,$if(%isplaying%,80-80-80,120-120-120))$if(%isplaying%,%playback_time_remaining%,%length%),

// info for without coverart
$if(%isplaying%,$alignabs(4,,40,40,,)$font(webdings,9,,90-120-140)$if(%ispaused%,;,4),
$alignabs(1,,22,18,center,middle)$font(calibri,8,bold,180-180-180)$if(%totaltracks%,%tracknumber%.,$num(%_itemindex%,2).))
$alignabs(23,,$sub(%_width%,162),18,left,middle)$font(calibri,8,bold,$if(%isplaying%,60-60-60,90-90-90))$if(%totaltracks%,,[%artist% - ])%title%$font(calibri,8,bold lowercase,$if(%isplaying%,120-150-170,170-170-170))$if(%totaltracks%,,[ '('%genre%[',' %date%]')'])
$alignabs($sub(%_width%,60),,50,18,right,middle)$font(calibri,8,bold,$if(%isplaying%,130-160-180,180-180-180))[%play_counter%x  ?  ]$font(calibri,8,bold,$if(%isplaying%,80-80-80,120-120-120))$if(%isplaying%,%playback_time_remaining%,%length%))

Group Display:

$puts(imagedir,'E:\Program\foobar2000\images\ditt-slan\')

// background
$imageabs2(,,,,,,,,$get(imagedir)header.png,)

// top row
$alignabs(6,4,$sub(%_width%,80),20,,)$font(Calibri,9,bold uppercase,90-90-90)
$if(%totaltracks%,%album% / %date%,single tracks)

// bottom row
$alignabs(6,19,$sub(%_width%,80),20,,)$font(Calibri,9,bold,130-130-130)
$if($or($stricmp(%playlist_name%,most played songs),$stricmp(%playlist_name%,by rating),$not(%totaltracks%)),assorted artists,%artist%)

// right side
$if(%totaltracks%,
$alignabs($sub(%_width%,80),4,75,10,right,)$font(Kroeger 05_55,9,,170-170-170)%_itemcount% tracks
$alignabs($sub(%_width%,80),12,75,10,right,)$font(Kroeger 05_55,9,,180-180-180)$replace(%filename_ext%,%filename%.,)[ %codec_profile%]$if($or($strstr(%codec_profile%,VBR),%__bitrate_nominal%),, %__bitrate%kbps)
$alignabs($sub(%_width%,80),20,75,10,right,)$font(Kroeger 05_55,9,,190-190-190)%genre%
,
$alignabs($sub(%_width%,80),12,75,10,right,)$font(Kroeger 05_55,9,,230-230-230)%_itemcount% tracks
)

// little arrow
$alignabs(,1,20,36,center,middle)$font(Wingdings 3,6,,120-120-120)

Track Info Mod 1b>

$puts(imagedir,'E:\Program\foobar2000\images\ditt-slan\')

$imageabs2(,,,,,,$div($sub(%_width%,800),2),0,$get(imagedir)trackinfo1.png,)

$button($div($sub(%_width%,39),2),20,0,0,39,39,$if($or(%ispaused%,$not(%isplaying%)),$get(imagedir)play.png,$get(imagedir)pause.png),$if($or(%ispaused%,$not(%isplaying%)),$get(imagedir)playh.png,$get(imagedir)pauseh.png),$if($or(%ispaused%,$not(%isplaying%)),play,pause),)
$button($div($sub(%_width%,119),2),24,0,0,31,32,$get(imagedir)prev.png,$get(imagedir)prevh.png,previous,)
$button($div($add(%_width%,55),2),24,0,0,31,32,$get(imagedir)next.png,$get(imagedir)nexth.png,next,)

// progress bar
$drawrect(10,75,$sub(%_width%,20),8,brushcolor-null pencolor-120-120-120),)
// PerSecond
$if(%isplaying%,
$puts(progress,$muldiv(%playback_time_seconds%,$sub(%_width%,24),%length_seconds%))
$drawrect(10,75,$sub(%_width%,20),8,brushcolor-null pencolor-120-120-120),)
$ifgreater($get(progress),0,$padding(9,75)$drawrect(3,2,$get(progress),4,brushcolor-90-90-90 pencolor-nulll),)

Track Info Mod 2b>

$puts(imagedir,'E:\Program\foobar2000\images\ditt-slan\')

$imageabs2(,,,,,,$div($sub(%_width%,800),2),0,$get(imagedir)trackinfo2.png,)

$if(%_isplaying%,
$font(calibri,12,shadow,240-240-240)
$alignabs(0,15,%_width%,30,center,)%artist%
$alignabs(0,38,%_width%,20,center,)
$font(calibri,8,boldshadow,170-230-250)"%title%"
$alignabs(0,55,%_width%,20,center,)
$font(calibri,8,boldshadow,180-180-180)from 
$font(calibri,8,boldshadow,230-230-230)"%album%"
$alignabs(0,61,%_width%,20,center,)
$font(Calibri,8,boldshadow,180-180-180)
$if($strcmp(%play_counter%,?),
)
,
$font(calibri,12,shadow,170-170-170)
$alignabs(0,25,%_width%,30,center,)Foobar2000
$alignabs(0,46,%_width%,20,center,)
$font(calibri,9,boldshadow,170-230-250)Music Player
$alignabs(0,68,%_width%,20,center,)
$font(calibri,8,boldshadow,210-210-210)v0.9.3
)

Images: http://home.no/lassekongo83/fb2k/ditt-slan.zip

Make sure you change the path in the code to where you put the images.

This part: $puts(imagedir,'E:\Program\foobar2000\images\ditt-slan\')

Also make sure you have these fonts:

Kroeger 05_55

Calibri

Get the latest Track Info Mod and try this again.

$button($div($sub(%_width%,39),2),20,0,0,39,39,$if($or(%ispaused%,$not(%isplaying%)),$get(imagedir)play.png,$get(imagedir)pause.png),$if($or(%ispaused%,$not(%isplaying%)),$get(imagedir)playh.png,$get(imagedir)pauseh.png),$if($or(%ispaused%,$not(%isplaying%)),play,pause),)
$button($div($sub(%_width%,119),2),24,0,0,31,32,$get(imagedir)prev.png,$get(imagedir)prevh.png,previous,)
$button($div($add(%_width%,55),2),24,0,0,31,32,$get(imagedir)next.png,$get(imagedir)nexth.png,next,)

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • I just started using Teams (and “New” Oiutlook) at work (instead of Slack) and both are truly abysmal pieces of software.
    • If you are willing to go to approx $200, then as mentioned in your other thread I think a refurbished Pixel 8 will be a great deal that will last you for years. I recently recommended that to someone at work, he was on a strict £200 budget, which got him an excellent conditioned refurbished Pixel 8 here. He's since told me its the best phone he's ever had and feels its a massive upgrade over his old Samsung A series device. I don't know the sites which deal in refurbished devices in the US, however I’m sure you will have some options like we do here. Failing that Ebay is also quite good in my experience. If you wanted something a bit cheaper, then you could maybe go for an older Pixel 7, these will still get security updates until the end of 2027. Even after that you have good third party OS support from LineageOS. It doesn't have to be a Pixel though, you can buy many older devices for a good deal that would be better than a new $100 phone and flash LineageOS to them: https://wiki.lineageos.org/devices/
    • I don't use one drive, but then I don't use any cloud storage, not even Icloud on my mac. If I did use cloud storage, then I would not use One drive, not because there is anything wrong with it, but because I can use Icloud. The only reason I see to use one drive is if your job requires you to have access to it
    • Not built in, which is not a bad thing. There are ways of adding cloud storage to it, Dropbox is the most well know that also have a client for Linux, but there are others.
  • Recent Achievements

    • First Post
      DragonOfMercy earned a badge
      First Post
    • First Post
      bella52 earned a badge
      First Post
    • Reacting Well
      Techinmay earned a badge
      Reacting Well
    • Collaborator
      WndSks went up a rank
      Collaborator
    • One Month Later
      Sopa flores earned a badge
      One Month Later
  • Popular Contributors

    1. 1
      +primortal
      508
    2. 2
      PsYcHoKiLLa
      210
    3. 3
      +Edouard
      155
    4. 4
      Steven P.
      87
    5. 5
      ATLien_0
      79
  • Tell a friend

    Love Neowin? Tell a friend!