winamp/Src/Winamp/draw_vw.cpp

231 lines
4.8 KiB
C++

/** (c) Nullsoft, Inc. C O N F I D E N T I A L
** Filename:
** Project:
** Description:
** Author:
** Created:
**/
#include "Main.h"
#include "draw.h"
#include "resource.h"
#include "WADrawDC.h"
HBITMAP vwMainBM;
extern "C" int vw_init=0;
void draw_vw_init()
{
if (vw_init)
draw_vw_kill();
vw_init=1;
vwMainBM = draw_LBitmap(MAKEINTRESOURCE(IDB_VIDEO),L"video.bmp");
}
void draw_vw_kill()
{
if (!vw_init)
return;
DeleteObject(vwMainBM);
}
void draw_vw_mbuts(int whichb)
{
if (!disable_skin_borders && hVideoWindow && vw_init)
{
int numb=5;
int x;
WADrawDC hdcout(hVideoWindow);
do_palmode(hdcout);
setSrcBM(vwMainBM);
for (x = 0; x < numb; x ++)
{
int nx=9+x*15;
int ny=51;
if (x==whichb)
{
nx+=158-9;
ny=42;
}
BitBlt(hdcout,9+x*15,config_video_height-29,15,18,bmDC,nx,ny,SRCCOPY);
}
unsetSrcBM();
}
}
void draw_vw_tbar(int state)
{
if (!disable_skin_borders && hVideoWindow && vw_init)
{
WADrawDC hdcout(hVideoWindow);
state = state?0:21;
do_palmode(hdcout);
setSrcBM(vwMainBM);
{
int nt;
int xp=0;
BitBlt(hdcout,xp,0,25,20,bmDC,0,state,SRCCOPY);
xp+=25;
nt = (config_video_width - 25 - 25 - 100)/25;
if (nt)
{
if (nt&1)
{
BitBlt(hdcout,xp,0,12,20,bmDC,127,state,SRCCOPY);
xp+=12;
}
nt/=2;
while (nt-->0)
{
BitBlt(hdcout,xp,0,25,20,bmDC,127,state,SRCCOPY);
xp+=25;
}
}
BitBlt(hdcout,xp,0,100,20,bmDC,26,state,SRCCOPY);
xp+=100;
nt = (config_video_width - 25 - 25 - 100)/25;
if (nt)
{
if (nt&1)
{
BitBlt(hdcout,xp,0,13,20,bmDC,127,state,SRCCOPY);
xp+=13;
}
nt/=2;
while (nt-->0)
{
BitBlt(hdcout,xp,0,25,20,bmDC,127,state,SRCCOPY);
xp+=25;
}
}
nt = (config_video_width - 25 -25 - 100) %25;
if (nt)
{
StretchBlt(hdcout,xp,0,nt,20,bmDC,127,state,25,20,SRCCOPY);
xp+=nt;
}
BitBlt(hdcout,xp,0,25,20,bmDC,153,state,SRCCOPY);
}
unsetSrcBM();
}
}
void draw_vw(HDC hdcout)
{
if (!hVideoWindow || !vw_init)
return;
do_palmode(hdcout);
draw_vw_tbar(GetForegroundWindow()==hVideoWindow?1:(config_hilite?0:1));
if (!disable_skin_borders)
{
setSrcBM(vwMainBM);
{
int y=(config_video_height-20-38)/29;
int yp=20,x,xp;
while (y-->0)
{
BitBlt(hdcout,0,yp,11,29,bmDC,127,42,SRCCOPY);
BitBlt(hdcout,config_video_width-8,yp,8,29,bmDC,139,42,SRCCOPY);
yp += 29;
}
y=(config_video_height-20-38)%29;
if (y)
{
StretchBlt(hdcout,0,yp,11,y,bmDC,127,42,11,29,SRCCOPY);
StretchBlt(hdcout,config_video_width-8,yp,8,y,bmDC,139,42,8,29,SRCCOPY);
yp += y;
}
BitBlt(hdcout,0,yp,125,38,bmDC,0,42,SRCCOPY);
x=(config_video_width-125-125)/25;
xp=125;
while (x-->0)
{
BitBlt(hdcout,xp,yp,25,38,bmDC,127,81,SRCCOPY);
xp+=25;
}
x=(config_video_width-125-125)%25;
if (x)
{
StretchBlt(hdcout,xp,yp,x,38,bmDC,127,81,25,38,SRCCOPY);
xp+=x;
}
BitBlt(hdcout,xp,yp,125,38,bmDC,0,81,SRCCOPY);
draw_vw_info(NULL,0);
}
unsetSrcBM();
}
}
wchar_t draw_vw_info_lastb[512] = {0};
void draw_vw_info(wchar_t *t, int erase)
{
if (!disable_skin_borders && hVideoWindow&&vw_init)
{
WADrawDC hdcout(hVideoWindow);
if (!t) t=draw_vw_info_lastb;
else lstrcpynW(draw_vw_info_lastb,t,sizeof(draw_vw_info_lastb));
if (erase)
{
//int y=(config_video_height-20-38)/29;
int yp=config_video_height-38,x,xp;
do_palmode(hdcout);
setSrcBM(vwMainBM);
BitBlt(hdcout,0,yp,125,38,bmDC,0,42,SRCCOPY);
x=(config_video_width-125-125)/25;
xp=125;
while (x-->0)
{
BitBlt(hdcout,xp,yp,25,38,bmDC,127,81,SRCCOPY);
xp+=25;
}
x=(config_video_width-125-125)%25;
if (x)
{
StretchBlt(hdcout,xp,yp,x,38,bmDC,127,81,25,38,SRCCOPY);
xp+=x;
}
BitBlt(hdcout,xp,yp,125,38,bmDC,0,81,SRCCOPY);
unsetSrcBM();
}
RECT r={92,config_video_height-27,config_video_width-25,config_video_height-13};
HGDIOBJ oldFont=SelectObject(hdcout,mfont);
SetTextColor(hdcout,Skin_PLColors[4]);
SetBkColor(hdcout,Skin_PLColors[5]);
DrawTextW(hdcout,t,-1,&r,DT_SINGLELINE|DT_LEFT|DT_NOPREFIX);
SelectObject(hdcout,oldFont);
}
}
void draw_paint_vw(HWND hwnd)
{
if (!hVideoWindow || !vw_init)
return;
PAINTSTRUCT ps;
RECT r;
EnterCriticalSection(&g_mainwndcs);
draw_vw(BeginPaint(hwnd,&ps));
r=ps.rcPaint;
EndPaint(hwnd,&ps);
LeaveCriticalSection(&g_mainwndcs);
}
void draw_vw_tbutton(int b3)
{
if (!disable_skin_borders && hVideoWindow && vw_init)
{
WADrawDC hdcout(hVideoWindow);
do_palmode(hdcout);
setSrcBM(vwMainBM);
if (!b3)
BitBlt(hdcout,config_video_width-11,3,9,9,bmDC,167,3,SRCCOPY);
else
BitBlt(hdcout,config_video_width-11,3,9,9,bmDC,148,42,SRCCOPY);
unsetSrcBM();
}
}